본문 바로가기
스프링 부트3

REST API를 스프링 부트 3로 구현하기

by 굿센스굿 2024. 12. 5.
반응형

 

스프링 부트 3는 간결하면서도 강력한 REST API 구현을 가능하게 해주는 프레임워크입니다. 이번 글에서는 스프링 부트 3를 사용해 REST API를 설계하고 구현하는 과정을 상세히 살펴보겠습니다. REST API의 기본 개념과 함께 실용적인 예제 3가지를 포함하여 프로젝트 생성부터 테스트까지의 전체 과정을 다룹니다.


1. REST API란?

REST API는 Representational State Transfer의 약자로, 클라이언트-서버 간 데이터 통신을 가능하게 하는 설계 원칙입니다. 주로 HTTP를 기반으로 동작하며, 다음과 같은 특징이 있습니다:

  • 자원(Resource): URI를 통해 식별됩니다. 예) /users, /products/1
  • 표현(Representation): JSON 또는 XML 같은 형식으로 데이터를 전달합니다.
  • HTTP 메서드: CRUD 작업을 위해 GET, POST, PUT, DELETE를 활용합니다.

2. 스프링 부트 3를 사용한 REST API 개발 준비

(1) 프로젝트 생성

스프링 부트 3 프로젝트는 Spring Initializr를 통해 생성할 수 있습니다.

필수 의존성:

  • Spring Web: RESTful 웹 서비스 개발을 위한 핵심 모듈
  • Spring Data JPA: 데이터베이스와의 연동
  • H2 Database: 테스트용 인메모리 데이터베이스
  • Lombok: 코드 간결화를 위한 유틸리티

Maven 설정 (pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

3. REST API 구현 예제

(1) 사용자 관리 API 구현

엔티티 정의

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;

@Entity
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
}

리포지토리 정의

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

컨트롤러 정의

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
        return userRepository.findById(id).map(user -> {
            user.setName(updatedUser.getName());
            user.setEmail(updatedUser.getEmail());
            return userRepository.save(user);
        }).orElseThrow(() -> new RuntimeException("User not found"));
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}

(2) 제품 관리 API 구현

엔티티 정의

@Entity
@Data
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;
}

기본 API 설계

컨트롤러, 리포지토리의 설계 방식은 위 사용자 관리 API와 유사합니다. 엔드포인트는 /products로 설정하며 CRUD 메서드를 제공합니다.

(3) 주문 관리 API 구현

엔티티 정의

import jakarta.persistence.*;
import java.util.List;

@Entity
@Data
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private User user;

    @ManyToMany
    private List<Product> products;
}

4. H2 데이터베이스로 테스트하기

application.properties 설정

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update

H2 콘솔은 http://localhost:8080/h2-console에서 확인 가능합니다.


5. REST API의 테스트

Postman을 사용한 테스트

Postman을 통해 위에서 구현한 API를 단계별로 테스트할 수 있습니다.

  1. GET /users: 모든 사용자 조회
  2. POST /users: 새 사용자 추가
  3. PUT /users/{id}: 특정 사용자 정보 업데이트
  4. DELETE /users/{id}: 사용자 삭제

통합 테스트 작성

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetAllUsers() throws Exception {
        mockMvc.perform(get("/users"))
                .andExpect(status().isOk());
    }
}

결론

스프링 부트 3는 REST API 개발을 간소화하면서도 강력한 기능을 제공합니다. 본 포스트에서 소개한 사용자, 제품, 주문 관리 API는 실제 애플리케이션 개발에 바로 활용할 수 있는 실용적인 예제들입니다. 이제 여러분의 프로젝트에서 REST API를 효과적으로 구현해 보세요! 😊

반응형