외장 서버
과거에는 자바로 웹 애플리케이션을 개발할 때, 먼저 서버에 톰캣과 같은 WAS(Web Application Server)를 설치한 뒤, 설치한 WAS에서 동작하도록 Servlet 스펙에 맞추어 코드를 작성하였습니다. 그리고 작성한 코드를 WAR 형식으로 빌드하여 war 파일을 생성하고, 생성한 war 파일을 설치한 WAS에 배포하는 방식으로 애플리케이션을 개발하였습니다. 하지만 이렇게 개발을 하는 것은 상당히 복잡하고 추가 설정이 필요합니다. 따라서 현재는 다른 방식으로 개발을 진행하는 데요, 그 방식인 내장 서버를 이용한 방식입니다.
내장 서버
최근에는 Spring Boot가 내장 톰캣을 포함하고 있습니다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있어, 개발자가 코드를 작성하고 JAR 형식으로 빌드하여 jar 파일을 생성합니다. 그 후 생성한 jar 파일을 원하는 위치에서 실행하기만 하면 내장되어 있던 WAS도 함께 실행되게 되는 것입니다. 즉, 개발자는 main() 메서드만 실행하면 되고, WAS를 설치하거나 연동하는 복잡한 과정은 거치지 않아도 되는 것입니다.
WAR(Web Application Archive)
웹 애플리케이션 서버 (WAS)에 배포할 때 사용하는 파일입니다. HTML 같은 정적 리소스와 클래스 파일을 모두 포함하기 때문에 JAR와 비교해서 구조가 더 복잡합니다. 또한 정해진 WAR 구조를 지켜야 합니다.
WAR 구조
- WEB-INF
- classes: 실행 클래스 모음
- lib: 라이브러리 모음
- web.xml: 웹 서버 배치 설정 파일 (생략 가능)
- index.html: 정적 리소스
즉, WEB-INF 폴더 하위에는 자바 클래스와 라이브러리, 그리고 설정 정보가 들어가고, WEB-INF를 제외한 나머지 영역은 HTML, CSS 같은 정적 리소스가 사용되는 영역입니다.
JAR (Java Archive)
자바는 여러 클래스와 리소스를 묶어서 JAR라고 하는 압축 파일을 만듭니다. 즉, 클래스와 관련 리소스를 압축한 파일입니다. 이 파일은 JVM 위에서 직접 실행되거나 다른 곳에서 사용하는 라이브러리로 제공되기도 합니다. 직접 실행되는 경우 main() 메서드가 필요하고, MANIFEST.MF 파일에 실행할 메인 메서드가 있는 클래스를 지정해 두어야 합니다.
실행 예시: java -jar myJar.jar
다음 포스팅에는 어떻게 Spring Boot가 내장 서버를 통해 애플리케이션을 실행할 수 있도록 하였는지에 대해서 작성해 보도록 하겠습니다!
(참고)외장 서버 build.gradle
plugins {
id 'java'
id 'war' // WAS 위에서 동작하는 WAR 파일을 만들어 주는 plugin
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
...
'Spring Boot' 카테고리의 다른 글
나만의 Spring Boot로 Spring Boot 원리 파악하기 (0) | 2023.12.16 |
---|---|
Spring Boot와 내장 톰캣 (0) | 2023.12.16 |
@PostConstruct, @PreDestroy로 빈 생명주기 관리하기 (1) | 2023.12.06 |
@Autowired와 Collection 클래스(List, Map, etc.) (2) | 2023.12.05 |
@Autowired와 @Qualifier, @Primary (3) | 2023.12.05 |