Chapter 5. 데이터베이스 연결 및 세션 생성
마이바티스를 활용하려면 먼저 데이터베이스에 연결해야 합니다. 이 장에서는 데이터베이스 연결 정보를 설정하고, 세션을 생성하는 방법에 대해 다룹니다. SQL을 실행하기 위한 기본적인 준비단계를 배우게 됩니다.
[Chapter 5. 데이터베이스 연결 및 세션 생성]
5.1. 드라이버 및 연결 정보 설정
5.1.1. MySQL 연결 정보
5.1.1.1. MySQL JDBC 드라이버 설정
5.1.1.2. MySQL 연결 정보 입력 방법
5.1.2. Oracle 연결 정보
5.1.2.1. Oracle JDBC 드라이버 설정
5.1.2.2. Oracle 연결 정보 입력 방법
5.1.3. PostgreSQL 연결 정보
5.1.3.1. PostgreSQL JDBC 드라이버 설정
5.1.3.2. PostgreSQL 연결 정보 입력 방법
5.2. SqlSessionFactory 생성
5.2.1. SqlSessionFactory 이란?
5.2.1.1. 역할과 중요성
5.2.1.2. SqlSessionFactory vs SqlSession
5.2.2. SqlSessionFactory 인스턴스 생성
5.2.2.1. SqlSessionFactoryBuilder를 이용한 인스턴스 생성
5.2.2.2. mybatis-config.xml 파일을 이용한 인스턴스 생성
5.2.2.3. 인스턴스 생성 시 주의사항
5.2.3. 설정 파일의 역할
5.2.3.1. JDBC 연결 정보 설정
5.2.3.2. 매퍼 설정
5.2.3.3. 트랜잭션 관리 설정
5.2.4. SqlSessionFactory를 통한 SqlSession 생성
5.2.4.1. SqlSession의 역할
5.2.4.2. SqlSession 생성 방법
5.2.4.3. SqlSession 사용 시 주의사항
5.1. 드라이버 및 연결 정보 설정
데이터베이스에 연결하기 위해서는 해당 데이터베이스에 맞는 JDBC(Java Database Connectivity) 드라이버를 설정해야 합니다. 이 드라이버는 데이터베이스와 Java 애플리케이션 사이의 통신을 담당합니다. 또한, 연결 정보는 데이터베이스의 위치, 사용자 이름, 비밀번호 등을 포함합니다.
5.1.1. MySQL 연결 정보
MySQL을 사용하기 위해서는 MySQL JDBC 드라이버를 설정하고 연결 정보를 입력해야 합니다.
5.1.1.1. MySQL JDBC 드라이버 설정
Maven 프로젝트에서는 pom.xml 파일에 아래의 의존성을 추가하여 MySQL JDBC 드라이버를 설정할 수 있습니다.
[예제]
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
5.1.1.2. MySQL 연결 정보 입력 방법
MyBatis 설정 파일(mybatis-config.xml)에서 MySQL 연결 정보를 설정합니다. 아래는 예제입니다.
[예제]
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
</dataSource>
이 예제에서 driver는 MySQL JDBC 드라이버를, url은 연결할 데이터베이스의 URL을, username과 password는 각각 데이터베이스에 접속할 사용자 이름과 비밀번호를 나타냅니다.
5.1.2. Oracle 연결 정보
Oracle을 사용하기 위해서도 JDBC 드라이버를 설정하고 연결 정보를 입력해야 합니다. 아래는 그 방법입니다.
5.1.2.1. Oracle JDBC 드라이버 설정
Maven 프로젝트에서는 pom.xml 파일에 아래의 의존성을 추가하여 Oracle JDBC 드라이버를 설정할 수 있습니다.
[예제]
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
5.1.2.2. Oracle 연결 정보 입력 방법
MyBatis 설정 파일에서 Oracle 연결 정보를 설정합니다. 아래는 예제입니다.
[예제]
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
</dataSource>
5.1.3. PostgreSQL 연결 정보
PostgreSQL을 사용하기 위해서도 JDBC 드라이버를 설정하고 연결 정보를 입력해야 합니다. 아래는 그 방법입니다.
5.1.3.1. PostgreSQL JDBC 드라이버 설정
Maven 프로젝트에서는 pom.xml 파일에 아래의 의존성을 추가하여 PostgreSQL JDBC 드라이버를 설정할 수 있습니다.
[예제]
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
5.1.3.2. PostgreSQL 연결 정보 입력 방법
MyBatis 설정 파일에서 PostgreSQL 연결 정보를 설정합니다. 아래는 예제입니다.
[예제]
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/mydatabase"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
</dataSource>
이 예제에서 driver는 PostgreSQL JDBC 드라이버를, url은 연결할 데이터베이스의 URL을, username과 password는 각각 데이터베이스에 접속할 사용자 이름과 비밀번호를 나타냅니다.
이렇게 각 데이터베이스의 JDBC 드라이버를 설정하고 연결 정보를 입력함으로써 MyBatis를 통해 데이터베이스에 접근할 수 있게 됩니다. JDBC 드라이버와 연결 정보를 올바르게 설정했다면, 이제 MyBatis 세션을 통해 데이터베이스와 상호작용할 수 있습니다.
5.2. SqlSessionFactory 생성
MyBatis에서 데이터베이스와의 모든 상호 작용은 SqlSessionFactory를 통해 이루어집니다. 이는 매우 중요한 객체로, SqlSessionFactory는 SqlSession 객체를 생성하는 역할을 합니다. SqlSession 객체는 SQL 명령을 실행하고 그 결과를 반환하는 역할을 담당합니다. 이 SqlSession 객체는 우리가 데이터베이스와 상호작용하려는 모든 요청에 대해 필요합니다.
5.2.1. SqlSessionFactory 이란?
5.2.1.1. 역할과 중요성
SqlSessionFactory는 데이터베이스와의 연결을 설정하고, 데이터베이스 연결에 필요한 정보를 제공합니다. 또한, SqlSessionFactory를 통해 생성된 SqlSession은 데이터베이스에 대한 작업을 수행하는 데 사용됩니다. 따라서 SqlSessionFactory는 MyBatis의 핵심 요소로, 데이터베이스와의 상호작용을 위해 반드시 생성되어야 합니다.
5.2.1.2. SqlSessionFactory vs SqlSession
SqlSessionFactory는 SqlSession을 생성하는 팩토리 역할을 수행합니다. SqlSessionFactory는 애플리케이션 전체에 단 하나만 존재해야 하며, 여러 스레드에서 공유해서 사용할 수 있습니다. 반면, SqlSession은 데이터베이스 작업을 수행하기 위해 생성되는 개별적인 세션 객체입니다. SqlSession은 작업이 완료되면 반드시 닫아주어야 합니다.
5.2.2. SqlSessionFactory 인스턴스 생성
5.2.2.1. SqlSessionFactoryBuilder를 이용한 인스턴스 생성
SqlSessionFactoryBuilder는 SqlSessionFactory를 생성하기 위해 사용되는 빌더 클래스입니다. 다음은 SqlSessionFactoryBuilder를 이용하여 SqlSessionFactory 인스턴스를 생성하는 예제 코드입니다.
[예제]
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
위 코드에서 "mybatis-config.xml"은 MyBatis 설정 파일의 경로를 의미합니다. 해당 설정 파일은 SqlSessionFactory를 생성하는 데 필요한 정보를 포함하고 있습니다.
5.2.2.2. mybatis-config.xml 파일을 이용한 인스턴스 생성
SqlSessionFactory 인스턴스는 mybatis-config.xml 파일을 이용하여도 생성할 수 있습니다. 다음은 해당 방법을 사용한 예제 코드입니다.
[예제]
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
5.2.2.3. 인스턴스 생성 시 주의사항
SqlSessionFactory 인스턴스를 생성할 때 주의해야 할 사항들이 있습니다. 첫째, SqlSessionFactory 인스턴스는 애플리케이션 전체에서 공유되어야 하므로 싱글톤으로 관리되어야 합니다. 둘째, SqlSessionFactory 인스턴스 생성에는 리소스 파일의 경로나 리더 객체가 필요하며, 이를 올바르게 지정해주어야 합니다.
5.2.3. 설정 파일의 역할
5.2.3.1. JDBC 연결 정보 설정
mybatis-config.xml 파일은 데이터베이스 연결 정보를 설정하는 데 사용됩니다. 다음은 JDBC 연결 정보를 설정하는 예제 코드입니다.
[예제]
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
</configuration>
위 코드에서 driver, url, username, password는 사용자의 데이터베이스 설정에 맞게 수정되어야 합니다. 이 정보는 MyBatis가 데이터베이스에 연결하기 위해 사용됩니다.
5.2.3.2. 매퍼 설정
매퍼는 SQL 쿼리와 자바 메서드를 매핑하는 역할을 합니다. mybatis-config.xml 파일에서 매퍼를 설정할 수 있습니다. 다음은 매퍼 설정 예제 코드입니다.
[예제]
<configuration>
<mappers>
<mapper resource="com/example/mapper/EmployeeMapper.xml" />
</mappers>
</configuration>
위 코드에서 com/example/mapper/EmployeeMapper.xml은 매퍼 파일의 경로를 의미합니다. 이 파일은 SQL 쿼리와 자바 메서드 간의 매핑 정보를 정의합니다.
5.2.3.3. 트랜잭션 관리 설정
트랜잭션 관리는 데이터베이스 작업의 원자성과 일관성을 보장하기 위해 중요한 요소입니다. mybatis-config.xml 파일에서 트랜잭션 관리 방식을 설정할 수 있습니다. 다음은 트랜잭션 관리 설정 예제 코드입니다.
[예제]
<configuration>
<transactionManager type="JDBC" />
</configuration>
위 코드에서 type 속성은 트랜잭션 관리 방식을 지정합니다. 위 예제에서는 JDBC를 사용하는 방식으로 설정되어 있습니다.
5.2.4. SqlSessionFactory를 통한 SqlSession 생성
5.2.4.1. SqlSession의 역할
SqlSession은 데이터베이스 작업을 수행하는 데 사용되는 인터페이스입니다. SqlSession은 매번 필요할 때마다 SqlSessionFactory를 통해 생성되며, 작업이 완료되면 반드시 닫아주어야 합니다.
5.2.4.2. SqlSession 생성 방법
SqlSessionFactory를 통해 SqlSession을 생성하는 방법은 다음과 같습니다.
[예제]
SqlSession sqlSession = sqlSessionFactory.openSession();
위 코드를 실행하면 SqlSessionFactory에서 SqlSession 인스턴스를 생성하여 반환합니다. 이후 생성된 SqlSession을 사용하여 데이터베이스 작업을 수행할 수 있습니다.
5.2.4.3. SqlSession 사용 시 주의사항
SqlSession을 사용할 때 주의해야 할 사항들이 있습니다.
- SqlSession은 작업이 완료된 후에 반드시 닫아주어야 합니다. 닫힌 SqlSession은 더 이상 사용할 수 없습니다.
[예제]
sqlSession.close();
- SqlSession은 스레드 간에 공유되지 않아야 합니다. 따라서 각 스레드마다 독립적인 SqlSession 인스턴스를 생성하여 사용해야 합니다.
- SqlSession은 가능한 한 빨리 생성하고, 작업이 완료되면 즉시 닫아주어야 합니다. 긴 시간 동안 SqlSession을 유지하는 것은 리소스 낭비로 이어질 수 있습니다.
- SqlSession은 자동 커밋이나 롤백을 지원합니다. 기본적으로 자동 커밋이 활성화되어 있으며, 여러 작업을 하나의 트랜잭션으로 묶고 싶다면 수동 커밋 모드로 변경해야 합니다.
[예제]
sqlSession.commit(); // 수동 커밋
sqlSession.rollback(); // 롤백
위의 내용을 바탕으로 초보자가 이해할 수 있도록 예제 코드를 작성해 보겠습니다.
[예제]
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 데이터베이스 작업 수행
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = new Employee("John Doe", "john.doe@example.com");
employeeMapper.insertEmployee(employee);
sqlSession.commit();
// 데이터베이스 작업 완료 후 SqlSession 닫기
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
위의 예제 코드는 MyBatis를 사용하여 SqlSessionFactory를 생성하고, SqlSession을 통해 데이터베이스 작업을 수행하는 간단한 예제입니다. EmployeeMapper는 매퍼 인터페이스로, insertEmployee 메서드를 사용하여 새로운 직원 데이터를 데이터베이스에 삽입합니다. 작업이 완료된 후에는 SqlSession을 닫아주어 리소스를 해제합니다.
2023.05.16 - [GD's IT Lectures : 기초부터 시리즈/마이바티스(MyBatis) 기초부터 ~] - [마이바티스(MyBatis)] 동적 SQL
'GD's IT Lectures : 기초부터 시리즈 > 마이바티스(MyBatis) 기초부터 ~' 카테고리의 다른 글
[마이바티스(MyBatis)] 트랜잭션 관리 (0) | 2023.05.16 |
---|---|
[마이바티스(MyBatis)] DAO (Data Access Object) 작성 (0) | 2023.05.16 |
[마이바티스(MyBatis)] 동적 SQL (0) | 2023.05.16 |
[마이바티스(MyBatis)] SQL 매핑 파일 작성 (0) | 2023.05.16 |
[마이바티스(MyBatis)] 환경 설정 (0) | 2023.05.16 |
댓글