[Spring][Core] 라이브러리 배포 준비

1 분 소요

들어가며

RESTful API 설계 시 자주 사용되는 로직과 설계를 라이브러리로 만들어 배포하기 전 준비 사항을 기록하기 위한 포스팅

고민하게 된 계기

그렇게 많은 프로젝트를 해본 경험은 없지만 Spring Boot로 3개 정도의 프로젝트를 해보면서 공통되는 로직을 발견하였다.

  1. response 반환 시 예외 또는 정상 응답의 경우 공통되는 api 스펙
  2. 검증 시 발생하는 예외의 경우 @ExceptionHandler를 통한 예외 처리

위와 같은 경우 여러 가지의 util 성 클래스와 다양한 설계 기법으로 하나의 라이브러리로 모듈화할 수 있을 거라고 생각이 들어 라이브러리 배포를 고민하게 되었다.

공통되는 api response

  • AOP 기술을 통해 구현해 볼 생각이다. 반환 객체를 변경할 수 있는 @Around 어드바이스를 이용하여 정상 반환과 예외 반환 케이스를 나누어 공통된 api 스펙으로 만들어볼 계획이다. 핸들러 전체에 적용 가능한 클래스 단위 어노테이션과 메서드에 적용 가능한 메서드 단위 어노테이션을 따로 개발하려고 한다.
  • 검증의 경우 발생하는 예외가 정해져 있고 디폴트 메시지를 활용하면 @ExceptionHandler를 통해 설계할 수 있을 것 같다.

배포

  • 최근 JCenter 라이브러리 등록 서비스가 중지되었다고 본 것 같다.
  • 그래서 jitpack를 이용해 배포해 볼 생각이다.
  • 깃허브에 푸시하고 깃허브 주소랑 리포를 설정해 주면 .jar로 빌드 해주고 이를 라이브러리로 의존성 주입을 시켜주는 것 같다.
  • 자세한 workflow는 개발하면서 다시 한번 공부해봐 야겠다.

Client

  • 라이브러리를 사용하는 클라이언트 입장에서 컨텍스트를 어떻게 구성하면 좋을지 구글링을 통해 고민해 보았다.
  • 많은 블로그나 글을 읽어봤는데 전형화된 방법이 있는 것 같다.
  • 먼저 커스텀한 @EnableResponseApi 어노테이션에 @Import를 붙여 @Aspect@ControllerAdvice를 빈으로 등록시킬 예정이다.
  • @Configuration, @ConditionalOnClass, META-INF/spring.factories, @EnableConfigurationProperties 등을 이용하여 프로퍼티에서 값을 읽어와서 특정한 조건에 빈으로 등록해 줄 수 있지만 현재까지 고민한 설계 단계에서는 이것은 불필요할 것 같다.
  • gradle 빌드 스크립트에 jitpack 저장소를 추가하고 jitpack과 배포한 라이브러리 의존성을 주입받으면 사용 가능할 것이다.

고찰

  • 개발하다가 궁금한 점이 생기거나 하나에 꽂히면 잘 때까지 머릿속에서 맴돈다. 이럴 때는 이것저것 찾아보면서 머릿속으로 workflow를 그린 다음 바로 글을 정리하는 것이 큰 도움이 되는 것 같다.
  • 준비는 끝났고 개발하면서 분명 트러블이 생길 텐데 트러블슈팅 과정은 이후 포스팅에서 다룰 계획이다.

댓글남기기