강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jyoung22
jyoung22

câu hỏi đã được viết

Nhập môn và thực hành thiết kế DB dành cho cả người không chuyên

PK (Khóa chính), FK (Khóa ngoại)

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

Viết

·

86

·

Đã chỉnh sửa

0

안녕하세요! 강사님!

 

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

 

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

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

 

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

Câu trả lời 2

1

jscode님의 프로필 이미지
jscode
Người chia sẻ kiến thức

안녕하세요 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가 더 안전할 수 있습니다.

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

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

Hình ảnh hồ sơ của jyoung22
jyoung22

câu hỏi đã được viết

Đặt câu hỏi