안녕하세요, 오늘은 토비의 클린 스프링 강의를 들으면서 알게 된 정말 유용한 내용을 공유하려고 해요.
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1 강의 | 토비 - 인프런
토비 | 가상의 스타트업 개발팀이 단계적으로 클린 코드와 스프링 개발 원칙을 따라서 빠르고, 안정적이면서 유연하고, 유지보수하기 좋게 개발하는 과정을 실제 업무 진행과 유사한 방식으로
www.inflearn.com
[본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.]
혹시 프로덕션에서 NullPointerException 때문에 밤새 디버깅해본 경험 있으신가요?
저는 정말 많았는데,
이제는 JSR-305와 Spring의 Null Safety 기능으로 이런 문제를 컴파일 타임에 잡을 수 있게 되었어요! 🎉
🤔 JSR-305가 뭔가요?
JSR-305(Java Specification Request 305)는
소프트웨어 결함을 찾기 위한 애노테이션들을 정의한 자바 명세예요.
특히 Null Safety와 관련된 애노테이션들이 핵심인데:
- @NonNull: "이 값은 null이 될 수 없어요!"
- @Nullable: "이 값은 null일 수도 있어요"
- @NonNullApi: "이 패키지/클래스의 모든 파라미터와 반환값은 기본적으로 NonNull이에요"
Spring에서는 이 JSR-305 애노테이션들을 적극 도입해서 더 안전한 코드를 작성할 수 있도록 도와주고 있어요.
🌱 Spring에서 JSR-305 사용하기
1. 기본 사용법 - @NonNull
먼저 제가 실습하면서 작성한 간단한 예제를 보실까요?
package tobyspring.splearn;
import org.springframework.lang.NonNull;
public class NonNullRunner {
public static void main(String[] args) {
String name = null;
print(name); // 이 부분에서 컴파일러가 경고를 줍니다!
}
static void print(@NonNull String input) {
System.out.println(input);
}
}
@NonNull 애노테이션을 파라미터에 붙이면,
해당 메서드에 null 값을 전달하려고 할 때 IDE가 경고를 보여줘요.
정말 간단하지만 강력하죠?
2. SpotBugs 플러그인으로 빌드 레벨에서 체크하기
하지만 경고만으로는 부족해요.
실제로 빌드가 실패하도록 만들어야 팀 전체가 이 규칙을 지킬 수 있거든요.
build.gradle.kts에 SpotBugs 플러그인을 추가해보세요:
plugins {
java
id("org.springframework.boot") version "3.5.3"
id("io.spring.dependency-management") version "1.1.7"
id("com.github.spotbugs") version "6.2.2" // 이 라인 추가!
}
이제 null 관련 문제가 있으면 빌드 자체가 실패해요!
팀원들이 실수로 null을 넘기는 코드를 push하는 것을 방지할 수 있죠.
3. 패키지 레벨 설정 - @NonNullApi
매번 모든 파라미터에 @NonNull을 붙이는 게 번거롭다면, 패키지 레벨에서 기본값을 설정할 수 있어요.
domain 패키지에 package-info.java 파일을 만들어보세요:
@NonNullApi
package tobyspring.splearn.domain;
import org.springframework.lang.NonNullApi;
이제 domain 패키지의 모든 메서드 파라미터와 반환값이 기본적으로 NonNull이 되어요! 정말 깔끔하죠?
만약 특정 파라미터나 반환값이 null을 허용해야 한다면, 그때만 @Nullable을 명시적으로 붙이면 됩니다.
💡 실제 개발에서의 장점
- 컴파일 타임 체크: 런타임 전에 null 관련 문제를 발견할 수 있어요
- 팀 협업 개선: 메서드 시그니처만 봐도 null 허용 여부를 알 수 있어요
- 문서화 효과: 코드 자체가 null safety에 대한 명세가 되어요
- 안전한 리팩터링: IDE가 null safety를 고려한 리팩터링을 도와줘요
🎯 마무리
JSR-305와 Spring의 Null Safety 기능은 정말 작은 노력으로 큰 효과를 볼 수 있는 기능이에요.
특히 팀 프로젝트에서는 더욱 빛을 발하죠!
저도 토비님의 강의를 들으면서 이런 실용적인 기법들을 많이 배우고 있는데, 정말 추천드려요.
Spring을 제대로 배우고 싶으신 분들은 토비의 클린 스프링 강의를 꼭 들어보세요!
실무에서 바로 적용할 수 있는 깨끗하고 안전한 코드 작성법을 체계적으로 배울 수 있어요.
특히 주니어 개발자분들에게는 정말 도움이 많이 될 거예요! 💪
이 글이 도움이 되셨다면 공유해주세요! 더 안전한 Spring 코드를 작성하는 개발자가 많아졌으면 좋겠어요 😊
'Spring' 카테고리의 다른 글
[Spring Security] 카카오 소셜 로그인 구현하며 팩토리 패턴을 처음 적용해본 후기 (0) | 2025.07.15 |
---|---|
🔐Spring Security OAuth2는 어떻게 자동으로 소셜 로그인을 처리할까? (1) | 2025.07.14 |
Spring AOP를 활용해서 권한 체크 하기 (0) | 2025.03.06 |
LocalDateTime Jackson 직렬화 오류 해결하기 (2) | 2025.01.22 |
운영 환경에서 Spring Cloud Config Server를 의존하지 않으려면 (0) | 2025.01.21 |