Docker와 Jenkins로 CI / CD 환경 구축하기[1]

안상철·2022년 6월 20일
2

CI / CD

목록 보기
1/8
post-thumbnail

이번 포스팅에서는 개념정리와 환경구축을 위한 필요사항에 대해서만 기술하겠습니다.

CI /CD

먼저 CI / CD부터 무엇인지 알고 갑시다. 쉽게 말하자면 빌드/테스트 자동화과정 입니다. CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuos Integration)을 의미하고, CD는 지속적인 서비스 제공(Continuous Development)를 의미합니다.

AWS의 코드커밋이나 모두가 사용하는 깃헙/깃랩처럼 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 저장소에 업로드 -> 지속적 통합이 가능하도록 해줍니다.

이러한 빌드-배포 과정을 대신 수행 해 주는 툴은 여러가지가 있겠지만 이번에는 접근과 설치가 용이하면서 성능또한 우수해 개인 개발자나 실무에서도 사용할 수 있는 DockerJenkins를 이용해 빌드-배포 환경을 구축 해 보겠습니다.

위에서 자동화 과정이라고 했지만 자동화가 아니라 수동 배포를 설명드리겠습니다. 자동화 과정으로 변경하는 방법은 수동 환경에서 몇 가지만 추가 해 주면 되기 때문에 중간중간 설명으로 넣겠습니다.

Docker

다음은 Docker가 무엇인지 알아봅시다.

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 리눅스 컨테이너를 기반으로 특정 서비스를 패키징하고 배포합니다. 다양한 이유로 계속 변경되는 서버환경이나 개발환경등의 문제를 해결하기 위해 등장했습니다. 위에서 언급한 CI / CD 환경을 구축하는 이유와 비슷하죠.

도커는 컨테이너 단위로 분리된 환경에서 서비스를 관리하기 때문에 프로그램의 설치/제거 및 서비스의 독립적인 운용이 가능하고, 하나의 서버에 포트만 변경해서 동일한 서비스를 실행할 수 도 있습니다.

예시로 윈도우에서 리눅스를 실행하거나 서비스를 리눅스 서버에 배포하려면 AWS에서 EC2같은 가상 PC를 대여해 올리거나, PC내 저장공간을 윈도우 / 리눅스로 따로 나눠 한 가지만 구동시키는 방법을 선택해야 했습니다.

하지만 도커는 가상 머신이 아니라 서비스끼리 격리만 해 주기 때문에 도커가 설치되어 있는 어느 곳에서든 컨테이너를 실행할 수 있고, 때문에 쉽게 개발서버나 테스트 서버 등을 만들 수 있습니다.

추가로 도커는 가상 머신에 비해 꼭 필요한 정보만 담아서 구동되기 때문에 용량이 줄어들고 배포가 쉬워집니다.

이 외에도 도커의 특징으로는

  • 도커는 ‘컨테이너’ 라는 기준으로 서버를 배포 하기 때문에 모든 서비스들의 배포 과정이 동일해 지는 표준성

  • 컨테이너를 실행하기 위한 압축파일인 ‘이미지’단위로 서비스를 관리하는 이미지

  • 오픈 소스이므로 특정 회사나 기술 등에 구애받지 않는다는 등의 특징이 있습니다.

Jenkins

마지막으로 젠킨스입니다.

젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴입니다.

젠킨스는 소스에 대한 통합관리를도 해 주지만, 이 부분은 다른 Repo나 코드커밋 등에서도 사용하고 있기 때문에 약술하고 젠킨스만의 이점을 알아보도록 하겠습니다.

  • 500여 가지가 넘는 플러그인을 통해 내가 원하는 추가기능, 스크립트를 작성할 수 있다.

  • aws의 초기설정이 어마무시하게 복잡한데 비해 젠킨스의 빌드 -> 배포 과정은 단순하다.

  • 빌드 스크립트를 직접 구성해 빌드 자동화 혹은 특별한 트리거를 발생시킬 수 있다.

  • 플러그인 뿐만 아니라 다른 CI툴이나 일반 개발용 툴과 연결성이 좋아 SonarQube와 연동하면 코드 표준을 검사하게 한다던지 등의 액션을 수행할 수 있다.

이처럼 젠킨스는 우리의 프로젝트를 빌드 ~ 배포하는데 이점이 많습니다. 특히 4번의 이점을 적극 활용할 예정인데, 이제 방금 설치한 Docker와 Jenkins를 연동 해 봅시다.

젠킨스는 로컬에 설치하지 않고 도커 환경에서 실행 할 예정입니다.

준비물

먼저 다음과 같은 환경에서 작업을 시작 할 겁니다.

  1. 운영체제는 윈도우 입니다. 사무실 PC운영체제가 윈도우이기도 하고, 개인 개발자들도 리눅스 환경보다는 윈도우가 많을겁니다. 물론 윈도우에서 리눅스 서버를 통해 빌드-배포 할 겁니다.

  2. 당연하게도 Docker와 Jenkins를 설치해 운용합니다.

  3. 빌드-배포 할 서버가 필요한데 AWS의 EB환경에 빌드-배포 합니다. 1년짜리 프리티어로 진행해도 되고, 서버 유지비가 많이 나오지 않는다면 계속 결제해서 사용해도 되겠죠. EB와 S3구축하는 방법도 기술할테니 걱정하지 않아도 됩니다.

환경구축 순서는 Docker -> EB -> S3 -> Jenkins 순서대로 구축하겠습니다. EB에는 API를, S3에는 정적 웹 호스팅을 통해 Front를 배포하면 하나의 프로젝트를 완벽하게 서버에 올릴 수 있습니다. 참고로 RDB 구축환경은 아직 다루지 않으니 참고 해 주세요.

2022.08.19
AWS 관련 문서를 만들기 시작했습니다!

참조

https://wooody92.github.io/docker/Docker-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/
https://velog.io/@ckstn0777/%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글