WAR 배포 방식의 단점
- WAS 를 별도로 설치해야함
- 개발 환경 설정이 복잡함
- 배포 과정이 복잡함
- 톰캣 버전을 변경하려면 톰캣을 다시 설치해야함
외장 서버 VS 내장 서버
왼쪽은 WAS 를 실행해서 동작하는 방식, 오른쪽은 JAR안에서 WAS 라이브러리가 포함되는 방식
내장 톰캣 - 설정
서블릿 관련해서도 다 들어있음
내장 톰캣 - 서블릿
- 내장 톰캣 생성해서, 8080 포트에 연결
- 서블릿 등록
- tomcat.addServlet() 서블릿 등록
- context.addServletMappingDecoded() 서블릿 경로를 매핑
- tomcat.start() 톰캣 시작
내장 톰캣 - 스프링
- 내장 톰캣 (8080) 포트 연결
- 스프링 컨테이너 빈 (Bean) 등록
- 스프링 MVC 디스패처 서블릿을 만들고 스프링 컨테이너에 연결
- 디스패처 서블릿 내장 톰캣에 등록
- 실행
내장 톰캣 - 빌드 및 배포
jar 형식으로 빌드해야 함, 그리고 META-INF/MANIFEST.MF 파일에 main() 메서드를 지정해줘야 함
그냥 만들면 깨지기 때문에 build.gradle 에 작성을 해줌
딱 컴파일 된 소스들만 있고, 스프링 라이브러리나 톰캣 관련 라이브러들이 안보임
war 의 경우 라이브러리 역할을 하는 jar 파일을 포함
- WEB-INF
- classes
- hello/servlet/TestServlet.class
- libs
- jakarta.servlet-api-6.0.0.jar
- classes
- index.html
jar 파일은 jar 를 포함 할 수 없음
jar 스펙의 한계, WAR를 사용하기엔 WAS 위에서만 실행이 가능함
내장 톰캣 - 빌드 및 배포 - 대안 FatJar (uber jar)
jar를 포함 할 수 없지만 클래스는 포함 할 수 있음
라이브러리에 사용되는 jar를 풀면 class들이 나오는데, 이 class들을 새로 만드는 jar에 포함해줌
수 많은 class 때문에 뚱뚱한 (fat) jar로 불림
다시 빌드 (Encountered duplicate path 경고는 무시)
jar 실행
SEVERE: A child container failed during start 오류가 났는데 build\libs\tomcat.8080\webapps 경로로 잘 해줘야함
FatJar
- 장점
- 하나의 jar 파일로 배포 ~ 웹 서버 설치 + 실행까지 단순화 할 수 있음
- 단점
- 어떤 라이브러리가 있는지 확인이 어려움
- 파일명 중복 해결 불가능
스프링부트가 해결해 줌
feat. 스프링부트 - 핵심 원리와 활용 (김영한)
'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글
스프링 부트 스타터와 라이브러리 관리 (0) | 2023.08.18 |
---|---|
스프링 부트와 내장 톰캣 - 2 (0) | 2023.08.17 |
웹 서버와 서블릿 컨테이너 - 2 (0) | 2023.08.16 |
웹 서버와 서블릿 컨테이너 (0) | 2023.08.11 |
Spring Framework (0) | 2023.07.11 |