인프런 커뮤니티 질문&답변
혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??
작성
·
43
0
안녕하세요. user, catalog, order 를 보면 엔티티에서 pk 대신 별도의 유니크키를 사용하고 있는데, 특별한 이유가 있을까요 ??
이 별도의 유니크 키가 어그리거트 루트로 사용되는걸까요 ??
답변 2
0
안녕하세요, 이도원입니다.
두 속성 모두 데이터의 유일성(Uniqueness)을 보장하는 역할을 하지만, 목적과 적용되는 레이어가 완전히 다릅니다. @Id는 엔티티(객체) 식별을 위한 JPA/객체 지향 레벨의 설정인 반면, unique = true는 데이터베이스(테이블) 제약 조건을 위한 설정입니다.
@Id는 해당 엔티티 객체를 영속성 컨텍스트(Persistence Context) 내에서 고유하게 구별하는 유일한 기준입니다. JPA의 모든 기능(저장, 조회, 수정, 삭제)은 이 기본 키를 기반으로 수행됩니다. 반면, Unique 속성은 해당 컬럼의 값이 테이블 내에서 중복되는 것을 물리적으로 방지하여 데이터의 무결성을 보장합니다만, 엔티티의 식별자가 아니며, 필요에 따라 여러 컬럼에 적용할 수 있습니다. (예: 사용자 ID, 이메일, 주민등록번호 등)
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
pk 외 별도의 id를 부여하는 이유에 대한 질문에 대해 설명드리겠습니다. 데이터베이스에서는 기본 키(primary key, pk)를 설정하여 각 레코드의 고유성을 보장합니다. 그러나 엔티티에서 추가적으로 유니크한 키를 사용하는 이유는 여러 가지가 있을 수 있습니다:
비즈니스 아이디: 시스템 내부적으로 유지되어야 하는 식별자(pk)와 외부 시스템이나 클라이언트에게 노출해도 괜찮은 식별자(별도의 유니크 키)를 나누기 위해서입니다. pk는 내부적으로만 사용하고 외부 노출에는 별도의 UUID 등을 사용하는 경우가 많습니다.
데이터베이스 마이그레이션이나 시스템 통합: 기존 시스템에서 새로운 시스템으로 데이터를 이관할 때 원래 시스템의 pk와 충돌을 피하기 위해 별도의 유니크 키를 도입하기도 합니다.
유지보수성 및 시스템 확장성: 별도의 유니크 키를 사용함으로써 시스템 확장이나 변경이 필요한 경우 유연하게 대처할 수 있습니다.
어그리게이트 루트: DDD(도메인 주도 개발) 관점에서 어그리게이트 루트를 식별하는 식별자로 별도의 키를 사용하여, 해당 어그리게이트의 모든 구성 요소가 동일한 유니크 키 하에 관리될 수 있도록 하는 경우도 있습니다.
관련하여 더 깊이 있는 논의나 예제를 원하신다면, 아래 링크의 기존 질문과 답변을 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





