본 내용은 원티드 프리온보딩 과정을 회고하는 목적으로 작성되었습니다.
이번 게시물은 다중화 및 거대화 된 서비스의 효율적인 배포관리를 위한 내용입니다.
이렇게 앞선 내용들을 통해 규모가 커지는 서비스를 독립적으로 분리하여 성능을 개선하는 방법들을 알게되었습니다.
그러나 시스템이 거대해짐에 따라 로컬이 아닌 환경에서 개발 및 배포에도 복잡성이 증가하게 됩니다.
배포해야 하는 서버의 증가, 코드를 커밋하기 전 사람이 일일이 종합적으로 테스트하는 번거로움은 실제 개발이 아닌 불필요한 곳에 많은 공수와 비용이 들 수 있습니다.
이를 위해 지속적인 통합, 지속적인 배포 환경 자동화CI/CD(ContinuosIntegration/ContinousDeployment) 가 필요합니다.
Jenkins와 같은 CICD 시스템을 활용하여 파이프라인을 구축하면 테스트와 배포의 많은 부분을 자동화 할 수 있습니다.
Code -> Test -> Build -> Deploy
개발자가 코드를 Commit하게 되면 WebHook이 등록된 깃허브와 같은 형상관리 툴에서 CICD 서버에서 변경사항을 감지합니다.
CICD 서버는 필요한 테스트들(Spring의 Junit5 기반의 단위/통합 테스트 같은거..) 을 진행 후 문제가 없다면 DockerFile을 참조하여 배포가 가능한 Snapshot 형태의 DockerImage로 빌드하는 과정을 거친 후 서버에 자동으로 배포를 실행합니다.
배포를 했는데 만약 서비스를 사용하는 곳의 시스템 환경이 다른 경우에는 문제가 발생할 수 있습니다! (환경 변수 설정, 시스템 라이브러리, 시스템 환경 차이)
이러한 문제를 해결하기 위해 Docker를 사용합니다.
Docker는 컨테이너 기반의 가상화 기술을 사용하여 실행 환경을 추상화하고, 실행 환경을 패키징합니다. 이는 어떤 서버에서든 동일한 환경에서 배포될 수 있도록 합니다.
DockerFile에 배포하는 해당 어플리케이션의 환경설정을 설정해 둔다면 이를 기반으로 DockerImage를 생성하고, DockerImage가 잘 실행된다면 어떤 서버에서도 문제없이 잘 배포가 될 수 있습니다.
참고문헌
원티드 교육자료