🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

DB NULL 처리 문제와 Wrapper 타입 적용 경험

서화 2026. 3. 9. 23:28

프로젝트 이관 작업을 진행하면서 DTO와 매핑 코드를 다시 점검하게 되었고 그 과정에서 int, boolean 같은 기본형 타입 대신 Integer, Boolean 같은 Wrapper 타입으로 통일한 부분이 있었다
처음에는 단순한 타입 변경처럼 보였지만, 실제로는 데이터 안정성과 매핑 정확도를 높이는 중요한 수정이었다.

✔️ 왜 기본형 타입이 문제였을까

기본형 타입은 null 값을 가질 수 없다
그래서 DB에서 값이 비어 있거나 NULL이 들어오는 경우, 자바에서는 이를 그대로 표현하지 못한다

예를 들어 다음과 같은 상황이 생길 수 있다

// 값이 없더라도 null을 담을 수 없음
private int accountAmount;
  • int → 값이 없더라도 0으로 처리됨
  • boolean → 값이 없더라도 false처럼 보일 수 있음

이 경우 실제 데이터가 정말 0인지, 아니면 값이 없는 상태인지 구분하기 어려워진다
따라서 데이터의 의미가 왜곡될 수 있다

✔️ Wrapper 타입으로 변경한 이유

이 문제를 해결하기 위해 DTO의 필드를 Wrapper 타입으로 변경했다

// 값이 없으면 null 상태를 유지할 수 있음
private Integer accountAmount;
  • int → Integer
  • boolean → Boolean

Wrapper 타입은 null을 그대로 담을 수 있기 때문에 DB에서 값이 없으면 자바에서도 값이 없음(null) 상태를 유지할 수 있다

이렇게 하면 다음과 같은 장점이 있다.

  • DB의 NULL 값을 안전하게 전달할 수 있음
  • 값이 없는 상태와 실제 값 0, false를 구분할 수 있음
  • 매핑 과정에서 의미가 달라지는 문제를 줄일 수 있음

실제로 개선된 점

이번 이관 작업에서는 MyBatis와 JdbcTemplate를 함께 사용하는 부분이 있었는데, 기본형 타입을 그대로 사용할 경우 DB 값이 비어 있을 때 예상하지 못한 값으로 매핑될 가능성이 있었다

Wrapper 타입으로 통일한 뒤에는 다음과 같은 점이 개선되었다

  • 매핑 안정성이 높아짐
  • NULL 처리 방식이 더 명확해짐
  • 데이터 의미를 더 정확하게 전달할 수 있게 됨

특히 이관 작업에서는 기존 DB 구조와 새 구조 사이의 차이를 맞추는 과정이 중요했기 때문에,이런 타입 정리는 단순한 문법 수정이 아니라 데이터 품질을 높이기 위한 작업이었다

정리

이관 작업 중 기본형 타입을 Wrapper 타입으로 변경한 것은 작은 수정처럼 보이지만, 실제로는 DB NULL 처리와 매핑 안정성을 높이기 위한 중요한 개선이었다

기본형 타입은 편리하지만 값이 없는 상태를 표현하지 못하고, Wrapper 타입은 null을 그대로 유지할 수 있어서 데이터 의미를 더 정확하게 다룰 수 있다.

결과적으로 MyBatis와 JdbcTemplate 환경에서 매핑 오류 가능성을 줄이고, 이관 이후에도 데이터를 더 안정적으로 처리할 수 있게 되었다.

'🐢 꼬부기 LV.1 | 개념•기초 > 💧물대포(핵심개념)' 카테고리의 다른 글

[회고]면접 질문 복기 와 반성  (0) 2026.03.11
JPA  (0) 2026.03.10
BCrypt 개념과 구조  (0) 2026.03.08
AJAX와 fatch  (0) 2026.03.07
SQLD 자격검정 실전문제 과목3 11~19  (0) 2026.03.01