2021 05 06
2021-05-06¶
테코톡¶
- 스프링으로 서블릿을 다룬다는 것 1. 서블릿이란 - 정적인 페이지만 리턴 - 프로그램 붙여 동적인 페이지 생성 2. 서블릿 컨테이너와 서블릿 동작 방식 - Servlet Req/Resp 객체 생성 - 설정 파일 참고해서 매핑할 Servlet 확인 - Servlet Container에 스레드 생성, res/req를 인자로 서비스 실행 - 서블릿 컨테이너: 서블릿 생명 주기 관리 3. 프론트 컨트롤러 패턴 - Dispatcher Servlet: 서블릿 하나 두고 모든 요청 처리 (공통 로직 추출) 4. Dispatcher Servlet 요청 처리 과정 - Handler Mapping (요청 처리 핸들러 검색) <-> Dispatcher Servlet & Handler Adapter <-> View Resolver 5. 스프링 컨테이너 맛보기 - 개발자로써 핸들러에만 집중할 수 있도록 함 - Root application 컨텍스트 & Servlet 컨텍스트
- 스프링 VS 스프링부트
1. Spring 생태계
- Spring Framework, Spring boot, Spring data 등 여러 프로젝트의 모음
- Spring은 프로젝트 별로 하위 모듈을 가지고 있음
- Spring Framework
- Spring WebMVC
- Spring JDBC
- Spring Core
2. Spring Framework?
- 정의: 자바 기반 기업용 애플리케이션
- 애플리케이션 수준의 인프라 지원
- 비즈니스 로직에 집중
- 비즈니스 로직 (DI, IoC) <-> 엔터프라이즈 기술 분리
- 기본 설정 잘하면 스프링 관련 코드 신경 안써도 됨
3. Spring Boot?
- Spring 애플리케이션 쉽게 만들 수 있음
- What makes spring framework uncomfty
- 개발자가 처리해야 할 설정 증가
- Spring Boot는 약간의 설정만으로 Spring 애플리케이션 만듦
- Spring Boot는 Spring Framework 쉽게 사용하게 해주는 도구
4. Spring Boot 쓰면 달라지는 점?
- 의존성 관리
- 모듈의 의존성 버전 명시해줬는데... -> spring-boot-starter
- spring-boot-starter-parent로 버전 관리
- spring-boot-starter: 관련 있는 모듈의 모음 제공
- spring-boot-starter-parent: 버전관리
- 자동 설정
- 기존 Spring 많은 환경 설정 필요 - DB 설정 등이 많이 간편해짐 (Spring Boot가 해줌) - @SpringBootApplication - @SpringBootConfiguration - @EnableAutoConfiguration (자동 설정 지원) - @ComponentScan (Bean 등록)
- Classpath에 jar 등록 시 spring.factories에 있는 관련 설정 실행 - @Conditional 조건에 따라 빈 등록 - 내장 WAS - 절차 - WAR 패키징 - WAS 설치 - WAS에 WAR 파일 올리기
- Spring Boot에는 WAS가 내장되어 있음 - 자동설정이 넣어줌 - 모니터링 - Actuator를 사용하여 모니터링 가능 - EndPoint로 미리 만들어서 제공 - /health - /metrics/{name} - /beans - /loggers/{name} - Actuator에는 민감한 정보도 다수 - Spring Security를 통해 보안 신경써주자 - 메모리에 저장하기에 영구 저장소 저장 고려하자
서블릿 VS 스프링¶
- Servlet: 웹 애플리케이션을 만들 때 필요한 인터페이스
- Spring Web MVC: 스프링 프레임워크에 있는 모듈로써, MVC 패턴을 사용한 웹 서비스 구축에 사용 - 얘는 서블릿 사용!
- 정적 데이터만 사용하던 Web Server - 사용자에 따라 다른 처리를 못해주는 정적 파일 제공 - Client <--> Server(아파치) <--> CGI 구현체(C/PHP) - CGI는 요청 들어올 때 마다 프로세스를 생성
- 동적 데이터 처리하던 CGI - 문제1. 프로세스에서 쓰레드로 변경하자 - 문제2. 여러 인스턴스에서 싱글톤으로 변경하자 - 서블릿 탄생
- WAS 탄생 - Web Server: 정적 데이터 처리 - WAS: 동적 데이터 처리
- 서블릿 - init: 생성 담당 - service: 실제 기능이 수행됨 (HTTP method에 따른 doGet()/doPost()/doPut()등 실행) - destroy: Servlet Instance 소멸 - 각 메서드는 Servlet Container(Tomcat)이 호출 - 싱글톤이라 메모리 공유 - 지역변수는 쓰레드 별로 분포
- Web.xml(설정파일) - WAS에게 Servlet 객체 - URL mapping 정보 알려줌
- Spring Web MVC
- Dispatcher Servlet으로 사용
- 모든 요청 들어오면 Dispatcher Servlet으로 요청 감
- Handler 매핑을 통해 요청에 따라 적절한 Controller 찾아줌
- 스프링에서 제공
- BeanNameHandlerMapping: Bean이름과 URL 매핑
- ControllerClassNameHandlerMapping:
- SimpleUrlHandlerMapping:
= DefaultAnnotationHandlerMapping: @RequestMapping("경로")
- 서블릿을 등록하면 서블릿이 사용할 설정 파일이 자동으로 등록됨- 이거 없으면... - URL 마다 서블릿 생성해서 Web.xml로 서블릿 관리 - Servlet은 DispatcherServlet 한 개로 처리할 수 있음 - 웹 서버 VS 애플리케이션 서버 VS 서블릿 컨테이너 - 웹 서버 - 정적인 페이지 제공하는 서버 - 애플리케이션 서버 - 서버 사이드 코드를 이용해 동적인 컨텐츠 만드는 서버 - 서블릿 컨테이너 (웹 컨테이너 || 서블릿 엔진) - 톰캣, 제티