
1. 개요
이번 서버 리팩토링 이후 새로운 배포 과정에서 다음 두 가지 운영 이슈가 발생하였다.
- JWT 관련 필수 환경변수 미설정으로 인한 애플리케이션 부팅 실패
- Swagger 서버 URL이 로컬 환경으로 고정되어 발생한 실행 혼선
본 문서는 각 이슈에 대해 장애 증상, 원인 분석, 대응 조치 및 재발 방지 방안을 정리하여,
향후 유사 장애 발생 가능성을 최소화하는 것을 목적으로 한다.
2. 장애 원인 ①
JWT 환경변수 누락으로 인한 애플리케이션 기동 실패
2.1 장애 증상
배포 이후 애플리케이션이 정상적으로 기동되지 않았으며,
Coolify 로그 상에서 다음 에러가 반복적으로 출력되었다.
해당 에러로 인해 컨테이너가 지속적으로 재시작되는 현상이 발생하였다.
2.2 원인 분석
- JWT 보안 강화를 목적으로, 기존에 존재하던 JWT Secret 기본값(fallback) 을 제거함
- JWT_SECRET, JWT_REFRESH_SECRET를 필수 환경변수(required) 로 변경
- 그러나 배포 환경(Coolify)에 해당 환경변수가 사전에 설정되지 않음
- 결과적으로 애플리케이션 초기화 단계에서 예외가 발생하며 부팅 실패
2.3 대응 조치
Coolify의 환경변수 설정에 아래 항목을 추가한 후 애플리케이션을 재시작하였다.
2.4 조치 결과
- 애플리케이션 정상 기동 확인
- API 요청 및 인증 플로우 정상 동작 확인
3. 장애 원인 ②
Swagger 서버 URL 설정 혼선
3.1 장애 증상
배포 도메인에서 Swagger UI에 접근하여 API 요청을 실행할 경우,
서버 URL이 아래와 같이 로컬 주소로 고정되어 있었다.
이로 인해 배포 환경에서 Swagger 테스트가 정상적으로 수행되지 않았다.
3.2 원인 분석
- Swagger 설정 파일 내 servers.url 값이 하드코딩되어 있었음
- 실행 환경(local / production)에 따른 서버 URL 분기가 고려되지 않음
3.3 개선 사항
Swagger 서버 URL을 환경변수 기반으로 동적으로 설정하도록 개선하였다.
3.4 개선 결과
실행 환경에 따라 Swagger 서버가 명확히 분리된다.
생각보다 이거를 빼먹는 가능성이 꽤 크다.
- Local 환경
- => https//localhost:3000
- Production 환경
=> https://be.eternalmarketing.co.kr
Swagger UI에서의 API 실행 혼선이 해소되었으며,
환경 간 동작 차이가 명확해졌다.
4. 배포 환경 변수 정리 (Coolify 기준)
4.1 필수 환경변수 목록
아래 환경변수는 애플리케이션 정상 동작을 위해 반드시 설정되어야 한다.
5. Preview Environment vs Production Environment
5.1 Preview Environment
- PR 또는 브랜치 단위 테스트를 위한 임시 환경
- 운영 DB 및 운영 도메인과 반드시 분리되어야 함
5.2 Production Environment
- 실제 서비스 운영 환경
- 실서비스 DB 및 공식 도메인 사용
Preview 환경과 Production 환경을 혼용할 경우
데이터 오염 및 치명적인 운영 장애로 이어질 수 있으므로
환경 분리는 필수 운영 원칙으로 유지해야 한다.
결론
본 장애는 “보안 강화를 위한 코드 변경 → 배포 환경 변수 미적용” 으로 인해 발생한전형적인 운영 이슈였다.
이번 사례를 통해 다음 사항을 재확인하였다.
- 배포 자동화뿐만 아니라
환경변수 관리 및 검증 프로세스의 중요성 - 보안 관련 변경 사항은
코드 변경과 운영 설정이 반드시 함께 반영되어야 함
향후에는 사측 고객 데이터베이스 보안을 위하여, 또한 필수 환경변수 검증과 배포 절차적 방어를 강화하여
동일 유형의 장애를 사전에 차단하는 방향으로 운영하도록 하겠다.
'외주 제작 경험' 카테고리의 다른 글
| Swiper Library의 내부 디자인 영역(Transform)에서 벗어나기 (0) | 2026.02.15 |
|---|---|
| 팀원끼리 테일윈드 배치가 다 다를때 지저분함을 통일시키는 법 (1) | 2026.02.01 |
| Vite만 쓰다 Next App Router 쓰면 반드시 헷갈리는 것들 (1) | 2026.01.21 |
| 클라우드 엔지니어가 Coolify 하나 던져주고 시작된 온보딩 (0) | 2026.01.14 |
| 어드민 로그인 인증 로직을 이해하기 (0) | 2026.01.07 |