배포 (Deploy)
서버에 반영을 하는 것.
빌드 (Build)
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태(소프트웨어 산출물)로 변환하는 과정과 그 결과.
배포를 하기 위한 과정으로도 볼 수 있으며 컴파일은 이 빌드의 부분집합이라고 볼 수 있다.
* 컴파일 (Compile)
소스 코드를 바이너리 코드로 변환하는 과정.
* 링크 (Link)
A 소스 파일에서 B 소스 파일의 메소드를 호출해 사용할 수 있도록 A와 B를 연결해주는 작업.
- 정적 링크 (Static Link)
: 소스코드를 컴파일해서 나온 목적 파일과 정적 라이브러리 파일을 합쳐 하나의 실행파일로 만든다. 라이브러리가 포함되어 있기 때문에 단독으로 실행할 수 있다.
- 동적 링크 (Dynamic Link)
: 동적 링크로 만들어진 실행파일과 동적 라이브러리 파일을 따로 메모리에 올린다. 프로그램 실행 도중 외부에 존재하는 코드를 찾아서 연결한다. JVM은 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해준다.
: 묵시적 링크 (Implicit Link), 명시적 링크 (Explicit Link)
빌드 툴 (Build Tool)
빌드 관리 설정 파일에 필요한 라이브러리 종류/버전/ 종속성 정보 등을 명시하여 필요한 라이브러리들을 설정 파일을 통해 자동으로 다운하고 이를 간편히 관리해주는 도구
Ant, Maven, Gradle 이 대표적이며 전처리, 컴파일, 패키징, 테스팅, 배포 등의 기능을 가짐
Ant는 빌드 스크립트를 그대로 실행해주는 도구로서, 소스코드를. war이나. jar로 압축 후에 사용자들이 실행할 수 있도록 웹 서버에 올려주거나 실행 파일로 만들어주는 역할을 한다.
1. build.xml로 관리하며 빌드 과정을 target으로 만들어 단계별로 수행한다. 자유롭게 빌드 단위를 지정할 수 있어 빌드 단위 간의 의존관계를 자유롭게 설정할 수 있다.
2. 빌드 스크립트가 복잡하며 정형화되어 있지 않아 유지보수가 어렵다.
3. 외부 라이브러리 관리는 ivy를 통해서만 가능하다.
maven은 ant의 불편함을 해결하기 위해 등장했다.
주요한 특징은 빌드 시스템을 정형화시키고 기능 설치 등을 용이하게 했다는 점이다.
1. pom.xml을 이용해 빌드 시스템을 정형화시킨다.
2. 기능 설치 등이 가볍다
- 외부 저장소에서 필요한 라이브러리와 플러그인을 다운한 후, 로컬 시스템의 캐시에 모두 저장함.
- 중앙 저장소를 통한 자동 의존성 관리가 가능한데, 특히 자기 회사만의 중앙 저장소를 구축할 수 있다.
3. 뛰어난 프로젝트 정보를 제공한다.
4. 개발 가이드라인을 제공한다.
5. 포맷이 정해져 있어 복잡한 빌드 스크립트를 커스텀하기는 어렵다.
gradle은 JVM 기반의 빌드 도구로 ant와 maven의 장점을 합쳐 출시하였다.
1. ant처럼 유연한 범용 빌드 도구
2. build.gradle 로 관리되며 groovy 기반으로 작성되어 maven보다 코드가 간결하다.
3. 이미 반영된 빌드는 더 이상 재실행되지 않아 (캐싱을 하기 때문에) 빌드 시간이 단축되며, 어느 부분이 업데이트되었는지 파악하기 쉬워 빌드에 점진적으로 추가할 수 있다.
4. 멀티 프로젝트 빌드가 가능하다.
gradle이 maven 보다 좋은 점은
1. xml로 정의하기 어려운 빌드(동적인 요소)를 보다 가속성 있게 정의를 내릴 수 있다.
- 프로젝트 구성은 정적인 설정 정보이나 빌드는 동적인 행위이므로. xml은 정적인 데이터 저장에 적합하다.
2. maven은 멀티 프로젝트 구성을 상속 구조로 하는데, gradle은 구성 주입 방식을 사용한다.
설정 정보는 변수에 값을 넣고, groovy 스크립트로 gradle 용 플러그인을 호출하거나 직접 코드를 짜면 된다.
* war와 jar의 차이
jar(Java Archive) / War (Web Application Archive) / Ear ( Enterprise Archive)
- 웹 어플리케이션 저장소로 웹 애플리케이션을 압축해 저장해놓은 파일. 프로젝트를 압축하여서(패키징하여) 배포를 쉽게 할 때 주로 쓰인다.
- Jar
: path 정보를 유지한 상태로 압축하며, 자바 클래스 파일, 각 클래스들이 사용하는 리소스 파일 및 메타데이터를 압축한 파일.
: 플랫폼에 귀속되는 점을 제외하면 win zip 파일과 동일한 구조로 구성됨.
: 원하는 구조로 구성이 가능하며 JRE만 가지고도 실행이 가능함.
- War
: 웹 애플리케이션을 애플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml 파일로 자바 서버 페이지, 자바 서블릿, 자바 클래스, XML, 파일, 태그 라이브러리, HTML 등 웹 애플리케이션을 구성할 때 필요한 자원을 압축한 jar 파일. jar 파일 + war만의 파일을 더 압축함. 웹 애플리케이션 전용 패키징으로 웹 서버가 내장되어 있어 웹 사이트 배포에 좀 더 특화됨.
: War를 실행시키려면 서버(WEB 또는 WAS) 가 필요하며, WEB-INF, META-INF라는 이미 정의된 구조가 있다.
: JAR 파일들은 라이브러리나 플러그인, 애플리케이션 형태로 사용될 수 있게 여러 파일들을 함께 묶을 수 있으나, WAR 파일들은 웹에서 사용됨.
- Ear : JAVE EE 쓰이는 파일 형식으로 한 개 이상의 모듈을 단일 아카이브로 패키징하여 애플리케이션 서버에 동시에 일괄적으로 올리기 위해 사용함.
'CS > JAVA' 카테고리의 다른 글
try-catch-finally, try-catch-resources, AutoCloseable (0) | 2022.08.28 |
---|---|
디자인 패턴이란? (0) | 2022.07.27 |
[JAVA] JVM, JRE, JDK 란? (0) | 2022.06.19 |