[Spring][Core] 라이브러리 배포 준비
들어가며
RESTful API 설계 시 자주 사용되는 로직과 설계를 라이브러리로 만들어 배포하기 전 준비 사항을 기록하기 위한 포스팅
고민하게 된 계기
그렇게 많은 프로젝트를 해본 경험은 없지만 Spring Boot로 3개 정도의 프로젝트를 해보면서 공통되는 로직을 발견하였다.
- response 반환 시 예외 또는 정상 응답의 경우 공통되는 api 스펙
- 검증 시 발생하는 예외의 경우
@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를 그린 다음 바로 글을 정리하는 것이 큰 도움이 되는 것 같다.
- 준비는 끝났고 개발하면서 분명 트러블이 생길 텐데 트러블슈팅 과정은 이후 포스팅에서 다룰 계획이다.
댓글남기기