아키텍처 구성 중에 목표 프로젝트가 데이터를 다루는 만큼 데이터를 저장하는 장소에 대한 고려가 필요했다. 다양한 서비스를 활용할 수 있겠지만 결국 클라우드냐 온프레미스냐로 나눠서 고려하게 되었다. 그중에서 특히 시놀리지와 같은 NAS 장비를 홈에서 구축하는 방법에 관심이 생겼다. 비교를 위해서는 기존에 고려한 클라우드(S3) 방식과 어떤 차이가 있는지 공부가 필요하다 느꼈고, 아래와 같이 학습과 정리를 진행했다.
기본적으로 저장소라 말하는 스토리지는 컴퓨터 사용자에게 익숙한 용어다. 기본적으로 컴퓨터는 메인 프로세서와 저장 장치를 가지고, 우리는 이를 활용해서 데이터를 생산, 가공하고 저장하게 된다. 여기서 조금 더 확장해서 PC가 아닌 여러 명의 사용자가 접근하는 커다란 시스템으로 바꿔보자.

그림으로 간단하게 표현해봐도 벌써 머리가 아프다. 저장소는 적고 제한적이며, 저장 공간을 늘리겠다고 디바이스 자체를 늘려야 하고, 늘려봤자 기존 디바이스는 추가한 디바이스의 저장소를 참조할 수 없다. 또 동시에 저장소에 접근하는 사람은 여러 명이고 정보가 파편화되고.. 등등 다양한 문제가 야기될 것이 눈에 뻔하다. 그래서 기존에 디바이스에 묶여 있는 구조가 아니라 컴퓨팅과 스토리지를 분리하는 아키텍처가 요구되기 시작한다.
시작은 단순하게 호스트가 되는 디바이스와 저장 장치가 되는 스토리지를 분리하자. 그리고 호스트에서 사용할 스토리지에 직접 연결해 스토리지에 저장, 읽기, 수정 등을 진행한다. 이렇게 호스트와 스토리지를 연결해서 데이터를 저장하는 방식을 DAS(Direct Attached Storage)라고 한다.

어떻게 보면 스토리지 아키텍처에서 가장 단순한 유형의 시스템으로, 사실상 기존 스토리지 아키텍처와 동일한 아키텍처다. 직접 연결되어 있으니 장단점이 크게 변하진 않는다.
앞선 DAS 아키텍처에서 어떤 문제를 해결해야 더 많은 저장 공간을 확보하고, 호스트의 문제가 스토리지에 영향을 주는 것을 막을 수 있을까? 호스트와 스토리지의 연결을 느슨하게 만들면 된다. 직접 연결을 아닌 방법으로 네트워크를 사용할 수 있는데 이런 방법이 NAS (Network Attached Storage)다.

확실히 DAS에 비해 유연한 연결이 허용된다. 네트워크를 통해 스토리지를 중앙 집중 방식으로 파편화를 막을 수 있게 된다. 파일 서버가 별도로 요구되지만 이를 기반으로 LAN의 연결에 따라 저장 장치를 좀 더 손쉽게 관리가 가능해진다. 다만 네트워크 상에서 하나의 노드로 동작하면서, 호스트의 접속이 많아지면 성능 저하로 직결되는 문제가 있다. 거기에 파일 시스템으로 공유되기 때문에 단숨에 통째로 쉽게 보안 위협에 노출된다.
여기서 스토리지 장치, 서버 혹은 다른 여러 장치를 LAN이 아닌 전용 네트워크로 묶어서 느슨한 연결을 구성할 수도 있는데, 이런 방식을 SAN (Storage Area Network)라고 한다. SAN의 경우 Fiber Channel Switch를 통해 연결을 진행하고, 이를 통해서 고속 데이터 네트워크를 제공한다.

지금까지 스토리지가 어떻게 구성되는지 아키텍처를 살펴봤다. 여기서 우린 저렇게 다수의 저장 장치를 연결하면서 호스트에서 이를 어떻게 접근하고 관리할지에 대한 의문이 생긴다. 대표적으로 DBMS와 같은 어플리케이션 서버를 사용할 텐데, 이 방법만 있진 않을 텐데 말이다.

우선 각 아키텍처별로 정리하자면 어플리케이션 서버 내지 파일 서버를 통해 저장되어 있는 데이터를 관리하게 된다. 각 서버는 다양한 서비스를 통해 사용할 수 있을 것이니 패스하도록 하겠다. 결과적으로 우리가 알 수 있는 것은 앞선 아키텍처들처럼 각 물리적으로 스토리지를 구성하더라도, 이를 관리하기 위해 별도의 서버 구성이 필요하다는 점이다.
별도의 서버 구성이 필요하다면 그 서버들은 어떤 유형으로 나뉠지 한번 알아보자. 데이터를 어떤 형태로 저장하는지에 따라 분류하게 되는데, File Storage / Block Storage / Object Storage로 구분할 수 있다.
파일 스토리지는 우리가 흔히 볼 수 있는 데이터 스토리지 유형으로 폴더가 있고, 폴더 내 파일이 있는 형태로 관리된다. 흔히 우리가 사용하는 PC에서 활용되는 방식으로 가장 익숙한 방식이라고 할 수 있다. 다만 디렉토리의 Depth가 깊을수록 파일의 경로가 길어지고, 디렉토리나 폴더의 계층 구조를 지키는 과정에서 데이터 관리가 어려워질 수 있다.
블록 스토리지는 데이터를 고정된 크기의 블록으로 구분하여 단위별로 저장하는 방식이다. 블록 크기는 설정에 따라 킬로 바이트 단위에서 메가바이트까지도 이른다(일반적으로 256KB ~ 4MB 정도). 블록에 각각 고유한 주소 내지 번호를 부여하며, 이를 기반으로 테이블에 로깅해서 추적하게 된다. 이를 통해 낭비되는 공간 없이 저장할 수 있고, 테이블을 통해 신속하게 검색이 가능하다.
오브젝트 스토리지는 오브젝트라 하는 단위로 데이터를 각각 나누고 저장소에 저장하는 방식이다. 오브젝트는 키와 문서, 이미지 또는 데이터, 관련된 메타 데이터로 구성된다. 계층 구조가 아닌 Flat한 구조를 가지며, 고유 식별자를 통해 스토리지 내에서 객체의 주소를 찾아낼 수 있다. 구조상 데이터 검색 및 읽기 속도가 빠르나, 메타 데이터로 인해 입출력 오버헤드를 가지게 된다.
NAS라던가 오브젝트 스토리지라던가 이름은 많이 들어봤지만 정확히 어떤 용도로 사용되는지 몰랐는데, 이번 기회를 통해 공부해 보게 되었다. NAS에서 오브젝트 스토리지가 가능할까? 하는 궁금증이 있었는데, 공부하면서 결국 NAS는 스토리지 아키텍처의 한 방법이고 오브젝트 스토리지는 데이터 스토리지의 한 유형으로 불가능한 방법은 아니었다. 다만 데이터의 유형이나 사용 방식에 따라 좀 더 적합한 방법이 나뉘게 될 테니 좀 더 고민을 하게 될 것 같다.
https://www.purestorage.com/kr/knowledge/what-is-data-storage.html
https://blog.naver.com/suin2_91/223030481792
https://developers-haven.tistory.com/82
https://aws.amazon.com/ko/compare/the-difference-between-block-file-object-storage/
블로그 이전을 위해 Tistory와 병행하여 작성을 진행하고 있습니다.
https://is42.tistory.com/