이번 글에서는 EC2에서 Spring Boot 애플리케이션을 실행할 때 겪었던 문제와 해결 과정을 정리한다. 실제 사례를 중심으로 문제 원인 분석과 해결 방법을 단계별로 기록했다.
SSM(Session Manager)로 EC2에 접속 후 프로젝트가 어디에 있는지부터 확인했다.
/home/ubuntu/actions-runner/_work/2025-moitz/2025-moitz/backend 경로에서 프로젝트를 찾았다.
cd ~/actions-runner/_work/2025-moitz/2025-moitz/backend
ls
build/libs 안에 빌드된 JAR 파일이 존재하는 것을 확인했다.
nohup을 사용하여 JAR 파일을 백그라운드로 실행했다.
nohup java -jar build/libs/moitz-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
하지만 실행 직후 프로세스가 종료되었다.
ps -ef | grep java를 통해 확인해도 JAR 프로세스가 남아있지 않았다.
Spring Boot 설정을 보면 MongoDB와 Redis에 연결하도록 되어 있었다.
먼저 MongoDB가 실행 중인지 확인했다.
ps -ef | grep mongod
systemctl status mongod
다음으로 Redis 상태를 확인했다.
ps -ef | grep redis
즉, Spring Boot 종료 원인은 DB나 Redis 부재 문제가 아니었다.
애플리케이션이 로그를 기록하는 디렉토리 권한을 확인했다.
ls -ld ~/actions-runner/_work/2025-moitz/2025-moitz/backend/logs
ubuntu 계정으로 읽기/쓰기/실행 권한이 있었다.run.log 파일로 표준 출력과 오류 출력을 기록하며 애플리케이션을 실행했다.
java -jar build/libs/moitz-0.0.1-SNAPSHOT.jar > run.log 2>&1
tail -n 50 run.log
로그를 확인한 결과, 초기 WARN 메시지 외에는 fatal error가 없었지만 애플리케이션은 바로 종료되었다.
추가 로그 확인 결과, 애플리케이션 시작 시 외부 OPEN API를 호출하는 과정에서 에러가 발생했다.
ExternalApiException: OPEN API 응답이 정상적으로 생성되지 않았습니다.
at com.f12.moitz.infrastructure.client.open.OpenApiClient.searchRoute(OpenApiClient.java:96)
Setup과정에서 API 호출을 시도했다.아직 이부분에 대해서는 고민을 하고 있다. 외부 API가 애플리케이션 시작때 관여를 하고 있다면 외부 API의 서버에 문제가 생긴다면 (ex) 대한민국 전산망 화재 ) 우리의 서비스는 배포 조차 할 수 없는 것이다. 현재로서는 아래와 같은 방법이 생각이 난다.
로컬 더미 데이터 활용
개발 환경에서는 OPEN API 대신 로컬 JSON/CSV 데이터를 사용하여 초기화한다.
이번 경험을 통해 EC2에서 Spring Boot 실행 시 흔히 겪는 문제들을 확인하고, 외부 API 호출과 관련된 초기화 과정이 애플리케이션 종료의 주요 원인임을 파악했다.
개발 환경에서는 예외 처리와 API 호출 지연을 통해 서버를 안전하게 실행할 수 있다는 것을 배웠다.
예전에는 개발을 하면서 데이터의 중요성을 크게 못느꼈던 것 같다. 하지만 성장하면서 발로 뛰어 모은 데이터, 다양한 로그 데이터등이 서비스를 성장시킬 수 있는 가치있는 보물임을 느꼈다.