GitHub Actions를 통해 EC2에 배포할 때마다 application-secret.yml
파일을 echo 명령으로 만들어 설정을 생성하고 있었다. 그런데 매번 덮어쓰는 게 아니라 >>
연산자를 사용하다 보니, 같은 spring:
키가 계속 아래로 누적되며 파일이 커지고 중복된 YAML 키가 생기게 됐다.
결국 Spring Boot 실행 시 다음과 같은 오류가 발생했고, 앱은 부팅 직후 종료되었다 이 중복된 키로 인해 Spring Boot 애플리케이션 실행 시 다음과 같은 에러가 발생했다.
org.yaml.snakeyaml.constructor.DuplicateKeyException: found duplicate key spring
결국 앱이 부팅 직후 종료되는 현상이 반복적으로 발생했다
>>
는 기존 파일이 존재하면 그 끝에 이어붙이는 연산자이다. 이 때문에 배포할 때마다 같은 설정 내용이 계속 덧붙여졌고, 그 결과 application-secret.yml
파일 안에는 중복된 spring:
키가 생겼다. YAML은 중복된 키를 허용하지 않기 때문에 Spring Boot는 실행 도중 파싱 에러를 발생시켰고, 정상 부팅이 되지 못했다.
spring:
...
spring: # 중복 발생
...
CI/CD 파이프라인에서 application-secret.yml을 작성하기 전에 기존 파일을 먼저 삭제하도록 명령어를 추가했다.
rm -f /home/ec2-user/application-secret.yml
이제는 매번 배포 시 기존 설정 파일을 삭제한 뒤 새로 생성되기 때문에 중복 키 문제 없이 Spring Boot 애플리케이션이 정상적으로 실행되게 되었다.
처음엔 단순한 설정 실수라고 생각했지만, CI 환경에서 자주 발생할 수 있는 덮어쓰기 문제라는 걸 다시 한 번 느꼈다. 자동화 환경에서는 기존 파일을 명시적으로 삭제하거나, 덮어쓰는 방식으로 만드는 게 정말 중요하다는 걸 배웠다.
다행히 Spring Boot가 명확하게 에러 로그로 DuplicateKeyException
을 출력해준 덕분에 빠르게 문제를 해결할 수 있었다. CI/CD에서는 작은 디테일 하나가 전체 배포 흐름을 망가뜨릴 수 있다는 걸 느낄 수 있는 시간이었다.