인프런 - 라이프타임 커리어 플랫폼
프로그래밍, 인공지능, 데이터, 마케팅, 디자인등 입문부터 실전까지 업계 최고 선배들에게 배울 수 있는 곳.
www.inflearn.com
인프런 사이트의 김영한님의 강의를 보면서 작성한 글입니다.
Spring Boot를 사용하면 웹 요청을 처리하고 사용자에게 콘텐츠를 보여주는 여러 가지 방식을 활용할 수 있습니다. 이번 글에서는 가장 대표적인 세 가지 방법인 정적 콘텐츠, MVC와 템플릿 엔진, 그리고 API 방식에 대해 알아보겠습니다.
### 📜 시작하기 전에: 웹 개발 기술의 변천사
과거부터 현재까지 웹 페이지를 동적으로 만드는 기술은 계속 발전해왔습니다.
- JSP (JavaServer Pages): HTML 문서 안에 Java 코드를 넣어 동적인 웹 페이지를 만들던 기술입니다.
- PHP: JSP와 유사하지만, 서버 측 스크립트 언어로 웹 개발 시장에서 오랫동안 널리 사용되었습니다.
- ASP (Active Server Pages): 마이크로소프트사에서 개발한 기술로, JSP/PHP와 비슷한 역할을 합니다.
이러한 기술들은 서버에서 프로그래밍을 통해 HTML을 동적으로 생성한다는 공통점이 있습니다. Spring Boot는 이 개념을 더욱 발전시켜 세련된 방식으로 제공합니다.
### 방식 1. 정적 콘텐츠 🖼️
정적 콘텐츠는 서버에서 별도의 가공 없이, 있는 파일 그대로를 클라이언트(웹 브라우저)에게 전달하는 방식입니다. 주로 변경이 없는 HTML, CSS, JavaScript, 이미지 파일 등을 서빙할 때 사용합니다.
#### 동작 원리
- src/main/resources/static 폴더에 mystatic.html 같은 파일을 생성합니다.
- 웹 브라우저에서 http://localhost:8080/mystatic.html로 접속합니다.
- Spring은 요청을 받고, 먼저 이 경로에 매핑된 컨트롤러가 있는지 확인합니다.
- 해당하는 컨트롤러가 없다면, resources/static 폴더에서 mystatic.html 파일이 있는지 찾습니다.
- 파일이 존재하면 그 내용을 그대로 브라우저에 반환하여 보여줍니다.
### 방식 2. MVC와 템플릿 엔진 ⚙️

**MVC(Model-View-Controller)**는 서버에서 프로그래밍을 통해 HTML을 동적으로 변경하여 사용자에게 보여주는 방식입니다. 사용자의 요청에 따라 다른 내용이 담긴 페이지를 보여줄 수 있습니다.
#### Controller 코드 예시
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
위 코드는 hello-mvc라는 경로로 요청이 들어올 때, name이라는 파라미터를 받아 모델에 담은 후, hello-template.html이라는 뷰를 렌더링하라는 의미입니다.
⚠️ 잠깐! @RequestParam과 파라미터 @RequestParam("name")은 외부에서 name이라는 키로 넘어온 값을 String name 변수에 저장하라는 뜻입니다. 만약 이 파라미터 없이 http://localhost:8080/hello-mvc로만 접속하면, 필수 값인 name이 없기 때문에 오류가 발생합니다.
이때 웹 브라우저 주소창에 GET방식을 사용하여 ?를 통해 파라미터를 전달했습니다. http://localhost:8080/hello-mvc?name=spring!
이렇게 요청하면, hello-template.html 파일이 name 값으로 "spring!"을 전달받아 동적인 페이지를 완성하게 됩니다.
#### GET 방식 vs POST 방식
웹 요청에는 여러 방식이 있지만 가장 대표적인 것은 GET과 POST입니다.
| 구분 | GET | POST |
| 데이터 전달 위치 | URL 주소 뒤에 붙여서 전달 (e.g., ?name=spring) | HTTP Body에 담아서 전달 (URL에 보이지 않음) |
| 주된 용도 | 데이터 조회(Read) | 데이터 생성 또는 변경(Create, Update) |
| 보안 | URL에 데이터가 노출되어 보안에 취약 | GET 방식에 비해 상대적으로 안전 |
### 방식 3. API (Application Programming Interface) 🤖

API 방식은 웹 페이지(HTML)를 반환하는 것이 아니라, **데이터 자체(주로 JSON 형식)**를 반환하는 방식입니다. 이렇게 전달된 데이터는 웹 브라우저의 JavaScript나 다른 서버에서 사용됩니다.
#### 문자열 반환 API
@ResponseBody 어노테이션을 사용하면 뷰를 거치지 않고, 반환하는 문자열을 HTTP 응답 Body에 직접 넣어 전달합니다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // 이 문자열이 그대로 화면에 출력됨
}
http://localhost:8080/hello-string?name=spring으로 접속하면, 웹 페이지 소스에는 hello spring이라는 텍스트만 존재하게 됩니다.
#### JSON 데이터 반환 API
실무에서는 문자열보다 객체를 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;
// Getter, Setter ...
}
http://localhost:8080/hello-api?name=spring으로 접속하면 아래와 같은 JSON 데이터가 화면에 나타납니다.

#### @ResponseBody의 동작 원리
@ResponseBody는 반환 값의 종류에 따라 다르게 동작합니다.
- 반환 값이 문자열(String)이면: StringHttpMessageConverter가 동작하여 데이터를 텍스트 형식으로 그대로 전달합니다.
- 반환 값이 객체(Object)이면: MappingJackson2HttpMessageConverter가 동작하여 객체를 JSON 형식의 문자열로 변환한 후 전달합니다.
이러한 변환 과정 덕분에 우리는 복잡한 설정 없이 객체를 반환하는 것만으로 손쉽게 JSON API를 만들 수 있습니다.
사진 출처:
https://velog.io/@geon-2/Spring-ResponseBody%EC%9D%98-%EC%97%AD%ED%95%A0
'개발 공부 > 백엔드' 카테고리의 다른 글
| 스프링 부트 회원 관리 예제 만들기: 설계부터 테스트, DI까지 (2) | 2025.09.16 |
|---|---|
| 백엔드 공부 중 (1. ASP, 2. JSON) (0) | 2025.09.14 |
| 스프링 부트: 정적 콘텐츠와 동적 콘텐츠 처리 방식 (0) | 2025.09.13 |
| 스프링 부트 입문: 첫 프로젝트 시작하기 (김영한님 강의 정리) (1) | 2025.09.13 |
| 백엔드의 3가지 핵심 구성 요소: 웹 서버, WAS, 데이터베이스 (0) | 2025.09.03 |