Bactoria 황준오

마스크 구매 알리미 서비스 후기

2020-04-19
bactoria

최근 개인 프로젝트를 하나 했다.

마스크 구매 알리미 이다.

각 커머스(네이버 스토어, 카카오 스토어, 쿠팡, 기타 마스크 쇼핑몰) 에 등록된 마스크 상품의 품절 여부를 주기적으로 확인하고, 해당 상품이 품절이 아닐 때는 링크를 보내는 서비스 이다. 사용자는 알람을 받으면 해당 링크를 눌러 구매를 하면 된다.

 

 

계기

 

코로나 때문에 SSAFY를 재택 학습으로 하고 있었다. 그런데 집에만 있어 보니 너무 우울해지더라.

하지만 밖에서 밥도 사 먹고, 카페에서 공부도 하고, 친구들도 만나려면 마스크가 꼭 필요했다.

 

마스크를 구매하려고 휴대폰으로 알아보다가 비싼 가격에 깜짝 놀랐다.

값싼 KF-94 마스크들은 항상 품절이었으며, 구매 가능한 상품은 개당 3~4천 원의 가격대가 형성되어 있었다.

구매를 망설이다 급한 대로 편의점에서 면 마스크를 사다 쓰고, 아는 형에게 받은 KF-94 마스크 5장으로 연명하고 있었다.

 

그러다 뙇!!!!! 뇌리를 스치는 생각이 들었다.

값싼 KF-94 마스크가 품절인데… ‘구매 가능할 때 바로 알 수 있다면 얼마나 좋을까?’

나와 내 주변 사람들이 마스크 구매 걱정 없이 살아갈 수 있는 아름다운 아이디어였다.

그래서 되든 안 되든 일단 시도해보기로 했다.

 


 

기억력이 나쁜 탓에 우여곡절을 글로 남기고 싶어 시작했는데, 이제 본론으로 들어가 보겠다.

크게 개발, 배포, 운영, 한계 네 단락으로 나누었다.

 

개발

 

로직은 간단하다.

상품의 품절 여부를 주기적으로 확인하고, 품절이 아닐 경우 알람을 보낸다.

 

품절 여부 확인

품절 여부를 확인하기 위해서는 상품의 현재 상태 정보가 필요하다.

 

Server Side Rendering 사이트의 경우에는 웹 스크래핑을 하였고,

API가 따로 존재하는 경우에는 API로 HTTP Request를 날렸다.

쿠키나 User-Agent를 별도로 추가해주어야 하는 경우도 있었다.

 

처음에는 하나의 스레드로 모든 상품을 돌렸는데, 한 상품의 주기가 너무 길어서 구매 확률이 낮아질 것 같았다.

또한, 어떤 사이트는 1초에 1번의 요청만 허용하기도 했기에 각 상품을 1초 간격으로 돌린다면 구매 확률은 더욱 더 낮아진다.

이에 각 사이트별 스레드를 생성하였으며, 각 스레드는 재고 상태 확인부터 알람 전송까지 담당하도록 하였다.

 

변수를 변경해야 할 때 추가적인 코드 배포 작업를 하지 않기 위해 각 사이트별 상품의 번호, 재고 상태를 체크하는 문자열, 요청 시간 간격 등의 변경될 가능성이 큰 변수들을 .env 로 관리했다.

 

알람

사용자들이 알람을 어떻게 받는 것이 좋을까 ..

처음 든 생각은 이메일카카오톡 이었다.

 

허나, 이 두 방법 모두 이 프로젝트에 적합하지 않은 방법이었다.

이메일과 카카오톡은 즉각적으로 받아볼 수 없다고 판단했다.

데이터를 긁어온 시점부터 알람이 도착하는 데까지 지연 시간이 길수록 구매 확률은 낮아진다.

이 프로젝트에서는 1초도 매우 큰 시간이다. 구매 여부를 결정할 수 있기 때문이다.

 

슬랙은 테스트해보니 즉각적으로 받아볼 수 있었다.

허나, 슬랙은 일반적인 사용자들에게 범용적이지 않은 플랫폼이었다. 개발자가 아닌 친구들에게 ‘슬랙을 아느냐’ 고 물어보면 모두 처음 들어본다는 답변을 받았다.

하지만 마스크를 싸게 구매할 수 있다면 슬랙을 깔아서라도 사용하지 않을까? 하는 마음으로 슬랙을 선택했다.

 

 

배포

 

이제 개발한 프로그램을 온종일 실행시켜놓을 환경이 필요하다.

처음 떠올린 것은 AWS EC2였다. 왜냐면 무료니까!!

 

그러나 치명적인 문제가 있었는데, AWS EC2 인스턴스에서 쿠팡에 접근되지 않았다.

스크린샷 2020-04-18 오후 8 48 09

( !!!!! 맥북이랑 그램에서는 잘 됐는데.. ..? )

 

혹시나 우연일까? 하는 생각에 다른 EC2 인스턴스로 시도해보았지만, 모두 접근이 되지 않았다. AWS EC2가 가질 수 있는 IP가 막혀있는 것일까…

EC2에서 무료 VPN을 사용하는 게 어떻겠냐는 친구의 조언이 있었지만, 지연 속도 때문에 다른 방법을 고민해보았다.

집에 놀고 있는 그램 노트북이 있다.

5년을 함께 해준 노트북인데 고장이 나면 너무 슬플 것 같아서 다시 덮어두었다.

 

라즈베리파이를 고민했다.

작년에 램이 4G가 탑재된 라즈베리파이4 모델이 나온 것을 보고는 구매했다.

배보다 배꼽이 더 크다는 생각이 들긴 했지만, 추후에 개인 블로그를 라즈베리파이4에서 운영하는 계획으로 구매했다.

 

기본적으로 방열판이 제공되어서 붙여놨었는데, 방열판으로도 CPU 발열이 해결될 것 같지 않아서 알리에서 쿨링 팬을 구매했다.

( 쿨링 팬이 씽씽 도는 라즈베리파이4 모습 - 소음은 없지만, 빛이 숙면을 방해하는 단점이… )

 

 

운영

 

배포까지 마치고 난 후 사용자를 모아야 했다.

마스크 커뮤니티에 서비스를 홍보하면 사용자를 수천 명을 데려올 수 있을 것 같았다.

사용자가 많으면 구매 확률이 낮아진다. 하지만 여기서 경쟁하면서 또 하나의 커뮤니티로 키워갈 수 있을 것 같다는 생각을 했다.

하지만 외부에 공개하지 않기로 했다. 나와 내 주변 지인들이 마스크 구매 걱정 없이 살게 하고 싶은 욕심 때문이었다.

 

주변 사람들에게 서비스를 알리며 초대했다.

약 한 달간 운영하면서 그들에게 받은 피드백 및 개선 사항으로는 다음과 같다.

 

1. “알람이 와서 들어갔는데 품절인 경우가 많더라”

가장 많이 들었던 피드백이다. 심지어 내가 구매했던 알람을 품절이라고 말하는 경우도 있었다.

 

그 원인으로는 여러 가지가 있다.

1) 매일 10~11시 게릴라를 하는 사이트의 경우에는 유저 트래픽이 많아 접속이 어려움.

2) 재고가 1개인 경우(반품/취소 하는 경우) 에도 알람이 전송됨.

3) 알람을 눌렀더니, 구매하기 위해서는 회원가입을 해야 함. (기타 쇼핑몰)

 

위의 상황들로 받는 알람은 구매까지 이어질 확률은 매우 낮다. 이 판단으로 인해 서비스의 신뢰도가 낮아졌다.

위의 상황에서 알람을 보내는 것이 유의미하다고 판단했었는데, 알람이 올 때마다 품절이더라고 하면서 떠난 사용자도 있었다.

 

사용자들은 모든 상품의 알람을 받는 것 보다, 구매할 수 있는 확률이 높은 상품의 알람을 받는 것을 원한다는 것을 배웠다.

 

이에, 서비스에는 다음과 같은 변화가 있었다.

  • 정해진 시간에 상품을 올리는 사이트 제거 (ex. 매일 오전 10 ~ 11시 랜덤 게릴라 / 오전 9시 판매)
  • 품절 임박인 상품은 알람 전송 X (ex. 재고 3개)
  • 회원가입을 해야하는 기타 쇼핑몰 제외

스크린샷 2020-04-19 오전 12 10 32

 

2. “회사에서 슬랙을 사내 메신저로 사용하는데, 회사 슬랙과 알람 구분이 안 된다. 다른 플랫폼이 필요”

나는 슬랙 알람을 마스크 알람만 켜놓는다. 즉, 슬랙 알람 소리 = 마스크 알람 소리 였다.

하지만 슬랙을 회사에서 업무 메신저로 사용하는 사람들에게는 입장이 다르다.

업무를 보다가 회사 알람이 오면 ‘혹시나 마스크 알람이 아닐까?’ 하는 마음에 모니터 오른쪽 위를 자꾸 보게 되는 것이다.

 

이에 다른 플랫폼을 추가하기로 했다.

검색해보니 텔레그램, 디스코드가 있었는데, 텔레그램의 경우에는 최근 N번방의 이슈로 인해 껄끄러워 디스코드를 추가하였다.

디스코드 알람을 추가하면서, 디스코드를 사용하던 몇몇 지인이 유입되는 뽀나스가 생겼다.

 

 

한계

 

이 알리미만 있으면 마스크를 아주 쉽게 가질 수 있을 것 같지만, 전혀 그렇지 않다.

 

1) 점점 짧아지는 구매 가능 시간

운영 초기에는 마스크를 구매하기 쉬웠지만, 지금 상황은 다르다.

  • 30분 동안 구매가 가능했던 카카오톡 스토어 상품은 현재 1분도 채 안되서 품절
  • 5분 동안 구매가 가능했던 쿠팡 상품은 바로 클릭해도 품절인 경우 다반사

 

내가 생각하는 원인은 다음과 같다.

  • 나와 같이 알리미를 만드는 사람이 있을 수도 있다.
  • 마스크 커뮤니티에서 실시간으로 정보 공유하는 영향도 있을 것 같다.
  • 커머스 사이트에서 여러 상품을 장바구니에 넣어 놓고 새로고침을 반복해서 누르는 분들이 많아졌을 수도 있다.

 

현시점에서 상품 구매는 전적으로 개개인의 상황과 손에 달려있게 되었다.

 

2) 느린 네트워크 속도

한번씩 Http 응답받는 시간이 오래걸리는 경우가 있었다. 모든 스레드가 함께 들쑥날쑥하여 네트워크 문제라고 판단하였다.

고시원에 공유기의 모델이 문제인지, 여러 세대가 공유하기 때문인지는 모르겠다.

Http 요청 timeout을 2000ms 로 잡아놨는데, 어떤 때는 매번 2초를 초과하는 때도 있었다.

아무리 느려도 2초는 ..ㅠ

 

3) 앱 로딩 시간 - preWarm 필요

슬랙 / 디스코드로 알람을 받는 시점부터 상품 페이지를 확인하는 시점 까지 생각해보자.

슬랙 푸쉬 클릭 - 링크 클릭 이라는 간단한 것만 하면 된다.

그런데 슬랙 / 디스코드를 실행하는 데 걸리는 로딩 시간은 매우 길다.

쿠팡 앱 로딩 시간까지 고려하면 더 커진다.

 

위와 같은 이유로 슬랙 / 디스코드 / 쿠팡 앱을 주기적으로 켜놓는 꼼수가 필요하다.

 

 


 

끝으로

 

현재 마스크 구매 알리미는 총 20여 명의 사용자들이 이용하고 있다.

부모님이 걱정하면서 보내줬던 마스크가 이제는 내가 집으로 보낼 수 있었다. 또한, 친구들을 만날 때면 마스크를 나눠주기도 했다.

마스크 걱정을 덜어내려고 시작했던 이 프로젝트는 어느정도 목표 달성을 한 것 같다.

 

마스크가 부족할 때는 면마스크를 빨아서 쓰거나, KF-94 마스크 하나를 2 ~ 3일 씩 사용했었다.

지금도 한 장으로 2 ~ 3일 사용하고 있다. 저렴하게 구매했지만, 새것 뜯을 때마다 돈 아깝다는 마음은 떨칠 수 없다.

 

프로젝트는 아직 개선할 점이 많다.

  • 라즈베리파이 고정 아이피 셋팅
  • 알리미 스레드/프로세스 죽을 때 알람
  • 지연 속도 최적화 고민
  • 마스크 구매자랑 채널 ( 서비스 신뢰도 문제 해결 )

하지만, 나는 지금 이 상태로도 만족한다.

 

한가지 신경이 쓰이는 점이 있다면 이것이 불법적인 서비스인지의 여부이다.

매크로로 마스크를 결제하는 프로그램을 만든 사람은 업무방해 혐의로 불구속 입건되었다고 하던데, 혹시 이 글을 읽으시는 분 중에 잘 아시는 분 계신다면 메일이나 댓글로 남겨주시면 감사하겠습니다. (_ _)

 

- 코로나19의 종식을 바라며.. 끗 -


황준오 (Bactoria) 황준오 (Bactoria)

.

Comments

Content