
1. REST API란?
REST 구성
= 자원 + 행위 + 표현
https://example.com/users는 "users"라는 자원에 해당하며, 사용자 목록 데이터를 가리킨다. → /users/{id}와 같은 URI는 특정 사용자 데이터를 조회할 수 있도록 구체적으로 자원을 지정한다.REST API
- REST API는 REST 원칙을 준수하는 API로, 서버와 클라이언트 간 데이터를 효율적이고 직관적으로 주고받을 수 있도록 설계되었다.
- 주로 JSON 형식으로 응답을 반환하여 가독성과 데이터 처리 속도가 뛰어난다.
/users는 전체 사용자 목록을, /users/123는 특정 ID를 가진 사용자 정보를 나타낸다.Cache-Control 헤더를 사용하여 캐시 가능 여부와 기간을 설정할 수 있다. 로드 밸런서 (Load Balancer)
: 여러 서버로 들어오는 요청을 분산시켜 서버 부하를 조절한다. 로드 밸런서는 각 서버의 상태와 트래픽을 고려해 클라이언트 요청을 적절히 분배하므로, 특정 서버에 과부하가 걸리지 않고 전체 시스템 성능이 균형을 이루게 한다.
프록시 서버 (Proxy Server)
: 클라이언트와 서버 사이에 위치해 클라이언트 요청을 서버에 전달하거나 서버 응답을 클라이언트에 전달하는 중간 역할을 한다. 프록시는 캐시된 데이터를 제공해 응답 속도를 높이거나 보안을 강화하는 역할도 수행한다.
Spring Boot에서는 REST API 엔드포인트를 쉽게 정의할 수 있도록 다양한 어노테이션을 제공한다. 이를 통해 복잡한 설정 없이 간단하게 API를 생성할 수 있다.
@RestController: 클래스 전체를 RESTful 엔드포인트로 지정한다. 메서드의 결과는 자동으로 JSON 형식으로 변환되어 클라이언트에 응답된다.@RequestMapping: URL 경로와 해당 경로에서 처리할 메서드를 매핑하는 데 사용된다.@GetMapping, @PostMapping, @PutMapping, @DeleteMapping: 각각 GET, POST, PUT, DELETE 요청을 처리할 수 있도록 메서드를 매핑하는 어노테이션이다.새로운 데이터를 추가하는 메서드로, @PostMapping 어노테이션을 사용한다.
ex) 사용자를 추가하는 API
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User newUser = userService.save(user); // userService를 통해 사용자 저장
return ResponseEntity.status(HttpStatus.CREATED).body(newUser);
}
코드 설명
@RequestBody를 이용하여 요청 본문에서 User 객체를 받아온다.userService.save(user)를 통해 데이터를 저장한다.HttpStatus.CREATED(201 상태 코드)와 함께 newUser 객체를 응답 본문에 포함하여 반환한다.CREATED 상태 코드는 새 자원이 생성되었음을 의미한다. body(newUser)를 통해 생성된 사용자 객체를 JSON 형식으로 응답 본문에 담아 클라이언트로 전송한다.데이터를 조회하는 메서드로, @GetMapping 어노테이션을 사용한다.
ex) 전체 사용자 목록 조회 API, 특정 사용자 정보 조회 API
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.findAll();
}
@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
코드 설명
@PathVariable를 통해 URL에서 id 값을 매핑해 해당 사용자 정보를 가져온다.getAllUsers : 전체 사용자 목록을 리스트 형식으로 반환한다. 모든 사용자 정보를 성공적으로 조회한 경우에는 기본적으로 HTTP 상태 코드 200 OK가 설정된다.getUserById : 특정 사용자의 정보를 반환한다. ResponseEntity.ok(user) 를 통해 200 OK 상태 코드와 함께 user 객체를 응답 본문에 담아 반환한다. ok()는 200 OK 상태를 설정하고, 해당 객체를 JSON 형식으로 포함해 전송한다.기존 데이터를 수정하는 메서드로, @PutMapping 어노테이션을 사용한다.
ex) 특정 사용자 정보 수정 API
@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {
User updatedUser = userService.update(id, userDetails);
return ResponseEntity.ok(updatedUser);
}
코드 설명
@PathVariable로 URL의 사용자 ID를, @RequestBody로 수정할 데이터를 받는다.userService.update(id, userDetails)를 통해 해당 ID의 사용자 정보를 업데이트한다.200 OK 상태 코드와 함께 업데이트된 updatedUser 객체를 반환한다. ok(updatedUser)는 200 OK 상태를 설정하고, 변경된 사용자 객체를 응답 본문에 담아 클라이언트로 전송한다. 이는 수정이 성공적으로 이루어졌음을 의미한다.데이터를 삭제하는 메서드로, @DeleteMapping 어노테이션을 사용한다.
ex) 특정 사용자 삭제 API
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build();
}
코드 설명
@PathVariable로 특정 사용자의 ID를 받아와 userService.delete(id)로 삭제한다.204 No Content 상태 코드로 응답한다.noContent().build()를 통해 빈 응답을 생성하며, 204 No Content 상태를 설정한다. 이 상태 코드는 삭제가 성공했으나 응답 본문에 반환할 데이터가 없음을 의미한다.(추가 예정)
(추가 예정)