자바와 스프링 부트로 생애 최초 서버 만들기

#10 도서관 유저 생성 API 개발

박태정 입니다. 2025. 2. 12. 16:22
반응형

도서관 유저 생성 API 개발 📚

API 개발은 백엔드 개발에서 중요한 역할을 합니다. 오늘은 Spring Boot를 활용해 간단한 도서관 유저 생성 API를 개발하는 과정을 설명하겠습니다. 이 포스팅은 HTTP 요청 처리부터 예외 처리까지 한 번에 다룹니다! 🚀


1. 요구사항 및 설계 ⚙️

요구사항

  • HTTP Method: POST
  • HTTP Path: /user
  • HTTP Body: JSON 형식으로 이름과 나이를 입력받음
    {
      "name": String(필수),
      "age": Integer(선택)
    }
  • 결과 반환: 없음 (HTTP 200 OK만 반환)

2. DTO 설계: UserCreateRequest 클래스 🗂️

데이터를 안전하게 전달하기 위해 DTO(Data Transfer Object)를 생성합니다.

코드

package org.zerock.libraryapp.dto.user.request;

public class UserCreateRequest {

    private String name; // 이름
    private Integer age; // 나이 (null 가능)

    // Getter
    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

설명

  • name: null 값 허용 불가 (필수값)
  • age: null 허용 (선택값)
  • Java의 Integer 타입을 사용해 null 값 처리 가능

3. 도메인 설계: User 클래스 👤

비즈니스 로직을 처리하는 User 엔티티 클래스를 생성합니다.

코드

package org.zerock.libraryapp.domain.user;

public class User {

    private String name; // 이름
    private Integer age; // 나이

    public User(String name, Integer age) {
        if (name == null || name.isBlank()) {
            throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name));
        }
        this.name = name;
        this.age = age;
    }
}

설명

  • 예외 처리:
    • namenull이거나 비어 있는 값(isBlank)일 경우 예외 발생
    • IllegalArgumentException 사용해 상세 오류 메시지 제공

4. 컨트롤러 설계: UserController 클래스 🎛️

API 엔드포인트를 정의하는 컨트롤러를 작성합니다.

코드

package org.zerock.libraryapp.controller.user;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.zerock.libraryapp.domain.user.User;
import org.zerock.libraryapp.dto.user.request.UserCreateRequest;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    private final List<User> users = new ArrayList<>();

    @PostMapping("/user") // POST /user
    public void saveUser(@RequestBody UserCreateRequest request) {
        users.add(new User(request.getName(), request.getAge()));
    }
}

설명

  • @PostMapping: /user 경로로 POST 요청을 처리
  • @RequestBody: JSON 요청 바디를 매핑
  • 메모리 저장: 예제에서는 간단히 List<User>에 저장 (실제 개발에서는 데이터베이스 활용)

5. 전체 흐름 요약 📑

  1. 클라이언트가 /user 경로로 POST 요청을 보냄.
    {
      "name": "홍길동",
      "age": 25
    }
  2. UserController에서 요청을 받아 User 객체 생성 및 저장.
  3. name이 유효하지 않으면 예외 발생.
  4. 성공 시 HTTP 200 OK 반환.

마무리: 핵심 정리 ✅

  • DTO(UserCreateRequest): 요청 데이터를 안전하게 전달.
  • 도메인(User): 유효성 검증 및 비즈니스 로직 처리.
  • 컨트롤러(UserController): HTTP 요청 처리 및 저장.
반응형