[Spring Boot] 2. 스프링 웹 개발 기초

smjan27·2021년 5월 11일
0

Spring Boot

목록 보기
2/9
post-thumbnail

목차


정적 컨텐츠

  • 공식 문서
  • 파일을 그대로 웹 브라우저에 전달
  • resources/statichello-static.html 생성
  • 빌드 및 서버 실행 (localhost:8080/hello-static.html)
  • 정적 컨텐츠의 간단한 작동 원리


MVC와 템플릿 엔진

MVC: Model, View, Controller

  • Model: 데이터 디자인. 화면에서 필요한 것들을 담아 화면에 넘겨줌
  • View: 실제로 렌더링되어 보이는 페이지
    • resources/template/hello-template.html
  • Controller: 사용자의 요청을 받고 응답을 주는 로직. 비즈니스 로직, 서버 관련
    • java/hello.hellospring/controller/HelloController.javahello-mvc 추가
    • 매개변수 정보: Ctrl + P (IntelliJ 단축키 모음)
    • 실행: localhost:8080/hello-mvc?name=spring -> name으로 spring 전달

작동 원리

Spring MVC 패턴 보충자료 1
Spring MVC 패턴 보충자료 2

  • 브라우저에서 Spring MVC 웹 어플리케이션에 요청을 보냄
  • Controller는 사용자의 요청을 서비스하기 위해 Model을 호출
  • Model은 데이터베이스에서 가져온 데이터를 반환
  • Controller는 Model이 반환한 결과를 View에 반영
  • 사용자는 서버에서 응답한 결과를 볼 수 있음
    사진 출처: 부스트코스
  • Front Controller: 컨트롤러 중에서도, 맨 앞단에서 사용자의 요청을 받는 컨트롤러
    • DispatcherServlet 객체가 이 역할을 한다.
    • 본격적으로 로직에 들어오기 전에 요청에 대한 선처리 작업 수행
  • Front Controller는 요청을 Handler Mapping을 통해 해당 요청을 어떤 핸들러가 처리해야 하는지를 매핑한다.
    • HandlerMapping 객체가 핸들러 매핑에 대한 정보를 담고 있다.
  • 이렇게 매핑된 핸들러를 실제로 실행하는 역할은 Handler Adapter가 담당한다.
    • HandlerAdapter 객체가 이 역할을 한다.
  • Controller는 해당 요청을 처리하는 로직을 담고있다.
    • 보통 요청의 종류 혹은 로직의 분류에 따라 내부적으로 Service 단위로 나누어 모듈화한다.
    • 각 서비스에서는 데이터베이스에 접근할 수 있는 Repository 객체를 이용하여 데이터에 접근할 수 있다.
  • Controller는 서비스에서의 로직 처리 후, 결과를 View Resolver를 거쳐 View 파일을 렌더링하여 내보낸다.
    • ViewResolver 객체가 이 역할을 한다.

API

JSON(key-value 쌍으로 이루어진 데이터 구조 포맷)으로 클라이언트에 전달

  • java/hello.hellospring/controller/HelloController.javahello-string 추가
  • 실행: localhost:8080/hello-string?name=spring! -> name으로 spring! 전달
  • @ResponseBody를 사용하면 viewResolver를 사용하지 않고, HTTP의 BODY에 문자 내용을 직접 반환 (HTML 태그를 말하는 것이 아님)

본격적인 api 실습

  • java/hello.hellospring/controller/HelloController.javahello-api 추가
  • Alt+Insert -> Getter/Setter 코드 자동 생성
  • Ctrl+Shift+Enter -> 코드 자동 완성
  • 실행: localhost:8080/hello-api?name=spring! -> {"name":"spring!"}
    • JSON 방식: key는 name, value는 spring!
  • @ResponseBody를 사용하고 객체를 반환하면 객체가 JSON으로 변환됨

동작 원리

@ResponseBody를 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신 HttpMessageConverter가 동작
  • 기본 문자처리: StringHttpMessageConverter가 기본으로 동작
  • 기본 객체처리: MappingJackson2HttpMessageConverter가 기본으로 동작
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

참고: 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다. (자세한 내용은 스프링 MVC 강의 참조)

profile
No Stress🎈 Be Happy✨

0개의 댓글