본문 바로가기

미국유학/Hello 시스템디자인스터디

5월 20일, bitly

좋아! 이 슬라이드는 HTTP의 **3xx 상태 코드**, 즉 **리다이렉션(redirect)** 관련 응답 코드들을 정리한 거야. 아래에서 각각 설명해줄게.

---

## 🚥 3xx 리다이렉션 상태 코드 요약

### 🔁 301 Moved Permanently

* 클라이언트가 요청한 리소스가 **영구적으로 다른 URL로 이동됨**
* **브라우저나 검색엔진이 캐시**함 (SEO에서도 사용됨)
* **GET** 요청으로 리다이렉션되고, **`Location` 헤더**에 새 URL 명시

### 🔁 302 Found (기존엔 "Moved Temporarily")

* **임시 리다이렉션**
* 요청한 URL이 **일시적으로** 다른 곳으로 이동했음을 알림
* 보통은 \*\*같은 메서드(POST → POST)\*\*로 요청을 이어감
* 자주 쓰이지만 **모호해서 303이나 307이 생김**

### 🔁 303 See Other

* 클라이언트가 **다른 URL로 리다이렉트**되지만, **GET 메서드**로 바꾸어 요청해야 함
* 보통 **POST 후 리다이렉션**할 때 많이 씀

### 🔁 304 Not Modified

* 클라이언트가 보낸 `If-Modified-Since` 또는 `ETag` 헤더 기준으로, **변경된 게 없을 때**
* 브라우저 캐시를 이용하라는 의미
* **리다이렉션은 아니지만 3xx라서 포함됨**

### 🔁 305 Use Proxy (deprecated)

* 요청은 특정 프록시 서버를 통해서만 접근 가능함
* 보안 문제로 **현대 웹에서는 거의 사용 안 함**

### 🔁 306 Switch Proxy

* 현재는 사용되지 않음 (reserved for future use)

### 🔁 307 Temporary Redirect

* 302보다 **명확한 임시 리다이렉션**
* 요청 메서드를 **변경하지 않고 그대로 유지**함 (POST → POST)
* HTTP/1.1부터 명확히 구분

### 🔁 308 Permanent Redirect

* 301과 비슷하지만, **요청 메서드를 그대로 유지**함
* `Location` 헤더를 통해 새 URL 제공
* 301은 POST → GET으로 바뀌는 경우가 있지만, 308은 **POST → POST 유지**

---

## 💡 URL Shortener와 어떤 관련 있어?

* Bitly 같은 단축 URL 시스템에서는 주로 **302 redirect** 사용함.

  > 왜?
  > → \*\*Analytics (조회수 추적)\*\*를 위해 **캐시되지 않는 일시적 리다이렉션**이 좋기 때문이야.
  > → 브라우저나 프록시가 301처럼 캐시하지 않게 하고 싶음.

---

필요하면 각 코드에 맞는 예시 HTTP 응답 포맷도 보여줄 수 있어!

 

 

 

 

 

 

 

 

 

좋아! 이 슬라이드는 \*\*"어떻게 short URL의 유일성(uniqueness)을 보장할 것인가?"\*\*에 대한 설계 전략을 비교해주는 아주 중요한 내용이야. 아래에서 각 솔루션을 쉽게 정리해줄게.👇

---

## 🎯 목표: **short URL이 절대 중복되지 않도록 만드는 방법**

---

## ❌ 1. Bad Solution: Long URL Prefix

> 긴 URL의 앞부분 일부를 따서 short URL을 만드는 방식

* 단점:

  * 고유성이 보장되지 않음
  * 긴 URL 구조가 유사하면 중복될 가능성 있음
  * predictable (보안에 취약)

---

## ✅ 2. Good Solution: Random Number Generator or Hash Function

* 예: 랜덤하게 7자리 base62 문자열 생성 (`abc1234`)
* 해시 방식: `md5(longUrl) → base62 → 앞 6~8자`
* 장점:

  * 간단하고 빠름
* 단점:

  * **충돌 가능성 존재** → DB에서 중복 체크 필요
  * 해시 기반은 동일 longUrl이면 항상 같은 short 나옴

---

## 🌟 3. Great Solution: Unique Counter + Base62 인코딩

* 전역 카운터를 사용해 **중복 없는 숫자 생성**
* 이를 \*\*base62 (0-9, A-Z, a-z)\*\*로 변환 → 짧고 유일한 문자열
* 예: `1000000 → Gho59`

### 🔧 확장성 고려 (Scalable하게 만드는 법)

* **Redis에서 글로벌 카운터 유지** (또는 shard 별 prefix로 분산)
* 예: `GET redis.incr(counter)` → 그걸 base62 인코딩

### ✅ 장점:

* 유일성 보장
* 순차 증가 → 충돌 없음
* 짧고 깔끔한 URL 생성 가능

---

## 🔐 Key Generation Service (KGS)

> 👉 대규모 시스템에서 **충돌 없이** 빠르게 키를 뽑아내기 위한 전용 서비스

### 동작 방식:

* 미리 랜덤한 7자리 문자열들을 생성해서 DB에 저장
* 클라이언트 요청 시 **미사용 키**를 하나 꺼내줌
* 꺼낸 키는 즉시 "사용됨"으로 마킹
* 장애 대비: **스탠바이 KGS 인스턴스 준비** (단일 장애점 방지 - SPOF)

### 장점:

* 완전 랜덤 + 고속 응답
* DB만 보면 되니까 빠르고 충돌 없음

### 단점:

* 키가 선점되어야 하므로 **공간 낭비 가능성** 있음
* 실시간 키 부족 → 키 refill 지연 가능

---

## 🧠 정리

| 방법               | 유일성    | 확장성 | 복잡도  | 비고              |
| ---------------- | ------ | --- | ---- | --------------- |
| Prefix           | ❌      | 🔻  | 🔻   | 비추천             |
| Random / Hash    | ✅(확률적) | 🔼  | 🔼   | 충돌 가능성 존재       |
| Counter + Base62 | ✅      | ✅   | 🔼   | Redis 이용 권장     |
| KGS              | ✅      | ✅   | 🔼🔼 | 운영 부담 있지만 성능 최고 |

---

필요하면 Base62 인코딩 방식, Redis 카운터 샘플 코드, KGS 설계도 같이 그려줄게!

 

 

 

 

 

물론이죠! 🙌
이 슬라이드는 **CAP 이론**과 **읽기/쓰기 부하 특성에 따른 분산 시스템 설계 전략**을 정리한 거예요. 아래에 핵심을 정리해드릴게요.

---

## 🧠 CAP 이론: "Availability > Consistency"

* **CAP Theorem**: 분산 시스템에서는 **Consistency, Availability, Partition tolerance** 중 **두 개만** 보장할 수 있다.
* 여기서는 \*\*가용성(Availability)\*\*을 \*\*일관성(Consistency)\*\*보다 더 중요하게 선택했다는 전략임.

  * 즉, 시스템이 언제든 **응답은 해야 하며**, 다소 일관성이 늦게 맞춰져도 괜찮다 (**eventual consistency**).

---

## ✅ High Availability + Eventual Consistency

* 고가용성을 위해 **Async 복제**를 사용함.

  * 예: Primary → Secondary DB로 비동기 복제
  * 일부는 1개의 Secondary에 대해서만 동기 복제를 설정하기도 함
* 결과적으로 **일관성은 Eventually (결국) 맞춰짐**

---

## 📖 Read Heavy System (읽기 많은 시스템)

> **읽기 요청이 쓰기보다 훨씬 많음 (Read ≫ Write)**

### 아키텍처 구성:

* Primary DB 하나: **쓰기 전용**
* 여러 Secondary DB: **읽기 전용 (replica)**
* 예: 뉴스, 블로그, 제품 카탈로그 등

### 성능 최적화 전략:

* **CDN 사용**: 정적 콘텐츠 캐싱
* **로드 밸런싱**
* **DB 인덱싱**: 검색 최적화
* **데이터 파티셔닝**: 스케일링

---

## ✍️ Write Heavy System (쓰기 많은 시스템)

> **쓰기 요청이 많음 (예: 로깅, 센서 데이터, SNS 게시물 등)**

### 전략:

* **NoSQL DB 사용**: Cassandra, MongoDB처럼 쓰기 처리에 특화된 DB 선택
* **Write Batching & Buffering**: 여러 개의 쓰기를 모아서 한 번에 처리
* **비동기 처리 (Async Processing)**: 쓰기 요청을 큐에 넣고 나중에 처리
* **CQRS**:

  * \*\*Command (쓰기)\*\*와 \*\*Query (읽기)\*\*를 분리
  * 시스템 복잡도 줄이면서 성능 최적화
* **Data Partitioning**: 쓰기 부하 분산
* **Event Sourcing / Streaming / Batching**: Kafka 같은 스트리밍 시스템으로 처리

---

## 🔗 정리하면

| 시스템 유형      | 전략 요약                    |
| ----------- | ------------------------ |
| Read-heavy  | Replica DB, 캐시, CDN, 인덱스 |
| Write-heavy | NoSQL, 배치 처리, CQRS, 파티셔닝 |

---

### ❓왜 이걸 Bitly 설계에서 얘기할까?

Bitly 같은 단축 URL 시스템은 \*\*읽기 많은 시스템 (Read-heavy)\*\*이기 때문에:

* Secondary DB를 활용한 읽기 최적화가 중요
* consistency는 잠깐 늦어져도 괜찮고, redirect는 항상 빨라야 하니까 **Availability 우선** 전략이 유효함

---

필요하면 CQRS 구조 예시, 읽기/쓰기 부하 패턴별 DB 구조도 그려줄게요!

 

 

 

좋아! 😎
이 슬라이드는 **Bitly 같은 단축 URL 서비스에서의 부가적인 요구사항 — Analytics(분석)와 Security(보안)** 를 정리한 거야. 아래에 쉽게 설명해줄게.

---

## ✅ 주제: `CAP (Availability > Consistency)` + 부가기능들

---

## 📊 Analytics (클릭 분석 기능)

> 단축 URL이 몇 번 클릭됐는지, 누가, 언제, 어디서 클릭했는지 추적하는 기능

### 포함 요소:

* **클릭 이벤트 추적**

  * 유저가 단축 URL을 클릭할 때마다 이벤트 기록
* **통계 데이터 제공**

  * 클릭 수
  * Referrer (어디서 왔는지)
  * 브라우저 종류
  * 디바이스 종류 (PC, 모바일 등)

### 기술 예시:

* **Event Stream & Processor** 사용
  → 실시간으로 수많은 클릭 이벤트를 처리

  * 예: Kafka + Flink / Spark Streaming
  * 슬라이드에서는 `Ad clicker aggregator`로 표현됨 (광고 클릭 분석기와 유사한 구조)

---

## 🔒 Security (보안 기능)

> 악의적인 사용자가 **피싱 사이트나 악성코드 사이트로 연결되는 단축 URL을 생성**하는 걸 막아야 함

### 보안 고려 사항:

1. **악성 링크 생성 방지**

   * 사용자 입력 URL에 대해 **안전성 검사**
   * 외부 URL 검사 서비스 (예: Google Safe Browsing API) 활용 가능

2. **DDoS 및 Brute-force 공격 방어**

   * 너무 많은 요청(트래픽)을 보내는 공격 방어
   * 비정상적인 URL 생성 요청 또는 redirect 요청 감지

3. **방어 전략**

   * **Firewall**: 기본 네트워크 보안
   * **Rate Limiting**: 사용자당 요청 횟수 제한 (예: 1분에 10개까지만 허용)
   * **Authentication**: 사용자 인증을 통해 권한 제한 (API Key 또는 OAuth 등)

---

## 🧠 이 슬라이드의 핵심 요약

| 영역        | 설명                                                        |
| --------- | --------------------------------------------------------- |
| Analytics | 사용자 클릭을 실시간으로 분석해서 통계 제공                                  |
| Security  | 악성 링크 차단 + 공격 방어 (DDoS, brute force 등)                    |
| 기술적 키워드   | Kafka, event stream, rate limit, firewall, authentication |

---

필요하면 Analytics 파이프라인 설계 예시나 SafeBrowsing 연동 방식도 보여줄 수 있어!

'미국유학 > Hello 시스템디자인스터디' 카테고리의 다른 글

5월 2일 Web Crawler  (0) 2025.05.03
4.22(화) Ad click aggregator  (0) 2025.04.23
25.04.18 금, Twitter  (0) 2025.04.19