Object vs File vs Block
AWS S3에 대해 알아보던 중 Storage에도 type이 존재한다는 것을 깨달아서 간단하게나마 찾아보았다.
Storage type은 Data를 표현하고, 구성하고, 저장하는 방식에 따라 크게 3가지로 나뉜다.
- Object Storage
- File Storage
- Block Storage
Object storage
- Object 단위로 데이터를 저장하고 해당 Object에 매칭되는 Key를 갖는다. (추후에 해당 데이터에 접근할 때 이 Key를 사용)
- 모듈화된 Unit으로 동작함. 각 각의 Object는 self-contained repository, unique identifier, metadata로 구성됨
- Object storage는 simple HTTP API가 필요함
- 장점: 사용한 만큼만 요금을 지불할 수 있음 (Cost efficient), 확장성이 좋음 (따라서 Public Cloud 환경의 저장소로 사용하기 적합함.)
- 단점: Object는 수정 불가능, 기존의 전통적인 데이터베이스와 호환이 어려움. (데이터 접근 시, PUT/GET 등의 Method를 통해서 가능하다. File/Block storage의 경우는 바로 직접적으로 접근 가능)
File Storage
- 일상적으로 PC에서 파일에 접근할 때 쓰는 것이 바로 이 File Storage
- Path로 데이터를 찾음
- NAS (Network Access Storage) 환경에서 많이 사용됨
- 장점: Hierarchy 구조, 다수의 사용자가 한꺼번에 작업할 경우 용이
- 단점: storage 확장을 위해서 시스템 스펙 업그레이드(scale-up)가 아닌 시스템을 증설해야함 (scale-out)
Block Storage
- 데이터는 Bytes (8 bits)단위의 Block으로 저장되고, 이런 Block은 각자의 주소를 갖는다.
- Block 단위의 데이터들은 Unique identifier을 갖는다. (이 특성을 사용하여 데이터의 일부는 Linux에 다른 일부는 Windows에 저장 가능)
- 데이터를 특정 환경에 종속하지 않고 다중 환경으로 분포하여 더 나은 서비스 제공을 하기 위해 사용함
- 데이터가 분산된 상태에서 데이터를 요청받으면 underlying storage software가 뿔뿔이 흩어진 데이터를 모아서 사용자에게 전달함
- SAN (Storage-area network) 환경에서 주로 쓰임
- Path로 데이터에 접근하는것이 아니기 때문에 데이터를 빨리 가져올 수 있음
- 데이터가 수정될 경우, 데이터 전부를 교체하는 것이 아니라 수정된 일부 Block만 업데이트하면 됨.
- Enterprise 환경에서 대량의 transactions이 발생하는 경우 유용
- 장점: 고가용성, Performance
- 단점: 비쌈. Metadata 관리를 위한 application/database level의 조치가 필요함. (따라서 신경쓸게 하나 더 늘어남.)
기본적인 개념은 위와 같고, 서로 간의 차이점에 대해 잘 나와있는 도식이 있어서 첨부해본다.
Storage에 대해서 찾아보기 전에는 단순하게 File storage에서부터 Block storage를 거쳐 현재는 Object storage로 Storage가 발전해나간 것이라고 생각했다. 그래서 ‘File object는 legacy 한 것, 현재는 안쓰는 것 그리고 현재는 Object storage만 사용한다’ 라는 아주 위험한 일반화를 범했는데.. 위의 포스팅을 정리하면서 깨달은 사실은 ‘내가 어떤 데이터를 어떻게 저장할건지에 따라 storage 종류를 선택할 수 있다는 것’이다.
즉, 근래 들어 여러 기업에서 Object storage를 도입하는 것은 Object storage의 성능이 좋아서가 아니라 ‘정형화 된’ 그리고 ‘데이터베이스만으로도 처리가 가능한’ 데이터가 아닌 데이터들.. 흔히 우리가 말하는 빅 데이터들을 처리하기에 용이하기 때문이라고 말할 수 있다.
아무리 빅 데이터의 시대라지만 분명 기업마다, 개인마다 상황이 다를 것이니 용도를 정확하게 파악하고 그에 맞는 Storage를 선택하는 것이 핵심이겠다.
References
- https://www.redhat.com/en/topics/data-storage/file-block-object-storage
- https://www.datacore.com/event/the-differences-between-block-file-and-object-storage-and-why-it-matters/
🍰