| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BOJ
- 헥사고날
- 클린 아키텍처
- Domain-Driven
- EC2
- Context map
- DTO Projection
- Spring
- 백준
- android studio
- rabbitmq
- Ubiquitous Language
- JPA
- Apache Kafka
- 컨텍스트 맵
- 공통 언어
- hexagonal
- subdomain
- Rabbit MQ
- spring boot
- Spring Cloud
- kafka
- 이벤트 기반
- 안드로이드 스튜디오
- event
- Hexagonal Architecture
- Thymeleaf
- clean architecture
- 헥사고날 아키텍처
- Domain Driven
Archives
- Today
- Total
취미겸생업
[Spring boot] Null과 Builder 본문
- 프론트, 백엔드 로그인 연동 과정에서 회원가입과 로그인 및 현재 사용자 정보까지 문제 없이 연동함
- 프론트에서 name 필드에 null이 반환된 것을 UserInfo 클래스로 역직렬화 하는 과정에서 에러가 발생 (Flutter의 null-safety가 없었다면 아마 발견하지 못했을 것)
- 확인해보니 회원가입 시에 name 필드를 받기는 하였으나 UserInfo를 DB에 영속화 하는 과정에서 name 필드 set 코드를 누락함
- builder 패턴을 사용하다보니 컴파일 타임에서 잡지 못했고, DB에서 제약조건으로 not null 또한 들어가있지 않는 실수를 한 것
- 실수한 부분
- DB 중요한 필드에 제약조건으로 Not Null을 걸지 않음
- Not Null을 걸었더라도 런타임에서 우연히 발견되지 않는다면 치명적이었을 것
- 컴파일 타임에서 이런 치명적인 논리적 오류를 방지할 수 있는 대책을 세워야 함
- Builder 패턴을 포기하기엔 코드 가독성과 일관성을 쉽게 포기할 수 없음
- 엔티티 필드 Not null과 빌더 기본값을 사용하자!
@Column(name = "difficulty", nullable = false)
@Builder.Default
private double difficulty = 0.5;'IT > Spring Boot' 카테고리의 다른 글
| [Spring boot] IntelliJ Thymeleaf Live Reloading (0) | 2026.04.12 |
|---|---|
| [Spring boot] Kakao OAuth 소셜로그인 수동 구현 (0) | 2026.04.01 |
| [Spring boot] Unit Test에 관해 (0) | 2025.04.10 |
| [Spring Boot] 스프링부트 리팩토링 팁 (0) | 2024.09.27 |
| [Spring Boot] 스프링 부트 SpEL(Spring Expression Language) (0) | 2024.09.27 |
