REST(Representational State Transfer)는 자원을 정의하고 이를 처리하기 위한 방법을 제공하는 아키텍처 스타일입니다. REST는 웹 상에서 HTTP를 활용해 자원(Resource)을 상태(State) 기반으로 처리할 수 있도록 설계되었습니다.
자원(Resource)
http://example.com/users (users라는 자원) 행위(Verb)
-HTTP 메서드를 사용하여 자원에 대한 행위를 정의
GET: 조회 POST: 생성 PUT: 수정 DELETE: 삭제 표현(Representation)
{ "id": 1, "name": "John Doe" } RESTful API는 REST 아키텍처 스타일을 준수하는 API를 의미합니다.
이를 통해 클라이언트와 서버 간의 통신이 간단하고 일관되며 확장 가능한 방식으로 이루어집니다.
URI는 자원을 표현해야 한다.
/users, /users/{id}/posts HTTP 메서드를 적절히 사용해야 한다.
상태를 유지하지 않는다(Stateless).
표현과 자원을 분리한다.
코드 상태를 명확히 한다.
200 OK, 201 Created, 404 Not Found). import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final Map<Integer, String> users = new HashMap<>();
// CREATE: 사용자 생성
@PostMapping
public String createUser(@RequestParam String name) {
int id = users.size() + 1;
users.put(id, name);
return "User created with ID: " + id;
}
// READ: 사용자 조회
@GetMapping("/{id}")
public String getUser(@PathVariable int id) {
return users.getOrDefault(id, "User not found");
}
// UPDATE: 사용자 수정
@PutMapping("/{id}")
public String updateUser(@PathVariable int id, @RequestParam String name) {
if (users.containsKey(id)) {
users.put(id, name);
return "User updated.";
}
return "User not found.";
}
// DELETE: 사용자 삭제
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable int id) {
if (users.remove(id) != null) {
return "User deleted.";
}
return "User not found.";
}
}
| Method | Endpoint | Description | Response |
|---|---|---|---|
| POST | /api/users | 사용자 생성 | "User created with ID: 1" |
| GET | /api/users/1 | ID 1 사용자 조회 | "Shin" |
| PUT | /api/users/1 | ID 1 사용자 이름 수정 | "User updated." |
| DELETE | /api/users/1 | ID 1 사용자 삭제 | "User deleted." |
일관성 있는 설계
확장성
유연한 데이터 표현
캐싱 활용 가능