이번 장에서는 아마존 S3와 유사한 객체 저장소 서비스를 설계해본다. S3는 AWS가 제공하는 서비스로 RESTful API 기반 인터페이스로 이용 가능한 객체 저장소다.
객체 저장소에 대해 더 자세히 살펴보기 전에, 일반적으로 저장소란 어떤 시스템인지 알아보고, 몇 가지 용어를 정의하도록 하겠다.
저장소 시스템에는 다음 세 가지 부류가 있다.
블록 저장소
HDD(Hard Disk Drive)나 SSD(Solid State Drive)처럼 서버에 물리적으로 연결되는 형태의 드라이브는 블록 저장소의 가장 흔한 형태다.
블록 저장소는 원시 블록(raw block)을 서버에 볼륨(volume) 형태로 제공한다. 가장 유연하고 융통성이 높은 저장소다. 서버는 원시 블록을 포맷한 다음 파일 시스템으로 이용하거나 애플리케이션에 블록 제어권을 넘겨버릴 수도 있다. 데이터베이스나 가상 머신 엔진 같은 애플리케이션은 원시 블록을 직접 제어하여 최대한의 성능을 끌어낸다.
블록 저장소는 서버에 물리적으로 직접 연결되는 저장소에 국한되지 않는다. 고속 네트워크를 통해 연결될 수도 있고, 업계 표준 연결 프로토콜인 FC (Fibre Channelyl이나 iSCsT를 통해 연결될 수도 있다.
파일 저장소
파일 저장소는 블록 저장소 위에 구현된다. 파일과 디렉터리를 손쉽게 다루는 데 필요한, 더 높은 수준의 추상화(abstraction)를 제공한다. 데이터는 계층적으로 구성되는 디렉터리 안에 보관된다. 파일 저장소는 가장 널리 사용되는 범용 저장소 솔루션이다. SMB/CIFS이나 NFS와 같은 파일 수준 네트워크 프로토콜을 사용하면 하나의 저장소를 여러 서버에 동시에 붙일 수도 있다.
파일 저장소를 사용하는 서버는 블록을 직접 제어하고, 볼륨을 포맷하는 등의 까다로운 작업을 신경 쓸 필요가 없다. 파일 저장소는 단순하기 때문에 폴더나 파일을 같은 조직 구성원에 공유하는 솔루션으로 사용하기 좋다.