본문 바로가기

DevOps/CICD5

무중단 배포 적용하기 이번에 프로젝트를 진행하면서 기능 구현이 빈번하게 일어나면서 사용중에 서버가 다운되는 현상이 자주 발생하였습니다. 이러한 사용중 불편함을 해소하고자 무중단 배포를 적용하여 사용 중에 서비스를 사용하지 못하는 상황을 막기 위해 도입하기로 결정했습니다. 무중단 배포란? 먼저, 무중단 배포 이전에 배포란 무엇일까요? 배포란 새로 개발된 코드를 패키징하여 서버에 새로운 버전의 애플리케이션을 실행시키는 행위를 의미합니다. 배포시에 새로운 버전의 애플리케이션을 실행하기 위해 기존에 존재하던 애플리케이션을 종료해야 하는데 이 과정에서 사용자에게 서비스가 되지 않는다면 사용자들은 불편함을 느끼게 될 것입니다. 이런 상황을 피하기 위해 서비스를 중단하지 않고 배포하는 행위인 무중단 배포를 하게 되었습니다. 무중단 배포는.. 2022. 8. 24.
Github actions + Jenkins를 통한 자동 배포 구현 AWS EC2에서 Docker로 Jenkins 실행 이전에 Github Actions를 이용해 CI를 구성했습니다. https://yongc.tistory.com/22 도커 허브에 올린 도커 이미지를 통해 자바 애플리케이션을 배포해봅시다. AWS EC2 인스턴스 생성하는 과정과 접속하는 과정은 생략하고 접속한 상태라고 과정하고 적겠습니다. 환경은 Ubuntu 18.04 에서 진행합니다 먼저 패키지 저장소를 최신으로 업데이트합니다. sudo apt-get -y update EC2에 도커를 설치합니다. sudo apt-get -y install docker.io EC2에서 docker 명령을 사용할때마다 root 권한을 이용하여 실행할 필요가 없도록 docker 그룹에 유저를 추가합니다. sudo userm.. 2022. 8. 14.
JIB을 이용한 컨테이너 배포 JIB 이란? 애플리케이션을 컨테이너화할 경우 보통 Dockerfile에 애플리케이션을 실행시킬 수 있는 내용을 정의하고 docker build를 통해 도커 이미지로 생성합니다. 자바 애플리케이션의 경우 애플리케이션을 빌드해서 jar 혹은 war 형태로 만든 후 Dockerfile을 작성해서 빌드된 결과물을 실행시키는 동작을 하도록 할 것입니다. 즉, 자바 빌드와 도커파일 빌드의 두번의 과정이 일어난다고 할 수 있습니다. 다음 그림의 첫번째는 자바 빌드와 도커파일 빌드를 두번하는 형태고 두번째는 Jib을 사용하는 빌드 흐름입니다. 위와 같이 Jib을 사용하면 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 원하는 레포에 푸시해 줄 수 있습니다. ./gradlew jib Jib 설정하기 jib을 사.. 2022. 8. 2.
sonarQube를 이용한 CI 코드 정적 분석 기능 추가 정적 코드 분석 정적 코드 분석은 소스 코드에서 수행되는 일련의 자동 검사로 구성됩니다. 정적 분석 도구는 코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 알려진 오류 및 취약점을 파악합니다. 또한 정적 분석을 활용하면 코딩 표준 적용이 가능합니다. 정적 분석은 소스 코드에서 실행되기 때문에 프로그램을 실행할 필요가 없으므로 CI/CD 파이프라인의 첫 단계에서 수행하거나 변경 사항 커밋 전 IDE에서 직접 수행하는 경우가 많습니다. 하지만 정적 분석은 프로그래밍 된 규칙 위반이 발생한 사례만을 식별하며, 소스를 읽는 것만으로는 모든 결함을 발견할 수는 없습니다. 그렇기 때문에 테스트 코드와 같은 동적 분석이 가능한 방법과 같이 사용하는 것이 좋습니다. SonarQube란? SonarQube는 정적 .. 2022. 7. 30.
Github actions에서 jacoco를 통해 테스트 커버리지 확인하기 ♻️ Jacoco란? Jacoco는 Java Code Coverage의 약자로 자바 테스트 코드를 실행한 결과를 바탕으로 커버리지를 측정하는 오픈소스 라이브러리 입니다. Jacoco를 사용하여 테스트 코드 커버리지 결과를 눈으로 보기 좋도록 html이나 xml, csv 같은 리포트로 생성합니다. 그리고 테스트 결과가 내가 설정한 커버리지를 기준을 만족하는지 테스트 하는 기능도 제공합니다. 🐘 Gradle에서 Jacoco를 통하여 테스트 커버리지 확인하기 적용하기 전에 테스트한 환경은 다음과 같습니다. 🚀 Spring boot 2.7.1 Java 17 Gradle 먼저 Jacoco를 사용하기 위해 build.gradle에 jacoco 플러그인을 추가합니다. plugins { ... ... id 'jacoc.. 2022. 7. 29.