Spring boot Starter Web

KKH_94·2023년 8월 8일
1

SpringBoot

목록 보기
3/9

Spring boot Starter Web


Spring Boot Starter Web은 Spring Boot의 핵심 스타터 중 하나로, 웹 어플리케이션 개발을 위한 스타터 패키지입니다.

이것은 Spring MVC, Tomcat, Jackson 같은 웹 개발에 필요한 대부분의 라이브러리를 포함하고 있습니다.

Spring Boot Starter Web은 다음과 같은 주요 라이브러리를 제공합니다.

  1. Spring MVC : Spring Web MVC는 서블릿 API 위에 구축된 원래의 웹 프레임워크입니다. 이 프레임워크는 사용자가 HTTP 요청을 처리하는 데 필요한 모든 도구를 제공합니다.

  2. Tomcat : Tomcat은 가장 널리 사용되는 Java 서블릿 컨테이너입니다. 이것은 웹 서버 및 Java의 실행 환경인 Java Servlet, JavaServer Pages (JSP), Java Expression Language, Java WebSocket 등을 제공하는 오픈 소스 구현입니다.

  3. Jackson : Jackson은 JSON을 Java 객체로 변환하거나 Java 객체를 JSON으로 변환하는 데 사용되는 JSON 처리 라이브러리입니다.

스프링 부트 스타터 웹을 사용하면, 기본적으로 임베디드 톰캣이 구성되어 웹 서버로 사용할 수 있으며, 스프링 MVC를 활용하여 컨트롤러를 정의하고 HTTP 요청을 처리할 수 있습니다. 또한, RESTful 서비스를 구축하는데 필요한 모든 의존성을 제공하기 때문에 REST API를 손쉽게 개발할 수 있습니다.

또한, 스프링 부트 스타터 웹은 스프링 부트의 자동 구성 기능(Auto configuration)을 통해 개발자가 직접 세부 구성을 정의하지 않아도 되게 하여 개발 편의성을 크게 향상시킵니다. 이러한 방식은 개발자가 빠르게 웹 애플리케이션을 개발하고 배포하는 데 중요한 역할을 합니다.


포괄적인 Spring MVC


Spring MVC는 Servlet API 위에 구축된 프레임워크로, 클라이언트의 요청을 처리하고 응답을 생성하는 데 필요한 모든 기능을 제공합니다. 그 구성 요소들은 다음과 같습니다.

  1. DispatcherServlet : 모든 클라이언트 요청은 이 DispatcherServlet에 의해 처음에 받아집니다. 이 Servlet은 클라이언트의 요청을 적절한 컨트롤러에게 라우팅합니다.

또한 DispatcherServlet은 요청 처리 후에 뷰를 렌더링하고 클라이언트에게 응답을 반환하는 역할도 합니다. 이 작업을 수행하기 위해 DispatcherServlet는 Spring의 빈 설정과 함께 작동하며 여러 개의 HandlerMapping과 ViewResolver를 사용합니다.

  1. HandlerMapping : HandlerMapping는 클라이언트의 요청을 처리할 수 있는 적절한 컨트롤러를 찾는 역할을 합니다. Spring MVC에서는 여러 가지 전략을 제공하며, 이 중 가장 많이 사용되는 것은 RequestMappingHandlerMapping입니다.

이는 @RequestMapping 어노테이션을 사용하여 요청을 처리할 메서드를 찾습니다.

  1. Controller : Controller는 클라이언트의 요청을 처리하고 응답을 반환합니다. Controller는 @Controller 어노테이션으로 표시되며, 메서드는 @RequestMapping, @GetMapping, @PostMapping 등의 어노테이션으로 표시하여 요청을 처리할 수 있습니다.

이러한 메서드는 HttpServletRequest, HttpServletResponse, Model 등을 인수로 사용할 수 있으며, 반환 값으로는 뷰의 이름, ModelAndView 객체, ResponseEntity 객체 등을 사용할 수 있습니다.

  1. ModelAndView : 컨트롤러는 일반적으로 ModelAndView 객체를 반환합니다. 이 객체는 뷰 이름과 모델 객체를 담고 있으며, DispatcherServlet은 이 정보를 사용하여 HTTP 응답을 생성합니다.

  2. ViewResolver : ViewResolver는 컨트롤러가 반환한 뷰 이름을 실제 뷰로 변환하는 역할을 합니다. 가장 흔히 사용되는 ViewResolver는 InternalResourceViewResolver로, 이는 뷰 이름을 JSP 파일 경로로 변환합니다. 다른 ViewResolver로는 Thymeleaf, FreeMarker, JstlView 등이 있습니다.

  3. View : View는 최종적으로 클라이언트에게 반환될 응답을 렌더링합니다. View는 일반적으로 JSP, Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 HTML을 생성합니다. 또한, View는 JSON, XML 등의 형식으로 데이터를 클라이언트에게 반환하는데도 사용됩니다.

위의 과정들을 통해 Spring MVC는 클라이언트의 요청을 처리하고 응답을 반환합니다. 이 모든 과정은 Spring의 의존성 주입 기능을 기반으로 동작하므로, 각 구성 요소들은 유연하게 교체하거나 확장할 수 있습니다.

이를 통해 개발자는 다양한 요구 사항에 따라 애플리케이션을 쉽게 구성할 수 있습니다. . 이 외에도, RESTful 웹 서비스를 쉽게 개발할 수 있도록 지원하며, 스프링의 다른 기능들과 잘 통합되어 있어 보다 효과적인 웹 애플리케이션 개발을 돕습니다.


Spring-web


Spring Framework의 spring-web 모듈은 웹 애플리케이션을 개발하기 위한 핵심 기능들을 제공합니다.

이는 웹 요청 및 응답을 처리하고, HTTP 요청을 Java 객체로 변환하거나 Java 객체를 HTTP 응답으로 변환하는 기능을 포함합니다.

Spring-web 모듈의 주요 기능은 다음과 같습니다.

  1. Web Application Context : Spring Framework의 IoC (Inversion of Control) 컨테이너를 확장하여 웹 애플리케이션에 특화된 기능을 제공합니다. 예를 들어, 웹 애플리케이션의 컨텍스트 경로에 접근하거나, 웹 기반 이벤트에 응답하는 기능 등이 있습니다.

  2. Multipart File Upload : 웹 요청에서 멀티파트 파일 업로드를 처리하는 기능을 제공합니다.

  3. Web Utility Classes : 웹 개발에 유용한 다양한 유틸리티 클래스들을 제공합니다. 예를 들어, 파일 다운로드를 지원하는 클래스, 쿠키를 처리하는 클래스, 웹 요청 및 응답과 관련된 여러 유틸리티 함수 등이 있습니다.

  4. HTTP 요청 및 응답 핸들링 : HTTP 요청과 응답을 처리하는 클래스와 인터페이스를 제공합니다. 이에는 HTTP 요청을 Java 객체로 변환하거나, Java 객체를 HTTP 응답으로 변환하는 기능이 포함됩니다.

  5. Web Client : WebClient는 Spring 5부터 소개된 비동기, 논블로킹 웹 클라이언트로서, RESTful 웹 서비스를 호출하는 데 사용됩니다. 이는 RestTemplate의 대체제로, Reactive Programming 모델을 따릅니다.

Spring-web 모듈은 일반적으로 Spring MVC 및 Spring WebFlux와 함께 사용되며, 이들은 웹 애플리케이션에서 HTTP 요청을 처리하고, 요청에 대한 응답을 생성하는 컨트롤러와 뷰를 제공합니다.


spring-webmvc


Spring Web MVC는 Spring Framework의 일부로서, 웹 애플리케이션 개발을 위한 프레임워크입니다. Model-View-Controller (MVC) 디자인 패턴을 기반으로 하며, 웹 애플리케이션의 개발을 단순화하고 유연성을 높이는 데 도움을 줍니다.

  1. Model : 모델은 비즈니스 데이터와 로직을 나타냅니다. 데이터베이스, 파일, 객체 등에서 데이터를 가져오고 처리하는 코드가 포함됩니다.

  2. View : 뷰는 사용자에게 보여지는 데이터를 나타냅니다. 일반적으로 HTML, JSP, Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 뷰를 생성합니다.

  3. Controller : 컨트롤러는 사용자의 요청을 처리하고 적절한 응답을 반환합니다. 컨트롤러는 요청을 받아서 처리하고, 데이터를 모델에 저장하거나 가져오며, 적절한 뷰를 선택하여 응답을 생성합니다.

Spring Web MVC의 주요 기능은 다음과 같습니다.

DispatcherServlet : Spring Web MVC의 핵심은 DispatcherServlet입니다.
이 Servlet은 모든 웹 요청을 받아서 처리하고, 요청을 알맞은 컨트롤러에게 라우팅합니다.

Controller and RequestMapping : 컨트롤러는 클라이언트의 요청을 처리하는 데 사용되며, 특정 URL 패턴에 대한 요청을 핸들링하는 메소드를 가지고 있습니다. @Controller 주석을 사용하여 클래스를 컨트롤러로 선언하고, @RequestMapping 주석을 사용하여 메소드를 특정 URL에 바인딩합니다.

Data Binding and Validation : Spring Web MVC는 HTTP 요청 매개변수를 컨트롤러 메소드의 매개변수나 객체에 자동으로 바인딩하는 기능을 제공합니다. 또한, JSR-303, JSR-349, JSR-380을 지원하여 요청 매개변수의 유효성 검사를 할 수 있습니다.

Exception Handling : Spring Web MVC는 예외 처리를 위한 여러 가지 메커니즘을 제공합니다. @ExceptionHandler와 @ControllerAdvice를 사용하면 전역적으로 예외를 처리하거나 특정 컨트롤러에서 발생한 예외를 처리할 수 있습니다.

Flexible View Rendering : Spring Web MVC는 다양한 뷰 템플릿 엔진을 지원합니다. 이에는 JSP, Thymeleaf 등이 포함되어 있습니다.

RESTful Web Services Support : @RestController@ResponseBody를 사용하면, JSON, XML과 같은 형태로 데이터를 반환하는 RESTful 웹 서비스를 쉽게 만들 수 있습니다.

Integration with Spring Ecosystem : Spring Web MVC는 Spring Security, Spring Data, Spring Session 등 다른 Spring 프로젝트와 잘 통합됩니다.

Spring Web MVC를 사용하면 웹 애플리케이션의 확장성, 유연성, 유지 관리성을 향상시키는 데 도움이 됩니다. 또한, 스프링의 의존성 주입, AOP 등의 기능을 웹 애플리케이션 개발에 적용할 수 있습니다.


내장형 Tomcat


스프링 부트는 개발자가 웹 애플리케이션을 빠르게 개발하고 배포할 수 있도록, 내장형 (임베디드) 서버를 제공하는 것으로 유명합니다. 톰캣이 가장 널리 사용되는 선택사항이며, 스프링 부트의 기본적인 선택입니다.

톰캣은 가장 널리 사용되는 Java 웹 서버 (Servlet Container) 중 하나입니다. 이는 웹 서버의 역할과 Java 애플리케이션 실행 환경을 제공하며, Java Servlet, JavaServer Pages (JSP), Java Expression Language, Java WebSocket 등의 스펙을 구현하고 있습니다.

스프링 부트가 톰캣을 내장형으로 제공하는 이유는 다음과 같습니다.

  1. 단순성 : 개발자가 직접 웹 서버를 설치하고 구성하는 데 필요한 노력을 줄입니다. 이로 인해 개발자는 서버 구성보다는 애플리케이션 개발에 집중할 수 있습니다.

  2. 포트 가능성 : 애플리케이션과 웹 서버가 함께 패키징되므로, 애플리케이션을 다른 환경으로 쉽게 이동하거나 배포할 수 있습니다. 이로 인해 "개발 시스템에서는 작동했는데, 프로덕션에서는 작동하지 않는다"라는 문제를 피할 수 있습니다.

  3. 일관성 : 애플리케이션마다 독립적인 웹 서버 인스턴스를 가짐으로써, 서로 다른 애플리케이션 간에 웹 서버 설정이 충돌하는 문제를 피할 수 있습니다.

스프링 부트 애플리케이션을 시작하면, 내장형 톰캣 서버는 자동으로 시작되며, 애플리케이션의 HTTP 요청을 처리하기 시작합니다. 내장형 톰캣 서버의 포트 번호, 세션 설정, SSL 설정 등은 스프링 부트의 속성을 통해 쉽게 구성할 수 있습니다.

내장형 톰캣 서버를 사용하면, WAR 패키징을 통해 전통적인 방식으로 웹 서버에 배포하는 것도 가능하지만, 스프링 부트의 jar 패키징을 통해 실행 가능한 fat jar를 만들어, 애플리케이션을 단독으로 실행하는 것이 일반적입니다. 이러한 접근 방식은 마이크로서비스 아키텍처와 잘 맞습니다.


내장형 톰캣 서버 구동


Spring Boot 애플리케이션을 시작할 때, 내장형 Tomcat 서버는 자동으로 시작됩니다. 이는 Spring Boot 애플리케이션의 메인 메소드를 실행하는 것만으로 이루어집니다.

구동 과정은 대략 다음과 같습니다.

  1. 애플리케이션이 시작될 때 SpringApplication.run() 메소드가 호출됩니다. 이 메소드는 Spring Boot 애플리케이션을 부트스트랩하는 데 사용됩니다.

  2. SpringApplication 클래스는 SpringFactoriesLoader를 사용하여 ApplicationContextInitializer, ApplicationListener, SpringBootExceptionReporter 등을 로드하고 등록합니다. 이 중 EmbeddedWebApplicationContext가 포함되어 있습니다.

  3. EmbeddedWebApplicationContext는 Spring 애플리케이션 컨텍스트의 한 종류로, 웹 애플리케이션을 위해 특별히 설계되었습니다. 이 컨텍스트는 애플리케이션 컨텍스트가 생성되는 동안 내장형 서블릿 컨테이너를 시작합니다.

  4. 이 과정에서, TomcatServletWebServerFactory가 호출되어 ServletWebServerFactory 인터페이스를 구현합니다. 이 객체는 Tomcat 인스턴스를 설정하고 시작하는 역할을 합니다.

  5. 이렇게 생성된 Tomcat 인스턴스는 애플리케이션의 HTTP 요청을 처리하기 시작합니다.

따라서, Spring Boot 애플리케이션을 시작하면 자동으로 내장형 Tomcat이 구동되어 사용할 준비가 됩니다. 또한, 이 과정은 모두 프레임워크 내에서 자동으로 이루어지므로 개발자가 직접적으로 Tomcat 서버를 설정하거나 시작할 필요가 없습니다.

애플리케이션의 application.properties 또는 application.yml 파일에서 서버 포트, 세션 타임아웃 등의 서버 관련 설정을 할 수 있습니다. 기본적으로, 내장형 Tomcat 서버는 8080 포트에서 구동되게 설정되어 있습니다.


Jackson


Jackson은 Java 객체를 JSON으로 변환하거나 JSON을 Java 객체로 변환하는 작업, 즉 JSON 파싱 및 생성에 널리 사용되는 오픈 소스 라이브러리입니다.

이를 직렬화(Serialization) 및 역직렬화(Deserialization)라고 합니다.

직렬화(Serialization) : Java 객체를 JSON으로 변환하는 과정을 의미합니다. Jackson을 사용하면 Java 객체를 간단하게 JSON 문자열로 변환할 수 있습니다.

역직렬화(Deserialization) : JSON을 Java 객체로 변환하는 과정을 의미합니다. Jackson을 사용하면 JSON 문자열을 간단하게 Java 객체로 변환할 수 있습니다.

Jackson 라이브러리는 다음과 같은 특징을 가지고 있습니다.

  1. 성능 : Jackson은 빠른 성능을 제공합니다. JSON 처리에 있어서 Jackson은 경쟁 라이브러리들에 비해 좋은 성능을 보여줍니다.

  2. 다양한 JSON 데이터 구조 지원 : Jackson은 간단한 이름-값 쌍뿐만 아니라 복잡한 JSON 구조도 처리할 수 있습니다.

  3. 데이터 바인딩 : Jackson은 JSON을 Java 객체로 또는 Java 객체를 JSON으로 바인딩할 수 있는 기능을 제공합니다. 이는 직렬화와 역직렬화를 쉽게 처리할 수 있도록 돕습니다.

  4. 주석을 이용한 커스터마이징 : Jackson 라이브러리는 JSON 생성 및 파싱을 제어하는 데 사용할 수 있는 다양한 주석을 제공합니다. 예를 들어, @JsonProperty, @JsonIgnore 등의 주석을 사용하여 JSON 생성을 세밀하게 제어할 수 있습니다.

  5. 확장성 : Jackson은 모듈 시스템을 통해 확장성을 제공합니다. 예를 들어, 날짜 및 시간 관련 처리를 위한 모듈, Joda-Time 모듈, Guava 모듈 등이 있습니다.

Spring Boot는 기본적으로 Jackson 라이브러리를 포함하며, 이를 이용해 HTTP 요청 및 응답의 JSON 변환을 처리합니다.

따라서 Spring Boot와 Jackson은 서로 잘 통합되어 웹 애플리케이션 개발을 쉽게 만듭니다.

profile
_serendipity

0개의 댓글