📗 목차
1. 정적 컨텐츠
정적 컨텐츠
- 서버에서 별도의 처리 없이 그대로 클라이언트에게 전달되는 파일
- ex. HTML, CSS, JavaScript, 이미지(jpg, png, gif 등)
스프링부트에서는 정적 컨텐츠
- src/main/resources/static 디렉토리 아래에 위치한 파일들을 정적 컨텐츠로 인식하고, 자동으로 서빙한다.
- http://localhost:8080/{파일명} 으로 접근 가능하다.
[실습]
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>static content</title>
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
2. MVC와 템플릿 엔진
MVC (Model-View-Controller)
- 애플리케이션을 세 가지 책임으로 나누는 아키텍처 패턴
- Model: 애플리케이션의 데이터와 비즈니스 로직 처리 (예: 서비스, 도메인 객체)
- View: 사용자에게 보여지는 화면 처리 (예: HTML, Thymeleaf)
- Controller: 요청을 받고 Model을 호출한 후 View에 데이터를 넘기는 중간 조정자 역할
템플릿 엔진
- 서버에서 데이터를 조합해 HTML 등의 정적인 문서로 출력하기 위한 도구
- View 영역에서 사용된다.
- 역할
- 동적인 HTML 생성: 서버에서 데이터를 전달받아 HTML에 삽입
- 템플릿 문법 제공: 반복문, 조건문, 변수 출력 등 HTML 내에서 제어 가능
- 종류: Thymeleaf, JSP, Freemarker, Mustache 등
[실습]
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
<!-- resources/templates/hello-template.html -->
<html xmlns:th="http://www.thymeleaf.org" lang="ko">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
3. API
@ResponseBody
- HTTP 응답의 body 영역에 직접 데이터를 반환
- 뷰(View)를 거치지 않고 문자열, 객체 등을 직접 HTTP 응답으로 반환할 때 사용한다.
구분 | 반환 방식 | 결과 형식 |
@ResponseBody + 문자열 | 문자열 그대로 반환 | text/plain |
@ResponseBody + 객체 | 객체 → JSON 변환 후 반환 | application/json |
[실습]
@ResponseBody 문자 반환
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "Hello " + name;
}
@ResponseBody 객체 반환 - JSON 반환
@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;
}
}
4. [퀴즈]
1. 스프링 웹 개발의 세 가지 주요 방식인 정적 컨텐츠, MVC, API는 각각 어떤 결과를 주로 반환할까요?
- 정적 컨텐츠: 처리된 HTML, MVC: 가공되지 않은 파일, API: 데이터
- 정적 컨텐츠: 가공되지 않은 파일, MVC: 처리된 HTML, API: 데이터
- 정적 컨텐츠: 데이터, MVC: 가공되지 않은 파일, API: 처리된 HTML
- 정적 컨텐츠: 처리된 HTML, MVC: 데이터, API: 가공되지 않은 파일
2. 정적 컨텐츠 방식으로 파일을 전달할 때 서버에서 어떤 처리를 거치게 될까요?
- 템플릿 엔진으로 내용을 수정해요.
- 데이터를 JSON 형식으로 변환해요.
- 특별한 처리 없이 파일을 그대로 전달해요.
- 컨트롤러에서 비즈니스 로직을 수행해요.
3. MVC 패턴에서 Controller와 View를 분리하는 주된 이유는 무엇일까요?
- 파일 크기를 줄이기 위해
- 데이터베이스 연결을 빠르게 하기 위해
- 관심사를 분리하고 코드의 유지보수성을 높이기 위해
- 정적 컨텐츠 전달 속도를 높이기 위해
4. 웹 개발에서 API 방식(특히 객체 반환)은 주로 어떤 목적을 위해 사용될까요?
- 서버에서 미리 완성된 HTML 페이지를 보여주기 위해
- 웹 브라우저가 요청한 파일을 그대로 전달하기 위해
- 클라이언트(앱, 웹)나 다른 서버에 구조화된 데이터만 전달하기 위해
- 템플릿 엔진으로 HTML 내용을 동적으로 생성하기 위해
5. 스프링에서 컨트롤러 메서드가 객체를 반환하고 @ResponseBody 어노테이션이 붙어있을 때, 객체를 클라이언트에 전달 가능한 형태로 변환하는 역할을 하는 것은 무엇일까요?
- 뷰 리졸버 (View Resolver)
- 템플릿 엔진 (Template Engine)
- HTTP 메시지 컨버터 (HTTP Message Converter)
- 모델 (Model)
'Spring > 강의' 카테고리의 다른 글
[📙 숙련 Spring] 1-2. Spring Bean 등록 (0) | 2025.05.15 |
---|---|
[📙 숙련 Spring] 1-1. 객체 지향과 Spring 핵심 개념 (0) | 2025.05.15 |
[📗 스프링 입문] 1. 프로젝트 환경 설정 (1) | 2025.05.07 |
[📗 스프링 입문] 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0) | 2025.05.07 |
[📕 기초 Spring] 6-7. 메모장 프로젝트 - ver4 (데이터베이스 접근 기술 적용) (0) | 2025.05.07 |