집가는데 친구가 이런 질문을 던졌다.
설명해주는김에
마이바티스를 예제로 들어서 설계 관련 내용을 써보았다.
우선 위에 질문에 대한 정답은
SqlSessionFactoryBuilder는 개발자들을 위한 ,단순히 가독성을 좋은 소스코드를 작성하기위한
객체이다.
이 객체는 서버를 최초 1회 실행시에 SqlSessionFactory를 생성하는데 한번 쓰이고
사라지는 객체이다.
이거 이외에 설명을 좀 길게하려했는다.
한번의 db 요청하려면 SqlSession를 사용해야한다 써야된다.
Session이란 인스턴스안에 있는 논리적인 실체로 현재 유저의 로그인 상태를 말한다
우리가 서블릿 공부할때 쓰는 Session Cookie 과 같은 그 세션의 개념이다.
즉 JDBC 프로그래밍에서
Connection con= DriverManager.getConnection(url, id, pw);
이코드로 Db에 접속해있는 하나의 논리적인 연결 상태를 의미하는것
Conntection이란 단순히 물리적(네트워크)인 연결을 말하는 것
SqlSession이란 RDB에 인증을 거친 논리적인 연결 상태를 말하는 것이다.
하나의 SqlSession을 만들기 위해서는
jdbc프로그래밍에서 필요한것처럼 기본적으로
1. Url
2. Id
3. password
3개의 정보가 필요하고
그 이외에도
Mybatis에서는
캐싱정책의 사용유무,
지연 로딩 등등
많은 설정 정보들이 존재한다.
이러한 정보들을 SqlSession을 생성할때마다 전부 다시 정의하는 것은 매우 힘들다.
이거는 마치 JDBC 로 db 접속할때
매번 id pw url을 그때그때 서블릿 클래스마다 클래스내 전역변수로 지정해주는 것처럼 번거로운 일이다.
그렇기 때문에 이러한 설정값들을
한곳에 모아놓고 그 모아놓은 곳에서 객체를 가져오는 것이 효율적인데
이것이 SqlSessionFactory 이다
mybatis 의 DefaultSqlSessionFactory 클래스 내부 모습
정말 별거 없다
여기서 문제가 한 개 더 있다.
SqlSessionFactory를 만들기위해서는 엄청 많은 정보들을 넣어줘야하는데 (id url AliasesPackage.....)
이거를 그냥 인스턴스를 쉽게 생성자를 사용해서
new SqlSessionFactory() 이렇게 만드는 거는
매우 불안하다
왜냐면 "생성자 인자가 많은 경우에는 Constructor 방식은 가독성이 매우 떨어진다"
--Effective Java edition2 규칙2 생성자 인자가 많을때는
Builder패턴 적용을 고려하라 page16 --
그렇기에 이런경우에는 디자인패턴중에서 BuilderPattern을 사용하는데
이것이 SqlSessionFactoryBuilder이다.
SqlSessionFactoryBuilder 내부 소스코드
SqlSessionFactoryBuilder는 개발자들을 위한 ,단순히 가독성을 좋은 소스코드를 작성하기위한
객체이다.
이 객체는 서버를 최초 1회 실행시에 SqlSessionFactory를 생성하는데 한번 쓰이고
사라지는 객체이다.
'Programming > Mybatis' 카테고리의 다른 글
Mybatis Springboot TypeHandler 배포 에러 (0) | 2018.06.27 |
---|---|
Mybatis JavaConfig 설명 (0) | 2018.06.08 |
mybatis 핵심 기능 mapper.xml 부분 (0) | 2017.03.13 |
Mybatis 에 대한 정리 (0) | 2017.01.21 |