본문 바로가기
조그만 기술로 세상을 이롭게/문자왔어요

문자왔어요 앱 개발 방법 및 사용 기술 상세 정리

by eplus 2026. 6. 18.

최근 비공개 테스트로 진행 중인 문자왔어요 앱은 휴대폰에 새로 수신되는 문자 중 사용자가 설정한 조건에 맞는 문자를 메일 또는 톡으로 전달해 주는 문자 확인 도우미 앱입니다.

처음에는 고객사 사이트에서 발주 내용을 자동으로 확인하는 RPA 프로그램을 검토하는 과정에서 시작되었습니다. 고객사 사이트 로그인이나 발주 확인 과정에서 SMS 인증번호가 필요한 경우가 있어, 해당 인증 문자를 안전하게 확인하고 업무 흐름에 활용할 수 있는지 가능 여부를 테스트하기 위한 목적이었습니다.

개발을 진행하면서 단순 인증번호 확인을 넘어, 중요한 문자 알림을 메일이나 톡으로 다시 받아볼 수 있는 기능으로 확장하게 되었습니다.

다만 문자는 인증번호, 금융 정보, 개인 연락 내용 등 민감한 정보가 포함될 수 있기 때문에 현재는 공개 출시보다는 비공개 테스트 중심으로 기능과 안정성을 확인하고 있습니다.


1. 개발 환경

문자왔어요 앱은 Android 앱을 기준으로 개발했습니다.

주요 개발 환경은 다음과 같습니다.

개발 언어: C#
앱 프레임워크: .NET MAUI
개발 도구: Visual Studio 2022
대상 플랫폼: Android
서버: Python Flask
웹 서버 환경: IIS + Flask 연동
메일 전송: Gmail SMTP
톡 전송: KT Communis 알림톡 API
테스트 배포: Google Play 비공개 테스트

처음부터 서버와 앱을 분리해 구성했습니다.

앱은 문자를 수신하고 조건을 판단한 뒤 서버 API로 전송 요청을 보내고, 서버는 실제 메일 또는 KT 알림톡을 발송하는 구조입니다.


2. 전체 시스템 구조

문자왔어요의 전체 흐름은 다음과 같습니다.

스마트폰 문자 수신
→ 앱에서 SMS 수신 이벤트 감지
→ 문자 내용 저장
→ 사용자가 설정한 조건과 비교
→ 메일/톡 전달 여부 결정
→ 서버 API 호출
→ 서버에서 메일 또는 KT 알림톡 발송
→ 앱에 전송 결과 저장

앱에서 직접 SMTP나 KT API를 호출하지 않고 서버를 거치도록 한 이유는 보안 때문입니다.

Gmail 앱 비밀번호, KT 인증키, 카카오 발신프로필 키, 템플릿 ID 같은 값은 앱에 직접 넣으면 노출 위험이 있습니다. 그래서 앱에는 서버 주소만 두고, 민감한 인증 정보는 서버 환경변수로 관리하도록 했습니다.


3. 앱 화면 구성

앱은 하단 탭 구조로 구성했습니다.

현재 주요 탭은 다음과 같습니다.

문자
도우미
설정
안내

각 탭의 역할은 다음과 같습니다.

문자: 수신 문자 목록, 재전송, 톡 답장
도우미: 수동 문자 전달, 테스트 기능, IT 만물상 링크
설정: 메일/톡 전달 방식, 이메일, 전화번호, 조건 설정
안내: 사용 방법, 주의사항, Copyright

초기에는 설정 탭에 많은 내용을 넣었지만, 항목이 많아지면서 사용성이 떨어졌습니다. 그래서 기능별로 탭을 나누고, 설정 탭은 실제 입력 항목 중심으로 정리했습니다.


4. SMS 수신 처리

문자왔어요는 Android의 SMS 수신 이벤트를 활용합니다.

앱은 RECEIVE_SMS 권한을 사용해 새로 수신되는 문자를 감지합니다.

중요한 점은 기존 문자함 전체를 읽는 방식이 아니라, 새로 들어오는 문자 중심으로 처리하도록 설계했다는 점입니다.

기존 문자함 전체 읽기: 민감도 높음
새 문자 수신 이벤트 처리: 상대적으로 안전한 방식

문자에는 인증번호, 금융 정보, 개인 대화 내용 등 민감한 정보가 많기 때문에, 불필요하게 기존 문자함 전체를 읽는 방식은 피하는 것이 좋다고 판단했습니다.


5. 문자 조건 분류

모든 문자를 무조건 전달하면 개인정보 부담도 크고 불필요한 알림도 많아집니다.

그래서 문자왔어요는 조건별 전달 기능을 제공합니다.

전체 문자
금융 문자
택배/배송 문자
인증/보안 문자
긴급/위치 문자
사용자 키워드
항상 전달 번호
전달 제외 번호

예를 들어 금융 문자는 다음과 같은 키워드를 기준으로 분류할 수 있습니다.

카드
승인
결제
입금
출금
이체
은행

택배/배송 문자는 다음과 같은 키워드를 기준으로 분류할 수 있습니다.

택배
배송
도착
배달
운송장

사용자는 전체 문자를 전달할 수도 있고, 필요한 조건만 선택해서 전달할 수도 있습니다.


6. 메일 전송 기능

문자왔어요는 조건에 맞는 문자를 사용자가 설정한 이메일로 보낼 수 있습니다.

앱에서 서버로 보내는 주요 데이터는 다음과 같습니다.

앱 이름
요청 구분
폰 명칭
발신 번호
문자 분류
수신 시각
문자 내용
받는 이메일
전달 방식

서버에서는 Gmail SMTP를 사용해 메일을 발송합니다.

Gmail SMTP를 사용할 때는 일반 Gmail 로그인 비밀번호가 아니라 Gmail 앱 비밀번호를 사용해야 합니다.

서버 환경변수 예시는 다음과 같습니다.

GMAIL_USER
GMAIL_APP_PASSWORD

이 값을 서버에 환경변수로 등록한 뒤 Flask 서버에서 읽어 메일을 발송합니다.

메일 전송 테스트 과정에서는 다음 문제들을 점검했습니다.

Gmail 앱 비밀번호 오류
SMTP 인증 실패
서버 환경변수 미반영
IIS 재시작 누락
한글 인코딩 문제

최종적으로 서버 API를 통해 메일 전송이 정상적으로 동작하도록 보완했습니다.


7. KT 알림톡 전송 기능

메일뿐 아니라 톡으로도 문자를 전달할 수 있도록 KT Communis 알림톡 API를 연동했습니다.

KT 알림톡 연동에는 다음 값들이 필요합니다.

KT 알림톡 API URL
KT 알림톡 AuthKey
카카오 SenderKey
알림톡 TemplateId
FailOver 설정
FailOver Callback 번호

서버 환경변수 예시는 다음과 같습니다.

KT_ALIMTALK_API_URL
KT_ALIMTALK_AUTH_KEY
KT_KAKAO_SENDER_KEY
KT_TEMPLATE_ID
KT_FAILOVER
KT_FAILOVER_TYPE
KT_FAILOVER_CALLBACK_NUM

KT API 연동 과정에서는 여러 오류를 하나씩 해결했습니다.

1) 서비스 인증 실패

초기에는 다음 오류가 발생했습니다.

서비스 인증 실패
errorcode: 200010

원인은 KT 인증키를 JSON 본문에만 넣고, HTTP Authorization 헤더에 넣지 않았기 때문이었습니다.

수정 후에는 다음처럼 처리했습니다.

Authorization: Basic ...

2) 발송 대상자 목록 없음

그 다음에는 다음 오류가 발생했습니다.

발송 대상자 목록이 없습니다.
errorcode: E00801

원인은 수신번호를 단일 값으로 보내고 있었기 때문입니다.

KT API에서는 수신자 정보를 receiveList 배열 구조로 보내야 했습니다.

{
  "receiveList": [
    {
      "receiveNum": "01000000000",
      "customMessageId": "esms_...",
      "param": {
        "작업구분": "문자왔어요",
        "작업결과": "문자 수신 알림",
        "상세내용": "...",
        "발생일시": "2026-06-14 10:00:00",
        "기타": ""
      }
    }
  ]
}

3) 성공 응답 판정

KT API는 HTTP 호출이 성공했다고 해서 실제 발송 성공이라고 볼 수 없습니다.

응답 본문 안의 값을 확인해야 합니다.

성공 판정에는 다음 정보를 사용했습니다.

returndescription = Success
successCnt = 1
trackingId 존재

이 과정을 통해 서버 기준으로 KT 알림톡 전송 요청이 정상 접수되는 것을 확인했습니다.


8. 메일/톡 선택 전송

사용자는 전달 방식을 선택할 수 있습니다.

메일로 보내기
톡으로 보내기
메일과 톡 둘 다 보내기

앱에서 서버로 전달하는 값은 다음과 같은 형태입니다.

{
  "deliverEmail": true,
  "deliverTalk": true,
  "recipientEmail": "user@example.com",
  "recipientTalkPhone": "01000000000"
}

메일만 보내거나, 톡만 보내거나, 둘 다 보내는 것이 가능합니다.


9. 톡 답장 기능

받은 문자 목록에는 톡 답장 기능도 추가했습니다.

발신자가 휴대폰 번호로 판단되는 경우, 받은 문자 화면에서 바로 톡 답장을 보낼 수 있도록 했습니다.

예를 들어 문자 수신 후 다음과 같은 답장을 보낼 수 있습니다.

확인했습니다.
잠시 후 연락드리겠습니다.
처리했습니다.

단, 이 기능도 KT 알림톡 서버를 통해 전송되므로, 서버 설정과 템플릿 구조가 맞아야 합니다.


10. 수동 문자 전달 기능

모든 문자가 자동으로 수신되는 것은 아닙니다.

일부 문자는 다음과 같은 이유로 앱에서 감지되지 않을 수 있습니다.

RCS 메시지
채팅 메시지
통신사 특수 메시지
스팸함 이동
기본 문자앱 전용 처리

이런 경우를 대비해 수동 문자 전달 기능을 추가했습니다.

사용자가 직접 발신번호와 문자 내용을 입력하면, 메일 또는 톡으로 전달할 수 있습니다.


11. 서버 API 구조

서버는 Python Flask로 구성했습니다.

주요 API는 다음과 같습니다.

/api/whoami
/api/esms-env-check
/api/esms-forward
/api/esms-kt-payload-preview

각 API의 역할은 다음과 같습니다.

/api/whoami
- 현재 실행 중인 서버 확인

/api/esms-env-check
- Gmail, KT 환경변수 설정 여부 확인

/api/esms-forward
- 메일/톡 실제 전송 처리

/api/esms-kt-payload-preview
- KT 알림톡 payload 미리보기

개발 중 서버가 여러 개 있거나 app.py가 여러 위치에 있을 경우, 실제 IIS가 어떤 app.py를 실행하는지 확인하기 위해 /api/whoami를 추가했습니다.

이 기능은 서버 반영 오류를 찾는 데 매우 유용했습니다.


12. Android HTTP 통신 이슈

초기 테스트에서는 서버에서 정상적으로 메일과 톡이 전송되는데, 앱에서는 Connection failure가 발생하는 문제가 있었습니다.

원인은 Android에서 기본적으로 HTTP 통신을 제한하는 문제였습니다.

서버 주소가 HTTPS가 아니라 HTTP였기 때문에 Android 설정에서 cleartext traffic을 허용해야 했습니다.

Android Manifest와 network security config를 보완해 특정 도메인에 대해 HTTP 통신을 허용하도록 처리했습니다.

www.esgit.co.kr

운영 관점에서는 가능하면 HTTPS 적용이 더 바람직합니다.


13. 전송 상태 관리

앱에서는 문자별로 전송 상태를 관리합니다.

전송 완료
전송 실패
전송 대기
전달 제외
톡 발송 접수 완료

메일과 톡을 함께 지원하게 되면서 기존의 “메일전송 완료”, “메일전송 실패” 같은 표현은 “전송 완료”, “전송 실패”처럼 일반화했습니다.

전송 실패 시에는 나중에 다시 보낼 수 있도록 재전송 기능도 제공합니다.


14. 예외 처리와 앱 안정성

문자 수신 앱은 백그라운드 처리, 권한, 네트워크, 서버 통신 등 다양한 이유로 오류가 발생할 수 있습니다.

그래서 앱 전체에 예외 처리를 보완했습니다.

앱 시작 중 오류
SMS 수신 중 오류
문자 저장 오류
메일/톡 전송 오류
서버 통신 오류
외부 브라우저 실행 오류
비동기 작업 오류

오류가 발생해도 가능한 한 앱이 바로 종료되지 않고, 로그를 남긴 뒤 사용자가 다시 시도할 수 있도록 구성했습니다.


15. 화면 해상도와 큰 글씨 대응

스마트폰은 화면 크기와 해상도가 다양합니다.

또 사용자가 큰 글씨 모드를 사용하는 경우도 있습니다.

이를 고려해 화면 구성과 버튼, 입력창, 탭 표시를 보완했습니다.

작은 화면 대응
큰 글씨 대응
하단 탭 구성 정리
탭 아이콘 개선
입력창 높이 조정
버튼 간격 조정

특히 설정 항목이 많아지면서 화면이 복잡해졌기 때문에 탭 구조를 분리해 사용성을 높였습니다.


16. 외부 링크와 안내 화면

도우미 탭에는 IT 만물상 링크를 추가했습니다.

클릭하면 외부 브라우저에서 관련 페이지를 열 수 있도록 했습니다.

안내 탭에는 앱 사용 방법과 주의사항, Copyright 문구를 정리했습니다.


17. Google Play 비공개 테스트

문자왔어요는 문자 권한을 사용하는 앱이기 때문에 공개 출시에는 신중해야 합니다.

문자에는 인증번호, 금융 정보, 개인 연락 내용이 포함될 수 있으므로 Google Play에서도 SMS 권한을 매우 민감하게 봅니다.

그래서 현재는 비공개 테스트를 통해 다음 항목을 확인하고 있습니다.

문자 수신 안정성
메일 전송 안정성
KT 알림톡 전송 안정성
톡 답장 기능
수동 문자 전달
재전송 기능
화면 구성
권한 안내
Google Play 정책 대응

공개 출시 여부는 충분한 테스트와 검토 후 결정할 계획입니다.


18. 개발하면서 느낀 점

문자왔어요는 단순히 문자를 받아 메일로 보내는 앱처럼 보일 수 있지만, 실제로는 여러 기술 요소가 결합되어 있습니다.

Android SMS 권한
MAUI 앱 구조
서버 API 설계
Gmail SMTP 인증
KT 알림톡 API
환경변수 보안 관리
IIS 서버 반영
Google Play 정책 대응
예외 처리
UI/UX 개선

특히 문자와 인증번호를 다루는 앱은 기능보다도 보안과 사용 목적이 중요합니다.

편리함만 생각하면 위험할 수 있고, 너무 제한하면 사용성이 떨어집니다.

결국 중요한 것은 다음 세 가지라고 생각합니다.

사용자의 명확한 동의
필요한 문자만 전달
전송 결과와 상태를 투명하게 표시

마무리

문자왔어요는 처음에는 RPA 업무 자동화 가능성을 테스트하기 위해 시작한 작은 기능이었습니다.

하지만 개발을 진행하면서 문자 수신, 메일 전달, KT 알림톡 전달, 톡 답장, 수동 전달, 재전송, 예외 처리까지 포함한 문자 확인 도우미 앱으로 확장되었습니다.

아직은 민감한 기능이 많아 비공개 테스트로 조심스럽게 진행하고 있습니다.

앞으로도 기능보다는 안정성, 편의성보다는 개인정보 보호, 공개보다는 충분한 검토를 우선으로 보완해 나갈 예정입니다.

조그만 기술로 세상을 이롭게.

문자왔어요도 그 방향 안에서 조심스럽게 다듬어 가고 있습니다.

반응형