강의

멘토링

로드맵

Inflearn brand logo image

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

cookie는 먹는건가요님의 프로필 이미지
cookie는 먹는건가요

작성한 질문수

비전공자도 이해할 수 있는 DB 설계 입문/실전

PK(기본키), FK(외래키)

언제 어떤 형식의 PK를 선택하는지에 대한 기준이 있을까요??

작성

·

63

·

수정됨

0

안녕하세요! 강사님!

 

PK를 주로 Auto Increment 또는 UUID로 설정한다고 하셨는데 이를 선택하는 기준이 어떻게 되나요?

 

만약 posts의 id를 Auto Increment로 설정해도 괜찮을 것 같고 /posts/:id로 접근해야 해서 URL이 복잡하지 않게 되니까 이 상황에서는 Auto Increment가 더 적절할 것 같다는 생각도 들어요.

users의 id의 경우에는 예측이 불가능하게 만들어서 보안에 조금 더 신경쓸 수 있지 않을까? 하는 생각도 하였습니다.

 

이런 상황이 분명 많이 발생할 것 같은데 강사님의 기준 또는 현업에서의 기준이 있는지 궁금해요!

답변 2

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 JunYoung님! 좋은 질문이네요 :)

 

이 부분은 실무에서 정말 자주 고민하게 되는 부분이라 한 번 정리해볼게요~!

먼저 Auto Increment의 경우 JunYoung님 말씀대로 사람이 보기에도 편하고

URL 경로를 깔끔하게 쓸수 있다는 특징이있어요 ~

그래서 게시글, 댓글, 주문과 같은 단순히 순서대로 생성되는 데이터에 주로 사용해요 !

추가로 이런 데이터들은 양이 많아 검색 성능과 인덱싱 효율이 중요해서

주로 Auto Increment를 사용해요 !!

 

반면에 UUID의 경우

랜덤값이라서 예측이 어렵다는 특징이 있어요 ~

그래서 보안상 예측을 어렵게 하고 싶은 경우 /users/:uuid 형태로 활용할 수 있죠 !

하지만 예측이 어려운 만큼 인덱스 크기가 커져 성능은 다소 떨어질수 있어요 !

 

또한 ID를 무조건 외부에 노출해야하는건 아니며, 실제 서비스에서는 ID 값을 노출하지 않고 ,

Slug나 Hash 등을 만들어서 URL로 노출하기도 해요!!

추가로 보안에 더 신경을 쓰기 위해 API 설계에서 적절한 권한 체크와

인증 처리가 더 중요한 경우도 있어요 !!

 

그런데 /posts/:id로 구성해서 id가 예측된다고 하더라도

보안에 크게 치명적인 경우가 잘 없기 때문에

주로 실무에서는 우선 'Auto Increment'를 많이쓰고,

id가 노출됨으로써 보안이 걱정될만한 요소가 있을 때는

랜덤값(UUID, Hash, Slug 등)을 고려해보기도 해요 ~

또 궁금한 점 생기시면 편하게 질문 주세요! 😊

0

안녕하세요, 인프런 AI 인턴입니다. JunYoung님께서 질문해주신 “Primary Key(PK) 선택 시 Auto Increment와 UUID 중 어떤 것을 선택해야 하는지”에 대한 기준에 대해 답변 드리겠습니다.

Auto Increment vs UUID 선택 기준

  1. Auto Increment:

    • 장점: 간단하게 증가하는 숫자 형태로, 순서 기반으로 정렬 및 검색이 빠릅니다. 데이터베이스가 이를 자동으로 관리해주기 때문에 개발이 용이합니다.
    • 단점: 예측이 가능하여 보안 측면에서 상대적으로 취약할 수 있습니다. 병렬로 삽입 작업을 수행하는 경우에는 번호 충돌 가능성이 존재할 수 있습니다.
    • 적합한 상황: 일반적으로 사용하는 경우, 특히 데이터가 상대적으로 작고 관리가 쉬운 경우에 적합합니다. 예를 들어, 로그인 시스템 등의 사용자 친화적이거나 작은 프로젝트에서 유용합니다.
  2. UUID:

    • 장점: 전역적으로 고유한 식별자를 제공하며, 데이터베이스 외부에서도 유일성을 보장합니다. 데이터를 병렬로 삽입할 때 충돌 우려가 거의 없습니다.
    • 단점: 크기가 크고, 문자열로 인해 인덱싱 속도가 느려질 수 있습니다. 가독성이 떨어지고, URL 등에 사용 시 복잡해질 수 있습니다.
    • 적합한 상황: 보안이 중요하고, 데이터가 분산되어 있어도 유일성과 무결성이 요구되는 시스템에서 적합합니다. 예를 들어, 대규모 분산 시스템이나 여러 기기 간 동기화가 필요한 경우에 사용됩니다.

질문에서는 다음과 같은 기준을 고려할 수 있습니다:

  • 보안이 중요한가?: UUID가 적합할 수 있습니다.
  • 데이터베이스의 성능과 관리 용이성이 우선시되는가?: Auto Increment가 적합할 수 있습니다.
  • 데이터의 규모와 동시성 처리 요구는 어떤가?: 큰 규모와 동시성을 요구하는 경우 UUID가 더 안전할 수 있습니다.

관련 질문과 답변을 통해 아직 고민이 남아 있다면 다음 링크에서 유사한 사례를 확인해보실 수 있습니다:

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

cookie는 먹는건가요님의 프로필 이미지
cookie는 먹는건가요

작성한 질문수

질문하기