ALTER TABLE 무중단 전략 — 운영 중 컬럼 추가·삭제·타입 변경
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL 11+에서 DEFAULT 값이 있는 컬럼을 ALTER TABLE로 추가할 때의 동작은?
💡 PostgreSQL 11부터 DEFAULT 값이 있는 컬럼 추가는 메타데이터 변경만으로 완료됩니다. 기존 행에 접근할 때 DEFAULT 값을 동적으로 반환하므로 테이블 재작성(재쓰기)이 없습니다. 대용량 테이블에서도 즉시 완료됩니다.
Q2. 운영 중인 대용량 테이블에 인덱스를 추가할 때 다운타임을 피하려면?
💡 CREATE INDEX CONCURRENTLY는 강한 잠금 없이 인덱스를 생성합니다. 일반 CREATE INDEX보다 2-3배 더 오래 걸리지만 DML(INSERT/UPDATE/DELETE)을 차단하지 않아 운영 중 사용 가능합니다.
Q3. 프로덕션 환경에서 ALTER TABLE 실행 전 설정해야 하는 가장 중요한 옵션은?
💡 lock_timeout을 설정하면 지정된 시간 내에 잠금을 획득하지 못할 경우 자동으로 포기합니다. DDL이 무한정 대기하며 다른 쿼리를 차단하는 상황을 방지할 수 있습니다.
Q4. 기존 테이블에 NOT NULL 컬럼을 무중단으로 추가하는 올바른 순서는?
💡 올바른 순서: ①NULL 허용 컬럼 추가 → ②기존 행 데이터 채우기 → ③ADD CONSTRAINT CHECK NOT VALID → ④VALIDATE CONSTRAINT → ⑤SET NOT NULL → ⑥DROP CONSTRAINT. NOT VALID는 기존 행 검증을 건너뛰어 잠금 시간을 최소화합니다.
Q5. CREATE INDEX CONCURRENTLY 실행 중 실패하면 어떤 상태가 되는가?
💡 CONCURRENTLY 인덱스 생성 실패 시 INVALID 상태의 인덱스가 남습니다. 쿼리 플래너가 사용하지 않지만 공간을 차지하므로 DROP INDEX CONCURRENTLY로 삭제 후 재시도해야 합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.