Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코딩 이래요래

위클리 페이퍼 - 7주차 본문

위클리 페이퍼

위클리 페이퍼 - 7주차

강범호 2025. 5. 25. 00:31

Q. 웹 API의 발전 과정에서 SOAP에서 REST로의 전환이 일어난 이유와 그 장단점에 대해 설명하세요.

 

우선 SOAP부터 알아보자.

SOAP(Simple Object Access Protocol)는 서로 다른 언어로 어플리케이션끼리 통신할 수 있도록 설계된 최초의 표준 프로토콜이다.

프로토콜이라는 말처럼, 통신 시 사용하는 형식, 보안 절차, 메시지 구성 방식 등이 엄격하게 정해져 있다는 말이다.

SOAP는 XML 형식으로만 데이터를 주고받고, 메시지에 보안, 트랜잭션 정보 같은 걸 무조건 포함시켜야 하기 때문에 데이터 용량이 커지고, 처리 시간이 길어져 페이지 로딩 시간이 느려질 수 있다.

하지만 이러한 구조 덕분에, 높은 신뢰성과 보안성, 체계적인 데이터 처리를 제공하는 장점이 있다.

 

시간이 지남에 따라 사용자가 늘어나고, 모바일 앱, 하이브리드 애플리케이션과 같은 다양한 환경이 등장 하면서 기존의 SOAP는 너무 무겁고, 단순한 작업에도 복잡한 설정이 필요하다는 단점 때문에, 결국 개발 속도와 유연성을 위해 REST로의 전환이 본격적으로 일어나기 시작했다.

 

REST(Representional State Transfer)는 웹 서비스의 아키텍처 스타일 중 하나로, 상태를 전달하는 것을 나타내는 방법, 쉽게 말해

웹의 기본 구조인 URL + HTTP 메서드를 이용해 데이터를 주고 받는 방식이다.

REST는 SOAP와 달리 데이터 형식이 자유롭고, JSON, XML, 텍스트 등 다양한 포맷을 사용할 수 있으며, 구조가 단순하고 가볍고 REST응답을 캐싱할 수 있으므로 페이지 로드 시간을 단축시킬 수 있다.

하지만 SOAP처럼 내장된 보안 매커니즘이나 트랜잭션 처리 기능은 제공되지 않기 때문에, 필요한 경우 추가로 구현해야 한다는 단점이 있다.


Q. Spring Boot에서 @RestController로 들어온 HTTP 요청이 처리되어 응답으로 변환되는 전체 과정을 설명하세요. 특히 HTTP 메시지 컨버터가 동작하는 시점과 역할을 포함해서 설명하세요.

 

 

@Controller vs @RestController

@Controller?? @RestController??Spring MVC에서 클라이언트의 요청을 처리하는 흐름을 @Controller와 @RestController를 이용해 처리할 수 있음두 어노테이션의 특징과 차이점을 알아보자📦 @RequestBody, @ResponseBody

kh-coding.tistory.com

앞서 @Controller 어노테이션을 비교하면서 정리했던 글이 있지만, 한 번 더 복습하는 느낌으로 정리해보자.

 

 "Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a shared algorithm for request processing, while actual work is performed by configurable delegate components."
— Spring Framework Reference Documentation

 

공식 문서에 따르면, Spring MVC는 Front Controller 패턴을 따른다, 즉 하나의 진입점에서 모든  HTTP 요청을 받아 적절한 컴포넌트로 분기해주는 구조이다. 이 진입점이 DispatcherServlet이다.

https://www.geeksforgeeks.org/spring-mvc-framework/

 

클라이언트에서 요청이 들어오면

  1. 클라이언트에서 HTTP 요청 발생
    → 브라우저 또는 REST 클라이언트가 GET /api/users 등 요청 전송
  2. 내장 서버(Tomcat 등)가 요청 수신
    → Spring Boot 내장 Servlet 컨테이너가 포트 리스닝 중 요청을 받음
  3. DispatcherServlet이 요청을 가로채고
    → @WebServlet 등록된 DispatcherServlet이 가장 먼저 요청을 수신함
  4. HandlerMapping을 통해 컨트롤러 탐색
    → 현재 요청 URL과 일치하는 @Controller 또는 @RestController의 메서드를 탐색
  5. HandlerAdapter가 컨트롤러 호출
    → 실제 해당 메서드를 실행시킴 (예: UserController#getUser())
  6. 컨트롤러 내부 로직 실행
    → 필요한 경우 Service → Repository 계층을 거쳐 비즈니스 로직 수행 후, 결과 객체 반환
  7. 컨트롤러의 반환값 처리
    • @Controller라면 → 반환값이 논리 뷰 이름(String) 일 경우 ViewResolver가 동작
    • @RestController라면 → 반환값이 자바 객체이면 HttpMessageConverter가 동작하여 JSON/XML로 변환
  8. DispatcherServlet이 최종 응답 전송
    → HTTP Response Body에 변환된 내용을 담아 클라이언트로 응답

참고 문서