빌드
Build
- 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 일련의 과정이나 결과물이다.
- 컴파일, 링크, Resource 등 실행에 필요한 파일을 지정된 위치로 옮기는 행위, 테스팅, JAR 혹은 WAR로의 패키징 등
- 컴파일과 링크 등은 빌드의 여러 단계 중 한 가지에 속하는 부분 집합이다.
- 상기한 빌드 프로세스를 자동으로 수행함으로써 소스 코드를 실행 가능한 어플리케이션으로 생성해주는 도구이다.
- 프로젝트 규모가 확대될수록 사용하는 라이브러리가 많아진다.
- 라이브러리를 직접 다운받아서 추가하는 등 수동 작업이 매우 번거롭고 실수가 발생하기 쉽다.
- 빌드 툴은 라이브러리를 자동으로 추가 및 관리해준다.
- 라이브러리의 버전을 자동으로 동기화하는 기능도 제공한다.
- ex) Gradle, Maven
무중단 배포
새로운 빌드 결과물을 서버의 다운타임 없이 배포하는 '무중단 배포' 전략에 대해서 살펴보겠다!
롤링 (Rolling)
- 원리
- 서버 1을 로드 밸런서에서 뺀다.
- 서버 1을 배포한다.
- 서버 1을 다시 로드 밸런서에 넣는다.
- 서버 2를 로드 밸런서에서 뺀다.
- 서버 2에 배포한다.
- 서버 2를 다시 로드 밸런서에 넣는다.
- (모든 서버가 배포 완료 될 때 까지 계속 진행)
- 단점
- 배포할 서버가 너무 많다면 n대 단위로 배포하는데, 배포가 모두 끝나기 전까지는 누구는 이전 서비스를 받고 누구는 신규 서비스를 받는 문제가 존재한다.
- 1대에 배포하는 것 보다 최소 2배 이상 느리다.
카나리(Canary)
소수의 유저만 사용하는 환경에 신규 버전을 배포하고, 문제가 없다고 판단됐을 때 다른 모든 서버에 배포하는 방식이다.
트래픽을 분산시킬 때에는 라우팅을 랜덤하게 할 수도 있고, 사용자를 분류할 수도 있다.
- 장점
- 위험을 빠르게 감지할 수 있다.
- A/B 테스트가 가능하고, 성능 모니터링에 유용하다.
블루 그린 (blue green)
실제로 서비스 중인 환경(Blue)과 새롭게 배포할 환경(Green)을 세트로 준비해서 배포하는 방식이다.
- 장점
- 새롭게 배포할 환경에만 (동시에) 배포하면 되기 때문에 배포 속도가 매우 빠르다.
- 언제나 Green 환경이 떠있기 떄문에, 만약 잘못된 버전으로 배포한 경우 신속하게 롤백할 수 있다.
- 단점
- Green 환경이 항상 떠있어야 하기 때문에 비용이 2배로 든다.
reference