NFS는 네트워크에 파일을 저장하는 메커니즘이다.
이 분산 파일 시스템을 통해 사용자는 원격 컴퓨터에 있는 파일 및 디렉토리에 액세스할 수 있고 해당 파일 및 디렉토리가 로컬에 있는 것처럼 처리할 수 있다.
흔히 NAS(Network-Attached Storage)와 NFS를 많이 비교하는데, NAS로 접근할 때 쓰는 프로토콜 중 하나가 NFS이다. 보통 Linux/Unix 환경에서는 NFS를 가장 많이 쓰고, 윈도우 환경에서는 SMB/CIFS를 많이 쓴다고 한다.
NFS와 로컬 파일 시스템은 사용자의 입장에서는 차이가 없어 보이지만, local caching이 다르다. NFS를 사용하면 클라이언트가 디렉토리 목록, 파일 이름, 데이터(실제 파일 내용)와 같은 메타데이터를 캐시할 수 있다.

파일에 쓸 때 데이터는 먼저 로컬 컴퓨터에 캐시된 후 나중에 서버에 기록된다. 이건 성능을 위한 선택이지만 반대로 캐시로 인한 데이터 불일치 문제가 발생할 수 있다. 즉, 두 사용자가 같은 파일에 접근할 경우 위 그림과 같은 상황이 발생할 수 있다는 뜻이다.
이를 해결하기 위해 NFS는 엄격한 POSIX consistency 대신 “약한 일관성 모델(Weak Consistency)”을 사용하며, 대표적인 방식은 close-to-open consistency와 unlock-to-lock consistency가 있다.
한 클라이언트가 파일을 close 한 이후에 다른 클라이언트가 해당 파일을 open 하면 최신 데이터를 읽을 수 있도록 보장하는 방식
=> 따라서 파일이 열려있는 동안에는 최신 내용을 볼 수 없다
파일 잠금(file lock)을 기준으로 데이터 일관성을 보장하는 방식
| 항목 | Close-to-Open | Unlock-to-Lock |
|---|---|---|
| 기준 | 파일 open/close | 파일 lock/unlock |
| flush 시점 | close | unlock |
| 최신 데이터 보장 시점 | open | lock |
| 사용 목적 | 일반 파일 접근 | 동시 접근 제어 |
| 일관성 수준 | 약한 consistency | lock 기반 consistency |

Amazon Elastic File System(Amazon EFS)
- 서비스 중단 없이 수요에 따라 페타바이트 단위로 확장할 수 있도록 설계됨
- 파일을 추가하거나 제거할 때 자동으로 확장 및 축소
- NFS(Network File System) 4(NFSv4.1 및 NFSv4.0) 프로토콜을 지원

EC2 → NFS mount → EFS Mount Target → EFS Storage
각 AZ마다 NFS endpoint가 존재하고, EC2는 같은 AZ의 mount target으로 접속한다.
EFS도 S3와 마찬가지로 Lifecycle 정책이 있다.
파일의 접근 빈도에 따라 정책을 다르게 지정하여 비용을 절감할 수 있다.
EFS Access Point는 여러 컨테이너, 애플리케이션, 또는 사용자 그룹이 동일한 파일 시스템을 공유하더라도, 각기 다른 논리적 접근 경로와 권한을 가질 수 있도록 만든다. 이를 통해 중앙 파일 시스템 관리의 복잡성을 줄이고, 멀티테넌트 애플리케이션 구조에서 데이터 접근을 안전하게 분리한다.
Access Point는 EFS 내 특정 디렉터리 경로를 루트로 지정하고, 해당 진입점에 연결되는 클라이언트에게 기본 사용자 ID(UID) 및 그룹 ID(GID)를 적용한다. 마운트 시 애플리케이션은 Access Point ID를 지정하여 파일 시스템을 탑재하며, 이를 통해 애플리케이션은 지정된 보안 컨텍스트로만 접근할 수 있다.
사용 예제
출처: