GCP VM 인스턴스 설정 및 MariaDB + Pandas 연동
1️⃣ GCP에서 VM 인스턴스 만들기
1.1 VM 인스턴스 생성
- GCP 콘솔에서 VM 인스턴스 생성
- 리전: 서울 선택
- 운영체제 변경: 기본 Debian → Ubuntu 선택
- 네트워킹 → 방화벽 설정:
- ✅ HTTP 트래픽 허용
- ✅ HTTPS 트래픽 허용
- 생성 후 SSH 터미널 접속
(SSH 키 생성 (by putty) 과 등록은 되어있어야함)
2️⃣ MariaDB
2.1 MariaDB 설치
sudo apt update && sudo apt upgrade # mariadb 설치및 업데이트 과정
sudo apt-get install mariadb-server
2.2 MariaDB 설정 및 계정 생성
#계정생성을 위해 MariaDB root 계정 접속
sudo mysql -u root -p
#'backend' database 생성
CREATE DATABASE backend DEFAULT CHARACTER SET UTF8;
SHOW DATABASES;
USE backend;
#계정생성 및 권한 부여
GRANT ALL PRIVILEGES ON backend.* TO 'hyein'@'localhost' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;
EXIT;
3️⃣ Pandas 설치하기
3.1 Python & Pandas 설치
sudo apt-get install python3-pip
pip install mysql-connector-python pandas
4️⃣ 파일 전송 및 디렉토리 설정
4.1 작업 디렉토리 생성 및 권한 부여
cd /var
sudo mkdir gm-lab3
sudo chmod -R 777 gm-lab3
cd gm-lab3
4.2 FTP(파일질라) 연결 및 파일 전송
- 파일질라 실행 → 사이트 관리자 클릭
- VM 인스턴스 외부 IP 입력 (GCP 콘솔에서 확인 가능)
- 로그온 유형: 키파일
- 사용자: hyein
- 키 파일: 저장된 SSH 키 파일 업로드
- 원격 사이트에서 /var/gm-lab3 디렉토리 이동 후 파일 전송
5️⃣ Python과 SQL 연동 (Pandas → MariaDB)
5.1 main.py 생성 및 작성
(sublime text에서 작성 후 .py 파일로 저장)
import mysql.connector
import pandas as pd
# MariaDB 연결 설정
db_config = {
"host": "localhost",
"user": "hyein",
"password": "1234",
"database": "backend"
}
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
# 테이블 생성
cursor.execute("DROP TABLE IF EXISTS employees;")
cursor.execute("""
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
department VARCHAR(50),
salary DECIMAL(10,2)
);
""")
# 데이터 삽입
data = {
"name": ["Alice", "Bob", "Charlie", "David", "Eve"],
"age": [25, 30, 35, 28, 40],
"department": ["HR", "IT", "Finance", "Marketing", "IT"],
"salary": [50000, 70000, 80000, 60000, 90000]
}
df = pd.DataFrame(data)
insert_query = "INSERT INTO employees (name, age, department, salary) VALUES (%s, %s, %s, %s)"
values = [tuple(row) for row in df.to_numpy()]
cursor.executemany(insert_query, values)
conn.commit()
# 데이터 조회 및 CSV 저장
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
df_result = pd.DataFrame(rows, columns=[desc[0] for desc in cursor.description])
df_result.to_csv("employees_data.csv", index=False, encoding="utf-8")
cursor.close()
conn.close()
print("데이터 삽입 완료 및 CSV 저장 완료")
더보기
main.py 주석
import mysql.connector
import pandas as pd
# 1. MariaDB 연결 설정
db_config = {
"host": "localhost", # MariaDB 서버 주소
"user": "user1", # 사용자 이름
"password": "1234", # 비밀번호
"database": "backend" # 사용할 데이터베이스
}
# MariaDB 연결 (db_config 딕셔너리를 **를 사용해 개별 인자로 전달)
#mysql 클래스 객체인 conn 생성하여 connetor.connect 메서드 실행
#conn에서 cursor 메서드 실행한 값은 cursor로 전송(저장)
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor() # SQL 실행을 위한 cursor 객체 생성
# 2. 테이블 생성 (이미 존재하면 삭제 후 생성)
#cursor.excute로 sql에서 하기 내용 작성하도록함.
#내용: 이미 employees 이름으로 테이블이 존재하는 경우에만 삭제,
#employees 테이블 생성하기, sql문법으로
cursor.execute("DROP TABLE IF EXISTS employees;")
cursor.execute("""
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
department VARCHAR(50),
salary DECIMAL(10,2)
);
""")
# 3. 샘플 데이터 생성 (pandas DataFrame 활용)
#pandas에서 data 셋 만들고 이를 df 2차원 데이터로 만듦.
data = {
"name": ["Alice", "Bob", "Charlie", "David", "Eve"],
"age": [25, 30, 35, 28, 40],
"department": ["HR", "IT", "Finance", "Marketing", "IT"],
"salary": [50000, 70000, 80000, 60000, 90000]
}
df = pd.DataFrame(data)
# 4. 데이터 삽입
# DataFrame을 numpy 배열로 변환 후(내용을 2차원 배열로), 각 행을 튜플로 변환 (MariaDB는 튜플만 지원)
#insert_query로 실행할 명령어 문자로 저장
#df내용을 튜플로 만들어서 sql에서 쓸 데이터 값인 values를 만듦.
insert_query = "INSERT INTO employees (name, age, department, salary) VALUES (%s, %s, %s, %s)"
values = [tuple(row) for row in df.to_numpy()] # 2차원 리스트 → 튜플 리스트 변환
# 여러 개의 데이터를 한 번에 삽입 (executemany 사용)
# insert_query에 위에 바꾼 데이터인 values를 %s에 각각 넣기
cursor.executemany(insert_query, values)
conn.commit()
print("데이터 삽입 완료")
# 5. 데이터 조회 및 pandas DataFrame으로 변환
#select * from employees 실행.
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall() ## 모든 데이터를 리스트로 가져와서 rows에 전달(컬럼은 없음)
# 컬럼명 가져오기
#desc을 통해 컬럼명을 가져와서
#컬럼명에 넣기. df_result는 컬럼과 데이터 둘다 있음
column_names = [desc[0] for desc in cursor.description] # 컬럼명을 리스트로 저장
df_result = pd.DataFrame(rows, columns=column_names) # pandas DataFrame 생성
# 6. 결과 출력 (pandas 기본 출력 방식 사용)
print("\\n=== Employees Table Data ===")
print(df_result.to_string(index=False)) # df_result DataFrame을 문자열로 출력 (인덱스 없이)
# CSV로 저장 (Windows에서 한글 깨짐 방지를 위해 "utf-8-sig" 사용)
df_result.to_csv("employees_data.csv", index=False, encoding="utf-8-sig")
print("데이터를 'employees_data.csv' 파일로 저장하였습니다.")
# 경로지정원하면 employees_data.csv 앞에.
# 연결 종료
cursor.close()
conn.close()
5.2 main.py 실행 (GCP 터미널에서 실행)
cd /var/gm-lab3
python3 main.py
cd /var/gm-lab3 ls -li #mariadb 테이블, 데이터 생성 확인
6️⃣ 데이터 확인 (MariaDB에서 확인)
6.1 MariaDB 접속 후 확인
mysql -u hyein -p
USE backend;
SHOW TABLES;
SELECT * FROM employees;
- 참고 1
음영부분은 파이썬 연동 관련.
Mariadb만 사용할 경우 python install 하지말고 계정, 데이터베이스, 디렉토리 (+권한)만 신경쓰기,
- 참고 2
1. main.py 란?
Python 코드 파일
pandas를 사용해서 MariaDB에 데이터를 저장하고 조회하는 역할을 함
2. 왜 SSH(파일질라)로 전송하나?
GCP의 VM 인스턴스는 클라우드 서버라서 내 컴퓨터 파일을 직접 실행할 수 없음
그래서 FTP(파일질라)를 사용해서 main.py를 GCP 서버로 보내야 함
3. 프로세스
단계 설명
1 main.py 작성 | Python에서 MariaDB와 연결하고 데이터 삽입/조회 |
2 파일질라로 GCP로 전송 | VM 인스턴스에서 실행하려면 서버로 옮겨야 함 |
3 SSH 터미널에서 실행 | python3 main.py 실행해서 DB와 연동 |
→ main.py는 MariaDB와 Python을 연결하는 스크립트이고, 파일질라를 통해 GCP 서버로 옮긴 후 실행하면 됨!
데이터 흐름
1) 데이터 수집
- 마케팅 플랫폼(광고 데이터, 웹 트래킹)에서 데이터 가져오기
- main.py에서 Pandas를 사용해 MariaDB에 저장
- INSERT INTO SQL 문으로 DB에 데이터 입력
2) 데이터 조작 & 분석
- SQL에서 SELECT, GROUP BY, JOIN 등 활용
- KPI 분석 (클릭률, 전환율 등)
- SQL에서 계산된 데이터 Pandas로 가져오기 (pd.read_sql())
3) 결과 저장 & 공유
- SQL에서 가져온 데이터 → CSV, Excel로 저장
- 보고서 파일 생성 (df.to_csv("output.csv"))
- 데이터 대시보드 연결 (Flask, Streamlit 등)
SQL | 대용량 데이터 처리 속도 빠름, 데이터 정제 & KPI 계산 최적화 |
Pandas | 머신러닝, 시각화, 고급 데이터 조작 가능 |
- 참고 3 main.py에서 오류 났던 부분
-단순 문법, 쉼표, 따옴표 실수
-파일명 .py 로 하기
-데이터 삽입시 values(%s, %s …) 데이터 개수 확인하기
-main.py 데이터 테이블 확인 할땐 mysql 계정으로 들어가서 use 디렉토리 하고
select 로 확인.
'STUDY' 카테고리의 다른 글
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 11 API, Flask (6) | 2025.02.20 |
---|---|
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 10 웹 애플리케이션 구조, Flask, 웹크롤링 (1) | 2025.02.19 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 8 SQL 기본키, 외래키, JOIN, UNION, ALTER, CONSTRAINTS (4) | 2025.02.14 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day7 GCP VM 설정 및 MariaDB 설치 & SQL 기본 문법 (1) | 2025.02.13 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day6 GCP VM 설정 및 MariaDB 설치 & SQL 기본 문법 (0) | 2025.02.13 |