1. REST란?
REST의 개념
REST(Representational State Transfer)는 웹에서 데이터를 교환하는 아키텍처 스타일로, 리소스(Resource)를 정의하고 해당 리소스를 접근하는 방식을 규정합니다.
REST는 클라이언트와 서버 간의 통신을 간결하게 만들며, 웹의 기본 원칙을 준수하면서 API 설계를 단순화하는 방식입니다.
RESTful API란?
RESTful API는 REST의 원칙을 따르는 API를 의미합니다. HTTP 프로토콜을 기반으로 동작하며, 클라이언트가 서버의 특정 리소스를 요청하고 응답을 받는 구조를 가집니다.
2. RESTful API 설계 원칙
RESTful API를 설계할 때 따르는 기본 원칙은 다음과 같습니다.
1) 리소스 중심의 URL 설계
- RESTful API는 리소스(Resource) 를 중심으로 URL을 설계합니다.
- URL은 동사를 포함하지 않고, 명사를 사용하여 리소스를 나타냅니다.
- 예를 들어, 사용자 정보를 가져오는 API는 다음과 같이 정의합니다.
- GET /users → 모든 사용자 조회
- GET /users/{id} → 특정 사용자 조회
- POST /users → 새로운 사용자 생성
- PUT /users/{id} → 특정 사용자 정보 업데이트
- DELETE /users/{id} → 특정 사용자 삭제
2) HTTP 메서드 활용
RESTful API에서는 HTTP 메서드를 적절히 활용합니다.
HTTP 메서드 설명
GET | 리소스 조회 |
POST | 리소스 생성 |
PUT | 리소스 전체 수정 |
PATCH | 리소스 부분 수정 |
DELETE | 리소스 삭제 |
예를 들어, 특정 사용자의 정보를 가져오려면 GET /users/{id}를 호출하면 됩니다.
3) 상태 코드(Status Code) 활용
API 응답에는 적절한 HTTP 상태 코드를 포함해야 합니다. 대표적인 상태 코드는 다음과 같습니다.
상태 코드 의미
200 OK | 정상적인 응답 |
201 Created | 리소스 생성 성공 |
400 Bad Request | 잘못된 요청 |
401 Unauthorized | 인증 실패 |
403 Forbidden | 권한 없음 |
404 Not Found | 리소스 없음 |
500 Internal Server Error | 서버 내부 오류 |
4) HATEOAS (Hypermedia as the Engine of Application State)
HATEOAS는 REST API의 중요한 개념 중 하나로, 응답에 링크 정보를 포함하여 클라이언트가 추가적인 API 요청을 쉽게 할 수 있도록 하는 방식입니다.
예를 들어, 사용자 정보를 조회할 때 관련 리소스에 대한 링크를 제공하는 방식입니다.
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"links": {
"self": "/users/1",
"orders": "/users/1/orders"
}
}
3. RESTful API와 JSON 데이터 통신
RESTful API에서는 주로 JSON(JavaScript Object Notation) 형식을 사용하여 데이터를 주고받습니다.
요청(Request) 예제
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Alice",
"email": "alice@example.com"
}
응답(Response) 예제
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 2,
"name": "Alice",
"email": "alice@example.com",
"created_at": "2025-02-10T12:34:56Z"
}
응답 데이터는 표준화된 형식을 유지하는 것이 좋습니다.
API 응답 표준화 예시
{
"status": "success",
"message": "User created successfully",
"data": {
"id": 2,
"name": "Alice",
"email": "alice@example.com"
}
}
4. RESTful API 구현 예제 (Spring Boot)
Spring Boot를 활용하여 간단한 RESTful API를 구현하는 예제를 살펴보겠습니다.
1) REST 컨트롤러 생성
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
}
2) DTO(Data Transfer Object) 활용
public class UserDto {
private Long id;
private String name;
private String email;
// Getter, Setter 생략
}
3) 예외 처리
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
}
결론
RESTful API는 현대적인 웹 애플리케이션에서 핵심적인 역할을 하는 아키텍처 스타일입니다. 잘 설계된 RESTful API는 확장성이 높고 유지보수가 쉬우며, 다양한 클라이언트와 원활하게 상호작용할 수 있습니다. 이 글에서는 REST의 기본 개념부터 API 설계 원칙, JSON 데이터 통신, 그리고 Spring Boot를 활용한 구현 예제까지 살펴보았습니다.
백엔드 개발을 하면서 RESTful API를 직접 구현해보고, 더 나아가 GraphQL과 같은 대체 기술도 비교해보면 더욱 깊이 있는 이해를 할 수 있을 것입니다. 🚀
'모각코' 카테고리의 다른 글
[백엔드]JWT 이해하기 (0) | 2025.02.10 |
---|---|
[백엔드]JPA 이해하기 (1) | 2025.02.10 |
[백엔드]SQL 이해하기 (0) | 2025.01.29 |
[백엔드]자바 스프링부트 이해하기 (0) | 2025.01.29 |
[알고리즘] 그리디 알고리즘(탐욕법, Greedy Algorithm) 이해하기 (0) | 2024.08.04 |