8월 17일 화요일7 - Spring ㅇ

@_@·2021년 8월 17일
0

Spring

목록 보기
3/6
post-custom-banner

<목차>

ㅇ Handler Mapping
ㅇ ViewResolver (뷰 리졸버)
ㅇ 스프링 웹 MVC
ㅇ 스프링의 핵심 기능들은 내부적으로 다 만들어져 있어
ㅇ 최종 경로
ㅇ 데이터 공유는? Model 모델




ㅇ Handler Mapping


  • 프론트 컨트롤러가 알바생한테 : 포조야 list.do 해줘, insert.do 해줘, delete.do 해줘, update.do해줘 이렇게 요청하겠지
    • 이런 클라이언트의 요청을 '핸들'이라고 해 (운전사 핸들을 좌/우로 틀면 그대로 가듯)
    • 이 요청도 직접 하는 게 아냐. 중간에 또 다른 사람을 거쳐
  • Handler Mapping : 이런 핸들을 연결시켜주는 클래스
    요청을 선택해서 = choose handler해서 알바생한테 연결시켜줘
  • 핸들러매핑도 파란색이야. 스프링이 제공해 줘

ㅇ 핸들러 매핑 어디 있나

  • 톰캣 서버를 실행하면, 콘솔창에 핸들러매핑 검은 글씨(=이 클래스가 동작한다.)
  • 핸들러매핑은 내부적으로 일하는 클래스
    (은행에서 일을 하지만 고객 눈에는 안 보이는 사람들 있듯이)
  • mapped / : 슬러시라는 요청이 오면

    (쭉 오른쪽으로 이동) 알바생 홈콘트롤러의 홈이라는 메서드를 실행하라 라고 해석이 돼
  • 실제 웹 페이지에서 슬러시가 오면 홈이라는 메서드를 처리하게 되어 있어
  • 톰캣 서버가 시~작!하면 이렇게 이미 스탠바이를 하고 있어
    : 슬러시가 오면 홈컨트롤러 클래스의 홈이라는 메소드가 동작이 되어야 한다
  • 그래서 주소 적고 엔터를 빵 하면, 이 /에 의해 home 메소드가 동작이 되는 거야

ㅇ 핸들러 매핑 실행 과정

  • 톰캣 서버 실행 시 스탠바이 중 (핸들러매핑에 의해) -> 엔터 빵 하면 home 메소드 실행 -> 메소드 내부의 것들 실행 되고 (로거로 찍기, 날짜 만들기) -> 모델에 값을 담아서 -> home 이라는 jsp 리턴 -> 뷰에 home.jsp로 넘어가서 -> 헬로월드가 동작하는거야
  • 포조에서 이걸 연결하는 부분이 메소드 위의 @RequestMapping
    누가 오면 어떤 메소드로 갈지 이미 맵핑을 쫙 해둬지고 있어
  • 우리가 프론트컨트롤러랑 핸들러매핑을 직접 만들지는 않지만, 얘들이 뭔지는 알고 있어야 하는 거야

ㅇ 리턴은 어디로? => 프론트 컨트롤러로

  • return home;
  • 이 문자열 home을 프론트 컨트롤러가 받으면, 프론트컨트롤러는 홈이 뭔지 전혀 몰라
  • home은 논리적인 이름
  • 접두사(/WEB-INF/views)와 접미사(jsp)를 붙여 물리적인 경로이름으로 바꿔야 해

    Q. return에 그냥 경로를 주면 되는 거 아닌가요?
    A. 나중에 views라는 폴더 이름이 수정되면 유지보수 어려워져
  • 그래서 접두사와 접미사를 붙이는 역할을 해 줄 클래스가 하나 더 필요 => ViewResolver





ㅇ ViewResolver (뷰 리졸버)


  • 뷰에 경로를 만들어 줌. 논리적 경로를 물리적 경로로 바꿔 줌
  • 접두사와 접미사를 붙여서 경로를 만든 뒤(⑥) 다시 프론트 컨트롤러에게 줘 (⑦)
  • 프런트 컨트롤러 -> 핸들러 매핑 -> 포조 -> 핸들러매핑 -> 프런트 컨트롤러 -> 뷰 리졸버
  • 뷰 리졸버도 스프링이 제공해 줘 (파란색)

ㅇ 뷰 리졸버 위치 : 서블릿-컨텍스트.xml

  • 서블릿-컨텍스트.xml에 들어가면 접두사 prefix와 접미사 suffix 설정되어 있음

  • 이 클래스가 이미 등록이 되어 있어

  • 그래서 소스코드를 수정하는 게 아니라 여기 경로를 바꿔주면 끝나는거야






ㅇ 스프링의 핵심 기능 3가지는 내부적으로 다 만들어져 있어


ㅇ 프론트 컨트롤러, 핸들러 매핑, 뷰 리졸버

  • 겉으로 드러나진 않지만 내부에서 스프링 프레임워크를 동작시키고 있는 핵심
  • 이 3가지가 스프링 내부에 이미 만들어져 있으니 직접 코딩할 필요 x => 얼마나 효율적이야
  • 우리는 포조만 만들면 돼





ㅇ 최종 경로

  • 프론트 컨트롤러가 중심
    • 요청이 들어오면
    • 핸들러 매핑에게 보내서 -> 매핑해 둔 곳으로 가서 -> 포조가 일을 하고 -> 돌려 받아
    • 그걸 뷰 리졸버에게 보내서 접두사 , 접미사 붙인 경로로 돌려 받아
    • 그 경로에 해당하는 뷰로 보내서 JSP한테 포워딩 -> 결과를 돌려 받아서
    • 응답해 줘





ㅇ 데이터 공유는? Model 모델

  • 기존 Servlet과 JSP
    • 특정 메모리에다가 값을 셋어트리뷰트로 담고 -> RequestDispacher로 포워딩 후 -> JSP에서 다시 겟어트리뷰트로 꺼내서 뷰를 만들었어
    • 리퀘스트 바인딩으로 값을 계속 공유해야 해
  • 스프링에서는 모델이 그런 역할을 해
  • 스프링에서 모델도 제공해 줘 (파란색)

=> 그래서 우리는 포조와 JSP뷰단만 만들면 끝

  • 샘플코드도 포조와 뷰만 있어
  • DB 연결할 모델 만들면 MVC 끝이야
profile
STEP BY STEP
post-custom-banner

0개의 댓글