[GitHub Actions + EC2 배포] 502 Bad Gateway 오류 (app.jar 디렉토리 이슈)

문준일·2025년 4월 8일

❗ 문제 상황

Spring Boot 애플리케이션을 Docker 기반으로 EC2에 배포하고, Nginx를 통해 HTTPS + 도메인까지 연결한 상태였습니다.
GitHub Actions를 이용해 .jar 파일과 Dockerfile을 EC2로 전송하고,
배포 자동화를 수행하는 단계까지 완료했지만...

브라우저 접속 시 계속해서 502 Bad Gateway 오류 발생 😱


🧪 상황 요약

  • GitHub Actions는 성공(Success)으로 표시됨 ✅
  • EC2에 컨테이너도 정상적으로 실행되는 것처럼 보임 (그러나 실제로는 실행 안 됨)
  • https://도메인/api/test에 접속하면 502 Bad Gateway가 발생

🔍 원인 분석

✅ 핵심 원인: app.jar이 디렉토리로 존재함

GitHub Actions에서 아래와 같이 .jar 파일을 복사하고 있었음:

scp build/libs/yeoyu-seat-be-0.0.1-SNAPSHOT.jar ubuntu@ec2:~/app.jar

그런데 EC2 내에 이미 app.jar이라는 디렉토리가 존재해 있었고,
이 상태에서 scp를 수행하면 ~/app.jar/파일명.jar로 복사됨.

즉, Dockerfile에서 COPY app.jar app.jar로 복사하면 디렉토리를 복사하게 됨 → java -jar app.jar 실행 실패 → 컨테이너 종료 → Nginx 연결 실패 → 502 오류 발생


🛠 해결 방법

deploy.yml 수정 - app.jar 디렉토리 삭제 추가

- name: EC2 app.jar 디렉토리 삭제
  run: |
    echo "🧹 EC2의 app.jar 디렉토리 삭제"
    ssh -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "rm -rf ~/app.jar"

이 스텝을 scp 전에 삽입하여, app.jar이 디렉토리로 존재하지 않도록 강제 삭제 처리!

이후 과정

  • .jar 파일을 다시 정확히 전송
  • Docker 이미지 빌드 및 컨테이너 실행 정상 작동
  • 브라우저에서 최신 코드 응답 확인 완료 🎉

✅ 결과

  • ✅ GitHub Actions 배포 성공
  • ✅ Docker 컨테이너 정상 실행
  • ✅ Nginx 연동 성공
  • ✅ 브라우저에서 최신 Spring Boot API 응답 확인!

📝 느낀 점

  • .jar 파일이 정상적으로 보이더라도, 디렉토리로 존재할 수도 있다는 점을 처음 알게 되었음
  • 배포 자동화에서는 항상 이전 상태를 정리(clean) 하고 새로 시작하는 것이 중요
  • 디렉토리/파일 구분 하나 때문에 한나절이 날아갈 수 있음... 😅

💡 관련 기술

  • GitHub Actions
  • EC2 (Ubuntu 22.04)
  • Spring Boot + Gradle
  • Nginx
  • Docker
profile
하나씩 실천하는 개발자

0개의 댓글