클라우드

[클라우드] 4,5주차

키또카또 2026. 4. 7. 21:04

SQL문 복습

  • DML (데이터 조작어) - SELECT, INSERT, UPDATE, DELETE
  • DDL (데이터 정의어) - CREATE, ALTER, DROP, RENAME
  • DCL (데이터 제어어) - GRANT, REVOKE, DENY

SELECT문 예시

SELECT EmployedId, YEAR(OrderDate) AS OrderYear
FROM Sales.Orders
WHERE CustomerId = 71
GROUP BY EmployeeId, YEAR(OrderDate)
HAVING COUNT(*) >1
ORDER BY EMployeddId, OrderYear;

 

CREATE문 예시

CREATE TABLE Mytable
(Mycolumn1 int NOT NULL PRIMARY KEY,
 Mycolumn2 VARCHAR(50) NOT NULL,
 Mycloumn3 VARCHAR(10) NOT NULL)

 

 

Azure 관계형 Database

Azure는 3가지 SQL 서비스를 제공한다.

- Azure Virtual Machines의 SQL Server  -> IaaS

- Azure SQL Managed Instance  -> PaaS

- Azure SQL Database  ->Paas

 

 

- Azure Virtual Machines 의 SQL Server

사용자가 온 프레미스 하드웨어를 관리할 필요 없이 클라우드에서 SQL Server 정품을 사용할 수 있는 Iaas이다.

    - 온 프레미스 SQL server와의 호환성 보장

    - OS 업그레이드, 소프트웨어 업그레이드, 백업, 복제 등의 모든 작업을 고객이 관리한다

    - 서버 및 라이선스 요금 결제

 

- Azure SQL Database

사용자가 클라우드에서 관리형 데이터베이스 서버를 만든 다음 서버에서 데이터베이스를 배포하는 Paas이다.

    - 최소한의 관리 작업만 수행하면 되는 저가형 옵션

    - 애플리케이션 디자인을 유동적으로 조정할 수 있는 신규 클라우드 프로젝트에 가장 적합

    - 시스템을 재시작 하지 않고도 빠르게 스케일 업 또는 다운 가능

 

- Azure SQL Managed Instance

컴퓨팅 리소스를 미리 프로비전한 후 미리 프로비전한 컴퓨팅 수준까지 개별 Managed Instance 여러 개를 비포할 수 있다.

    - 자동 백업, 소프트웨어 패치, 데이터베이스 모니터링 및 기타 관리 작업

    - 온프레미스 SQL Server와 거의 100% 호환

    - 다른 Azure 서비스에서 지원

 Azure SQL Managed Instance  Azure SQL Database
단일 인스턴스 : SQL 서버 노출 영역 대부분, 
기본 가상 네트워크 지원, 완전 관리형 서비스
단일 데이터베이스: 하이퍼스케일 스토리지 (최대 100TB),
서버리스 컴퓨팅, 완전 관리형 서비스
인스턴스 풀: 마이그레이션을 위한 사전 프로비전 컴퓨팅 리소스, 비용 효율적인 마이그레이션 지원, 비교적 적은 인스턴스를 호스트하는 기능(2Vcore) 지원, 현재 공개 미리 보기 상태 탄력적 풀 : 가격 최적화를 위해 여러 데이터베이스 간의 리소스 공유, 여러 데이터베이스에 대한 간소화된 성능 관리, 완전 관리형 서비스

 

역할 기반 액세스 제어

- Azure RBAC (역할 기반 액세스 제어): Azure 리소스 액세스 권한이 있는 사용자 및 그러한 사용자가 해당 리소스로 수행할 수 있는 작업을 관리

    - 보안 주체 : Azure 리소스 액세스를 요청하는 사용자나 서비스를 나타내는 개체

    - 역할 : 권한 컬렉션

    - 범위 : 액세스 권한이 적용되는 리소스 집합의 목

 

 

 

반정형 데이터

  • 필드가 다른 동일한 컬렉션 또는 컨테이너의 여러 엔터티
  • 테이블 형식이 아닌 여러 스키마 포함
  • 각 필드에 나타내는 이름으로 레이블을 지정해 정의되는 경우가 많음

이용 분야

- Iot 및 텔레메틱스 : 반구조화 , 구조화 된 많은 데이터를 수집, 실시간 처리 해야 하는 경우가 많음

- 소매 및 마케팅 : 전 세계적으로 분산된 데이터, 문서 스토리지에 대한 일반적인 시나리오

- 게임 : 게임 내 통계, 소설 미디어 통합, 순위표, 대기 시간이 낮은 애플리케이션

- 웹 및 모바일 : 웹 클릭 분석, 봇을 포함한 최신 애츨리케이션에 일반적으로 사용

 

JSON

  • 키 - 값 쌍으로 이루어진 객체와 배열을 기본 구조로 사용한다
  • 사람이 읽고 쓰기 쉬운 텍스트 기반 형식이다
  • 대부분의 프로그래밍 언어에서 json을 파싱하고 생성할 수 있다.
  • XML에 비해 더 작은 크기로 데이터 표현이 가능하다
  • 문자열, 숫자,논리, null, 객체, 배열을 지원한다.

자주 쓰이는 곳

  • 웹 API : RESTful API의 데이터 포맷으로 많이 사용됨
  • 설정 파일: 애플리케이션 설정 정보를 저장하는데에 활용됨
  • 데이터 저장: 게임 데이터, 사용자 설정 등을 저장하는데에 사용됨
  • 데이터 교환: 다양한 시스템 간의 데이터 전송에 이용

 

 

Azure Storage 계정

Azure에서 클라우드 데이터를 저장하고 관리하기 위한 기본 단위. 안전하고 확장이 가능하며 다양한 데이터 유형에 적합한 저장 서비스를 제공한다.

  • 확장성, 가용성: 확장 가능한 저장소 제공, 높은 가용성과 복원력
  • 다양한 데이터 유형 지원 : 구조적, 비구조적 데이터 및 반구조적 데이터를 저장할 수 있음
  • 보안 및 규정 준수 : 데이터 암호화, 엑세스 제어ㅡ 보안 인증 등 다양한 보안 기능을 제공함, 산업 표준 규정 준수
  • 전세계 복제 옵션 : LRS, GRS, RA-GRS 등의 복제 옵션 제공
  • 유연한 요금제 : 사용량 기반 과금 모델

---

  • Blob storage
  • File Storage
  • Queue Storage
  • Table Storage
  • Disk Storage

 

CosmosDB

다중 모델 NoSQL DBMS 이다.

API의 종류로는 다음과 같은 것들이 있다.

  • NoSQL
    • json 문서 저장
    • SQL 쿼리와 유사한 쿼리 언어 사용
    • HTTP/HTTPS 엔드포인트를 통한 통신

MongoDB

  • MongoDB와 호환되는 API
  • 기존 MongoDB 애플리케이션과 호환
  • 문서 기반 데이터 모델이 필요한 애플리케이션
  • 실시간 분석 및 대시보드

Cassandra

  • Apache Cassandra와 호환되는 API
  • 와이드 컬럼 데이터 모델 지원
  • 대규모 IoT 데이터 수집 및 처리에 사용
  • 시계열 데이터 관리
  • 고성능 로깅 시스템

Gremlin

  • 그래프 데이터베이스 API
  • Apache TinkerPop Gremlijn과 호환
  • 소셜 네트워크 분석
  • 추천 엔진
  • 복잡한 관계 모델링 (예-공급망 관리)

PostgreSQL

  • PostgreSQL과 호환되는 관계형 데이터베이스 API
  • 기존 PostgreSQL 애플리케이션 마이그레이션
  • 관계형 데이터 모델이 필요한 애플리케이션
  • 복잡한 쿼리와 트랙잭션이 필요한 시스템

CosmosDB 사용 조건

1. 필수

- Azure 계정 활성 구독

- Azure Cosmos DB for NoSQL

- Python 3.7이상

2. 선택

- Azure CLI / Azure Powershell

( 나는 사용하지 않았다 )

 

 

 

실습. mysql 연결하기

 

1. sql workbench를 다운로드한다.

https://dev.mysql.com/downloads/workbench/

 

MySQL :: Download MySQL Workbench

 

dev.mysql.com

 

 

OS에 맞게 깔아 주면 된다.

 

 

workbench를 실행하면 첫 화면에서 위의 사진과 같이 Connections 옆 + 아이콘을 볼 수 있다.

눌러보자

Username, ConnectionName은 사용자가 원하는 것으로 지정해 주면 된다

Hostname은 Azure에서 만든 sql의 엔드포인트를 넣어 주면 된다.

Test connection을 해보고, 잘 되면 OK를 눌러주자.

 

혹시나 정상 생성이 안 된다면

방화벽을 추가했는지 확인 해보자.

방화벽 설정은 Azure > sql > 네트워킹 으로 들어가면 찾을 수 있다.

위에 현재 클라이언트 IP 주소 추가를 누르면 쉽게 추가할 수 있다.

 

연결된 SQL에 들어가 정상 작동이 되는지 확인한다.

 

CREATE TABLE notes(
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  note TEXT NOT NULL,
  create_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

위의 쿼리문으로 테이블을 만들어 보았다.

 

다음은 sql 서버 만들기이다.

 

먼저 Azure에 들어가 marketplace로 들어가보자.

 

검색창에 azure sql을 검색하면 많은 것들이 뜬다.

맨 앞의 Microsoft 사의 AzureSQL을 만들어 주면 된다.

나는 데이터베이스가 없기 때문에 왼쪽 create a database를 눌러 주었다

데이터베이스 서버 또한 없기 때문에 새로 만들기 버튼을 눌러 새로 만들어 주면 된다.

서버 생성 후 데이터베이스 이름을 적고 별다른 추가 설정 없이 배포를 진행했다.

 

데이터베이스가 만들어졌기 때문에 DB를 mysql과 연결해보자.

 

터미널로 가상머신에 들어가 준다.

 

ssh (유저 이름)@(ip 주소) 를 입력하고, 비밀번호를 입력하면 가상머신에 접속할 수 있다.

 

pip i mysql-connector-python

먼저 연결에 필요한 패키지를 다운받아 준

 

파이썬 파일을 만들고 아래 코드를 적어 준다. 

 

import mysql.connector

def connect_to_db():
    return mysql.connector.connect(
            host="엔드 포인트",
                user="유저 이름",
                password="비밀번호",
                database="스키마 이름"
            )
conn = connect_to_db()
cursor = conn.cursor()

title=input("Enter tje title of your notes:")
note = input ("Enter the content of your note:")

insert_query = "INSERT INTO notes (title, note) VALUES (%s, %s)"
cursor.execute(insert_query,(title,note))

conn.commit()
print(f"Note '{title}' added succesfully!")

cursor.close()
conn.close()
print(conn)

 

python3 파일이름

위의 명령어를 통해 파이썬 파일을 실행하면

이렇게 잘 연결된 걸 확인할 수 있다.

 

두번째 실습은 cosmosDB 만들기이다.

 

Azure marketplace에 들어가 cosmosDB를 검색하자

 

두번째의 Azure Cosmos DB를 만들어 주면 된다

왼쪽을 선택해 주었다

 

 

Workload 타입을 설정하게 되어있는데, learning을 선택하면 된다.

 

용량 모드는 서버리스를 선택해 주었다. 

서버리스는 사용한 만큼만 값을 지불하면 된다.

이름, 위치 등을 설정하고 배포를 진행했다.

 

배포 후 azure에 생긴 내 cosmosdb에 들어가보자

 빠른 시작에 들어가서 컨테이너를 만들어 줘야 한다.

(나는 이미 만들어서 버튼이 뜨지 않짐나, 초록색 체크 표시에 뜨는 파란색 버튼을 눌러 컨테이너를 만들어 주면 된다.)

 

다시 cmd 창으로 가상 머신에 접속하자

이번에는 cosmosdb와 연결하고, 데이터를 저장해보자

 

파이썬 파일을 하나 만들자

from azure.cosmos import exceptions, CosmosClient, PartitionKey
import os

#Cosmos DB connection information
url='uri'
key = '키'
database_name = 'MyDatabase'
container_name = 'MyContainer'

#Cosmos dB Client
client=CosmosClient( url, credential=key )

database= client.create_database_if_not_exists(id=database_name)container= database.create_container_if_not_exists(
        id=container_name,
        partition_key=PartitionKey(path='/category')


        )
def insert_data():

    item={
            "id":"1",
            "category":"technology",
            "name":"Azure Cosmos DB",
            "description":"A globally distributed, multi-modal database service"
            }
    container.upsert_item(item)
    print(f'Item with ID {item['id']} inserted or updated')

def query_data():
    query='SELECT * FROM c WHERE c.category="technology" items=container.query_items(query=query)'
    items=container.query_items(query=query)

    for item in items:
        print(f"item ID {item['id']}, Name : {item['name']}, description : {item['description']}")


insert_data()
query_data()

 

키에 들어가면키값과 URI 정보를 알 수 있다. 여기서 확인 후 알맞게 적어 주면 된다. 

저장 후 실행해 주면 정상적으로 들어갔다는 결를 확인할 수 있다 

'클라우드' 카테고리의 다른 글

[클라우드] 13-14주차  (0) 2026.06.22
[클라우드] 9-10주차  (0) 2026.06.22
클라우드응용SW 3주 데이터  (0) 2026.03.23
클라우드응용SW 2주 리눅스  (0) 2026.03.23
클라우드응용SW 1주 클라우드 컴퓨팅  (0) 2026.03.23