피드로 돌아가기
Angular 21 + Spring Boot 3.4 in Docker: the plumbing nobody shows you
Dev.toDev.to
Infrastructure

Nginx Proxy와 Healthcheck 기반의 Docker 스택 최적화로 부팅 및 통신 이슈 완전 해결

Angular 21 + Spring Boot 3.4 in Docker: the plumbing nobody shows you

Roman Zukov2026년 4월 12일6intermediate

Context

Docker 환경 내 MSSQL의 느린 초기 부팅으로 인한 Spring Boot의 Connection 실패 및 컨테이너 Crash 발생. 클라이언트 브라우저와 컨테이너 내부 네트워크 간의 도메인 불일치로 인한 CORS 및 SPA Deep-linking 404 오류가 반복되는 구조적 한계 노출.

Technical Solution

  • service_healthy 조건과 sqlcmd 기반의 Healthcheck 도입을 통한 DB 준비 완료 후 Backend 실행 보장
  • start_period: 20s 설정을 통한 SQL Server의 Cold Boot 시간 확보 및 불필요한 Unhealthy 판정 방지
  • Nginx를 Reverse Proxy로 배치하여 /api 경로를 Backend로 라우팅함으로써 CORS 설정 제거 및 Single Origin 구조 구현
  • try_files 설정을 통한 모든 요청의 index.html 리다이렉션으로 Angular Router의 Client-side Routing 유지
  • HttpInterceptorFn!req.url.includes('/auth/') 가드를 통한 JWT Refresh 시 무한 루프 발생 차단
  • inject()를 활용한 Lazy Injection 방식으로 AuthService의 Circular Dependency 문제 해결

- Docker Compose 사용 시 `depends_on`의 단순 컨테이너 존재 여부가 아닌 `condition: service_healthy` 검증 적용 - SPA 배포 시 Nginx의 `try_files` 설정을 통해 Client-side Routing 404 오류 방지 - JWT Refresh Interceptor 구현 시 인증 엔드포인트 제외 로직과 원본 에러 재투척(Re-throw) 구조 확인 - SQL Server 2022 이미지 사용 시 `mssql-tools18` 경로 및 TLS 신뢰 플래그(`-C`) 적용 여부 검토

원문 읽기