목록으로

Programming Notes

[배포] 스프링 서버를 배포 및 쉘 스크립트로 최신화 및 배포 자동화 해보기 (https, nginx)

안녕하세요. 최근 우테코 미션 수행 중 직접 스프링 서버를 배포하며 겪었던 경험을 바탕으로 배포 과정을 자동화하는 방법을 공유하고자 합니다. 처음 배포를 진행할 때는 막막했지만, 쉘 스크립트를 활용하여 자동화하고 HTTPS 설정까지 완료하니 효율성이 크게 향상되었습니다. 이...

안녕하세요. 최근 우테코 미션 수행 중 직접 스프링 서버를 배포하며 겪었던 경험을 바탕으로 배포 과정을 자동화하는 방법을 공유하고자 합니다. 처음 배포를 진행할 때는 막막했지만, 쉘 스크립트를 활용하여 자동화하고 HTTPS 설정까지 완료하니 효율성이 크게 향상되었습니다. 이 글에서는 Ubuntu 22.0.4 기반의 EC2 인스턴스에 스프링 서버를 배포하고, Nginx를 이용하여 HTTPS를 설정하는 과정과 쉘 스크립트를 활용한 자동화 방법을 자세히 설명하겠습니다.

먼저 EC2 인스턴스 생성부터 시작합니다. (EC2 인스턴스 생성 방법은 네이버 블로그 등 다양한 자료가 많으므로, 본 글에서는 Ubuntu 22.0.4 기준으로 인스턴스 생성 과정을 간략히 설명하고 넘어가겠습니다. 필요한 사양은 개인 프로젝트에 맞춰 선택하시면 됩니다.) 인스턴스가 생성되면 SSH를 통해 접속하여 서버 설정을 시작합니다. 시스템 시간을 맞추기 위해 Timezone을 변경하는 것이 좋습니다. 이후 Git을 설치하고, 필요한 개발 도구들을 설치합니다. Java, Maven 또는 Gradle과 같은 스프링 프로젝트 빌드에 필요한 도구들을 설치하고 환경변수를 설정하는 것을 잊지 마세요.

본격적인 배포 자동화를 위해 쉘 스크립트를 작성합니다. 스크립트는 크게 프로젝트 코드 다운로드, 빌드, 실행, 그리고 기존 버전 백업 등의 단계로 구성됩니다. Git을 이용하여 최신 코드를 다운로드 받고, Maven 또는 Gradle을 이용하여 프로젝트를 빌드합니다. 빌드된 jar 파일을 특정 디렉토리에 배치하고, 실행 중인 스프링 서버가 있다면 graceful shutdown을 통해 안정적으로 종료한 후 새로운 jar 파일을 실행합니다. 이전 버전의 jar 파일은 백업 디렉토리에 보관하여 롤백에 대비합니다. 이 과정을 쉘 스크립트로 자동화하여 배포 시간을 단축하고, 실수를 최소화할 수 있습니다. 스크립트 내에는 에러 처리를 위한 try-catch 문과 같은 예외 처리 로직을 추가하는 것이 좋습니다. 예를 들어, git clone 실패 시 이메일 알림을 보내는 기능을 추가할 수 있습니다.

도메인을 발급받고 SSL 인증서를 발급받아 Nginx를 통해 HTTPS 설정을 진행합니다. Nginx 설정 파일을 수정하여 스프링 서버의 포트를 프록시하도록 설정합니다. 이 과정에서는 SSL 인증서 파일의 위치와 포트번호를 정확하게 설정해야 합니다. 마지막으로 스프링 서버의 CORS 설정을 구성하여 다른 도메인에서의 접근을 허용합니다. 만약 특정 도메인만 접근을 허용하려면 허용할 도메인들을 명시적으로 지정해야 합니다.

쉘 스크립트를 통해 배포를 자동화함으로써, 배포 과정에서 발생할 수 있는 실수를 최소화하고 시간을 절약할 수 있었습니다. 자동화된 배포 과정은 팀 협업에도 도움이 되며, 지속적인 통합 및 지속적인 배포 (CI/CD) 환경 구축의 첫걸음이 될 수 있습니다. 이 글이 스프링 서버 배포 자동화를 계획하시는 분들에게 도움이 되기를 바랍니다. 더 자세한 내용은 댓글을 통해 문의해주세요.