Skip to content

Commit 4850f0f

Browse files
authored
Create 김현준.md
1 parent 16b4f8b commit 4850f0f

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

week5(9~10장)/김현준.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
# 9. 웹 크롤러 설계
2+
3+
## 웹 크롤러
4+
5+
검색 엔진 인덱싱
6+
7+
- 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스 만듦
8+
9+
웹 아카이빙
10+
11+
- 나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차
12+
13+
웹 마이닝
14+
15+
- 데이터 마이닝으로 유용한 지식을 도출해 낼 수 있는 것
16+
17+
웹 모니터링
18+
19+
- 저작권이나 상표권이 침해되는 사례를 모니터링
20+
21+
### 문제 이해
22+
23+
웹 크롤러가 만족시켜야 할 속성
24+
25+
규모 확정성
26+
27+
- 병행성을 활용해 효과적으로 많은 양의 웹을 크롤링 해야 한다.
28+
29+
안정성
30+
31+
- 비정상적인 입력이나 환경에 대응해야 한다.
32+
33+
예절
34+
35+
- 수집 대상 웹사이트에 짧은 시간 동안 너무 많은 요청을 보내서는 안된다.
36+
37+
확장성
38+
39+
- 새로운 형태의 콘텐츠를 지원하기 쉬워야 한다.
40+
41+
### 상세 설계
42+
43+
웹은 깊이를 모르기 때문에 BFS를 보통 사용한다.
44+
45+
- 한 페이지에서 나오는 링크의 상당수는 갚은 서버로 되돌아가 같은 호스트에 속한 많은 링크를 다운받아 서버에 수많은 요청이 가게 된다.
46+
- URL의 우선순위가 없다.
47+
48+
위와 같은 문제점 때문에 동일한 웹 사이트에 대해 한 번에 한 페이지만 요청해야한다.
49+
50+
- 큐 라우터로 같은 호스트에 속한 URL은 언제나 같은 큐로 가도록 보장한다.(매핑 테이블로 정보 유지)
51+
- 큐 선택기가 큐들을 순회하면서 큐에서 URL을 꺼내 지정된 작업 스레드에 전달한다.
52+
- 작업 스레드가 전달된 URL을 다운로드한다.
53+
54+
또한 데이터의 신선함을 유지하기 위해 주기적으로 다운로드한 페이지도 재수집해야 한다.
55+
56+
- 웹 페이지 변경 이력 활용 및 우선순위를 활용해 최적화한다.
57+
- 데이터 크롤링에 대한 정보는 `각 웹사이트 메인 URL/Robots.txt` 에 있음
58+
59+
### 성능 최적화
60+
61+
- 분산 크롤링
62+
- 여러 서버에 크롤링을 분산
63+
- 도메인 이름 변환 결과 캐시
64+
- DNS 요청을 보내고 결과를 받는 작업의 동기적 특성 때문에 성능 병목(100ms~200ms)
65+
- 크롤러 스레드 가운데 어느 하나라도 이 작업을 하고 있으면 다른 스레드의 DNS 요청은 전부 블록
66+
- 따라서 DNS 조회 결과로 얻어진 도메인 이름과 IP 주소 사이의 관계를 캐시 해놓고 크론 잡 등을 돌려 주기적으로 갱신
67+
- 지역성
68+
- 크롤링 서버를 지역적으로 분산해 가까운 지역 서버의 다운로드를 빠르게 한다.
69+
- 짧은 타임아웃
70+
- 안정성
71+
72+
### 문제 콘텐츠 감지 및 회피
73+
74+
1. 중복 콘텐츠
75+
76+
해시나 체크섬을 사용해 탐지
77+
78+
2. 거미 덫
79+
80+
크롤러를 무한 루프 돌도록 하는 악의적인 웹사이트로 깊은 디렉터리 구조는 최대 URL의 길이로 예방할 수 있다. 그러나 다른 덫을 모두 피하기는 쉽지 않다
81+
82+
83+
# 10. 알림 시스템 설계
84+
85+
모바일 푸시 알림, SMS 메시지, 이메일로 분류 가능
86+
87+
알림 시스템 설계 시 3가지 절차에 대한 설계 필요.
88+
89+
알림 유형별 지원 방안, 연락처 정보 수집 절차, 알림 전송 및 수신 절차
90+
91+
### 알림 유형별 지원 방안
92+
93+
- IOS 푸시 알림
94+
- 알림 제공자(provider): 알림 요청을 만들어 애플 푸시 알림 서비스로 보내는 주체다.
95+
- 단말 토큰: 알림 요청을 보내는 데 필요한 고유 식별자
96+
- 페이로드: 알림 내용을 담은 JSON 딕셔너리다.
97+
- APNS(Apple Push Notification Service): 애플이 제공하는 원격 서비스다. 푸시 알림을 IOS 장치로 보내는 역할을 담당한다.
98+
- IOS 단말: 푸시 알림을 수신하는 사용자 단말
99+
- 안드로이드 푸시 알림
100+
- IOS와 비슷하되 APNS 대신 FCM(Firebase Cloud Messaging)을 사용한다는 점만 다르다.
101+
- SMS 메시지
102+
- 트윌리오, 넥스모 같은 제 3사업자의 서비스를 많이 이용한다.
103+
- 이메일
104+
- 이메일 서버 구축 및 상용 서비스 이용
105+
106+
### 연락처 정보 수집 절차
107+
108+
알림을 보내려면 모바일 단말 토큰, 전화번호, 이메일 주소 등의 정보가 필요하다.
109+
110+
앱 설치 및 계정 등록 시 API 서버가 정보를 수집해 DB에 저장한다.
111+
112+
### 알림 전송 및 수신 절차
113+
114+
- 1부터 N까지의 서비스: 알림 시스템 서버의 API를 통해 알림을 보낼 서비스들
115+
- 알림 서버
116+
- 알림 전송 API: 스팸 방지를 위해 보통 사내 서비스 또는 인증된 클라이언트만 이용 가능하다.
117+
- 알림 검증: 이메일 주소, 전화번호 등에 대한 기본적 검증을 수행한다.
118+
- 데이터베이스 또는 캐시 질의: 알림에 포함시킬 데이터를 가져오는 기능
119+
- 알림 전송: 알림 데이터를 메시지 큐에 넣는다.
120+
- 캐시: 사용자 정보, 단말 정보, 알림 템플릿 등을 캐시한다.
121+
- 메시지큐: 시스템 컴포넌트 간 의존성을 제거하기 위해 사용한다. 다량의 알림이 전송되어야 하는 경우를 대비한 버퍼 역할도 한다.
122+
- 작업 서버: 메시지 큐에서 전송할 알림을 꺼내서 제3자 서비스로 전달하는 역할
123+
- 제 3자 서비스 및 단말
124+
125+
수신 절차
126+
127+
1. API 호출하여 알림 서버로 알림을 보낸다.
128+
2. 알림 서버는 사용자 정보, 단말 토큰, 알림 설정 같은 메타데이터를 캐시나 데이터베이스에서 가져온다.
129+
3. 알림 서버는 전송할 알림에 맞는 이벤트를 만들어서 해당 이벤트를 위한 큐에 넣는다.
130+
4. 작업 서버는 메시지 큐에서 알림 이벤트를 꺼낸다.
131+
5. 작업 서버는 알림을 제3자 서비스로 보낸다.
132+
6. 제 3자 서비스는 사용자 단말로 알림을 전송한다.
133+
134+
### 상세 설계
135+
136+
- 안정성
137+
- 데이터 손실 방지를 위해 알림 데이터를 데이터베이스(로그 DB)에 보관하고 재시도 매커니즘을 구현해야 한다.
138+
- 알림 중복 전송 방지
139+
- 보내야 할 알림이 도착하면 그 이벤트 ID를 검사하여 이전에 본 적이 있는 이벤트인지 살핀다.
140+
- 알림 템플릿
141+
- 알림 메시지의 유사성을 고려하여 인자나 스타일, 링크를 조정해 알람을 만들어내는 틀을 만든다.
142+
- 알림 설정
143+
- 알림 설정을 상세히 조정할 수 있도록 알림 설정 테이블에 보관된 알림 설정을 보고 특정 알림을 보내기 전 테이블을 확인해서 보내야 한다.
144+
- 전송률 제한
145+
- 한 사용자가 받을 수 있는 알림의 빈도를 제한한다.
146+
- 재시도 방법
147+
- 알림을 재시도 전용 큐에 넣고, 같은 문제가 계속해서 발생하면 개발자에게 통지한다.
148+
- 푸시 알림과 보안
149+
- 인증된, 승인된 클라이언트만 해당 API를 통해 알림을 보낼 수 있도록 고려(appKey, appSecret)
150+
- 큐 모니터링
151+
- 큐의 쌓인 알림 수를 보는 모니터링 구축 → 알림 수가 많을 수록 작업 서버 증설
152+
- 이벤트 추적
153+
- 알림 확인율, 클릭율 등을 추적하는 데이터 분석 서비스 기능 통합

0 commit comments

Comments
 (0)