devops

CI/CD, 빌드와 언어별 도구 본문

DevOps

CI/CD, 빌드와 언어별 도구

vata500 2022. 5. 30. 11:45
반응형

CI / CD

지속적 통합(Continuous Integration)

  • Code : 개발자가 코드를 코드 저장소에 Push한다.
  • Build : 코드 저장소로부터 코드를 가져와서 유닛 테스트 후 빌드한다
  • Test  : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인한다.

지속적 통합의 장점

  • 버그를 일찍 발견할 수 있다.
  • 테스트가 완료된 코드에 대해 빠른 전달이 가능하다.
  • 지속적인 배포가 가능해진다.

지속적 전달(Continuous Delivery)

  • Operate : 서비스에 생길 수 있는 현황을 파악하고 문제를 감지한다.
  • Deploy : 프로비저닝을 진행하고 서비스를 사용자에게 노출한다.
  • Release : 배포 가능한 소프트웨어 패키지(artifact)를 작성한다.

유용한 CI 도구

Jenkins

  • 별도의 서버를 설치해야함
  • 다양한 플러그인을 활용
  • 쿠버네티스, Docker 등과 호환가능

Travis CI

  • 클라우드 서비스(SaaS) 형태로 사용
  • Travis 자체에서 호스팅을 해주기 때문에 관리적인 측면에 편리함
  • Clojure, Erlang, Groovy Haskell, Java 등의 다양한 언어를 지원

Github Action

  • Github 저장소를 기반으로 소프트웨어 Workflow를 자동화할 수 있는 툴
  • Github 마켓 플레이스를 통해 여러 사람이 공유한 Workflow를 찾을 수 있음. 자신이 직접 만들어 공유가능.
  • 공개 저장소 무료로 사용가능.

Continuous Delivery, Continous Deployment

지속적 배포 = 지속적 통합 + 지속적 전달

지속적 통합 원칙

1. 단일 소스 레파지토리를 유지해야한다.

2. 빌드를 자동화해야 한다.

3. 셀프 테스팅 빌드를 만들어야 한다.

4. 매일 메인라인에 커밋을 해야한다.

*메인라인 : 시스템의 현재 상태를 의미. 회사마다 어떤 브랜치를 메인라인으로 두는지는 조금씩 다름. 주로 master 브랜치를 메인라인으로 취급한다.

5. 모든 팀원이 무슨 일이 일어나고 있는지 알아야 한다.

6. 모든 커밋은 통합 서버의 메인라인에 빌드돼야 한다.

7. 빌드의 오류를 즉시 수정할 수 있어야 한다.

8. 빌드가 빨리 되도록 유지해야 한다.

9. 운영 환경과 동일한 환경에서 테스트가 진행돼야 한다.

10. 누구나 최신 실행 파일을 쉽게 얻을 수 있어야 한다.

11. 배포 자동화가 이루어져야 한다.


빌드(Build)

빌드는 프로그램의 소스 코드를 독립적인 아티팩트(artiface)로 변환하는 과정이다. 떄로는 그 아티팩트 자체로도 실행이 가능, 대체로 런타임이 필요하다.

프레임워크

빌드 도구에 대해 이야기 하기 이전에, 프레임워크라는 개념을 짚고 넘어갑시다. 오로지 빌드만을 위한 도구도 많지만, 대부분의 경우 어떤 언어나 프레임워크를 선택하느냐에 따라 빌드 도구가 정해지기 마련입니다.

프레임워크는 소프트웨어 개발을 쉽게 만들어주기 위해 필요한 도구, 규약의 집합체다. 프레임워크를 통해 S/W의 기본 골격이 제공되기 때문에 현대의 소프트웨어 개발에서는 많은 부분을 프레임워크에 의존한다.

Backend 개발용 프레임워크

  • Spring(Java, Kotlin)
  • Django(Python)
  • Express(Javacript)

Frontend 개발용 프레임워크

  • React 및 관련 라이브러리(Javacript)
  • Vue.js, Svelte(Javascript)

Mobile, Desktop 개발용 프레임워크

  • Flutter(Andorid, iOS 등)
  • .NET Framework(Windows)
  • Apple 운영체제 기본 Native 프레임워크 Cocoa(macOS), Cocoa Touch(iOS)
  • 안드로이드 기본 Native 프레임워크 (Android)

대표적인 빌드 도구

Javascript 기반 React

React 프레임워크를 사용하는 경우, create-react-app, netx.js 같은 프레임워크를 사용한다. 다음 과정으로 빌드 결과물(artifact)를 만들 수 있다.

1. node.js 개발 환경 준비
2. 프로젝트 폴더로 이동(package.json 파일이 있는지 확인)
3, 의존성(dependency) 설치(npm install 입력)
4. 빌드(npm run build)
5. 빌드 결과물 확인(build 폴더 확인, React는 프론트엔드 웹 어플리케이션이라 결과물은 HTML, CSS, JS 파일을 포함, nginx 등에서 정적 호스팅이 가능)

의존성 설치 후 빌드하지 않고, 바로 어플리케이션을 실행하기 위해서 npm run start 를 사용., 어플리케이션 단위 테스트가 제공된다면 테스트를 위해서 npm run test 명령어 사용

(각 프로젝트의 package.json의 구성에 따라 크게 달라짐)

Java/Kotlin 기반의 Spring Boot

Java/Kotlin 어플리케이션을 빌드하면 JVM 위에서 실행되는 war파일이 아티팩트로 생성됨. 빌드 도구를 이용해 이를 실행 가능. Spring 및 Spring Boot 생태계의 대표적인 빌드 도구가 두가지(maven, Gradle)가 있다. 그 중에서 Gradle 위주로 간략하게 흐름을 설명한다.

1. 자바 개발 환경 준비
2. gradle 설치
3. 프로젝트 폴더로 이동
4. 빌드(gradlew build)

자바 어플리케이션은 실행을 위해서 빌드가 필수적이다. 빌드 후에 실행을 위해서 gradlew bootRun 명령을 통해 어플리케이션 실행이 가능하다.

 

반응형
Comments