MeowRo 프로젝트에 Docker를 적용해 보고 있는데,
Spring Boot + MariaDB + Docker + GitHub Actions로 꽤 탄탄하게 세팅하고 있다.
중간중간 마주쳤던 문제들이 꽤 실무에서도 유용할 것 같아서 기록으로 남겨본다.
📦 도커 컴포즈, 서비스는 뭘 의미할까?
services:
meowro-db-dev:
meowro-api-dev:
처음에 이걸 보고 "하나의 컨테이너 안에 두 서비스가 들어가는 건가?" 싶었는데,
그게 아니라 services는 "컨테이너 단위로 실행할 애플리케이션"을 말한다.
즉, 이건 컨테이너가 2개 생긴다는 뜻이다.
각 서비스 = 하나의 컨테이너.
하나의 API, 하나의 DB 이렇게 나눠진다고 보면 된다.
⚙️ depends_on, 진짜 의존이 아니더라
처음엔 depends_on만 써두면 DB가 준비되고 나서 Spring Boot가 실행될 줄 알았는데,
DB 컨테이너가 시작만 되면 바로 다음 컨테이너도 실행하더라.
결국 DB가 완전히 준비되기도 전에 API가 DB 연결을 시도하면서 실패 💣
해결법은 두 가지였다:
✅ healthcheck + depends_on 조건 설정
meowro-db-dev:
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 10
meowro-api-dev:
depends_on:
meowro-db-dev:
condition: service_healthy
이렇게 하면 DB 컨테이너가 실제로 "정상 응답 가능한 상태"가 될 때까지 기다려준다.
💾 volumes는 왜 명시적으로 쓰는 게 좋을까?
volumes:
db_data:
이렇게만 쓰면 Docker가 자동으로 볼륨을 하나 만들어준다.
근데 이름도 랜덤스럽고 나중에 관리가 좀 애매하다.
그래서 아래처럼 명시적으로 이름을 지어주는 걸 추천한다:
volumes:
meowro-db-dev-data:
name: meowro-db-dev-data
driver: local
이러면 docker volume ls 했을 때 한 눈에 용도 파악이 가능하다.
🗂 Spring 로그 파일을 날짜별로 관리하고 싶었다
Spring Boot에서 WAS 로그를 파일로 남기려면, application-*.yml에서 로그 경로를 지정해주면 된다.
그리고 날짜별로 분리하고 싶을 땐 이렇게 설정했다:
logging:
file:
name: /home/service/meowro/api/dev/logs/spring.log
logback:
rollingpolicy:
file-name-pattern: /home/service/meowro/api/dev/logs/spring-%d{yyyy-MM-dd}.log
max-history: 14
total-size-cap: 1GB
파일은 하루 단위로 나뉘고, 14일치까지만 유지된다.
( max-history 처음알았는데, 개꿀 )
로그는 spring-2025-04-04.log, spring-2025-04-05.log 이런 식으로 쌓인다.
📁 로그 파일이 안 생긴다고?
처음에 로그 파일이 안 생겨서 살짝 당황했었는데, 알고 보니 도커 컨테이너 안에 해당 경로가 없었을 뿐이었다.
Dockerfile에 로그 디렉토리를 미리 생성해두면 문제 해결됨:
RUN mkdir -p /home/service/meowro/api/dev/logs
🔚 마무리
생각보다 도커 + Spring Boot 세팅이 복잡한 건 아니었는데,
"조금만 신경 쓰면 실무급으로도 확장 가능한 구조"가 된다는 게 매력이다.
환경은 개발자를 배신하지 않으니까,
처음부터 잘 정리해두면 나중에 진짜 고마워진다. (특히 에러 났을 때...🫠)
'DevOps' 카테고리의 다른 글
| 🛠 Spring Boot 서버 GitHub Actions 자동 배포 정리 (Self-hosted runner) (0) | 2025.04.03 |
|---|---|
| MSA로 인증과 회원을 분리하고 JWT 연동 구조 설계하기 (0) | 2025.03.25 |
| 모놀리식에서 MSA로, 우리 서비스의 변화 (0) | 2025.03.12 |