base
프로젝트를 운영하다 보면 "서버 여러 대가 동시에 접근할 수 있는 파일 저장소가 필요하다"는 상황이 찾아옵니다. 처음에는 S3 같은 객체 스토리지를 떠올릴 수 있지만, 때로는 리눅스 파일 시스템처럼 mount해서 읽고 쓰는 형태가 필요한 경우도 있습니다. 이때 필요한 것이 Amazon EFS(Elastic File System) 입니다.
EFS는 AWS에서 제공하는 완전 관리형 네트워크 파일 시스템입니다. 쉽게 말하면, 여러 EC2 인스턴스(혹은 온프레미스 서버)들이 네트워크를 통해 동시에 접근할 수 있는 클라우드 기반 파일 서버입니다.
주요 특징은 다음과 같습니다.
요약하면, EFS는 S3처럼 객체 저장이 아니라, 리눅스의 /mnt/efs처럼 디렉터리 기반 파일시스템을 네트워크를 통해 쓰고 읽는 서비스입니다.
"왜 굳이 EFS를 써야 할까?" 하는 의문이 들 수 있습니다. EFS는 다음과 같은 상황에서 특히 강력한 힘을 발휘합니다.
특히, 다수의 EC2 인스턴스가 동일한 파일을 동시에 읽고 쓰는 구조를 만들 때는 사실상 가장 자연스러운 선택지입니다.
EFS의 기본 구성 요소는 아주 심플합니다.
파일 시스템을 만들고 → 마운트 타겟을 만들고 → EC2에 NFS로 마운트하면 끝입니다.
EFS를 실제로 사용하려면 AWS에서 몇 가지 단계를 따라야 합니다. 처음 보면 복잡해 보일 수 있지만, 하나하나 천천히 따라가면 어렵지 않습니다.
가장 먼저 해야 할 일은 AWS Management Console에 로그인해서 EFS 파일 시스템(파일을 저장할 공간을 준비)을 만드는 것입니다. EFS 파일 시스템은 우리가 저장할 공간(하드디스크 같은 것)이라고 생각하면 됩니다.
AWS 콘솔 메뉴에서 "EFS"를 검색하고, "파일 시스템 생성" 버튼을 누르면 시작할 수 있습니다. 여기서 생성 버튼을 누르면 기본 설정으로도 바로 만들 수 있는데, 파일 시스템 이름, 퍼포먼스 모드(일반 or 높은 처리량) 정도만 선택하면 됩니다.
파일 시스템만 만들어서는 EC2 인스턴스(서버)가 접근할 수 없습니다. 이제 "어디에서" "어떻게" EFS에 접근할지를 설정해야 합니다. EC2 서버와 EFS가 같은 VPC(가상 네트워크) 안에 있어야 통신이 됩니다. 파일 시스템 생성 중에 어떤 VPC에 연결할지 선택하게 됩니다.
VPC 안에서도 구역(서브넷)이 여러 개 있을 수 있습니다. 그래서 EC2가 있는 서브넷에 EFS를 연결하기 위해 마운트 타겟이라는 것을 설정해야 합니다. 마운트 타겟은 "EFS 접속용 문" 같은 역할을 합니다. 보통 각 가용영역(AZ)마다 하나씩 마운트 타겟을 생성하는 것이 좋습니다.
마운트 타겟을 만들 때는 "보안 그룹(Security Group)" 설정도 필요한데, NFS 프로토콜(2049번 포트)을 허용해줘야 EC2 인스턴스가 EFS에 접근할 수 있습니다.
이제 EC2 서버 쪽 작업입니다. EFS는 NFS(Network File System) 프로토콜을 이용해서 데이터를 주고받습니다. 따라서 EC2 인스턴스에는 이 NFS 클라이언트 프로그램을 설치해야 합니다. Amazon Linux를 사용한다면 다음 명령어를 입력합니다.
만약 Ubuntu를 사용하고 있다면 다음과 같이 설치합니다.
이제 모든 준비가 끝났습니다. 이제 EFS 파일 시스템을 EC2 서버에 "연결(mount)"해야 합니다. 마운트란, 외부 저장소를 서버의 디렉터리 하나처럼 사용할 수 있게 만드는 작업입니다. 마운트 명령어는 다음과 같습니다.
sudo mount -t nfs4 -o nfsvers=4.1,hard,timeo=600,retrans=2 파일시스템-DNS:/ /mnt/efs
여기서 각각의 의미를 설명하면 다음과 같습니다.
마운트가 성공하면, 이제 /mnt/efs 폴더 안은 EFS 파일 시스템과 연결된 상태가 됩니다. 즉, 이 디렉터리에 파일을 만들거나, 읽거나, 삭제하거나 하는 모든 작업이 곧바로 EFS에 반영됩니다.
예를 들어:
라고 입력하면, hello.txt 파일이 EFS 상에 저장되는 것입니다.
EFS는 서버가 재부팅되면 마운트가 끊어질 수 있습니다. 매번 수동으로 mount 명령어를 입력하는 건 번거롭기 때문에, 자동으로 부팅할 때마다 EFS를 다시 연결하게 설정할 수 있습니다. 이때 사용하는 파일이 /etc/fstab 입니다. 이 파일에 다음과 같은 라인을 추가하면 됩니다.
이렇게 하면 EC2가 부팅할 때마다 자동으로 EFS를 연결하게 됩니다.
물론 EFS도 만능은 아닙니다. 사용 시 몇 가지 주의사항이 있습니다.
따라서 대용량 고속 I/O가 필요한 경우라면 Amazon FSx 같은 다른 스토리지 옵션을 고려할 수도 있습니다.
EFS는 네트워크 파일시스템(NFS)을 기반으로 한 클라우드 파일 공유 서비스입니다. Amazon EFS(Elastic File System) 는 서버 간 파일 공유가 필요한 환경에서 최적의 선택이 될 수 있습니다. 특히 EC2 서버 여러 대가 동시에 파일을 읽고 써야 하는 웹 서비스, 머신러닝 학습 환경 등에서는 EFS가 확실한 가치를 제공합니다.