영구 스토리지: 컨테이너 시대의 장기 메모리

게시 됨: 2023-04-17

영구 저장소는 비휘발성 방식으로 데이터를 보존하여 장치나 애플리케이션의 전원을 끄거나 다시 시작한 후에도 계속 사용할 수 있도록 하는 것을 말합니다. 데이터 저장 및 검색을 통해 웹 애플리케이션은 사용자 정보 및 상태를 저장하고 안정적으로 작동할 수 있습니다.

모놀리식 애플리케이션에서는 서버와 스토리지가 함께 있기 때문에 스토리지 액세스가 간단합니다. 그러나 지리적으로 분산된 시스템은 스토리지 시스템이 전 세계 모든 구성 요소에서 계속 사용 가능해야 하므로 액세스가 더욱 복잡해집니다.

컨테이너는 데이터 저장에 부적합한 특성인 경량, 상태 비저장, 임시 특성 때문에 컨테이너화로 인해 문제가 더욱 복잡해집니다. 따라서 모든 영구 스토리지 솔루션은 컨테이너와 원활하게 작동할 수 있어야 하므로 또 다른 복잡성 계층이 추가됩니다.

이 기사에서는 유형, 아키텍처 및 사용 사례를 탐색하여 영구 스토리지를 자세히 살펴봅니다. 또한 Docker의 볼륨 스토리지와 영구 볼륨 스토리지의 차이점을 설명하는 실습 데모를 제공합니다.

영구 저장소의 유형

기존의 회전 디스크(하드 디스크 드라이브 또는 HDD), SSD(Solid-State Drive), NAS(Network-Attached Storage) 및 SAN(Storage Area Network)을 비롯한 여러 유형의 비휘발성 스토리지가 있습니다.

  • HDD는 자기 미디어의 회전 디스크를 사용하여 디지털 데이터를 저장하고 검색하는 전기 기계 데이터 저장 장치입니다. 디스크는 데이터를 읽고 쓰는 이동식 액추에이터 암의 자기 헤드를 사용합니다.
  • 반도체 저장 장치, 솔리드 스테이트 장치 또는 솔리드 스테이트 디스크라고도 하는 SSD는 집적 회로 어셈블리를 사용하여 일반적으로 움직이는 부품이 없는 상호 연결된 플래시 장치를 사용하여 데이터를 지속적으로 저장합니다. 고정식 특성으로 인해 HDD보다 빠르고 안정적입니다.
  • 네트워크 연결 스토리지는 NTFS(New Technology File System) 또는 EXT4(네 번째 확장 파일 시스템)와 같은 파일 시스템을 사용하여 로컬 네트워크를 통해 연결된 HDD, SSD 또는 둘 다의 그룹입니다.
  • SAN은 테이프 라이브러리 또는 디스크 어레이와 같은 네트워크로 연결된 고속 블록 수준 스토리지 장치입니다. 해당 연결은 운영 체제에 로컬 스토리지로 표시되며 LAN(Local Area Network)을 통해 액세스할 수 없습니다.
영구 스토리지로 종료 및 재시작 중에 데이터를 안전하게 유지하십시오! 클릭하여 트윗하는 방법은 다음과 같습니다.

영구 스토리지 아키텍처

영구 스토리지에는 세 가지 접근 방식이 있으며 각각 고유한 사용 사례와 제한 사항이 있습니다.

객체 지속 아키텍처

개체 영구 아키텍처 접근 방식은 ORM(개체 관계형 매핑)을 사용하여 데이터를 관계형 또는 키-값 데이터베이스에 개체로 저장합니다. 이 접근 방식은 ORM이 저장 및 검색을 처리하므로 데이터에 정의된 스키마가 없을 때 유용합니다.

블록 영구 아키텍처

블록 영구 아키텍처는 대용량 파일을 저장할 때 유용한 블록 수준 저장 장치를 사용합니다. 이 접근 방식은 여러 블록을 사용하여 저장 용량을 늘릴 수 있으므로 많은 양의 데이터를 저장할 때 유용합니다.

Filestore 영구 아키텍처

이름에서 알 수 있듯이 파일 저장소 영구 아키텍처 접근 방식은 파일 시스템을 사용하여 데이터를 저장합니다. 한 가지 방법은 중앙 집중식 데이터 저장 방법을 제공하는 데이터베이스 서버를 사용하는 것입니다. Kinsta와 같은 클라우드 호스팅 솔루션은 애플리케이션에 쉽게 연결되고 지속성을 제공하는 데이터베이스 서버를 사용합니다.

Filestore 영구 아키텍처는 파일을 자주 검색해야 하는 애플리케이션과 이를 관리하기 위한 인터페이스가 필요한 경우에 유용합니다.

영구 저장소 사용 사례

이 섹션에서는 각 스토리지 유형의 일부 사용 사례에 대해 설명합니다.

개체 영구 저장소

  • 클라우드 스토리지: 개체 영구 스토리지는 일반적으로 클라우드 스토리지 솔루션에서 이미지, 비디오 및 문서와 같은 대량의 비정형 데이터를 저장하고 검색하는 데 사용됩니다. 클라우드 공급자는 객체 스토리지를 사용하여 고객에게 확장 가능하고 가용성이 높으며 내구성이 뛰어난 스토리지 서비스를 제공합니다.
  • 빅 데이터 분석: 개체 영구 스토리지는 빅 데이터 분석에서 데이터 분석, 기계 학습 및 AI에 자주 사용되는 대용량 데이터 세트를 저장하고 관리하는 데 사용됩니다. 개체 스토리지를 사용하면 데이터에 빠르고 효율적으로 액세스할 수 있으므로 빅 데이터 아키텍처의 핵심 구성 요소가 됩니다.
  • 콘텐츠 전송 네트워크: 객체 영구 스토리지는 콘텐츠 전송 네트워크(CDN)에서 이미지, 비디오 및 정적 파일과 같은 콘텐츠를 글로벌 서버 네트워크에 저장하고 배포하는 데 사용됩니다. 개체 스토리지를 통해 CDN은 위치에 관계없이 전 세계 사용자에게 고속 콘텐츠를 제공할 수 있습니다.

블록 영구 저장소

  • 고성능 컴퓨팅(HPC) : HPC 환경은 상당한 양의 데이터를 빠르고 효율적으로 처리합니다. 블록 영구 스토리지를 사용하면 HPC 클러스터가 과학 시뮬레이션, 날씨 모델링 및 재무 분석과 같은 대규모 데이터 세트를 저장하고 검색할 수 있습니다. 블록 스토리지는 데이터에 대한 고성능, 짧은 대기 시간 액세스를 제공하고 병렬 입력/출력(I/O) 작업을 허용하여 처리 시간을 크게 향상시킬 수 있기 때문에 종종 HPC에 선호됩니다.
  • 비디오 편집: 비디오 편집 응용 프로그램에는 대용량 비디오 파일에 대한 고성능 및 짧은 대기 시간 액세스가 필요합니다. 또한 비디오 파일을 실시간으로 렌더링하고 편집하기 위해 초당 상당한 수의 I/O 작업과 짧은 대기 시간을 수용해야 합니다. 블록 스토리지는 이러한 기능을 제공하므로 비디오 편집 워크플로에 이상적인 솔루션입니다.
  • 게임: 게임 애플리케이션은 또한 게임 자산 및 플레이어 데이터에 액세스하기 위해 고성능 및 짧은 지연 시간을 요구합니다. 블록 스토리지는 많은 양의 데이터를 빠르게 저장하고 검색하여 게임 환경이 게임 플레이 중에 즉시 로드되고 응답성을 유지하도록 합니다.

Filestore 영구 스토리지

  • 미디어 및 엔터테인먼트: 비디오 편집, 애니메이션 및 렌더링 애플리케이션은 일반적으로 영구 스토리지를 사용합니다. 이러한 애플리케이션에는 비디오, 오디오 및 이미지와 같은 대용량 미디어 파일에 대한 고성능 및 짧은 대기 시간 액세스가 필요합니다. Filestore는 여러 클라이언트에서 액세스할 수 있는 공유 파일 시스템을 제공하므로 이러한 애플리케이션에 이상적인 스토리지 솔루션입니다.
  • 웹 콘텐츠 관리: 웹 콘텐츠 관리 시스템(CMS)은 공유 파일 시스템의 파일 저장소 영구 저장소를 사용하여 텍스트, 이미지 및 멀티미디어 파일과 같은 웹 사이트 콘텐츠를 저장하고 관리합니다. Filestore는 웹 사이트 콘텐츠를 위한 중앙 위치를 제공하여 관리 및 업데이트를 더 쉽게 만듭니다. 또한 여러 사용자가 동일한 콘텐츠에 대해 동시에 작업할 수 있으므로 협업과 생산성이 향상됩니다.

컨테이너의 영구 스토리지

컨테이너는 가볍고 휴대 가능하며 안전하고 간단하며 서로 다른 애플리케이션 간의 융합을 제공합니다. 컨테이너 재시작과 제거 사이에 데이터를 유지하는 메커니즘이 있어야 합니다. 컨테이너에는 기존 애플리케이션과 같은 파일 스토리지 또는 파일 시스템이 있지만 새로운 변경 사항으로 다시 빌드할 때마다 모든 비영구 데이터가 손실됩니다.

이것이 컨테이너가 볼륨 스토리지를 포함하거나 스토리지 볼륨을 마운트하는 옵션을 제공하는 이유입니다. 컨테이너는 저장소 볼륨을 디렉터리로 취급합니다. 볼륨에 기록된 모든 데이터는 호스트 파일 시스템으로 들어갑니다.

컨테이너를 다시 시작하면 새 인스턴스가 생성되고 이전 인스턴스가 삭제되기 때문에 컨테이너의 영구 스토리지는 이러한 방식으로 작동해야 합니다. 컨테이너에 일관된 데이터 보기가 없는 경우 컨테이너가 다시 시작되면 데이터가 사라집니다. 스토리지 볼륨은 세션과 컨테이너가 다시 시작되는 동안 데이터를 보존하므로 컨테이너가 이동되거나 다시 시작되더라도 상태를 유지할 수 있습니다.

볼륨 대 영구 볼륨

컨테이너는 영구 데이터를 저장하는 두 가지 방법(볼륨 및 영구 볼륨 사용)을 제공합니다. 그들 사이에는 상당한 차이가 있습니다. 컨테이너는 볼륨 스토리지의 데이터를 관리합니다. 컨테이너를 중지해도 데이터는 유지되며 컨테이너를 다시 시작할 때 사용할 수 있습니다. 그러나 컨테이너를 삭제하거나 제거하면 기본 볼륨 스토리지도 삭제되므로 데이터가 손실됩니다.

영구 볼륨 저장소 또는 바인드 마운트는 컨테이너의 파일 시스템 외부에 데이터를 저장하는 방법입니다. 이렇게 하면 컨테이너를 삭제해도 데이터가 손실되지 않습니다. 수동으로 삭제할 때까지 지속됩니다.

다음 섹션에서는 두 가지 볼륨 유형을 예제와 함께 보여줍니다.

컨테이너 영구 스토리지 데모

Docker 컨테이너를 사용한 영구 스토리지를 시연하기 위해 작은 웹 애플리케이션을 만들었습니다. Docker를 설치하고 이 GitHub 리포지토리에서 코드를 가져오면 따라갈 수 있습니다.

애플리케이션은 사용자 입력을 위한 2개의 필드가 있는 기본 양식입니다.

  • 제목
  • 문서 텍스트
스크린샷: 데모 애플리케이션의 피드백 양식 그래픽 인터페이스.
제목문서 텍스트 필드가 있는 데모 애플리케이션의 GUI.

사용자 입력을 저장하면 제목 필드에 제공된 이름으로 피드백 디렉토리에서 파일을 열어 액세스할 수 있습니다. 문서 텍스트 필드의 입력은 파일의 내용입니다.

볼륨 스토리지 사용 방법

자신의 머신에 애플리케이션을 설치하면 Dockerfile 에 표시된 대로 볼륨 스토리지를 사용할 수 있습니다.

스크린샷: VOLUME 속성을 포함한 Docker 파일의 내용.
볼륨 스토리지 사용을 보여주는 Dockerfile.

이제 이미지를 빌드하고 컨테이너를 실행합니다. 이렇게 하려면 다음 명령을 실행합니다.

 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
스크린샷: 볼륨 저장소가 있는 docker build 명령의 결과를 보여주는 터미널 창.
볼륨 스토리지로 애플리케이션 구축.
스크린샷: 볼륨 스토리지로 docker run 명령을 실행한 후의 터미널 창.
컨테이너를 실행하면 볼륨 스토리지를 관리하고 있음을 알 수 있습니다.

애플리케이션이 실행되면 localhost:3000으로 이동하여 피드백을 제출합니다.

스크린샷: 데모 애플리케이션의 그래픽 인터페이스를 통해 피드백을 제출합니다.
응용 프로그램에 피드백을 제출합니다.

저장을 클릭하고 localhost:3000/feedback/test.txt 로 이동하여 입력이 성공적으로 저장되었는지 확인합니다.

스크린샷: 제출된 test.txt 파일이 열려 있는 브라우저.
성공적인 피드백이 확인되었습니다.

컨테이너를 제거하고 다시 시작하여 입력이 지속되는지 확인하십시오.

 docker stop feedback-app docker start feedback-app

이제 동일한 URL을 방문하면 피드백이 여전히 있는 것을 볼 수 있습니다. 하지만 컨테이너를 제거하고 다시 시작하면 어떻게 될까요?

 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

다시 시작한 후 해당 URL로 돌아가면 컨테이너를 제거할 때 데이터가 손실되었기 때문에 더 이상 존재하지 않습니다. 볼륨 데이터는 컨테이너를 제거할 때가 아니라 중지할 때만 유지됩니다.

스크린샷: test.txt 파일을 열지 못하는 브라우저 보고 오류.
피드백 데이터가 손실되었습니다.

이 문제를 완화하고 컨테이너를 제거한 경우에도 데이터를 유지하려면 영구 볼륨 스토리지 또는 명명된 스토리지를 사용해야 합니다. 먼저 컨테이너와 이미지를 정리해야 합니다.

 docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes

영구 볼륨 저장소를 사용하는 방법

이를 테스트하기 전에 Dockerfile에서 VOLUME 특성을 제거하고 이미지를 다시 빌드해야 합니다.

스크린샷: VOLUME 속성을 제거하도록 편집된 Dockerfile.
VOLUME 속성을 제거하도록 Dockerfile을 업데이트했습니다.
 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

보시다시피 두 번째 명령에서 -v 플래그를 사용하여 컨테이너를 제거해도 지속되는 컨테이너 외부의 영구 볼륨을 정의합니다.

이전 단계와 마찬가지로 피드백을 추가하고 컨테이너를 중지, 제거 및 다시 시작한 후 액세스하십시오.

스크린샷: 데모 애플리케이션의 피드백 양식에 텍스트 입력.
지속성 테스트에 대한 새로운 피드백을 추가합니다.
 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

보시다시피 컨테이너를 중지하고 제거한 후에도 데이터에 액세스할 수 있으며 그대로 유지됩니다.

스크린샷: 두 번째 테스트 파일을 성공적으로 연 브라우저.
컨테이너를 중지하고 제거한 후에도 데이터는 남아 있습니다.
영구 스토리지: 안정적이고 신뢰할 수 있는 컨테이너화된 앱의 핵심! 여기에서 유형, 아키텍처 및 사용 사례에 대해 자세히 알아보세요 ️ Click to Tweet

요약

영구 스토리지는 컨테이너 수명 주기 외부에서 데이터를 유지할 수 있기 때문에 컨테이너화된 애플리케이션에 매우 중요합니다. 컨테이너화된 애플리케이션을 위한 두 가지 주요 영구 스토리지 유형은 볼륨과 바인드 마운트이며 각각의 이점과 사용 사례가 있습니다.

볼륨은 컨테이너의 파일 시스템 내에 저장되는 반면 바인드 마운트는 호스트 시스템에서 직접 액세스할 수 있습니다.

영구 스토리지를 사용하면 컨테이너 간에 데이터를 공유할 수 있으므로 복잡한 다중 계층 애플리케이션을 구축할 수 있습니다. 영구 스토리지는 컨테이너화된 애플리케이션의 안정성과 연속성을 보장하고 중요한 데이터를 안정적이고 유연하게 저장할 수 있는 방법을 제공하는 데 필수적입니다.

Docker를 사용하여 웹 응용 프로그램을 개발하는 경우 Kinsta의 응용 프로그램 호스팅 서비스로 Dockerfile 배포를 구성하는 것이 간단하다는 것을 알게 될 것입니다.