빌드, 컴파일, 배포 개념 및 CI/CD

Kang Dong Hyun·2023년 2월 20일
1

컴파일, 빌드, 배포

컴파일(Compile)

컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정
보통 java, C# 같은 고급 언어를 기계어로 변환하는 과정을 말한다.

빌드(Build)

컴파일된 코드를 실행할 수 있는 상태로 만드는 일(jar, war)

빌드 도구
-소스코드를 컴파일, 테스트, 정적 분석 등을 실시하여 실행 가능한 애플리케이션으로 자동생성해주는 프로그램
-늘어나는 라이브러리의 자동 추가 및 관리
-라이브러리 버전을 자동으로 동기화

ex) ANT, Maven, Grandle
*Maven : 프로젝트에 필요한 모든 종속성을 리스트 형태로 Maven에게 알려주어서 종속성을 관리한다. POM.xml이라는 Maven파일에, 필요한 jar, classpath를 선언하면 직접 다운로드할 필요가 없어 레파지토리에서 자동으로 필요한 라이브러리 파일을 불러와준다.
단, 라이브러리가 서로 종속할 경우 XML이 복잡해진다.

  • 컴파일 언어(C, C++등)
    컴파일 언어는 기계어로 바로 변환하여 실행되기 때문에 가장 속도가 빠르고 보안에 유리하다.
    하지만 소스 변경 시마다 컴파일의 과정을 통해 빌드 작업을 수행하기 때문에 빌드 과정이 오래걸린다.

  • Byte Code 언어(java, C#등)
    Byte Code 언어는 컴파일의 결과물이 실행파일이 아닌 'class'라는 바이트 코드 파일로 생성되고 가상 실행환경인 JRE(Java Runtime Environment), CLI(Common Language Infrastructure)에서 한 줄씩 실행하는 방식으로 빌드된다. JRE, CLI 환경에서 실행될 때 기계어로 변환되며, 컴파일 언어에 비해 빌드 과정이 빠르다.

  • 인터프리터 언어(javascript, python, ruby등)
    인터프리터 언어는 컴파일 언어와 다르게 한 줄씩 번역되어 실행된다. 컴파일하는 과정에서 메모리가 훨씬 적게 소모되고 빠른 시간에 컴파일을 진행할 수 있다.

배포(Deploy)

빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
빌드 완료된 실행파일을 실제 사용자가 접근할 수 있는 환경으로 배치시키는 것을 의미한다. 흔히 현업에서 1개의 프로젝트에 여러 개발자들이 참여하여 각각의 기능을 만들고 버전관리(git,svn)오픈소스를 통해 각 기능들을 한 코드로 뭉친다.

이렇게 뭉친 코드들이 하나의 완성된 프로젝트가 되는데, 개발자들의 로컬환경에서 빌드되어 여러 가지 테스트를 거쳐 최종 테스트가 완료되면 실제 사용자가 사용할 수 있는 실제 서버에 배포 한다고 말한다. 보통 로컬->개발서버->실제운영서버로 배포를 진행한다.

CI/CD

CI

빌드/테스트 자동화 과정을 의미하는 용어로 개발자를 위한 자동화 프로세스이며, 지속적인 통합을 의미한다.
쉽게 Github에 특정 브랜치에 새로운 커밋이 될 때마다, 해당 코드를 바탕으로 빌드하고 사용자가 미리 만들어둔 테스트 코드를 실행하여 문제가 있는지 없는지를 체크하는 과정을 자동화한 것을 의미한다.

CD

배포 자동화 과정을 의미하는 용어로 지속적 서비스 제공 또는 지속적 배포를 의미한다.
기존에는 빌드 후 문제가 없다고 판단되면 실제 서버든, 클라우드 환경의 서버환경에 합쳐진 코드를 올리는 과정을 하며 이를 배포한다 라고 한다. 그런데 위에서 설명한 CI과정이 되어 있다면, 우리는 배포마저도 CI가 완료되는 시점에 자동으로 실행하면 된다.

profile
초보개발자의 스터디공간

2개의 댓글

comment-user-thumbnail
2023년 2월 20일

방금 전 업로드는 못참지..

1개의 답글