기본 쌓기/우아한테크

우아한테크) 스티치의 빌드와 배포

code_learner 2022. 1. 14. 01:52

https://www.youtube.com/watch?v=6SvUZqbU37E 

1) 빌드도구 Gradle의 특징

-JVM 기반의 빌드도구

-오픈소스 기반의 Build 자동화 도구

-Groovy위 기반 DSL로 작성한다.

-Build-by-convention을 바탕으로 한다 -> 스크립트 규모가 작고 읽기 쉽다.

-설정 주입방식(configuration injection)

 

 

 

2)배포

작성한 코드를 빌드하고, 빌드가 완성된 실행 가능한 파일을

사용자가 접근할 수 있는 환경에 배치하면 배포가 완료된 것

->빌드를 하고 생성된 jar 또는 war 파일을 WAS에 올리는 것이 배포

 

1. git에 올려두고

2. 코드가 제대로 동작하는지 테스트 코드를 작성하고

3. 이를 수행 및 검증하는 작업까지

 

 

 

3)CI/CD에 대하여

 

CI: Continuous Integration(지속적 통합)

-개발자를 위한 자동화된 프로세스인 지속적 통합으로 모든 개발이 끝난 이후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기 위해 나타난 개념

1. 코드를 통합한다.

2. 통합한 코드가 제대로 동작하는지 테스트한다.

3. 제대로 빌드가 되는지 테스트한다.

4. 결과를 정리하고 버그가 존재한다면 적어둔다.

-> CI 프로세스를 자동화하기 위하여 Jenkins, Travis

 

CD: Continuous Deploy (지속적 배포)

-소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념

CI와 CD는 필수 불가결

 

 

 

4)무중단 배포

 

기존에 동작하고 있는 서버가 존재하고 그 상태에서 새롭게 업데이트한 코드를 배포한다면?

-> 충돌이 발생!-> 기존서비스중인 서버를 내리고 코드를 배포한 후 다시 서버를 동작

->새롭게 배포할 서버를 띄울 시 소요되는 시간을 다운타임( 유저에게 서비스가 불가능한시간)이라고 한다.

 

무중단배포의 필요조건

-두 대 이상의 서버를 서비스해야한다.

-다운타임이 발생하지 않으려면 실제 서비스 중인 서버와 새롭게 배포한 서버가 동시에 존재해야한다.

-비용을 줄이려면 배포할 때만 새롭게 서버를 띄우고 배포가 완료된 후에 기존 서버는 죽이면 된다.

 

1. 롤링배포

-서버1을 로드 밸런서에서 뺀다(서비스 제공x)

-서버1에 배포한다

-서버1을 로드 밸런서에 넣는다(서비스 제공)

-위 과정을 필요 서버마다 반복 

 

단점)

배포가 모두 끝나기 전에는 누구는 이전 서비스를 받고 누구는 신규 서비스를 받을 수 있다

1대 배포하는 것보다 최소 2배이상 느리다. 

 

 

2. 카나리배포

소수의 유저만 사용하는 환경에 신규버전을 배포하고 문제가 없을 시 다른 모든 서버에 배포

 

3. Blue/Green 배포

실제로 서비스 중인 환경(Blue)과 새롭게 배포할 환경(Green)을 세트로 준비해서 빠르게 바꾸는 방식

 

장점

-새롭게 배포할 환경에만 배포하면 되기 때문에 배포 속도가 매우 빠름

-언제나 Green 환경이 떠있기 때문에 잘못된 버전으로 배포했을 시 신속하게 롤백가능

 

단점

-Green환경이 항상 떠있어야 하기 때문에 비용이 두배로 든다.