요즘 블로그가 아주 뜸했져?
저는 지금 인턴중이랍니다 (호호호)
근데 인턴하면서 공부할 내용이 겁나 많아졌어요 (머리 과부하 오기 직전)
프론트만 공부하면 될 줄 알았더니 이제 백엔드도 하고 있답니다? (진짜 내 주 기술스택 빼고 다 하는 중,,, 리액트 그리워)
자바를 시작으로 해서 어어어엄청 기초부터 백엔드를 공부하는 중이다 보니 ... 당분간은 아마 백엔드 포스팅이 더 많지 않을까 싶어염
다들 많관부 ~~~ ^0^!
우선 JAR와 WAR는 둘 다 java의 jar옵션 (java-jar)을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일을 패키징한 것이다.
아래에서 자세히 더 알아봅시당
🚩 외장 서버 vs 내장 서버
우선 JAR와 WAR에 대해 설명하기에 앞서 외장 서버와 내장 서버의 차이부터 짚고 넘어가자
전통적인 방식(외장 서버)
- 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 톰캣과 같은 WAS(웹 애플리케이션 서버)를 설치했다
- WAS에서 동작하도록 서블릿 스펙에 맞춰 코드를 작성하고 WAR 형식으로 빌드해 WAR 파일을 생성한 뒤 이 파일을 WAS에 전달해 배포하는 방식으로 전체 개발 주기가 동작했다.
- WAS 기반 위에서 개발하고 실행해야 하기 때문에 IDE같은 개발환경에서도 WAS와 연동해서 실행되도록 복잡한 추가 설정이 필요하다
최근 방식(내장 서버)
- 최근에는 Spring Boot가 내장 톰캣을 포함하고 있다.
- 애플리케이션 코드 안에 톰캣과 같은 WAS가 라이브러리로 내장되어 있다는 뜻
- 개발자는 코드를 작성하고 JAR로 빌드한 다음 생성된 jar파일을 원하는 위치에서 실행하기만 하면 WAS도 함께 실행된다.
- main() 메서드만 실행하면 되고 WAS설치나 IDE같은 개발 환경에서 WAS와 연동하는 복잡한 일은 수행하지 않아도 된다.
JAR(Java Archive)
- 자바 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
- class(java 리소스, 속성 파일), 라이브러리 파일을 포함
- jre(java runtime environment) 만 있어도 실행 가능
- 모든 의존성과 구성 요소를 내장하고 있기 때문
Spring Boot에서의 JAR
⇒ 스프링 부트는 내장 서버를 가지고 있어 함께 작동하며 애플리케이션을 jar파일로 패키징한다. 이 jar파일은 애플리케이션과 모든 필요한 의존성을 포함하고 있어 별도의 설치 없이 실행 가능하다.
WAR(Web Application Archive)
- 웹 애플리케이션 서버 WAS 위에서 실행되며 HTML 같은 정적 리소스와 클래스 파일을 모두 포함하기 때문에 JAR에 비해 구조가 더 복잡하며 WAR 구조를 지켜야 한다.
- servlet/jsp 컨테이너에 배치할 수 있는 웹 애플리케이션 압축파일 포맷
- 웹 관련 자료 포함(jsp, servlet, jar, class, xml, html, javascript)
- 사전 정의된 구조를 포함함 (WEB-INF, META-INF)
- 별도의 웹 서버(WEB) or 웹 컨테이너(WAS) 필요
- 즉, JAR 파일의 일종으로 웹 애플리케이션 전체를 패키징 하기 위한 jar파일
WAR구조
WEB-INF
WEB-INF 폴더 하위는 자바 클래스와 라이브러리, 설정 정보가 들어가는 곳
WEB-INF를 제외한 나머지 영역은 HTML, CSS 같은 정적 리소스가 사용되는 영역
Spring Framework에서의 WAR
⇒ 서버에 의존적인 war 파일을 생성해 웹 서버에 배포
예를 들어, 톰캣과 같은 was에 war파일을 배포하면 서버가 애플리케이션을 실행시킨다.
🪄WAR vs JAR
배포의 유연성
- WAR: 서버에 종속적인 구조. 서버의 기능과 환경을 최대한 활용. 이는 대규모 및 복잡한 애플리케이션에 이점을 제공
- JAR: 어디서나 실행 가능한 구조로 빠른 개발과 테스트, 배포에 유리하다. 특히, 작은 규모의 애플리케이션 또는 마이크로 서비스 아키텍처에 적합
프로젝트의 복잡성
- WAR: 서버의 고급 기능(보안, 세션 관리 등)을 활용해 복잡한 웹 애플리케이션을 효과적으로 운영할 수 있다
- JAR: 간단하고 독립적인 서비스에 적합하며 빠른 개발과 배포를 가능하게 한다.
개발 및 배포의 간편함
- Spring boot와 JAR: 설정이 간소화되어 있고, 내장 서버를 사용해 어디서나 쉽게 애플리케이션을 실행할 수 있다.
⇒ WAR 파일은 전통적인 서버 사이드 렌더링 기술과 잘 어울리며, JAR파일은 마이크로 서비스 아키텍처나 API서버로서 사용될 때 유리하다
⇒ 프로젝트의 요구사항과 구조에 따라 적합한 프론트엔드 기술을 선택하고, 이를 WAR 또는 JAR 파일로 효과적으로 배포할 수 있다.
오랜만에 돌아온 포스팅의 주제가 이거인 이유가 있당
인턴이긴 하지만 사실상 정규직 전환이 거의 확정된 시점이다 보니 업무 인수인계 받고 조금씩 하는중인데 그러는 과정에서 애플리케이션 배포 프로세스를 공부해야 했다
여러 프로젝트가 있는데 뭐는 war, 뭐는 jar 파일을 배포하고 해서 제대로 공부할 겸 포스팅을 해보았답니당 ㅎㅎ
그럼 오늘 포스팅 끝!