집가는데 친구가 이런 질문을 던졌다. 


설명해주는김에 


마이바티스를 예제로 들어서 설계 관련 내용을 써보았다.




우선 위에 질문에 대한 정답은 



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

+ Recent posts