본문 바로가기

DATA/Cloud

AWS를 활용한 멜론 인기차트 크롤링 및 데이터베이스 저장 과정

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 설치 및 연결 테스트

  1. EC2에 SSH 접속
  2. MariaDB 클라이언트 설치
    sudo yum install mariadb105 -y
    
  3. 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 연결 후 데이터 확인

  1. EC2에서 MariaDB 접속
    mysql -u admin -h melon-db2.cvk4ss0qqe76.ap-northeast-2.rds.amazonaws.com -p
    
  2. 데이터베이스 조회
    USE melon_chart;
    SELECT * FROM chart;
    
  3. 크롤링한 인기차트 데이터가 정상적으로 저장되었는지 확인

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