인프런 커뮤니티 질문&답변

henry님의 프로필 이미지
henry

작성한 질문수

사용자가 기존 데이터 수정시에 null 구분 어떻게하시나요?

작성

·

253

0

회원이 회원정보를 변경하였습니다.

변경된 데이터는 "자기소개" 부분이며, 값을 비워버렸습니다.

그럼 백엔드 입장에서는 아래 두가지 경우를 어떻게 구분할 수 있을까요?

  • 이 경우 사용자가 값을 비운건지?

  • 그게 아니면, 수정을 안해서 null 인 건지

 

제가 찾은 방법은

  1. 수정시에도 모든 컬럼 갑을 받아서 기존 DB의 로우 전체를 업데이트 시킨다.

  2. 사용자가 의도적으로 필드를 비워둔 경우 null 이 아닌, null을 의미하는 다른 대체 문자를 이용한다.
    - 이 경우 null 은 필드변경이 없는 경우

     

이외에 보편적으로 이용하는 방법이나 스마트한 방법이 있을까요...?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

henry님, 사용자가 ‘자기소개’ 데이터를 변경했을 때 실제로 정보를 비워둔 것인지 아니면 수정을 하지 않아서 null인지 구분하는 문제를 고려 중이시군요. 이런 종류의 문제는 상황에 따라 다르게 접근할 수 있으며, 각각의 접근 방법에 대한 장단점을 파악하고 적절한 전략을 선택하는 것이 중요합니다.

일반적으로 말씀해주신 방법 외에도 Spring Data JDBC를 사용하는 경우 @EmbeddedonEmpty 속성을 활용하는 방법이 있습니다. 예를 들어, MyEntity 클래스에서 @Embedded(onEmpty = USE_NULL)을 사용하면, null인 경우 해당 엔티티의 embeddedEntitynull로 설정할 수 있습니다. 반대로 onEmpty = USE_EMPTY 옵션을 사용하면 결과 집합에서 null 값을 허용하는 생성자를 사용하여 새 인스턴스를 생성하게 할 수 있습니다. 이 방식을 사용하면 사용자가 값을 의도적으로 비워둔 경우와 수정하지 않아서 null인 경우를 프로그램 내에서 구분할 수 있습니다.

두 번째 방법으로는 사용자가 선택적으로 데이터를 비운 경우를 처리하기 위해 ‘대체 문자’ 또는 특정 값을 사용하기도 합니다. 예를 들어 ‘사용자가 정보를 제공하지 않음’을 나타내는 특수한 문자열이나 표시를 데이터베이스에 저장하여, 이를 통해 필드의 null 값이 의도적으로 비워진 것인지 아니면 수정되지 않은 것인지 구분하는 방법도 있습니다.

이 방법들 외에도 애플리케이션 또는 DB 레벨에서 null 값을 처리하는 추가적인 로직을 구현할 수도 있습니다. 예를 들어, DTO(Data Transfer Object)에서 해당 필드가 변경되었는지 추적하는 플래그를 둘 수도 있습니다. 사용자가 양식을 제출할 때 해당 플래그를 업데이트하여, 실제로 필드를 비운 것인지 아니면 수정하지 않은 경우인지를 구분하는 방법이 될 수 있습니다.

결론적으로, 사용 사례와 기대하는 동작을 토대로 적절한 접근 방법을 선택하는 것이 좋으며, 각 경우의 복잡성과 구현상의 제약을 고려해야 합니다.

henry님의 프로필 이미지
henry

작성한 질문수

질문하기