Framework/Spring Boot

[Spring Boot] MyBatis의 SqlSessionFactory와 SqlSessionTemplate

꽁치_로그 2025. 1. 18. 20:54

🚀 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를 더 효과적으로 사용할 수 있습니다.
반응형