1. 클라우드 기반의 NoSQL과 반정형 데이터
<학습 목표>
- NoSQL의 개념과 Azure에서 사용할 수 있는 서비스들을
살펴본다.
- 비정형 혹은 반정형 데이터를 다루는 주요 포멧들을 살펴본다.
1.1 비정형 데이터의 정의와 NoSQL의 특징
최근 클라우드 환경에서는 이미지, 동영상, 로그 파일과 같이 정해진 형식이 없는 비정형(Unstructured) 데이터의 비중이 매우 커지고 있습니다. 이를 처리하는 비관계형(NoSQL) 데이터베이스는 다음과 같은 유연한 특징을 가집니다.
- 스키마의 유연성: 테이블 형식이 아닌 여러 스키마를 포함할 수 있으며, 동일한 컬렉션 내에 있더라도 엔터티(데이터)마다 서로 다른 필드를 가질 수 있습니다.
- 레이블 기반 정의: 각 데이터 필드를 나타내는 이름으로 레이블을 지정하여 정의하는 경우가 많습니다.
- 활용 사례: 빈번한 활동으로 대량의 데이터를 실시간 처리해야 하는 IoT 및 텔레매틱스, 전 세계로 분산된 문서 스토리지, 대기 시간이 낮은 게임 내 통계 등에 필수적입니다.
1.2 반정형 데이터의 대표 주자: JSON 상세 파헤치기
JSON(JavaScript Object Notation)은 현대 웹 개발과 NoSQL 환경에서 가장 표준적으로 사용되는 경량 데이터 교환 형식입니다.
- 구조와 특징:
- 기본 구조: 키-값 쌍으로 이루어진 객체(Object)와 순서화된 값의 목록인 배열(Array)을 사용합니다.
- 가독성: 텍스트 기반 형식으로 사람이 읽고 쓰기 매우 쉽습니다.
- 언어 독립성: 대부분의 언어에서 파싱과 생성을 지원하여 시스템 간 데이터 전송에 최적화되어 있습니다.
- 지원 데이터 타입: 문자열, 숫자, 불리언(true/false), null, 객체, 배열을 지원합니다.
{
"name": "Jane Smith",
"age": 35,
"city": "San Francisco",
"hobbies": ["reading", "swimming"]
}
- 장점과 단점:
- 장점: 직관적인 구조 덕분에 이해가 쉽고, JavaScript와의 통합성이 좋아 웹 앱에서 성능이 뛰어납니다.
- 단점: 복잡한 데이터 타입을 표현하는 데 한계가 있고, 설정 파일로 쓸 때 주석을 지원하지 않는 아쉬움이 있습니다.
- 주요 용도: RESTful API의 데이터 포맷, 애플리케이션 설정 정보 저장, 게임 데이터 및 사용자 설정 저장 등
1.3 기타 반정형 데이터 포맷
- Avro: 스키마 기반 직렬화 시스템으로 빠른 처리가 가능합니다.
- ORC(Optimized Row Columnar) / Parquet: 컬럼 기반 저장 방식으로 대규모 분석과 하둡(Hadoop) 워크로드에 최적화되어 있습니다.
2. Azure 스토리지 계정(Storage Accounts)
Azure 스토리지 계정은 안전하고 확장 가능한 클라우드 저장소의 기본 단위로, 다음과 같은 핵심 특징을 제공합니다.
2.1 스토리지 계정의 주요 특징
- 확장성 및 가용성: 대규모 데이터를 처리할 수 있는 확장성을 제공하며, 높은 가용성과 복원력을 보장합니다.
- 보안 및 규정 준수: 데이터 암호화, 액세스 제어, 보안 인증을 제공하며 산업 표준 규정을 준수합니다.
- 전 세계 복제 옵션: 데이터 손실 방지를 위해 다양한 복제 방식을 선택할 수 있습니다.
- LRS(지역 복제): 단일 지역 내에서 복제본 유지.
- GRS(지리적 복제): 2차 지역까지 데이터를 복제하여 지역 장애에 대비.
- RA-GRS(읽기 전용 지리적 복제): 지리적 복제와 동시에 2차 지역에서 읽기 권한 제공.
- 유연한 요금제: 사용한 만큼만 지불하는 과금 모델로 비용 효율성을 극대화합니다.
2.2 스토리지 서비스 종류
-
Blob Storage: 이미지, 동영상, 로그 파일 등 대규모 비구조적 데이터를 저장하는 데 적합하며, 데이터 계층화(Hot, Cool, Archive)를 지원합니다.

- 블록(Block) Blob: 텍스트나 이진 파일을 저장하며 최대 4.7TB까지 지원합니다.
- 추가(Append) Blob: 로그 데이터와 같이 끝부분에 데이터가 계속 추가되는 작업에 최적화되어 있습니다(최대 195GB).
- 페이지(Page) Blob: 512바이트 페이지 모음으로 구성되어 VM의 가상 디스크 저장소에 사용됩니다(최대 8TB).
-
File Storage: 클라우드 기반의 완전 관리형 파일 공유 서비스입니다.
- 범용적 액세스: 인터넷이 연결된 곳이라면 전 세계 어디서나 파일 공유에 접속할 수 있습니다.
- 표준 프로토콜: SMB 3.0 프로토콜을 사용하여 클라우드 애플리케이션은 물론 온프레미스(On-premises) 앱과도 원활하게 통합됩니다.
- 대규모 저장: 단일 스토리지 계정 내에서 최대 100TB의 대용량 데이터 공유를 지원합니다.
- 보안 및 신뢰성: 데이터가 로컬로 복제되어 복원력이 높으며, 저장된 데이터(미사용 시)는 자동으로 암호화되어 안전하게 보호됩니다.

-
Queue Storage: 클라우드 애플리케이션 간에 메시지를 주고받아 메시지 기반의 작업 흐름을 구현할 때 사용합니다.
-
Table Storage: 스키마가 없는 NoSQL 저장소로, 구조화된 데이터를 저렴하고 효율적으로 저장하는 데 적합합니다.

-
Disk Storage: Azure 가상 머신(VM)에 연결되는 디스크를 저장하며, 고성능 SSD와 HDD 옵션을 제공합니다.
3. Azure Cosmos DB의 이해와 활용
3.1 Cosmos DB의 특징과 사용 사례
<학습 목표>
- Azure에서 제공하는 Cosmos DB를 이해한다.
- Cosmos DB에서 사용할 수 있는 다양한 API를 함께
살펴본다.
Azure Cosmos DB는 전 세계적으로 분산된 다중 모델 NoSQL DBMS(데이터베이스 관리 시스템)입니다. 데이터를 분할된 문서 집합으로 관리하며, 실시간 액세스를 통해 매우 낮은 읽기 및 쓰기 대기 시간을 제공하는 것이 특징입니다.
3.1 주요 특징 및 사용 사례
Cosmos DB는 Microsoft의 성능 약정을 통해 전 세계 어디서나 10ms 미만의 응답 시간을 보장합니다.
- 웹 및 소매: 다중 마스터 복제 모델을 사용하여 글로벌 규모의 웹 및 모바일 애플리케이션을 지원합니다.
- 게임: 게임 내 통계, 소셜 미디어 통합, 최고 점수 리더보드 등 사용자 정의된 개인화 콘텐츠를 제공하는 데 최적화되어 있습니다.
- IoT 시나리오: 수십만 개의 센서 디바이스에서 발생하는 실시간 데이터를 매우 빠르게 받아들이고 저장할 수 있습니다.
3.2 다양한 지원 API
Cosmos DB는 기존 애플리케이션과의 호환성을 위해 다양한 오픈 소스 엔진용 API를 제공합니다.
- NoSQL API (구 SQL API): JSON 문서를 저장하고 SQL과 유사한 쿼리 언어를 사용합니다. HTTP/HTTPS 엔드포인트를 통해 통신합니다.
- MongoDB API: 기존 MongoDB 애플리케이션 및 도구와 호환되며 문서 기반 데이터 모델에 적합합니다.
- Cassandra API: Apache Cassandra와 호환되며 와이드 컬럼 모델을 지원하여 대규모 IoT 데이터 및 시계열 데이터 관리에 사용됩니다.
- Gremlin API: 그래프 데이터베이스 API로, 소셜 네트워크 분석이나 추천 엔진 등 복잡한 관계 모델링에 활용됩니다.
- PostgreSQL API: 관계형 데이터 모델이 필요한 시스템이나 기존 PostgreSQL 애플리케이션 마이그레이션에 사용됩니다.
3.3 데이터 마이그레이션 및 프로비저닝
데이터 마이그레이션 도구를 사용하면 JSON 파일, MongoDB, SQL Server, CSV 파일, Amazon DynamoDB 등 다양한 원본에서 데이터를 가져올 수 있습니다. 계정 생성은 Azure Portal을 통한 대화형 방식이나 CLI, PowerShell 등을 통한 프로그래밍 방식으로 수행할 수 있습니다.
3.4 요청 단위 (RU, Request Unit)
Cosmos DB의 비용과 성능을 결정하는 핵심 개념입니다.
- 정의: 읽기, 쓰기, 쿼리 등 모든 데이터베이스 작업의 비용을 측정하는 단위입니다. 예를 들어, 1KB 항목을 읽는 작업은 항상 1 RU의 비용이 발생합니다.
- 비용 측정: 작업의 복잡도와 데이터 양에 따라 필요한 RU가 달라지며, 복잡한 쿼리일수록 더 많은 RU를 소모합니다.
- 관리: 사용자는 초당 RU 수(RU/s)를 프로비저닝하여 애플리케이션의 처리량 요구 사항을 충족하고 비용을 제어할 수 있습니다.
4. Cosmos DB 아키텍처 및 Python 실습
<학습 목표>
- 간단한 앱을 파이썬으로 개발해보고 Cosmos DB와 연결하기
위한 요소들을 살펴보고 직접 코딩해 본다.
4.1 Python을 활용한 Cosmos DB 연동
5주차의 마지막 세션에서는 간단한 애플리케이션을 Python으로 직접 개발하여 Cosmos DB와 연결하는 실무적인 아키텍처 구성을 학습했습니다.
- 핵심 라이브러리: Python 환경에서 Cosmos DB의 NoSQL API와 통신하기 위해
azure-cosmos 패키지를 활용합니다.
- 연결 필수 조건:
- 활성 구독이 포함된 Azure 계정
- Azure Cosmos DB for NoSQL 계정 프로비저닝
- Python 3.7 이상의 개발 환경
- (선택 사항) Azure CLI 또는 Azure PowerShell을 통한 리소스 관리
pip install azure-cosmos // azure-cosmos 다운로드
* url은 azure 리소스 그룹에 미리 만들어둔 cosmos db의 url을 복붙하면 됩니다.

* key는 cosmos db 왼쪽 하단에 설정-키에 들어가서 기본 키 복붙하면 됩니다.

python3 cosmos-db-sample.py // 실행 코드

* 위 사진과 같이 데이터가 생성될 수 있음을 알 수 있습니다.
4.2 실습 요약 및 아키텍처의 가치
실제 데이터를 처리하는 코드를 작성해 보며 클라우드 NoSQL 플랫폼이 제공하는 개발 편의성을 체감했습니다.
- 성능 보장: Cosmos DB 기반으로 데이터를 처리하면 개발자가 개별적으로 구현하기 까다로운 데이터 일관성 및 빠른 응답 속도에 대한 고민을 플랫폼이 대신 해결해 줍니다.
- 전략적 사용: 하지만 앞서 배운 대로 비용(RU)적인 측면이 존재하므로, 무분별하게 광범위하게 사용하기보다는 서비스 아키텍처상 꼭 필요한 요소에 제한적으로 사용하는 설계가 가장 권장됩니다.
5. 학습 소감 및 결론
5주차 수업을 통해 비정형 데이터 플랫폼의 핵심인 NoSQL과 Azure 스토리지의 역할을 명확히 이해할 수 있었습니다. 데이터의 성격에 따라 JSON과 같은 유연한 포맷을 선택하고, 이를 전문 데이터베이스(Cosmos DB)에 담을지 혹은 경제적인 스토리지 형태(Blob 등)로 관리할지 결정하는 전략적 안목을 기를 수 있었던 유익한 시간이었습니다.
특히 Cosmos DB 실습을 통해 플랫폼이 데이터 일관성과 응답 속도에 대한 고민을 대신 해결해 주는 강력한 성능을 체감했습니다. 하지만 모든 작업이 RU(Request Unit) 기반으로 과금되는 만큼, 무분별한 사용보다는 비용 효율성을 고려하여 서비스 아키텍처상 꼭 필요한 요소에만 제한적으로 사용하는 설계 역량이 무엇보다 중요하다는 점을 깊이 깨달았습니다.
이로써 데이터 플랫폼 시리즈를 성공적으로 마무리했으며, 다음 시간에는 클라우드 기반의 웹 서비스 플랫폼에 대해 더 자세히 알아보겠습니다!