[SpringBoot] 공통 응답 DTO

끝으로 ㅣ 2023. 11. 10. 19:20

현재 진행하고 있는 프로젝트에 공통 응답 DTO를 적용해 보겠다.

 

기존의 LoginController

@RestController
@RequestMapping("/api/v1/login")
@RequiredArgsConstructor
public class LoginController {

    private final LoginService loginService;

    @PostMapping
    public ResponseEntity login(@RequestBody LoginDto loginDto) {
        return ResponseEntity.ok(loginService.login(loginDto));
    }

}

기존의 LoginController이다. 로그인 성공 시 액세스 토큰과 리프레시 토큰만 응답에 넣어줄 수가 있었다.

 

{
    "accessToken": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLthYzsiqTtirgiLCJyb2xlIjoiUk9MRV9VU0VSIiwiZXhwIjoxNjk5NjE0NjcwfQ.So6Fedr3DPgHGskdul09W_pYF1UfzpPDu8KSWuKvJ5kMQS3uM8axXQ7hA1TgUcEWW-6gmP7AsW7ST-eXFA9dog",
    "refreshToken": "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTk2MjE4NzB9.kyVMKdvXdIT5we0bmSOEp_BxnT7R73Tn4rl8JVVrOo11Zq9PoZDh61HoJ6GaYC95lgzXgO4vAjxzILAyYhOh_A"
}

 

기존의 로그인 성공 시 응답이다. 서비스를 구현하면서 1개 이상의 데이터를 넣어줘야 하고 추가적인 정보(HttpStatusCode, Message)를 포함해서 응답해주고 싶기 때문에 제네릭을 활용한 공통 응답 DTO가 필요해졌다.

 

공통 응답 DTO 생성

@Data
@Builder
public class SuccessResponse<T> {
    private boolean result;
    private Integer status;
    private String message;
    private T data;
}

제네릭 타입으로 data필드는 다양한 타입을 받을 수 있고 추가적인 정보를 더 포함하는 공통 응답 객체를 만든다.

 

새로운 LoginController

@PostMapping
public ResponseEntity login(@RequestBody LoginDto loginDto) {
    return ResponseEntity.ok(
            SuccessResponse.builder()
                    .result(true)
                    .status(HttpServletResponse.SC_OK)
                    .data(loginService.login(loginDto))
                    .message("Success")
                    .build()
    );
}

응답 body에 공통 응답 객체를 빌더 패턴을 사용해서 토큰 값을 data에 넣어준다.

 

{
  "result": true,
  "status": 200,
  "message": "Success",
  "data": {
    "accessToken": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLthYzsiqTtirgiLCJyb2xlIjoiUk9MRV9VU0VSIiwiZXhwIjoxNjk5NjE0NjcwfQ.So6Fedr3DPgHGskdul09W_pYF1UfzpPDu8KSWuKvJ5kMQS3uM8axXQ7hA1TgUcEWW-6gmP7AsW7ST-eXFA9dog",
    "refreshToken": "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2OTk2MjE4NzB9.kyVMKdvXdIT5we0bmSOEp_BxnT7R73Tn4rl8JVVrOo11Zq9PoZDh61HoJ6GaYC95lgzXgO4vAjxzILAyYhOh_A"
  }
}

공통 응답 객체를 적용하면 로그인 성공 시 이런 식으로 응답을 받을 수 있다.

 

공통 응답을 프로젝트에 적용하면 일관된 응답 폼을 유지할 수 있고, data 필드에 접근하여 데이터를 다루기 쉬워져서 협업, 관리 측면에서 좋아진다.

 

모두들 적용하길..