스프링 입문 - 섹션2. 스프링 웹 개발 기초

태온·2021년 7월 22일
0
post-thumbnail

2. 스프링 웹 개발 기초

1. 정적 컨텐츠

  • 실시간으로 변경할 필요가 없는 데이터, 변화가 없는 데이터이다.
  • 어떤 접속자에게든 동일한 모습으로 반환한다.

인텔리제이에서 resources/static/hello-static.html 을 만들어 다음과 같이 코드를 넣어주고

스프링을 실행하고 웹 브라우저에 http://localhost:8080/hello-static.html 치면 body에 있는 글이 아래와 같이 그대로 띄워진다!

즉, 정적 컨텐츠는 말 그대로 변화가 없는, 넣는 그대로 화면에 띄워진다.
정적 컨텐츠의 원리는 다음과 같다.

웹 브라우저에서 hello-static.html을 치면 내장 톰캣 서버가 이 주소를 받아 스프링에게 넘겨준다. 스프링은 먼저 컨트롤러쪽에서 hello-static가 있는지 찾아본다. 그런데 hello-static 관련 컨트롤러는 없기 때문에 resources 안에있는 static을 찾아 화면에 띄워주게 된다.


2. MVC와 템플릿 엔진 🙂

MVC : Model, View, Controller의 약자이며 소프트웨어 디자인 패턴의 하나로, 애플리케이션의 기능을 구분하고 정돈된 개발이 가능하다.

HelloController에 hello-mvc라는 Model 을 하나 만들어준다.

templates에 hello-template.html라는 View를 만들어준다.

여기서 잠깐!!💡
hello! empty 이 부분은 뭐지? 하는 사람이 있을 것입니다!
웹브라우저에서 서버 없이 저 경로를 들어가게되면 html 화면(여기서는 hello! empty 라는 화면을 볼 수 있습니다)을 볼 수 있고 마크업 하시는 분들이 적어놓고 볼 때 쓴다고 합니다. 딱히 없어도 되는 코드입니다.

http://localhost:8080/hello-mvc 스프링을 실행하게 되면 Error Page를 띄우며 에러가 발생할 것이다. 스프링 로그를 살펴보면 다음과 같이 뜬다.

  • 필수 요청 매개변수인 name에 아무 것도 들어가지 않아서 발생한 에러다.

이를 해결하기 위해 주소창에 http://localhost:8080/hello-mvc?name=SpringBoot 를 치게되면 다음과 같이 뜬다.

여기서 hello-mvc 뒤에 ?name=Springboot는 name에 원하는 값을 넣어주면 된다.

즉, ?name=원하는값 을 넣어주면 된다.(ex. ?name=아무거나 ⇒ hello 아무거나 라고 띄워짐)

  • 요청 파라미터를 value = "name" 으로 해주고 String 으로 name으로 해줬기 때문에 String값을 넣어주게 되면 오른쪽 템플릿 엔진으로 name이 자신이 넣은 값으로 치환하게 된다.

작동 원리를 간단하게 표현하자면, 웹브라우저에 hello-mvc를 요청을 보내면 톰캣 서버가 hello-mvc가 왔다는 것을 스프링에 알려준다. 스프링은 helloController에 hello-mvc가 mapping이 되있는 것을 알아내 hello-template을 리턴해줍니다. viewResolver가 리턴된 hello-template의 view를 찾아주고 템플릿에 연결시켜주고 렌더링하여 HTML을 변환 후 웹브라우저에 보낸다.


3. API

요즘은 JSON 방식으로 반환 하는 것이 디폴트 값이다.

JSON이란? 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 데이터 교환 방식이며,
Key-Value로 이루어져 있다.

  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않는다.
    대신에 HTTP의 Body에 문자 내용을 직접 반환(HTML body tag를 말하는 것이 아님)
    즉, "Body부에 직접 내용을 넣어 주겠다!"라는 뜻이다.

실행 : http://localhost:8080/hello-api?name=spring

ResponseBody 어노테이션을 해줬기 때문에 View 없이 바로 name=spring으로 치면 위와 같은 Json 형식으로 결과를 나타낸다.

@ResponseBody가 오면 hello라는 객체를 반환하여 HttpMessageconverter가 동작을 하게 된다.

단순 문자라면 StringConverer가 동작하고, 객체라면 JsonConverter가 동작합니다. 여기서는 객체이기 때문에 JsonConverter가 동작이 되어 {name:spring} Json 방식으로 바꿔 웹브라우저에 보내준다.

📖 정리

  • @ResponseBody 를 사용

    • HTTP의 BODY에 문자 내용을 직접 반환

    • viewResolver 대신에 HttpMessageConverter 가 동작 (View가 필요가 없음)

    • 기본 문자처리: StringHttpMessageConverter

    • 기본 객체처리: MappingJackson2HttpMessageConverter

      (Gson도 있지만 스프링은 기본적으로 Jackson이 탑재가 되있음)

    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음.

📘 참고

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

profile
코딩도시락(배워서 남 주자)

0개의 댓글