EC2에서 Spring Boot 실행 트러블슈팅 경험 공유

Frog Lemon·2025년 10월 10일
0

트러블 슈팅

목록 보기
3/4
post-thumbnail

이번 글에서는 EC2에서 Spring Boot 애플리케이션을 실행할 때 겪었던 문제와 해결 과정을 정리한다. 실제 사례를 중심으로 문제 원인 분석과 해결 방법을 단계별로 기록했다.


1. 프로젝트 위치 확인

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 파일이 존재하는 것을 확인했다.


2. 애플리케이션 백그라운드 실행 시도

nohup을 사용하여 JAR 파일을 백그라운드로 실행했다.

nohup java -jar build/libs/moitz-0.0.1-SNAPSHOT.jar > app.log 2>&1 &

하지만 실행 직후 프로세스가 종료되었다.

ps -ef | grep java를 통해 확인해도 JAR 프로세스가 남아있지 않았다.


3. MongoDB와 Redis 서버 상태 확인

Spring Boot 설정을 보면 MongoDB와 Redis에 연결하도록 되어 있었다.

먼저 MongoDB가 실행 중인지 확인했다.

ps -ef | grep mongod
systemctl status mongod
  • MongoDB 프로세스가 정상적으로 실행 중임을 확인했다.
  • PID 3031에서 8시간 이상 가동 중이었다.

다음으로 Redis 상태를 확인했다.

ps -ef | grep redis
  • Redis도 정상적으로 127.0.0.1:6379에서 실행 중이었다.

즉, Spring Boot 종료 원인은 DB나 Redis 부재 문제가 아니었다.


4. 로그 디렉토리 및 권한 확인

애플리케이션이 로그를 기록하는 디렉토리 권한을 확인했다.

ls -ld ~/actions-runner/_work/2025-moitz/2025-moitz/backend/logs
  • 로그 디렉토리는 존재했고, ubuntu 계정으로 읽기/쓰기/실행 권한이 있었다.
  • 따라서 로그 권한 문제로 종료된 것은 아니었다.

5. JAR 직접 실행 및 로그 확인

run.log 파일로 표준 출력과 오류 출력을 기록하며 애플리케이션을 실행했다.

java -jar build/libs/moitz-0.0.1-SNAPSHOT.jar > run.log 2>&1
tail -n 50 run.log

로그를 확인한 결과, 초기 WARN 메시지 외에는 fatal error가 없었지만 애플리케이션은 바로 종료되었다.


6. 애플리케이션 종료 원인 파악

추가 로그 확인 결과, 애플리케이션 시작 시 외부 OPEN API를 호출하는 과정에서 에러가 발생했다.

ExternalApiException: OPEN API 응답이 정상적으로 생성되지 않았습니다.
at com.f12.moitz.infrastructure.client.open.OpenApiClient.searchRoute(OpenApiClient.java:96)
  • 애플리케이션 시작시 SubwayEdges 초기화를 위한 Setup과정에서 API 호출을 시도했다.
  • 외부 API 관련 예외가 전파되었고, Spring Boot 컨텍스트가 종료되었다.
  • 결과적으로 서버가 시작 직후 종료된 것이다.

원인 요약

  • MongoDB와 Redis 서버 모두 정상
  • 로그 디렉토리 권한 문제 없음
  • JAR 파일 자체는 정상 실행 가능
  • 애플리케이션이 바로 종료된 이유: 외부 OPEN API 호출 실패로 ApplicationContext 초기화 실패

해결 전략

아직 이부분에 대해서는 고민을 하고 있다. 외부 API가 애플리케이션 시작때 관여를 하고 있다면 외부 API의 서버에 문제가 생긴다면 (ex) 대한민국 전산망 화재 ) 우리의 서비스는 배포 조차 할 수 없는 것이다. 현재로서는 아래와 같은 방법이 생각이 난다.

로컬 더미 데이터 활용

개발 환경에서는 OPEN API 대신 로컬 JSON/CSV 데이터를 사용하여 초기화한다.


마무리

이번 경험을 통해 EC2에서 Spring Boot 실행 시 흔히 겪는 문제들을 확인하고, 외부 API 호출과 관련된 초기화 과정이 애플리케이션 종료의 주요 원인임을 파악했다.

개발 환경에서는 예외 처리와 API 호출 지연을 통해 서버를 안전하게 실행할 수 있다는 것을 배웠다.

예전에는 개발을 하면서 데이터의 중요성을 크게 못느꼈던 것 같다. 하지만 성장하면서 발로 뛰어 모은 데이터, 다양한 로그 데이터등이 서비스를 성장시킬 수 있는 가치있는 보물임을 느꼈다.

profile
도전하며 굴러가는 돌멩이, 인생 마라톤 중 😎

0개의 댓글