본문 바로가기

웹 애플리케이션

빌드에 대해 (컴파일, 패키징, 배포, 빌드 도구)

기본

빌드

  1. 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정이다. 다음과 같은 과정을 진행한다.
    1. 라이브러리 다운로드
    2. 소스코드를 바이너리코드로 컴파일.
      • 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다.
      • 자바의 경우, JVM에서 실행 가능한 바이트 코드 형태의 '클래스파일'이 생성되는데, 이것이 바이너리코드 이다.
    3. 바이너리 코드를 패키징 
      • 내가 만든 애플리케이션 코드를, 배포하고 동작시킬 수 있도록 패키징 하는 것
      • jar, war 파일로 패키징을 한다고 한다.
      • jar
        • JAVA 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
        • class 파일(자바의 바이너리코드), 라이브러리 파일을 포함
        • JRE 만 있어도 실행 가능함(java -jar 프로젝트명.jar)
      • war
        • Servlet / JSP 컨테이너에 배치할 수 있는 웹 애플리케이션을 압축한 파일
        • 웹 관련 자원을 포함한다 (JSP, Servlet, JAR, Class, XML, HTML, JavaScript)
        • 사전 정의된 구조를 사용한다 (WEB-INF, META-INF)
        • 별도의 웹 서버가 필요하다(WAS)
    4. 테스트 실행
    5. 프로덕션 시스템에 배포
      1. package(archive)
        • 아카이브 파일(.war, .ear)로 배포
        • 아카이브 파일은, WAS에 의해 압축이 풀린다.
        • 파일이 많은 경우 압축을 푸는 시간이 오래 걸릴 수 있다.
        • 원격 서버에 배포시 한 개의 파일만 전송하면 된다.
        • WAS(Tomcat)에서 제공하는 업로드를 통한 배포 기능을 활용할 수 있다.
      2. exploded
        • 아카이브 파일을, 압축 해제한 형태의 디렉터리로 배포
        • 별도의 디렉터리에 원본 소스를 복사하여 만든다
        • 압축 및 해제 과정이 불필요하다
        • 파일이 많은 경우 복사하는 시간이 오래 걸릴 수 있다.
        • 원본 소스를 건드리지 않고 배포를 원하는 경우에 적합하다.
        • 원격 서버에 배포시 파일이 많은 경우 전송 시간이 오래 걸릴 수 있다
      3. in-place
        • 소스 디렉터리를 그대로 배포
        • 추가적인 복사 과정 불필요
        • 로컬 서버에 배포하는 경우 적합
        • WAS(Tomcat)가 런타임시 생성하는 파일이 소스와 섞일 수 있는 문제가 있다.

 

이것을 해주는 도구(빌드도구)가, maven, gradle 등이 있는 것이다

 

빌드 도구

  1. Ant
    • 빌드만 진행해줌
    • 따라서, 웹 프로젝트에 필요한 라이브러리를 직접 다운받아서 사용했는데, 스프링을 사용하는 경우 버전에 따른 라이브러리의 변경이 잦아 불편함이 따랐다.
  2. Maven
    • 빌드 + 자동 라이브러리 관리 
    • 라이브러리를 자동으로 추가 및 관리해주며, 라이브러리 버전을 자동으로 동기화해주는 장점이 있다.
    • maven에서 지원하지 않는 라이브러리는, 직접 다운로드 받은 후, WEB-INF 폴더의 lib 폴더를 만들어, 원하는 라이브러리의 jar 파일을 추가하면 사용할 수 있다.
  3. Gradle
    • 빌드 + 자동 라이브러리 관리
    • Maven 보다 빠르고 편리하며, 현재 거의 모든 신규 프로젝트의 빌드 도구로 사용되고 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 블로그

https://hye0-log.tistory.com/27

 

[Spring Boot]배포 방법 비교 (JAR vs WAR)

스프링 부트의 장점 중 하나는 실행 가능한 JAR (Executable Jar)로 빌드하여 프로젝트를 바로 실행시킬 수 있다는 점이다. 실제로 스프링부트 관련 문서를 보다 보면 "Executable Jar"라는 단어를 많이 볼

hye0-log.tistory.com

https://wangmin.tistory.com/50

 

빌드도구란? (Maven, Gradle)

빌드도구는 소스코드에서 어플리케이션 생성을 자동화 하기 위한 프로그램이다. 빌드는 코드를 사용 or 실행 가능한 형태로 컴파일링, 링킹, 패키징 하는것을 포함한다. 기본적으로 빌드 자동화

wangmin.tistory.com

https://velog.io/@leyuri/Intellij-%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%B0%B0%ED%8F%AC-%EC%9C%84%ED%95%9C-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%9C%A0%ED%98%95%EA%B3%BC-war-warexploaed-%EC%B0%A8%EC%9D%B4

 

[Intellij] 웹 어플리케이션 배포 위한 패키지 유형과 war, war(exploaed) 차이

tomcat 으로 war 파일을 배포할 때 궁금증이 생겼다. war와 war(exploaed)의 차이가 무엇일까? 빌드(Build) : 소스코드 파일을 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다. Maven에서 Arti

velog.io

 

'웹 애플리케이션' 카테고리의 다른 글

[Tomcat] No artifacts marked for deployment  (0) 2022.09.17