본문 바로가기
STUDY

[멋쟁이사자처럼부트캠프_그로스마케팅] Day 9 GCP VM 인스턴스 설정 및 MariaDB + Pandas 연동 방법

by vol2 2025. 2. 18.

GCP VM 인스턴스 설정 및 MariaDB + Pandas 연동

1️⃣ GCP에서 VM 인스턴스 만들기

1.1 VM 인스턴스 생성

  1. GCP 콘솔에서 VM 인스턴스 생성
  2. 리전: 서울 선택
  3. 운영체제 변경: 기본 Debian → Ubuntu 선택
  4. 네트워킹 → 방화벽 설정:
    • ✅ HTTP 트래픽 허용
    • ✅ HTTPS 트래픽 허용
  5. 생성 후 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(파일질라) 연결 및 파일 전송

  1. 파일질라 실행 → 사이트 관리자 클릭
  2. VM 인스턴스 외부 IP 입력 (GCP 콘솔에서 확인 가능)
  3. 로그온 유형: 키파일
    • 사용자: hyein
    • 키 파일: 저장된 SSH 키 파일 업로드
  4. 원격 사이트에서 /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 로 확인.