피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Nginx Proxy와 Healthcheck 기반의 Docker 스택 최적화로 부팅 및 통신 이슈 완전 해결
Angular 21 + Spring Boot 3.4 in Docker: the plumbing nobody shows you
AI 요약
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`) 적용 여부 검토