스프링부트: 멀티 데이터소스 구성

- 망 분리란?
    - 외부 인터넷망을 통한 불법적인 접근과 내부정보 유출을 차단하기위해 ‘업무망’과 인터넷 연결이 가능한 ‘외부망’을 분리하는 조치를 말한다.
    - SI 개발을 하다보면 원격으로 VDI(가상 데스크탑 컴퓨터) 에 접속하여 망분리된 환경에서 개발하는 곳이 많다.
    - 내 컴퓨터에서는 인터넷 접속이 되지만 VDI로 원격 접속한 환경에서는 인터넷 접속이 되지 않는다. VDI에서 내컴퓨터로 또는 반대의 경로로 파일을 주고 받을 수도 없다.
    - 개인정보를 취급하는 데이터베이스라면 당연히 분리된 망에서만 접근할 수 있어야 될 것이다.
- 데이터 이관이란?
    - 차세대 프로젝트라 함은 기존 시스템의 소스코드를 완전히 뒤엎는 프로젝트가 대다수이다.
    - 기존 시스템의 데이터는 유지되어야하므로 기존 데이터를 신규로 이관해야한다..
    - 대부분 DBA가 데이터이관작업을 진행하지만 TO-BE 시스템에 맞춰 데이터를 옮겨야하므로 일부 데이터를 수정하여 이관하는 것은 불가피하다.
    - 이부분이 개발자의 책임이 되게 되는데 spring batch를 이용하거나 별도 이관 프로그램을 제작하기도 한다.
- jdbc와 connction pool
    - JDBC: 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
    - JDBC만으로 데이터베이스에 접속하면 데이터를 불러올때마다 접속(connect)를 해야하므로 비효율적이고 느리다.
    - 이를 보완하기위한 것이 connection pool 이란 것이며, 초기에는 dbcp라는 것을 많이 사용했으나 스프링에서는 hikari를 사용한다.
    - hikari 관련 참고문헌
- 실습
    - DB 분리
    - ChainedTransactionManager

[!warn] AbstractPlatformTransactionManager 
AbstractPlatformTransactionManager를 기반으로 두 개의 트랜잭션 관리자를 사용하면 첫 번째 트랜잭션 관리자가 리소스 출처(기본 및 보조 트랜잭션 리소스)에 관계없이 모든 동기화를 처리합니다. 두 번째 트랜잭션 관리자 커밋이 실패하면, 이미 모든 동기화가 처리되고 복구할 방법이 없습니다.
[https://github.com/spring-projects/spring-data-commons/issues/2232](https://github.com/spring-projects/spring-data-commons/issues/2232)        


댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기