본문 바로가기

Web/spring

[Spring] 요청에 따른 부가응답 추가하기

728x90

https://meetup.nhncloud.com/posts/148

 

Spring에서 요청에 따른 부가 응답 추가하기 (1) : NHN Cloud Meetup

Spring에서 요청에 따른 부가 응답 추가하기 (1)

meetup.nhncloud.com

 

해당 출처를 이용하여 코드 작성했습니다.


 

해당 블로그에서 MicroService 를 베이스로 사용한 부가 처리 작업 예시가 있어서 읽어보았다.

OOP 의 특성을 최대한 살려서 코드를 작성했다고 하는데, 정리하자면 Interceptor를 이용하여 부가작업을 처리해주는 코드였다

테스트 코드도 있어서 공부하기에 적합할 것 같아

위의 링크 내용을 참조하여 나에게 맞게 코드를 작성해봤다

 

 

 

기본 API 에 기능을 추가한 것으로

 

구현 방법은

아래와 같다.

기본 API에 attachment 구현하기
attachment를 구현하기 위한 사항들을 Spring의 MVC 요청을 처리하는 흐름에 따라 정리해보았다.

필요한 경우 Interceptor에서 attachment를 해석하고 저장한다
1-1 필요한 경우가 언젠지 정의해야 함.
1-2 attachment를 해석할 class를 정의해야 함(AttachmentType)
attachment는 Request Scope bean에 담아두고, 필요할 때 꺼내 사용(AttachmentTypeHolder class 정의)
Controller에서 객체가 반환되면, 필요한 속성을 추가
3-1 Controller의 로직은 변경하지 않음
3-2 AOP를 통해서, 1-1의 필요한 경우를 파악하여, attachment를 위한 서비스 로직을 실행
3-3 Board 엔티티는 생성, 수정, 삭제 용도로 남겨두고, 읽기 요청에 대해서는 comments, writer 등을 추가할 수 있는 BoardDto로 변환해서 보내자.(CQRS 적용)

 

위의 내용을 이용해서 나는 내 코드를 작성해보았다.

 

 

전체코드는 위에 링크에 있으니 참고!!!

 

 

 

나는, 메일을 보내는 부가 작업을 추가해봤다.

명칭은 그대로 Attachment 로ㅎㅎ

 

 

 

추가 작업을 만들고 싶다면 enum에 추가해주면 될 것 같다

 

 

 

attachment 를 저장할 @RequestScope bean 정의 해두기

어떤 것을 요청했는지 담아둔다

 

 

 

 

그럼 이제 내 @Attach 애노테이션을 만들어야지

 

 

굳이 설명 좀 적어봄

 

 

기존 링크에서는 HandlerInterceptorAdapter를 사용하는데 이는 deprecated 되었다.

아래와 같이 바꾸면 된다

@Component
public class AttachInterceptor extends HandlerInterceptorAdapter {

 

 

이렇게

 

AsyncHandlerInterceptor 또는 HandlerInterceptor 를 implements하면 된다

@Component
public class AttachInterceptor implements HandlerInterceptor {
}
@Component
public class AttachInterceptor implements AsyncHandlerInterceptor {
}

 

 

 

 

 

 

작업하다가 문득 캡쳐한거ㅎㅎ

Attach로 도배되는 중ㅋㅋ

 

 

728x90