Architecture/MSA 3

보상트랜잭션

Rollback은 @Transactional 어노테이션으로 보통 하게 되는데 UncheckedException인 RuntimeException때 default로 rollback된다. CheckedException인 다른 Exception은 throw를 해도 rollback되지 않는다. NullPointerException이 Runtime Exception의 예. @Transactional 어노테이션 방식과 EntityManager를 써서 begin, commit, rollback하는 방식이 있다. 한 서비스에서만 가능한듯 하다. 서비스마다 IoC컨테이너가 다르고 빈을 공유하지 않기 때문인듯 하다. 같은 트랜잭션으로 처리가 안 되는 것 같다. 한번 간단한 예제를 만들어서 시도해봐야겠다. woowabros...

Architecture/MSA 2021.04.15

Micro Service란?

MSA(Micro Service Architecture)는 거대한 구조(Monolithic)로 되어있는 Service를 여러 소규모의 Service로 나누는 구조 및 방법이라고 생각한다. 먼저, 대조되는 아키텍처인 Monolithic의 특징을 보자. 가장 접근하기 쉬운 아키텍처로 소스 전체를 하나의 WAR파일로 구성하여 배포하는 전통적인 개발 방식이다. 모두 동일한 개발 환경 및 툴을 사용 개발환경 구성 간단 성능의 제약이 덜하다(각 기능을 함수로 호출) 트랜잭션 처리 간단 작은 규모의 어플리케이션에 적합 여러 장점을 가지고 있지만 유지보수를 하면서 혹은 새로운 기능의 추가로 어플리케이션은 점점 거대하지기 시작한다. 이벤트와 포인트 기능이 추가되었다. 하나의 서비스에서 너무 많은 기능을 가지게 되었다. ..

Architecture/MSA 2021.03.22

Transaction처리는 어떻게?

기존 모놀리식 서비스에서는 보통 통합 데이터베이스(단일 DB)를 사용하며 데이터의 일관성을 위한 트랜잭션은 어렵지않다. 그러나, 마이크로 서비스에서의 트랜잭션은 간단하지 않다. 마이크로 서비스로 개발하게 되면 보통 서비스마다 저장소를 분리하는 패턴(Database Per Service)을 사용할 것이고 저장소가 격리되어 있기 때문에 각각의 저장소를 다르게 선택할 수 있다.(Polyglot) 이를 한 트랜잭션으로 묶는 것은 새로운 문제이다. MSA환경에서 크게 2가지의 패턴으로 트랜잭션을 처리한다. 2PC(Two Phase Commit, 전통적인 방법) Try Confirm Cancel이라고도 불리는 이 방법은 분산 시스템에서 꽤 괜찮은 성능을 보이기 때문에 사용되었다고 한다. 준비와 처리 2단계로 진행된..

Architecture/MSA 2021.03.22