Spring 웹 개발 기초
이번 포스트에서는 정적 컨텐츠, MVC / Template 엔진, API에 대하여 깊이 있게 다룬다.
(본 포스트는 김영한 강사의 [Spring 입문] 강의를 듣고 혼자 정리한 블로그이다.)
스프링 웹 개발 기초
정적 컨텐츠
정의 : 웹 페이지에서는 변경되지 않는 파일들을 말한다.
- 예시 ) HTML, CSS , JS, 이미지 파일 (png, jpg 등)
- 스프링에서의 정적 콘텐츠는
src/main/resources/static/에 위치해 있다.
동작 방식
(static폴더에 Hello.html 이라는 html 정적 컨텐츠가 있다고 가정한다.)
- 사용자가
/hello.html을 요청한다. - Controller 매핑을 먼저 확인한다. 만약 없다면,
resource/static/hello.html파일을 찾아서 그대로 브라우저에 전달한다.
만약 같은 경로에 Controller Mapping이 존재한다면?
- 컨트롤러가 먼저 실행되고, 정적 컨텐츠는 무시된다.
- Controller가 정적 컨텐츠 보다 우선이다.
요약
- 정적 컨텐츠는 서버의 로직 없이 직접 응답하는 파일
static/폴더에 두기만 하면 브라우저 요청 시 자동으로 전달된다.- 초기 로딩 화면, 이미지, 스타일 시트, 자바스크립트 등에서 많이 사용된다.
MVC & Template 엔진
MVC
MVC = Model - View - Controller
Spring MVC는 이 구조를 따르는 웹 프레임 워크이다.
각 구성요소의 역할 분담은 다음과 같다.
| 구성 요소 | 역할 |
|---|---|
| Model | 데이터/비즈니스 로직 담당 (예: 회원 정보, 상품 목록) |
| View | 사용자에게 보여지는 화면 (HTML, Thymeleaf 등) |
| Controller | 요청 처리 및 Model → View 전달 |
동작 흐름
- 사용자가
/hello를 요청한다. - Controller 가 요청을 받는다.
- Model에 데이터를 담는다.
- View의 이름을 return 한다.
- Spring이
resources/templates/hello.html을 찾아서 렌더링을 수행한다. - 완성된 HTML을 다시 웹 브라우저에게 전달한다.
Template 엔진
템플릿 엔진은 서버에서 데이터를 HTML에 동적으로 삽입하는 기술이다.
- 대표적인 템플릿 엔진 : Thymeleaf, JSP, Freemarker, Mustache
- 사용하는 이유: 정적 HTML은 내용이 고정되어 있어서 사용자마다 다르게 보여줄 수 없다.
- 하지만, 템플릿 엔진을 사용하면 서버 데이터를 HTML에 삽입할 수 있다.
요약 :
사용자의 요청을 받고 응답 화면을 만드는 전체 흐름에서
Spring MVC는 구조를 잡고, 템플릿 엔진은 화면을 만드는 도구 역할을 수행한다.
API
API = Application Programming Interface
- 프로그램끼리 통신하거나 데이터를 주고 받을 수 있게 해주는 규약
- 서버와 클라이언트가 약속된 방식으로 데이터를 주고받는 통로
동작 방식
- 서버에서 객체를 보내는 코드 예시
@RestController
public class UserController {
@GetMapping("/api/user")
public User getUser() {
return new User("홍길동", 25);
}
}
-
User 객체는 아래와 같이 생겼다고 가정함.
public class User { private String name; private int age; // 생성자, getter, setter 생략 }
Spring이 받는 방식 : JSON
-
Spring이 자동으로 JSON으로 바꿔준다.
{ "name": "홍길동", "age": 25 }
JSON 이란?
- 데이터를 표현하는 국제 표준 형식
- 웹, 앱, 서버 등 모든 플랫폼이 쉽게 읽고 쓸 수 있다.
- key : value 구조로 사람도 보기 쉽다.
여기서 사용되는 방식 : @RequestBody
-
클라이언트가 보내는 JSON 데이터를 JAVA 객체로 자동 변환해주는 Spring의 기능이다.
- JSON -> Java 객체로 바꿔줌
-
작동 방식
- 프론트가 JSON을 POST 요청으로 보낸다.
- @RequestBody가 이 JSON을 Java 객체로 자동 변환한다.
- 컨트롤러에서 변환된 객체로 비즈니스 로직을 수행한다.
이 자동 변환 기능은 Spring 내부의 Jackson 라이브러리가 처리한다.
-
만약 @RequestBody를 사용하지 않는다면.?
- Spring은 기본적으로 application/x-www-form-urlencoded 형식 (폼 데이터)만 처리하려고 한다.
- JSON 형식을 받기 위해서는 @RequestBody가 반드시 있어야 Spring이 JSON 객체로 변환해준다.