Application Servers & Java

JDBC-10005: NOT NULL 제약 조건 위반 – 필수 컬럼 누락 오류

midworker 2025. 5. 21. 22:34
반응형

Spring + JDBC 기반 애플리케이션에서 다음과 같은 예외가 발생하는 경우가 있습니다.


에러 메시지

org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is org.springframework.jdbc.UncategorizedSQLException: 
### Error updating database.  
Cause: java.sql.SQLException: JDBC-10005: NOT NULL constraint violation ('schema_name'.'table_name'.'column_name').
### Cause: java.sql.SQLException: JDBC-10005: NOT NULL constraint violation ('schema_name'.'table_name'.'column_name').

예외 의미

이 예외는 DB 테이블의 특정 컬럼이 NOT NULL 제약 조건을 가지고 있는데,
애플리케이션에서 해당 값을 null 또는 비워둔 상태로 INSERT/UPDATE 시도할 경우 발생합니다.


주요 원인

원인 설명
DTO 또는 VO 객체의 필드 값 누락 Controller → Service → DAO 과정 중 필드 누락
Mapper XML 또는 PreparedStatement에서 해당 파라미터 미전달 MyBatis 또는 JDBC에서 파라미터 누락
기본값 없이 DB 컬럼에 null 전달 DB 제약 조건 위반

해결 방법

1. 해당 컬럼 값이 항상 전달되는지 확인

  • Controller → Service → DAO 흐름에서 해당 필드가 정상 전달되는지 디버깅
  • 예: column_name 필드가 null인지 체크

2. Mapper 또는 SQL 쿼리 확인

<update id="updateData">
  UPDATE table_name
  SET column_name = #{columnName}
</update>

#{columnName}에 해당하는 파라미터가 전달되지 않으면 오류 발생

3. DB 컬럼에 기본값 설정 고려 (단, 비즈니스 로직에 따라 주의)

ALTER TABLE table_name
MODIFY column_name VARCHAR2(20) DEFAULT 'N/A' NOT NULL;

결론

이 오류는 단순한 SQL 문법 오류가 아니라, DB 구조와 애플리케이션 로직 간 데이터 정합성 문제입니다.
특히 NOT NULL 제약 조건이 설정된 컬럼에는 항상 유효한 값이 입력되도록 코드를 설계해야 합니다.


반응형