DEMO 및 주요 기능
https://hanalia.github.io/react_rec_hosting/
1. 주 2회(매주 수요일, 금요일) 최신 REC 가격 자동 업데이트
2. Recharts 라이브러리를 사용하여 최근 가격 동향에 대한 그래프 시각화
3. React-Table 라이브러리를 활용한 테이블 구현 (Sorting, Pagination 기능 포함)
4. 데이터 CSV 내보내기 기능 추가
<참고 : REC란? >
- 신재생에너지 공급인증서(REC, Renewable Energy Certificates)는 정부가 신재생에너지 발전사업자에 발급해주는 증명서류
- 한국의 현행 신재생에너지 정책에 의하면, 발전설비규모 500MW 이상인 발전사업자는 총 발전량의 일정 비율 이상을 신재생에너지원으로 발전해야 하는 의무가 있음. (= 신재생에너지 공급의무화제도, aka RPS 제도)
- '21년 기준 RPS 공급의무비율은 9%인데, 향후 이 비율은 계속 오를 예정 (최대 25%까지 상향 가능)
- RPS 의무가 있는 발전사업자는 자체적으로 9%까지 신재생에너지원을 통한 발전이 어려울 수 있음.
- 이 경우 RPS 의무가 없는 다른 신재생에너지 (태양광, 풍력, 바이오에너지 등) 발전사업자들이 발전해서 발급받은 REC를 RPS 의무가 있는 발전사업자들이 구매해서 RPS 의무를 이행할 수 있음.
- 이런 양쪽 니즈를 충족시켜주기 위해서 REC 시장이 존재하며, 매주 화, 목요일 10시 ~ 16시마다 열림
- REC 가격이 높음 = 태양광 등 신재생에너지 발전사업자들의 수익성이 좋음
- REC 가격이 낮아짐 = 태양광 등 신재생에너지 발전사업자들의 수익성이 악화됨
왜 만들었는가?
신재생 및 친환경 업계 종사자로서 REC 가격에 대한 정기적 모니터링이 필수적이다.
그동안은 매번 장이 끝날 때마다 아래의 사이트에서 그날의 종가와 거래량을 확인하고,
별도의 엑셀 양식에 저장하는 수작업을 진행했다.
엑셀에서 작업을 할 경우 1) 데이터를 수집하고2) 수집한 데이터를 알맞게 가공하고 (거래일 등 날짜는 날짜 형식에 맞게 가공)3) 가공된 데이터를 시각화하는
3단계 작업을 모두 수작업으로 진행하였는데, 이를 효율적으로 수행할 수 있는 방법이 없을까 고민해보았다.
어차피 대부분의 데이터 분석 업무를 위해서는 1) 데이터 수집, 2) 데이터 가공 및 3) 데이터 시각화의 과정을 거치기 때문에, 이 전체 프로세스를 자동화할 수 있는 틀이 있으면 추후 다른 데이터셋에 대해서도 쉽게 응용이 가능할 것으로 보였다. 이런 생각으로 본 프로젝트를 시작하게 되었다.
Code Workflow
1. 데이터 수집
데이터는 수집은 파이썬의 Pandas 라이브러리를 이용하였다.
데이터 수집의 대상이 되는 페이지는 여기인데,
html table 형태로 되어 있어서 Pandas의 read_html를 유용하게 활용하였다.
- read_html를 이용하면 해당 페이지안에 존재하는 모든 html_table를 list 형태로 가져오는데, 예를 들어 페이지에 2개의 table이 있으면 [table1, table2] 형태이다.
- 본 페이지에는 table이 하나만 있어서 read_html[0]으로 바로 테이블을 데이터프레임 형태로 가져올 수 있다.
2. 데이터 가공
데이터 가공도 파이썬 Pandas를 이용하였다.
불필요한 데이터는 잘라내고, 이후 시각화 단계에서 날짜를 활용할 수 있도록 YYYY-MM-DD (ex. 2021-08-22) 형태로 변형해 주었다.
데이터 시각화 단계에서는 Javascript 및 React를 활용할 것인데, 이를 수집 및 가공한 데이터를 JSON 형태로 저장했다.
* 사실 데이터를 csv로 저장하든 json으로 저장하든 규모가 작은 프로젝트에서는 크게 상관이 없는데, 대부분의 외부 API 에서는 JSON 데이터형식으로 데이터를 보내주기 때문에, JSON 데이터를 어떻게 가공하고 활용할 수 있는지 학습하기 위해서 JSON 형태로 저장하였다.
3. 데이터 시각화
데이터 시각화를 위해서는 요즘 가장 대세인 React Framework를 활용했다.
데이터 시각화를 위해서 React 말고도 Plotly-Dash, Flask 등 파이썬의 프레임워크를 활용할 수도 있다.
하지만 이번 프로젝트는 1) 100% 무료, 및 2) 100% 자동화를 목표로 준비했는데,
그래서 깃헙에서 무료로 정적 사이트 (Static Webiste) 호스팅이 가능하다는 점을 적극 활용하고자 했다.
파이썬으로 프로그램을 만든 후 서버에서 작동하게 하는 경우, 개인이든 클라우드든 서버 운영비용이 부가적으로 들기 때문에 이보다는 간편하고 가벼운 정적 사이트를 활용해보고자 했다.
React 중에서 그래프는 Recharts, 표는 React-Table을 활용했다.역시 반응형 웹 프레임워크의 선두주자 답게 User-Interactivity가 훌륭하며, 사용자는 그래프에 커서를 움직여서 데이터 세부 수치를 확인하거나, 표 정렬, 데이터 내보내기 등의 작업을 수행할 수 있다.
또한 Material UI의 Grid Components를 활용하여 화면 크기가 변하면 그래프 및 표의 크기도 동적으로 조정이 되도록 하여 태블릿, 피씨, 휴대폰 등 다양한 화면에서 사용자가 편리하게 볼 수 있도록 하였다. Responsively App을 이용하면 다양한 화면에서 내 앱이 어떻게 보이는지 한눈에 확인할 수 있다.
* Workflow Automation - Github Actions
내가 수집하고 가공하고자 하는 데이터는 주기적으로 새롭게 발생한다.
한번만 수집 및 가공하고 끝나는 작업이 아니라, 정해진 시간에 반복적으로 이 작업을 수행해야 한다.
내가 지정한 시간에, 나를 대신해서 반복적으로 코드를 실행해주는 아주 유용한 툴이 있는데, 바로 Github Actions이다.
깃헙 Repository에 1) 내가 실행하고자 하는 코드(.py 파일)와 2) 어떤 조건에서 어떤 코드를 실행할 것인지 정리한 작업 내용 (.yml 파일)이 있으면, 깃헙에서 알아서 정해진 조건이나 시간에 코드를 실행해 준다.
이 프로젝트에서는 코드가 언제 실행되는지 yml 파일에 아래와 같이 명시해 두었는데,
의미는 '매주 화요일, 목요일 UTC 기준 15시에 실행하기' 이다.
한국시간은 UTC+9시간이라 한국시간 기준 매주 수요일, 금요일 00시에 실행하는 것이 된다.
on:
schedule:
# 크론 문법은 https://crontab.guru/ 여기서 확인하면 됨
# 이 크론은 한국시간 수, 금 00시에 실행됩니다.
- cron: '0 15 * * 2,4'
위에서 소개한 워크플로우를 정리하면 아래와 같다.
'Projects > 업무-무역' 카테고리의 다른 글
[VBA] 파파고 API를 활용한 워드 번역기 (2) | 2021.06.17 |
---|---|
[텔레그램 봇] 하나은행 환율 매매기준율 알리미 (1) | 2021.06.15 |