[Spring Boot] RESTful API를 통한 웹 서비스 구축
KUKJIN LEE • 2개월 전 작성
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를 활용하여 구조화된 코드를 작성하는 것이 좋습니다.