• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

멤버 클래스 설계할 때 db 칼럼 구성에 대해 궁금증이 생겼습니다!

21.01.10 17:04 작성 조회수 163

0

안녕하세요! 영한님! 강의를 따라가면서 db칼럼 구성에 대해 궁금증이 생겨 이렇게 질문을 올려봅니다!

강의에서 Member 클래스에 Long id, String name를 지정하셨고 db에도 저런 형식으로 칼럼이 형성될텐데(아직 예제만들기 강의를 듣고있습니다!) 여기서 궁금증이 생겼습니다!

name이 같은 경우가 존재 할 수 있다면 고유 id를 지정해주는게 맞겠지만,

일반적으로 사이트에서 보통은 아이디 중복검사를 하게끔 되어있는데

중복검사를 해서 name을 중복되지 않게 데이터를 입력을 하면

name이 같지 않은 회원들로만 이루어져있으니 Long id 항목은 안 필요하지 않을까? 라는 생각을 문득 하게 되었습니다!ㅠ

아니라면 제가 Long id 인덱스가 필요한 이유를 정확히 깨닫지 못하고 있는 것 같습니다!ㅠ

혹시 실무에서 회원가입을 할 때 아이디 중복 검사를 하는 경우에도 db에서 고유 id 칼럼을 또 따로 지정하는지 궁금합니다!

만약에 name에 대한 중복검사를 해서 name이 같지 않은 경우에서도 고유 id를 또 지정한다면 그 이유가 너무 궁금합니다!

실력이 아직 많이 부족하지만 입문 강의부터 지금 열심히 따라가보고 있습니다! 좋은 강의 제공해주셔서 너무 감사드리고 앞으로도 좋은 강의 많이 부탁드립니당~~!!!><

답변 2

·

답변을 작성해보세요.

1

heryms님의 프로필

heryms

질문자

2021.01.11

답변 정말 감사합니다! 강의 들으면서 웹사이트 만들어보고싶어서 설계 중이었는데 궁금했던 게 속 시원하게 풀렸어요!!!^^ 강의 빨리 다 듣고 jpa 책도 사서 jpa 강의 들으면서 공부해봐야겠어요!! 열심히 해보겠습니다! 감사해요~~!!!><

0

안녕하세요. heryms님 좋은 질문입니다.

자바 ORM 표준 JPA 프로그래밍 책에 제가 남겨둔 내용으로 답변을 대신합니다^^

권장하는 식별자 선택 전략

데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다.

1. null값은 허용하지 않는다.

2. 유일해야 한다.

3.변해선안된다.

테이블의 기본 키를 선택하는 전략은 크게 2가지가 있다.

자연 키(natural key)

-비즈니스에의미가있는키

- 예: 주민등록번호, 이메일, 전화번호

대리 키(surrogate key)

- 비즈니스와 관련 없는 임의로 만들어진 키, 대체 키로도 불린다. - 예: 오라클 시퀀스, auto_increment, 키생성 테이블 사용

자연 키보다는 대리 키를 권장한다

자연 키와 대리 키는 일장 일단이 있지만 될 수 있으면 대리 키의 사용을 권장한다. 예를 들어 자연 키인 전화번호를 기본 키로 선택한다면 그 번호가 유일할 수는 있지만, 전화번호가 없을 수도 있고 전화번호가 변경될 수도 있다. 따라서 기본 키로 적당하지 않다. 문제는 주민등록번호처럼 그럴듯 하게 보이는 값이다. 이 값은 null이 아니고 유일하며 변하지 않는다는 3가지 조건을 모두 만족하 는 것 같다. 하지만 현실과 비즈니스 규칙은 생각보다 쉽게 변한다. 주민등록번호조차도 여러 가지 이유로 변경될 수 있다.

비즈니스 환경은 언젠가 변한다

나의 경험을 하나 이야기하겠다. 레거시 시스템을 유지보수할 일이 있었는데, 분석해보니 회원 테 이블에 주민등록번호가 기본 키로 잡혀 있었다. 회원과 관련된 수많은 테이블에서 조인을 위해 주 민등록번호를 외래 키로 가지고 있었고 심지어 자식 테이블의 자식 테이블까지 주민등록번호가 내려가 있었다. 문제는 정부 정책이 변경되면서 법적으로 주민등록번호를 저장할 수 없게 되면서 발생했다. 결국 데이터베이스 테이블은 물론이고 수많은 애플리케이션 로직을 수정했다. 만약 데 이터베이스를 처음 설계할 때부터 자연 키인 주민등록번호 대신에 비즈니스와 관련 없는 대리 키 를 사용했다면 수정할 부분이 많지는 않았을 것이다.

기본 키의 조건을 현재는 물론이고 미래까지 충족하는 자연 키를 찾기는 쉽지 않다. 대리 키는 비 즈니스와 무관한 임의의 값이므로 요구사항이 변경되어도 기본 키가 변경되는 일은 드물다. 대리 키를 기본 키로 사용하되 주민등록번호나 이메일처럼 자연 키의 후보가 되는 컬럼들은 필요에 따 라 유니크 인덱스를 설정해서 사용하는 것을 권장한다.

JPA는 모든 엔티티에 일관된 방식으로 대리 키 사용을 권장한다

비즈니스 요구사항은 계속해서 변하는데 테이블은 한 번 정의하면 변경하기 어렵다. 그런 면에서 외부 풍파에 쉽게 흔들리지 않는 대리 키가 일반적으로 좋은 선택이라 생각한다.

감사합니다.