웹개발/Spring
16 - 1. Spring의 기초
lukeit
2024. 11. 14. 09:10
Spring
- 몇가지 자주 사용하는 Dependencies
- Spring Web
- 가장 기본적으로 Spring MVC 기반의 REST API혹은 웹 페이지 반환을 위한 Tomcat Server를 제공한다
- Lombok
- 불필요한 Java 코드 작성을 최소화하기 위한 Annotation 기반 코드 자동 생성기
- Thymeleaf
- Spring에서 웹 페이지를 만들어 Client에게 서빙하기 위해 사용하는 서버사이드 템플릿 엔진이다
- Spring Web
Spring Web MVC 개발의 기초
- Spring Boot를 통해 띄운 WAS (Web Application Server)에서 웹 페이지를 반환하기 위해서 2개만 신경쓰자
- WAS에서 “어떤 요청을 받았을 때”, 웹페이지를 반환할 것인가?
- 이를 “Controller”라고 부르며, 어떤 REST API (Method + URL) 요청을 받았을때 처리할지 정의한다
- 어떤 Method, URL인지만 알면 된다
- “어떤 웹 페이지를 반환할것인가?”
- 이를 “View”라고 부르며, 어떤 웹 페이지를 반환할지, 반환할 페이지를 HTML로 정의해놓는다
- View는 HTML로 정의해둔다
- templates 폴더에 있는 viewTemplates를 알아서 가져올 수 있다
- static 폴더에는 정적 페이지를 가지고 있다
- static 폴더에서 먼저 페이지를 찾은 후, 없다면 templates 폴더에서 찾아본다
- templates 폴더는 viewTemplates를 가지고 있다
- static 폴더에는 정적 페이지를 가지고 있다
- 이를 “View”라고 부르며, 어떤 웹 페이지를 반환할지, 반환할 페이지를 HTML로 정의해놓는다
- WAS에서 “어떤 요청을 받았을 때”, 웹페이지를 반환할 것인가?
WAS’s Template Engine
- 동적 웹 페이지를 만들기 위해 두가지가 필요하다 = Template + Data
- 반복되는 템플릿과 유저 정보를 분리하여 동적 웹 리소스를 반환하여 WAS를 통해 구현이 가능하다
- 반복되는 템플릿 = ViewTemplates
- Data = Model
- 데이터에 대한 조회, 조작
- 동적 웹 페이지 = View (HTML)
- Model을 기반으로 만들어진 웹 페이지 + 유저의 요청을 받아 Controller는 응답을 반환한다
- Controller: 요청을 받고, 연산 후 응답을 보낸다
- 유저가 보는 것 = Web Page ← Controller가 반환한 것
- 유저가 하는 것 = JS Interaction → Controller를 호출한다
- ex.) Model (데이터)를 바꿔달라는 요청을 View의 JS를 통해 Controller를 호출한다
- Model을 기반으로 만들어진 웹 페이지 + 유저의 요청을 받아 Controller는 응답을 반환한다
- HandlerMapping
- 어떤 REST API (Method + URL) 요청을 받았을 때, 어떤 메서드로 처리할지 정의하는 것이다
- RequestMappingHandlerMapping:
- Controller를 통해 View 를 반환한다
- 제일 먼저 호출된다
- 매핑된 웹 페이지가 있는지 제일 먼저 확인 후,
- WelcomePageHandlerMapping:
- Contorller 없이 View를 반환한다
- static ← 정적 리소스 처리를 위함이다
- template ← viewTemplate이 담긴다
- Thymeleaf 자체적으로 ViewTemplate을 저장하기 위해 사용하는 directory이다
- 두번째로 호출된다
- 정의된 페이지가 있는지 확인한다
- SimpleURLHanlderMapping = ResourceHandlerMapping
- PNG, JPG 같은 이미지, Static HTML같은 여러 정적 리소스를 처리하기 위함이다
- 세번째로 호출된다
- RequestMappingHandlerMapping:
- 어떤 REST API (Method + URL) 요청을 받았을 때, 어떤 메서드로 처리할지 정의하는 것이다
@Controller
@RequestMapping(**"/users"**) <- 이건 value = '/users'와 같다, values를 생략했을뿐
public class UserController {
@RequestMapping(method = RequestMethod.GET, value = **""**)
public String userPage() { ... }
@RequestMapping(method = RequestMethod.GET, value = **"/1/detail"**)
public String detailPage() { ... }
반응형