[Spring Boot] RESTful API를 통한 웹 서비스 구축

KUKJIN LEE's profile picture

KUKJIN LEE1개월 전 작성

RESTful API 구축

Spring Web과 Spring Data JPA 종속성을 추가하여 RESTful API를 구축 예시 자료입니다.

(반드시 따라야 할 필요는 없습니다. 하지만 유지보수 차원에서 아래와 같은 구조가 유지보수 차원에서 좋습니다. 선조들의 지혜가 담긴 구조입니다.)

 

Controller 작성

RESTful API의 엔드포인트를 제공하기 위해 @RestController@RequestMapping을 사용하여 컨트롤러 클래스를 작성합니다.

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping
    public List<User> getAllUsers() {
        // 사용자 목록 반환
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        // 특정 사용자 반환
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        // 새로운 사용자 생성
        User user = new User(userDTO.getName(), userDTO.getEmail());
        userService.saveUser(user);
        return new UserDTO(user.getName(), user.getEmail());
    }
} 

(사용자 정보를 CRUD(Create, Read, Update, Delete)하는 REST 엔드포인트를 정의하고 있습니다.)

 

Service와 Repository 계층 구현

비즈니스 로직과 데이터 접근을 분리하기 위해 서비스 계층과 리포지토리 계층을 나눴습니다.

  • @Service는 비즈니스 로직을 담당하고, @Repository는 데이터베이스와 상호작용을 담당합니다.

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User not found"));
    }
}

DTO 사용

API 요청과 응답 간 데이터를 주고받을 때 DTO를 사용하면, 도메인 객체와의 결합을 줄이고 데이터의 형태를 유연하게 관리할 수 있습니다. 위 Controller를 확인해보면 사용자 생성 시 UserDTO를 요청으로 받습니다. DTO를 사용하면 클라이언트에 반환할 데이터를 쉽게 조작할 수 있습니다.

public class UserDTO {
    private String name;
    private String email;

    // Getters and Setters
}

잘 설계된 RESTful API는 유지보수성을 높이고 확장 가능한 시스템을 만드는데 도움이 됩니다. 반드시 위와 같은 구조로 진행할 필요는 없지만 권장은 서비스와 리포지토리 계층을 분리하고 DTO를 활용하여 구조화된 코드를 작성하는 것이 좋습니다.

New Tech Posts