Home > Backend Development > πŸ“š[Backend Development] λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ 인프라

πŸ“š[Backend Development] λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ 인프라
Backend Ddevelopment

β€œπŸ“š[Backend Development] λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ 인프라”

βœ…1️⃣ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ μΈν”„λΌλž€?

  • λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ μΈν”„λΌλŠ” β€œλ§Žμ€ μ‚¬μš©μžκ°€ λ™μ‹œμ— 접속해도 μ›ν™œν•˜κ²Œ λ™μž‘ν•  수 μžˆλ„λ‘ μ„€κ³„λœ μ„œλ²„ ν™˜κ²½β€μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ 예
      1. ν΄λΌμš°λ“œ μ„œλΉ„μŠ€(AWS, GCP, Azure)
      1. λŒ€ν˜• μ›Ήμ‚¬μ΄νŠΈ(넀이버, ν† μŠ€, μΉ΄μΉ΄μ˜€ν†‘)
      1. 온라인 κ²Œμž„ μ„œλ²„(λ² ν‹€κ·ΈλΌμš΄λ“œ, LOL)
    • etc.
  • μ΄λŸ¬ν•œ μ‹œμŠ€ν…œμ—μ„œλŠ” νŠΈλž˜ν”½ 처리, ν™•μž₯μ„±(Scalability), κ°€μš©μ„±(Availability), 볡원λ ₯(Resilience)등이 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

βœ…2️⃣ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ 핡심 μš”μ†Œ.

1️⃣ λ‘œλ“œ λ°ΈλŸ°μ„œ (Load Balancer)

  • μ„œλ²„μ— λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½μ„ μ—¬λŸ¬ μ„œλ²„λ‘œ λΆ„μ‚°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ λ‘œλ“œ λ°ΈλŸ°μ„œ
      1. Nginx
      1. HAProxy
      1. AWS ELB
    • etc.
  • μ˜ˆμ‹œ: μ‚¬μš©μžκ°€ λ§Žμ•„μ§€λ©΄ ν•œ λŒ€μ˜ μ„œλ²„λ§ŒμœΌλ‘œ κ°λ‹Ήν•˜κΈ° μ–΄λ €μš°λ―€λ‘œ μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„μ— μš”μ²­μ„ λΆ„λ°°ν•©λ‹ˆλ‹€.

2️⃣ μ›Ή μ„œλ²„ (Web Server)와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (Application Server)

  • μ›Ή μ„œλ²„(Nginx, Apache) ➞ 정적 파일(HTML, CSS, JS) 제곡.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(Spring Boot, Django, Express) ➞ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μˆ˜ν–‰.
  • μ˜ˆμ‹œ: ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‘œκ·ΈμΈν•˜λ©΄, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ—μ„œ DBλ₯Ό μ‘°νšŒν•΄ μ‚¬μš©μž 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

3️⃣ λ°μ΄ν„°λ² μ΄μŠ€ (Database, DB)

  • 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ‹œμŠ€ν…œ.
  • RDBMS (MySQL, PostgreSQL, Oracle) ➞ κ°•λ ₯ν•œ 데이터 무결성 보μž₯.
  • NoSQL (MongoDB, Redis, Cassandra) ➞ λŒ€λŸ‰μ˜ 데이터 μ²˜λ¦¬μ— 적합.
  • 샀딩(Sharding), λ ˆν”Œλ¦¬μΌ€μ΄μ…˜(Replication)을 ν™œμš©ν•΄ μ„±λŠ₯κ³Ό μ•ˆμ •μ„±μ„ λ†’μž„.

4️⃣ μΊμ‹œ μ‹œμŠ€ν…œ (Cache System)

  • 자주 μ‘°νšŒλ˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ μΊμ‹œ 기술
      1. Redis
      1. Memcached
  • μ˜ˆμ‹œ: 인기 κ²Œμ‹œμŠ¬μ„ μΊμ‹œμ— μ €μž₯ν•΄ DB λΆ€ν•˜λ₯Ό μ€„μž…λ‹ˆλ‹€.

5️⃣ λ©”μ‹œμ§€ 큐(Message Queue, MQ)

  • 비동기 처리λ₯Ό μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ λ©”μ‹œμ§€ 큐 μ‹œμŠ€ν…œ
      1. Kafka
      1. RabbitMQ
      1. AWS SQS
  • μ˜ˆμ‹œ: μœ μ €κ°€ 글을 μž‘μ„±ν•˜λ©΄, MQ에 λ©”μ‹œμ§€λ₯Ό 보내고 λ‚˜μ€‘μ— λΉ„λ™κΈ°λ‘œ μ²˜λ¦¬ν•¨.

6️⃣ CDN (Content Delivery Network)

  • 정적 μ½˜ν…μΈ  (이미지, λ™μ˜μƒ)λ₯Ό μ „ 세계 μ—¬λŸ¬ μ„œλ²„μ— λ°°ν¬ν•˜μ—¬ λΉ λ₯΄κ²Œ μ œκ³΅ν•˜λŠ” 기술.
  • λŒ€ν‘œμ μΈ CDN μ„œλΉ„μŠ€
      1. Clouldflare
      1. AWS CloudFront
  • μ˜ˆμ‹œ: ν•΄μ™Έ μ‚¬μš©μžκ°€ ν•œκ΅­ μ„œλ²„μ—μ„œ 이미지 λ‹€μš΄λ‘œλ“œ μ‹œ, κ°€κΉŒμš΄ CDN μ„œλ²„μ—μ„œ μ œκ³΅ν•΄ 속도λ₯Ό λ†’μž…λ‹ˆλ‹€.

7️⃣ λͺ¨λ‹ˆν„°λ§ & λ‘œκΉ… μ‹œμŠ€ν…œ

  • μ„œλ²„ μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ μ²΄ν¬ν•˜κ³ , μž₯μ•  λ°œμƒ μ‹œ λΉ λ₯΄κ²Œ λŒ€μ‘ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ λͺ¨λ‹ˆν„°λ§ 도ꡬ
      1. Prometheus
      1. Grafana
      1. AWS CloudWatch
  • λŒ€ν‘œμ μΈ λ‘œκΉ… 도ꡬ
      1. ELK Stack (Elasticsearch, Logstach, Kibana)
      1. Fluentd
  • μ˜ˆμ‹œ: CPU μ‚¬μš©λŸ‰μ΄ 80%λ₯Ό μ΄ˆκ³Όν•˜λ©΄ κ²½κ³  μ•Œλ¦Όμ„ λ°œμƒμ‹œμΌœ μž₯μ• λ₯Ό μ˜ˆλ°©ν•©λ‹ˆλ‹€.

βœ…3️⃣ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„€κ³„μ˜ 핡심 κ°œλ…

βœ… ν™•μž₯μ„± (Scalability)

  • μ‹œμŠ€ν…œμ΄ μ‚¬μš©μž 증가에 따라 μ„±λŠ₯ μ €ν•˜ 없이 ν™•μž₯ν•  수 μžˆλŠ” λŠ₯λ ₯
  • μˆ˜ν‰ ν™•μž₯(Scale-Out) : μ„œλ²„λ₯Ό μ—¬λŸ¬ λŒ€ μΆ”κ°€
    • 예: AWS EC2 Auto Scaling
  • 수직 ν™•μž₯(Scale-Up) : μ„œλ²„μ˜ μ„±λŠ₯을 λ†’μ΄λŠ” 방법
    • 예: CPU, RAM μ—…κ·Έλ ˆμ΄λ“œ

βœ… κ°€μš©μ„± (Availability)

  • μ‹œμŠ€ν…œμ΄ μ§€μ†μ μœΌλ‘œ λ™μž‘ν•  수 μžˆλŠ” λŠ₯λ ₯ (99.99% Uptime 보μž₯)
  • μ˜ˆμ‹œ: μž₯μ•  λ°œμƒ μ‹œ, λ‹€λ₯Έ μ„œλ²„κ°€ λŒ€μ‹  μ²˜λ¦¬ν•˜λ„λ‘ Failover 섀계

βœ… 볡원λ ₯ (Resilience)

  • μ‹œμŠ€ν…œμ΄ μž₯μ•  λ°œμƒ ν›„ λΉ λ₯΄κ²Œ λ³΅κ΅¬ν•˜λŠ” λŠ₯λ ₯
  • μ˜ˆμ‹œ: AWS RDS Multi-AZ ꡬ성 ➞ μž₯μ•  λ°œμƒ μ‹œ μžλ™μœΌλ‘œ λŒ€μ²΄ DB둜 μ „ν™˜

βœ… 일관성 (Consistency) vs κ°€μš©μ„± (Availability) vs λΆ„ν•  λ‚΄μ„± (Partition Tolerance)

  • CAP 정리 : λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œλŠ” 일관성 (Consistency), κ°€μš©μ„± (Availability), λΆ„ν•  λ‚΄μ„± (Partition Tolerance) 쀑 두 κ°€μ§€λ§Œ 선택 κ°€λŠ₯
  • μ˜ˆμ‹œ: 은행 μ‹œμŠ€ν…œ ➞ 일관성 (Consistency) μš°μ„ 
  • μ˜ˆμ‹œ: SNS μ„œλΉ„μŠ€ ➞ κ°€μš©μ„± (Availability) μš°μ„ 

βœ… λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ (MSA, Microservice Architecture)

  • ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ μ„œλΉ„μŠ€(λͺ¨λ†€λ¦¬μ‹)λ₯Ό μž‘μ€ μ„œλΉ„μŠ€ μ—¬λŸ¬ 개둜 λΆ„λ¦¬ν•˜λŠ” 방식
  • μž₯점
    • ν™•μž₯μ„± 증가
    • 독립 배포 κΈ°λŠ₯
    • μž₯μ• κ°€ 전체 μ‹œμŠ€ν…œμ— 영ν–₯을 덜 쀌
  • μ˜ˆμ‹œ
    • μ‚¬μš©μž 인증, 결제, μ£Όλ¬Έ, 리뷰 μ„œλΉ„μŠ€λ₯Ό 각각 독립적인 μ„œλΉ„μŠ€λ‘œ λ‚˜λˆ”

βœ…4️⃣ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 사둀

πŸ’Ž μ‡Όν•‘λͺ° (이컀머슀) μ‹œμŠ€ν…œ

  • μ›Ή μ„œλ²„ (Nginx)
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (Spring Boot)
  • DB (MySQL + Redis μΊμ‹œ)
  • λ©”μ‹œμ§€ 큐 (Kafka) ➞ μ£Όλ¬Έ 처리
  • CDN ➞ 이미지 및 정적 λ¦¬μ†ŒμŠ€ 제곡

πŸ’Ž κ²Œμž„ μ„œλ²„ (λ°°ν‹€κ·ΈλΌμš΄λ“œ, LOL)

  • κ²Œμž„ μ„œλ²„ (C++, Java)
  • 맀칭 μ„œλ²„ ➞ μœ μ € 맀칭
  • λž­ν‚Ή μ‹œμŠ€ν…œ (Redis)
  • 둜그 μˆ˜μ§‘ 및 뢄석 (Elasticsearch)

πŸ’Ž 금육 μ„œλΉ„μŠ€ (ν† μŠ€, μΉ΄μΉ΄μ˜€λ±…ν¬)

  • κ°•λ ₯ν•œ λ³΄μ•ˆ 및 νŠΈλžœμž­μ…˜ 무결성
  • CQRS νŒ¨ν„΄ 적용 (읽기와 μ“°κΈ° 뢄리)
  • μ΄μ€‘ν™”λœ DB 및 Failover μ‹œμŠ€ν…œ ꡬ좕

βœ…5️⃣ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 μ‹œ κ³ λ €ν•  점

  • πŸ“Œ νŠΈλž˜ν”½ 급증에 λŒ€λΉ„ν•œ Auto Scaling 섀계
  • πŸ“Œ DB λΆ€ν•˜λ₯Ό 쀄이기 μœ„ν•œ μΊμ‹œ 적용 (Redis, Memcached)
  • πŸ“Œ μž₯μ•  λ°œμƒ λŒ€λΉ„λ₯Ό μœ„ν•œ λ‘œλ“œ λ°ΈλŸ°μ„œ 및 이쀑화 (Failover ꡬ성)
  • πŸ“Œ 비동기 처리λ₯Ό μœ„ν•œ λ©”μ‹œμ§€ 큐 λ„μž… (Kafka, RabbitMQ)
  • πŸ“Œ λΉ λ₯Έ μž₯μ•  탐지λ₯Ό μœ„ν•œ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ ꡬ좕

πŸ’‘ κ²°λ‘ 

  • λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„œλ²„ μΈν”„λΌλŠ” νŠΈλž˜ν”½ λΆ„μ‚°, ν™•μž₯μ„±, μž₯μ•  λŒ€μ‘μ΄ ν•΅μ‹¬μž…λ‹ˆλ‹€.
    • λ°±μ—”λ“œ κ°œλ°œμžλ‘œμ„œ λ‘œλ“œ λ°ΈλŸ°μ‹±, DB μ„±λŠ₯ μ΅œμ ν™”, λ©”μ‹œμ§€ 큐, μΊμ‹œ μ‹œμŠ€ν…œ 같은 μš”μ†Œλ₯Ό 깊이 μ΄ν•΄ν•˜λŠ” 게 μ€‘μš”ν•©λ‹ˆλ‹€.