2 분 소요

이번 포스트에서는 정적 컨텐츠, MVC / Template 엔진, API에 대하여 깊이 있게 다룬다.

(본 포스트는 김영한 강사의 [Spring 입문] 강의를 듣고 혼자 정리한 블로그이다.)

스프링 웹 개발 기초

정적 컨텐츠

정의 : 웹 페이지에서는 변경되지 않는 파일들을 말한다.

  • 예시 ) HTML, CSS , JS, 이미지 파일 (png, jpg 등)
  • 스프링에서의 정적 콘텐츠는 src/main/resources/static/ 에 위치해 있다.

동작 방식

(static폴더에 Hello.html 이라는 html 정적 컨텐츠가 있다고 가정한다.)

  1. 사용자가 /hello.html을 요청한다.
  2. Controller 매핑을 먼저 확인한다. 만약 없다면,
  3. resource/static/hello.html 파일을 찾아서 그대로 브라우저에 전달한다.

만약 같은 경로에 Controller Mapping이 존재한다면?

  • 컨트롤러가 먼저 실행되고, 정적 컨텐츠는 무시된다.
  • Controller가 정적 컨텐츠 보다 우선이다.

요약

  • 정적 컨텐츠는 서버의 로직 없이 직접 응답하는 파일
  • static/ 폴더에 두기만 하면 브라우저 요청 시 자동으로 전달된다.
  • 초기 로딩 화면, 이미지, 스타일 시트, 자바스크립트 등에서 많이 사용된다.

MVC & Template 엔진

MVC

MVC = Model - View - Controller

Spring MVC는 이 구조를 따르는 웹 프레임 워크이다.

각 구성요소의 역할 분담은 다음과 같다.

구성 요소 역할
Model 데이터/비즈니스 로직 담당 (예: 회원 정보, 상품 목록)
View 사용자에게 보여지는 화면 (HTML, Thymeleaf 등)
Controller 요청 처리 및 Model → View 전달

동작 흐름

  1. 사용자가 /hello를 요청한다.
  2. Controller 가 요청을 받는다.
  3. Model에 데이터를 담는다.
  4. View의 이름을 return 한다.
  5. Spring이 resources/templates/hello.html을 찾아서 렌더링을 수행한다.
  6. 완성된 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 객체로 변환해준다.