티스토리 뷰

Spring

[Spring] WAR VS JAR

hyuuny 2023. 3. 10. 17:00

외장 서버 VS 내장 서버


전통적인 방식(외장 서버)

  • 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버)를 설치했다.
  • WAS에서 동작하도록 서블릿 스펙에 맞추어 코드를 작성하고, WAR 형식으로 빌드해서 war 파일을 만든 뒤, war 파일을 WAS에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했다.
  • WAS 기반 위에서 개발하고 실행해야 하기 때문에 IDE 같은 개발 환경에서도 WAS와 연동해서 실행되도록 복잡한 추가 설정이 필요하다.

최근 방식(내장 서버)

  • 최근에는 스프링 부트가 내장 톰캣을 포함하고 있다.
  • 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있다는 뜻이다.
  • 개발자는 코드를 작성하고 JAR로 빌드한 다음에 해당 JAR를 원하는 위치에서 실행하기만 하면 WAS도 함께 실행된다.
  • main() 메서드만 실행하면 되고, WAS 설치나 IDE 같은 개발 환경에서 WAS 와 연동하는 복잡한 일은 수행하지 않아도 된다.

JAR (Java Archive)

자바는 여러 클래스와 리소스를 묶어서 JAR(Java Archive)라고 하는 압축 파일을 만들 수 있는데, 이 파일은 JVM 위에서 직접 실행되거나 또는 다른 곳에서 사용하는 라이브러리로 제공된다.


직접 실행하는 경우 main() 메서드가 필요하고, MANIFEST.MF 파일에 실행할 메인 메서드가 있는 클래스를 지정해두어야 한다.

java -jar exam.jar

Jar는 쉽게 이야기해서 클래스와 관련 리소스를 압축한 단순한 파일이다. 필요한 경우 이 파일을 직접 실행할 수도 있고, 다른 곳에서 라이브러리로 사용할 수도 있다.


WAR (Web Application Archive)

WAR(Web Application Archive)라는 이름에서 알 수 있듯 WAR 파일은 웹 애플리케이션 서버(WAS) 에 배포할 때 사용하는 파일이다. JAR 파일이 JVM 위에서 실행된다면, WAR는 웹 애플리케이션 서버 위에서 실행된다.


웹 애플리케이션 서버 위에서 실행되고, HTML 같은 정적 리소스와 클래스 파일을 모두 함께 포함하기 때문에 JAR와 비교해서 구조가 더 복잡하며, WAR 구조를 지켜야 한다.


WAR 구조

  • WEB-INF
    • classes: 실행 클래스 모음
    • lib: 라이브러리 모음
    • web.xml: 웹 서버 배칠 설정 파일(생략 가능)
  • WEB-INF 폴더 하위는 자바 클래스와 라이브러리, 그리고 설정 정보가 들어가는 곳이다.
  • WEB-INF 를 제외한 나머지 영역은 HTML, CSS 같은 정적 리소스가 사용되는 영역이다.



Reference

김영한. 스프링 부트 - 핵심 원리와 활용. 인프런.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함