시퀀스(Sequence) 마스터 — 직접 제어하고 재사용하고 공유하는 법
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL 시퀀스에서 트랜잭션을 ROLLBACK하면 시퀀스 값은 어떻게 되는가?
💡 시퀀스는 트랜잭션과 독립적으로 동작합니다. ROLLBACK 후에도 nextval()로 소비된 값은 되돌아오지 않아 gap이 발생합니다. 이는 동시성 보장을 위한 의도적 설계입니다.
Q2. currval('seq_name')을 처음 호출하는 세션에서 실행하면?
💡 currval()은 현재 세션에서 nextval()을 한 번 이상 호출한 후에만 사용할 수 있습니다. 다른 세션의 nextval 결과는 보이지 않으므로, 해당 세션에서 nextval을 먼저 호출해야 합니다.
Q3. setval('seq', 100, false)의 의미는?
💡 setval(seq, val, is_called)에서 is_called=false는 '아직 이 값이 반환되지 않음'을 의미합니다. 따라서 다음 nextval()은 100을 반환합니다. is_called=true(기본값)이면 다음 nextval은 101을 반환합니다.
Q4. CACHE 50으로 설정된 시퀀스에서 서버가 재시작되면?
💡 시퀀스의 CACHE는 메모리에 미리 할당된 값 묶음입니다. 서버 재시작 시 메모리가 초기화되어 캐시된 값이 사라지고, 마지막으로 디스크에 기록된 값 이후부터 시작합니다. 최대 CACHE-1개의 값이 손실될 수 있습니다.
Q5. 여러 테이블이 하나의 시퀀스를 공유할 때의 장점은?
💡 공유 시퀀스를 사용하면 여러 테이블에 걸쳐 전역적으로 중복되지 않는 ID를 생성할 수 있습니다. 이는 이벤트 소싱, 감사 로그 등에서 여러 소스를 단일 스트림으로 통합할 때 유용합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.