Back-end
-
MSA - Outbox Pattern? Saga Pattern?Back-end 2024. 3. 19. 09:58
개요 Saga 와 Outbox 패턴에 대해 구현 및 실습을 하고 생각을 정리해보자. 참고로 코드나 내용은 제가 생각한대로 구성하여 널리 알려진 개념들과 맞지 않을 수도 있습니다:) github: https://github.com/ghkdwlgns612/msa-transaction-pattern 계기 Micro Service Architecture 라고 불리는 개념만 접해봤을 뿐 실제 적용 경험은 없다. MSA 의 핵심은 DB 를 분리하는 것인데 이것에 대한 트랜잭션을 어떤 방법으로 관리를 할까라는 의문점을 가졌다. 실제 내가 맡은 제품은 Monolith in MSA(코드만 분리하고 DBMS 는 하나) 로 사용하고 있다. 그래서 언젠가는 사용해볼수도? 있지 않을까라는 생각에 구현하고 의문점을 나만의 방식으..
-
TestCode 의 properties override 에 대하여Back-end 2024. 3. 8. 16:07
개요 TestCode 의 properties 파일에 대한 오해가 있어서 간단히 정리해보려 한다. 스프링에 대한 실력이 부족해서 업무 중 실수를 했다 ㅠ 다음엔 실수하지 않도록 정리를 해놓자. 내가 하려고 했던 방향 기존의 propeties 파일 및 통합 테스트 어노테이션이다. @ActiveProfiles("test") @AutoConfigureTestDatabase @ExtendWith(SpringExtension.class) @SpringBootTest public abstract class NdapSpringIntegrationTestBase { } 왜 test/application.properties 를 만들지 않고 test/application-test.properties + @ActiveProf..
-
멀티 모듈에서 @ConditionalOnProperty 사용 시 주의사항Back-end 2024. 3. 7. 10:35
개요 멀티 모듈에서 @ConditionalOnProperty 사용 시 주의해야할 사항에 대한 글입니다. 사건의 발단 여러 모듈에서 중복으로 관리되어지는 Configuration 이 있었다. 이것을 하나의 모듈에 모아 관리하려고 했다. application.properties 옵션을 이용해 @Configuration 내부 빈 들을 주입할지 결정하도록 설계하려했다. 아래와 같이 옵션이 "true" 인 경우만 빈 들을 등록하는 방향으로 시도했다. kafka.configuration.order=true kafka.configuration.payment=true kafka.configuration.stock=true 예시의 Configuration 이다. @Configuration @ConditionalOnPr..
-
Kafka Consumer Retry 구현Back-end 2024. 2. 27. 22:13
개요 만약 MSA 환경에서 Consumer 동작을 하는 Consumer Logic 중 Exception이 발생하는 경우가 있다. 이러한 경우는 두 가지로 나뉜다. 하나는 써드 파티 APP 과의 Network 지연과 같은 일시적인 에러이다. 이건 재시도로 충분하다. 그러나 두 번째는 진짜 에러이다. 존재하지 않는 사용자라던지 상품이 없다던지 이다. 위 2가지 상황을 대처할 수 있는 방안에 대해 알아보자. 개념1: Blocking Retry 일시적인 에러로 인해 Consumer 가 Message 를 가져가서 예외가 발생하는 경우 retry backoff 주기만큼 기다렸다가 재시도 한다. ConsumerConfiguration 부터 만들어보자. ACKMode 는 Consumer 예외 시 Broker 로 다시..