728x90
1.log aspect
서비스와 컨트롤러의 모든 메서드가 실행될 때마다 로그를 남기는 Aspcet를 추가했다.
따로 큰 목적은 없고 디버깅때 사용하기위해 만들어봤다.
@Aspect
@Component
@Slf4j
public class LoggingAspect {
// 서비스나 컨트롤러의 메소드가 실행될 때마다 로그를 남기기 위한 어드바이스
@Around("execution(* com.shopping.service..*(..)) || execution(* com.shopping.controller..*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed();
log.info("{} executed", joinPoint.getSignature().getName());
return result;
}
}
2.API 표준 응답
만든 엔드포인트들에 다음과같은 형식의 응답 형태를 만들것이다.
기존 json으로 주던 body 데이터들은 data 내부에 넣고 다음과같이 제작할것이다.
{
"message": "Success",
"data": {
},
"status": 200,
"error": null
}
우선 성공과 실패 2가지 경우로 나눠서 제작하였다.
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiResponse<T> { //TODO 이거 resposne 하는곳에서 전부 이걸로 바꿔야함
private String message;
private T data;
private int status;
private String error;
// 성공
public static <T> ApiResponse<T> success(T data) {
return ApiResponse.<T>builder()
.message("Success")
.data(data)
.status(200)
.error(null)
.build();
}
// 실패
public static <T> ApiResponse<T> error(String errorMessage, int status) {
return ApiResponse.<T>builder()
.message("Error")
.data(null)
.status(status)
.error(errorMessage)
.build();
}
}
만든 ApiResponse는 기존 엔드포인트에 다음과같이 적용하여 사용하였다.
public ResponseEntity<ApiResponse<ProductResponseDTO>> getProductItemDetail(@PathVariable Long productId){
ProductResponseDTO responseDTO = productService.getProductDetail(productId);
productViewService.incrementProductView(productId);
ApiResponse<ProductResponseDTO> apiResponse = ApiResponse.success(responseDTO);
return ResponseEntity.status(HttpStatus.OK).body(apiResponse);
}
다음과같이 잘 적용된것을 확인했다.
728x90
'BackEnd > SpringBoot' 카테고리의 다른 글
[SpringBoot] Actuator + Prometheus + Grafana 로 모니터링 (0) | 2025.03.24 |
---|---|
[SpringBoot] Swagger 인증 유지 설정 (0) | 2025.03.23 |
[SpringBoot] redis 예외 필터, redis 연결상태 확인 이벤트 리스너, 추가 (0) | 2025.03.23 |