
IT 에서 Persistent 데이터에 대한 이해
대학교를 졸업하고 제일 처음 직장에 입사한후 한 일은 미국 항공사에서 Java 와 그 외 관련된 기술을 사용해서 만들어진 웹사이트에 관한 기능을 업데이트 하고 배포하는 것 이였다. 그때 Agile 이란것도 알게 되었고 Spring Framework 니 Test Driven Development (TDD) 니 대학교에서 접하지 못한 많은걸 배울수 있는 기회가 많았다. 어느정도 직장생활 하다 보니 이런 느낌이 문득 들었다. ‘아… 대학교에선 배우기 위해 내가 돈을 지불해야 하는데 직장에선 배우는데 돈을 받는구나'
어쨌든… 이번 글은 그런 내용은 아니고 Persistence 이란 개념에 대해서 적어볼려고 한다. 이 단어를 처음 접했을때가 그 항공사에서 일할때 였고 생각보다 그 단어가 다른 형태로 자주 나온다. 명사 (Noun) 으론 Persistence 이지만 동사로 … Persist 그리고 형용사로 Persistent… 같은 단어인데 여러가지 형태로 소프트웨어 개발자들 사이에서 심지어 메니져 나 그위인 관리직 사람들의 입에서도 종종 나왔었다. 그때 당시 데이터베이스 (Database) 는 알고 있었지만 Persistence 가 어떻게 다른지 대충 어림 풋 짐작만 하고 있었지 크게 관심이 없어서 거기에 대해서 깊게 파고들 생각은 별로 없었던것 같다. 그러다가 클라우드 (Cloud) 에 접하게 되고 그 분야에 크게 관심이 생겨서 자체 클라우드를 만든 금융 회사로 옮기고 지금도 클라우드 분야에서 컨설팅을 하게 되었는데 Kubernetes 를 기반으로 한 Red Hat Openshift 를 쓰다보니 Persistent Volume (PV) 이란것도 있고 Persistent 에 대한 개념을 잘 아는게 중요한 편이다. 깊게 자세하게 설명할수도 있지만 누가 최대한 쉽게 이해할수 있도록 이 개념을 여기서 정리해 볼려고 한다.
일반적으로 Persistence 라고 하면 사람들은 데이터베이스를 떠올린다. 틀린 말은 아니다. 데이터베이스가 Persistence 메모리의 한 종류라고 정의할수도 있다. 그렇지만 왜 데이터베이스가 Persistent storage 인가? Persistence 는 어떻게 정의되는가? Persistent 의 반대말은 무엇인가? 이 질문들을 통해서 Persistence 에 대해서 이해해 보자.
Q1: Persistence 는 어떻게 정의되는가?
Persistence 에서 “persist” 는 “지속되다" 라는 뜻을 가지고 있다. 이쯤되면 물어볼수 있다. “아니, 저장하라고 쓰는게 메모리 아닌가? 그러면 그냥 Memory 나 Storage 라고 쓰면 되지?” 하지만 지속된다는 그 특징에 초첨을 맞쳐보자. 만약 여러분이 어떤 게임을 코딩해서 만든다고 하면 개발하면서 필요한 값들은 일시적으로 변수 (Variable) 같은 곳에 저장할수 있다. 하드웨어적인 시점으로 본다면 이 값들을 저장하는 변수들도 어떻게 보면 하드웨어 디스크 메모리의 한부분을 차지할수 있고 지속되게 할수도 있겠지만 일반적으로 앱을 중단 시키거나 필요한 계산이 끝나면 바로 날라가 버린다. 하지만 만약 다음에 다시 앱을 다시 시작했을때 이전에 중단했던 곳에서 다시 로딩해서 이어서 게임을 할수 있다면? 이럴때 Persistent 메모리가 필요한것이다.
조금 더 소프트웨어 아키텍쳐 (Software Architecture) 적인 관점으로 본다면 이런 Persistent 데이터들도 결국 하드웨어 공간에 저장이 되고 파티션 된 공간에 저장이 된다. 예를 들어 밑에 그림이 Network File System (NFS) 이 있는데 MongoDB 데이터를 저장하기 위해 /db 라는 곳에 파티션 되어 저장된다. 일반적인 저장공간과 차이가 있다면 여기에 저장되는 파일들은 MongoDB 같은 데이터베이스나 파일들을 저장하는 Object Storage 처럼 특별한 다양한 Persistent 종류들만의 자체만의 규정과 포맷을 통해 저장된다는것이다.

Q2: Persistent 의 반대말은 무엇인가?
Persistent 의 반대말은 전에 말한 변수처럼 프로그램에서 쓰이는 단어가 아니다. 반대말이 여러가지가 있을수도 있겠지만 Ephemeral 이 그 반대말 중의 하나이다. 무언가 Persistent 한다면 그게 지속되는거지만 무언가 Ephemeral 한다면 일시적이라는 뜻이다. 그래서 영어로 대화를 하면 이런 대화들이 나올수도 있다.
- “Ephemeral storage was the way we initially started, but we soon need to migrate to a persistent storage.”
- “What is your strategy on migrating from the ephemeral storage to something more persistent?”
Q3: 데이터베이스는 왜 Persistent 저장공간이라고 하는가?
데이터베이스는 Persistent storage 의 가장 잘 알려진 예인데 MongoDB, Oracle DB, MySQL, Redis 이런 애들을 잘 살펴보면 이런 데이터베이스들도 소프트웨어고 앱이다. 이 소프트웨어들이 하는 일들이 자신들만의 기능을 통해서 특별한 포맷과 방식으로 읽고 저장하는것인데 어차피 하드웨어적인 관점으론 보존될수 있는 메모리 공간에 파일로 저장되기 때문에 persistent storage 의 한 종류라고 많이 불린다. 하지만 한가지 조심해야 하는건 데이터베이스는 소프트웨어기 때문에 그 자체가 persistent storage 를 뜻하는건 아니다. Persistent 데이터 자체는 파일 시스템을 말하는것이고 어떤식으로 저장이 되는지 따라서 달라진다.
Q4: Persistent storage 는 어떤 종류가 있는가?
즉, MongoDB 나 Object Storage 같은 소프트웨어 자체들이 persistent storage 라고 보긴 힘들다. Persistent storage 를 이야기 할땐 그 파일 시스템이 어떻게 되어 있는지 어떻게 쓰일수 있는지 아는게 중요하다. 예를 들어 이 파일 시스템이 Network File System 인지 Local File System 인지. 이 파일 시스템이 Read Write Once (RWO) 인지 Read Write Many (RWX) 인지. 그런 operation 속도는 어떤지. 예를 들어 Amazon Web Service (AWS) 에서 Elastic Block Store (EBS) 나 Elastic File Store (EFS) 를 찾아보길 바란다. 그런걸 이야기 할수 있는게 중요하고 공부하는게 중요하다.
정리하면서…
Red Hat 에선 Storage 전문으로 하는 컨설턴트들이 따로 있는 정도로 이런 데이터를 저장하는 분야도 깊게 들어갈려고 하면 아주 깊게 들어갈수 있다. 처음 클라우드가 나왔을땐 Amazon Web Service (AWS) 가 거의 독점을 했지만 Docker 나 Kubernetes 가 나오게 되면서 이런 독점이 흔들림이 있었다. Red Hat Openshift 같은 소프트웨어를 깔면 그게 AWS 이든 Microsoft Azure 이든 Google Cloud Platform (GCP) 나 On-Prem 혹은 Bare Metal 이든 상관없이 더 Infrastructure 에 대한 복잡함을 추상화 (Abstraction) 시켜서 기업에선 쉽게 메니징 가능하기 때문이다. 그리고 지난 2년간 레드햇에서 일하면서 보고 경험하면서 배운것중 하나가 클라우드에 대한 시장이 정말 빠르게 변화하고 있다는 것이다. Artificial Intelligence (AI) 나 Machine Learning (ML) 에 대한 분야는 AlphaGo 를 통해 잘 알려진 가장 핫한 분야라 (어느정도 Hype 도 있다고 여긴다) 그렇다고 치지만 클라우드는 Container 만 보더라도 짦은시간에 정말 빠르게 발전을 했었다. 아래 Cloud Native Computing Foundation (CNCF) 에서 찾을수 있는 Container Landscape 그림을 보길 바란다.

그리고 최근 AWS 를 통한 Capital One 그리고 다양한 해킹 사건들을 통해서 보안에 대한 분야도 정말 빠르게 발전되고 있다. 네트워크, 보안 이런 분야들은 정말 눈 깜박이면 순식간에 발전되어 있고 그만큼 거기에 관련된 회사들도 엄청 많이 생겨나고 있다. 아래만 하더라도 내가 현재 알고 있는 회사들 이름이다.
Security
그렇지만 네트워크, 보안 외에도 빠르게 발전하고 있는 분야가 많은데 그 중 하나가 Storage 이다. Red Hat 에서도 Rook 이나 Ceph 를 통한 Kubernetes Storage 를 제공하고 있지만 현재 내가 같이 일하고 있는 클라이언트에서 선택 되어서 잘 알고 있는 Portworx 란 회사도 있다. “중국의 테슬라” 라고 비교되는 Nio 란 회사가 이 솔류션을 썼다고 한다. 관심있으면 읽어 보는걸 추천한다.
이런 발전이 눈부시게 빠르고 수요가 많은 storage/data 분야. 관심이 있다면 Persistent 데이터에만 집중해서 빠져들고 공부만 해도 앞으로 IT 직장에 좋은 결과를 얻을리라고 생각한다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.