개발 공부/백엔드

제미나이와 게시판 만들기: (4) 컨트롤러 구현과 Postman API 테스트

baby-t 2025. 10. 5. 11:17

안녕하세요! 지난 포스팅에서는 서비스 계층의 비즈니스 로직과 테스트 코드의 종류에 대해 알아보았습니다.

이번 포스팅에서는 드디어 애플리케이션의 가장 바깥 관문인 컨트롤러(Controller) 계층을 구현하고, 강력한 API 테스트 도구인 Postman을 사용해 직접 API를 호출하여 기능이 잘 동작하는지 확인해보겠습니다.

### 1. 회원가입 API 구현하기 💻

가장 먼저 UserController와 회원가입 요청 데이터를 받아줄 UserForm DTO를 만들어 보겠습니다.

#### UserForm.java (DTO)

화면(클라이언트)으로부터 데이터를 전달받기 위한 객체입니다. 회원가입에 필요한 username, password, nickname 필드만 간단하게 정의합니다.

Java
 
public class UserForm {
    private String username;
    private String password;
    private String nickname;

    // Getter, Setter...
}

#### UserController.java

@RestController를 사용하여 이 클래스가 REST API를 위한 컨트롤러임을 명시하고, UserService를 주입받아 실제 비즈니스 로직을 호출합니다.

Java
 
@RestController
@RequestMapping("/api/users") // 이 컨트롤러의 API는 모두 /api/users로 시작
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    // 회원 가입 API
    @PostMapping("/signup")
    public String signup(@RequestBody UserForm form) {
        User user = new User();
        user.setUsername(form.getUsername());
        user.setPassword(form.getPassword());
        user.setNickname(form.getNickname());

        userService.join(user);

        return "ok"; // 성공 시 "ok" 문자열을 반환
    }
}
  • @RequestMapping("/api/users"): 이 컨트롤러에 들어있는 모든 API의 공통 시작 주소를 /api/users로 설정합니다.
  • @PostMapping("/signup"): POST HTTP 요청과 /api/users/signup 주소를 처리하는 API 메서드임을 나타냅니다.
  • @RequestBody: 클라이언트가 보낸 JSON 데이터를 UserForm 객체로 자동으로 변환하여 form 파라미터에 넣어줍니다.

### 2. Postman으로 첫 API 테스트하기 🚀

이제 프론트엔드 화면 없이 백엔드 API를 테스트할 시간입니다. Postman을 설치한 후 아래 단계를 따라 진행합니다.

#### 1단계: 서버 실행 및 Postman 설정

먼저 IntelliJ에서 스프링 부트 애플리케이션을 실행하여 서버를 켭니다. 그 다음 Postman에서 새 요청 탭을 열고 아래와 같이 설정합니다.

  • HTTP 메서드: POST
  • URL: http://localhost:8080/api/users/signup

#### 2단계: Body에 JSON 데이터 작성

Body 탭 → raw 선택 → JSON 포맷 선택 후, 다음과 같이 보낼 데이터를 작성합니다.

JSON
 
{
    "username": "testuser",
    "password": "password123",
    "nickname": "테스터"
}

#### 3단계: 요청 전송 및 결과 확인

HTTP 상태 코드가 500이 뜸

Send 버튼을 눌러 요청을 보냈더니... **500 Internal Server Error**가 발생했습니다! 뭐가 문제일까요?

IntelliJ의 서버 로그를 확인해보니 답이 있었습니다.

 

java.lang.IllegalStateException: 이미 존재하는 아이디입니다.

 

이전에 통합 테스트를 진행하며 DB에 저장했던 testuser와 아이디가 겹친 것입니다. 오히려 우리가 UserService에 만들어둔 중복 아이디 검증 로직이 훌륭하게 동작했다는 것을 증명한 셈이 됐네요.

이미 있는 testuser

이제 username을 새로운 값으로 바꿔서 다시 시도해 보겠습니다.

JSON
 
{
    "username": "testbyPostman",
    "password": "password123",
    "nickname": "포스트맨테스트"
}

Send 버튼을 다시 누르니, 이번에는 200 OK 상태 코드와 함께 ok라는 응답이 정상적으로 돌아왔습니다.

200이 뜬다!

마지막으로 H2 데이터베이스 콘솔에서 SELECT * FROM USER; 쿼리로 확인해보니, 새로운 사용자가 성공적으로 추가된 것을 볼 수 있었습니다.

h2


이것으로 컨트롤러 구현과 Postman을 이용한 첫 API 테스트까지 성공적으로 마쳤습니다. 다음 포스팅에서는 나머지 API들을 구현하고 테스트하는 과정을 이어서 진행하겠습니다.