콘텐츠로 이동

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 서블릿 컨테이너 - 웹 서버 - 정적인 페이지 제공하는 서버 - 애플리케이션 서버 - 서버 사이드 코드를 이용해 동적인 컨텐츠 만드는 서버 - 서블릿 컨테이너 (웹 컨테이너 || 서블릿 엔진) - 톰캣, 제티