문서수정 (updateDoc, doc)

joy·2025년 11월 3일

firebase

목록 보기
3/4
//5) 문서수정 (updateDoc, doc)
import {  deleteField, increment, serverTimestamp, updateDoc } from "firebase/firestore";
    //updateBook이라는 비동기 함수 선언
const updateBook = async(bookId) => { //매개변수 bookId → 수정할 문서의 ID
  try { //try : 예외(오류)가 날 수 있는 코드를 감싸는 블록
     await updateDoc(doc(db, 'books', bookId), { //updateDoc에 전달하는 객체: 수정할 필드와 값
    title:'수정 테스트', //수정 테스트"로 변경
    author: deleteField(), //기존 필드 삭제 (deleteField())
    price: increment(5000), //기존 값에 5000 더하기 (increment(5000))
    createdAt: serverTimestamp() //서버 시간으로 설정 (serverTimestamp())
  });
     console.log('문서 수정 완료');
  }catch(error) { //catch : try 안에서 에러가 생겼을 때 실행되는 부분.
    console.log('문서 수정오류')
  }
}
updateBook('bk_001'); //bookId가 'bk_001'인 문서를 수정하도록 함수 호출

🧩 1️⃣ updateDoc — Firestore 문서 수정 함수

Firestore(데이터베이스)에서 기존 문서의 일부 필드만 수정할 때 사용하는 함수

await updateDoc(문서참조, { 수정할필드:, ... })

✅ 작동원리

  • 이미 존재하는 문서의 일부만 수정 가능
  • 문서가 없으면 에러 발생 (자동 생성 X)
  • 전체 문서를 덮어쓰지 않고, 지정한 필드만 업데이트함

📘 예시

await updateDoc(doc(db, "books", "bk_001"), {
  price: 20000,
  author: "황지원"
})

books 컬렉션의 "bk_001" 문서에서
priceauthor 필드만 수정됨.
다른 필드(title, createdAt) 등은 그대로 유지됨.


🧩 2️⃣ try — 예외(오류)가 날 수 있는 코드를 감싸는 블록

에러가 발생할 가능성이 있는 코드를 시도(try) 해보는 영역이에요.

try {
  // 예외가 발생할 수 있는 코드
  await updateDoc(...)
  console.log('수정 성공');
}
  • 정상적으로 실행되면 그대로 다음 줄로 진행됨.
  • 하지만 실행 중 오류가 생기면 → 즉시 catch로 넘어감.

🧩 3️⃣ catch — 에러(예외) 잡아서 처리하는 블록

try 안에서 에러가 생겼을 때 실행되는 부분.

catch(error) {
  console.log('문서 수정오류', error);
}
  • error 안에는 실제 오류 정보가 담김
  • 이렇게 하면 앱이 죽지 않고, 오류 내용을 로그로 확인 가능

🔁 세 가지를 함께 쓰는 이유

try {
  await updateDoc(doc(db, 'books', 'bk_001'), { title: '테스트' });
  console.log('수정 완료');
} catch (error) {
  console.log('수정 실패:', error);
}
상황동작
문서 수정 성공"수정 완료" 출력
문서 없음 / 네트워크 문제 등 발생catch로 이동 → "수정 실패" 출력

💡 정리 요약

개념설명비고
updateDoc()Firestore 문서 일부만 수정문서 없으면 오류 발생
try에러 날 수도 있는 코드 감싸기정상 실행 시 catch로 안 감
catch에러 발생 시 실행되는 블록에러 정보 확인 가능
profile
FE

0개의 댓글