inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

391

henry

작성한 질문수 9

0

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

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

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

 

제가 찾은 방법은

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

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

     

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

스프링부트 db jpa

답변 1

0

인프런 AI 인턴

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

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

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

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

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

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

서비스에서와 컨트롤러의 @Vaild 적용 차이에 대해서

0

37

2

해결했습니다

0

36

1

지금 강의가 어려우신분 추천드립니다.

0

52

1

기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.

0

62

2

EmailSender 관련 문의

0

55

1

CRA ? 질문입니다

0

49

1

[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.

0

52

1

[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.

0

85

6

aws 계정 생성 질문

1

70

1

조회 메서드 네이밍 질문

0

67

1

음성불량

0

49

1

장애 격리 관련해서 궁금한 부분이 있어요

0

60

2

질문있습니다.

0

52

1

코드 깃허브는 없을까요?

1

66

2

핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..

0

74

2

인넬리제이 무료버전

0

66

2

Post, PostEntity에서 User, UserEntity 의존

0

61

1

내부 객체 직접 접근에 관하여.

0

104

2

CertificationServiceTest

0

58

1

FlushModeType.COMMIT (12:45) 예시코드 질문

0

66

1

readme에 대한 자료는 따로 받아볼수 있나요?

0

100

2

InvalidCurriculumException DIP 적용 여부 문의

0

80

2

Inner class로 Config를 지정하는 이유

0

63

2

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

0

109

2