스프링
자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크
IoC (Inversion of Control)
제어의 역전 -> 주도권이 스프링에 있다.
객체 생성 및 의존성 설정을 스프링에 위임
IoC컨테이너
객체 생성, 라이프사이클 관리, 의존성 설정을 담당하는 컨테이너
IoC컨테이너를 DI 컨테이너, 스프링 컨테이너라고 부름
@Component 계열
class - 설계도
object - 실체화가 가능한 것
instance - 실체화 된 것
DI (Dependency Injection)
의존성 주입
스프링은 싱글톤 패턴으로 객체 생성 비용 문제 해결
@Autowired
MessageConverter
스프링은 메시지컨버터를 가지고 있고 기본값은 json .
@ResponseBody -> BufferedWriter
@RequestBody -> BufferedReader
JPA
Java Persistence API
영구적으로 데이터를 저장하는데 필요한 인터페이스
ORM
Object Relational Mapping
서블릿 객체
- 클라이언트에서 요청시 스레드가 서블릿 객체 메소드 호출합니다.
- 톰캣은 Thread pool 을 사용하여 쓰레드를 재상용 할 수 있게 해주고 max-thread, connection timeout 등의 설정을 사용자가 직접 설정 해 줄 수 있습니다.
웹 배포서술자 (web.xml)
- Web Application의 Deployment Descriptor(환경파일 : 배포서술자, DD파일)로서 XML 형식의 파일
- ServletContext의 초기 파라미터
- Session의 유효시간 설정
- Servlet/JSP에 대한 정의
- Servlet/JSP 매핑
- Mime Type 매핑
- Welcom File list
- Error Pages 처리
- 리스너 / 필터 설정
- 보안
4. Servlet/JSP 매핑시 모든 클래스 매핑 적용시키기 힘들기 때문에 FrontController 패턴 이용
FrontController 패턴
최초 앞단에서 web.xml 에 다 정의하기가 힘들기 때문에 request 요청을 받아서 필요한 클래스에 넘겨줍니다.
( web.xml -> FrontController )
ex) .do (특정주소) 는 frontController 가 낚아챔.
이때, 새로운 요청이 생기기 때문에 request와 response가 새롭게 new 될 수 있습니다.
-> RequestDispatcher 가 필요합니다.
RequestDispatcher
필요한 클래스 요청이 도달했을 때 FrontController 에 도착한 request 와 response를 그대로 유지시켜줍니다.
DispatchServlet
DispatchServlet = FrontController 패턴 + RequestDispatcher
DispatchServlet 이 자동생성되어질 때 수 많은 객체가 생성(IoC)됩니다. (보통 필터들)
해당 필터들은 내가 직접 등록할 수도 있고 기복적으로 필요한 필터들은 자동 등록 되어집니다.
ApplicationContext
수많은 객체들이 DispatchServlet에 의해 ApplicationContext에 등록되고 이것을 IoC라고 합니다
DI (의존성 주입)을 통해 필요한 곳에서 ApplicationContext에 접근하여 필요한 객체를 가져올 수 있습니다.
ApplicationContext는 싱글톤으로 관리되기 때문에 어디에서 접근하든 동일한 객체임을 보장해줍니다.
servlet-applicationContext
ViewResolver, Interceptor, MultipartResolver 객체를 생성, 웹과 관련된 어노테이션 Controller, RestController을 스캔
DispatchServlet에 의해 실행
root-applicationContext
DB관련 어노테이션 Service, Repository 등을 스켄, 관련 객체 생성
ContextLoaderListener에 의해 실행 -> web.xml이 샐행하기 때문에 servlet-applicationContext보다 root-applicationContext가 먼저 로드 된다.
* 스캔 : 메모리에 로딩한다는 뜻
Bean Factory
필요한 객체를 Bean Factory에 등록할 수 있습니다.
여기에 등록하면 초기에 메모리에 로드되지 않고 필요할 때 getBean() 메소드를 통해 호출하여 메모리에 로드할 수 있다.(IoC)
필요할 때 DI 사용할 수 있다.
Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드하기 때문에 lazy-loading 이 됩니다.
@Configuration
class A {
@Bean
객체 메소드(){
return 객체();
}
}
응답
JSP 파일 리턴 : ViewResolver 가 관여 , ex) 'web-INF/views/' 추가해서 web-INF/views/hello.jsp 파일 호출
Data 리턴 : MessageConverter 작동, 기본정략은 json
본 강의를 참고했습니다.
'Back-end > Spring Boot + REST API' 카테고리의 다른 글
Spring boot - blog application (REST API) : Comment (0) | 2022.07.03 |
---|---|
Spring boot - blog application (REST API) : Pagination and Sorting Support (0) | 2022.06.30 |
Spring boot - blog application (REST API) : Post CRUD (0) | 2022.06.29 |
Spring boot - blog application (REST API) (0) | 2022.06.28 |
Spring Boot 컨트롤러에서 데이터 받는 방법(@RequestBody, @RequestParam, @PathVariable) (0) | 2022.06.27 |
댓글