웹개발/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 MVC 개발의 기초

  • Spring Boot를 통해 띄운 WAS (Web Application Server)에서 웹 페이지를 반환하기 위해서 2개만 신경쓰자
    1. WAS에서 “어떤 요청을 받았을 때”, 웹페이지를 반환할 것인가?
      1. 이를 “Controller”라고 부르며, 어떤 REST API (Method + URL) 요청을 받았을때 처리할지 정의한다
      2. 어떤 Method, URL인지만 알면 된다
    2. “어떤 웹 페이지를 반환할것인가?”
      1. 이를 “View”라고 부르며, 어떤 웹 페이지를 반환할지, 반환할 페이지를 HTML로 정의해놓는다
        1. View는 HTML로 정의해둔다
      2. templates 폴더에 있는 viewTemplates를 알아서 가져올 수 있다
        1. static 폴더에는 정적 페이지를 가지고 있다
          1. static 폴더에서 먼저 페이지를 찾은 후, 없다면 templates 폴더에서 찾아본다
        2. templates 폴더는 viewTemplates를 가지고 있다

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를 호출한다
  • HandlerMapping
    • 어떤 REST API (Method + URL) 요청을 받았을 때, 어떤 메서드로 처리할지 정의하는 것이다
      1. RequestMappingHandlerMapping:
        1. Controller를 통해 View 를 반환한다
        2. 제일 먼저 호출된다
          1. 매핑된 웹 페이지가 있는지 제일 먼저 확인 후,
      2. WelcomePageHandlerMapping:
        1. Contorller 없이 View를 반환한다
        2. static ← 정적 리소스 처리를 위함이다
        3. template ← viewTemplate이 담긴다
          1. Thymeleaf 자체적으로 ViewTemplate을 저장하기 위해 사용하는 directory이다
        4. 두번째로 호출된다
          1. 정의된 페이지가 있는지 확인한다
      3. SimpleURLHanlderMapping = ResourceHandlerMapping
        1. PNG, JPG 같은 이미지, Static HTML같은 여러 정적 리소스를 처리하기 위함이다
        2. 세번째로 호출된다

@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() { ... }
반응형