🚀 SqlSessionFactory란?
SqlSessionFactory는 SqlSession을 생성하는 공장입니다.
역할
- 데이터베이스와 상호작용하기 위해 필요한 SqlSession 객체를 생성합니다.
- 데이터베이스 설정 정보(예: JDBC URL, 사용자 이름, 비밀번호)를 기반으로 SqlSession을 생성합니다.
특징
- 데이터베이스 연결: SqlSessionFactory를 통해 데이터베이스 연결과 SQL 실행을 담당할 SqlSession을 생성합니다.
- 수동 관리: 개발자가 직접 SqlSession을 열고 닫아야 하며, 트랜잭션도 명시적으로 관리해야 합니다.
사용 예시
1
2
3
|
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession(); // SqlSession 생성
|
cs |
비유
SqlSessionFactory는 자동차 공장과 같으며, SqlSession은 공장에서 만들어지는 자동차와 같습니다. 공장이 있어야 자동차를 생산할 수 있듯이, SqlSessionFactory가 있어야 SqlSession을 생성할 수 있습니다.
🚀 SqlSessionTemplate란?
SqlSessionTemplate는 SqlSession을 안전하고 편리하게 관리해주는 Spring의 구현체입니다.
역할
- Spring 환경에서 MyBatis를 사용할 때, SqlSession을 대신 관리하며 데이터베이스 작업을 수행합니다.
- 트랜잭션 관리와 스레드 안전성을 보장합니다.
특징
- 스레드 안전: 여러 스레드에서 동시에 사용해도 안전하게 동작합니다.
- Spring 통합: Spring의 트랜잭션 관리 기능과 연동되므로, 별도로 commit이나 rollback을 호출할 필요가 없습니다.
- 리소스 누수 방지: SqlSession을 직접 닫지 않아도 Spring이 자동으로 처리합니다.
사용 예시
1
2
3
4
5
6
|
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public List<User> getAllUsers() {
return sqlSessionTemplate.selectList("UserMapper.selectAllUsers");
}
|
cs |
비유
SqlSessionTemplate은 자동 변속기와 같습니다. 운전자가 일일이 기어를 변속하지 않아도 안전하고 편리하게 주행할 수 있도록 돕습니다.
🚀 SqlSessionFactory와 SqlSessionTemplate의 관계
- SqlSessionFactory는 SqlSession을 생성하는 역할을 합니다.
- SqlSessionTemplate은 내부적으로 SqlSessionFactory를 사용하여 SqlSession을 생성하고, 이를 대신 관리합니다
🚀 비교
구분 | SqlSessionFactory | SqlSessionTemplate |
역할 | SqlSession 생성 | SqlSession 관리 및 실행 |
스레드 안정성 | 보장하지 않음 | 스레드 안정 |
Spring 통합 | X | O |
트랙잭션 관리 | 수동으로 관리 | Spring이 자동 관리 |
사용 환경 | Mybatis 단독 | Spring + MyBatis 통합 환경 |
🚀 결론
- MyBatis를 단독으로 사용할 경우 SqlSessionFactory와 SqlSession을 직접 관리해야 합니다.
- Spring과 함께 사용할 경우, SqlSessionTemplate을 사용하는 것이 더 안전하고 효율적입니다.
- 두 개념의 차이를 이해하면 MyBatis를 더 효과적으로 사용할 수 있습니다.
반응형
'Framework > Spring Boot' 카테고리의 다른 글
[Spring Boot] AbstractRoutingDataSource (0) | 2025.01.18 |
---|---|
[Spring Boot] Spring AOP를 활용한 Logging (0) | 2024.04.21 |
[Spring Boot] 자주 쓰이는 Spring Boot Annotation (Controller, Service, Model) (0) | 2024.04.21 |
[Spring Boot] @ExceptionHandler, @ControllerAdvice (Exception 공통 처리) (0) | 2024.03.09 |
[Spring Boot] Filter, Interceptor, AOP 차이 및 정리 (0) | 2024.03.08 |