현재 진행하고 있는 프로젝트에 공통 응답 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 필드에 접근하여 데이터를 다루기 쉬워져서 협업, 관리 측면에서 좋아진다.
모두들 적용하길..
'Spring Boot' 카테고리의 다른 글
[Spring Boot] @RestControllerAdvice를 사용한 공통 응답 처리 (0) | 2023.11.26 |
---|---|
[Spring Boot] Spring Security JWT 토큰 로그인 구현 - 2 (0) | 2023.11.10 |
[Spring Boot] Spring Security JWT 토큰 로그인 구현 - 1 (0) | 2023.10.29 |