ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내가 세운 블로그 서비스 - 도커 배포전략과 느낀점
    블로그 개발 기행 🥾 2022. 12. 2. 20:28

    1. 들어가며

    이전 아카데미에서는 서비스에 따라 클라우드 인스턴스를 각각 배포하였다.
    하지만 문득 들었던 생각이 인스턴스의 성능을 좀 더 좋은 것을 사용하고 내부에 도커를 사용하면 애플리케이션의 관리가 더 편할 것 처럼 느껴졌다.
    그리고 이런 메리트도있다 생각하여 끄적여봤다.

    1. 컨테이너 단위로 서비스를 관리하기 때문에 편리하다.
    2. 도커 허브나 깃헙 패키지같은 서비스를 이용하면 내가 만들고 배포할 컨테이너를 한눈에 확인이 가능하다.
    3. 이전 버전에 대해 복구가 필요 할 때 맘껏 복구 할 수 있다.
    4. 복구하는 절차도 맨날 scp로 복사하고 커멘드를 일일히 실행하던 일에서 docker pull, run 과같은 명령어로 쉽게 실행이가능하다
    5. 서비스를 인스턴스 단위에서 관리하던 것을 컨테이너 단위로 옮겼기 때문에 한개의 인스턴스에서 관리가 가능하다.
    6. 만에하나(내 블로그는 아니겠지만...) 회사 서비스가 커진다면 컨테이너를 쿠버네티스로 관리하게 될텐데, 이를 통해서 클라우드 네이티브로 가는 확장성이 좋아진다.
    등등으로 적용해보고 싶은 욕구가 막 생겼고 도입을 민첩하게 해보았다.

    하지만 처음은 당연히 쉽지는 않다.
    그 일행기를 적어보려 한다.

    2. 서비스 구조는 어떻게 설계했는가?

    Blog Architecture

    보다시피 vm 인스턴스를 하나 생성하고 그 안에 엔진엑스를 통해서 리버스 프록시를 당긴다.
    리버스 프록시를 통해서 각 서비스에 맞게 도커 블로그 서비스와 도커 유저 서비스로 라우팅하도록 구성하였다.

    이전 쇼핑몰 프로젝트에는 Spring Cloud Gateway를 사용하였었다.
    Spring Cloud Gateway에서도 요청에 따른 라우팅을하였는데 지금 Spring Cloud Gateway를 추가할 만큼 크지도 않고, 수고만 더 들게 된다 생각하여 엔진엑스만 두고 설계를 하였다.

    3. 배포전략

    자 그러면 도커를 처음 사용하게되면서 배포전략에 대해서 간단히 설명해보려한다.
    두괄식으로 배포툴과 배포 순서를 이야기하고 부가설명을하려한다.

    사용 툴
    1. Dockerfile 사용하지 않았음! -> gradle의 "bootBuildImage"를 이용하였다.
    2. github-package 이미지 저장소를 사용하였다.
    3. CI/CD 툴은 github-actions 사용

    배포 순서
    1. gradle 프로젝트 테스트
    2. application.yml 파일 구문 추가 (나중에 이유 설명)
    3. bootBuildImage 실행
    4. 도커 이미지의 버저닝을 위해 메인 브렌치에 커밋된 커밋 메시지를 기반으로 버전 정보를 추출한다.
    5. 현 프로젝트의 릴리즈를 수행한다.
    6. github-package 로그인
    7. github-package에 이미지 푸시
    8. Azure VM에 최신 이미지 풀 명령
    9. Azure VM에 기존 컨테이너 삭제 및 이전 버전의 이미지 삭제 명령
    10.Azure VM에 최신 이미지 컨테이너로 실행 명령
    11. Azure VM에 이미지 버전이 기록된 파일에 현재 배포하는 버전으로 문자열 오버라이팅 명령

    효과는 매우 강력했다!


    사실 일부러 Dockerfile를 만들지않고 배포를 관리해보고싶어서 만들었던 배포 순서이다.
    구글링하면 여러 블로그에는 이런식으로 배포전략을 취하지는 않는다.
    하지만 "gradle bootBuildImage"로 명령어 하나로 도커 이미지 파일을 그냥 생성해주는 기능이 너무 편리해서 이걸로 사용해봤다.

    application.yml에 구문 추가한 이유는 build.gradle 파일에 bootBuildImage phase를 설정 중 런타임 옵션 -D옵션을 주입에 자꾸 실패를 번복하여 깃헙 액션에 그냥 echo 명령어로 떄려 박았다.
    (+ 지금은 해결했음 https://octskyout.tistory.com/50)

     

    사실 배포 순서 자체만 보면은 서비스 인스턴스에 배포하는 예전에 만들어놓은 플로우와는 별로 변경된 것은 없지만 깃헙 패키지, 깃헙 액션의 여러가지 확장을 사용해볼 수 있는 좋은 기회였고 무엇보다 도커로 배포해봐서 뿌듯한 경험이라 생각한다.

    + 깃허브 오른쪽 사이드바가 더 이뻐진다. 프로젝트 뽕이 차오른드아아ㅏㅏㅏ

    뽕+1

     

     

    배포전략에 대한 CI/CD 파일을 열람하고싶다면 이곳으로...

    https://github.com/oct-sky-out/little-blog

     

    GitHub - oct-sky-out/little-blog

    Contribute to oct-sky-out/little-blog development by creating an account on GitHub.

    github.com

     

    댓글

oct_sky_out