1편은 AWS Lambda를 사용하게 된 배경에 대해 다룹니다.
사용법은 2, 3편에서 알아보아요..

사건의 발단

겨울방학 때 아는 분의 소개로 홈페이지 제작툴 중 하나인 Wix를 사용해 가사도우미 예약 사이트를 제작하게 되었다.

소문대로 깔끔하고 사용하기 좋은 툴에 예쁜 사진 자료도 많아서 디자인 작업은 꽤 순조로웠다.

문제는 홈페이지에 여러 기능을 추가하는 과정에서 시작되엇다.

클라이언트분께서 온라인 예약을 받고 예약 결과를 문자 메시지로 전송하는 기능이 필요하다고 얘기를 해서 Wix의 앱 마켓을 둘러보게 되었다.

결과는 참담했다.

문자 전송 관련 앱이라고는 평점 2.5점에 불과한 SMS Hero라는 앱밖에 없었던 것이다.

그나마도 제대로 관리가 되지 않는 건지 코멘트에는 제대로 작동하지 않는다는 글만 보였다.

그렇다. 개발자로서 가장 싫은 순간이 찾아온 것이다.

아무튼 빠르게 문자 서비스를 제공하는 업체들을 찾아보았다.

후보군들

Twillio


더 말할 필요없는 SMS 서비스의 끝판왕.

고객 상담도 굉장히 훌륭하다고 느꼈다.

다만 회원가입에서부터 조금 애를 먹었는데 regex의 문제인지 naver 계정으로 가입을 할 수가 없었다.

결국 고객 센터에 상담을 예약하고 약속한 날짜가 되어도 메일이 오지 않아 포기했는데,

이게 웬걸? 예약시간이 한국 시간이 아니라 PST(태평양 표준시)였던 것이다.

결론적으로는 gmail 계정을 통해 가입을 할 수 있었다.

그러나.. Region이 지원이 되지 않았는데 한국 번호를 넣으면 서비스를 이용할 수가 없었다.

상큼하게 이틀을 날려먹었다!

AWS SNS


Twillio의 대안으로 알아본 서비스.

역시나 대기업답게 사용도 간단하고, 도큐먼트도 훌륭한데다 한국 번호도 이용이 가능했다.

하지만 가격대가 상당했는데 한 통에 38원쯤 했다.

다른 한국 업체들의 문자 이용료가 8 ~ 20원 사이에 형성된 걸 감안하면 가격대가 좀 있는 편.

고로 후보군에서 탈락.

Coolsms


SMS 서비스를 검색하면 최상단에 검색되는 한국 서비스다.

도큐먼트가 깔끔하고 실패건에는 과금하지 않는다고 했다.

다만 Wix 환경에서 사용하기에 부담스러운 점이 몇 가지 있었는데,

처음부터 서버 환경을 염두에 두고 제작하여 단순 api key 입력만으로는 사용이 불가능하고, 임의의 salt를 기반으로 한 md5 hmac을 바디에 실어 전송해야하는데 이는 Wix 에서는 불가능했다.

또 결정적으로 최신 버전인 3.0을 사용할 수 없다는 사실을 문의 메일을 보낸 하루 뒤에야 알게 됐다.
(홈페이지에서는 광고 엄청 했으면서 ㅜㅜ)

4xx 에러를 붙잡고 하루 종일 고생했지만 결국 사용을 포기할 수밖에 없었다.

Aligo


내 요구사항

  • Rest api 형태의 서비스
  • Wix 환경에서 사용가능
  • 저렴한 가격
  • 테스트 건에 대해서는 과금하지 않는다 (자유로운 테스트 전송)

위 네 가지 모두를 만족하는 서비스는 알리고밖에 없었다.

단문 8.4 장문 25원은 만족스러운 가격이었고, 사용하기 쉬운 API가 맘에 들었다.

테스트, 테스트, 테스트!

본격적으로 테스트 전송에 돌입했는데 전송결과가 조금 이상했다.

잔여 사용량을 알려주는 /remain으로 전송을 보냈는데,

{"result_code":-101,"message":"\uc778\uc99d\uc624\ub958\uc785\ub2c8\ub2e4.-IP","SMS_CNT":0,"LMS_CNT":0,"MMS_CNT":0}

위와 같은 결과가 떴다.

메시지 부분을 디코드해보니 "인증오류입니다. -IP"라고 나왔다.

이는 국내 문자 전송 서비스는 발송 가능 IP 주소에 대해 Whitelist 정책을 사용하기 때문인데,

즉 사전에 등록되지 않은 IP 주소에서는 문자를 보낼 수 없다.

이때는 알리고 홈페이지에서 발송 IP에 내 IP 주소를 추가해주면 된다.

IP 주소 등록을 마치면?

{"result_code":1,"message":"success","SMS_CNT":5936,"LMS_CNT":1925,"MMS_CNT":831}

성공 메시지를 볼 수 있습니다.

Wix 연동

자, 이제 모든 준비가 완료된 것 같다.

하지만 막상 Wix에 코드 조각을 복사해서 실행해보면 fetch 함수 호출은 CORS 오류만 낼 뿐 동작하지 않는다.

그 이유는 Wix의 도메인 주소와 다른 도메인의 주소(aligo)로 요청을 보냈기 때문이다.

이를 HTTP 접근제어 혹은 CORS 라고 부른다.

CORS는 웹 개발을 하다보면 흔히 마주하게 되는 문제인데 이 문제를 해결하는 방법은

  1. fetch 함수의 no-cors 모드를 활용
  2. 요청을 처리하는 서버에서 해당 origin으로부터의 요청을 허용하게끔 설정
  3. Proxy server를 활용
  4. Jsonp 형식을 활용

정도가 있다.

어떤 방법을 사용하더라도 "고정된 IP 주소"에서 요청을 보내야하기 때문에 클라이언트에서 fetch를 하는 방식은 사용할 수 없다.
(모든 클라이언트의 네트워크 주소를 IP whitelist에 등록할 수는 없으므로)

결론적으로 "고정된 IP 주소를 가지고 문자 전송 요청을 처리해주는 서버"가 필요하다는 것이다.

맞다. AWS Lambda와 Api gateway 이야기다.

2편에서 계속!