[OSTEP] 스터디 20주차 Andrew File System (AFS)

분산 파일 시스템의 고전인 NFS가 '단순함'을 택했다면, 카네기 멜론 대학교(CMU)에서 개발한 AFS는 수천 대의 클라이언트를 수용할 수 있는 '확장성(Scalability)'에 모든 사활을 걸었다.


1. AFS의 핵심 설계 철학: 확장성 (Scalability)

NFSv2는 클라이언트가 늘어날수록 서버에 "이 파일 최신이야?"라고 묻는 요청(GETATTR)이 폭증하여 서버가 마비되는 문제가 있었다. AFS 연구진은 다음 두 가지 질문에 집중했다.

  • "어떻게 하면 서버 한 대가 더 많은 클라이언트를 감당할 수 있을까?"
  • "클라이언트가 최대한 스스로 일을 처리하게 할 순 없을까?"

2. 전체 파일 캐싱 (Whole-file Caching)

AFS의 가장 큰 특징은 데이터 접근 방식입니다. 블록 단위로 가져오는 NFS와 달리 AFS는 파일 단위로 움직인다.

  1. Open 시: 클라이언트가 파일을 열면, 서버로부터 파일 전체를 가져와 클라이언트의 로컬 디스크에 저장한다.
  2. 사용 중: 이후의 모든 read(), write() 작업은 네트워크를 타지 않고 로컬 디스크에서만 일어난다. (매우 빠름!)
  3. Close 시: 파일이 수정되었다면 그제야 서버로 파일을 다시 업로드(Flush)한다.

3. 혁신적인 캐시 일관성: 콜백 (Callbacks)

NFS 클라이언트가 의심이 많아 계속 서버에 물어보는 스타일이라면, AFS는 '서버의 약속'을 믿는 스타일이다.

  • Callback의 원리: 서버는 클라이언트에게 파일을 줄 때 "이 파일이 수정되면 내가 반드시 너한테 먼저 연락할게"라는 약속(Callback Promise)을 함께 준다.
  • 장점: 클라이언트는 서버가 연락(Callback Break)을 주기 전까지는 서버에 물어볼 필요 없이 자신의 캐시가 무조건 최신이라고 간주한다. 이로 인해 서버의 응답 부하가 거의 사라진다.

4. AFS 버전별 발전 (v1 vs v2)

  • AFS v1: 여전히 파일 경로를 해석(Pathname lookup)할 때 서버에 너무 많이 의존했고, 콜백이 없어 성능 한계가 있었다.
  • AFS v2: 콜백(Callback)파일 식별자(FID)를 도입하여 진정한 확장성을 완성했다. 파일 이름 대신 고유한 FID를 사용하여 경로 해석 부하를 줄였다.

5. 일관성 모델: Last Writer Wins

AFS는 파일이 닫힐(close) 때만 서버에 반영된다.

  • 동시에 여러 클라이언트가 파일을 수정하면, 가장 마지막에 파일을 닫은 사람의 버전이 최종적으로 서버에 저장된다.
  • 이는 엄격한 실시간 일관성은 아니지만, 일반적인 문서 작업이나 프로그래밍 환경에서는 충분히 효율적인 방식이다.

AFS는 "네트워크 비용은 비싸고 로컬 디스크는 싸다"는 가정을 바탕으로, 클라이언트에게 권한을 위임하여 서버의 자유를 찾아준 시스템이다. 오늘날 현대적인 클라우드 스토리지 동기화 방식의 모태가 되었다는 점에서 시스템 엔지니어라면 반드시 이해해야 할 설계 모델이다.