게시판 구현(4) EC2이용해 배포하기

도롱뇽·2025년 5월 12일
post-thumbnail

안녕하세요. 이번에는 EC2를 이용해 Spring Boot로 만든 게시판을 실제 서버에 배포해보았습니다.

사실 지난번 배포 관련 스터디를 처음 했을 때(약 한 달 전), 스터디가 끝나고 집에서 혼자 계속 작업해 배포에 성공했었습니다. 하지만 당시 기록을 남기지 않아, 이번 글을 통해 과정을 다시 정리하며 복습해보고자 합니다.

이전까지는 로컬 환경에서만 게시판을 실행해보았지만, 다른 사용자도 게시글을 작성할 수 있도록 하기 위해 실제 서버에 배포하는 과정이 필요했습니다.

개발자들이 흔히 말하는 “배포는 삽질의 연속”이라는 말이 왜 나오는지 몸소 느끼게 되었습니다.


EC2에 배포한 전체 흐름

  1. 프로젝트 개발 및 빌드
    게시판 기능 구현을 마친 후, 프로젝트를 .jar 파일로 빌드하였습니다.

    ./gradlew build

  2. EC2 인스턴스 생성
    AWS 콘솔에서 Ubuntu 20.04 기반 EC2 인스턴스를 생성하였습니다.

  3. 보안그룹 설정
    인바운드 규칙에 22 (SSH), 8080 (서버 포트), 이후 80 (HTTP) 포트를 추가로 개방하였습니다.

  4. SSH로 EC2 접속
    .pem 키 파일을 사용하여 다음과 같은 순서로 접속을 진행하였습니다.

    1. Git Bash 실행
    2. Downloads 디렉토리로 이동
    cd /c/Users/사용자명/Downloads
    1. 권한 설정
    chmod 400 ec2-key.pem
    1. SSH 접속
    ssh -i ec2-key.pem ubuntu@공인IP

    접속 과정 중 Are you sure you want to continue connecting (yes/no/[fingerprint])? 메시지가 나타나며, yes를 입력해 신뢰를 설정하였습니다.

    아래는 정상적으로 EC2에 접속한 화면입니다.

  5. Java 설치
    EC2에 Java를 설치하기 위해 다음 명령어를 실행하였습니다.

    sudo apt update
    sudo apt install openjdk-17-jdk

  6. MariaDB 설치
    데이터 저장을 위한 MariaDB를 설치하였습니다.

    sudo apt install mariadb-server

    이후 사용자 생성과 권한 부여를 통해 데이터베이스 설정을 완료하였습니다.

  7. 프로젝트 파일 복사
    로컬에서 .jar 파일을 EC2로 복사하였습니다.

    scp -i jaeung.pem board2.jar ubuntu@13.48.136.24:~/

    복사된 파일은 ls 명령어로 정상 업로드 여부를 확인하였습니다.

  8. 환경 설정 파일 수정
    application.yml 파일을 EC2 환경에 맞게 수정하였습니다.

  9. 프로그램 실행
    업로드된 .jar 파일은 /app.jar로 저장되었고, 아래 명령어로 백그라운드 실행하였습니다.

    java -jar /app.jar &

    이번에는 nohup을 사용하지 않았지만, EC2가 중간에 종료되지 않아 현재까지 서버가 정상적으로 작동하고 있습니다.

    ※ 참고: EC2가 재시작될 경우에도 자동 실행되도록 하려면 nohup 또는 systemd를 사용하는 것이 좋습니다.

  10. 8080 포트로 접속 확인
    브라우저에서 다음 주소로 접속하여 정상적으로 게시판이 동작함을 확인하였습니다.

    http://13.48.136.24:8080/


GitHub Actions로 자동 배포까지!

매번 .jar 파일을 수동으로 빌드하고 복사하는 과정이 번거로워, GitHub Actions를 이용한 자동 배포를 설정하였습니다.

  • main 브랜치에 push
  • .github/workflows/deploy.yml이 실행되어
  • EC2에 SSH 접속 → 프로젝트 clone → 빌드 → 실행까지 자동화됩니다.

이 과정에서 SSH 키 설정을 잘못 건드려 EC2 인스턴스 하나를 날려먹은 경험도 있었습니다.
결국 루트 디스크를 복구하고 새 인스턴스를 생성한 뒤, 다시 자동 배포를 연결하여 지금은 push 한 번으로 서버에 반영되는 구조를 완성하였습니다.

참고 사이트:
https://iamjooon2.tistory.com/25
https://m42-orion.tistory.com/139


한 달 후, 접속이 되지 않는다?

모든 설정을 마친 후 한 달 뒤, 벨로그 정리를 위해 다시 접속해보았는데 사이트가 열리지 않았습니다.

‘서버가 꺼졌나?’ 생각하며 확인해보니 EC2와 DB는 모두 정상 작동 중이었습니다.

원인은 생각보다 단순했습니다.
포트를 붙이지 않고 http://<IP>로 접속했기 때문이었습니다.

정상 주소는 http://<IP>:8080으로, 이를 입력하자 바로 접속이 되었습니다. 😅


소감

이번 배포 과정을 통해 다음과 같은 내용을 경험하고 학습할 수 있었습니다.

  • EC2 인스턴스 생성 및 서버 환경 구성
  • MariaDB 설치 및 연동
  • Spring Boot .jar 파일 배포
  • GitHub Actions를 통한 자동화 설정
  • 배포 후 발생한 포트 설정 실수

이후에는 Nginx 설정을 추가하여 도메인 주소만 입력해도 접속 가능하도록 구성할 계획이입니다.

profile
개발자 성장 기록용

3개의 댓글

comment-user-thumbnail
2025년 5월 12일

깔끔하게 잘 하셨네요 ,,, GitHub Actions로 자동 배포까지 해보시다니 !!!! 대단하십니다 ..

답글 달기
comment-user-thumbnail
2025년 5월 12일

이야... 좋았다

답글 달기
comment-user-thumbnail
2025년 5월 13일

코드 수정 후 로컬이랑 ec2서버 왔다갔다하면서 업데이트 해줬었는데 자동 배포를 알았더라면 조금이라도 편하게 배포할 수 있었을 것 같아요! 덕분에 알아갑니다

답글 달기