0. 목적
C# 언어를 사용한 윈도우 폼을 제작해, 일반적인 회원가입 화면에서 진행하는 휴대폰 번호 본인 인증 시스템을 간단하게 구현해 보도록 한다. 개인적인 간단한 프로젝트에서 사용하기 위한 방법으로, 사설 SMS 업체를 이용하도록 한다. (광고 X)
다날과 같은 일반적인 통신사 PASS를 통한 본인인증의 경우에는, 해당 업체와 계약을 맺어야 하므로 개인 프로젝트에서는 활용하기 어려운 것이 까닭이다. 상용화 프로그램을 제작하기 위해서라면, 다날과 같은 업체와 분명히 계약을 맺고 진행해야 할 것 이다.
1. 참고
C# 언어를 사용한 윈도우 폼의 이메일 인증 시스템 구현 방법은 아래의 링크를 참고하도록 하자.
본 포스트에서 사용된 IDE
는 Visual Studio Community 2022 버전을 사용했다.
2. CoolSMS API KEY 발급
아래의 링크에 접속해 서비스 회원가입 절차를 진행한다.
회원가입 절차는 너무나 간단하기 때문에 생략하도록 하겠다.
회원가입 완료 후, 로그인을 하게 되면 CoolSMS 대시보드 화면이 출력된다. 좌측 트리 메뉴의 개발 / 연동
→ API Key
관리 버튼을 클릭한다.
필자는 이미 API Key
를 발급해 둔 상태라, 초기 세팅을 하는 사용자들과는 다른 화면이 출력될 것이다. API Key
가 없는 사용자들은 + 새 API KEY 생성
버튼을 눌러, 간단한 본인인증 절차를 거친 후 SMS 발송을 위한 API Key
를 발급받도록 한다.
정상적으로 완료되면 API Key
와 API Secret
번호가 생성되게 된다. 이 내용을 잘 기억해 두어, C# 코드 작성 시에 사용할 수 있도록 한다.
3. 윈도우 폼 제작
Visual Studio에서 새로운 WinForm
프로젝트를 생성하고, Form1.cs
을 위와 같이 디자인 한다.
요소 | 종류 | 속성 |
① | Label | ㆍ모양 → Text : 전화번호 |
② | Label | ㆍ모양 → Text : 인증번호 |
③ | TextBox | ㆍ디자인 → Text : txtbox_tel |
④ | TextBox | ㆍ디자인 → Text : txtbox_num |
⑤ | Button | ㆍ모양 → Text : 인증번호 발송 ㆍ디자인 → Text : btn_sendnum |
⑥ | Button | ㆍ모양 → Text : 인증 확인 ㆍ모양 → Text : btn_checktel |
4. NuGet 패키지 추가
Visual Studio 상단 메뉴의 프로젝트
→ NuGet 패키지 관리
버튼을 클릭한다.
찾아보기
→ coolsms
를 검색하고, NuGet
패키지를 설치한다.
5. 코드 작성
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CoolSms; // CoolSMS Client (NuGet 패키지) 사용 참조
코드 작성 블럭으로 진입해, CoolSMS 클라이언트 사용을 위한 CoolSms 참조를 using
해준다.
private string coolsms_apikey = "CoolSms에서 발급받은 API Key";
private string coolsms_apisecret = "CoolSms에서 발급받은 Secret Key";
private string coolsms_senderid = "CoolSms에 등록된, 문자가 발송될 전화번호";
Form1 Class
내부에는, private
형태의 문자열 변수 3개를 선언한다. 각각 API Key
, API Secret Key
, 발송 전화번호
를 관리하기 위한 변수로서, 외부에서 접근할 수 없도록 private
형태로 선언했다.
coolsms_apikey
변수에는 CoolSMS 서비스에서 발급받은 API Key
를, coolsms_apisecret
변수에는 CoolSMS 서비스에서 발급받은 API Secret Key
를 변수값으로 넣으면 된다.
coolsms_enderid
변수의 경우, 임의의 전화번호를 넣는 것이 아닌 CoolSMS 상에서 본인인증 절차를 거쳐 등록된 본인 전화번호를 입력하도록 한다. 해당 번호로 문자가 발송될 것이다. 해당 기능은 본인 명의의 전화번호를 2회선 이상 CoolSMS 상에 등록해 두었을 경우, 발신 번호를 어떤 것으로 할지 결정하는 부분이다. 따라서 CoolSMS상 발송용 대표 번호로 지정된 전화번호를 입력해야지, 임의의 전화번호를 넣으면 절대 안 된다. (오류가 발생하며 SMS 발송이 이뤄지지 않는다.)
SmsApi sms = new SmsApi(new SmsApiOptions
{
ApiKey = coolsms_apikey,
ApiSecret = coolsms_apisecret,
DefaultSenderId = coolsms_senderid,
});
그 아래에는 CoolSMS를 사용하기 위한 sms
객체를 하나 생성한다. ApiKey
와 ApiSecret
, DefaultSenderId
에는 앞서 선언했던 문자열 private
변수를 하나씩 넣어주면 된다.
public static Random randomNum = new Random();
public static int checkTel_Num = randomNum.Next(10000000, 99999999);
그 아래에는 난수 발생을 위한 randomNum
객체를 생성해 주었고, randonNum
객체는 10,000,000 ~ 99,999,999 사이의 8자리 난수값이 발생하도록 지정했다. 발생한 난수값은 정수형 checkTel_Num
변수에 저장된다.
난수를 발생할 객체 randonNum
과, 변수 checkTel_Num
은 해당 폼 내의 모든 객체만 공통으로 공유하고 사용해야 할 값이기 때문에 정적 멤버변수인 static
으로 선언했다.
private void btn_sendnum_Click(object sender, EventArgs e)
{
var body = sms.SendMessageAsync
(txtbox_tel.Text,
"본인인증을 위해 다음 인증 번호를 입력 바랍니다.\n" + "[" + checkTel_Num.ToString() + "]");
MessageBox.Show(txtbox_tel.Text + "번으로 인증 번호가 발송 되었습니다.");
}
btn_sendnum 버튼을 더블 클릭 해, 인증번호 발송 버튼 클릭 시 조치할 적절한 SMS 내용을 구성하고, SMS 발송을 위한 관련 정보값들을 넘겨주면 된다.
CoolSMS API의 SMS 발송 구조는?
▣ var 자료형으로 선언한 body 변수
C# 코드 내에서 자동으로 형식을 지정할 수 있도록var
키워드를 사용해body
변수를 선언한다.
body 변수에는sms.SendMessageAsync
메서드가 선언된다.
▣ sms.SendMessageAsync 메서드의 구조
(SMS를 수신할 전화번호, 문자 내용)
매우 간단하다. 괄호 사이에 해당 내용만 적절히 넣어주면 된다.
문자가 발송되면 MessageBox
를 띄워, 어떤 휴대전화 번호로 인증 번호가 수신될 예정인지, 사용자에게 직관적으로 확인할 수 있게 편의성을 도모했다.
private void btn_checktel_Click(object sender, EventArgs e)
{
if (txtbox_num.Text == checkTel_Num.ToString())
{
MessageBox.Show("휴대폰 인증이 성공했습니다.");
}
else
{
MessageBox.Show("휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다.");
}
}
btn_checktel
버튼을 더블 클릭 해, 인증 확인 버튼을 클릭하면 사용자가 입력한 txtbox_num
의 인증번호 값과 프로그램 내에서 생성했던 checkTel_Num
의 8자리 난수값이 일치하는지 확인하는 코드를 작성한다.
인증 번호가 일치할 경우 휴대폰 인증이 성공했습니다.
라는 MessageBox
를 출력하고, 인증 번호가 불일치 할 경우 휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다.
라는 MessageBox
를 출력한다.
▣ 전체 스크립트 코드
전체 스크립트 코드가 필요한 사람들을 위해 첨부한다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CoolSms; // CoolSMS Client (NuGet 패키지) 사용 참조
namespace SMSSystem
{
public partial class Form1 : Form
{
private static string coolsms_apikey = "API 키를 입력";
private static string coolsms_apisecret = "API Secret 키를 입력";
private static string coolsms_senderid = "CoolSMS 등록된 본인 번호 입력";
SmsApi sms = new SmsApi(new SmsApiOptions
{
ApiKey = coolsms_apikey,
ApiSecret = coolsms_apisecret,
DefaultSenderId = coolsms_senderid,
});
public static Random randomNum = new Random();
public static int checkTel_Num = randomNum.Next(10000000, 99999999);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_sendnum_Click(object sender, EventArgs e)
{
var body = sms.SendMessageAsync(txtbox_tel.Text, "본인인증을 위해 다음 인증 번호를 입력 바랍니다.\n" + "[" + checkTel_Num.ToString() + "]");
MessageBox.Show(txtbox_tel.Text + "번으로 인증 번호가 발송 되었습니다.");
}
private void btn_checktel_Click(object sender, EventArgs e)
{
if (txtbox_num.Text == checkTel_Num.ToString())
{
MessageBox.Show("휴대폰 인증이 성공했습니다.");
}
else
{
MessageBox.Show("휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다.");
}
}
}
}
6. 실행 결과
정상적으로 문자 발송이 이루어지고, 인증번호를 입력했을 때 일치 / 불일치 여부를 잘 판단하는 모습을 확인할 수 있다. 해당 코드를 잘 응용한다면 SMS 발송 시스템 또한 WinForm
을 이용해 만들 수 있을 것이다.