
예전에 현업에서 AWS EFS (Elastic File System) 를 사용한 적이 있다.
당시 요구사항은 ‘EC2 여러 대에서 동시에 접근 가능한 공유 저장소’를 만드는 것이었고, 고가용성과 안정성을 위해 S3 대신 EFS를 선택했다.
EFS는 마치 리눅스에서 사용하는 /mnt/efs와 같은 방식으로 작동해서, 처음엔 “아, 이거 그냥 마운트만 하면 되는 거네?”라고 단순하게 생각했는데… 알고 보니 이 뒤엔 NFS 프로토콜이 숨어 있었다.
이후 프로젝트를 로컬 환경에서 개발하면서 "그럼 직접 NFS 서버를 구성해서 써볼까?"라는 생각이 들었다.
그렇게 이번엔 우분투 기반으로 NFS 서버와 클라이언트를 직접 구성해보면서, 그 기반이 되는 RPC, PortMapper의 원리도 같이 정리해보게 되었다.
NFS란?
NFS(Network File System)는 네트워크로 연결된 다른 리눅스 시스템의 디렉토리를 마치 로컬 디렉토리처럼 마운트해서 사용할 수 있게 해주는 파일 공유 프로토콜이다.
NAS(Network Attached Storage)처럼 서버 한 곳의 파일시스템을 여러 클라이언트가 공유하는 구조를 만들 수 있다.
로컬 디스크처럼 다루지만, 내부에서는 네트워크를 타고 파일을 주고받는다.
NFS의 기반 개념: RPC와 PortMapper
✅ RPC (Remote Procedure Call)
- NFS는 RPC를 기반으로 동작한다.
- RPC는 클라이언트가 마치 로컬 함수처럼 호출하면, 내부적으로 원격 서버의 함수를 실행하는 방식이다.
- NFS에서 파일 열기, 읽기, 쓰기 등의 요청이 모두 RPC 호출로 처리된다.
✅ PortMapper (rpcbind)
- NFS의 각 기능은 각각 다른 동적 포트를 사용한다.
- 클라이언트는 처음에 서버의
rpcbind(또는portmapper) 데몬에 접속하여 "NFS 서비스는 몇 번 포트야?"를 물어본다. rpcbind가 해당 서비스의 포트를 알려주면 그 포트를 통해 통신을 시작한다.
정리하면: 클라이언트 → rpcbind → 포트 확인 → 해당 포트로 통신
스토리지 구성 및 NFS 서버 설정 (Ubuntu 기준)
NFS 서버 패키지 설치
sudo apt update
sudo apt install nfs-kernel-server -y
가상서버에 nfs로 사용할 디스크를 추가하였다.
physical volume 생성

volume groupt 생성

logical volume 생성

lvscan을 통해 생성된 로지컬 볼륨 확인

mkfs 명령어를 사용하여 해당 볼륨을 포맷한다

해당 볼륨을 마운트할 디렉토리를 생성
vi /etc/fstab부팅시 자동으로 마운트 될 수 있도록 추가해준다.

생성한 볼륨을 디렉토리에 마운트

nfs 익스포트 설정
sudo vi /etc/exports/nfs-storage 10.0.8.0/24(rw,sync,no_root_squash,no_subtree_check)- ✔️ rw: 읽기/쓰기 허용
- ✔️ sync: 동기식으로 데이터를 기록 (안정성 ↑)
- ✔️ no_root_squash: 사용자가 클라이언트 시스템의 root계정으로 접근했을 경우 서버의 root사용자로 취급
- ✔️ no_subtree_check: 하위 디렉토리 변경 시 체크 생략 (성능 ↑)
10.0.8.0/24는 허용할 클라이언트의 ip
설정 반영 및 서비스 재시작
sudo exportfs -a
sudo systemctl restart nfs-kernel-server클라이언트 측 NFS 마운트 (Ubuntu 기준)
NFS 클라이언트 패키지 설치
sudo apt update
sudo apt install nfs-common -y마운트할 디렉토리 생성
sudo mkdir /logsNFS 서버 공유 디렉토리 마운트
sudo mount 10.0.8.3:/nfs-storage /logs- ✔️
10.0.8.3은 NFS 서버의 IP 주소 - ✔️
/nfs-storage는 NFS 서버에서 공유한 경로 - ✔️
/logs는 클라이언트의 마운트 지점
마무리
실제로 구성해보니, 단순히 mount 하나로 마치 로컬 디스크처럼 공유 디렉토리를 사용할 수 있어서 굉장히 편했다.
다만 NFS는 기본적으로 신뢰 기반이기 때문에 방화벽이나 보안 설정이 매우 중요하다는 걸 느꼈다.
특히 회사 환경에서 쓰게 될 경우, root_squash, read-only, ACL 등의 정책을 더 정교하게 설정해야 한다.
그리고 한 가지! NFS의 성능은 생각보다 많이 네트워크 품질에 의존한다.
네트워크 지연이나 연결 문제가 자주 발생한다면, autofs나 nfs4 사용, 혹은 samba와의 비교도 고려해보는 게 좋겠다.
'네트워크' 카테고리의 다른 글
| [네트워크 기초] IP 주소와 서브넷, 그리고 클래스와 CIDR (0) | 2025.06.13 |
|---|---|
| [네트워크 기초] OSI 7계층과 TCP/IP 모델 정리 (1) | 2025.06.13 |
| [DNS 개념과 실습] 내부망 구성부터 레코드 이해까지 (0) | 2025.06.09 |
| [네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리 (0) | 2025.06.05 |
| [가상화와 네트워크 구조] NAT, bridges, 호스트 전용 네트워크 개념 정리 (0) | 2025.05.30 |