Spring

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

Younghun 2022. 9. 30. 17:18

정적 컨텐츠

스프링부트는 정적 컨텐츠 기능을 자동으로 제공한다.

강의에서는 2.3버전의 문서를 찾아봤지만 나는 2.7.4버전을 사용하므로 거기에 맞춰서 문서를 찾아보았다.

https://docs.spring.io/spring-boot/docs/2.7.4/reference/html/web.html#web.servlet.spring-mvc.static-content

 

Web

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

 

 

static 폴더에 hello-static.html을 만들어서 실제로 동작하는지 확인했다.

 

 

위 파일을 만든 후 다시 서버를 실행시킨다. 그리고 localhost:8080/hello-static.html로 접속하면 잘 작동하는 걸 볼 수 있다.

 

다음은 정적 컨텐츠 동작 과정을 그림으로 표현한 것이다.

 

 

MVC와 템플릿 엔진

MVC란? Model, View, Controller

과거에는 JSP라는 것을 이용해서 View에서 로직도 만들고 DB에도 접근했다고 한다. 그러나 요즘 View는 말 그대로 보여주는 것에만 집중하고 Controller를 사용해서 로직을 짠다. 간단한 예시를 하나 만들어봤다.

기존에 만든 HelloController에 helloMvc 클래스를 새로 만들었다. 이번엔 "name"이라는 파라미터를 받아오게 했다.

 

 

그리고 해당하는 템플릿 html도 만들었다.

신기한 점은 서버를 돌릴 때 hello! empty는 출력되지 않는다는 것이다. 로컬에서 파일을 직접 열 때만 보이고 서버를 돌리면 p태그 안의 th: ~~ 가 실행된다고 한다.

 

 

서버를 실행시켜서 확인해보았다.

 

 

이상하게 에러가 뜬다! 오류 메세지를 확인해보자.

name 파라미터가 없어서 오류가 뜬 것이다. url에 ?name=younghun을 추가해주면 해결된다.

 

 

다음 이미지는 동작원리를 요약한 것이다.

 

 

API

이번에는 API 형식으로 컨트롤러를 만들어보았다. @ResponseBody를 이용해 html을 이용하지 않고 String을 바로 전달한다.

소스코드를 보면 html태그 없이 String이 바로 입력된 것을 볼 수 있다.

 

 

이번에는 객체를 반환하는 API를 만들어보았다.

 

 

그리고 서버를 실행시켜서 확인해보면 JSON형태로 데이터가 보내졌음을 알 수 있다.

스프링부트에서는 디폴트로 객체를 JSON형태로 바꿔서 보내준다. 다음은 동작 과정을 보여주는 이미지이다.

 

 

섹션 2 마무리

섹션 2에서는 MVC패턴에 대해 정말로 맛보기만 해보았다. 구체적인 내용은 추후에 하나하나 공부해야겠지만

입문용으로 큰 그림을 잡기에는 좋았다.

 

다음 섹션에서는 백엔드 개발의 기본인 회원관리 예제를 배울 예정이다.

이제 본격적으로 백엔드 공부를 시작하는 것 같다.