본문 바로가기
개발/일지

EP1. 개인 서버 이전 및 배포 자동화 환경 구축

by Evan Park

최근 나는 AWS의 Lightsail에서 운용 중인 개인 서버들을 NAS 서버로 이전하는 작업을 진행하였다.

 

이전하는 주된 이유는 3 개월 무료 프로모션이 종료되어 비용을 지불해야 하는 상태가 되어서이다.

(지금은 긴축 기간이어서.. 여기다 더 비용을 투자하고 싶지 않았다.)

 

해당 서버에는 다음과 같은 애플리케이션이 돌아가는 상태였다.

  • Nginx 기반 프로필 사이트
  • 몇 가지 유틸리티 기능을 제공하는 개인 용도의 Spring Boot API 서버

이를 기존 NAS 서버에 이동시키는 것은 간단한 작업이나. 올리는 김에 나는 여기에 몇 가지 작업을 더 추가하기로 하였다.

 

추가하려는 기능은 다음과 같다.

  • Docker 위에 각각의 애플리케이션이 돌아가도록 세팅
  • 배포 자동화 기능 도입

먼저 Docker 도입의 주된 이유는 Lightsail 서버와 달리 NAS 서버에는 이미 여러 기능들이 Host에 실행되고 있는 상태여서 보안성이나 시스템의 안정성의 이유로 격리된 환경 구성이 필요했다.

 

그리고 배포 자동화의 도입은 나의 귀차니즘에 의해 애플리케이션을 수동으로 배포하는 방식을 이제 그만하기 위해서였다...

 

계획한 시스템의 구성은 다음과 같다.

시스템 구성도

 

먼저, 배포 자동화 환경을 구축하기 위해 Jenkins를 선택하였다. 처음 써보기는 하지만 비용 절감을 위해 독립적인 배포 환경이 필요하였고. 몇 가지 문서를 읽어보니 내가 시스템을 구성하기 위한 충분한 기능을 제공하는 것으로 보였다.

 

기본적인 배포 흐름은 내가 Github에 각 프로젝트의 코드를 Push 하면 Github는 Webhook으로 내 Jenkins 서버에게 알려 Jenkins는 내가 구성한 Pipeline sequence를 기준으로 빌드와 배포 프로세스를 진행한다.

 

프로필 사이트는 FTP를 통해 nginx의 html directory에 빌드된 actifact를 업로드하는 방식이며 Spring Boot 애플리케이션은 빌드 후 도커라이징하여 Container를 재시작하는 방식으로 구성하였다.

 

이번 이전 작업으로 인해 나는 AWS 프로모션 이후의 발생할 서버 비용을 절감하고 NAS에 독립적인 애플리케이션 실행 환경 그리고 코드만 잘 작성하여 Push 하면 배포를 신경쓰지 않아도 잘 돌아갈 수 있도록 구성하였다.

 

다음 사진은 Jenkins 데시보드에서 제공하는 Pipeline Stage View이다. Spring Boot 애플리케이션의 소스코드를 가져오고 빌드 및 배포까지 하는 과정을 소요된 시간별로 시각화하여 보여준다.

Jenkins Pipeline Stage View

 

또한, 이번 환경 구축을 진행한 방법 그리고 구축 도중에 발생한 이슈들을 정리하여 블로그에 천천히 올려보도록 할 예정이다.

'개발 > 일지' 카테고리의 다른 글

EP3. 개인화 TTS 적용  (0) 2022.07.02
EP2. Spring Boot 환경에 New Relic APM 도입  (0) 2022.07.02