데이터베이스의 비동기 커밋 - 데이터 유실
데이터베이스의 비동기 커밋 – 유실의 가능성 ** **🔥 비동기 커밋의 의미 PostgreSQL 같은 데이터베이스에서는 트랜잭션 커밋 시점을 다음과 같이 설정할 수 있습니다:
| 설정 | 설명 | 블로킹 여부 |
|---|---|---|
| synchronous_commit = on | WAL 로그를 디스크에 flush 후 응답 | ✅ 안전 |
| synchronous_commit = off | WAL에만 기록하고 응답, flush는 나중에 | ❌ 빠름, 위험 |
💥 유실 시나리오
1
2
3
4
5
6
7
1. 클라이언트가 주문을 생성하고 commit 요청
2. DB는 WAL에만 기록하고 응답 (`off` 설정)
3. 아직 디스크에는 flush되지 않음
4. 이때 서버가 전원 꺼짐 / 크래시
→ 메모리에만 있던 데이터는 사라짐
→ 사용자는 "주문 성공"을 봤는데 실제로는 저장 안됨
- WAL은 메모리(WAL buffer)에 적힌 상태
- 디스크 fsync()가 호출되기 전이면 전원 차단 시 데이터 손실 가능
- 비동기 시스템이라도 “동기처럼 보이게” 처리하는 설계는 매우 유용합니다.
- 하지만 데이터베이스의 커밋 신뢰성은 설정에 따라 진짜로 달라질 수 있으니, 성능만 보고 synchronous_commit = off를 쓰는 건 매우 조심해야 합니다.
✍️ 마무리
✅ 비동기를 잘 다루는 백엔드는 사용자 경험과 성능을 동시에 챙깁니다. ⚠️ 하지만 비동기 설정이 데이터 신뢰성까지 비동기로 만들 수는 없습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.