웹 api 발전 과정 / http 요청 처리 변환 과정

chaewon·2025년 5월 26일

🇶 웹 API의 발전 과정에서 SOAP에서 REST로의 전환이 일어난 이유와 그 장단점

SOAP

초기 웹 서비스 시대에는 SOAP(Simple Object Access Protocol)이 API 통신의 표준처럼 사용됐다.
XML 기반의 프로토콜로, 엄격한 스키마와 헤더 구조, 다양한 기능 지원(WSDL, 메시지 보안 등) 덕분에 복잡한 시스템 간 연동에 유용했다.

근데 문제는 무겁고 복잡했다

  • 데이터를 주고받기 위해 항상 XML을 사용해야 했고,
  • 메시지 구조가 정형화되어 있어서, 단순한 요청 하나에도 여러 계층을 거쳐야 했다.

REST의 등장과 전환의 이유

이런 상황에서 등장한 것이 바로 REST(Representational State Transfer).
HTTP의 표준 메서드(GET, POST, PUT, DELETE 등)를 활용하고, JSON이나 XML 등 다양한 포맷을 사용할 수 있어 훨씬 가볍고 직관적이다.

전환 이유 요약

항목SOAPREST
데이터 포맷XML 고정JSON, XML 등 자유
메시지 구조복잡, 무겁다간결, 직관적
확장성다양한 기능 지원단순한 CRUD 중심
사용성학습 곡선 있음URI 기반으로 쉬움

REST의 장점

  • 가볍고 빠름 → 모바일, 클라이언트-서버 통신에 유용
  • 학습 비용 낮음 → HTTP만 알면 된다.
  • 유연함 → JSON, XML, YAML 등 어떤 포맷도 가능

REST의 단점

  • 보안, 트랜잭션 처리 등 복잡한 기능은 직접 구현해야 함.
  • 표준이 없음 → 개발자마다 API 설계 스타일이 다를 수 있음.

Spring Boot에서 @RestController로 들어온 HTTP 요청이 처리되어 응답으로 변환되는 전체 과정

구조 한눈에 보기

[Client] → [DispatcherServlet] → [HandlerMapping] → [Controller]  
→ [Return Object] → [HttpMessageConverter] → [Response Body] → [Client]

1. 클라이언트가 요청을 보낸다

브라우저나 앱에서 GET /api/users 같은 요청을 보냄 → Spring Boot의 DispatcherServlet이 이를 받는다.

2. DispatcherServlet이 적절한 컨트롤러를 찾는다

Spring은 내부적으로 HandlerMapping을 통해 어떤 컨트롤러가 이 요청을 처리해야 하는지 찾아낸다.

3. @RestController가 요청 처리

예를 들어 이런 코드가 있다면:

@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping
    public UserResponse getUser() {
        return new UserResponse("채원", 25);
    }
}

→ 해당 메서드가 실행되어 UserResponse 객체를 반환한다.

4. HTTP 메시지 컨버터

여기서 등장하는 게 바로 HttpMessageConverter다.
이 객체는 UserResponse 같은 자바 객체를 JSON 문자열로 바꿔주는 역할을 한다.

5. 동작 시점

컨트롤러가 리턴값을 반환하면, DispatcherServlet이 View를 처리하는 대신 @ResponseBody가 있음을 인식하고
HttpMessageConverter를 통해 데이터를 직렬화하여 클라이언트에 전달한다.

직렬화(Serialization)란,

자바 객체 같은 메모리 속 데이터 구조를 → 텍스트나 바이트 형태로 바꾸는 과정이다.

예를 들어, 컨트롤러가 아래와 같은 객체를 리턴한다고 해보자:

new UserResponse("채원", 25)

이건 자바 객체라서 클라이언트(예: 브라우저, 모바일 앱)가 직접 이해할 수 없음.
그래서 이걸 JSON 같은 형식의 텍스트로 바꿔서 클라이언트가 이해할 수 있도록 한다.


6. 응답 완료

최종적으로 JSON 문자열이 HTTP 응답 바디에 담겨서 클라이언트에 전달된다.


정리

단계설명
요청 수신DispatcherServlet이 HTTP 요청 수신
컨트롤러 매핑HandlerMapping → 컨트롤러 탐색
요청 처리@RestController의 메서드 실행
응답 변환HttpMessageConverter가 자바 객체 → JSON 변환
응답 반환클라이언트에게 최종 응답 전달

@RestController와 HttpMessageConverter
개발자는 자바 객체만 신경 쓰면 되고, 나머지는 스프링이 다 처리한다.


2개의 댓글

comment-user-thumbnail
2025년 5월 26일

볼드체로 강조한 부분이 눈에 띄네요!

답글 달기
comment-user-thumbnail
2025년 5월 26일

좋은 글 감사합니다!

답글 달기