티스토리 뷰

반응형

서론

웹 어플리케이션을 만들다 보면 한 어플리케이션이 여러 개의 데이터베이스 혹은 여러개의 스키마에서 정보를 가져와서 서비스를 만들어야 하는 경우가 있을 수 있다. 이번에 나같은 경우는 조회 서비스인데 연도를 기준으로 스키마를 나눠서 데이터를 저장하게 되며 해당 연도별 스키마는 서로 합쳐져 조회될 경우 없고 각 스키마에 존재하는 테이블들은 모두 동일한 상태라는 요구사항이 있었다. 이와 같은 경우에 생각 할 수 있는 부분은 당연히 여러개의 DataSource를 생성해야 한다는 것인데 그 이유는 DataSource를 사용하기 위해 사용하는 Database URL정보가 Schema기준이라는 점에서이다. (ex. jdbc:mysql://localhost:3306/2015 -- 2015 schema) 

또한 사용자가 정보 조회 시 연도를 필수적으로 넘겨준다는 것을 감안해 볼 때 FactoryMethod를 사용해서 사용자가 요청하는 값에 따라 DataSource를 유동적으로 변경되게 하는 방법을 생각해 볼 수 있다.

이번 포스팅에서는 이런 경우에 SpringBoot에서 어떻게 DataSource를 여러개 선언하고 FactoryMethod를 이용해서 요청에 따라 변경되는  SqlSession을 사용하는 법에 대해서 기록한다. 사용한 ORM은 Mybatis이다.


SpringBoot Multi DataSource 설정

먼저 SpringBoot에 기본적으로 존재하는 application.properties 파일에 설정 정보를 기록한다.

위와 같이 설정 정보를 입력하고 나면 각 DataSource에 대한 설정을 위한 Bean설정이 필요하다. 이와 동시에 Mybatis를 사용할 것이기에 SqlSession 관련 인스턴스에 대한 생성 설정도 필요하다.




위 내용을 보면 DataSource Bean 설정에 @CofigurationProperties 어노테이션을 볼 수 있는데 이것은 SpringBoot가 읽어 들이는application.properties에 설정 된 key값의 prefix를 정해주는 역할을 수행한다.
2015년 스키마가 spring.datasource, 2016년 스키마가 spring.datasource2이기 때문에 @ConfigurationProperties prefix값으로서 넘겨준것을 확인 할 수 있다. 또한 @Primary 어노테이션을 둘 중 하나의 DataSource Bean에 생성해주어야 하며 그렇지 않을 경우 오류를 발생시킨다.

그 다음 연도별로 생성된 DataSource을 가지고 SqlSessionFactory, SqlSession을 각각 생성 해 주면 설정은 끝이 난다.

사용자가 요청한 값에 따른 SqlSession 사용
보통 하나의 DataSource에 의한 한 SqlSession사용시 아래와 같이 추상Dao를 생성해 이 Dao를 상속받아 사용하는 형식의 예를 들 수 있다.


하지만 이제는 연도별로 사용되는 SqlSession이 달라 위와 같은 형태는 사용하기 어렵다. 그래서 사용할 수 있는 방법이 아래와 같이 FactoryMethod를 사용하는 것이다.




위와 같이 조회 시 사용자가 전달한 연도를 기준으로 그에 맞는 SqlSession 인스턴스를 전달해주는 getSqlSession메소드를 하나 생성한 뒤 사용하는 클래스를 만든다.

결론
웹 어플리케이션이 복잡해 지면 하나의 데이터베이스로 커버하기 힘들어 질 수 있는 가능성이 높다. 이와 같은 경우 DataSource를 여러개 사용하는 방법을 생각해 볼 수 있으며 어떻게 SpringBoot에서 설정을 하는지에 대해서 정리 해보았다. 이번 글에서의 초점은 복수개의 DataSource에서 가져오는 데이터를 하나의 서비스에서 가공을 하는 것을 예를 든것이 아니라는 것을 확인해야한다. 단지 요청에 따른 SqlSession을 선택적으로 사용할 수 있는 방법에 대해서만 설명을 해놓았다.



반응형

'SpringBoot' 카테고리의 다른 글

SpringBoot CORS 문제 해결하기  (2) 2016.11.18
SpringLoaded를 이용한 서버재시작없이 개발  (0) 2016.11.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함