Spring에서 REST API는 @RestController 어노테이션을 사용하여 구현됩니다.
@RestController는 @Controller와 @ResponseBody 어노테이션의 조합으로, 컨트롤러의 모든 메소드의 반환값이 HTTP 응답 본문으로 직접 반환되도록 합니다.
이를 통해 JSON이나 XML과 같은 형태로 데이터를 쉽게 주고 받을 수 있으며, HTTP 요청을 처리하는 핸들러 메서드는 @RequestMapping 또는 그와 어노테이션(@GetMapping, @PostMapping 등)을 사용하여 구체적 HTTP 메소드와 경로를 지정합니다.
Spring 프레임워크는 RESTful 서비스의 인기가 높아지기 전, 주로 Spring MVC(Model-View-Controller)아키텍처를 사용하여 개발했습니다. Spring MBC는 동적인 웹 페이지를 생성하고 복잡한 웹 애플리케이션을 구축하는 데 주로 사용되었습니다. Spring MVC와 Restful 서비스를 비교해 보겠습니다.
Spring MVC
목적
주로 웹 애플리케이션에서 아용자 인터페이스를 구축하는 데 초점을 맞추며, 서버사이드에서 HTML 뷰를 렌더링하여 클라이언트에 제공합니다.
프로제스
클라이언트로부터 HTTP 요청을 받으면, 컨트롤러가 이를 처리하고 모델 데이터를 뷰로 전달하여 응답을 생성합니다. 뷰는 주로 JSP, Thymeleaf 등을 사용하여 HTML을 생성합니다.
데이터 포맷
주로 HTML을 반환하지만, 필요에 따라 XML이나 JSON도 반환할 수 있습니다.
용도
동적인 웹 페이지 생성 폼 입력 처리, 사용자 세션 관리 등 전통적인 웹 애플리케이션의 요구 사항을 충족합니다.
RESTful 서비스(Spring에서의 구현은 @RestController 사용)
목적
애플리케이션 간의 통신을 위해 설계된, 상태를 유지하지 않는 API 서비스를 제공합니다. 클라이언트와 서버간의 인터페이스로 사용됩니다.
프로세스
HTTP 요청을 받아 JSON, XML 등의 포맷으로 데이터를 직접 반환합니다. 각 URL은 자원을 나타내며 HTTP 메소드(GET, POST< PUT, DELETE)를 통해 해당 자원에 대한 행위를 정의합니다.
데이터 포맷
주로 JSON을 사용하여 데이터를 표현합니다. 가볍고 API 소비가 쉽습니다.
용도
다양한 클라이언트(웹, 모바일 앱, 다른 서버 등)에서 사용될 수 있는 서비스를 구축하는 데 적합합니다. 또한, 마이크로서비스 아키텍처와 클라우드 기반서비스에 매우 적합합니다.
비교
- 효율성: REST API는 상태를 유지하지 않는 통신 방식으로, 서버 리소스를 효율적으로 사용할 수 있습니다. 반면, Spring MVC는 상태 정보(예: 사용자 세션)를 유지할 수 있어 복잡한 상호작용이 필요한 웹 애플리케이션에 적합합니다.
- 확장성: RESTful 서비스는 상태를 유지하지 않고, 서비스의 각 부분을 독립적으로 확장할 수 있어 대규모 분산 시스템에 적합합니다. Spring MVC는 전통적인 웹 애플리케이션의 확장성도 우수하지만, REST API에 비해 약간 떨어질 수 있습니다.
- 유연성: REST는 다양한 종류의 클라이언트와의 통신을 위해 설계 되었으며, 데이터 포맷이나 프로토콜(HTTP)에 있어 유연합니다. Spring MVC는 주로 웹 브라우저를 대상으로 하며, UI 중심의 로직 처리에 특화 되어 있습니다.
Spring MVC와 RESTful 서비스 둘 다 Spring Framework에서 지원하며, 각각의 사례와 요구에 따라 선택할 수 있습니다. 현대의 웹 개발에서는 RESTful API가 특히 중요한 역할을 하고 있으며, 서비스 지향 아키텍처와 마이크로서비스 아키텍처를 구축하는 데 널리 사용됩니다.
REST API 사용예시
import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/api/users") // 기본 URL 경로 설정
public class UserController {
private List<User> users = new ArrayList<>(); // 간단한 사용자 저장소 모의 구현
// 사용자 정보 조회
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
Optional<User> user = users.stream().filter(u -> u.getId() == id).findFirst();
return user.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
// 새 사용자 등록
@PostMapping("/")
public ResponseEntity<User> createUser(@RequestBody User user) {
users.add(user);
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
}
'IT > Java' 카테고리의 다른 글
JPA 소개 (1) | 2025.01.02 |
---|---|
자바 Garbage Collector (1) | 2024.12.02 |
자바 객체의 생명주기 (0) | 2024.12.02 |
Spring Container가 관리하는 Bean에 대하여 (1) | 2024.12.02 |
Java, 배열의 조작을 도와주는 Arrays (0) | 2024.11.22 |