JAVA

[Spring Boot]기본 개념 3강 스프링부트 동작원리

springboot

[Spring Boot]기본 개념 3강 스프링부트 동작원리

1.서블릿 컨테이너

spring
스프링을 배우기 위해 꼭 알아야할 웹 용어 정리스프링부트 2강 -웹 기본 개념 html, http, browser, url 아파치와 톰캣 Stream Stateless와 Stateful Session과 Cookies Tomcat의 Scope...

서블릿 컨테이너는 HTTP 요청을 받아 웹페이지를 동적으로 생성하는 역할을 한다. 대표적인 서블릿 컨테이너가 바로 톰캣이다. 스프링에는 톰캣이 내장되어 있다.

스프링에서는 URL 요청을 완전히 막고 있다. 그렇기 때문에 URI 요청 방식을 사용하는데 jsp와 같은 톰캣이 해석해야하는 특정 파일을 요청할 경우 무조건 자바를 거쳐가게 된다.

URL : 자원 요청 예) http://naver.com/a.png

URI : 식별자 요청 예) http://naver.com/picture/a

2.web.xml

web.xml이 하는 일

1. ServletContext의 초기 파라미터 설정

초기 파라미터를 설정해 두면 스프링의 모든 영역에서 권한과 인증을 체크하여 필터링 할 수 있다.

2. Session의 유효시간 설정

권한과 인증이 완료된 사용자의 사용 가능 시간을 설정할 수 있다.

3. Servlet/JSP에 대한 정의 및 매핑

서블릿과 jsp을 검토하여 목적지에 도착할 수 있게 유도해 준다.

4. Mime Type 매핑

스프링에 접근하는 데이터 타입을 확인하여 목적지의 타입으로 변경해 준다.

5.Welcome File list

필터링 대상이 없는 데이터의 접근시 공통된 영역으로 보내주기 위한 파일을 가지고 있다.

6. Error Pages 처리

필터링 할 수 없는 데이터의 접근시 에러 페이지로 보내준다.

7. 리스너/필터 설정

바쁜 업무를 대리해 주는 리스너와 사용자의 권한과 인증을 체크하거나 반입 금지 요소를 필터하는 설정을 할 수 있다.

8. 보안

프로그램에 위험한 영향을 줄 수 있는 사용자를 막아준다.

3.DispatcherServlet

스프링에서는 FrontController 패턴과 RequestDispacher 기능을 묶어서 제공하는데 이를 디스패쳐 서블릿이라고 한다. 직접 코드를 짜지 않아도 스프링에 기본 탑재되어 있다.

디스패쳐 서블릿과 함께 자동생성되는 객체(IoC)가 있는데 그 중에 필터가 있다. 기본적으로 필요한 필터가 제공되나 내가 직접 등록할 수도 있다.

FrontController 패턴

web.xml의 일을 나누어서 하도록 만드는 패턴. 이 때 프론트 컨트롤러에서 자원에게 재요청 혹은 재응답을 하게되는데 최초에 web.xml에게 한 요청/응답과 동일하게 유지할 수 있게 RequestDispatcher를 사용한다.(HTTP 요청은 stateless하기 때문에 다시 요청하면 새로운 요청으로 읽는다.)

RequestDispatcher

FrontController에 도착한 요청/응답을 그대로 유지시켜준다. 페이지 이동시에 동일한 데이터를 가지고 이동할 수 있다.

4.스프링 컨테이너

ApplicationContext(IoC 컨테이너)

디스패쳐 서블릿에 의해 생성되는 객체를 ApplicationContext라고 하는데 이를 IoC 컨테이너라고 부른다.

  1. 외부에서 요청이 들어온다.
  2. wel.xml을 거쳐 필터링 된다.
  3. ContextLoaderListener에서 DB 관련 공통 로직을 메모리에 띄운다.(root-applicationContext.xml)
  4. 디스패쳐 서블릿이 컴포넌트 스캔을 하여 메모리에 띄우고 주소 분배를 한다.
컴포넌트 스캔

static 객체와 같이 main 메서드가 실행되기 전에 이미 메모리에 뜨는 객체와 달리 자바 파일과 같이 우리가 직접 생성하여 메모리에 띄우는 객체가 있다. 이러한 객체는 미리 생성되어야 다른 코드 실행이 가능한 경우가 대부분인데 이러한 객체를 미리 메모리에 띄우기 위해 파일을 전체적으로 한번 읽어주는 것을 컴포넌트 스캔이라고 한다. 스프링에서는 디스패쳐 서블릿이 특정 파일에 포함되어 있는 파일을 실행시에 @어노테이션을 가지고 있는 객체를 읽어 IoC 컨테이너에 띄워주는 역할을 한다. 이때 DI하는 것으로 주소를 외우지 않고 IoC 컨테이너의 데이터를 가져 올 수 있다.

컴포넌트 스캔시에 읽어주는 기본 어노테이션

@Controller, @RestController, @Configration, @Repository, @Service, @Component …

DispachterServlet

ApplicationContext의 종류에는 servlet-applicationContext와 root-applicationContext가 있다.

a. servlet-applicationContext

servlet-applicationContext는 ViewResolver, Interceptor, MultipartResolver 객체를 생성하고 웹과 관련된 어노테이션 Controller, RestController를 스캔 한다. 해당 파일은 DispatcherServlet에 의해 실행된다.

b. root-applicationContext

root-applicationContext는 해당 어노테이션을 제외한 어노테이션 Service, Repository등을 스캔하고 DB관련 객체를 생성한다. 해당 파일은 ContextLoaderListener에 의해 실행된다.

ContextLoaderListener를 실행해주는 녀석은 web.xml이기 때문에 root-applicationContext는 servlet-applicationContext보다 먼저 로드된다.

Bean Factory

필요할 때만 객체를 빈 팩터리에 등록(@configuration -> 클래스, @Bean -> 객체)하는 레이지 로딩이 된다.

5.컨트롤러로 요청

요청 주소에 따른 적절한 컨트롤러의 함수를 찾아서 실행한다.

6.응답

spring
스프링부트 배우기 전에 알아야할 기본 지식의존성 주입(DI)을 할 수 없는 어노테이션(Annotation)으로 디스패쳐 서블릿에서 관리하는 영역이다. 디스패쳐 서블릿이 파싱으로 엔드포인트를 추출해 이를 IoC 컨트롤러에서 @RestController와 @Controller를 찾아 메서드를 호출한다....

응답하는 방법으로는 1. 파일 리턴 2. 데이터 리턴이 있다. 파일을 응답할 경우 ViewResolver가 작동하고 데이터를 응답할 경우 MessageConverter(@ResponseBody)가 작동한다. 메시지 컴버터는 오브젝트를 리턴할 때 json(Jackson) 타입으로 리턴한다.

spring

https://asfirstalways.tistory.com/334

최신글