[24.06.27] 내일배움캠프 일차 JAVA TIL - CI/CD

2024. 6. 27. 15:42T.I.L

오늘 한 일

  • Web 강의 수강 - 스탠다드 이론 강의
  •  

 


특강으로 AOP 강의 제작중

MSA를 하기 위해서는 스프링 시큐리티를 더 잘 알고, 현재 배우는 내용을 잘 알아야 한다.

최종 프로젝트 기간에는 되도록 특강 진행을 안하지만, 그래도 예정이 되어 있음

-> 최종 프로젝트에서는 유저 테스트를 받을 정도의 퀄리티가 나와야 해서 

프론트엔드, 기능 구현이 더 안전성있어야 한다.


CI/CD : 하나의 방법론

CI : 지속적 통합

ex ) 깃허브로 push, merge 하는 것을 의미한다. 

빌드와 테스트가 되는 과정

CD : 지속적 배포

ex ) 검증된 코드 변동 사항을 production environment 에 배포되는 것을 말한다.

 

CI/CD의 존재 이유

: 기업들의 목표는 새로운 서비스를 빠른 기간 내에 출시하고 업데이트 하는 것

 

CI에는 크게 두가지 핵심이 있다.

CI는 굉장히 오래된 방법론 (그만큼 검증됨)

1. 코드 단위를 최대한 잘게 쪼개서 자주 커밋/머지 해야한다.

2. 새로운 기능을 개발하면 최소한의 단계로 잘게 쪼개서 변동사항 여러개를 한번에 커밋하지 말 것.

변동사항이 3개라면 커밋 내역을 '최소' 3개는 남겨야 한다.

 

build/test 를 자동화 할 수 있다.

Merge : 브랜치들의 코드를 하나로 합치는것

Build : 합쳐진 코드를 Jar 파일로 만드는것

배포 : Jar 파일을 배포하는것

 

1.0.0 에서 시작 i.j.k로 칠때,

작은 수정은 j가 1씩 올라가고, 새로운 기능이 추가된 경우 i가 1씩 올라간다.

 

gradle에서 코끼리 버튼이 생겨서 업데이트 할 때,

build/test/merge 과정을 거친다.

CI 스크립트에서도 build -> test -> merge 과정을 자동으로 실행하고, 

그 안에서 오류가 날 경우 최종적으로 merge 작업을 수행하지 않는다.

 

테스트 코드도 없이 배포하는건 불가능하다..

실제 개발에서 테스트 코드를 작성하지 못해도, merge를 만들 수는 있다.

배포 이후에 테스트 코드를 작성하는 경우가 있긴 하지만 올바른 순서는 아니다.

 

CI 방식을 채택하면 시간 효율성이 오른다.

merge되는 모든 코드가 build, test를 거치기 때문에 더욱 안정성있다.

CI를 잘 지켰기 때문에 코드 자체의 오류가 적다.


CD (continuous delivery, continuous deployment)

:어떻게하면 배포를 자동화 할 수 있는지

두 단어의 뜻은 다르지만 두가지 중 하나를 사용하는 경우가 많아 통용적으로 CD라고 한다.

 

continuous delivery : 수동적인 배포

이미 빌드가 되어 있어, jar파일이 생성되어 있을 경우 개발팀/QA팀에서 테스트 후 출시하거나 출시 전 과정으로 돌아가게 된다.

Continuous Deploy : 지속적 배포

모든 과정을 자동화하여, Release가 준비가 되자마자 자동으로 사용자에게 배포되도록 만들 수 있다.

 

  1. 회사별로 최종 배포단계는 수동적으로 Release 할지 자동으로 할지 여부는 다르다.
  2. CI/CD를 구축하였다고 해서 세부적인 단계들이 모두 똑같지는 않다.
  3. 즉, 어느정도 범위까지 자동화 할지의 범위는 회사마다, 개발팀마다 다르다.

 


CI/CD 툴

- GitHub Actions 

- Jenkins

- BuildKite

- Bitbucket

- circleci

- GitLab

회사마다, 팀마다 사용하는 툴이 각양각색이다.

 

항상 툴을 고른 경우, 왜 그 툴을 사용하는지 이유를 기재해두기

해당 툴의 장단점과 내가 진행한 프로젝트에 적합한 이유를 언급하고, 장점이 어떤 방식으로 극대화 되는지를 논리정연하게 설명할 수 있어야 한다.

또, 버전별 특징도 알고 있어야 한다.

 

 

오늘의 결론

기존에 커밋 내역을 상세하게 잘 관리하고, 테스트 코드를 작성해야 하는 이유가 모두 CI/CD를 지키기 위해서이다.

CI

코드 단위를 잘게 나누어 ( 의미있는 Git 사용 , Git Convention, Git Branch 관리전략) 빈번하게 Merge한다.
Build, Test(테스트 코드)를 자동화한다. → Release를 위한 준비

CD

Build된 파일을 실제 운영환경에 배포한다.
  1. 수동으로 배포한다.
  2. 자동으로 배포한다.
실제 사용하는 방법 : 수동으로 체크해서 자동으로 배포되도록 만든다.