클라우드 데이터 조작 쿼리

김규원·2025년 10월 27일

클라우드

목록 보기
10/17
post-thumbnail

테이블

  • 데이터는 테이블에 저장
  • 테이블은 행과 열로 구성
  • 모든 행에는 동일한 수의 열이 존재
  • 각 열은 데이터 유형으로 정의

엔티티(Entity)

  • 엔티티는 논리 수준에서의 개념이고, 테이블은 물리 수준에서의 개념
  • 즉, 엔터티는 실제 항목 또는 가상 항목을 나타낼 수 있음
  • 엔터티는 상호작용을 가능하게 하는 관과(relationship)으로 연결 가능
  • 예) 고객이 제품을 주문

정규화

  • 데이터 정규화는
  1. 스토리지 감소
  2. 데이터 중복 방지
  3. 데이터 품질 향상의 방향

관계

  • 기본 키 및 외래 키는 관계를 정의하는 데 사용
  • 데이터 중복이 존재하지 않습니다(3NF의 키 값 제외)
  • 쿼리에서 테이블을 함꼐 조인하면 데이터가 검색됨

인덱스(Index)

  • 더 빠른 데이터 검색을 위해 검색 쿼리를 최적화
  • SQL 문에서 데이터를 검색하기 위해 읽어야 하는 데이터 페이지의 양을 줄임
  • 쿼리에서 테이블을 함께 조인하면 데이터가 검색됨

뷰(View)

  • 쿼리 결과 집합을 기반으로 하는 가상 테이블
  • 쿼리를 단순화 하기 위해 뷰가 만들어짐.
  • 관계형 데이터를 단일 창(뷰)로 결합

SQL QUERY(Structed Query Language)

  • SQL은 RDB와 함께 사용할 수 있는 표준 언어
  • SQL 표준은 ANSI 및 ISO에 의해 유지관리
  • 독자적인 RDBMS 에는 T-SQL, PL/SQL, pgSQL과 같은 SQL의 자체 확장이 존재

SQL문의 유형

DML(Data Manipulation Language)

  • 데이터 조작 언어
  • 데이터를 쿼리하고 조작하는데 사용
    SELECT:
    테이블에서 선택/읽기
    INSERT
    테이블에 새 행 삽입
    UPDATE
    테이블의 기존 행 편집/업데이트
    DELETE
    테이블의 기존 행 삭제
# select 문
SELECT EmployeeId, YEAR(OrderDate) AS OrderYear FROM Sales.Orders
WHERE CustomerId = 71 GROUP BY EmployeeId, YEAR(OrderDate) HAVING COUNT(*) > 1
ORDER BY EmployeeId, OrderYear;

# insert
INSERT INTO Sales.OrderDetails
(orderid, productid, unitprice, qty, discount) VALUES (10255,39,18,2,0.05)

# insert - 여러행 삽입
INSERT INTO Sales.OrderDetails
(orderid, productid, unitprice, qty, discount)
VALUES
(10256,39,18,2,0.05), (10258,39,18,5,0.10);

DDL(Data Definition Language)

  • 데이터 정의 언어
  • 데이터베이스 개체를 정의하는 데 사용
    CREATE
    테이블이나 뷰와 같은 새 개체를 데이터베이스에서 만듭니다.
    ALTER
    개체의 구조를 수정합니다. 예를 들어 테이블을 변경하여 새 열을 추가합니다.
    DROP
    데이터베이스에서 개체를 제거합니다.
    RENAME
    기존 개체의 이름을 바꿉니다.
# create 문
CREATE TABLE Mytable
(Mycolumn1 int NOT NULL PRIMARY KEY, Mycolumn2 VARCHAR(50) NOT NULL , Mycolumn3 VARCHAR(10) NOT NULL

DCL(Data Control Language)

  • 데이터 컨트롤 언어
  • 보안 권한 관리에 사용
  • GRANT
  • REVOTE
  • DENY

IaaS와 Paas의 비교

항목물리적IaaSPaaS
서버 위치내 서버실클라우드(VM)클라우드
관리 주체전부 내가 함OS 이상 내가 함DB만 내가 함
초기비용높음중간낮음
유연성매우 높음높음중간
유지보수 편의성낮음중간매우 높음

Azure에서 제공하는 3가지 SQL 서비스

구분서비스 이름분류관리 범위설명
1️⃣Azure VM SQL ServerIaaS (Infrastructure as a Service)OS, DB 설정 등 대부분 사용자가 관리클라우드에서 가상머신(VM)을 빌려 직접 SQL Server 설치
2️⃣Azure SQL Managed InstancePaaS (Platform as a Service)일부 관리 자동화 (백업, 패치 등)온프레미스 SQL Server와 거의 동일한 기능을 제공하는 완전관리형 서비스
3️⃣Azure SQL DatabasePaaS (Platform as a Service)거의 전부 Azure가 관리완전한 클라우드 네이티브 단일 DB 서비스, 사용자는 데이터만 관리

1. Azure VM SQL Server

  • 사용자가 온프레미스 하드웨어를 관리할 필요 없이 클라우드에서 SQL Server 정품을 사용할 수 있는 IaaS 솔루션
  • 온프레미스 SQL SERVER와의 호환성 보장
  • OS 업그레이드, 소프트웨어 업그레이드, 백업, 복제 등의 모든 작업은 고객이 관리
  • 데이터베이스 당 요금이 아닌 서버 및 라이선스 요금 결제

2. Azure SQL Managed Instance

  • 컴퓨팅 리소스를 미리 프로비전한 다음 미리 프로비전한 컴퓨팅 수준까지 개별 Manged Instanced 여러 개를 배포 가능
  • 자동 백업, 소프트웨어 패치, 데이터 베이스 모니터링 및 기타 관리 작업
  • 온 프레미스 sql server와 100% 가까이 호환
  • 다른 AZRUE 서비스에서 지원됨

3. Azure SQL DB

  • 사용자가 클라우드에서 관리형 데이터베이스 서버를 만든 다음 서버에서 데이터베이스를 배포하는 PaaS 제품
  • 최소한의 관리 작업만 수행하면 되는 저가형 옵션
  • 애플리케이션 디자인을 유동적으로 조정할 수 있는 신규 클라우드 프로젝트에 가장 적합
  • 로드가 변경될 수 있는 시스템 지원
  • 시스템을 다시 시작하지 않고도 빠르게 스케일 업 및 스케일 다운 가능

SQL Managed Instance Vs. SQL DB

인증 및 엑세스 제어

역할 기반 액세스 제어(Azure RBAC)

  • AZURE 리소스 액세스 권한이 있는 사용자 및 이러한 사용자가 해당 리소스로 수행할 수 있는 작업을 관리 가능
  • 역할 할당을 사용하여 리소스 액세스를 제어
  • 역할 할당은 다음 3요소
  1. 보안 주체: AZURE 리소스 액세스를 요청하는 사용자나 서비스를 나타내는 개체
  2. 역할: 권한 컬렉션
  3. 범위: 액세스 권한이 적용되는 리소스 집합의 목록

읽기 전용 복제본

  • 읽기 복제본은 BI 및 분석과 같은 읽기 집약적인 워크로드의 성능과 규모를 개선하는 데 도움이 됩니다.
  • 주 서버와 복제본 서버 간 데이터 동기화가 지연되어도 되는 시나리오에서는 읽기 복제본 기능을 사용하는 것이 좋습니다.
  • 재해 복구 계획에서는 주 서버와 다른 Azure 지역에 복제본을 만듭니다. 그러면 특정 지역에서 재해가 발생하는 경우 주 서버의 데이터 대신 복제본을 사용할 수 있습니다.
  • 복제본 서버의 데이터 스토리지가 워크로드에 영향을 주지 않고 자동으로 증가합니다

MySQL DB로 memo 앱 만들기

MySQL Connector 라이브러리

  • Python에서 MySQL DB에 연결하고 조작하기 위해 사용되는 도구
  • Oracle에서 공식적으로 지원하는 라이브러리
  • 순수 Python으로 작성되어 있어 추가 종속성이 없음
  • 다른 라이브러리에 비해 속도가 느림
import mysql.connector
cnx = mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="root",
password="password",
database="database_name"
)
cursor = cnx.cursor()
cursor.execute("SELECT * FROM table_name") results = cursor.fetchall()
cnx.close()

pip install mysql-connector-python

profile
행복한 하루 보내세요

0개의 댓글