4주차 이론 정리(3.1~4.3)
1) 데이터 플랫폼에서의 역할
클라우드 데이터 플랫폼에서는 역할에 따라 사용하는 도구와 업무가 다르다.
(1) 역할별 주요 업무
- 데이터베이스 관리자(DBA): 데이터베이스 관리, 보안 구현, 백업, 사용자 액세스 및 성능 모니터링 수행.
- 데이터 엔지니어: 데이터 파이프라인 및 프로세스 구축, 데이터 수집 및 분석용 데이터 준비.
- 데이터 분석자: 데이터 인사이트 제공, 시각적 보고서 작성, 분석을 위한 데이터 모델링 및 결합.
(2) 대표적인 관리 도구
- Azure Data Studio: 온-프레미스 및 클라우드 데이터 서비스 관리를 위한 그래픽 인터페이스(Windows, macOS, Linux 지원)
- SQL Server Management Studio (SSMS): 포괄적인 데이터베이스 관리 도구(Windows 전용).
- Azure Portal / CLI: 리소스 관리 및 프로비저닝, 스크립트 자동화 도구.
- Power BI: 데이터 모델링 및 시각화, 보고서/대시보드 작성 도구.
2) 관계형 데이터 베이스의 객체와 SQL 쿼리
관계형 데이터베이스는 데이터를 체계적으로 관리하기 위해 다양한 객체와 SQL을 사용한다
(1) 주요 데이터베이스 객체
- 테이블(Table): 행과 열로 구성된 기본적인 데이터 저장 단위.
- 엔티티(Entity): 실제 항목 또는 가상 항목을 나타냄. ex) 고객/제품, 주문
- 인덱스(Index): 데이터 검색 쿼리를 최적화하여 더 빠른 검색을 가능하게 함.
- 뷰(View): 쿼리 결과를 기반으로 하는 가상 테이블로, 복잡한 쿼리를 단순화함.
(2) 정규화
정규화는 데이터의 중복을 줄이고 데이터 일관성을 유지하기 위해 테이블을 분리하는 과정이다.
- 스토리지 감소
- 데이터 중복 방지
- 데이터 품질 향상
(3) 관계
관계는 엔티티와 엔티티 사이의 상태를 나타낸다.
- 기본 키 및 외래키는 관계를 정의하는 데 사용된다.
- 데이터 중복이 존재하지 않는다.
- 쿼리에서 테이블을 함께 조인하면 데이터가 검색된다.
(4) SQL 문의 유형
- DML (데이터 조작 언어): 데이터 조회 및 변경 (SELECT, INSERT, UPDATE, DELETE).
- DDL (데이터 정의 언어): 개체 구조 생성 및 수정 (CREATE, ALTER, DROP, RENAME).
- DCL (데이터 제어 언어): 보안 권한 관리 (GRANT, REVOKE, DENY).
(5) SELECT 문의 예시

의미(FWGHSO 순서로 해석하기):
1. FROM: Sales.Orders 테이블에서 테이블을 가져온다.
2. WHERE: CustomerId = 17인 행들을 먼저 필터링한다.
3. GROUP BY: 남은 데이터를 직원 ID와 주문 연도별로 묶는다.
4. HAVING: 그룹화한 데이터 중 주문이 2건 이상인 그룹만 남긴다.
5. SELECT: 출력할 칼럼(EmployeedID, OrderYear)을 결정한다.
6. ORDER BY: 마지막으로 보기 좋게 정렬한다.
* WHERE vs HANING: 둘 다 행을 필터링하지만 WHERE은 그룹화 전, HAVING은 그룹 화 후에 쓴다.
3) 상용 클라우드 데이터 플랫폼: Azure SQL
Azure는 용도에 따라 세 가지 형태의 SQL 서비스를 제공한다.
서비스 모델 비교:
- SQL Server on Azure VM (IaaS): 온-프레미스 SQL Server와 100% 호환되며, OS 및 소프트웨어 업데이트를 사용자가 직접 관리.
- Azure SQL Database (PaaS): 관리 작업이 최소화된 저가형 옵션으로, 유동적인 스케일링이 필요한 신규 클라우드 프로젝트에 적합.
- Azure SQL Managed Instance: 온-프레미스 서버와 높은 호환성을 가지며, 자동 백업 및 패치 등 관리형 서비스를 제공.
- 성능 및 보안: 읽기 집약적인 워크로드 분산을 위해 읽기 전용 복제본을 최대 5개까지 생성할 수 있으며, RBAC(역할 기반 액세스 제어)를 통해 리소스 접근 권한을 관리한다.
4) 데이터 플랫폼 아키텍처 및 파이썬 연결
실제 애플리케이션 개발 시 프로그래밍 언어와 데이터베이스를 연결하는 아키텍처 구성이 중요하다.
(1) MySQL Connector: Python에서 MySQL 데이터베이스에 연결하고 조작하기 위한 라이브러리이다.
- Oracle에서 공식 지원하며 순수 Python으로 작성되어 추가 종속성이 없음
- pip install mysql-connector-python 명령어로 설치 가능함
(2) 구현원리: Python 코드 내에서 데이터베이스 연결(connect), 커서 생성(cursor), SQL 쿼리 실행(execute), 결과 가져오기(fetchall)의 과정을 거쳐 데이터를 처리한다.
4주차 실습 정리(3.1~4.3)
(1) MySQL 설치
구글 검색 창에 MySQL workbench를 검색하고 공식 사이트에서 다운로드할 수 있다.

(2) MySQL과 클라우드 데이터베이스 연결하기
1. 시작하면 좌측 하단의 MySQL Connection +를 누른다.

연결에 필요한 정보들을 바로 입력할 수 있다.

hostname입력 칸에는 만든 SQL DB의 엔드포인트를 복사해 넣는다. 3306이 MySQL이 실행되는 기본 포트 번호이다. Username과 Password에는 각각 키 이름과 비밀번호를 써주면 된다.
키 비밀번호를 까먹어서 헤맸는데 db의 개요에 들어가서 상단 탭에 암호 재설정을 눌러 다시 설정할 수 있다. 굿!

성공! Fail이 뜨면 방화벽 규칙에서 연결을 허용해주어야 한다.

OK를 누르면 성공적으로 MySQL과 Azure 데이터베이스가 연결이 된다.

DBTest에 접속하면 이런 화면이 뜬다 좌측 스키마에서 sys는 system에 관한 것이기 때문에 변경하면 안 된다!
Create Schemas를 클릭해 새로운 스키마를 만들 수 있다.

School DB가 성공적으로 만들어졌다.
(3) SQL 문장의 실행
MySQL을 학습할 수 있는 사이트
https://www.mysqltutorial.org/

SQL Sample Data
![]() |
![]() |
mysql tutorial에서 sample data를 다운로드할 수 있다.
이제 Sample data를 가지고 쿼리문을 실행해 볼 것이다.
1. SELECT문
SELECT lastName
FROM employees;
employees테이블에서 lastName 칼럼을 출력한다.

SELECT
lastName,
firstName,
jobTitle
FROM
employees;
employees테이블에서 lastName, firstName, jobTitle 컬럼을 출력한다.

전체 출력하기
SELECT *
FROM employees;

*여러 쿼리 중 하나만 실행하고 싶을 때는 해당 쿼리만 선택 후 실행 버튼을 누르면 된다.
(4) Azure SQL 데이터베이스 만들고 연결하기

배포 후에 MySQL처럼 연결하여 사용할 수 있다. 잊지 않고 방화벽 설정도 필수!
(5) Python과 MySQL 데이터베이스로 memo앱 만들기
- MySQL Connector 라이브러리: Python에서 MySQL데이터베이스에 연결하고 조작하기 위해 사용되는 도구
*다른 라이브러리에 비해 속도가 느림으로 트래픽이 높은 서비스에서 사용하기에는 부적절하다.
1) 저번 주차에 만든 리눅스 서버에 접속한다.

2) vi 명령어를 사용해서 python 파일을 만든다
vi mysql-test.py

파일이 만들어지며 코드를 입력할 수 있는 편집기가 나타난다.
3) 코드 입력하기
i (insert)를 눌러 코드를 입력할 수 있다.
# Connect to database()
def connect_to_db():
return mysql.connector.connect(
host="",
user="",
password="".
database="",
)
conn = connect_to_db()
print(conn)
ESC 키를 누르고 :wq를 입력하여 저장할 수 있다.
bash를 두 개 사용해 하나는 코드 작성, 하나는 컴파일용으로 사용하면 편하다...


ModulNotFoundError가 발생하였다! 패키지를 설치하지 않아 발생되는 문제로 설치하면 해결된다.
설치 명령어
pip install mysql-connector-python



지피티가 알려준 강제설치 방법 --break-system-packages로 겨우 설치했다..

이번에는 host 주소가 안 맞다는 오류가 발생했다. 아직 접속에 필요한 정보를 넣지 않아서 발생한 것이니 하나씩 넣어주면 된다.

이제 MySQL Workbench에서 사용할 database를 만들어주고 입력하면 연결이 완료된다.
스키마 만들고 set as default schemas 잊지 말기!

기본키인 ID는 자동으로 지급하도록 하였고 제목, 내용은 비어있으면 안 되므로 NOT NULL로 설정하였다. create_at으로 memo생성 시간을 알 수 있도록 했다. 이제 database 값으로 새로 만든 notes_db를 입력하면 된다.

접속 성공!
이제 코드를 추가해서 사용자에게 노트의 제목과 내용을 입력받고 데이터 베이스에 전달할 수 있도록 코드를 작성하였다.

코드를 실행시키면 제목과 내용을 입력할 수 있다.

두근두근 과연 데이터베이스에 잘 저장되었을까?

성공!!!!!!
너무너무 어려웠어요... 영상에 나온 대로 순탄하게 되지 않아요...
이로써 4주 차 실습 끝!
5주차로 가는 링크
>>> https://mehannah.tistory.com/6
>>> https://mehannah.tistory.com/6
>>> https://mehannah.tistory.com/6
[클라우드응용SW개발] 5주차
ㅇ
mehannah.tistory.com

