Skip to content

Commit 6df64e1

Browse files
authored
Merge pull request #7 from manaes/develop
포스트 추가
2 parents bc2ce53 + 9144fb2 commit 6df64e1

File tree

5 files changed

+424
-0
lines changed

5 files changed

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

Comments
 (0)