분류 전체보기 1341

Ch02. 스프링 부트와 내장 톰캣 - 스프링 부트와 웹 서버

스프링 부트는 지금까지 고민한 문제를 깔끔하게 해결해 준다. 내장 톰캣을 사용해서 빌드와 배포를 편리하게 한다. 빌드시 하나의 Jar를 사용하면서, 동시에 Fat Jar 문제도 해결한다. 지금까지 진행한 내장 톰캣 서버를 실행하기 위한 복잡한 과정을 모두 자동으로 처리한다. 프로젝트 생성 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } ..

Ch02. 스프링 부트와 내장 톰캣 - 편리한 부트 클래스 만들기

MySpringApplication public class MySpringApplication { public static void run(Class configClass, String[] args) { System.out.println("MySpringApplication.run args=" + List.of(args)); //톰켓 설정 Tomcat tomcat = new Tomcat(); Connector connector = new Connector(); connector.setPort(8080); tomcat.setConnector(connector); //스프링 컨테이너 생성 AnnotationConfigWebApplicationContext appContext = new AnnotationCo..

Ch02. 스프링 부트와 내장 톰캣 - 내장 톰캣

설정 build.gradle plugins { id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { //스프링 MVC 추가 implementation 'org.springframework:spring-webmvc:6.0.4' //내장 톰켓 추가 implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5' } tasks.named('test') { useJUnitPlatform() } //일반 Jar 생성 task buildJar(type: Jar) { manifest { a..

Ch02. 스프링 부트와 내장 톰캣 - WAR 배포 방식의 단점

웹 애플리케이션을 개발하고 배포하려면 다음과 같은 과정을 거쳐야 한다. 톰캣 같은 웹 애플리케이션 서버(WAS)를 별도로 설치해야 한다. 애플리케이션 코드를 WAR로 빌드해야 한다. 빌드한 WAR 파일을 WAS에 배포해야 한다. 웹 애플리케이션을 구동하고 싶으면 웹 애플리케이션 서버를 별도로 설치해야 하는 구조이다. 과거에는 이렇게 웹 애플리케이션 서버와 웹 애플리케이션 빌드 파일(WAR)이 분리되어 있는 것이 당연한 구조였다. 단점 톰캣 같은 WAS를 별도로 설치해야 한다. 개발 환경 설정이 복잡하다. 단순한 자바라면 별도의 설정을 고민하지 않고, main() 메서드만 실행하면 된다. 웹 애플리케이션은 WAS 실행하고 또 WAR와 연동하기 위한 복잡한 설정이 들어간다. 배포 과정이 복잡하다. WAR를 ..

Ch01. 웹 서버와 서블릿 컨테이너 - 스프링 MVC 서블릿 컨테이너 초기화 지원

서블릿 컨테이너 초기화 과정은 상당히 번거롭고 반복되는 작업이다. 스프링 MVC는 이러한 서블릿 컨테이너 초기화 작업을 이미 만들어두었다. 덕분에 개발자는 서블릿 컨테이너 초기화 과정은 생략하고, 애플리케이션 초기화 코드만 작성하면 된다. 스프링이 지원하는 애플리케이션 초기화를 사용하려면 다음 인터페이스(WebApplicationInitializer)를 구현하면 된다. WebApplicationInitializer public interface WebApplicationInitializer { void onStartup(ServletContext servletContext) throws ServletException; } AppInitV3SpringMvc public class AppInitV3Sprin..

Ch01. 웹 서버와 서블릿 컨테이너 - 스프링 컨테이너 등록

build.gradle dependencies { //서블릿 implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' //스프링 MVC 추가 implementation 'org.springframework:spring-webmvc:6.0.4' } 현재 라이브러리에는 스프링 관련 라이브러리가 전혀 없다. 스프링 관련 라이브러리를 추가하자. spring-webmvc 라이브러리를 추가하면 스프링 MVC 뿐만 아니라 spring-core 를 포함한 스프링 핵심 라이브러리들도 함께 포함된다. HelloController @RestController public class HelloController { @GetMapping("/hello-spring") public..

Ch01. 웹 서버와 서블릿 컨테이너 - 서블릿 컨테이너 초기화

서블릿 컨테이너 초기화 1 WAS를 실행하는 시점에 필요한 초기화 작업들이 있다. 서비스에 필요한 필터와 서블릿을 등록하고, 여기에 스프링을 사용한다면 스프링 컨테이너를 만들고, 서블릿과 스프링을 연결하는 디스페처 서블릿도 등록해야 한다. WAS가 제공하는 초기화 기능을 사용하면, WAS 실행 시점에 이러한 초기화 과정을 진행할 수 있다. 과거에는 web.xml 을 사용해서 초기화했지만, 지금은 서블릿 스펙에서 자바 코드를 사용한 초기화도 지원한다. 서블릿 컨테이너 초기화 개발 서블릿은 ServletContainerInitializer 라는 초기화 인터페이스를 제공한다. 이름 그대로 서블릿 컨테이너를 초기화 하는 기능을 제공한다. 서블릿 컨테이너는 실행 시점에 초기화 메서드인 onStartup() 을 호..

Ch01. 웹 서버와 서블릿 컨테이너 - 톰켓 설정

IntelliJ 유료 버전 IntelliJ 유로 버전과 무료 버전에 따라 IDE에서 톰캣을 설정하는 방법이 다르다. 1) Run > Run... 클릭 2) Edit Configuration 클릭 3) + 클릭 후, tomcat server 추가(ee로 추가하면 안 된다) 4) Server > Confugure > +를 눌러 추가한 뒤(> Tomcat 서버 위치 선택 하여 추가 5) Deployment > +를 통해 exploded를 추가한 뒤, application context에 적혀있는 것을 지우자 6) start 누르면 톰캣 서버가 실행된다(이전에 켜져 있었다면 반드시 끄고 실행해야 한다) IntelliJ 무료 버전 1) build.gradle에 추가 //war 풀기, 인텔리J 무료버전 필요 tas..

Ch01. 웹 서버와 서블릿 컨테이너 - WAR 빌드와 배포

프로젝트 빌드 프로젝트 폴더로 이동 "./gradlew build" 명령어를 입력하여 빌드 build/libs/server-0.0.1-SNAPSHOT.war 파일 생성된 것을 확인 war 파일 구조 "jar -xvf server-0.0.1-SNAPSHOT.war" 명령어 실행 WEB-INF classes hello/servlet/TestServlet.class lib jakarta.servlet-api-6.0.0.jar index.hml JAR, WAR 간단 소개 JAR 소개 자바는 여러 클래스와 리소스를 묶어서 JAR (Java Archive)라고 하는 압축 파일을 만들 수 있다. 이 파일은 JVM 위에서 직접 실행되거나 또는 다른 곳에서 사용하는 라이브러리로 제공된다. 직접 실행하는 경우 main()..

Ch01. 웹 서버와 서블릿 컨테이너 - 웹 서버와 스프링 부트 소개 & 톰켓 설치 & 프로젝트 설정

전통적인 방식 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버)를 설치했다. 그리고 WAS에서 동작하도록 서블릿 스펙에 맞추어 코드를 작성하고 WAR 형식으로 빌드해서 war 파일을 만들었다. 이렇게 만들어진 war 파일을 WAS에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했다. 이런 방식은 WAS 기반 위에서 개발하고 실행해야 한다. IDE 같은 개발 환경에서도 WAS와 연동해서 실행되도록 복잡한 추가 설정이 필요하다. 최근 방식 최근에는 스프링 부트가 내장 톰캣을 포함하고 있다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있다는 뜻이다. 개발자는 코드를 작성하고 JAR로 빌드한 다음에 해당 JAR를 원하는 위치에서 실행하기만..