Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

공부일기

[Spring Boot 입문] API, REST API, Servlet, DispatcherServlet, Jackson 정리 본문

스프링 부트/개인 프로젝트

[Spring Boot 입문] API, REST API, Servlet, DispatcherServlet, Jackson 정리

석새우 2026. 3. 8. 19:26

1. 왜 이 글을 따로 쓰게 되었는가

MiniSNS 프로젝트를 만들면서 기능은 하나씩 붙여나갔지만, 중간중간 계속 비슷한 의문이 생겼다.

  • API는 그냥 URL인가?
  • REST API는 API랑 뭐가 다른가?
  • Spring Boot에서 요청을 받는 주체는 Controller인가, Servlet인가?
  • DispatcherServlet은 정확히 무슨 역할을 하는가?
  • JSON이 왜 자동으로 DTO 객체로 바뀌는가?
  • Jackson은 라이브러리라고 하는데, 정확히 무슨 일을 하는가?

프로젝트를 계속 진행하다 보니, 기능 구현보다 이런 기초 개념을 한번 정리하고 넘어가는 것이 훨씬 중요하다고 느꼈다.
이번 글은 MiniSNS 기능 구현을 잠시 멈추고, Spring MVC가 실제로 어떻게 요청을 처리하는지 이해하기 위해 정리한 글이다.


2. API와 REST API는 무엇이 다른가

API란?

API(Application Programming Interface)는 아주 넓게 보면 프로그램이 다른 프로그램과 소통하는 규칙이다.
즉 “어떤 요청을 보내면, 어떤 방식으로 응답을 받는지 정해 둔 약속”이라고 이해하면 된다.

예를 들어 내가 만든 MiniSNS 서버에

GET /posts/1

요청을 보내면 게시글 1번 정보를 JSON으로 돌려주는 것도 API다.

즉, API는 꼭 웹에만 있는 것이 아니라

  • 자바 라이브러리 메서드
  • 운영체제 함수
  • 외부 서비스 호출 방식
  • 등등,,,

전부 포함하는 더 넓은 개념이다.


REST API란?

REST API는 웹에서 HTTP를 사용할 때, 리소스 중심으로 설계하는 스타일이다.
Spring 공식 문서는 Spring MVC가 @Controller, @RestController, @RequestMapping 등을 통해 HTTP 요청을 처리하는 웹 프레임워크라고 설명한다.

REST 스타일에서는 보통 다음처럼 생각한다.

  • User = 리소스
  • Post = 리소스
  • Comment = 리소스

그래서 URL도 리소스 중심으로 설계한다.

예를 들어:

  • GET /posts → 게시글 목록 조회
  • GET /posts/1 → 게시글 1번 조회
  • POST /posts → 게시글 생성
  • DELETE /comments/3 → 댓글 3번 삭제

REST API는 API의 한 종류이고, 특히 HTTP 기반 웹 API를 더 일관되게 설계하는 방식이라고 보면 된다.

또한 리소스에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현된다.


내가 이해한 API vs REST API

정리하면 이렇다.

  • API = 프로그램 간 상호작용 규칙 전체
  • REST API = 그중에서도 HTTP + 리소스 중심 설계 방식 + HTTP Method사용

즉 REST API는 API보다 더 구체적이고 좁은 개념이다.


 

3. Servlet은 무엇인가

Servlet의 기본 개념

Jakarta Servlet 공식 문서에 따르면, Servlet은 웹 서버 안에서 실행되며 웹 클라이언트의 요청을 받고 응답하는 작은 자바 프로그램이다.

초보자 입장에서 쉽게 말하면:

서블릿은 “HTTP 요청을 받아서 자바 코드로 처리할 수 있게 해주는 입구”다.

예를 들어 브라우저가 서버에 요청을 보내면, 서버는 그 요청을 받아서 어떤 자바 코드가 처리해야 하는지 결정해야 한다.
이때 그 요청/응답을 다루는 표준 인터페이스가 바로 Servlet이다. Jakarta Servlet은 서버 측에서 HTTP 요청과 응답을 처리하기 위한 API를 정의한다.


왜 Servlet이 필요한가

Spring Boot를 쓰면 보통 우리는 Controller만 보게 된다.  

@GetMapping("/posts/{id}")
public PostResponse getPost(@PathVariable Long id) { ... }

하지만 실제로 이 Controller가 바로 HTTP 요청을 받는 것은 아니다.

중간에 먼저 요청을 받는 더 아래 단계가 있고, 그게 바로 Servlet이다.

즉 흐름은 대략 이렇다.

브라우저 요청
→ 웹 서버(톰캣)
→ Servlet
→ Spring Controller

Spring MVC는 Servlet API 위에서 동작하는 웹 프레임워크다. Spring 공식 문서도 Spring Web MVC가 Servlet API 위에 구축된 웹 프레임워크라고 설명한다.


4. DispatcherServlet은 무엇인가

그냥 Servlet이 아니라 왜 DispatcherServlet인가

Spring MVC에서는 일반 Servlet을 직접 쓰는 대신, DispatcherServlet이라는 특별한 서블릿을 중심으로 요청을 처리한다.

Spring 공식 문서에 따르면 DispatcherServlet은 Front Controller 패턴으로 설계된 중심 Servlet이고, 실제 요청 처리 작업은 여러 위임 컴포넌트들에게 나누어 맡긴다.

쉽게 말하면:

DispatcherServlet은 “총괄 접수 담당자”다.

요청이 들어오면 DispatcherServlet이 먼저 받는다.
그리고 이렇게 판단한다.

  • 이 URL은 어떤 Controller 메서드가 처리해야 하지?
  • 파라미터는 어떻게 바인딩하지?
  • 응답은 JSON으로 바꿔야 하나?
  • 예외가 나면 어떤 ExceptionHandler가 처리하지?

즉 Spring MVC의 요청 흐름을 조정하는 중앙 관제탑 역할이다.

 

예를 들어 이런 요청이 들어온다고 하자.

GET /posts/1

그러면 내부적으로...

1. 톰캣이 HTTP 요청을 받음
2. DispatcherServlet이 요청을 전달받음
3. 어떤 Controller 메서드가 이 URL을 처리할지 찾음
4. @PathVariable로 id=1을 꺼냄
5. Controller 메서드 실행
6. 반환 객체를 JSON으로 변환
7. HTTP 응답으로 내려보냄

대략 이런 흐름이 된다,,, 그냥 우리가 사용하는 기능들은 디스패처서블릿 중심으로 한 것이다.. 요정도..? 자세한건 나중에 더 알게 되겠지,,,


5. Jackson은 무엇인가

Jackson의 역할

Jackson은 자바 객체와 JSON 사이의 변환을 담당하는 대표적인 라이브러리다.
Jackson의 ObjectMapper는 JSON을 자바 객체로 읽고, 자바 객체를 JSON으로 쓰는 기능을 제공한다고 공식 문서에서 설명한다.

쉽게 말하면 Jackson은 이렇게 생각하면 된다.

JSON ↔ 자바 객체 번역기

예를 들어 게시글 생성 API는 이렇게 생겼다.

@PostMapping
public PostResponse create(@RequestBody CreatePostRequest request) {
    return postService.create(request.userId(), request.title(), request.content());
}

클라이언트가 만약 다음과 같은 JSON 데이터를 보낸다고 하면,

{
  "userId": 1,
  "title": "hello",
  "content": "first post"
}

그러면 스프링이 이 데이터를 CreatePostRequest 객체로 자동 변환해준다.

이걸 수행하는것이 잭슨!

그리고 PostResponse 객체를 반환할때는 또다시 잭슨!이 다시 JSON 으로 바꿔서 응답 본문에 넣어준다.


6. SPRING MVC 요청 처리 흐름 전체 정리

지금까지 한 내용을 요약하면 대충 다음과 같다,,

클라이언트 요청
→ 톰캣
→ DispatcherServlet
→ HandlerMapping이 Controller 메서드 탐색
→ @PathVariable / @RequestParam / @RequestBody 처리
→ Jackson이 JSON ↔ 객체 변환
→ Controller 실행
→ Service / Repository 호출
→ 결과 반환
→ Jackson이 응답 객체를 JSON으로 직렬화
→ HTTP 응답

 

이렇게 대충 가다를 잡고 나니 예전에는 "오우쓑, 마법이다,,!!이게 뭐냐;;" 하던 것들이 조금씩 설명되기 시작됐다.


7. 이 글을 쓰면서 정리된 핵심 포인트

이번 글을 통해 정리한 핵심은 다음과 같다.

1) API와 REST API는 다르다

  • API는 더 넓은 개념
  • REST API는 HTTP에서 리소스 중심으로 HTTP메소드를 사용하 설계하는 방식 

2) Spring MVC는 Servlet 위에서 동작한다

  • 실제 요청의 입구는 Controller가 아니라 Servlet
  • 그 중심에 DispatcherServlet이 있다

3) DispatcherServlet은 중앙 관제탑이다

  • 요청을 적절한 Controller로 연결
  • 파라미터 바인딩
  • 예외 처리
  • 응답 변환까지 흐름을 조정

4) Jackson은 JSON 번역기다

  • JSON → DTO 객체
  • DTO 객체 → JSON 응답

자세한건 앞으로 하면서 더 디테일하게 파고들어보겠다.