Skip to content

Commit

Permalink
Merge pull request #32 from cheese10yun/main
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored Apr 11, 2022
2 parents 7cdff43 + 68b3d2e commit e65e9e3
Showing 1 changed file with 170 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
# 17 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…νŠΈ μŠ€νƒ€μΌ

λ§ˆν¬λ‘œμ†Œλ°”μŠ€λŠ” μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œμ νŠΈμ˜ 논리적 섀계 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ‘°ν•œ 도메인 주도 섀계 μ‚¬μƒμ˜ 영ν–₯을 많이 λ°›μ•˜μŠ΅λ‹ˆλ‹€. 특히 λ””μ»€ν”Œλ§ μŠ€νƒ€μΌμ„ λ‚˜νƒ€λ‚΄λŠ” λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ κ°œλ…μ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ— 결정적인 영ν–₯을 λ―Έμ³€μŠ΅λ‹ˆλ‹€.

전톡적인 λͺ¨λ…Έλ¦¬μ‹ μ•„ν‚€ν…μ²˜μ—μ„œλŠ” μˆ˜λ§Žμ€ κ°œλ…μ„ κ³΅μœ ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ 클래슀λ₯Ό λ§Œλ“€μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν–ˆμŠ΅λ‹ˆλ‹€. λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ λ‚΄λΆ€μ—μ„œ μ½”λ“œ, 데이터 μŠ€ν‚€λ§ˆ 같은 내무 μš”μ†Œλ“€μ΄ ν•¨κ»˜ μ—°κ²°λ˜μ–΄ λ™μž‘ν•˜μ§€λ§Œ, λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ μ™ΈλΆ€ μžˆλŠ” 것듀은 μ „ν˜€ μ»€ν”Œλ§λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이둜써 각 μ½˜ν…μŠ€νŠΈλŠ” λ‹€λ₯Έ ꡬ성원을 μˆ˜μš©ν•˜μ§€ μ•Šκ³  μžμ‹ μ΄ ν•„μš”ν•œ κ²ƒλ“€λ§Œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ κ³ λ„μ˜ λ””μ»€ν”Œλ§μ΄ μ•„ν‚€μ²΅νŠΈμ˜ λͺ©ν‘œλΌλ©΄ μž¬μ‚¬μš©λ³΄λ‹€ 쀑볡을 μš°μ„ ν•  κ²ƒμ΄λΉˆλ‹€. λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ μ£Όμš” λͺ©ν‘œλŠ” λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈμ˜ 논리적인 κ°œλ…μ„ 물리적으둜 λͺ¨λΈλ§ν•˜λŠ” κ³ λ„μ˜ λ””μ»€ν”Œλ§μž…λ‹ˆλ‹€.

## ν† ν΄λ‘œμ§€

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-11.jpg)

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 단일 λͺ©μ λ§Œ 가지기 λ•Œλ¬Έμ— μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 기반의 μ„œλΉ„μŠ€ 지ν–₯ 아킀첡터와 같은 λ‹€λ₯Έ λΆ„μ‚° 아킀첡터 보닀 μ„œλΉ„μŠ€ 규λͺ¨κ°€ 훨씬 μž‘μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ 각 μ„œλΉ„μŠ€μ—λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 및 기타 쒅속적인 μ»΄ν¬λ„ŒνŠΈ λ“± μ„œλΉ„μŠ€κ°€ λ…λ¦½μ μœΌλ‘œ μž‘λ™λ˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  것듀이 μ€€λΉ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 기반의 μ„œλΉ„μŠ€ 지ν–₯ μ•„ν‚€μ²΅ν„°μ—μ„œλŠ” λ””λΉ„λŠ” 같은데 μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„λŠ” κ²ƒμœΌλΌκ³  ν•˜κΈ΄ ν•˜λŠ”λ° μ–΄μ°¨ν”Ό μžμ‹ μ˜ μ±…μž„κ³Ό μ—­ν™œμ— λŒ€ν•΄μ„œλ§Œ μ•Œκ³  외뢀에 λŒ€ν•œ 상세합은 λͺ¨λ₯΄λŠ” 것이 핡심이기 λ•Œλ¬Έμ— 크게 λ‹€λ₯΄μ§€ μ•Šλ‹€κ³  λ³Έλ‹€.
>
> 2, 3 μ„œλΉ„μŠ€μ—μ„œλŠ” μ„œλ‘œ 큐 기반으둜 데이터 νŒŒμ΄ν”„ 라인을 κ΅¬μΆ•ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λŠ”λ° 쒋은 μ„€λͺ…인거 κ°™λ‹€.
## λΆ„μ‚°
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λΆ„μ‚° 아킀첡터λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€λŠ” 자체 ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰λ˜λ©°, μ›λž˜ 물리적인 컴퓨터λ₯Ό μ˜λ―Έν•˜κ² μ§€λ§Œ μ΄μ œλŠ” 가상 λ¨Έμ‹ κ³Ό μ»¨ν…Œμ΄λ„ˆλ‘œ λΉ λ₯΄κ²Œ μ§„ν™”ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μˆ˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 관리할 λ•Œμ—λ„ λ„€νŠΈμ›Œν¬ λŒ€μ—¬ν­, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬ 곡간 λ“± μ—¬λŸ¬ 가지 ν˜œνƒμ„ 운영 μΈ‘λ©΄μ—μ„œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 지원해야할 μ• ν”Œλ¦¬μΌ€μ΄ 계속 λŠ˜μ–΄λ‚˜λ©΄ κ²°κ΅­ 일뢀 λ¦¬μ†ŒμŠ€λŠ” 곡유 μΈν”„λΌμ˜ μ œμ•½μ„ 받을 수 밖에 μ—†μŠ΅λ‹ˆλ‹€.

ν΄λΌμš°λ“œ λ¦¬μ†ŒμŠ€μ™€ μ»¨ν…Œμ΄λ„ˆ κΈ°μˆ μ„ ν™œμš©ν•΄ 도메인 레벨, 운영 레벨 λͺ¨λ‘ λ””μ»€ν”Œλ§μ˜ 이점을 λˆ„λ¦΄ 수 있게 λμŠ΅λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> 마이크둜 μ„œλΉ„μŠ€λŠ” k8s같은 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν™˜κ²½μ— μ ν•©ν•˜λ‹€κ³  ν•˜λŠ”κ±° κ°™λ‹€. λ™μ˜ν•˜μ§€λ§Œ μ„œλΉ„μŠ€μ˜ 크기가 κ·Έλ ‡κ²Œ 크지 μ•Šκ³  k8s 인프라에 λŒ€ν•œ ꡬ좕 λ…Έν•˜μš° 및 운영 λ…Έν•˜μš°κ°€ μ—†λ‹€λ©΄ κ·Έλƒ₯ 물리 μ„œλ²„μ—μ„œ λ™μž‘ν•˜λŠ” ν™˜κ²½μ„ ꡬ좕 해도 λ¬΄λ°©ν•˜λ‹€κ³  μƒκ°ν•œλ‹€.
>
> κ²°κ΅­ μ¦μš”ν•œ 것은 μ—­ν™œκ³Ό μ±…μž„μ˜ 뢄리이며, κ·Έ 것을 μœ μ—°ν•˜κ²Œ μ—°κ²°ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ 쑰합이라고 μƒκ°ν•œλ‹€.

## λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ κ·Όλ³Έ 척할은 λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ κ°œλ…μž…λ‹ˆλ‹€. μ„œλΉ„μŠ€λ§ˆλ‹€ λ„λ©”μΈμ΄λ‚˜ μ›Œν¬ν”Œλ‘œμš°λ₯Ό λͺ¨λΈλ§ν•˜λŠ” κ°œλ…μ΄μ΄μ§€μš”. 예λ₯Ό λ“€μ–΄ λͺ¨λ…Έλ¦¬μŠ€ 사고 방식은 Address 같은 곡톡 클래슀λ₯Ό λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 파트의 κ°œλ°œμžκ°€ κ³΅μœ ν•˜λŠ” 것이 λ‹Ήμ—°ν•˜μ§€λ§Œ, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” μ»€ν”Œλ§μ„ 가급적 μ‚Όκ°€ν•˜λ―€λ‘œ 이 아킀첡터 μŠ€νƒ€μΌμ„ κ΅¬μΆ•ν•˜λŠ” μ•„ν‚€μ²΅νŠΈλŠ” μ»€ν”Œλ§λ³΄λ‹€λŠ” 차라리 쀑볡이 λ‚«λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> κ·Έλ ‡κ²Œ μ μ ˆν•œ 예둜 보이지 μ•ŠκΈ΄ ν•œλ‹€. λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈλΌλŠ” 것은 λ¬Έλ§₯(μ„œλΉ„μŠ€μ˜ λ¬Έλ§₯)에 맞게 ν•΄μ„λ˜κ³  κ΄€λ¦¬λ˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•œλ‹€.
>
> μ£Όλ¬Έμ΄λΌλŠ” μ»¨ν…μŠ€νŠΈκ°€ μžˆλ‹€. 일반적으둜 νšŒμ›μ΄ 주문을 ν•˜κΈ° λ•Œλ¬Έμ— 주문자λ₯Ό member 라고 생각할 수 μžˆμ§€λ§Œ, λΉ„νšŒμ› μ£Όλ¬Έ λ“±λ“± μ£Όλ¬Έμ΄λΌλŠ” μ»¨ν…μŠ€νŠΈμ—μ„œλŠ” orderer(주문자)라고 ν•΄μ„ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.
>
> κ·Έλ ‡λ‹€λ©΄ Member 객체λ₯Ό μ€‘λ³΅μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ. 본인의 μ»¨ν…μŠ€νŠΈ 즉 λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈμ— 맞게 해석 ν•˜μ—¬ κ΅¬ν˜„ν•˜λŠ” 것이 더 μ˜¬λ°”λ₯Έ ν•΄μ„μœΌλ‘œ 보인닀. λ¬Όλ‘  κ·Έ κ°œλ…μ΄ λ„ˆλ¬΄ κ°„λ‹¨ν•΄μ„œ 쀑볡 μ½”λ“œ 처럼 λ‚˜μ˜€λŠ” κ²½μš°λ„ μžˆμ§€λ§Œ λ‹¨μˆœνžˆ 쀑볡 이라고만 ν•΄μ„ν•˜λŠ” 건 쒋은 해석은 μ•„λ‹ˆλΌκ³  μƒκ°ν•œλ‹€.
### 세뢄도

μ•„ν‚€μ²΅νŠΈλŠ” λ§ˆμ΄ν¬λ‘œμ†ŒλΉ„μŠ€μ˜ μ•Œλ§žλŠ” 세뢄도λ₯Ό 잘게 μœ„ν—€ κ³ μ‹¬ν•˜λ‹€κ°€ μ’…μ’… μ„œλΉ„μŠ€λ₯Ό λ„ˆλ¬΄ 잘게 λ‚˜λˆ„λŠ” μ‹€μˆ˜λ₯Ό 저지λ₯΄κ³€ ν•©λ‹ˆλ‹€.

### λͺ©μ 
각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ κΈ°λŠ₯적으둜 맀우 μ‘μ§‘λ˜μ–΄ 있고 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λŒ€ν‘œν•˜μ—¬ ν•˜λ‚˜μ˜ 핡심 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 것이 κ°€μž₯ 이상적인 λͺ¨μŠ΅μž…λ‹ˆλ‹€.

### νŠΈλžœμž­μ…˜
μ—¬λŸ¬ μ—”ν‹°ν‹°κ°€ ν•¨κ»˜ κ°œμž…ν•˜μ—¬ μž‘λ™λ˜λŠ” νŠΈλžœμž­μ…˜μ„ μ•„ν‚€ν…νŠΈμ—μ„œ 쒋은 μ„œλΉ„μŠ€ 경계 ν›„λ³΄μž…λ‹ˆλ‹€. λΆ„μ‚° μ•„ν‚€ν…μ²˜μ—μ„œ νŠΈλžœμž­μ…˜μ€ λ¬Έμ œκ°€ 될 μ†Œμ§€κ°€ μžˆμœΌλ―€λ‘œ 그런 문제λ₯Ό 방지할 수 μžˆλ„λ‘ μ„€κ³„ν•˜λŠ” 것이 λ°”λžŒμ§ν•©λ‹ˆλ‹€.

### 데이터 격리

μ•„ν‚€ν…νŠΈ 전체에 데이터λ₯Ό λΆ„μ‚°μ‹œν‚¬ 수 μžˆμ„ 지 κ²°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ λ°μ΄ν„°λ² μ΄μŠ€ λ³΅μ œλ‚˜ μΊμ‹œ 기술둜 정보λ₯Ό λΆ„μ‚°μ‹œν‚€λ“ μ§€, λ­”κ°€ ꡬ체적인 방인이 ν•„μš”ν•˜λ‹€.

> μ½”λ©˜νŠΈ
>
> 사싀 ν•΄λ‹Ή 마이크둜 μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•˜λŠ” κ°œλ°œμžλ“€μ΄ κ·Έ 데이터 격리 λŒ€ν•΄μ„œ κ³ λ―Όν•˜κΈ° λ•Œλ¬Έμ— 이 뢀뢄은 크게 곡감이 κ°€μ§ˆ μ•ŠλŠ”λ‹€.
> μ±… μ΄ˆλ°˜μ—μ„œ λ‚˜μ™”λ˜ μ•„ν‚€ν…νŠΈκ°€ λͺ¨λ“  것을 μ„€κ³„ν•˜λŠ” 사상이 μ—¬κΈ°μ—μ„œλ„ λ‚˜μ˜€λŠ”κ±° 같은데 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…νŠΈλ‘œ κ°€λ©΄ κ²°κ΅­ κ·Έ μ„œλΉ„μŠ€μ— λŒ€ν•œ μ˜€λ„ˆμ‹­μ€ ν•΄λ‹Ή κ°œλ°œμžκ°€ λ˜λŠ”κ²ƒμ΄κ³  κ·Έ κ°œλ°œμžκ°€ μ•„ν‚€ν…νŠΈκ°€ λ˜λŠ” 그림이닀.
## API λ ˆμ΄μ–΄

λͺ¨λ“  λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ€ λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ λ‚΄λΆ€μ—μ„œ μΌμ–΄λ‚˜μ•Ό ν•©λ‹ˆλ‹€.

## 운영 μž¬μ‚¬μš©

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ μ»€ν”Œλ§λ³΄λ‹€ 볡제λ₯Ό μ„ ν˜Έν•œλ‹€κ³  ν–ˆμŠ΅λ‹ˆλ‹€. 그러면 λͺ¨λ‹ˆν„°λ§, λ‘œκΉ…, 회둜 차단기 λ“±μ˜ 운영 관심사와 같이 μ‹€μ œλ‘œ μ»€ν”Œλ§μ΄ 더 μœ λ¦¬ν•œ μ•„ν‚€ν…νŠΈ 뢀뢄은 μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Όν• κΉŒμš”?

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…νŠΈλŠ” 이 두 가지 관심사λ₯Ό λΆ„λ¦¬ν•˜κ³ μž ν•©λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-10.jpg)

각 μ„œλΉ„μŠ€λ§ˆλ‹€ λ³„λ„μ˜ μ»΄ν¬λ„ŒνŠΈμ— 두고, ν•΄λ‹Ή νŒ€μ΄λ‚˜ 곡유 μΈν”„λΌνŒ€μ΄ μ†Œμœ ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. μ‚¬μ΄λ“œμΉ΄ μ»΄ν¬λ„ŒνŠΈλŠ” νŒ€μ΄ μ„œλ‘œ μ»€ν”Œλ§λ˜λ©΄ 더 μœ λ¦¬ν•œ λͺ¨λ“  운영 관심사λ₯Ό 도 맑아 μ²˜λ¦¬ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λͺ¨λ‹ˆν„°λ§ 도ꡬλ₯Ό μ—…κ·Έλ ˆμ΄λ“œν•  λ•Œκ°€ 되면 곡유 μΈν”„λΌνŒ€μ΄ μ‚¬μ΄λ“œμΉ΄λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λŠ” λ°©μ‹μœΌλ‘œ 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” μ‹ κΈ°λŠ₯을 λ°›μ•„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-09.jpg)

> μ½”λ©˜νŠΈ
>
> 이것도 λ™μ˜ν•˜κΈ°κ°€ νž˜λ“€λ‹€. λ‘œκΉ…, λͺ¨λ‹ˆν„°λ§(APM)λ“± 인프라 λ„κ΅¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ— λΉ„μΉ¨νˆ¬μ μΈ λ°©ν–₯으둜 λ°œμ „ ν•΄μ™”κ³ , μ§€κΈˆλ„ κ·Έλ ‡λ‹€.
> μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ λ ˆλ²¨μ— μΉ¨νˆ¬ν•˜λŠ” 것은 μ˜¬λ°”λ₯Έ λ°©ν–₯은 μ•„λ‹ˆλΌκ³  μƒκ°ν•˜λ©° λ§Œμ•½ λͺ¨λ‹ˆν„°λ§ 도ꡬ가 λ³€κ²½λ˜λ©΄μ„œ μ‹œμŠ€ν…œμ΄ λ³€κ²½λ˜λŠ” κ²½μš°μ—λ„ κ·Έ μ—¬νŒŒκ°€ 적게 μ„€κ³„ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
>
> 예λ₯Ό λ“€μ–΄ 인프라 λ ˆλ²¨μ—μ„œ 둜그 μˆ˜μ§‘ 도ꡬλ₯Ό λ³€κ²½ν•œλ‹€κ³  ν•˜λ”λΌλ„ 기쑴에 μ„œλ‘œ μ•½μ†λœ 경둜, νŒ¨ν„΄ 등에 파일 기반으둜 λ‚΄λ €μ£ΌλŠ” 방식이 μ˜€λ‹€λ©΄ 크게 변경될 여지가 μ—†λ‹€.
>
> 무튼 ν•˜κ³  싢은 말의 핡심은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ— μΉ¨νˆ¬ν•˜λŠ” λͺ¨λ‹ˆν„°λ§ μͺ½μ€ μ˜¬λ°”λ₯΄μ§€ μ•Šλ‹€κ³  μƒκ°ν•˜λ©°, 그런 뢀뢄이 없을 μˆ˜λŠ” 뢀뢄도 μžˆλ‹€ 이런 뢀뢄은 μœ„μ—μ„œ 이야기 ν–ˆλ“―μ΄ μ–΄λŠ ν”Œλž«νΌμ„ 쓰더라도 κ·Έ 영ν–₯이 적은 일반적인 μ‹œμŠ€ν…œμ„ μ΄μš©ν•΄μ•Ό ν•œλ‹€.

## ν”„λ‘ νŠΈμ—”λ“œ

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ˜ μœ μ € μΈν„°νŽ˜μ΄μŠ€λŠ” 보톡 두 가지 μŠ€νƒ€μΌλ‘œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-08.jpg)

μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 단일 μœ μ € μΈν„°νŽ˜μ΄μŠ€κ°€ API λ ˆμ΄μ–΄λ₯Ό 톡해 ν˜ΈμΆœν•˜λŠ” λͺ¨λ†€λ‘œμ‹ ν”„λ‘ νŠΈμ—”λ“œ μž…λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-07.jpg)

λ°±μ—”λ“œ μ„œλΉ„μŠ€λ‘œ ν™œμš©ν•˜μ—¬ μœ μ € μΈν„°νŽ˜μ΄μŠ€λ₯Ό 동기적인 μˆ˜μ€€μœΌλ‘œ μ„ΈλΆ„ν™”ν•˜κ³  κ²©λ¦¬ν•©λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> 이런 뢀뢄에 ν•„μš”μ„±μ„ λŠκ»΄λ³Έμ μ€ μ—†μ–΄ λ”±νžˆ μ½”λ©˜νŠΈν• κ²Œ μ—†μŠ΅λ‹ˆλ‹€.
> λͺ¨λ†€λ‘œμ‹ μœ μ € μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ—¬λŸ¬ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜λŠ” μ„œλΉ„μŠ€ κ΅¬ν˜„λ„ 사싀 μ–΄λ €μš΄ 뢀뢄이 μžˆλŠ”λ° 마이크둜 ν”„λ‘ νŠΈμ—”λ“œλΌ?...음

## 톡신
λ™κΈ°λ‘œ 할지, λΉ„λ™κΈ°λ‘œ 할지 톡신 방식을 κ²°μ •ν•΄μ•Όν•©λ‹ˆλ‹€.

ν”„λ‘œν† μ½œ 인지
μ„œλΉ„μŠ€λŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•  λ•Œ μ–΄λ–€ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν• μ§€ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. μ•„ν‚€ν…νŠΈλŠ” μ—¬λŸ¬ μ„œλΉ„μŠ€κ°€ μƒλŒ€λ°©μ„ ν˜ΈμΆœν•˜λŠ” 방식을 ν‘œμ€€ν™” ν•©λ‹ˆλ‹€.

이쒅
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λΆ„μ‚° μ•„ν‚€ν…μ²˜λΌμ„œ 각 μ„œλΉ„μŠ€λ§ˆλ‹€ κ΅¬ν˜„ 기술 μŠ€νƒμ΄ 상이할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄μ’…μ΄λž€, μ„œλΉ„μŠ€ λ§ˆλ‹€ μ‚¬μš©λ˜λŠ” ν”Œλž«νΌμ΄ μ €λ§ˆλ‹€ λ‹€λ₯Έ 폴리그랏 ν™˜κ²½μ„ μ™„λ²½ν•˜κ²Œ μ§€μ›ν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

μƒν˜Έ μš΄μš©μ„±
μ—¬λŸ¬ μ„œλΉ„μŠ€κ°€ μ„œλ‘œ ν˜ΈμΆœν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€. 마이크둜 μ„œλΉ„μŠ€μ—μ„œ νŠΈλžœμž­μ…˜ λ©”μ„œλ“œ ν˜ΈμΆœμ„ ꢌμž₯ν•˜μ§€ μ•Šμ§€λ§Œ, μ–΄μ©ƒκ±°λ‚˜ μ„œλΉ„μŠ€λŠ” λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ 정보λ₯Ό μ£Όκ³  λ°›μœΌλ©΄μ„œ ν˜‘λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

### μ½”λ ˆμ˜€κ·Έλž˜ν”Όμ™€ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜

μ½”λ ˆμ˜€κ·Έλž˜ν”ΌλŠ” 브둜컀 이벀트 기반의 μ•„ν‚€ν…μ²˜μ™€ 톡신 μŠ€νƒ€μΌμ΄ λ™μΌν•©λ‹ˆλ‹€. 즉 이 μ•„ν‚€μ²΅ν„°λŠ” 쀑앙 μ€‘μž¬μžκ°€ λ”°λ‘œ μ—†κ³  λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ 철학에 μΆ©μ‹€ν•©λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-09.jpg)

ν•„μš”ν•œ 정보가 μ™ΈλΆ€ μ„œλΉ„μŠ€μ— μžˆλ‹€λ©΄ κ·Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•„μš”ν•œ 정보λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.


![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-05.jpg)

ν•΄λ‹Ή 일을 λ‹΄λ‹Ήν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€μ–΄ μ€‘μž¬μžκ°€ λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ 데이터λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ–΄λŠ μͺ½μ΄λ“  μ™„λ²½ν•œ 정닡은 μ—†κ³  각각 일당일단이 μžˆμŠ΅λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 방식은 μƒλ‹€νžˆ λ§Žμ€ 뢄석과 톡찰이 이루어진 이후에 λ§Œλ“€μ–΄μ Έμ•Ό ν•œλ‹€κ³  μƒκ°ν•œλ‹€. ν˜„μž¬λŠ” 쀑간 μ„œλΉ„μŠ€ -> μ›μ²œ μ„œλΉ„μŠ€ 2 depthλ₯Ό κ°€μ§€μ§€λ§Œ depthκ°€ λŠ˜μ–΄ λ‚ μˆ˜ 있고, 또 λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό 호좜 ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ μƒκΈΈμˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ•„μ£Ό λͺ…ν™•ν•˜μ§€ μ•Šλ‹€λ©΄ μ½”λ ˆμ˜€κ·Έλž˜ν”Ό λ°©μ‹μœΌλ‘œ κ°œλ°œν•˜κ³  ν•„μš”ν•œ κ²½μš°κ°€ 생기면 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜μœΌλ‘œ λ„˜μ–΄κ°€λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν•œλ‹€.


![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-04.jpg)

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-03.jpg)


### νŠΈλžœμž­μ…˜κ³Ό 사가

λΆ„μ‚° μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ—­μ‹œ λ™μΌν•œ μˆ˜μ€€μ˜ λ””μ»€ν”Œλ§μ΄ ν•„μš”ν•˜λ―€λ‘œ λͺ¨λ†€λ‘œμ‹ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 별 λ¬Έμ œκ°€ μ•„λ‹ˆμ˜€λ˜ μ›μžμ„± λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-02.jpg)

νŠΈλžœμž­μ…˜μ„ μ‘°μ • ν•©λ‹ˆλ‹€. μ€‘μž¬μžλŠ” νŠΈλžœμž­μ…˜μ„ κ΅¬μ„±ν•˜λŠ” 파트λ₯Ό ν•˜λ‚˜μ”© ν˜ΈμΆœν•˜μ—¬ 성곡/μ‹€νŒ¨ μ—¬λΆ€λ₯Ό κΈ°λ‘ν•˜κ³  κ·Έ 결과에 따라 흐름을 μ‘°μ •ν•©λ‹ˆλ‹€. μ–΄λŠ ν•œ νŒŒνŠΈλΌλ„ μ‹€νŒ¨ν•˜λ©΄ μ€‘μž¬μžλŠ” 전체 νŠΈλžœμž­μ…˜ νŒŒνŠΈκ°€ λͺ¨λ‘ μ„±κ³΅ν•˜μ§€ λͺ»ν•˜κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€.


![](https://raw.githubusercontent.com/cheese10yun/TIL/master/assets/101-17-01.jpg)


μ€‘μž¬μžλŠ” μ§€κΈˆκΉŒμ§€ μ„±κ³΅ν•œ λͺ¨λ“  νŠΈλžœμž­μ…˜ νŒŒνŠΈμ—κ²Œ 과거에 μ²˜λ¦¬ν–ˆλ˜ λ‚΄μš©μ„ μ–Έλ‘λΌλŠ” μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€. 이런 μ’…λ₯˜μ˜ νŠΈλžœμž­μ…˜μ„ 쑰정을 보μž₯ νŠΈλžœμž­μ…˜ ν”„λ ˆμžŒμ›Œν¬λΌκ³  ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 여기에 비동기 μš”μ²­μ΄ 끼어듀고, 특히 보λ₯˜λœ νŠΈλžœμž­μ…˜ μƒνƒœμ— 따라 μƒˆλ‘œμš΄ μš”μ²­μ΄ λ“±μž₯ν•˜λ©΄μ„œ 섀계가 λ¬΄μ²™λ³΅μž‘ν•΄ μ§‘λ‹ˆλ‹€. 또 λ„€νŠΈμ›Œν¬ λ ˆλ²¨μ—μ„œλ„ μ‘°μ • νŠΈλž˜ν”½μ΄ κ½€ 많이 λ°œμƒν•©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ μž‘μ—…λ§ˆλ‹€ 두/언두 둜직 κ°œλ°œμ„ ν•˜λŠ” μ‹μœΌλ‘œ 보상 νŠΈλžœμž­μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

> μ½”λ©˜νŠΈ
>
> 맀번 보상 νŠΈλžœμž­μ…˜κΉŒμ§€ APIλ₯Ό κ°œλ°œν•΄μ•Ό ν•˜λŠ” 것이 μž‘μ—…μ–‘μ— λ§Žμ€ 영ν–₯을 미치기 λ•Œλ¬Έμ— 쒋은 λŒ€μ•ˆμ΄λΌκ³ λŠ” 생각듀지 μ•Šμ§€λ§Œ. 이 λ°©λ²•μ™Έμ—λŠ” λ”±νžˆ μ μ ˆν•œ 방법이 μ—†κΈ΄ ν•©λ‹ˆλ‹€.
>
> 또 read timeout, connection timeout이 λ°œμƒν•˜λŠ” 경우 μš”μ²­ν•œ μͺ½μ—μ„œλŠ” μ‹€νŒ¨λ‘œ κ°„μ£Όν•˜κ³  보상 νŠΈλžœμž­μ…˜μ„ 호좜 ν•  수 밖에 μ—†κ³ , κ·Έ μš”μ²­μ΄ μ‹€μ œλ‘œλŠ” 성곡 ν–ˆμ„ κ²½μš°λ„ 염두해야 ν•˜λŠ” 등등에 λŒ€ν•œ μ½”λ“œλ„ ν•„μš”ν•©λ‹ˆλ‹€.
>
> κ°œμΈμ μœΌλ‘œλŠ” APIλ§ˆλ‹€ μ›μžμ„±μ„ 보μž₯ν•˜λŠ” 방법 λ³΄λ‹€λŠ” 주기적으둜 두 μ‹œμŠ€ν…œμ˜ 데이터가 같은지 ν™•μΈν•˜λŠ” 방법이 더 효율적이고 ν˜„μ‹€μ μΈ 방법이라고 μƒκ°ν•©λ‹ˆλ‹€.

0 comments on commit e65e9e3

Please sign in to comment.