필자는 최근에 AWS Certified Cloud Practitioner 자격증을 취득했다. Data Engineer가 되기 위해서는 그들이 사용하는 기본적인 언어는 알아야한다고 생각했기 때문이다.
합격의 기쁨도 잠시, 자격증도 취득했으니 본격적으로 AWS를 실질적으로 사용해보기로 다짐했다!
1. 프로젝트 주제 정하기
필자는 방탈출 취미로 즐긴다. 취직 후 상경하여 유명하다는 방탈출은 대부분 해봤다. 하지만 예약조차하기 힘든 유명한 방탈출 테마가 있는데 그것은 바로 홍대 리코더의 "Tempo Rubato"이다.
따라서 두 달 사이에 취소되는 시간이 있는지 확인해서 있다면 그 정보를 메일을 전송하는 프로젝트를 기획했다.
프로젝트 주제를 선정하는 데 있어서 아래와 같은 점을 고려했다.
1. 24시간 돌아가야하는 서비스가 필요한 일
2. 웹에서 데이터를 가져오는 작업이 필요한 일
3. (중요!) 실질적으로 필요하고, 관심이 가는 일! 🔥
2. AWS EC2 개발 환경 구축
EC2나 Linux 개발 환경을 접한 경험이 없어서 꽤 해맸지만, 아래와 같이 개발 환경을 구축 완성했다.
- AWS Management Console에서 EC2를 생성 (Ubuntu)
- PuTTY를 사용해 EC2와 연결 후 명령어 입력
- Filezilla를 사용해 EC2와 연결 후 Windows에서 작성한 Python Script 전송
이후 EC2 환경에 필요한 패키지와 파일들을 설치했다. (PIP, Selenium, Chrome, Chrome Driver 설치 등)
https://deep-flame.tistory.com/3
3. 구현 with Python
구현 내용은 아래와 같다.
1. Selenium을 이용해 날짜 객체를 클릭하고, 시간별로 이용가능한지 확인한다. (현재월+다음달) - GetInfo 함수
2. 가능한 시간이 나온다면 메일 전송한다. - SendMail 함수
1. Selenium을 통한 웹 컨트롤
① 날짜 객체를 가져와서 원하는 날짜를 찾아 클릭한다.
② 시간 객체를 가져와서 가능한 시간이 있는지 확인한다.
이를 아래와 같이 코드로 구현했다! 🤗
+추가)
코드 구현 과정에서 나를 괴롭혔던 에러가 있었다.😤
"Message: stale element reference: element is not attached to the page document"
구글링을 해보니 time.sleep으로 텀을 두고 하면 해결된다고 했다. 하지만 필자의 경우 해결이 되지 않았다.
약 한시간 가량 원인을 파악해본 결과 달력을 클릭하면 달력 객체가 변경된다는 것을 확인했다. (객체가 변경되어서 기존에 찾아서 변수로 지정한 객체를 찾을 수 없다는 것 같다.) 그래서 클릭 이벤트 후, 다시 달력 객체를 다시 가져오는 코드로 변경했다.
2. 결과 이메일 보내기
해당 구현 과정에서는 아래 URL을 참고했다.
테스트 결과 아래와 같이 메일이 잘 전송되는 것을 확인했다. 😀
4. EC2에 파일 전송 후 실행
Filezilla를 통해서 3번에서 개발한 스크립트를 옮겼다.
해당 스크립트를 24시간 실행하고, PuTTY를 종료해도 실행되도록 하기 위해서 nohup을 사용하여 백그라운드에서 스크립트를 실행했다.
https://deep-flame.tistory.com/4
🤔마무리
AWS 자격증은 취득했지만, 실제 사용 경험이 없어서 아쉬움이 컸다.
하지만 이번 기회에 막연하게 생각했었던 AWS 이용과 Linux 환경에서 개발을 할 수 있어 즐거운 시간이었다.
그러나 AWS를 통해서 정말 하고싶은 것은 데이터 플랫폼 구축이다. 이번 달 안에 아래 책으로 차근차근 공부를 시작할 예정이다! 화이팅! 🤩
+ 추가) 프로그램을 실행한지 3일차에 문자를 받았다...! 🔥 월요일 오전 10시라서... 예약은 하지 않았지만, 어쨋든 목표를 달성했다!
'Personal > Toy Project' 카테고리의 다른 글
첫 번째 토이 프로젝트 회고 (방탈출 취소 자리 찾기) (feat. AWS EC2, 웹크롤링, node.js) (0) | 2022.03.14 |
---|