AWS_RDS란?
Amazon Relational Database Service(Amazon RDS)는 AWS 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹 서비스이다. 이 서비스는 산업 표준 관계형 데이터베이스를 위한 경제적이고 크기 조절이 가능한 용량을 제공하고 공통 데이터베이스 관리 작업을 관리한다.
이번에는 PostgreSQL을 구축해보고, Python에 구축,연동을 하는 방법을 쉽게 익혀보자 블로그를 남긴다.
저는 '이것이 데이터 분석이다' 라는 책에서 비트코인 시세 예측하기라는 챕터를 해보고, 미래 기술 중 하나라고 하는 드론에 과심이 있어서, EHANG 이라는 회사 기업의 주가 예측하기라는 주제로 블로깅을 남긴바 있었습니다. 그 중 한계점을 느끼고 ' 이항 주가 데이터를 매일 DB 로 수집' 이란 목표가 생기고 이를 실천하기 위해 막바지 블로깅 작업을 하려 한다.
목표
- 이항 주가 데이터를 매일 DB 로 수집 (저의 블로그에 하나씩 남겨 놓았습니다. 미래를 위한 취미 )
- 주피터 노트북 파이썬으로 변환 : 주피터 노트북 파이썬으로 변환 하는 방법
- 크론탭(파이썬 코드 스케쥴러) : crontab_크론탭 (파이썬 코드 스케줄러)
-ex)시간같은 경우 매 분 출력 하고 싶을때
-우리는 이항 주가 데이터를 매일 db 로 수집하는 목표 - sqlite3 블로깅 : sqlite3 -DB의 가장 기초적인 단계
-DB의 가장 기초적인 단계 - RDS 블로깅
-AWS에서 제공하는 DB (postgre을 실행)
Amazon RDS가 더 궁금하다면? (아래에 공식홈페이지에 링크를 참고하자.)
RDS 생성
우선 AWS에 접속하여 로그인을 합니다.
Step 1.
AWS 관리 콘솔 - AWS 서비스 - 데이터베이스 - RDS 클릭
Step 2.
Dashboard - 데이터베이스 생성 클릭
Step 3.
데이터베이스 생성방식 -> 표준 생성 클릭
엔진 옵션 -> PostgreSQL 클릭
Step 4.
템플릿 설정
프로덕션이나 개발/테스트 옵션을 할경우 좀 더 높은 성능의 DB서버를 구축할 수 있으나, 요금이 꽤 나갈수 있으므로 상황에 따라서 잘 알아보고 선택 해주는 것이 좋다.
(저는 일단, Study 와 Test 느낌으로 프리 티어로 설정했음.) 취지에 맞는 것을 잘 알아보고 선택 해야 할 사항 입니다.
Step 5.
DB 정보 입력
이제 DB정보를 입력하자. 여기서 좀 더 신경 써야 하는건 자격 증명 설정인데 마스터 사용자 이름과 마스터 암호는 R/Python연결시 꼭 필요하다. 여기서 사용한 정보는 다음과 같다.
- 마스터 사용자 이름: postgres_test
- 마스터 암호: studypassword
Step 6.
DB 인스턴스 크기 설정
이제는 DB인스턴스 크기를 설정 해주자. 각각의 성능과 그에 따른 요금이 있으며 db.t2.micro버전을 사용한다.
(취지에 맞게 선택합니다.)
Step 7.
퍼블릭 액세스 설정
이번에는 개인 데탑에 Python연결 하려고 하기 때문에 퍼블릭 액세스에 예를 해주었다. 사실 이는 어느정도 보안 문제로 충분히 위험할 수 있으며, 이를 아니요로 했을경우에는 EC2에만 연결이 되게 된다. 현업에서 사용하게 된다면 특히 전문가와 상의를 하고 설정하는걸 추천한다고 한다.
Step 8.
데이터베이스 이름 설정
이제는 데이터베이스의 이름을 설정해주자. 이 역시 Python 연결시 필요한 정보이다. 여기서 데이터베이스 정보는 다음과 같이 적어놓았다.
- 초기 데이터베이스 이름: studydb
Step 9.
월별 추정 요금 확인/데이터베이스 생성
프리티어로 해서 무료로 나온다만 실제로는 월별 추정요금이 나오게 된다.
Step 9-1.
위에 순서대로 진행 할때, 스크린샷이나 언급을 안했던 항목이 있을텐데 필자는, 나머지 항목들은 그대로 진행을 했습니다. 위에서 말했던대로 사용하는 취지에 맞게 다른 부분도 선택할 수 있다.
Step 10.
RDS 생성
성공적으로 생성중 이다. 생성 했을 경우 생각보다 시간이 꽤 걸렸다. 10분 이상..?
Step 11.
생성된 데이터베이스 정보 확인 (연결 & 보안 Tab)
RDS가 잘 생성이 되면 해당 DB를 클릭하여 다음의 정보를 확인해보자. 우선 연결 & 보안 부분에서 엔드포인트 와 포트 정보를 알아두어야 한다. 이 역시 Python에 연결할때 사용해야 하기 때문.
Step 12.
생성된 데이터베이스 정보 확인 (구성 Tab)
이곳에서는 생성한 DB의 간략한 정보를 확인할 수 있다. 이렇게 AWS에 RDS생성이 완료되었다.
참고 - 1)RDS 사용 중지 방법
RDS 사용을 중지하기 위해서는 작업 필터에서 중지를 해줘야 한다.
2) 5432 포트도 열어 주어야 합니다. (아래는 완료한 사진)
Python 연결
이번에는 RDS와 Python의 연동을 확인해보자. psycopg2를 사용하고 이에 대한 자세한 정보는 다음의 출처를 따른다.
- Reference
- Python 으로 Postgresql 데이타베이스 연동 간단 리뷰
- database: 초기에 설정한 database 이름
- host: RDS의 엔드포인트
- port: 포트 번호. PostgreSQL의 포트번호는 5432
- user: 마스터 사용자의 이름
- password: 마스터 암호
import sys
import os
import pandas as pd
import base64
import requests
import psycopg2 as pg2
연동 방법
- 연결(connection)
- 변경(insert, delete, update)
- 조회(select)
- 해제(close, disconnection)
1) 연결
Postgres와 연결하기 위해서는 psycopg2 패키지의 connect메서드를 이용하면 된다.
conn=pg2.connect(database="studydb",
host="database-1.cbed2shhlul7.ap-northeast-2.rds.amazonaws.com",
port="5432",
user="postgres_test",
password="studypassword")
정상적으로 생성이 완료되면, 추가적으로 cursor라는 인스턴스를 만들어서 그 인스턴스를 통해 데이터 조작을 진행하자.
# conn.cursor를 통해 Cursor 하나를 생성한다.
cur = conn.cursor()
cur
2)변경
이제 생성한 cursor를 통해 데이터베이스와 연동을 해보자. 먼저 데이터를 입력/조회하기 위한 간단한 테이블 생성
cur.execute("CREATE TABLE test1 (id serial PRIMARY KEY, num integer, data varchar);")
CREATE TABLE명령어를 이용하여 테이블 생성을 시킨다.
간단하게 한 개의 Row를 입력해보자.
cur.execute("INSERT INTO test1 (id, num, data) VALUES (%s, %s, %s);", (1, 100, "data01") )
execute 메서드의 첫 번째 파라미터는 실행시키려는 SQL문을 지정한다. 하나의 완벽한(데이터를 포함한) SQL를 사용해도 가능하고 위의 예제처럼 파라미터를 따로 지정하는 것도 가능하다.
3)조회
select문도 execute메서드를 이용하여 쿼리를 실행시킨다.
fetchone(), fetchmany(), fetchall() 3개의 메서드가 있다. fetchall() 같은 경우 아주 큰 테이블에 실행할 경우 문제가 생길 수 있으니 잘 고려해서 사용하자.
cur.execute("SELECT * FROM test1")
(id, num, data) = cur.fetchone()
print(f"{id}, {num}, {data}")
4)해제
사용이 완료된 인스턴스들은 해제하는 것이 좋다.
cur.close()
# 21.06.09 추가 (데이터베이스 인바운드 규칙 편집)
AWS - 데이터베이스 - 만들었던 DB 식별자 클릭
보안 -> VPC 보안 그룹 아래 default 클릭
인바운드 규칙 편집 클릭
5432 포트 -> 소스정보란에서 위치무관으로 바꿔야 한다.
그리고 마지막으로,
저와같이 test, study용으로 하셨을 경우..
RDS 중지 한 것은 7일밖에 안된다. 그래서 삭제 해야한다. 안그러면 약 7만원 정도의 돈이 빠져나간다.
Reference
Python 으로 Postgresql 데이타베이스 연동 간단 리뷰
'이항 주가 데이터를 매일 DB 로 수집' 카테고리의 다른 글
Python, Crontab 의 활용의 예 [data 수집] (0) | 2021.06.20 |
---|---|
Docker를 사용한 Dash 생성 (0) | 2021.06.03 |
도커(Docker) 란 무엇인가? - 쉬운 개념 및 이해 (0) | 2021.06.03 |
Text Mining 개념 (0) | 2021.05.20 |
RDS 개념 / EC2 와 차이 (AWS) (0) | 2021.05.15 |