TechBridge

PK 전략 대전 — serial vs BIGSERIAL vs UUID vs ULID vs IDENTITY

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. SERIAL과 GENERATED AS IDENTITY의 차이점으로 옳은 것은?
💡 GENERATED AS IDENTITY는 SQL:2003 표준입니다. SERIAL은 PostgreSQL 고유의 편의 문법으로 내부적으로 SEQUENCE를 생성하고 DEFAULT로 연결합니다. 신규 프로젝트에서는 IDENTITY 사용을 권장합니다.
Q2. UUID v4를 대규모 테이블의 PK로 사용했을 때 발생하는 주요 성능 문제는?
💡 UUID v4는 완전 무작위값으로, B-Tree 인덱스에 순차적으로 삽입되지 않아 페이지 분열이 빈번합니다. 대규모 INSERT 워크로드에서 성능이 저하됩니다. UUID v7이나 ULID(정렬 가능)로 해결할 수 있습니다.
Q3. GENERATED ALWAYS AS IDENTITY 컬럼에 직접 값을 삽입하려면?
💡 GENERATED ALWAYS AS IDENTITY 컬럼에 직접 값을 삽입하려면 INSERT ... OVERRIDING SYSTEM VALUE를 사용해야 합니다. 유연성이 필요하면 GENERATED BY DEFAULT를 사용하세요.
Q4. 외부 API에 PK를 노출해야 하는 경우, 가장 권장되는 설계는?
💡 BIGINT IDENTITY는 순차값이라 레코드 수 유추, 보안 문제가 있습니다. 하이브리드 구조(내부 BIGINT + 외부 UUID)를 사용하면 성능(BIGINT JOIN)과 보안(UUID 노출)을 동시에 확보할 수 있습니다.
Q5. UUID를 저장하는 올바른 컬럼 타입은?
💡 PostgreSQL의 UUID 타입은 내부적으로 16바이트로 저장되어 VARCHAR(36)의 36바이트보다 효율적입니다. UUID 형식 유효성 검사, 비교 연산 최적화 등의 혜택도 있습니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.