kjp0411 님의 블로그

내일배움캠프 단기심화 Java - 본 캠프 Day 52 본문

TIL

내일배움캠프 단기심화 Java - 본 캠프 Day 52

kjp0411 2026. 4. 27. 21:54

TIL - 2026.04.27

오늘 한 일

오늘은 티켓팅 프로젝트에서 user-service의 기본 CRUD 기능을 확인하고, 팀원들이 공통으로 사용할 수 있는 로컬 인프라 Docker Compose 환경을 구성했다.

주요 작업은 다음과 같다.

  • User 등록, 조회, 수정, 삭제 API 흐름 확인
  • 공통 모듈 연동 후 User API 정상 동작 여부 확인
  • PostgreSQL, Redis, Kafka를 Docker Compose로 실행하는 로컬 인프라 구성
  • Docker Compose 실행 중 발생한 이미지 태그 문제와 컨테이너 이름 충돌 문제 해결
  • 최종적으로 PostgreSQL, Redis, Kafka 컨테이너가 모두 healthy 상태로 실행되는 것 확인

User CRUD 작업 정리

오늘은 user-service에서 회원 관련 CRUD 기능이 정상적으로 동작하는지 확인했다.

확인한 기능은 다음과 같다.

  • 회원 등록
  • 회원 단건 조회
  • 회원 목록 조회
  • 회원 정보 수정
  • 회원 삭제

공통 모듈 적용 이후에도 User API가 정상적으로 동작하는지 확인했다.
특히 공통 응답, 공통 예외, 공통 설정 등이 서비스에 연결된 상태에서 기존 API 흐름이 깨지지 않는지 확인하는 것이 중요했다.

이번 작업을 통해 user-service가 독립적인 서비스로 동작하면서도, 공통 모듈을 통해 반복되는 설정과 예외 처리 구조를 재사용할 수 있음을 확인했다.


Docker Compose 구성

팀원들이 로컬에서 동일한 인프라 환경을 사용할 수 있도록 Docker Compose 파일을 구성했다.

이번에 구성한 인프라는 다음과 같다.

구성 요소 역할 포트
PostgreSQL 서비스 데이터 저장소 15432:5432
Redis 캐싱, TTL, 분산락, 대기열 등에 활용 16379:6379
Kafka 서비스 간 비동기 이벤트 처리 19092:19092

기존에는 각 팀원이 PostgreSQL, Redis, Kafka를 직접 설치하거나 각자 다른 포트와 설정으로 실행할 가능성이 있었다.
이번 Docker Compose 구성으로 팀원들은 아래 명령어 하나로 동일한 로컬 인프라 환경을 실행할 수 있게 되었다.

docker compose up -d

상태 확인은 다음 명령어로 진행했다.

docker compose ps

최종적으로 다음 컨테이너들이 모두 정상 실행되는 것을 확인했다.

ticketing-postgres   healthy
ticketing-redis      healthy
ticketing-kafka      healthy

Docker Compose 구성 중 발생한 문제

1. Kafka 이미지 태그 문제

처음에는 Kafka 이미지로 bitnami/kafka:3.7을 사용하려고 했다.

하지만 실행 중 다음과 같은 오류가 발생했다.

failed to resolve reference "docker.io/bitnami/kafka:3.7": not found

원인은 해당 태그가 Docker Hub에서 정상적으로 조회되지 않았기 때문이었다.
이를 해결하기 위해 Kafka 이미지를 Apache 공식 이미지로 변경했다.

image: apache/kafka:3.7.2

이미지를 변경하면서 Kafka 환경 변수도 기존 Bitnami 방식이 아닌 apache/kafka 이미지에 맞는 방식으로 수정했다.


2. 컨테이너 이름 충돌 문제

이후 Docker Compose를 실행했을 때 다음 문제가 발생했다.

Conflict. The container name "/ticketing-postgres" is already in use

기존에 생성되어 있던 ticketing-postgres 컨테이너가 남아 있어서 새 컨테이너를 생성하지 못한 문제였다.

아래 명령어로 기존 컨테이너를 삭제한 뒤 다시 실행했다.

docker rm -f ticketing-postgres ticketing-redis ticketing-kafka
docker compose up -d

이후 정상적으로 컨테이너가 실행되었다.


오늘 배운 점

Docker Compose는 단순히 컨테이너를 실행하는 도구가 아니라, 팀의 로컬 개발 환경을 통일하는 데 중요한 역할을 한다는 것을 알게 되었다.

특히 MSA 프로젝트에서는 서비스가 여러 개로 나뉘기 때문에 각 서비스가 공통으로 바라보는 인프라 환경이 필요하다.
PostgreSQL, Redis, Kafka를 Docker Compose로 묶어두면 팀원들이 동일한 환경에서 개발할 수 있고, 환경 차이로 인한 오류를 줄일 수 있다.

또한 Docker Compose 작업은 특정 서비스 내부에서 하는 작업이 아니라 프로젝트 전체 인프라 설정에 가까운 작업이라는 점도 정리할 수 있었다.
user-service 안에 두는 것이 아니라 프로젝트 루트 또는 별도 infra 레포에서 관리하는 것이 더 적절하다.


정리

오늘은 User CRUD 기능 확인과 로컬 인프라 환경 구성을 함께 진행했다.

User CRUD는 공통 모듈과 연결된 상태에서도 정상적으로 동작하는지 확인했고, Docker Compose를 통해 PostgreSQL, Redis, Kafka를 한 번에 실행할 수 있는 환경을 만들었다.

이번 작업으로 앞으로 팀원들은 동일한 인프라 환경에서 각자의 서비스를 개발할 수 있게 되었다.
또한 Redis를 활용한 좌석 선점 TTL, Kafka를 활용한 비동기 이벤트 처리, PostgreSQL 기반 서비스별 스키마 분리 같은 기능을 본격적으로 개발할 수 있는 기반을 마련했다.


내일 할 일

  • 팀원들에게 Docker Compose 실행 방법 공유
  • 각 서비스의 application-local.yml 설정을 Docker Compose 환경에 맞게 정리
  • User API 변경 사항 PR 작성 및 리뷰 반영
  • Redis 또는 Kafka를 실제 서비스 흐름에 어떻게 적용할지 구체화