Engineering
2. 스프링 웹 개발 기초
2. 스프링 웹 개발 기초 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
스프링 웹 애플리케이션 개발의 기초로서, 정적 콘텐츠 처리, MVC와 템플릿 엔진, API 응답 처리의 세 가지 주요 영역으로 구성되어 있다.
1️⃣ 정적 컨텐츠 (Static Content)
📄 개요
스프링 부트는 정적 리소스를 쉽게 제공하기 위한 내장 기능을 제공한다.
정적 파일은 resources/static 디렉토리에 위치시킨다.
📁 예제 파일
resources/static/hello-static.html
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
▶ 실행
브라우저에서 다음 주소로 접근:
http://localhost:8080/hello-static.html
🧠 동작 원리
스프링 부트는 /static, /public, /resources 등의 경로에서 정적 리소스를 자동으로 서빙한다.
따라서 별도의 컨트롤러 없이도 HTML, CSS, JS 파일을 바로 제공할 수 있다.
2️⃣ MVC와 템플릿 엔진
🧩 MVC란?
MVC (Model-View-Controller)
- Model: 데이터 및 비즈니스 로직 담당
- View: 화면 출력 담당
- Controller: 요청을 받아 처리하고 결과를 Model과 View에 연결
🧭 Controller 코드
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
🪞 View 템플릿 (Thymeleaf)
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
▶ 실행
브라우저 주소:
http://localhost:8080/hello-mvc?name=spring
⚙️ 동작 흐름
- 사용자가
/hello-mvc요청 - 컨트롤러가
name파라미터를 받아 모델에 저장 hello-template.html뷰 파일이 렌더링되며,${name}이 실제 값으로 치환되어 출력됨
3️⃣ API
📤 @ResponseBody 문자 반환
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody를 사용하면 **뷰 리졸버(viewResolver)**를 거치지 않고,- HTTP 응답 본문(Body)에 문자열을 직접 반환한다.
▶ 실행
http://localhost:8080/hello-string?name=spring
🧱 @ResponseBody 객체 반환
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
}
- 객체를 반환할 경우 스프링은 자동으로 JSON 형태로 변환하여 응답한다.
- 즉,
"hello": "spring"형태의 JSON 데이터가 반환됨.
▶ 실행
http://localhost:8080/hello-api?name=spring
⚙️ @ResponseBody 동작 원리
@ResponseBody가 선언된 메서드는 HttpMessageConverter를 통해 변환 처리된다.- 변환 방식은 컨트롤러 반환 타입과 HTTP Accept 헤더 정보를 조합하여 자동 선택된다.
🔧 기본 등록된 변환기
| 타입 | 클래스 |
| --- | --- |
| 문자열 | StringHttpMessageConverter |
| 객체(JSON) | MappingJackson2HttpMessageConverter |
| 바이트 등 기타 | 다양한 HttpMessageConverter 내장 |
🧩 정리 요약
| 구분 | 설명 | 대표 예제 |
| --- | --- | --- |
| 정적 컨텐츠 | 정적 파일 제공 (/static) | HTML, CSS, JS |
| MVC와 템플릿 엔진 | 서버 렌더링 방식 | @Controller, Thymeleaf |
| API | 데이터 반환(JSON 등) | @ResponseBody, HttpMessageConverter |