Spring Boot Controller 동작 방식 정리
기본 동작방식 이해하기
스프링부트는 servlet으로 만들어져 있습니다.
Servlet이란 ? : 자바로 웹을 할 수 있는 기술
요청을 할 때마다 Java 파일이 호출됩니다. 그러면 요청마다 자바 파일이 필요합니다.
1. 로그인 요청 -> Login.java
2. 회원가입 요청 -> Join.java
3. 게시글 쓰기 요청 -> Write.java
그래서 하나의 자바 파일에서 모든 요청을 받는 FrontController 사용합니다.
로그인, 회원가입, 게시글 쓰기 등 모든 요청 -> FrontController.java
이 때 한 컨트롤러에 너무 많은 요청이 모이는 것을 방지하기 위해 도메인 별로 분기합니다.
User 테이블 : 로그인, 회원가입.. -> UserController.java
Board 테이블 : 글 쓰기, 삭제, 수정 -> BoardController.java
Product 테이블 : 상품 등록, 목록 -> ProductController.java
분기는 Dispatcher가 요청을 보고 어떤 컨트롤러로 분기시켜야 할 지 결정해줍니다.
(= ServletDispatcher, RequestDispatcher) (스프링은 Dispatcher가 이미 만들어져 있음)
HTTP 요청 방식
1. GET – 데이터 요청
2. POST – 데이터 전송 (Http Body 필요 / 데이터를 담고있기 때문에)
3. PUT – 데이터 갱신 (Http Body 필요 / 데이터를 담고있기 때문에)
4. DELETE – 데이터 삭제
GET 요청 SELECT 응답 응답
클라이언트 -----> 웹서버 -----> DB -----> 웹서버 -----> 클라이언트
* DB는 웹서버로 레코드를 응답
* 웹서버는 클라이언트에게 .html 파일이나 데이터(ex. 문자열)을 응답
http 쿼리스트링 : /abc?name=john
주소 변수 매핑 (path variable) : /abc/john
http의 content-type 이란?
1. x-www-form-urlencoded (스프링부트 기본 타입)
2. text/plain
3. application/json
스프링 Json 응답
컨트롤러가 자바 객체를 리턴하면 Spring의 MessageConverter가 자동으로 Json(구:xml)으로 변경해서 통신을 통해 응답한다.
** @RestController일 때만 MessageConverter가 작동한다. **
스프링 Jsp, mustache 파일 응답
.jsp 파일과 .mustache 파일은 템플릿 엔진을 사용합니다.
템플릿 엔진이란? : html 파일에 Java 코드를 쓸 수 있게 하는 것
- resources/templates 폴더 안에 템플릿엔진 파일을 놔두면 확장자 없이 파일명만 적으면 자동으로 찾음
- 템플릿 엔진으로 동적인 응답을 가능하게 함
- 템플릿엔진으로 자바 코드를 보내고 싶을 땐 컨트롤러에서 Model 객체에 addAttribute로 추가하고 반환하면 템플릿엔진 코드(.jsp)에서 ${속성명} 으로 사용가능