MSA라는 운영 정책
트랜잭션 롤백
운영 정책이라는 건 유행이 있다. 예전에는 통합이 유행이었고, 요즘에는 잘게 쪼개는 게 유행이다. 잘게 쪼갰을 때 장점은 프로그램 수정 시 영향도를 분리하고, 발빠르게 수정이 가능하다는 점이다. 단점은 변경점이 많고, 관리 포인트가 늘어난다. 그래서 쪼갤 때 어디까지 쪼갤 것인지에 대한 고민이 필요하다.
트랜잭션은 DB 처리의 단위
이다. 쿼리문 하나를 의미하는 것은 아니고, 업무 단위로 트랜잭션을 관리한다. 트랜잭션은 atomic해야 한다. 이를 위해 커밋, 롤백, 세이브포인트 기능이 있다.
MSA 환경에서는 하나의 기능 안에서, 여러 서버를 호출한다. 예를 들어 고객 정보를 받아서 예금을 신규하는 경우 1번의 조회, 2번의 처리가 필요하다.
1) 당행에 존재하는 고객인지 조회한다.
2) 당행에 존재하지 않는다면 고객을 생성한다.
3) 고객의 예금을 생성한다.
만약 2번을 완료한 후에 3번을 처리하는 과정에서 오류가 났다면 어떻게 해야할까? 어디까지 롤백해야 할까? 1번 이전 시점으로 돌아가는 것은, 우리 서버 입장에서는 깔끔하다. 하지만 2번을 처리한 서버에게 어떻게 alert할 것인가? 오히려 alert해주는 과정에서 더 많은 오류가 발생할 수 있다.
내가 내린 결론은, 이러한 기술적 한계를 인지하고 비즈니스를 이해한 채로 우리 서버의 기능을 설계해야 한다는 것이었다. 고객이 당행에 존재하지 않는다면
분기문을 넣는 것이 한 방법이겠다.