데이터 분석가 Damla's blog

[Step 1] AWS RDS 연동: Python으로 데이터베이스 다루기 본문

파이썬(Python)/Data Engineering

[Step 1] AWS RDS 연동: Python으로 데이터베이스 다루기

DA Damla 2025. 5. 4. 22:20

부제: “RDS에 저장된 데이터, Python으로 CREATE부터 DROP까지”

📂 목차

  1. 프로젝트 소개 및 사용 도구
    • AWS RDS 구성 개요
    • 사용 언어: Python, MySQL, Postgre
  2. RDS 접속을 위한 설정
    • 인스턴스 생성, 보안 그룹 설정, 연결 정보 정리
  3. Python에서 RDS 연결하기
    • 커넥션 예제 코드 + 실습
  4. SQL 기본 명령어 실행
    • CREATE / ALTER / DROP / INSERT 실습
  5. 문제 발생 시 해결 팁
    • 접속 에러, 인코딩 문제, 권한 오류 등

1. 프로젝트 소개 및 사용 도구

데이터 사이언티스트가 되려면 데이터 엔지니어링 기초인 기본적인 구조와 도구를 이해하고 직접 조작해보는 연습이 필요하다고 생각했다. 그래서 AWS RDS를 통해 실제 DB 인스턴스를 구성하고, Python으로 접속해 SQL을 실행하는 미니 프로젝트를 진행했다.

 

사용 언어 및 라이브러리 정보:
  • AWS RDS (MySQL)
  • Python
  • SQL 쿼리 (CREATE, INSERT, DROP 등)
  • 라이브러리: pymysql, pandas

*참고 : AWS는 Amazon Web sesrvice의 약자로 아마존에서 제공하는 클라우드 플랫폼 서비스 이다.

RDS에서 사용가능한 언어는 SQL문으로 Mysql과 Postgre도 사용 가능하다. Mysql로 설정해야 무료 버전으로 사용이 가능해서 선택했으나, 이 다음 단계인 RedShift 부터는 Postgre를 사용함으로, 효율성을 고려한다면 RDS도 Postgre로 설정하는 것이 좋을 듯하다. 


2. AWS RDS 구성 개요

AWS RDS (Relational Database): 클라우드 기반의 관계형 데이터베이스 서비스 이다.
실제 DB 서버를 직접 설치하지 않아도 AWS 회원가입 후 AWS 콘솔을 통해 인스턴스를 생성하고 python의 pymysql를 활용하여 쉽게 접근할 수 있다. 나는 AWS에서 직접조작하지 않고 연결 정보를 활용하여 python으로 작업하였다.

 

내가 선택한 구성:

  • 엔진: MySQL (물론 Postgre도 사용 가능)
  • 프리티어(Tier) 사용: 비용 절약을 위해 t3.micro 인스턴스
  • 저장소: 20GB (기본 제공)
  • 퍼블릭 접근 허용

3. RDS 접속을 위한 설정

RDS를 처음 구성할 때 중요한 건 보안 그룹 설정이다.
처음엔 연결이 안 돼서 당황했는데, 보안 그룹에서 내 IP 주소에 대한 인바운드 규칙을 열어야 한다.

 

기본 설정 순서:

  1. RDS 인스턴스 생성 (create Database)
  2. DB 식별자, 사용자명, 비밀번호 설정
  3. 퍼블릭 액세스 "허용"으로 설정 (중요! 허용해야 python으로 접근이 가능함!)
  4. 보안 그룹에서 3306 (MySQL) 포트를 열고, 본인 IP 허용 ( PostgreSQL의 경우, 5432)
  5. 엔드포인트 주소 확인 → 이후 Python에서 사용

4. Python에서 RDS 연결하기

Python에서는 DB 종류에 따라 다른 라이브러리를 사용한다.

- MySQL => pymysql | Postgre => psycopg2

MySQL 예제 (pymysql)

import pymysql 
conn = pymysql.connect( 
	host="rds-endpoint.amazonaws.com", 
    port=3306, --mysql 
    user="admin", 
    password="mypassword", 
    database="mydb" ) 

cur = conn.cursor() 

print("연결 성공")

성공적으로 연결되면 SQL 쿼리를 날릴 수 있다.


🧾 SQL 기본 명령어 실행

RDS에 연결한 뒤, 기본적인 SQL 명령을 Python 코드로 실행했다.

CREATE TABLE

cur.execute(""" 
	CREATE TABLE IF NOT EXISTS users( 
        id SERIAL PRIMARY KEY, 
        name VARCHAR(50), 
        email VARCHAR(100) 
    	) 
""")

INSERT

cur.execute("INSERT INTO users (
    		name, 
            email) VALUES (%s, %s)",
            ("홍길동", "hong@example.com")
            )

ALTER

cur.execute("ALTER TABLE users ADD COLUMN signup_date DATE")

DROP

cur.execute("DROP TABLE IF EXISTS users")

 

*중요! 서버연결 후 작업이 완료되면 서버 연결을 종료해야함

# 서버연결
db_info = {host, name, password, ...}

conn = pymysql.connection(db_info)
conn.execute(""" Query  """)
conn.commit()

# 서버 연결 종료
conn.close()

🛠️ 문제 발생 시 해결 팁

접속이 안 될 때

  • 보안 그룹에서 IP 허용 안 했을 가능성 큼
  • RDS 콘솔 → 인스턴스 → 보안 → 인바운드 규칙 확인

비밀번호 오류

  • 복붙할 때 공백 문자 주의
  • 환경변수로 관리하면 안전하고 깔끔함
    • 즉, 다른 파일로 빼서 연결정보를 저장하면 관리에 더 용이함

인코딩 문제

  • 한글 입력 시 utf8 설정 확인
  • 쿼리 내 문자열 앞에 N'한글' 추가하는 경우도 있음

🔚 마무리하며

이 과정을 통해, 회사에서는 이미 누군가가 구축해 놓은 DB를 사용하면서 그림을 그리지 못했던 정보들을 좀더 선명하게 경험해볼 수 있었다. 사실 내가 서비스를 0에서 부터 만들지 않는다면 거읙 경험할 수 없는 부분이기 때문에 더 신기했고, 테이블을 데이터 베이스에 직접 넣거나 삭제할 수 있는 경험이 신기하면서 어떻게 보면 모든 데이터를 잃어 버리지 않을 까 걱장이 되기도 했다.

 

이번엔 최대한 실무와 가깝게 설계하고 제작하면서, 내가 실무에서 경험했던 내용을 고려해서 데이터셋도 랜덤하게 만들어 보는 등 전체적으롤 RDS를 실제 DB처럼 다뤄보고 Python과 SQL로 기본적인 CRUD를 익힐 수 있어서 의미가 있었다..이건 단순한 연습을 넘어서, 실제 데이터 파이프라인의 기초 단계를 손으로 체득하는 과정이었다. 모든 코드를 내가 0에서 부터 쓰지 않았지만 이전에 공부했던 코드들을 다시 보면서 좀더 깊이 이해할 수 있는 시간을 가졌고 더불에 GPT와 대화를 통해 더 정확히 이해하고 그림을 그릴 수 있었다.


다음 글에서는 이 데이터를 Redshift에 복사해 DW를 구성하는 흐름을 이어서 다룰 예정이다.