4월 초부터 배포 스터디에 참여하게 되었다. 나는 docker, jenkins 등을 이번에 처음 접했고, 사전 지식이 없다 보니 실습을 이어가면서도 이해되지 않는 부분이 너무 많았다. 그래서 배운 지식들을 정리하려고 한다
작성된 코드를 빌드하고, 빌드가 완성된 실행 가능한 파일(jar, war)을 사용자가 접근할 수 있는 환경에 배치하는 것을 말한다. 최종적으로 만들어진 산출물을 배포하여 사용자들이 사용하게 하는 것이다.
컴파일
작성한 소스 코드를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정
Java, C 등의 고급 언어에서 저급 언어인 기계어, 어셈블리어로 변환하는 과정을 말한다.
링크
여러 개로 분리된 소스 코드를 컴파일한 결과물들에서 최종 실행 가능한 파일(.exe)을 만들기 위해 필요한 부분을 찾아서 연결해 주는 과정이다.
빌드
소스 코드를 실행 가능한 산출물(jar, war, …)로 만드는 일련의 과정을 말한다.
소스 코드를 컴파일, 테스트, 패키징, 정적 분석 등을 실행해 실행 가능한 애플리케이션으로 자동 생성하는 프로그램을 빌드 도구
라고 한다. 빌드 도구는 라이브러리를 자동 추가 및 관리, 라이브러리 버전 자동 동기화 등의 기능을 제공한다. Java의 빌드 도구에는 Maven과 Gradle이 있다.
빌드 = 컴파일 + 링크
프로젝트를 빌드하고 배포했는데 문제가 발생한다면, 이를 수정하고 다시 컴파일, 빌드, 배포하는 과정이 필요하다. 수정을 했으면 다시 테스트와 검증을 해야 하고, 이는 시간이 많이 걸린다. 이러한 문제를 위해 CI/CD가 생겨났다. 대표적인 CI/CD의 방법으로는 Jenkins가 있다.
CI : Continuous Integration (지속적 통합)
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합히는 것을 의미한다. 모든 개발이 끝난 후에 코드 품질을 관리하던 고전적 방식의 단점을 해소하기 위해 나온 개념이다.
CD : Continuous Delivery & Continuous Deployment (지속적 배포)
소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념이다. CI를 거친 코드에 대해서 신뢰할 수 있고, 바로 배포할 수 있다.
CI를 통해 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 github와 같이 저장소에 업로드한다. 이렇게 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것이 CD이다.
이번 스터디를 통해 빌드하고 생성된 jar 또는 war 파일을 WAS에 올려 배포하는 경험을 해볼 것이다. 그 과정에서 docker와 Jenkins의 사용법도 익혀 나갈 예정이다.
References
https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/
https://www.youtube.com/watch?v=6SvUZqbU37E&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC