inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

382

henry

작성한 질문수 9

0

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

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

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

 

제가 찾은 방법은

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

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

     

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

스프링부트 db jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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)에서 해당 필드가 변경되었는지 추적하는 플래그를 둘 수도 있습니다. 사용자가 양식을 제출할 때 해당 플래그를 업데이트하여, 실제로 필드를 비운 것인지 아니면 수정하지 않은 경우인지를 구분하는 방법이 될 수 있습니다.

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

Inner class로 Config를 지정하는 이유

0

29

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

49

2

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

32

1

리뉴얼 시기

0

53

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

57

3

설계 트레이드 오프 링크 접속 안됨

0

85

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

46

1

service-discovery 프로세스 가동 이유

0

51

1

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

47

1

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

134

2

h2 database

2

59

2

Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?

0

117

2

Querydsl 설정 할때 - run and test 다르게 설정 할때? 질문

0

61

1

new 패키지명.Dto명 생략가능

0

76

2

docker 마지막 실습(app(flask) + mysql) 연동 과정

1

69

2

변경감지(더티체킹) 이후 플러시할 경우의 쿼리

0

73

1

단일 테이블 시 null 값과 연관관계 필요성 질문

0

65

1

SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류

0

65

1

aws 관련 질문드립니다.

1

70

3

setter 사용하지 않기

0

61

1

세션을 제대로 이해한게 맞는지 궁금합니다

0

58

1

안녕하세요 토비님 혹시 완성된 코드의 repository 주소는 없을까요?

0

127

2

자막 오타 제보

0

54

1

rabbitmq에 configservice 연결에 대해 질문있습니다.

0

65

1