항해99/스프링입문

03-1 Controller,Repository,Service

숲별 2022. 10. 7. 17:16
728x90
  • Controller 의 장점
      1. HTTP request, response 처리를 위해 매번 작성해 줘야하는 중복코드들 생략 가능하다.
      2. API 이름마다 파일을 만들 필요 없음
  • Controller Code
    • API 마다 파일을 만들 필요 없음
      • 보통 하나의 Contoller 에 모든 API 를 넣지는 않음
      • 유사한 성격의 API 를 하나의 Controller 로 관리
    • 함수 이름도 내 마음대로 설정 가능~!!! (단, 클래스 내의 중복함수명 불가)
  •  

Controller 가 자동으로 해주는 일

1. API Request 의 파라미터 값에서 검색어 추출 -> query 변수

5. API Response 보내기

5.1) response 의 header 설정

5.2) response 의 body 설정

 

 

 

  1. H2 웹콘솔 설정
    • src > main > resources > application.properties
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:springcoredb

 

 

 

스프링 MVC?

  • MVC (Model - View - Controller) 디자인 패턴
  • Server 에서 HTML 을 내려 주는 경우
    1. 정적 (static) 웹 페이지
      1. Controller
        1. Client 의 요청을 Model 로 받아 처리
        2. Client 에게 View (정적 웹 페이지, HTML) 를 내려줌
    2. 동적 (dynamic) 웹 페이지
      1. Controller
        1. Client 의 요청을 Model 로 받아 처리
        2. Template engine 에게 View, Model 전달
          1. View: 동적 HTML 파일
          2. Model: View 에 적용할 정보들
        3. Template engine
          1. View  Model 을 적용 → 동적 웹페이지 생성
            1. 예) 로그인 성공 시, "로그인된 사용자의 id" 를 페이지에 추가
            2. Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP 이용은 추천하지 않고 있음)
        4. Client 에게 View (동적 웹 페이지, HTML) 를 내려줌

 

 

 

  • 스프링 MVC?
    • MVC (Model - View - Controller) 디자인 패턴
    • 디자인 패턴 : 어플리케이션을 어떻게 설계하고 개발해 나갈지에 대한 방법론
    • Server 에서 HTML 을 내려 주는 경우
  • 동적 웹페이지는 사용자가 요청한 값에 따라서 데이터가 바뀌게 할 수 있다.
  • 컨트롤러가 먼저 클라이언트의 요청을 Model, 데이터를 담는 상자

template engine에 전달. templat, view 화면에서 자바에서 다룬 데이터를 어떻게 보여줄지 연결고리

자바에서 생성, 조회된 이런 데이터를 어떻게 사용자가 사용하는 브라우저에 환경에 전달해줄수 있을까 고민해서 나온게 템플릿 엔진

템플릿 엔진에게 뷰view: 동적인 HTML 파일. (HTML내부 내용이 바뀔 수 있다는 뜻)

 

Model의 경우 실제 바뀌게 될 데이터를 담고 있는 상자

 

view에 Model을 적용

=>뷰라는 템플릿에서 값만 수정해서 넣어주는 게 모델에 적용한다는 말

 

로그인한 회원의 정보가 그 페이지가 추가가 되는 것.

 

Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP(전통적으로 활용되던) 이용은 추천하지 않고 있음)

 

Client 에게 View (동적 웹 페이지, HTML) 를 내려줌

클라이언트 데이터가 합체가 된 것 

템플릿화면과 내가 호출한 데이터가 합쳐진게 뷰

사용자에게 내려주면 우린 그 화면을 보는 것.

 

...강의...뭐라는 거야...?

 

  • HTTP 메시지 이해
    • Client 와 Server 간 Request, Response 는 HTTP 메시지 규약을 따름
    • HTTP 메시지는 웹 서비스 개발자(백엔드, 프론트 개발자)에게 매우 중요한 내용!!
    • 스프링 MVC 이해를 위한 필수 내용만 학습
    [HTTP(HyperText Transfer Protocol) 메시지]
    • (1) 메시지 구조
  1. 시작줄 (start line)
    1. Response 에선 '상태줄 (status line)' 이라고 부름
  2. 헤더 (headers)
  3. 본문 (body)

템플릿엔진에다가 뷰를 전달하는 방식

템플릿 엔진은 동적으로 페이지 구성하기 위해서 자바데이터를 어떻게 필드에 집어넣으면 될지

thymeleaf에서 기본적으로 classpath와 suffix를 지정해서 우리가 따로 명시하지 않아도 쟤를 찾아감

thymeleaf라는 template engine에서 templates에 .html이라는 파일이 있기를 기대함

 

ResponseBody 응답, 본문을 html형식으로 직접 작성 가능

 

model이라는 데이터 그릇에 visit이라는 값이 ${}안 값과 같아야 함. 

addAttribute 그변수에다가 이 데이터를 갖다 넣어줘.

결론적으로 이 데이터가 반영된 hello-visit이 라는 페이지 로드 됨.

 

 

@RestController

= @Controller + @ResponseBody

controller 사용자로부터 어느경로로 내가 API 요청을 받을지

Json 형태로 값을 반환받기 위함

응답에 대한 본문값을 받고자 한다.

 

 

 

controller클래스에 @RestController 달아주면

이 클래스는 controller역할을 하면서 응답값으로 JSON값을 받아와야겠다.

라고 스프링에게 요구

response값까지 스프링이 반환해주는 JSON값을 활용할수있게 됨.

 

@Controller 는 스프링 서버 개발자 입장에서는 시작점과 끝점으로 보이지만, 사실 스프링이 뒤에서 많은 부분을 보이지 않게 처리해 주고 있습니다.

 

 

 

MVC

  1. Client → DispatcherServlet(알맞은 곳으로 보내주는 역할)
    1. 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
  2. DispatcherServlet → Controller
    1. API 를 처리해 줄 Controller 를 찾아 요청을 전달
    2. Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
    3. 함수 이름을 내 마음대로 설정 가능했던 이유!!
    4. Controller 에서 요청하는 Request 의 정보 ('Model') 전달
  3. Controller → DispathcerServlet
    1. Controller 가 Client 으로 받은 API 요청을 처리
    2. 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달
  4. DispatcherServlet → Client
    1. ViewResolver 통해 View 에 Model 을 적용
    2. View 를 Client 에게 응답으로 전달

 

 

 

학습자료 https://teamsparta.notion.site/03-Controller-Repository-Service-9eaec2062723451cb8f252debd44abc4#d6956a20c10b4ab7a452b3ae322fa5d1