1. AWS 환경 설정
1.1 보안 그룹(Security Group) 생성
DB용 보안 그룹(SG-DB)
- 인바운드 규칙
- 포트: 3306 (MySQL/MariaDB)
- 소스: Anywhere(0.0.0.0/0) (보안을 위해 특정 IP로 제한하는 것이 좋음)
Web Server용 보안 그룹(SG-Web)
- 인바운드 규칙
- 포트: 22 (SSH) → 내 IP만 허용
- 포트: 80 (HTTP) → Anywhere(0.0.0.0/0) (웹 요청 허용)
1.2 RDS (Relational Database Service) 설정
파라미터 그룹 및 옵션 그룹 생성
- MariaDB 10.5에 맞는 파라미터 설정
RDS 인스턴스 생성
- DB 엔진: MariaDB 10.5
- 인스턴스 타입: t2.micro (무료 티어 사용 가능)
- 스토리지: 20GB (Auto Scaling 활성화 가능)
- 퍼블릭 액세스: 예 (Anywhere 접속 허용)
- 엔드포인트 예시:
melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com
- DB 관리자 계정 생성
- 사용자명: admin
- 비밀번호: 설정한 값
1.3 EC2 (Web Server) 설정
EC2 인스턴스 생성
- AMI: Amazon Linux 2 또는 Ubuntu
- 인스턴스 타입: t2.micro
- 보안 그룹: Web Server용 보안 그룹(SG-Web) 적용
EC2에서 MariaDB 설치 및 연결 테스트
- EC2에 SSH 접속
- MariaDB 클라이언트 설치
sudo yum install mariadb105 -y
- RDS 데이터베이스 연결 테스트
mysql -u admin -h melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com -p
- 비밀번호 입력 후 정상적으로 접속되면 성공
2. 멜론 인기차트 데이터 크롤링
2.1 User-Agent 확인
멜론 사이트 접속 후 F12(개발자 도구) → Network 탭 → Headers → User-Agent 확인
- 예제 User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
2.2 Python 크롤링 코드 작성
필요 라이브러리 설치
pip install requests beautifulsoup4 pymysql
크롤링 코드 (멜론 인기차트 가져오기)
import requests
from bs4 import BeautifulSoup
import pymysql
# 멜론 차트 URL
url = "https://www.melon.com/chart/index.htm"
# User-Agent 설정
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
}
# HTTP 요청
response = requests.get(url, headers=headers)
# 응답 확인
if response.status_code == 200:
soup = BeautifulSoup(response.text, "html.parser")
# 노래 제목과 가수 가져오기
songs = soup.select("div.ellipsis.rank01 > span > a") # 곡명
artists = soup.select("div.ellipsis.rank02 > a") # 아티스트명
# 데이터 저장
song_list = []
for i in range(len(songs)):
song_list.append((songs[i].text.strip(), artists[i].text.strip()))
# 데이터베이스 저장
try:
# MariaDB 연결
conn = pymysql.connect(
host="melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com",
user="admin",
password="비밀번호",
database="melon_chart",
charset="utf8mb4"
)
cursor = conn.cursor()
# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS chart (
id INT AUTO_INCREMENT PRIMARY KEY,
song VARCHAR(255),
artist VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
# 데이터 삽입
cursor.executemany("INSERT INTO chart (song, artist) VALUES (%s, %s)", song_list)
# 변경사항 저장
conn.commit()
print("데이터 저장 완료")
except Exception as e:
print("DB 오류:", e)
finally:
cursor.close()
conn.close()
else:
print("페이지 요청 실패")
3. 데이터베이스 확인
EC2에서 RDS DB 연결 후 데이터 확인
- EC2에서 MariaDB 접속
mysql -u admin -h melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com -p
- 데이터베이스 조회
USE melon_chart; SELECT * FROM chart;
- 크롤링한 인기차트 데이터가 정상적으로 저장되었는지 확인
4. AWS 환경 구성 요약
서비스 역할 설정 사항
EC2 (Web Server) | 웹 서버 및 크롤러 실행 | t2.micro, 보안 그룹 설정, SSH 접속, Python 실행 |
RDS (MariaDB 10.5) | 데이터 저장 | t2.micro, 포트 3306, 퍼블릭 액세스 허용 |
Security Group (SG-DB) | DB 접근 제한 | 3306 포트, Anywhere(0.0.0.0/0) 허용 |
Security Group (SG-Web) | 웹서버 접근 제한 | SSH(22): 내 IP, HTTP(80): Anywhere |
5. 결론
- AWS 환경에서 멜론 인기차트를 크롤링하고 RDS에 저장하는 과정을 구현
- Python의 requests, BeautifulSoup, pymysql 라이브러리를 사용하여 웹 크롤링 및 DB 연동
- EC2에서 크롤러를 실행하고, RDS에 데이터를 저장한 후 확인하는 방식
- 추후 Lambda를 활용한 자동화, 데이터 시각화, API 연동 등의 확장 가능
AWS 환경을 활용하여 데이터 수집 및 저장을 자동화할 수 있으며, 이를 기반으로 다양한 분석이 가능하다.
#db 생성하기
1. 보안그룹만들기
2개 : db / web server
(db inbount 포트번호 3306, anywhere)
(web server 포트번호 내ip, anywhere)
2. 파라미터 / 옵션그룹 만들기
3. 데이터베이스 만들기
rds-> db
ec2-> webserver
계정 접근 anywhere
4. 인스턴스 만들기
인스턴스 연결
# 연결된 인스턴스에 mariadb105 설치
앤드포인트 = rds 로 연결
mysql -u admin -h melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com -p비밀번호
# 멜론 사이트에서 F12 -> user-agent 찾기
elements 확인
데이터베이스에서 확인
root->ec2로 와서 데이터베이스 조회 후 확인
728x90
'DATA > Cloud' 카테고리의 다른 글
[AWS] Networking and Content Delivery (1) | 2024.09.23 |
---|---|
[AWS] Route 53과 DNS 연결 (1) | 2024.09.13 |
[AWS] Networking and Content Delivery (0) | 2024.09.12 |
AWS 가상화 개념 (0) | 2024.09.11 |