이번에 Spring Batch
로 배치 애플리케이션을 구현하면서 if(kakao) 컨퍼런스 발표에서 소개한 Reader의 성능 개선 방법 중 하나인 ZeroOffsetItemReader
를 사용해보기로 했습니다
이에 대한 구현을 직접하기 보다는 여기에서 소개하는 Jojoldu님께서 동일한 개념으로 구현하신 QuerydslNoOffsetPagingItemReader
를 사용하기로 했습니다
하지만 해당 패키지 dependency를 추가해서 빌드를 해보니 javax.annotation.Nonnull
에 대한 의존성을 못 찾는 이슈를 겪게 되었습니다
https://www.javadoc.io/doc/com.google.code.findbugs/jsr305/latest/javax/annotation/Nonnull.html
위 링크의 javadoc 문서에서 소개하는 해당 어노테이션의 기능은 다음과 같습니다
스펙상 위와 같은 역할을 하는 어노테이션이지만, 사실 해당 어노테이션을 붙히는 것 만으로는 아무런 효과가 없습니다
@Test
public void test() {
method(null); // 문제 없이 통과함
}
private void method(@Nonnull Integer num) {
System.out.println(num);
}
IDE에서는 해당 어노테이션에 대한 경고를 띄워주기도 합니다
javax.annotation.Nonull
는 기본적으로 자바에서 제공되는 스펙이 아닌 어노테이션입니다
따라서, 직접 사용하기 위해서는 별도의 의존성을 추가하여 사용해야 합니다
implementation 'com.google.code.findbugs:jsr305:3.0.2'
@NonNull
은 org.springframework.lang
패키지에 있는 Spring5 부터 지원하는 어노테이션입니다
내부적으로 javax.annotation.Nonull
어노테이션을 wrapping하고 있는 형태로 구현되어 있으며, Spring 프레임워크에 대한 의존성이 추가되어 있다면 기본적으로 사용할 수 있는 어노테이션 입니다
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull
@TypeQualifierNickname
public @interface NonNull {
}
Spring 프레임워크를 사용하는 환경에서는 javax.annotation.Nonull
대신 해당 어노테이션을 활용하는 것이 좋아 보입니다
따라서 기존의 javax.annotation.Nonnull
을 모두 org.springframework.lang.NonNull
로 대체하여 의존성 문제를 해결하였습니다