일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 데이터엔지니어링시작하기
- 블로그성장글
- 데이터리안웨비나
- 누적조회수1만명
- 데이터분석
- 학생 성적 예측
- 데이터리안
- 데이터분석가
- 블로그성장일기
- 데이터리안월간웨비나
- Python
- 파이썬기초
- 회귀분석 프로젝트
- ml 실전 프로젝트
- 데이터직무
- 데이터엔지니어링배우기
- vader감정분석
- 데이터 분석가
- kaggle 프로젝트
- 머신러닝 회귀 모델
- 데이터사이언티스트
- python 데이터 분석
- 데이터엔지니어
- 데이터 엔지니어
- 판다스
- 파이썬
- 데이터엔지니어링
- ai관련 직업
- 파이썬오류
- ridge 회귀
- Today
- Total
데이터 분석가 Damla's blog
[Step 1] AWS RDS 생성하고 연동하기 (feat. Python) 본문
부제: “실무감각으로 익히는 RDS 기본 조작 실습 - 생성하고, Python으로 CREATE부터 DROP까지"
📂 목차
- 프로젝트 소개 및 사용 도구
- AWS RDS 구성 개요
- Python으로 RDS 접속을 위한 네트워크 설정
- Python에서 RDS 연결하기
- SQL 기본 명령어 실행
- 문제 발생 시 해결 팁
- 마무리하며
1. 프로젝트 소개 및 사용 도구
데이터 사이언티스트가 되려면 데이터 엔지니어링 기초인 기본적인 구조와 도구를 이해하고 직접 조작해보는 연습이 필요하다고 생각했다. 그래서 AWS RDS를 통해 실제 DB 인스턴스를 구성하고, Python으로 접속해 SQL을 실행하는 미니 프로젝트를 진행했다.
사용 언어 및 라이브러리 정보:
- AWS RDS (MySQL)
- Python
- SQL 쿼리 (CREATE, INSERT, DROP 등)
- 라이브러리: pymysql, pandas
* 참고: RDS는 MySQL과 PostgreSQL 모두 지원하지만, 프리티어에서는 MySQL이 조금 더 유연하게 무료 사용 가능.
하지만 이후 Redshift에서는 PostgreSQL 기반이기 때문에, 전체 프로젝트를 생각한다면 Postgre를 사용하는 것도 좋은 선택이다.
2. AWS RDS 구성 개요
AWS RDS(Relational Database Service)**는 AWS가 제공하는 클라우드 기반의 관계형 DB 서비스다. 실제 서버를 직접 설치하지 않고도 인스턴스를 만들어 DB를 운영할 수 있다.
<진행순서>
- AWS 회원가입
- RDS 콘솔에서 인스턴스 생성 (→ “Create database” 클릭)
- 참고: 여기서 생성되는 건 ‘DB 인스턴스’이지, 내부의 DB 자체는 아님
- Python으로 RDS에 접속
- 실제 사용할 데이터베이스 생성 및 데이터 입력
<참고사항>
- pymysql을 사용하면 Python에서 직접 AWS RDS에 연결 가능
- RDS 인스턴스 생성 시 **Public access를 "Yes"**로 설정해야 외부 접근(Python 접속) 가능
- 인스턴스는 하나의 서버, 그 안에 여러 개의 DB(Schema)를 생성할 수 있다
비유하자면 RDS 인스턴스는 ‘아파트 단지’, 각 데이터베이스는 그 안의 ‘세대(집)’이라고 생각하면 이해가 쉬움.
<내가 선택한 구성>
- 엔진: MySQL
- 인스턴스 타입: t3.micro (프리티어)
- 저장소: 20GB
- Public access: 허용
3. Python으로 RDS 접속을 위한 네트워크 설정
RDS를 처음 구성할 때 중요한 건 보안 그룹 설정이다. 처음 Python으로 접속하려고 했을 때 에러가 났다.
=> 원인은 보안 그룹의 인바운드 규칙 설정 부족이었다.
<기본 설정 순서>
- RDS 인스턴스 생성 (create Database)
- DB 식별자, 사용자명, 비밀번호 설정
- 퍼블릭 액세스 "허용"으로 설정 (중요! 허용해야 python으로 접근이 가능함!)
- 보안 그룹에서 3306 (MySQL) 포트를 열고, 본인 IP 허용 ( PostgreSQL의 경우, 5432)
- 엔드포인트 주소 확인 → 이후 Python에서 사용
<후속 설정 순서>
- RDS 인스턴스 접속 -> VPC security groups 클릭 -> inbound Roules 확인
- 확인할 것
- port 3306 (Mysql 기본 포트)에 열려있는가?
- Source가 Anywhere(0.0.0.0/0)또는 자신의 IP에 열려있는가?
- 위 내용을 확인해서 둘 다 셋팅을 해야한다.
<내가 겪은 에러>
나는 위 내용을 진행하려고 하자 아래와 같은 안내가 나왔다.
"You may not specify an IPv4 CIDR for an existing referenced group id rule."
- 의미 : 의미: 이미 Inbound Rule이 설정된 상태로, 중복 규칙을 추가할 수 없음 → 기존 Rule 삭제 후 재설정 필요
참고 :
- 만약 inbound 규칙이 All traffic이고, Souce가 다른 Security Group (ex. sg-...) 으로 되어 있다면,
- 의미 : 같은 VPC안에 있는 다른 서버만 이 DB에 접속할 수 있다는 의미로 내 컴퓨터(내 로컬환경)에서는 접속할 수가 없음
- 즉 외부에서 접근하는 것을 하예 허용하지 않은 상태임 (아무리 처음 셋팅할 때 pubilc access를 yes로 설정했더라도 이렇게 기본 셋팅이 되어 있을 수 있음
- 의미 : 같은 VPC안에 있는 다른 서버만 이 DB에 접속할 수 있다는 의미로 내 컴퓨터(내 로컬환경)에서는 접속할 수가 없음
<해결 방법>
- 기존 All traffic 룰 삭제
- 새로 Rule 추가:
- Type: MySQL/Aurora
- Protocol: 자동 설정
- Port: 3306
- Source: 내 IP (또는 0.0.0.0/0)
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 쿼리를 날릴 수 있다.
5. 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()
6. 문제 발생 시 해결 팁
접속이 안 될 때
- 보안 그룹에서 IP 허용 안 했을 가능성 큼
- RDS 콘솔 → 인스턴스 → 보안 → 인바운드 규칙 확인
비밀번호 오류
- 복붙할 때 공백 문자 주의
- 환경변수로 관리하면 안전하고 깔끔함
- 즉, 다른 파일로 빼서 연결정보를 저장하면 관리에 더 용이함
인코딩 문제
- 한글 입력 시 utf8 설정 확인
- 쿼리 내 문자열 앞에 N'한글' 추가하는 경우도 있음
7. 마무리하며
이 프로젝트는 단순한 실습을 넘어서, 실제로 데이터베이스를 "내 손으로 직접 만들고 다루는" 경험을 주는 중요한 과정이었다.
회사에서는 대부분 이미 구축된 DB를 사용하다 보니, 구조를 깊이 이해할 기회가 없었는데, 이번에는 아예 인스턴스부터 직접 만들고 쿼리도 작성해보면서 개념을 제대로 체득할 수 있었다. 실수도 있었고, 데이터 날려버릴까 걱정도 되었지만 그만큼 실감 나고 유익한 학습이었다.
다음 단계에서는 이 데이터를 Redshift로 옮겨서 Data Warehouse를 구성하는 과정을 다룰 예정이다.
'파이썬(Python) > Data Engineering' 카테고리의 다른 글
[Step 3] 스타 스키마로 Data Mart 설계하기 & BI툴 시각화 실습 (0) | 2025.05.07 |
---|---|
[Step 2] Data Warehouse 만들기 (0) | 2025.05.07 |
[Data Engineering]데이터 파이프라인 학습 방법 (0) | 2025.04.26 |