|
| 1 | +--- |
| 2 | +title: "[draft]스팸 문자/전화좀 그만해라 (1)" |
| 3 | +date: 2024-11-22 |
| 4 | +desc: 지긋지긋한 스팸들... |
| 5 | +thumbnail: /posts/spam_killer/thumbnail.jpg |
| 6 | +--- |
| 7 | + |
| 8 | + |
| 9 | + |
| 10 | +## 개인적인 잡담 |
| 11 | + |
| 12 | +회사를 그만두고나서, 그동안 부족했던 부분에 대해서 여러가지 공부를 하려고 준비중이다. |
| 13 | +그런데, 갑지기 070 전화가 하루 한번 이상 오기 시작했다. |
| 14 | + |
| 15 | +이전에 [후후앤컴퍼니](/about)에서 이런 스팸관련 전화/문자에 대해, |
| 16 | +여러가지 기능을 구현해본 경험이 있기 문에, 간단하게 개인용 앱을 만들어 보고, 관련 과정을 공유하려고 한다. |
| 17 | + |
| 18 | +추가적으로, 이전회사에서 알게 된 내용이 있는데, |
| 19 | + |
| 20 | +> SKT 통신사의 경우, T전화를 개발하는 부서가 전화의 수발신을 담당하는 회사(SKT)내에 존재한다. |
| 21 | +한 회사이기 때문에, 개인정보 걱정없이 특정번호 수신을 미리 차단 가능하다. |
| 22 | + |
| 23 | +> KT의 경우 이런 전화번호관련 개발회사(ex. 후후)가 자회사로 분리되어있다. |
| 24 | +때문에, 전화수발신에 대해 관여하기 위해서는 복잡한 개인정보동의가 필요하다. (거의 불가능) |
| 25 | + |
| 26 | +운나쁘게도, 난 KT를 사용하고 있다. ㅠㅠ |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## 목표 |
| 31 | + |
| 32 | +### 1. 스팸전화 (070 시작번호) 차단 |
| 33 | + |
| 34 | +010으로 오는 전화는 어떤 전화인지 모르기때문에 차단하지 않기로 했다. |
| 35 | + |
| 36 | +iOS의 경우, 전화와 관련되어 Callkit이라는 프레임워크를 제공하고 있다. |
| 37 | + |
| 38 | +민감한 정보와 관련되다보니, 아주 제한적인 기능만을 제공하고 있는데, 이 기능 중 전화번호 저장/차단과 관련된 callkit extension을 사용해보려고 한다. |
| 39 | + |
| 40 | +이전 개발시점(2019년)까지는 extension 하나당 최대 약20만개의 전화번호까지만 등록/차단이 가능했으나, |
| 41 | +현재는 테스트해보니, 200만개까지 가능하다. (이런건 제발 공식문서에 기록좀 해붰으면 좋겠다.) |
| 42 | + |
| 43 | +우리가 차단해야하는 번호는 070-xxxx-xxxx 형식으로, 경우의 수는 1억개의 패턴이 나온다. |
| 44 | +이전에 20만개 차단일 경우에는 500개의 exntension을 설치&활성화해야함으로 불가능했으나, |
| 45 | +현재는 200만개로, 50개면 추가해볼만 할것으로 판단된다. |
| 46 | + |
| 47 | +callkit extension에는 여러가지 주의점이 존재하는데, |
| 48 | +1. extension임으로, 메모리는 7mb정도만 사용이 가능함 (한계 메모리가 넘어가면, 강제종료됨) |
| 49 | +2. 전화번호 등록시, sort가 되어있지 않으면 에러 발생 |
| 50 | +3. 한번에 2000개씩 저장(설정 불가능)되며, 2번과 같은 특징때문에 멀티쓰레드 처리가 불가능함 |
| 51 | + |
| 52 | +이러한 특징때문에, 1억개의 전화번호를 등록하려면 상당한 시간이 소모될 것으로 판단된다. |
| 53 | +따라서, 스팸 등록시 현재 진행상황을 보여주는 화면도 필요할 것으로 판단된다. |
| 54 | + |
| 55 | +또한, 설정 - 전화 - 전화번호차단에서 옵션을 on할때 바로 전화를 등록하면 |
| 56 | +50개의 extension을 한개씩 켜다가 답답해 죽을 수 있으니, 여기서 설정시에는 전화번호 등록을 안해야한다. |
| 57 | + |
| 58 | +이전 경험상, 이런 extension을 한번에 여러개 키는 경우에, 시스템 에러가 발생(활성화 오류)하며 이런 에러를 수정하기 위해서는 |
| 59 | +문제가 되는 extension애서 이미 저장된 번호를 다 삭제한 뒤, 완료를 기다렸다 다시 저장해아한다. |
| 60 | + |
| 61 | +그냥 편하게, |
| 62 | +1. 하나에서 실패가 발생하면 모든 전화번호를 다시 저장한다. |
| 63 | +2. enxtension에서 전화번호 저장 시작은 앱에서만 실행하며, 동시에 실행되는 extension 개수를 최대한 보수적으로 설정한다. |
| 64 | + |
| 65 | +이렇게 하는게 나을 것 같다. |
| 66 | + |
| 67 | + |
| 68 | + |
| 69 | +### 2. 스팸문자 차단 |
| 70 | + |
| 71 | +iOS에서는 스팸문자로 등록되면, 실시간 알람에 안뜨고, 문자 뱃지 카운트만 증가해주는 로직이 존재한다. |
| 72 | +또한 스팸은 거래/광고/정크 타입으로 등록이 가능하며, 문자수신시 최초 1번만 등록이 가능하다. |
| 73 | + |
| 74 | +무슨말이냐면, 최초로 수신되는 문자였을때만 문자내용이 extensino으로 전달되며, |
| 75 | +이후에는 동일번호로는 extension 문자로 체크할 수 없다는 것이다. |
| 76 | + |
| 77 | +또한 3~4초내에 스팸인지 아닌지 답을 주지 않으면, 비스팸으로 처리되는 로직도 있다. |
| 78 | + |
| 79 | +문자수신 시점에만 실행되며, 프레임워크가 제공하는 형식의 API가 강제되며 |
| 80 | +개인정보를 판별할 수 있는 정보는 보낼 수가 없다. (sender/content만 서버로 전달 가능) |
| 81 | + |
| 82 | +따라서 특정 사용자를 인식한다던가.. (예를 들어 회원인지 아닌지), 누구한테 보낸 문자인지 (receiver)를 알 수 없다. |
| 83 | + |
| 84 | + |
| 85 | +스팸으로 등록된 문자는 문자 - 정크항목으로 들어가게 되며, 알람도 노출되지 않는다. |
| 86 | + |
| 87 | +문제는, 해당 전화번호로 오는 문자를 다시 받고 싶은 경우인데... |
| 88 | +이럴때 exntenion에서는 해결 할 수 있는 방법이 없다. |
| 89 | + |
| 90 | +이미 수신된 문자가 있어서, 위의 조건(최초수신시에만 전달)이 되지 않으며, |
| 91 | +전체 문자를 삭제하면, 최초 수신시에만 전달조건에는 일치하나, extension 로직상 다시 스팸으로 처리될 가능성이 높다. |
| 92 | + |
| 93 | +뭐랄까... 해결책은 좀 생뚱맞을 수 있는데, |
| 94 | +해당 문자에 대한 reply를 3번이상 하면 시스템에서 자동 해제 된다. |
| 95 | + |
| 96 | +이런 제약과 문제점(?) 때문에, 후후앱 개발시 CS팀이 꾀나 고생했덜걸로 기억한다. |
| 97 | + |
| 98 | + |
| 99 | + |
| 100 | +### 3. UI 및 구현 |
| 101 | + |
| 102 | +기존처럼 rxswift + storybaord를 사용할까 했는데, |
| 103 | +이왕이면 공부할 겸, swiftUI + combine을 사용해보려고 한다. |
| 104 | + |
| 105 | +이전회사에서 swiftUI로 일부화면을 구현해봤으나, |
| 106 | +swiftUI + hostingViewController는 넘 비효츌적인 경우가 많아서, 일부분만 사용해봤었다. |
| 107 | + |
| 108 | +이번에는 full swfitUI + combine에 ribs 구조를 사용해보려고 한다. |
| 109 | + |
| 110 | +또한 50개의 extension을 생성/셋팅해아함으로, |
| 111 | +수동으로 만드는 것보다 tuist를 사용, 자동으로 구축해보려고 한다. |
| 112 | + |
| 113 | +UI는 토이프로젝트임을 감안해, 어디선가 많이 보던 UI를 최대한 비슷하게 구현해볼까 한다. |
| 114 | + |
| 115 | +### 4. 서버구축 |
| 116 | + |
| 117 | +스팸문자의 경우, 앱 내에서 판별도 가능하지만, API를 통해 질의도 가능하다. |
| 118 | +때마침 집에 Nas를 통한 웹서버를 구동중임으로, OpenAI API를 통한 스팸여부 판단로직을 구현해보려고 한다. |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | +### 5. 테스트 |
| 123 | + |
| 124 | +자.. 문제의 테스트 항목까지 넘어왔다. |
| 125 | +후후를 개발하면서도 느꼈지만, 시스템 항목 중 민감정보, 특히 전화번호/문자 관련해서는 Unit/UI 테스트가 불가능하다. |
| 126 | + |
| 127 | +자동화 테스트라는게, 특정 기능(함수)를 호출하고 원하는 결과값이 나타나는지를 확인하는건데, |
| 128 | + |
| 129 | +위의 두가지 extension은 |
| 130 | +1. 특정 기능에 대한 수동 호출 불가능 (스팸문자) |
| 131 | +2. 기능에 대한 검증 불가능 (스팸문자) |
| 132 | +3. 특정 기능 수행 및 검증을 위한 mocking 불가능 (전화차단) |
| 133 | + |
| 134 | +따라서, extension에 대한 검증은 실제 테스트로 대채하며, 그 외에 항목은 최대한 테스트를 진행할 예정이다. |
| 135 | + |
| 136 | +## 정리 |
| 137 | + |
| 138 | +이리저리 아이디어를 정리하다보니, 처음 생각보다 커진것 같다. |
| 139 | +에상 목표는 1주일로 잡고, 최대한 빨리 정리해 올려보도록 노력하겠다. |
0 commit comments