hanker

Spring - Spring Boot로 RESTful API 설계 본문

SPRING

Spring - Spring Boot로 RESTful API 설계

hanker 2024. 12. 7. 00:00
반응형

클라이언트와 서버 간 데이터를 효율적으로 주고받기 위해 RESTful API가 널리 사용되고 있다.

오늘은 Java 기반의 Spring Boot를 활용해 RESTful API를 설계하는 기본 개념과 방법을 알아보자!

 


1. RESTful API란?

 

REST(Representational State Transfer)는 웹 서비스 아키텍처 스타일 중 하나로, HTTP 프로토콜을 기반으로 클라이언트와 서버 간 데이터를 주고받는 방법이다.

 

RESTful API는 다음과 같은 특징을 가진다.

URL 기반: URI는 특정 리소스를 식별하는 통합 자원 식별자를 나타냄 (예: /users, /products/1).

 

HTTP 메서드 활용:

- GET: 자원 조회

- POST: 자원 생성

- PUT: 자원 수정

- DELETE: 자원 삭제

 

Stateless: 요청 간 상태를 저장하지 않음

 


2. Spring Boot로 RESTful API 설계하기 

 

(1) 프로젝트 설정

https://start.spring.io/

위 사이트로 이동하여 기본 프로젝트를 생성한다. 

기본적으로 

위 3개의 의존성을 사용하며, DB 연결 시 JDBC나 JPA를 추가로 등록해서 사용하면 된다.

 

참고 : Java 17 버전 사용

 

 

 

 

(2) Controller / Model 작성

 

간단한 User 정보를 관리하는 예제 코드를 만들어보자.

User.java

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    private int id;
    private String name;
    private String email;
    
}

(lombok 사용)

 

UserController.java

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

    private List<User> users = new ArrayList<>(List.of(
            new User(1, "hanker", "hanker@example.com"),
            new User(2, "Hong gil dong", "gildong@example.com")
    ));

    // GET: 모든 사용자 조회
    @GetMapping
    public List<User> getAllUsers() {
        return users;
    }

    // GET: 특정 사용자 조회
    @GetMapping("/{id}")
    public User getUserById(@PathVariable int id) {
        return users.stream()
                .filter(user -> user.getId() == id)
                .findFirst()
                .orElseThrow(() -> new RuntimeException("User not found"));
    }

    // POST: 새로운 사용자 추가
    @PostMapping
    public User createUser(@RequestBody User user) {
        user.setId(users.size() + 1);
        users.add(user);
        return user;
    }

    // PUT: 사용자 정보 수정
    @PutMapping("/{id}")
    public User updateUser(@PathVariable int id, @RequestBody User updatedUser) {
        User user = users.stream()
                .filter(u -> u.getId() == id)
                .findFirst()
                .orElseThrow(() -> new RuntimeException("User not found"));

        user.setName(updatedUser.getName());
        user.setEmail(updatedUser.getEmail());
        return user;
    }

    // DELETE: 사용자 삭제
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        users.removeIf(user -> user.getId() == id);
        return "User deleted successfully";
    }
}

위 코드 작성 후 Spring boot 실행 (포트를 변경하지 않으면 8080 포트로 실행)

 

 

(3) 테스트 (Postman 사용)

 

GET : http://localhost:8080/api/users/1 

 

POST : /api/users (Body : Json 데이터)

 

 

PUT : /api/users/1  (Body : Json 데이터)

 

DELETE : DELETE /api/users/1 

 

 


정리

위 글을 정리해보자.

 

우리가 데이터 반환 시 @ResponseBody 어노테이션을 사용해서 데이터를 반환했었는데, @RestController 어노테이션을 사용하게 되면 불필요 해진다. 기본적으로 JSON으로 반환해 준다.

 

이렇게 쉽게 RESTful API를 만들어 봤다. 

다음 글은 이어서 Http상태 코드를 추가해서 성공과 오류를 명확히 전달하는 API로 개선해보려 한다.

 

 

끝.

 

 

반응형