[스프링 입문] 2. 스프링 웹 개발 기초

subin·2022년 3월 25일
0

🌺Spring

목록 보기
3/12

✍ 스프링 웹 개발의 종류

  • 정적 컨텐츠 : 파일을 웹 브라우저에 그대로 내려주는 것
  • MVC와 템플릿 엔진 : HTML + 동적, 뷰를 템플릿 엔진으로 렌더링해서 런더링된 HTML을 반환
  • API : JSON 데이터 구조 포맷으로 Client한테 데이터 전달, 객체 반환

✍ 정적 컨텐츠

⌨만들어보기
controller

view

📊 동작 과정

🌱
웹 브라우저에서 localhost:8080/hello-static.html을 입력하면 가장 먼저 내장 톰켓 서버가 요청을 받는다. 그 다음에 스프링 컨테이너에서 /hello-static에 해당하는 컨트롤러를 찾는다. 이유는 controller가 우선순위를 가지기 때문이다. 컨트롤러에 해당 매핑이 존재하지 않는다면 그다음에 resources 안에서 찾는다. resources:static/hello-static.html이 존재하므로 반환된다.

📑 참고 사항

start.spring.io

✍ MVC와 템플릿 엔진

MVC : Model, View, Controller 관심사, 역할과 책임을 분리해 코드를 작성해야 한다. Model과 Controller는 비즈니스 로직과 관련있거나 내부적 처리에 포커스를 해야하고, view는 화면을 그리는데에 포커스를 주어야한다.

⌨만들어보기
controller

🌱
@RequestParam은 외부에서 파라미터를 받을 때 사용한다. url를 작성할 때는 'localhost:8080/hello-mvc?name=spring!' 처럼 파라미터까지 함께 작성해야 한다. 그러면 name 변수에 spring!이 대입되고, 모델로 감싸져서 return 된다.

view

🌱
여기서의 ${name}에 spring! 값이 대입되는 것이다.

📊 동작 과정

🌱
웹 브라우저에서 localhost:8080/hello-mvc를 입력하면 가장 먼저 내장 톰켓 서버가 이를 받는다. 그리고 스프링 컨테이너에서 hello-mvc를 찾는다. helloController에 hello-mvc가 mapping되어 있으므로 해당 메서드를 호출하고, 파라미터를 model에 담는다. hello-template를 return 하면 viewResolver가 뷰를 찾아주고 템플릿 엔진에 연결해준다. 템플릿 엔진이 렌더링을 해서 변환이 된 HTML을 웹 브라우저에 반환해 준다.

✍ API

@ResponseBody 문자 반환

⌨만들어보기
controller

🌱
@ResponseBody : http 바디부에 이 데이터를 직접 넣어주겠다는 의미이다.
url에 작성한 파라미터가 name 변수에 들어가고 "hello " 문자열과 합쳐져서 요청한 client에 그대로 반환된다.

  • @ResponseBody를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않음
  • 대신에 HTTP의 Body에 문자 내용을 직접 반환

@ResponseBody 객체 반환

⌨만들어보기
controller

🌱
@ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨

📊 @ResponseBody 동작 과정

🌱
웹 브라우저에서 localhost:8080/hello-api를 입력하면 먼저 내장 톰켓 서버가 받게되고, 스프링 컨테이너에서 /hello-api를 찾는다. 그런데 @ResponseBody가 있기 때문에 만약 반환할 값이 '문자'라면 HTTP 응답에 데이터를 그대로 넘기고 '객체'라면 JSON 방식으로 데이터를 만들어서 HTTP 응답에 반환한다.

HttpMessageConverter가 동작하는데, 문자인 경우에는 StringConverter가 동작하고, 객체인 경우에는 JsonConverter가 동작한다. 객체인 경에는 JSON으로 변환하고 요청한 웹 브라우저나 서버에게 보낸다.

✨ 정리

@ResponseBody를 사용

  • HTTP Body에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter가 동작
  • 기본 문자처리 : StringHttpMessageConverter가 동작
  • 기본 객체처리 : MappingJackson2HttpMessageConverter가 동작
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다.
profile
한번뿐인 인생! 하고싶은게 너무 많은 뉴비의 deep-dive 현장

0개의 댓글

관련 채용 정보