개발놀이터

Docker + Nginx를 이용해 스프링 프로젝트 무중단 배포하기 : 과정 본문

배포/Docker

Docker + Nginx를 이용해 스프링 프로젝트 무중단 배포하기 : 과정

마늘냄새폴폴 2023. 6. 12. 16:10

저번 포스팅에선 docker + nginx를 가지고 무중단 배포를 하는 방법에 대해서 설명한 것이구요. 이번 포스팅에선 전체적인 과정에 대해서 알아보도록 하겠습니다. 

 

이번 포스팅은 아래와 같은 순서로 이뤄집니다. 

 

  1. 스프링 프로젝트에서 무언가 변경 (ver.2)
  2. git commit / push
  3. EC2 에서 프로젝트 폴더에 들어간 뒤 git pull
  4. ./gradlew build 
  5. 내 프로젝트를 docker image로 build
  6. 도커 허브에 방금 만든 이미지 push
  7. docker-compose.yml 파일에서 버전 변경
  8. deploy.sh 실행

 

결과부터 말씀드리자면 이 과정 굉장히 복잡합니다. 그리고 굉장히 귀찮습니다. 일단 이번 포스팅에선 과정을 보여드리고 다음엔 jenkins를 이용해 CI / CD 파이프라인을 자동화하는 과정을 포스팅해보도록 하겠습니다. 

 

우선 시작해보죠!

 

무중단 배포 과정

우선 우리는 지금 "최신상품" 이라고 써있는 것을 "최신상품 NEW!!!" 로 바꿀겁니다. 

 

1. 스프링 프로젝트에서 무언가 변경 (ver.2)

화질이 좋지않군요... 영상을 스샷찍었더니 이런 불상사가 발생했습니다. 아무튼 NEW!!!로 바꾼 모습입니다. 

 

2. git commit / push

깃과 연결된 프로젝트를 커밋후 푸시합니다. 

 

3. EC2에서 프로젝트 폴더에 들어간 뒤 git pull

발표용 자료이기 때문에 돋보기를 사용했습니다. 

$ ls
$ git pull

 

4. ./gradlew build

프로젝트 디렉토리에서 gradlew 를 빌드해줍니다. 만약 gradlew에 권한이 없다고 뜨면 이 디렉토리에서 슈퍼권한을 주면 됩니다. 

$ sudo chmod 777 ./gradlew
$ ./gradlew build

 

4. 내 프로젝트를 docker image로 build

이번엔 Dockerfile과 docker-compose등이 있는 디렉토리로 한칸 올라와서 이미지로 만들어줍니다. 

$ cd ..
$ docker build -t garlicpollpoll/capston:2 .

도커 허브에 넣기 위해서 ${계정이름}/${리포지토리 이름}:${버전 혹은 태그} 순서로 이미지를 만들었습니다. 

 

아까 없던 버전2가 이미지로 생성된 모습입니다. 

$ docker images

 

6. 도커 허브에 방금 만든 이미지 push

도커 허브에 방금 만든 이미지를 푸시합니다. 

$ docker login
Username: garlicpollpoll
Password:
Login Succeeded!

# 이미 한번이라도 로그인 했으면 아이디 비밀번호 치는 과정은 생략됨

$ docker push garlicpollpoll/capston:2

 

우리가 올린 버전2가 도커 허브에 잘 들어갔습니다. 

 

7. docker-compose.yml 파일에서 버전 변경

docker ps 명령어로 현재 올라와있는 컨테이너의 버전을 확인합니다. 작아서 잘 안보이시겠지만 이미지는 버전1을 사용하고 있고 블루 그린 중 블루와 8080포트를 사용하고 있습니다. 

 

그럼 우리는 그린의 docker-compose 파일로 들어가서 버전을 바꿔줘야합니다. 

 

이렇게 태그를 2로 바꿔줍니다. 이렇게 바꾸면 도커 허브에서 태그가 2인 이미지를 가져와서 컨테이너로 띄워줄겁니다. 

 

8. deploy.sh 실행

정상적으로 완료되었고 로그를 보시면 그린버전의 컨테이너를 만들고 블루버전의 컨테이너를 중지시킨 뒤 컨테이너를 삭제시켰습니다. 

 

이제 그린버전의 포트인 8081로 접속해보면?

짜잔 바로 바뀌었습니다. 

 

이렇게 블루 그린 배포를 진행하면 원래 컨테이너가 내려갔다 올라가는 시간인 1분에 비해 1초~2초 정도로 짧게 줄일 수 있습니다. 

 

 

마치며

 

저번 포스팅에서 배포 방법을 알려드렸고 이번 포스팅에선 배포 과정에 대해서 알려드렸습니다. CI / CD 생각보다 재밌으니 여러분도 한번 도전해보세요!

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~