Troubleshooting 컨테이너 환경변수 누락 - 100-hours-a-week/KTB4-2nd-Cloud GitHub Wiki

환경 파일에 있는 값이 컨테이너에 없음

2026-09-23

🐞 에러 내용

여행 생성 화면에서 장소를 검색하면 500이 반환됐습니다.

GET /api/places?query=당진시  →  500 Internal Server Error

Backend 로그에는 요청 주소를 만들지 못했다는 오류가 있었습니다.

java.lang.IllegalArgumentException: URI with undefined scheme
  at ...PlaceService.search(PlaceService.java:28)

장소 검색은 공공데이터 API를 호출합니다. 호출할 URL이 비어 있을 때 나올 수 있는 오류라, 환경변수부터 확인했습니다.

🔍 원인 분석

App EC2의 환경 파일에는 값이 모두 들어 있었습니다.

$ grep '^DATA_GO_KR' /etc/yeodam/app.env
DATA_GO_KR_SERVICE_KEY=...
DATA_GO_KR_LEGAL_DISTRICT_API_URL=https://apis.data.go.kr/1741000/StanReginCd/getStanReginCdList
DATA_GO_KR_TIMEOUT=10s

그런데 Backend 컨테이너 안에서 보니 URL만 비어 있었습니다.

$ docker exec yeodam-app-backend-1 sh -c 'echo "URL=[$DATA_GO_KR_LEGAL_DISTRICT_API_URL]"; echo "KEYLEN=${#DATA_GO_KR_SERVICE_KEY}"'
URL=[]
KEYLEN=88

같은 파일에 있는 값인데 키는 들어가고 URL은 안 들어갔습니다. Compose 파일을 보니 Backend의 environment:에는 키 하나만 적혀 있었습니다.

$ grep -n 'DATA_GO_KR' app-compose.yml
60:      DATA_GO_KR_SERVICE_KEY: "${DATA_GO_KR_SERVICE_KEY:-}"

--env-file로 넘긴 파일은 Compose 안의 변수를 채우는 데만 쓰이고, 컨테이너에는 environment:에 적은 이름만 들어가고 있었습니다.

✅ 해결 방법

Cloud 저장소의 app-compose.yml에 두 줄을 추가했습니다.

DATA_GO_KR_SERVICE_KEY: "${DATA_GO_KR_SERVICE_KEY:-}"
DATA_GO_KR_LEGAL_DISTRICT_API_URL: "${DATA_GO_KR_LEGAL_DISTRICT_API_URL:?DATA_GO_KR_LEGAL_DISTRICT_API_URL is required}"
DATA_GO_KR_TIMEOUT: "${DATA_GO_KR_TIMEOUT:-10s}"

URL은 :?로 필수값으로 걸어서, 다음에 빠지면 컨테이너가 뜨기 전에 Compose 단계에서 멈추게 했습니다.

PR을 병합한 뒤 새 Cloud 커밋의 Compose 파일로 Backend를 다시 만들었습니다. 컨테이너 안에서 URL과 Timeout이 채워진 것과 장소 검색이 정상 응답하는 것을 확인했습니다.

app.env.example, Parameter Store 키 목록, 환경 파일을 만드는 스크립트에도 같은 이름을 반영했습니다.

회고

서버의 파일을 고친 것과 컨테이너의 환경이 바뀐 것을 같은 일로 생각했습니다.

지금은 환경변수를 추가할 때 Parameter Store, 환경 파일 생성 스크립트, Compose environment:, 애플리케이션 설정 네 곳을 같이 확인합니다. (비밀값과 설정 관리)