0Pricing
SQL Academy · 강의

키와 형식 선택

BIGSERIAL과 UUID 기본 키 중에서 선택하고 TEXT와 VARCHAR(n) 중 적절한 형식을 결정하며 모든 열에 알맞은 형식을 선택합니다.

키와 형식 선택은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

기본 키 선택하기

실제로 선택할 수 있는 방법은 세 가지입니다:

  1. BIGSERIAL — 단조롭게 증가하는 64비트 정수
  2. UUID — 전역적으로 고유한 128비트 값
  3. 자연 키 — 실제 세계의 식별자(이메일, ISBN)

BIGSERIAL이 유리한 경우

대부분의 애플리케이션에서 기본적으로 선택할 수 있습니다:

  • 작고(8바이트), 인덱스가 빠르며, 캐시 효율이 좋습니다
  • 단조롭게 증가하므로 최근 데이터가 인덱스의 끝에 모입니다
  • URL에서 읽기 쉽습니다(예: /posts/42)

UUID가 유리한 경우

다음과 같은 경우 UUID를 선택하세요:

  • 전역적으로 고유한 ID가 필요한 경우(여러 데이터 센터, 오프라인 우선 애플리케이션)
  • URL에서 ID를 통해 비즈니스 규모가 노출되는 것을 원하지 않는 경우
  • INSERT 전에 클라이언트 측에서 ID를 생성하려는 경우

비용은 16바이트입니다(BIGINT의 8바이트와 비교). 또한 v4 UUID는 인덱스에 무작위로 삽입됩니다.

자연 키가 위험한 이유

이메일은 바뀝니다. 상품 식별 코드는 이름이 바뀔 수 있습니다. 국가 코드는 분리되기도 합니다. PK에는 대리 키를 사용하고 자연 키에는 UNIQUE 제약 조건을 설정하세요.

열 유형: 문자열

대부분의 텍스트 열에는 다음을 사용합니다:

  • VARCHAR(n) — 엄격한 최대 길이가 있을 때(이메일, 코드)
  • TEXT — 자유 형식의 긴 콘텐츠
  • CITEXT — 비교 시 항상 대소문자를 구분하지 않아야 할 때(이메일!)

열 유형: 숫자

숫자 열에는 다음을 사용합니다:

  • ID와 카운터에는 BIGINT
  • 금액에는 NUMERIC(p, s)
  • 과학 계산에만 REAL/DOUBLE PRECISION

열 유형: 시간

시간 열에는 다음을 사용합니다:

  • 이벤트에는 TIMESTAMPTZ(기본값)
  • 달력상의 날짜에는 DATE(생일, 공휴일)
  • 날짜 없이 하루 중 시간을 나타낼 때는 TIME(영업시간)

불리언과 상태

열에 앞으로 추가될 상태가 두 개보다 많다면 불리언 대신 상태 텍스트와 CHECK를 사용하는 편이 좋습니다:

-- Will probably grow:
status TEXT NOT NULL CHECK (status IN ('draft','published','archived'))

-- vs the trap of "is_published BOOLEAN" when you later need a third state.

제약 조건 함께 적용하기

모든 열에는 다음이 있어야 합니다:

  • 요구사항에 맞는 가장 좁은 유형
  • NULL에 의미가 있는 경우가 아니라면 NOT NULL
  • 대부분 같은 값이 들어가는 열이라면 DEFAULT
  • 도메인 규칙이 있다면 CHECK
  • WHERE/JOIN/ORDER에서 사용하는 열이라면 인덱스

저장 공간에 미치는 영향

좁은 유형 = 더 작은 행 = 페이지당 더 많은 행 = 더 높은 캐시 적중률입니다. TEXT를 VARCHAR(20)으로 바꾸어도 저장 공간은 절약되지 않습니다(저장 방식이 같음). BIGINT를 INT로 바꾸면 열 너비가 절반으로 줄어듭니다.

외래 키 유형은 일치해야 함

FK 열 유형은 참조하는 PK 유형과 정확히 일치해야 합니다:

-- Wrong (silently won't use the index efficiently):
user_id INT REFERENCES users(id)   -- where users.id is BIGINT

-- Right:
user_id BIGINT REFERENCES users(id)

복습

유형 선택은 설계입니다.

  • PK에는 BIGSERIAL 또는 UUID
  • 금액에는 NUMERIC
  • 이벤트에는 TIMESTAMPTZ
  • 변경될 수 있는 상태에는 TEXT와 CHECK 조합
  • 기본적으로 NOT NULL

빠른 확인

여러 시간대의 사용자에 대한 이벤트 시각을 저장하려고 합니다. 어떤 유형을 사용해야 합니까?

자주 묻는 질문

“키와 형식 선택” 강의는 무료인가요?

네 — “키와 형식 선택” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“키와 형식 선택”에서 뭘 배우나요?

BIGSERIAL과 UUID 기본 키 중에서 선택하고 TEXT와 VARCHAR(n) 중 적절한 형식을 결정하며 모든 열에 알맞은 형식을 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“키와 형식 선택” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 블로그 모델링: 사용자, 게시물, 댓글
  2. 키와 형식 선택
  3. 일반 쿼리를 위한 인덱스
  4. 테스트 데이터로 데이터베이스 초기화
← SQL Academy(으)로 돌아가기