Project

모의 주식 프로젝트에서 Kafka로 서비스 간 이벤트를 주고받기

kinim329 2026. 5. 3. 23:41

Kafka를 사용한 이유

이번 프로젝트는 competition-service와 asset-service가 나누어진 구조였다.

competition-service는 대회 관련 기능을 담당하고, asset-service는 계좌와 보유 주식 관련 기능을 담당한다.

문제는 대회에서 사용자가 참가했을 때 asset-service에서도 그 사실을 알아야 한다는 점이었다.

사용자가 대회에 참가하면 해당 사용자에게 대회용 계좌를 만들어줘야 하기 때문이다.

이때 competition-service가 asset-service를 직접 호출할 수도 있지만, 그렇게 하면 두 서비스가 강하게 연결된다.

그래서 Kafka를 사용해 이벤트를 주고받는 방식으로 처리했다.

Kafka 이벤트 방식

전체 흐름은 다음과 같다.

competition-service에서 대회 참가 이벤트가 발생한다.

이 이벤트가 Kafka Topic으로 발행된다.

asset-service는 해당 Topic을 구독하고 있다가 이벤트를 수신한다.

이벤트를 받은 asset-service는 사용자에게 대회용 계좌를 생성한다.

즉, competition-service는 “대회 참가가 발생했다”는 사실만 알리고, asset-service는 그 이벤트를 받아 필요한 작업을 처리한다.

Topic 설정

Kafka에서는 메시지를 구분하기 위해 Topic을 사용한다.

이번 프로젝트에서는 Topic 이름을 application.yml에서 관리했다.

예를 들어 대회 참가 이벤트는 competition.registered Topic을 사용하고, asset-service에서 계산한 총 자산 정보는 asset.total-calculated Topic을 사용했다.

Topic 이름을 코드에 직접 작성하지 않고 설정 파일에서 관리하면, 나중에 Topic 이름이 바뀌어도 수정하기 쉽다.