λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ›οΈ Architecture

[가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초] 1μž₯ μ‚¬μš©μž 수의 λ”°λ₯Έ 규λͺ¨ ν™•μž₯μ„±

by GroovyArea 2023. 2. 14.

μž‘λ…„ 10μ›” μ›ν‹°λ“œμ—μ„œ μ§„ν–‰ν•œ λ°±μ—”λ“œ μ˜¨λ³΄λ”© μ±Œλ¦°μ§€μ—μ„œ λ©˜ν† λ‹˜μ΄ μ†ν•˜μ‹  μŠ€ν„°λ””μ—μ„œ 이 책을 λ‹€λ£¨μ…¨λ˜ 것이 κΈ°μ–΅λ‚œλ‹€.

μ‹€μ œλ‘œ λ©˜ν† λ§ ν›„ λ°±μ—”λ“œ κ°œλ°œμžκ°€ 읽어야 ν•  책듀을 μ—¬λŸ¬ 개 μΆ”μ²œν•΄ μ£Όμ…¨λŠ”λ°, κ·Έ 쀑 ν•˜λ‚˜κ°€ 이 책이닀.

 

κ·Έ 책듀을 κΎΈμ€€νžˆ 완독해 λ‚˜κ°€λŠ” 쀑이고, ν™•μ‹€νžˆ λ°±μ—”λ“œ 개발 κ³΅λΆ€λŠ” 책을 ν†΅ν•΄μ„œ κ°„μ ‘ κ²½ν—˜μ„ μŒ“κ±°λ‚˜ 직접 μ μš©ν•˜κΈ°μ— μš©μ΄ν•˜λ‹€κ³  생각이 λ“€μ—ˆλ‹€.

 

νšŒμ‚¬μ— 이 λ„μ„œλ₯Ό μš”μ²­ν–ˆκ³ , 였늘 첫 νŽ˜μ΄μ§€λ₯Ό νŽΌμ³€λ‹€.

 

단일 μ„œλ²„

  • κ°€μž₯ 기초적인 μ„œλ²„ ꡬ성 λ‹¨μœ„
  • 데이터 베이슀 μ„œλ²„λ„ 보톡 1개λ₯Ό λ‘”λ‹€.
    • RDBMS 많이 μ‚¬μš©
    • λΉ„μ •ν˜• λ°μ΄ν„°μ΄κ±°λ‚˜, 직렬화 역직렬화 ν•˜κ±°λ‚˜, λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό μ €μž₯ν•  경우 λΉ„-κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ°”λžŒμ§ν•¨.
  • λͺ¨λ“  νŠΈλž˜ν”½μ„ ν•˜λ‚˜μ˜ μ„œλ²„κ°€ κ°λ‹Ήν•œλ‹€.

 

수직적 규λͺ¨ ν™•μž₯ & μˆ˜ν‰μ  규λͺ¨ ν™•μž₯

  • μŠ€μΌ€μΌ μ—…
    • μ„œλ²„μ— 고사양 μžμ›μ„ μΆ”κ°€ν•˜λŠ” ν–‰μœ„
    • μœ μž…λ˜λŠ” νŠΈλž˜ν”½μ˜ 양이 적을 경우 용이
    • λ‹¨μˆœν•˜λ‹€λŠ” μž₯점
    • ν•œ λŒ€μ˜ μ„œλ²„μ— CPUλ‚˜ λ©”λͺ¨λ¦¬λ₯Ό λ¬΄ν•œλŒ€λ‘œ 증섀 λͺ»ν•œλ‹€λŠ” 단점
    • μž₯μ•  볡ꡬ λ°©μ•ˆμ΄λ‚˜ 닀쀑화 λ°©μ•ˆμ„ μ œμ‹œν•˜μ§€ λͺ»ν•œλ‹€λŠ” 단점
  • μŠ€μΌ€μΌ 아웃
    • μ„œλ²„λ₯Ό μ—¬λŸ¬ λŒ€ μΆ”κ°€ν•˜λŠ” ν–‰μœ„
    • λ‘œλ“œ λ°ΈλŸ°μ„œ 
      • λΆ€ν•˜ λΆ„μ‚° 집합에 μ†ν•œ μ›Ή μ„œλ²„λ“€μ—κ²Œ κ³ λ₯΄κ²Œ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜λŠ” μ—­ν• 
      • ν•˜λ‚˜μ˜ μ„œλ²„κ°€ λ‹€μš΄ 될 경우 λ‹€λ₯Έ μ„œλ²„λ‘œ μš”μ²­μ„ λ‚˜λˆ”. μš°μ•„ν•˜κ²Œ μž₯μ•  λŒ€μ²˜ κ°€λŠ₯.
    • λ°μ΄ν„°λ² μ΄μŠ€ 닀쀑화
      • λ§ˆμŠ€ν„°λŠ” μ“°κΈ°, μŠ¬λ ˆμ΄λΈŒλŠ” 읽기
      • 병렬 처리 λ˜λŠ” 질의 μˆ˜κ°€ λŠ˜μ–΄λ‚˜λ―€λ‘œ μ„±λŠ₯이 μ’‹μŒ
      • μžμ—° μž¬ν•΄ λ“±μ˜ μž¬λ‚œ, μž₯μ•  상황 λŒ€μ²˜ κ°€λŠ₯
      • κ³ κ°€μš©μ„± => μž₯μ•  μ„œλ²„ λŒ€μ‹  λ‹€λ₯Έ μ„œλ²„λ‘œ λŒ€μ²΄ κ°€λŠ₯
        • μ΅œμ‹  데이터가 μ•„λ‹Œ μŠ¬λ ˆμ΄λΈŒλŠ” 볡ꡬ 슀크립트둜 μ΅œμ‹ ν™” κ°€λŠ₯

 

μΊμ‹œ

  • κ°’ λΉ„μ‹Ό μ—°μ‚° κ²°κ³Ό λ˜λŠ” 자주 μ°Έμ‘°λ˜λŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬ μ•ˆμ— 두고, 뒀이은 μš”μ²­μ΄ 빨리 처리될 수 μžˆλ„λ‘ ν•˜λŠ” μ €μž₯μ†Œ
  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 컀λ„₯μ…˜μ— 따라 κ²°μ •λ˜λŠ” μ„œλ²„μ˜ μ„±λŠ₯을 κ°œμ„ 
  • μΊμ‹œν•  λ°μ΄ν„°μ˜ μ’…λ₯˜, 크기, μ•‘μ„ΈμŠ€ νŒ¨ν„΄μ— λ§žλŠ” μΊμ‹œ μ „λž΅μ„ 선택
  • 데이터 갱신보닀 μ°Έμ‘°κ°€ λΉˆλ²ˆν•  경우 κ³ λ € κ°€λŠ₯
  • μ˜μ†μ„± λ°μ΄ν„°μ˜ μ €μž₯은 λ°”λžŒμ§ν•˜μ§€ μ•ŠμŒ
  • 데이터 만료 정책을 μˆ˜λ¦½ν•΄μ•Όν•¨
  • 일관성 μœ μ§€μ— λ§Œμ „μ„ κΈ°ν•΄μ•Ό 함.

 

μ½˜ν…μΈ  전솑 λ„€νŠΈμ›Œν¬ (CDN)

  • 정적 컨텐츠λ₯Ό 전솑할 수 μžˆλŠ” μ§€λ¦¬μ μœΌλ‘œ λΆ„μ‚°λœ μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬
  • 정적 컨텐츠λ₯Ό μΊμ‹œ κ°€λŠ₯함.
  • μ‚¬μš©μžμ—κ²Œ κ°€μž₯ κ°€κΉŒμš΄ CDN μ„œλ²„κ°€ 정적 컨텐츠λ₯Ό 전달 => μ„±λŠ₯ κ°œμ„ μ— μš©μ΄ν•¨.
  • 데이터 전솑 양에 따라 λΉ„μš©μ΄ 청ꡬ됨.
  • μ μ ˆν•œ 만료 μ‹œν•œμ˜ ν•„μš”μ„±
  • CDNκ³Ό μΊμ‹œλ₯Ό 적절히 λ°°μΉ˜ν•˜λ©΄ 더 λ‚˜μ€ μ„±λŠ₯을 보μž₯ν•œλ‹€.

 

λ¬΄μƒνƒœ μ›Ή 계측 (stateless)

  • μˆ˜ν‰μ μœΌλ‘œ ν™•μž₯ν•΄λ³Ό 방법을 κ³ λ €ν•΄λ³΄μž.
  • μ›Ή κ³„μΈ΅μ—μ„œ μƒνƒœ 정보λ₯Ό μ œκ±°ν•˜κΈ° μœ„ν•΄ RDBMS λ‚˜ NOSQL에 λ³΄κ΄€ν•˜κ³  ν•„μš”ν•  λ•Œ κ°€μ Έμ˜¨λ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ›Ή μ„œλ²„λ‘œ http μš”μ²­μ„ ν•  경우, μƒνƒœ 정보가 DB에 λΆ„λ¦¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ, ꡬ쑰가 λ‹¨μˆœν•˜κ³  μ•ˆμ •μ μ΄λ©°, 규λͺ¨ ν™•μž₯이 쉽닀.
  • μ—¬λŸ¬ 데이터 μ„Όν„°λ₯Ό 지원할 경우 μž₯점이 λΆ€κ°λœλ‹€.

 

데이터 μ„Όν„°

  • 같은 리전에 λ‹€λ₯Έ 데이터 μ„Όν„°λ₯Ό μ΄μš©ν•  경우, μž₯μ•  상황을 극볡할 수 μžˆλ‹€.
  • νŠΈλž˜ν”½ 우회, 데이터 동기화, ν…ŒμŠ€νŠΈμ™€ 배포등에 기술적 λ‚œμ œλ₯Ό 극볡해야 ν•œλ‹€.
  • 더 큰 규λͺ¨λ‘œ ν™•μž₯ν•˜κΈ° μœ„ν•΄ μ‹œμŠ€ν…œμ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό 뢄리해야 ν•˜λŠ”λ°, μ΄λ•Œ λ©”μ‹œμ§€ 큐λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

 

λ©”μ‹œμ§€ 큐

  • λ©”μ‹œμ§€μ˜ 무손싀을 보μž₯ν•˜λŠ” 비동기 톡신을 μ§€μ›ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ
  • λ©”μ‹œμ§€ λ²„νΌμ˜ 역할을 μˆ˜ν–‰ν•˜λ©° λΉ„λ™κΈ°μ μœΌλ‘œ μ „μ†‘ν•œλ‹€.
  • λ°œν–‰μžμ™€ ꡬ독, μ†ŒλΉ„μžμ˜ ꡬ쑰
  • μ„œλ²„κ°„ 결합이 λŠμŠ¨ν•΄μ Έμ„œ 규λͺ¨ ν™•μž₯μ„± 보μž₯에 μš©μ΄ν•˜λ‹€.

 

둜그 , λ©”νŠΈλ¦­ 그리고 μžλ™ν™”

  • μ—λŸ¬ 둜그λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.
  • λ©”νŠΈλ¦­μ„ 잘 μˆ˜μ§‘ν•˜λ©΄ 사업 ν˜„ν™©μ— κ΄€λ ¨λœ μœ μš©ν•œ 정보λ₯Ό μ–»κ³  μ‹œμŠ€ν…œμ˜ ν˜„μž¬ μƒνƒœλ₯Ό μ†μ‰½κ²Œ νŒŒμ•… κ°€λŠ₯ν•˜λ‹€.

 

λ°μ΄ν„°λ² μ΄μŠ€μ˜ 규λͺ¨ ν™•μž₯

  • 수직적 ν™•μž₯
    • κ³ μ„±λŠ₯의 μžμ›μ„ μ¦μ„€ν•˜λŠ” 방법
    • μ•„λ§ˆμ‘΄μ˜ AWSκ°€ κ·Έ μ˜ˆμ‹œ
    • SPOF둜 μΈν•œ μœ„ν—˜μ„±μ΄ 크닀
    • λΉ„μš©μ΄ 많이 λ“ λ‹€λŠ” 단점
  • μˆ˜ν‰μ  ν™•μž₯
    • 샀딩을 톡해 κ°€λŠ₯
    • ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μƒ€λ“œλ₯Ό μ •ν•œλ‹€.
    • 샀딩 μ „λž΅μ„ κ΅¬ν˜„ν•  λ•Œ 샀딩킀λ₯Ό μ •ν•˜λŠ” 것이 관건
    • λ°μ΄ν„°μ˜ 재 샀딩, 유λͺ… μΈμ‚¬μ˜ 쑰회 문제, 쑰인과 λΉ„μ •κ·œν™” 같은 이슈λ₯Ό κ·Ήλ³΅ν•˜λŠ” 것이 관건이닀.
λ°˜μ‘ν˜•