장난감 연구소

프로그래밍으로 새해 인사말 보내기 본문

토이프로젝트

프로그래밍으로 새해 인사말 보내기

changi1122 2020. 1. 5. 15:21

    며칠 늦긴 했지만, 2020년 새해가 밝았다. 새해가 되면 많은 사람들이 새해 인사말을 보낸다. 그래서 그런지 카카오톡도 1월 1일 새벽에 2시간 정도 멈췄다고 한다. 나도 마찬가지로 여러 개의 새해 인사말을 보냈다. 새해 인사말을 보내다 보니 컴퓨터로 인사말을 보내는 작업을 자동화해보자 생각했다. 금방 결과물을 볼 수 있을 걸로 보여 작은 토이 프로젝트 삼아 해보면 재밌을 것 같았다.

    SMS 문자 메시지보다 요금 부담이 없고 많이 사용하는 카카오톡으로 보낼 수 있었으면 했지만, 가벼운 마음으로 만들어 보기에는 할게 많아 보였다... 닷넷 코어 콘솔 환경에서 사용할 수 있는지도 모르겠고. (아마 REST API라고 제공하는 걸 사용해야 할 듯 하다.) 카카오 측의 문서화가 잘 되어있어 언제 한번 해보면 좋을 것 같긴 하다. 

    그렇지만 이번에는 간단하게 SMS 문자 메시지를 보내는 콘솔 프로그램을 만들어 보자고 생각하였다. PC에서 직접 문자 메시지를 보내는데도 어려움이 있었기에, 문자 메시지를 보내는 서비스를 사용했다. Twilio는 전화, 문자 메시지 등을 보내고 받을 수 있게 해주는 서비스를 제공하고 있었는데, 다양한 플랫폼별로 문서와 예제가 잘 제공되고 있어 좋았다.

    문자 메시지 보내기

    Twilio의 서비스를 사용하여 문자 메시지를 보낸다. 이를 위해 Twilio에 회원 가입한다. 회원 가입 후 로그인하면 최초 프로젝트를 만들어야 하는데, 대시보드에서 이를 확인하면 체험 요금으로 $15.50을 제공한다.

    대시보드의 최초 프로젝트

    국가별로 문자 메시지를 보내는 비용이 다른데, 대한민국 휴대전화로 문자 메시지를 보내는 비용은 $0.0470이다. 체험 요금인 $15.50를 보내는 비용 $0.0470으로 나누면 약 329개의 문자 메시지를 무료로 보낼 수 있다. (해보니 전화번호를 받는데 $1 사용해야 한다.) 무료여도 생각보다 문자 메시지를 많이 보낼 수 있어 만족스럽다!

    그럼 이제 프로그램에서 어떻게 문자를 보낼 수 있을까? 고맙게도 이에 대한 문서화가 잘 되어있다. 내가 사용한 닷넷 코어 콘솔의 개발 언어인 C# 이외에도 PHP, 자바, Node.js 등 다양한 환경에서 사용 가능하다.

    링크의 Quickstart 페이지에서 사용할 환경 선택하기

    우선 Twilio에서 만든 Nuget 패키지를 받는다. 커멘드 라인으로도 할 수 있지만, 편한 GUI를 사용하자. 비주얼 스튜디오에서 프로젝트를 우클릭한 후, NuGet 패키지 관리를 선택하면 된다. 검색에서 Twilio를 찾고, 설치한다.

    Twilio를 검색해 찾고, 설치한다

    이제 준비는 완료되었다. 예제 코드를 따라 적고 실행하면 문자 메시지가 보내진다. 이때 accountSid와 authToken의 값은 대시보드에서 찾아 넣어주면 된다. 이와 같이 간단하게 문자 메시지를 보낼 수 있다.

    using System;
    using Twilio;
    using Twilio.Rest.Api.V2010.Account;
    
    class Program
    {
        static void Main(string[] args)
        {
            // Find your Account Sid and Token at twilio.com/console
            // DANGER! This is insecure. See http://twil.io/secure
            const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
            const string authToken = "your_auth_token";
    
            TwilioClient.Init(accountSid, authToken);
    
            var message = MessageResource.Create(
                body: "Join Earth's mightiest heroes. Like Kevin Bacon.",
                from: new Twilio.Types.PhoneNumber("+15017122661"),
                to: new Twilio.Types.PhoneNumber("+15558675310")
            );
    
            Console.WriteLine(message.Sid);
        }
    }

    프로그램 만들기

    나는 프로그램에서 여러 사람에게 메시지를 한번에 보낼 수 있게 만들고자 하였다. 코드를 목적에 따라 분리하기 위해 메시지를 보내는 코드, 메시지 내용을 설정하는 코드, 메시지를 보낼 사람들을 설정하는 코드로 나눠 클래스로 만들었다. 이는 각각 Message 클래스, Content 클래스, AddressSet 클래스이다. 모두 두 개 이상 존재할 필요가 없기 때문에 static으로 선언하였다. 파일로 저장하는 코드나, 메시지 내용을 전처리하여 수신자 이름으로 바꿔주는 메서드와 같은 부분을 추상화하여, 외부에서 사용할 수 있게 하였다.

    각각 클래스에서 필요한 코드를 짜고는, 프로그램이 사용자로 부터 입력받는 부분을 만들었다. 마치 셸에 명령어를 입력하는 것처럼 "> 명령어 (옵션)"을 입력하면 해당 기능을 실행하게 만들었다. 문자열을 입력받아 띄어쓰기를 기준으로 나누고, 첫 부분은 명령, 두 번째 부분은 옵션으로 본 것이다. 이렇게 명령어에 따라 기능을 실행하고, 도움말을 표시하게 만들었다.

    이와 같이 간단하게 새해 인사말 보내는 프로그램을 코딩하였다. 아래 Github 링크에서 코드를 보고, 빌드해 사용할 수 있다.

     

    changi1122/Send-New-Year-Greeting

    새해 인사말 보내는 콘솔 프로그램. Contribute to changi1122/Send-New-Year-Greeting development by creating an account on GitHub.

    github.com

    결과

    실행 결과

    프로그램에서 새해 인사말 문자 메시지를 보내고, 휴대폰으로 문자 메시지를 받는데 성공하였다.

    긴 시간 들이지 않고 활용할 수 있는 프로그램을 완성해 작은 성취감을 느낄 수 있었다. 또, 몇몇 부분 배운 점도 있다. C#의 FileStream과 StreamWriter를 활용해 파일을 쓰는 방법에 관해 익히고, 클래스의 static 개념도 터득할 수 있었다.

    728x90
    개 댓글