Computing

Block, File, Object Storage Service 비교 (서비스의 관점에서) 본문

Cloud/Storage

Block, File, Object Storage Service 비교 (서비스의 관점에서)

jhson989 2022. 10. 19. 00:20

AWS, GCP, AZURE, NCLOUD 등의 클라우드 서비스를 사용하게 될 경우, 네트워크로 연결되는 스토리지 서비스를 사용하게 된다. 스토리지 서비스는 크게 Block storage, File storage, Object Storage 3가지 concept으로 분류된다. AWS의 경우를 보면, AWS는 S3(오브젝트), EBS 스토리지(블록), EFS(파일)로 스토리지 서비스를 제공한다. Fig 1.은 3가지 concept의 스토리지에서 어떻게 데이터를 관리하는 지를 잘 나타내는 그림이다. 이번 포스터에서는 3개가지 Storage system의 concept에 대해서 비교, 정리하고자 한다.

 

Fig 1. 3가지 Concept의 Stroages [1]

 

결론부터 말하자면, 각 파일, 블록, 오브젝트 개념은 서비스를 어떻게 사용자에게 제공할지(어떤 데이터 형태로 스토리지에 데이터를 읽고 쓰게 할 지를)를 구분한 것이다. 즉 데이터의 저장형태도 중요하지만, 사용자가 어떻게 그 스토리지에 데이터를 읽고 쓰는 지, interface의 관점에서 구분하는 것이 더 정확하다고 생각한다. (Paas, SaaS, IaaS라는 단어와 같은, 서비스를 구분짓는 개념이라고 생각한다. 그래서 계속 서비스, 서비스라는 단어를 강조하고 있다.)

 

 

 

Block Storage

Fig 2. 블록 스토리지 [2]

블록 스토리지는 물리적인 하드웨어(HDD, SSD)를 흉내내는 스토리지 서비스이다. 가상머신(VM)은 이 스토리지 서비스를 자신의 하드디스크라고 생각하고 사용할 수 있다.

 

Fig 2.는 Block storage service의 개념을 표현 그림이다. 블록 스토리지 서비스가 제공하는 기능은 다음과 같다. 데이터 블록(block, 대게 512B, 4KB, ...)을 블록 스토리지 서비스에 저장(Write)하거나, 저장된 데이터 블록을 보여(Read)줄 수 있다. 이 두 기능이 블록 스토리지가 수행하는 기본적인 기능이다.

 

즉 일반적인 물리적인 하드디스크가 하는 행동만을 수행한다. 기억할 점은 하드디스크는 블록에 데이터를 쓰고, 읽기만 할뿐, 어떤 데이터가 어디에 쓰이고, 어디에 쓰였는지 기억하고 하는 점은 OS가 한다는 것이다.

 

만약 어떤 2048B 크기의 텍스트 파일을 저장하고자 한다. 그렇다면 이 텍스트 파일을 512B 크기의 조각 4개(조각1, 조각2, 조각3, 조각4)로 쪼개고 이것을 스토리지의 빈 블록에 저장하도록 요청한다. 스토리지는 사용자가 지정한 블록에 조각을 저장하기만 하면 된다. 만약 다시 읽어 오고 싶다면, 조각 4개가 기억된 블록의 ID를 기억했다가, 블록 스토리지 서비스에 그 ID에 쓰인 데이터를 보여달라고 요청하면 된다.

 

문제는 텍스트 파일을 조각 4개로 자르고, 스토리지 시스템의 어디에 빈 블록이 있으며, 조각들을 어떤 블록에 저장하고, 어디에 저장했는 지 기억하는 등 많은 일을 누군가는 처리해줘야 한다는 것이다. 이것은 바로 우리의 가상머신에 설치된 OS가 해줄 것이다. 즉 블록 스토리지 서비스는 가상머신에 하드디스크 하나를 추가한 것과 다르지 않다.

 

추가적으로 서비스에 따라 백업 기능 등을 제공해주기도 한다. 이 경우 하드디스크를 추가한 것보다는 SAN을 사용하는 것과 비슷하다.

 

아마존의 EBS[3]가 대표적인 클라우드 블록 스토리지 서비스이다. 일반적인 외장하드와 마찬가지 역할을 하며, 하나의 EC2 가상머신에 마운트되어 사용될 수 있다. 사용자가 생성한 EC2 가상머신의 OS가 EBS에 데이터의 읽고, 쓰기를 맡아서 처리한다.

 

 

 

File Storage

Fig 3. 파일 스토리지 시스템 [2]

블록 스토리지 서비스와 마찬기로, 파일 스토리지 서비스 또한 비슷한 개념이다. 파일 스토리지 서비스는 사용자가 데이터를 쓰고 읽기를 요청할 때, 파일 단위로 할 수 있게 제공하는 서비스이다. 또한 파일을 폴더 구조로 계층화하여 제공한다.

 

Fig 3.은 파일 스토리지 서비스를 잘 나타낸 그림으로, 블록 스토리지 서비스 위에 파일 시스템을 추가하여 제공하는 서비스라고 생각하면 좋다. 일반적인 NFS, NAS와 같은 기능을 한다. (구글드라이브와 비슷한 개념이라고 해도 될지 모르겠다)

 

사용자는 파일 스토리지 서비스에 파일(name.txt)을 어디 위치(/home/users/data/ 폴더)에 저장해달라고 요청하면, 파일 스토리지는 해당 위치에 파일을 저장한다. 마찬가지로 어디 위치(/home/users/data/ 폴더)에 있는 파일(name.txt)을 보여달라고 하면 파일 스토리지는 해당 데이터를 사용자에게 전송해준다.

 

이 경우, 파일 스토리지 서비스 자체적으로 어디에 데이터가 저장되어있고, 어떻게 관리되고, 사용자 요청이 오면 어떻게 처리해야 할지를 직접 처리한다. 블록 스토리지 서비스에 서버 개념이 추가된 느낌이다. 직접 데이터를 관리하기에 NFS, NAS와 같이 여러 가상머신이 동시에 데이터 요청하는 서비스도 지원할 수 있다.

 

아마존의 EFS[4]가 대표적인 파일 스토리지 서비스이다. 일반적인 NFS 서비스 역할을 하면 동시에 여러 가상머신에서 마운트하여 데이터 공유에 사용될 수 있다.

 

 

 

Object Storage

Fig 4. 오브젝트 스토리지와 파일 스토리지 비교 [2]

파일 스토리지 서비스가 파일 단위로 데이터를 관리(읽고 쓰기를 지원)한다면 오브젝트 스토리지 서비스는 데이터를 하나의 오브젝트 단위로 관리한다. 모든 형태의 파일이 오브젝트가 될 수 있으며, 오브젝트는 [파일 + 메타데이터]를 의미한다. 우리가 C++, JAVA, Python과 같은 OOP 프로그래밍을 할때, 오브젝트들을 list에 담아서 관리하듯, 데이터(오브젝트)를 리스트(flat) 형태로 보이게끔 관리한다. (그렇다고 데이터를 index로 접근할 수는 없다. 밑에서 설명하겠지만 ID로 접근해야 한다.)

 

Fig 4.는 파일 스토리지와 비교되는 오브젝트 스토리지 특성을 나타낸다. 파일 스토리지는 데이터(파일)를 폴더로 이루어진 계층구조에 저장한다. 그에 비해 오브젝트 스토리지는 데이터(오브젝트)를 계층이 없이 관리한다.

 

그림에서 파일 스토리지는 블록으로, 오브젝트 스토리지는 오브젝트 형태로 데이터를 저장한다고 표현되어 있지만, 오브젝트 스토리지도 실제 물리 디스크에 저장할 때는 데이터를 오브젝트 형태로 저장한다. 아마 파일 스토리지는 inode를 이용하기에 파일=블록집합으로 생각하고, 오브젝트 스토리지는 파일=블록집합이 아닌 오브젝트 형태로 저장한다는 것을 표현하고자 하는 의도이지 않을까 싶다.

 

Fig 5. 오브젝트 스토리지의 읽기 쓰기 [2]

 

Fig 4.는 오브젝트 스토리지의 읽기, 쓰기 과정을 표현한 그림이다. 파일 스토리지의 경우, 사용자는 파일 스토리지에 파일을 어디 폴더에 저장하라고 명령하고, 데이터가 다시 필요할 때는 해당 폴더에서 파일을 읽어와라고 명령한다. 즉 사용자가 파일의 파일 시스템상의 위치까지 지정한다. (실제 물리적인 하드디스크에 저장될 때는 파일 시스템이 알아서 할 것이다.)

 

그에 반해 오브젝트 스토리지의 경우, 사용자가 오브젝트 스토리지에 데이터(오브젝트)를 저장하라고 명령하면, 오브젝트 스토리지가 알아서 저장하고, 그 위치에 접근할 수 있는 KEY(OID)를 사용자에게 return한다. 사용자가 다시 데이터를 찾을 때는 이 KEY를 오브젝트 스토리지에 전송하면, 오브젝트 스토리지가 그 KEY에 해당하는 오브젝트를 보여준다.

 

아마존의 S3[5]가 대표적인 파일 스토리지 서비스이다.

 

 

 

Reference

[1] https://ubuntu.com/blog/what-are-the-different-types-of-storage-block-object-and-file

[2] Christian Bandulet, Principal Engineer, Sun Microsystems, The Storage Evolution: From Blocks, Files and Objects to Object Storage Systems, SNIA, 2008

[3] https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/AmazonEBS.html#ebs-features

[4] https://docs.aws.amazon.com/ko_kr/efs/latest/ug/whatisefs.html

[5] https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html#S3Features