프로젝트 설명 및 회고
프로젝트 소개
깃허브 링크
진행 기간
- 2024.05.25 ~ 2024.06.05 (11일)
- 프로젝트 진행 과정 (링크)
주제
- FC Online 공식 경기 매치 상세 기록 분석 대시보드
프로젝트 인원 구성
- 개인 프로젝트
활용 기술 및 프레임워크
- Crawling : requests (2.25.1)
- Data-Processing : pandas (2.2.2), boto3 (1.34.117), snowflake-connector (3.10.1)
프로젝트 요약 및 기대효과
Dashboard
요약
- 공격
- 의미 없는 패스를 줄이고 신중한 패스가 필요
- 무리한 공격을 시도하기보다 점유율을 지키면서 기회를 엿봐야 함
- 될 수 있으면 드리블을 지양하고 확실한 패스가 필요
- 유효 슈팅 시도를 높이고, 골이 잘 들어가는 위치를 찾아보면 좋을 것 같음
- 수비
- 상대가 슈팅까지 이어가기 전에 반칙이나 태클로 끊어내야 함
- 태클 숙련도를 높이는 연습이 필요
- 필요시 옐로우 카드를 감안하고 슬라이딩 태클로 공격을 끊어야 함
- 게임 중 레드 카드를 받지 않도록 주의
- 기술적 요소
- EC2 / Crontab을 활용해 자동화 서비스를 성공적으로 구현
- 민감한 정보(API Key, Snowflake ID/PW 등)를 환경 변수로 지정하여 보안 이슈 방지
- 에러가 발생하는지 확인하기 위해 log 파일을 활용
기대효과
- Preset Chart 분석으로 공식 경기 승 / 패에 따른 패스, 점유율, 슈팅 등의 정보 확인 가능
- 승 / 패를 구분하여 경기에서 승리하기 위한 방법 도출 가능
- 주기적인 업데이트로 실시간 대시보드 확인 가능
KPT 회고
Keep
- 데브코스 2차 프로젝트에서 자동화를 적용하지 못해 아쉬웠던 부분이 있었고 처음으로 진행해 보는 자동화 작업이었기에 불안감도 있었는데, 자동화를 적용하는 프로젝트를 성공적으로 마무리할 수 있어서 좋았다.
- Airflow의 Variables, Connections 기능처럼 여러 정보를 노출하지 않기 위한 방법을 생각해 보았으며, 이를 EC2의 환경 변수와 python의 os 모듈을 활용하여 적용하였다.
Problem
- S3의 데이터를 Snowflake로 COPY하고 analytics 테이블을 만드는 과정을 Snowflake 자체의 기능으로 자동화하려고 했으나 Task 지정과 실행에 있어 어려움이 있었다.
- raw_data 테이블을 구성할 때, matchId가 두 개씩 존재해 Primary Key Uniqueness를 보장하는 PK를 데이터 내에서 지정하기에 어려움이 있었다.
- API를 통해 한 번의 request로 최대 100경기의 데이터를 가져올 수 있었다. 그러나 이 프로젝트에서는 1시간에 1번의 요청만 진행하기 때문에 더 많은 경기가 있더라도 모두 가져오지 못하는 이슈가 있었다.
Try
- S3의 데이터를 Snowflake로 옮기는 작업을 EC2 / Crontab과 python의 snowflake.connector를 사용해 일정 시간마다 자동으로 실행되도록 구성하였다.
- SEQUENCE를 사용해 id 컬럼을 생성해 increment로 1씩 증가하게 만들어주었다. 그러나 Primary Key Uniqueness만을 위한 컬럼이기 때문에 더 좋은 컬럼으로 진행할 수 있지 않았을까 하는 아쉬운 부분이 있다.
- request로 데이터를 가져오고, 저장된 데이터의 마지막 matchId와 일치하는 게 있는지 확인하여 다음 request를 보내는 방식으로 해당 시간의 모든 매치 데이터를 가져올 수 있을 것이다.
- Crontab 실행에 따른 로그 파일을 생성하였으나 대부분의 로그는 실행 시작 -> 실행 끝으로 이루어져 많은 정보를 확인하기에는 어려움이 있다. 다음에는 어떻게 진행 중인지에 대한 로그도 추가하면 관리하기가 더 쉬울 것이다.
배운 점 및 아쉬운 점
배운 점
- 클라우드 서비스에 대한 지식과 프로젝트 경험은 거의 전무했는데, 클라우드 서비스(EC2 / S3 / Snowflake / Preset)를 활용해 프로젝트를 성공적으로 마무리한 점에서 자신감을 얻을 수 있었던 것 같다.
- 프로젝트를 진행하는 중에 Airflow 공부를 진행하였는데, 확실히 Airflow가 웹 UI도 제공하고 로그 기록 및 확인, ETL을 적용하는 면에서 EC2 / Crontab을 적용한 것보다 우위에 있음을 느꼈다.
- AWS IAM과 정책에 조금 더 다가갈 수 있었다.
- EC2에서 Crontab을 사용하기 위해 IAM을 활용해 aws configure을 진행해야 한다.
- Crontab으로 다른 서비스 (S3 등)에 접근하는 파일 (.py)은 aws configure에 등록한 계정을 사용해야 한다.
- 이 프로젝트에서는 EC2 configure IAM 계정과 Snowflake 접근을 위한 IAM 계정을 사용하였다.
- S3에 접근하기 위한 정책을 최소한으로 설정하면서 대략적으로 설정 방법을 알게 되었다.
- (AWS 서비스 접근에 대한 정책 내용은 따로 정리하는 것도 좋을 것 같다!)
아쉬운 점
- csv 파일을 사용하면, 읽기에는 쉽지만 처리에는 시간이 오래 걸린다고 한다. parquet 형식이 주로 사용되는 방식이라고 하는데, 이 형식에 대해 공부해 보고 다음에 적용해 보면 좋을 것 같다.
- 구현 이슈를 겪은 것들은 모두 아쉬운 것 같다.
- Primary Key Uniqueness를 위한 id 컬럼
- 시간당 최대 100개의 경기 데이터만 적재
- 구체적이지 못한 로그 기록
- snowflake trial 기간 이슈로 짧은 기간의 데이터로 분석을 진행하였다.
- 에러가 발생했을 때, 알림(Slack 등)을 통해 즉각 조치를 취하도록 하면 좋을 것이다.
'기타 > 회고록' 카테고리의 다른 글
[회고] 데브코스 3차 기간 (24.06.03 ~ 24.06.30) (0) | 2024.06.29 |
---|---|
[회고] 데브코스 3차 팀 프로젝트 (24.06.10 ~ 24.06.14) (0) | 2024.06.15 |
[회고] 데브코스 2차 기간 (24.05.06 ~ 24.06.02) (0) | 2024.05.28 |
[회고] 데브코스 2차 팀 프로젝트 (24.05.13 ~ 24.05.17) (0) | 2024.05.20 |
[회고] 개인 프로젝트 - 공모전 웹 제작 (24.04.25 ~ 24.05.12) (0) | 2024.05.15 |