kjp0411 님의 블로그
내일배움캠프 단기심화 Java - 본 캠프 Day 52 본문
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를 실제 서비스 흐름에 어떻게 적용할지 구체화
'TIL' 카테고리의 다른 글
| 내일배움캠프 단기심화 Java - 본 캠프 Day 54 (0) | 2026.04.29 |
|---|---|
| 내일배움캠프 단기심화 Java - 본 캠프 Day 53 (0) | 2026.04.28 |
| 내일배움캠프 단기심화 Java - 본 캠프 Day 51 (0) | 2026.04.24 |
| 내일배움캠프 단기심화 Java - 본 캠프 Day 50 (0) | 2026.04.23 |
| 내일배움캠프 단기심화 Java - 본 캠프 Day 49 (0) | 2026.04.22 |
