Skip to content

[Architecture]: PK(기본키) 전략 및 보안 식별자 설계 #1

Description

@devikae

Package Scope

  • Add to an existing package
  • New package

Package name: backend

Overview

단순 AUTO_INCREMENT 사용 시 발생하는 보안 문제(ID 추측을 통한 크롤링 테러, 회원 수 노출)를 방지하기 위한 PK 보안 전략을 정립합니다.

Describe the solution you'd like

1. TSID 대안 고민과 한계

  • TSID(시간정렬 정수)는 보안과 인덱스 속도가 뛰어나 고민을 진행함.
  • 그러나 서버 시계 역전(Clock Skew) 시 발생할 수 있는 DB 유니크 중복 충돌 위험 및 자바 JPA isNew() 판정 관련 쿼리 오버헤드가 존재하는 한계가 있음.

2. 최종 결정 전략

  • DB 내부 PK: DB 조인 및 인덱스 성능 최적화를 위해 8바이트 정수 id (BIGINT AUTO_INCREMENT)를 내부용으로 사용.
  • 외부 노출 식별자: API/URL 노출 시에는 해커의 ID 추측 및 크롤링 테러를 차단하기 위해 36자리 public_id (UUID)를 별도로 사용.
  • 중계 테이블: 복합 PK 사용 시 발생하는 JPA 복합키 클래스 파편화를 방지하기 위해 단일 대리키 id (PK) + UNIQUE KEY 제약조건 적용.

Additional context

  • 외부 식별자 public_id 적용을 통해 내부 DB 성능과 외부 보안을 동시에 확보함.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions