base

Amazon EFS

프로젝트를 운영하다 보면 "서버 여러 대가 동시에 접근할 수 있는 파일 저장소가 필요하다"는 상황이 찾아옵니다. 처음에는 S3 같은 객체 스토리지를 떠올릴 수 있지만, 때로는 리눅스 파일 시스템처럼 mount해서 읽고 쓰는 형태가 필요한 경우도 있습니다. 이때 필요한 것이 Amazon EFS(Elastic File System) 입니다.


EFS란 무엇인가?

EFS는 AWS에서 제공하는 완전 관리형 네트워크 파일 시스템입니다. 쉽게 말하면, 여러 EC2 인스턴스(혹은 온프레미스 서버)들이 네트워크를 통해 동시에 접근할 수 있는 클라우드 기반 파일 서버입니다.

주요 특징은 다음과 같습니다.


  • 동시 접근이 가능합니다. 여러 대의 서버가 하나의 파일 시스템을 공유합니다.
  • NFS(Network File System) 프로토콜을 사용합니다. 리눅스나 유닉스 기반 시스템에서 네이티브로 쉽게 사용할 수 있습니다.
  • 자동 확장됩니다. 저장 용량을 미리 지정할 필요 없이, 저장한 데이터 크기에 따라 크기가 자동으로 늘어나거나 줄어듭니다.
  • 고가용성 및 내구성을 제공합니다. 여러 가용 영역(AZ)에 걸쳐 데이터를 저장해 장애 상황에도 안정성을 확보합니다.

요약하면, EFS는 S3처럼 객체 저장이 아니라, 리눅스의 /mnt/efs처럼 디렉터리 기반 파일시스템을 네트워크를 통해 쓰고 읽는 서비스입니다.


EFS를 사용하는 이유

"왜 굳이 EFS를 써야 할까?" 하는 의문이 들 수 있습니다. EFS는 다음과 같은 상황에서 특히 강력한 힘을 발휘합니다.

  • 웹 서버 클러스터가 파일을 공유해야 할 때
  • ML/AI 학습 서버들이 대규모 데이터셋을 공유해야 할 때
  • 백업, 복구, 미디어 처리 워크플로우를 파일 시스템 기반으로 구축할 때
  • NAS(Network Attached Storage) 형태의 저장소가 필요할 때

특히, 다수의 EC2 인스턴스가 동일한 파일을 동시에 읽고 쓰는 구조를 만들 때는 사실상 가장 자연스러운 선택지입니다.


EFS 기본 구조 이해

EFS의 기본 구성 요소는 아주 심플합니다.

  1. 파일 시스템 (File System): 저장공간 그 자체입니다. AWS 콘솔이나 CLI를 통해 생성할 수 있습니다.
  2. 마운트 타겟 (Mount Target): EC2 인스턴스가 EFS에 접속할 수 있도록 연결해주는 엔드포인트입니다. VPC의 서브넷마다 하나씩 설정할 수 있습니다.
  3. 보안 그룹(Security Group)과 NFS 포트(2049번) 설정: EC2가 EFS에 접근할 수 있도록 네트워크 규칙을 열어줘야 합니다.

파일 시스템을 만들고 → 마운트 타겟을 만들고 → EC2에 NFS로 마운트하면 끝입니다.


EFS 기본 사용 방법

EFS를 실제로 사용하려면 AWS에서 몇 가지 단계를 따라야 합니다. 처음 보면 복잡해 보일 수 있지만, 하나하나 천천히 따라가면 어렵지 않습니다.

1. AWS 콘솔에서 EFS 파일 시스템 생성

가장 먼저 해야 할 일은 AWS Management Console에 로그인해서 EFS 파일 시스템(파일을 저장할 공간을 준비)을 만드는 것입니다. EFS 파일 시스템은 우리가 저장할 공간(하드디스크 같은 것)이라고 생각하면 됩니다.


AWS 콘솔 메뉴에서 "EFS"를 검색하고, "파일 시스템 생성" 버튼을 누르면 시작할 수 있습니다. 여기서 생성 버튼을 누르면 기본 설정으로도 바로 만들 수 있는데, 파일 시스템 이름, 퍼포먼스 모드(일반 or 높은 처리량) 정도만 선택하면 됩니다.

2. VPC와 서브넷 선택, 마운트 타겟 생성

파일 시스템만 만들어서는 EC2 인스턴스(서버)가 접근할 수 없습니다. 이제 "어디에서" "어떻게" EFS에 접근할지를 설정해야 합니다. EC2 서버와 EFS가 같은 VPC(가상 네트워크) 안에 있어야 통신이 됩니다. 파일 시스템 생성 중에 어떤 VPC에 연결할지 선택하게 됩니다.


VPC 안에서도 구역(서브넷)이 여러 개 있을 수 있습니다. 그래서 EC2가 있는 서브넷에 EFS를 연결하기 위해 마운트 타겟이라는 것을 설정해야 합니다. 마운트 타겟은 "EFS 접속용 문" 같은 역할을 합니다. 보통 각 가용영역(AZ)마다 하나씩 마운트 타겟을 생성하는 것이 좋습니다.


마운트 타겟을 만들 때는 "보안 그룹(Security Group)" 설정도 필요한데, NFS 프로토콜(2049번 포트)을 허용해줘야 EC2 인스턴스가 EFS에 접근할 수 있습니다.

3. EC2 인스턴스에 NFS 유틸리티 설치

이제 EC2 서버 쪽 작업입니다. EFS는 NFS(Network File System) 프로토콜을 이용해서 데이터를 주고받습니다. 따라서 EC2 인스턴스에는 이 NFS 클라이언트 프로그램을 설치해야 합니다. Amazon Linux를 사용한다면 다음 명령어를 입력합니다.


sudo yum install -y nfs-utils

만약 Ubuntu를 사용하고 있다면 다음과 같이 설치합니다.


sudo apt-get install nfs-common

4. 마운트 명령어로 연결

이제 모든 준비가 끝났습니다. 이제 EFS 파일 시스템을 EC2 서버에 "연결(mount)"해야 합니다. 마운트란, 외부 저장소를 서버의 디렉터리 하나처럼 사용할 수 있게 만드는 작업입니다. 마운트 명령어는 다음과 같습니다.


  sudo mount -t nfs4 -o nfsvers=4.1,hard,timeo=600,retrans=2 파일시스템-DNS:/ /mnt/efs

여기서 각각의 의미를 설명하면 다음과 같습니다.

  • -t nfs4 : 파일 시스템 타입은 NFS 버전 4입니다.
  • -o nfsvers=4.1 : NFS의 4.1 버전을 사용하겠다는 뜻입니다.
  • hard,timeo=600,retrans=2 : 네트워크 문제 발생 시 재시도 설정입니다. 안정성을 높이기 위해 추가합니다.
  • 파일시스템-DNS:/ : 생성한 EFS의 DNS 주소를 입력합니다.
  • /mnt/efs : EC2 서버 안에서 EFS를 연결할 디렉터리입니다. (필요하면 미리 디렉터리를 만들어야 합니다.)

5. /mnt/efs 경로에서 파일 자유롭게 읽고 쓰기

마운트가 성공하면, 이제 /mnt/efs 폴더 안은 EFS 파일 시스템과 연결된 상태가 됩니다. 즉, 이 디렉터리에 파일을 만들거나, 읽거나, 삭제하거나 하는 모든 작업이 곧바로 EFS에 반영됩니다.

예를 들어:

  • cd /mnt/efs
  • touch hello.txt

라고 입력하면, hello.txt 파일이 EFS 상에 저장되는 것입니다.


참고: 자동 마운트 설정 (fstab 수정)

EFS는 서버가 재부팅되면 마운트가 끊어질 수 있습니다. 매번 수동으로 mount 명령어를 입력하는 건 번거롭기 때문에, 자동으로 부팅할 때마다 EFS를 다시 연결하게 설정할 수 있습니다. 이때 사용하는 파일이 /etc/fstab 입니다. 이 파일에 다음과 같은 라인을 추가하면 됩니다.

  • 파일시스템-DNS:/ /mnt/efs nfs4 defaults,_netdev 0 0

이렇게 하면 EC2가 부팅할 때마다 자동으로 EFS를 연결하게 됩니다.


주의사항

물론 EFS도 만능은 아닙니다. 사용 시 몇 가지 주의사항이 있습니다.

  • 네트워크 레이턴시: EFS는 네트워크를 통해 접속하는 구조라, 로컬 디스크에 비해 느릴 수 있습니다.
  • 비용: 저장 용량뿐만 아니라, I/O 요금이 별도로 부과될 수 있으니 주의가 필요합니다.
  • NFS 기반 제약: Windows 서버와 직접 연결은 어렵습니다. (Windows는 SMB 프로토콜 기반)

따라서 대용량 고속 I/O가 필요한 경우라면 Amazon FSx 같은 다른 스토리지 옵션을 고려할 수도 있습니다.


정리

EFS는 네트워크 파일시스템(NFS)을 기반으로 한 클라우드 파일 공유 서비스입니다. Amazon EFS(Elastic File System)서버 간 파일 공유가 필요한 환경에서 최적의 선택이 될 수 있습니다. 특히 EC2 서버 여러 대가 동시에 파일을 읽고 써야 하는 웹 서비스, 머신러닝 학습 환경 등에서는 EFS가 확실한 가치를 제공합니다.


참고 문서