강의

멘토링

커뮤니티

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

katastrophe님의 프로필 이미지
katastrophe

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Orders Microservice - 개요

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

작성

·

43

0

안녕하세요. user, catalog, order 를 보면 엔티티에서 pk 대신 별도의 유니크키를 사용하고 있는데, 특별한 이유가 있을까요 ??

이 별도의 유니크 키가 어그리거트 루트로 사용되는걸까요 ??

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

두 속성 모두 데이터의 유일성(Uniqueness)을 보장하는 역할을 하지만, 목적과 적용되는 레이어가 완전히 다릅니다. @Id는 엔티티(객체) 식별을 위한 JPA/객체 지향 레벨의 설정인 반면, unique = true는 데이터베이스(테이블) 제약 조건을 위한 설정입니다.

@Id는 해당 엔티티 객체를 영속성 컨텍스트(Persistence Context) 내에서 고유하게 구별하는 유일한 기준입니다. JPA의 모든 기능(저장, 조회, 수정, 삭제)은 이 기본 키를 기반으로 수행됩니다. 반면, Unique 속성은 해당 컬럼의 값이 테이블 내에서 중복되는 것을 물리적으로 방지하여 데이터의 무결성을 보장합니다만, 엔티티의 식별자가 아니며, 필요에 따라 여러 컬럼에 적용할 수 있습니다. (예: 사용자 ID, 이메일, 주민등록번호 등)

감사합니다.

0

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

pk 외 별도의 id를 부여하는 이유에 대한 질문에 대해 설명드리겠습니다. 데이터베이스에서는 기본 키(primary key, pk)를 설정하여 각 레코드의 고유성을 보장합니다. 그러나 엔티티에서 추가적으로 유니크한 키를 사용하는 이유는 여러 가지가 있을 수 있습니다:

  1. 비즈니스 아이디: 시스템 내부적으로 유지되어야 하는 식별자(pk)와 외부 시스템이나 클라이언트에게 노출해도 괜찮은 식별자(별도의 유니크 키)를 나누기 위해서입니다. pk는 내부적으로만 사용하고 외부 노출에는 별도의 UUID 등을 사용하는 경우가 많습니다.

  2. 데이터베이스 마이그레이션이나 시스템 통합: 기존 시스템에서 새로운 시스템으로 데이터를 이관할 때 원래 시스템의 pk와 충돌을 피하기 위해 별도의 유니크 키를 도입하기도 합니다.

  3. 유지보수성 및 시스템 확장성: 별도의 유니크 키를 사용함으로써 시스템 확장이나 변경이 필요한 경우 유연하게 대처할 수 있습니다.

  4. 어그리게이트 루트: DDD(도메인 주도 개발) 관점에서 어그리게이트 루트를 식별하는 식별자로 별도의 키를 사용하여, 해당 어그리게이트의 모든 구성 요소가 동일한 유니크 키 하에 관리될 수 있도록 하는 경우도 있습니다.

관련하여 더 깊이 있는 논의나 예제를 원하신다면, 아래 링크의 기존 질문과 답변을 참고하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

katastrophe님의 프로필 이미지
katastrophe

작성한 질문수

질문하기