RESTful 웹 서비스와 Spring REST API

2023. 11. 12. 00:04개발 문서/Java

728x90
반응형

RESTful 웹 서비스는 Representational State Transfer(REST) 아키텍처 스타일을 따르며, 네트워크 기반의 서비스를 구축하는 웹 서비스 디자인의 한 형태입니다. REST는 자원(Resource)을 표현하고, 해당 자원에 대한 상태(State)를 주고 받는 것에 중점을 둡니다.

Spring REST API는 Spring 프레임워크를 사용하여 RESTful 웹 서비스를 개발하는 것을 말합니다. Spring은 RESTful 웹 서비스를 쉽게 개발할 수 있도록 여러 기능을 제공합니다.

RESTful 웹 서비스 특징:

  1. 자원 (Resource):
    • 모든 것은 자원으로 표현되며, 각 자원은 고유한 URI로 식별됩니다.
  2. 표현 (Representation):
    • 자원의 상태를 표현하는 방법으로 JSON 또는 XML과 같은 표준 형식을 사용합니다.
  3. 상태 전이 (Stateless):
    • 각 요청은 해당 요청만을 위한 정보를 담고 있어, 세션 상태를 서버에 저장하지 않고 클라이언트의 요청만으로 작업을 처리합니다.
  4. 통합 인터페이스 (Uniform Interface):
    • 일관된 인터페이스로 서비스를 제공하며, 자원에 대한 표준 메소드(GET, POST, PUT, DELETE)를 사용합니다.
  5. 자기 표현 (Self-descriptive):
    • 각 리소스는 해당 리소스에 대한 설명이 포함된 자신을 설명하는 정보를 가지고 있어 클라이언트가 쉽게 이해할 수 있습니다.

Spring REST API 개발:

Spring에서 RESTful 웹 서비스를 개발하기 위해서는 다음과 같은 주요 구성 요소를 활용합니다.

  1. Controller:
    • @RestController 어노테이션을 사용하여 RESTful 웹 서비스의 엔드포인트를 처리하는 컨트롤러를 정의합니다.
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, REST!";
    }
}
  1. HTTP Method 매핑:
    • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등을 사용하여 각각의 HTTP 메소드에 대한 매핑을 지정합니다.
@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    // 사용자 정보를 조회하고 반환
}

@PostMapping("/user")
public ResponseEntity<Void> createUser(@RequestBody User user) {
    // 사용자를 생성하고 201 Created 응답 반환
}
  1. Request 및 Response:
    • @PathVariable, @RequestParam, @RequestBody 등을 사용하여 요청 파라미터를 받고, ResponseEntity를 사용하여 응답을 생성합니다.
  2. RESTful 서비스 테스트:
    • Spring에서는 MockMvc를 사용하여 RESTful 서비스를 테스트할 수 있습니다.
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testHelloEndpoint() throws Exception {
        mockMvc.perform(get("/api/hello"))
               .andExpect(status().isOk())
               .andExpect(content().string("Hello, REST!"));
    }
}

Spring Boot는 내장된 서버를 제공하므로 별도의 서버 설정 없이도 간편하게 RESTful 웹 서비스를 개발하고 테스트할 수 있습니다.