본문 바로가기

DevOps

웹 애플리케이션 빌드와 배포 정리

7월부터 LG의 프로젝트를 주로 수행하는 SI 회사에 취업해서 다니고 있다.

운이 좋게도, 내가 사용했던 기술 스택(Spring Boot, JPA)과 유사하여 기존의 공부들이 도움이 되었다.

 

이번에 NCP에 세팅된 프로젝트를 EC2로 이관하는 작업에 대한 설명을 들었는데, 빌드부터 배포까지의 과정과 용어들이 확실하게 이해되지 않아서 한 번 정리하고 넘어가보려 한다.

 

 

빌드 vs 컴파일

빌드라는 단어에 대해서 막연하게, 프로젝트를 서버에서 실행할 수 있는 파일로 만든다고 이해하고 있었다. 그러면 컴파일도 사람이 볼 수 있는 코드를 기계어로 변환하는 것으로 알고있는데? 무슨 차이가 있는 건지 혼동되었다.

 

 

컴파일 (Compile) 

사람이 보는 언어(원시 코드)를 컴퓨터 언어(기계어)로 변환하는 것.
컴파일러가 원시 코드를 목적 파일(.obj)로 바꾸어 준다.

 

컴파일 만으로는 프로그램 실행이 불가능하다. 하나의 프로그램은 소스코드 뿐만 아니라 여러 라이브러리를 포함하므로, 파일을 하나 하나 실행하는 것이 아니라, 여러 파일들을 하나의 실행파일로 묶어주는 것이 필요하다.

 

 

링크 (Link)

여러 개의 목적파일들을 하나의 실행파일로 묶어주는 것.
컴파일러가 하는 역할은 컴파일 하나가 아닌, 컴파일 + 링크 이다.

 

 

빌드 (Build) 

빌드 = 컴파일 + 링크

빌드의 목적은 기본적으로 프로그램 실행 파일을 만드는 것이다. 우리가 사용하는 IDE 에 있는 Run 은 Build와 동시에 파일을 실행한다는 의미이다.

 

따라서, 컴파일은 빌드의 과정 중 하나일 뿐이며, 소스코드로 실행가능한 웹 애플리케이션 파일을 뽑아내는 것이 빌드이다.

 

출처 : https://min-nine.tistory.com/226

 

 

Spring은 Build 툴로 주로 MavenGradle을 사용하는데, 레거시한 프로젝트나 전자정부 프레임워크에서는 주로 Maven을 사용하며, 최근에는 Gradle을 사용하는 추세이다. 

 

빌드의 결과로 jar 파일 또는 war 파일을 생성한다. 

 

그러면 jar와 war의 차이는 뭘까?

 

JAR (Java Archive)

Java 라이브러리, 리소스, property 파일들을 포함한다. 라이브러리, 구현된 비즈니스 서비스를 배포할 때 jar 단위로 패키징하여 배포한다.

JRE만 존재하면 프로젝트 구동이 가능하며, Spring에서는 Jar 사용을 권장하고 있다.

 

WAR(Web Application Archive)

JAR를 포함하여, 웹 애플리케이션이 구동되기 위한 기타 자원들을 한 군데에 모아 배포하는데 사용하는 파일이다. 별도의 웹서버 또는 WAS(웹 컨테이너)가 있어야 구동이 가능하다.

 

출처 : https://escapefromcoding.tistory.com/657

 

Spring Boot는 Jar 파일 내에 WAS를 내장하기 때문에, jar 파일로도 빌드 및 배포가 가능하다.

 

배포 (Deploy)

빌드 완료된 실행파일을 실제 사용자가 접근할 수 있는 환경으로 배치시키는 것을 의미한다. 테스트를 마친 실행 파일들을 운영 서버에 반영시킨다. 실무에서는 수동 배포보다, 형상관리 툴(Git)과 Jenkins 와 같은 CI 툴을 사용하여 자동 배포 환경을 구성하여 CI/CD 파이프라인을 구축하여 배포를 진행한다.

 

 

 

 

참고 블로그

https://min-nine.tistory.com/226

 

컴파일,링크, 빌드, 배포 개념 정리 / what is the Compile,Link,Build,Deploy?

본인은 PHP 웹 개발자 외길 인생을 살아왔다. Frame Work는 Laravel을 사용하여 개발을 진행하였고, 별도의 컴파일 , 빌드 과정 없이 실서버에 deploy(배포)만 진행하여 서비스를 개발해왔다. 최근 회사

min-nine.tistory.com

https://wonin.tistory.com/498

 

JAR 과 WAR의 차이는 무엇일까?

스프링 프로젝트를 배포하려 합니다. 그러려면 프로젝트를 빌드하고 압축해서 서버에 올려야 합니다. 빌드하고 압축하는 과정 중에 의문이 들었습니다. jar 파일과 war 파일의 형태 2가지가 있었

wonin.tistory.com

 

'DevOps' 카테고리의 다른 글

JIRA & Jenkins & Github 연동하기  (0) 2023.09.15
SSE (Server Sent Events)  (1) 2023.05.19
리버스 프록시(Reverse Proxy)  (0) 2023.05.19