백엔드 데브코스 TIL 22일차

Inchang Choi·2022년 4월 20일
0

백엔드 데브코스 TIL

목록 보기
16/30
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


Spring MVC

Dispatch Servlet

Front Controller Pattern

View의 페이지가 늘어남에 따라 컨트롤러 내에 중복 코드가 만들어지게 됩니다.

  • View로 이동하는 Forward
  • ViewPath 설정
  • 응답을 보낼 필요가 없는 경우 서블릿 내 response가 사용되지 않습니다.

즉, 이러한 중복 코드들을 통합적으로 처리할 수 있는 설계가 Front Controller Patern입니다.

Front Controller를 통하여 공통 코드를 처리하고, 요청에 맞는 컨트롤러를 매핑할 수 있게 됩니다.

스프링에서는 우리가 작성한 컨트롤러를 통해 디스패처 서블릿을 호출합니다.

여기서 디스패처 서블릿이 Front Controller의 역할을 담당합니다.

(https://mossgreen.github.io/Servlet-Containers-and-Spring-Framework/)

Spring MVC 처리 흐름

  1. DispatcherServlet의 HTTP 요청 접수
  2. DispatcherServlet에서 컨트롤러로 HTTP 요청 위임
    • 스프링에서는 컨트롤러를 핸들러 라고도 부릅니다.
    • 사용자 요청을 기준으로 어떤 핸들러에게 작업을 위임할지를 결정해주는 것을 핸들러 매핑 전략이라고 합니다.
    • 스프링은 컨트롤러의 메소드 시그니처를 제약하지 않기 때문에 제각각 다른 메소드와 포맷을 가진 컨트롤러를 호출 하기 위해 DispatcherServlet은 어댑터를 사용하게 됩니다.
    • 모든 웹 요청의 정보가 담긴 HttpServletRequest 오브젝트를 핸들러 어댑터에 전환 해주고, 어댑터가 컨트롤러의 메소드가 받을 수 있는 파라미터로 변환해서 전달 해 줍니다.
    • 이를 핸들러 어댑터 전략이라고 합니다.
  3. 컨트롤러의 모델 생성과 정보 등록
  4. 컨트롤러의 결과 리턴 : 모델과 뷰
  5. DispatcherServlet의 뷰 호출과 모델 참조
    ViewResolver를 통하여 특정한 view가 만들어집니다.
  6. HTTP 응답 돌려주기

(https://terasolunaorg.github.io/guideline/public_review/Overview/SpringMVCOverview.html)

JSTL

JSTL의 기본 개념과 사용방법 정리

Static Resource

리소스 핸들러는 default servlet의 요청을 위임해서 리소스를 serving 합니다.

Thymeleaft

타임리프는 동적 리소스를 처리할 수 있게 도와주는 View template engine입니다.

템플릿 내용을 코드로 작성하는 대신 DOM(Documet Object Model)을 사용하여 태그 및 속성을 기반으로 작성합니다.

가장 적은 양의 입출력 작업을 사용하기 위해 지능적인 캐싱을 사용하여, 타임리프는 처음부터 XML 및 웹 표준을 염두에 두고 설계 되었으므로 필요한 경우 완전한 유효성 검사 템플릿을 만들 수 있습니다.

컨트롤러와 뷰 사이의 통신수단입니다.

Basic

  • xmlns:th는 th라는 네임스페이스를 사용합니다.
  • th:text는 Java 객체의 값을 표현합니다
  • th:each는 반복에 사용됩니다
  • th:if/th:unless는 특정 조건이 만족될 때 화면에 출력될 템플릿 조각을 사용합니다

Expression

  • 변수 표현식: ${OGNL}
    • OGNL (Object-Graph Navigation Language) 표현식은 객체의 속성에 값을 가져오
      고 설정하는데 사용됩니다. 이전에 스트럿츠2라는 웹 프레임워크에서 사용되었고 마이
      바티스 등에서 사용 되었습니다.
  • 선택 변수 표현식 : *{OGNL}
    • th:object로 선택한 객체에 한해서 필드에 접근하게 됩니다.
  • 메시지 표현식 : #{코드}
    • 스프링 메시지소스와 연동해서 메시지 코드를 넣으면 해당 메시지가 출력됩니다.
    • 다국어 처리에 용이합니다.
  • 링크 표현식 : @{링크}
    • /로 시작하는 패스는 자동으로 어플리케이션 컨텍스트 네임이 앞에 붙게 됩니다.
profile
always positive

0개의 댓글