포스트

비동기 OS fsync는 무엇이고, 왜 결제 시스템에서 필요할까?

  • fsync(fd)는 운영체제에 강제로 디스크에 쓰라고 명령하는 함수입니다.
  • 일반적으로 파일에 데이터를 쓰면, OS는 일단 메모리에 있는 캐시(buffer cache)에만 기록하고, 실제 디스크에는 나중에 기록합니다.
  • fsync()를 호출하면:
  • 캐시에 있는 데이터를
  • 디스크로 즉시 flush(플러시)합니다.

⚡ 그럼 asynchronous OS fsync는? 핵심:

“디스크에 즉시 쓰진 않지만, OS가 백그라운드에서 나중에 디스크로 비동기적으로 flush 하는 구조”

  • 대부분의 OS는 성능 향상을 위해 파일 시스템 캐시를 사용하고,
  • fsync()를 명시적으로 호출하지 않으면, 일정 시간이 지나거나 I/O가 한계에 도달했을 때 비동기적으로 flush를 수행합니다.

📦 흐름 예시

1
2
3
4
5
1. 앱이 파일에 write()
2. OS는 메모리 캐시에 저장만 함
3. 앱은 완료된 것처럼 느끼지만, 디스크에는 아직 안 써짐
4. 나중에 OS가 비동기로 fsync를 수행함 (flush thread 등)

💡 왜 비동기 fsync를 쓸까?

목적설명
성능 향상매 write마다 디스크를 쓰면 느림 → 일단 RAM에 모아둠
배치 처리한꺼번에 flush하면 디스크 I/O 효율 증가
앱의 부담 감소앱이 일일이 fsync() 안 해도 운영체제가 알아서 처리

  • 정전, 커널 패닉 등으로 RAM이 날아가면 데이터 손실 가능
  • DB, 결제 시스템 등은 반드시 직접 fsync() 호출 필요

  • 기본적으로 fsync()를 호출해서 트랜잭션을 디스크에 flush
  • 하지만 설정에 따라 wal_writer_delay, commit_delay 등을 조정하면 비동기적으로 처리 가능

✍️ 정리

용어설명
fsync()사용자(앱)가 명시적으로 디스크에 flush 요청
async OS fsyncOS가 캐시된 데이터를 자동으로 백그라운드에서 비동기적으로 디스크에 기록
위험flush 전에 장애 발생 시 데이터 유실 가능
장점성능 향상, 처리량 증가



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.