0Pricing
JavaScript Academy · 강의

버전 관리와 업그레이드

버전 변경에 따라 스키마를 마이그레이션합니다.

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

버전 관리가 필요한 이유

앱은 계속 발전합니다. 저장소나 인덱스를 추가하거나 데이터 구조를 변경할 수 있습니다. IndexedDB는 버전 번호를 사용해 모든 사용자의 브라우저에서 이러한 스키마 변경을 안전하게 관리합니다.

버전 번호

open의 두 번째 인수는 양의 정수인 버전입니다. 버전 번호를 높이면 브라우저에 스키마가 변경되었음을 알리고 업그레이드를 실행합니다.

// Bumping from 1 to 2 triggers onupgradeneeded:
const request = indexedDB.open('app-db', 2);

업그레이드 버전은 낮출 수 없습니다

버전은 높이기만 할 수 있습니다. 저장된 버전보다 낮은 번호로 열면 오류가 발생합니다. 절대로 버전을 낮추지 마세요.

// If the stored DB is version 3:
const req = indexedDB.open('app-db', 2);
req.onerror = () => console.log('cannot open older version');

oldVersion 및 newVersion

onupgradeneeded 안에서 이벤트는 oldVersion과 newVersion을 제공합니다. 아직 실행되지 않은 마이그레이션만 적용하는 데 사용하세요.

request.onupgradeneeded = (e) => {
  console.log('upgrading from', e.oldVersion, 'to', e.newVersion);
};

점진적 마이그레이션

견고한 패턴은 oldVersion을 사용하는 폴스루입니다. 각 블록이 이전 블록을 기반으로 동작하므로 어떤 이전 버전을 사용하는 사용자라도 최신 스키마에 도달할 수 있습니다.

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  if (e.oldVersion < 1) {
    db.createObjectStore('notes', { keyPath: 'id' });
  }
  if (e.oldVersion < 2) {
    db.createObjectStore('tags', { keyPath: 'name' });
  }
};

나중에 인덱스 추가하기

업그레이드 중 기존 저장소에 인덱스를 추가하려면 업그레이드 트랜잭션에서 저장소를 가져온 다음 저장소에서 createIndex를 호출합니다.

request.onupgradeneeded = (e) => {
  if (e.oldVersion < 3) {
    const store = e.target.transaction.objectStore('notes');
    store.createIndex('byDate', 'createdAt');
  }
};

버전 변경 트랜잭션

onupgradeneeded 중 이벤트의 transaction은 특별한 versionchange 트랜잭션입니다. 스키마 수정과 데이터 마이그레이션을 모두 수행할 수 있는 유일한 컨텍스트입니다.

request.onupgradeneeded = (e) => {
  const tx = e.target.transaction; // versionchange tx
  const store = tx.objectStore('notes');
  // migrate existing records here if needed
};

기존 데이터 마이그레이션

스키마 변경으로 레코드 구조를 바꿔야 한다면 업그레이드 중 저장소를 커서로 순회하고 변환한 값을 다시 put합니다.

const store = e.target.transaction.objectStore('notes');
store.openCursor().onsuccess = (ev) => {
  const cursor = ev.target.result;
  if (cursor) {
    const note = cursor.value;
    note.archived = false; // new field
    cursor.update(note);
    cursor.continue();
  }
};

버전 변경 이벤트

한 탭이 업그레이드되면 이전 버전을 유지하는 다른 탭에서는 db에 versionchange 이벤트가 발생합니다. 업그레이드가 차단되지 않도록 해당 탭은 연결을 닫아야 합니다.

db.onversionchange = () => {
  db.close(); // let the other tab upgrade
  console.log('database is outdated, please reload');
};

저장소 삭제하기

업그레이드 중 db.deleteObjectStore(name)을 사용해 더 이상 필요하지 않은 저장소를 제거할 수 있습니다. 저장소와 그 데이터가 영구적으로 삭제됩니다.

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  if (e.oldVersion < 4 && db.objectStoreNames.contains('temp')) {
    db.deleteObjectStore('temp');
  }
};

업그레이드 모범 사례

마이그레이션을 멱등적으로 유지하고 oldVersion에 따라 순서대로 실행하세요. versionchange에서 이전 연결을 닫고, 모든 이전 버전에서 업그레이드를 테스트하세요. 이렇게 하면 기존 사용자의 데이터를 온전히 유지할 수 있습니다.

빠른 확인

버전 관리와 업그레이드에 대한 이해도를 확인해 보세요.

복습

버전 관리와 업그레이드를 배웠습니다.

  • 버전 번호를 올려 onupgradeneeded를 실행합니다.
  • oldVersion을 사용해 점진적이고 멱등적인 마이그레이션을 수행합니다.
  • 업그레이드의 versionchange 트랜잭션은 스키마와 데이터를 수정합니다.
  • 커서와 cursor.update로 레코드를 마이그레이션합니다.
  • versionchange 이벤트가 발생하면 이전 탭을 닫습니다.

IndexedDB를 모두 마쳤습니다. 다음은 서비스 워커입니다.

자주 묻는 질문

“버전 관리와 업그레이드” 강의는 무료인가요?

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

“버전 관리와 업그레이드”에서 뭘 배우나요?

버전 변경에 따라 스키마를 마이그레이션합니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“버전 관리와 업그레이드” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 데이터베이스 열기
  2. 트랜잭션과 CRUD
  3. 인덱스와 쿼리
  4. 버전 관리와 업그레이드
← JavaScript Academy(으)로 돌아가기