AWS 윈도우 서버를 활용한 카카오톡 메시지 자동 발송

Roeniss Moon·2023년 1월 23일
1

트러블슈팅

목록 보기
2/3

이 글은 윈도우 서버의 비용을 어떻게 줄일 수 있냐가 핵심이다. 윈도우 서버 활용 자체는 다른 글들이 설명 훨씬 잘 할 것.

동기

라즈베리 파이가 잔고장이 많고, windows 가 아니라서 카카오톡 활용이 번거로움.

그래서 ec2를 그냥저냥 쓰고 있었는데 비용이 너무 많이 나와 (월 6만원) 비용단축 아이디어를 내게 되었고, 성과가 꽤 괜찮아서 블로그에 공유함.

EC2 준비

AWS EC2 t2.medium

  • AMI : ami-0c433fdd9894bd9ca (Windows_Server-2022-English-Full-Base-2022.09.14)
  1. ec2 부팅 후 원격 접속해서 카카오톡을 설치하고 PC 인증까지 완료해둔다.
  2. 카카오톡 설정에서 "윈도우 부팅 시 자동 실행", "자동로그인 On", "잠금 Off" 으로 세팅한다. 이제 윈도우 로그인 시 카카오톡이 자동으로 실행된다.
  3. 기본적으로 윈도우는 재부팅 후 원격 접속을 한 번 해야만 로그온이 완료된다. 이 과정을 스킵하기 위해 이 Q&A에 나와있는 것처럼 autologon 을 설치 후 실행해준다.

여기까지 해두면, 윈도우 서버를 껐다 켰을 시 자동으로 카카오톡이 실행되는 상태까지 완성된 것이다.

코드 가이드라인

python3, pywinauto 를 활용하는게 정신건강에 좋다.

launch_kakaotalk() # 카카오톡이 자동으로 실행되긴 하는데, 창은 안뜨고 우측 하단 윈도우 트레이에 아이콘 형태로만 떠서, 카카오톡.exe 를 한번 클릭하는 형태의 코드가 필요하다

# 이때 로그인이 완료된 카카오톡 창이 나타나야 한다

data = get_data() # 원격 서버를 사용해서 데이터를 당겨오거나, 즉석에서 필요한 데이터를 만들 수도 있을 것이다. 윈도우 서버는 비싸기 때문에 데이터를 모으는 것은 별도 서버에서 처리하길 추천한다

open_kakaotalk_chatroom() # 글을 남길 채팅방을 찾는다. 잘 설명한 블로그가 많아서 생략

write_to_chatroom(data)

윈도우 부팅 시 코드 자동실행

윈도우 작업 스케줄러를 사용하여 위 코드를 실행한다. 인터넷에 자료가 많다. (예시)

주기적으로 서버를 실행, 종료하기

이 가이드 를 참고해서 windows 서버 종료하는 람다 하나, 스타트하는 람다 하나씩 만들면 된다.

부팅하고 카카오톡을 띄우고 스크립트를 실행하는 데까지 시간이 좀 걸릴 수 있으니, Start 후 4분 뒤에 Stop 하는 것을 추천한다. 더 디테일하게 하려면, 윈도우 인스턴스에서 자기를 죽여달라는 요청을 Lambda 에게 쏠 수도 있겠지만... 내 경우엔 오버엔지니어링이라고 판단하였다.

비용 절감

구체적인건 한 달 지나봐야 알겠지만 60분에 한번씩 실행한다고 가정하면,

기존 : 30일*24시간*60분 = 월 43200분 
현재 : 30일*24시간*(1시간 1회 * 4분) = 월 2880분
2880/43200 = 0.066 = 7%

약 93퍼센트의 비용을 줄일 수 있었다. (다른 AWS 서비스 가격은 0에 수렴할 것이라서 제외)

2023-03-19 추가 :

성과

50~60 달러에서 11달러로 줄어들었다.

4분 정도면 안정적으로 카카오톡 오픈 - 메시지 수령 - 카톡방에 전송 - 셧다운 할 수 있다는 것을 발견하고, EventBridge 를 이용해 아래와 같이 스케줄링했다.

START_EC2 : */30 23-11 ? * MON-FRI *
STOP_EC2  : 4,34 23-11 ? * MON-FRI *

UTC 기준으로 작성하였으므로, 한국시간 기준으로는 월요일부터 금요일까지 오전 8시부터 오후 8시까지 30분마다 4분씩 가동된다.

(근데 지금 보니... 화요일부터 토요일까지 돌고있겠구나,,, 수정하기 귀찮다...)

근데 의외로 비용 절감 폭이 그렇게까지 드라마틱하진 않네.

==> cost explorer 보고 이해함. ec2-other, 즉 EBS 같은 고정지출이 존재함. 고정 지출이 7 달러 정도인데, 이걸 빼고 계산해보면 얼추 잘 들어맞는 절감효과가 보임. 굿!

profile
기능이 아니라 버그예요

0개의 댓글