이번 주에는 카프카를 직접 써봤다.
글로벌 이벤트와 로컬 이벤트… “이벤트에도 글로벌이 있구나” 싶은 순간도 있었다.
어디에 쓰이는지가 먼저 궁금
K.A.F.K.A라는 이름 정도만 아는 상태에서, 이 도구가 무엇으로 구성되는지보다 어디에 쓰이는지가 먼저 궁금했다.
그 부분은 월요일 멘토링에서 전체 흐름을 들으며 큰 도움을 받았다.
이벤트 분리를 처음부터 미세하게 하려니 막막했는데, “쉬운 것부터 해보자”는 말이 전환점이었다.
즉, 주문등록(재고 차감, 포인트 차감, 쿠폰 사용) 같은 핵심 트랜잭션부터 쪼개기보다, 우리 시스템 관점에서 바깥이라고 볼 수 있는 데이터 플랫폼 전송 같은 곳부터 분리해보기로 했다.
그리고 나서 주문등록 이벤트를 떼어내 보니, 예컨대 주문 이벤트 발행 후 포인트 차감이 실패하면 보상 트랜잭션이 필요하다.
다만 모든 걸 보상 트랜잭션으로만 해결하려 들면 작업 순서를 정교하게 이해해야 하고, 잘못하면 뫼비우스의 띠처럼 맴돌 수 있다.
이 지점에서 예전엔 “하나의 트랜잭션”으로만 여겼던 작업들이 사가 패턴으로 연결된다고 하셨다. 아, 그렇게 이어지는 거였구나.
전체 그림을 보고나니 화요일부터는 다른 질문도 할 수 있었다.
토픽을 이벤트 단위로 나눌 것인가, 도메인 단위로 묶을 것인가?
이벤트 단위라면 “주문완료”, “주문취소”처럼 쪼갤 수 있고, 도메인 단위라면 “주문”으로 뭉칠 수 있다. 둘 중 하나를 고를 수 있고 트레이드오프가 따른다. 이번 과제에서는 도메인 안의 세부 이벤트들이 하는 일이 거의 같아서 굳이 나눌 이유가 없었다. 반대로 세부 이벤트별로 해야 할 일이 달라지면 분리가 필요하겠지.
처음 배울 때는 용어도 벽이었다.
카프카는 용어를 텍스트로만 보면 그냥 개념일 뿐이다. 용어가 유기적으로 연결되다 보니 그림으로 그려져야 이해가 되었다. 과제를 수행하다보니 토픽과 컨슈머 그룹은 머릿속에 그림이 그려졌다. 하지만 파티션과 컨슈머는 아직 유기적으로 이어지지 않는다. 순서 보장, 파티션 선택 같은 이슈까지 함께 고려하며 이해하려면, 설정값을 바꿔가며 직접 확인하는 과정이 필요하겠다.
마지막으로 예외 케이스를 더 들여다봐야 한다.
메시지 커밋은 예외 상황에서 어떻게 처리되는지, 재시도/실패 시나리오는 어떤 경로를 밟는지 등. 그리고 나중에 다시 실행해 볼 수 있도록 테스트 코드로 남겨 두어야한다.
'Essay > WIL' 카테고리의 다른 글
[루퍼스] 10주간 돌아보기 (0) | 2025.09.19 |
---|---|
[WIL] 루퍼스_부트캠프 9주차 (0) | 2025.09.14 |
[WIL] 부트캠프 7주차 : Spring Application Event 기본 용어와 튜토리얼 코드 (0) | 2025.09.07 |
[WIL] 부트캠프 6주차 (0) | 2025.08.24 |
[WIL] 부트캠프 5주차 (1) | 2025.08.18 |