Welcome! 🙋‍♂️ View more

Personal/Toy Project

AWS EC2와 Python Selenium 을 활용한 토이 프로젝트 💻 (feat. 방탈출 자리 찾기!)

DeepFlame 2022. 1. 7. 21:47

필자는 최근에 AWS Certified Cloud Practitioner 자격증을 취득했다. Data Engineer가 되기 위해서는 그들이 사용하는 기본적인 언어는 알아야한다고 생각했기 때문이다. 

AWS 자격증을 취득하면 가질 수 있는 뱃지. 가장 기본 자격이라 그런지 무색이다.

 

합격의 기쁨도 잠시, 자격증도 취득했으니 본격적으로 AWS를 실질적으로 사용해보기로 다짐했다!

 

 


1. 프로젝트 주제 정하기

필자는 방탈출 취미로 즐긴다. 취직 후 상경하여 유명하다는 방탈출은 대부분 해봤다. 하지만 예약조차하기 힘든 유명한 방탈출 테마가 있는데 그것은 바로 홍대 리코더의 "Tempo Rubato"이다.

2022.01.07 기준 2023.01.06까지 모두 예약이 마감되어있다.

따라서 두 달 사이에 취소되는 시간이 있는지 확인해서 있다면 그 정보를 메일을 전송하는 프로젝트를 기획했다.

프로젝트 주제를 선정하는 데 있어서 아래와 같은 점을 고려했다.
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

 

EC2에 Selenium 환경 만들기 (feat. Chrome, Chrome Driver)

0. PIP 설치 최초 EC2 사용자들은 PIP를 PIP를 먼저 설치해야 합니다. https://deep-flame.tistory.com/entry/%EC%B5%9C%EC%B4%88-EC2%EC%97%90-PIP-%EC%84%A4%EC%B9%98 최초 EC2에 PIP 설치 EC2 최초 개설 후 PI..

deep-flame.tistory.com

 

PuTTY와 Filezilla

 

 


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을 참고했다.

https://yeolco.tistory.com/93

 

파이썬으로 이메일 보내기(SMTP)

안녕하세요 열코입니다. 이번에는 파이썬을 활용하여 지메일(Gmail)로 메일 보내기에 대해 알아보겠습니다. 파이썬에서 메일을 보내기 위해서는 외부 라이브러리가 별도로 필요하지 않으며, 'SMT

yeolco.tistory.com

 

 

테스트 결과 아래와 같이 메일이 잘 전송되는 것을 확인했다. 😀

 

 


4. EC2에 파일 전송 후 실행

Filezilla를 통해서 3번에서 개발한 스크립트를 옮겼다.

해당 스크립트를 24시간 실행하고, PuTTY를 종료해도 실행되도록 하기 위해서 nohup을 사용하여 백그라운드에서 스크립트를 실행했다.

https://deep-flame.tistory.com/4

 

터미널 종료 후에도 프로세스 실행 (feat. Selenium 작동시 유의사항)

하루종일 실행해야할 스크립트가 있어 프로세스를 백그라운드로 돌려야했다. 아래와 같이 nohup을 사용하면 가능하다. nohup python3 MyScript.py & nohup python3 MyScript.py > /dev/null & # 표준출력을 설정..

deep-flame.tistory.com

 

새벽에도 실행되고 있는 프로세스의 기록들 🔥

 

 


🤔마무리

AWS 자격증은 취득했지만, 실제 사용 경험이 없어서 아쉬움이 컸다.
하지만 이번 기회에 막연하게 생각했었던 AWS 이용과 Linux 환경에서 개발을 할 수 있어 즐거운 시간이었다.

그러나 AWS를 통해서 정말 하고싶은 것은 데이터 플랫폼 구축이다. 이번 달 안에 아래 책으로 차근차근 공부를 시작할 예정이다! 화이팅! 🤩

엔터프라이즈 데이터 플랫폼 구축 

 

엔터프라이즈 데이터 플랫폼 구축 - YES24

자체 시스템부터 클라우드까지 엔터프라이즈 하둡과 빅데이터 플랫폼 운영, 구축, 설계의 모든 것빅데이터 기술에 대한 정보는 넘쳐나지만 이 모든 기술을 매끄럽게 연결해서 완벽한 엔터프라

www.yes24.com

 

+ 추가) 프로그램을 실행한지 3일차에 문자를 받았다...! 🔥  월요일 오전 10시라서... 예약은 하지 않았지만, 어쨋든 목표를 달성했다!