file lock
잠금 범위가 병행성과 안전성을 결정한다
전체 파일을 잠글지, 특정 레코드만 잠글지, 네트워크 파일 시스템까지 고려해야 합니다.
목표
동시 수정으로 파일 내용이 깨지는 일을 막는다.
범위
전체 파일, byte range, 레코드 단위 중 하나를 고른다.
위험
POSIX와 flock 혼용, NFS 환경, 잠금 누락을 확인한다.
01
Whole file
간단하지만 병행성이 낮다. 설정 파일처럼 작은 파일에 적합하다.
02
Record range
수정할 byte 영역만 잠가 여러 작업이 동시에 진행될 수 있다.
03
Distributed
NFS나 여러 서버가 얽히면 별도 분산 잠금이 필요할 수 있다.
방식
좋은 경우
주의할 점
flock
전체 파일 단위 배타 접근이 필요할 때
POSIX record lock과 독립적으로 동작한다.
fcntl
파일 안의 특정 영역만 보호해야 할 때
범위 계산과 해제 누락을 꼼꼼히 봐야 한다.
분산 잠금
여러 머신이 같은 자원을 수정할 때
네트워크 지연, 장애, lease 만료 정책이 필요하다.
좁게 잠금
필요한 영역만 잠그면 병행성이 높아진다.
항상 해제
오류 경로에서도 잠금 해제를 보장해야 한다.
환경 확인
NFS와 혼용 잠금은 별도 검증 없이 믿지 않는다.