Home > Backend Development > πŸ“š[Backend Development] μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λž€?

πŸ“š[Backend Development] μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λž€?
Backend Ddevelopment

β€œπŸ“š[Backend Development] μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λž€?”

βœ…1️⃣ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λž€?

πŸ“Œ1️⃣ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ κ°œλ….

  • μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜κ³  κ΅¬μ„±ν•˜λŠ” ꡬ쑰λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • μ‰½κ²Œ 말해, ν•˜λ‚˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ–΄λ–»κ²Œ κ΅¬μ„±λ˜κ³ , 데이터가 μ–΄λ–»κ²Œ 흐λ₯΄λ©°, μ„±λŠ₯κ³Ό ν™•μž₯성을 μ–΄λ–»κ²Œ 고렀할지 κ²°μ •ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

πŸ“Œ2️⃣ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ μ—­ν• .

  • ν™•μž₯μ„±(Scalability) : μ‚¬μš©μžκ°€ 증가해도 μ„±λŠ₯이 μœ μ§€λ˜λ„λ‘ 섀계
  • κ°€μš©μ„±(Availability) : μž₯μ•  λ°œμƒ μ‹œμ—λ„ μ§€μ†μ μœΌλ‘œ 운영 κ°€λŠ₯ν•˜λ„λ‘ 섀계
  • λ³΄μ•ˆ(Security) : 데이터 보호 및 인증, κΆŒν•œ 관리
  • μœ μ§€λ³΄μˆ˜μ„±(Maintainability) : μ½”λ“œ μˆ˜μ • 및 κΈ°λŠ₯ μΆ”κ°€κ°€ μ‰½κ²Œ κ°€λŠ₯ν•˜λ„λ‘ ꡬ쑰 섀계
  • μ„±λŠ₯(Performance) : λΉ λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ μ΅œμ ν™”

βœ…2️⃣ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ μ£Όμš” ꡬ성 μš”μ†Œ,

  • μ‹œμŠ€ν…œμ€ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬μ„±λ˜λ©°, 각각의 역할이 λ‹€λ¦…λ‹ˆλ‹€.

πŸ“Œ1️⃣ ν΄λΌμ΄μ–ΈνŠΈ(Client)

  • μ‚¬μš©μžκ°€ 직접 μ‘°μž‘ν•˜λŠ” λΆ€λΆ„ (μ›Ή λΈŒλΌμš°μ €, λͺ¨λ°”일 μ•±)
  • μš”μ²­μ„ μ„œλ²„μ— μ „λ‹¬ν•˜κ³  κ²°κ³Όλ₯Ό ν‘œμ‹œν•˜λŠ” μ—­ν• 
  • 예: React, Vue.js, Android, iOS

πŸ“Œ2️⃣ API κ²Œμ΄νŠΈμ›¨μ΄ (API Gateway)

  • ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ‚΄λΆ€ μ„œλΉ„μŠ€λ‘œ λΌμš°νŒ…ν•˜λŠ” μ—­ν• 
  • 인증, λ‘œλ“œ λ°ΈλŸ°μ‹±, μΊμ‹±λ“±μ˜ μ‹œλŠ₯ μˆ˜ν–‰
  • 예: Kong, Nginx, AWS API Gatewat

πŸ“Œ3️⃣ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (Application Server)

  • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” 핡심 μ»΄ν¬λ„ŒνŠΈ
  • REST API λ˜λŠ” GraphQL을 톡해 데이터λ₯Ό 제곡
  • 예: Spring Boot, Node.js, Django, FastAPI

πŸ“Œ4️⃣ λ°μ΄ν„°λ² μ΄μŠ€ (Database)

  • 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•˜λŠ” μ—­ν• 
  • RDBMS (MySQL, PostgreSQL) vs NoSQL (MongoDB, Cassandra)

πŸ“Œ5️⃣ μΊμ‹œ μ„œλ²„ (Cache Server)

  • 자주 μ‚¬μš©λ˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ μ œκ³΅ν•˜λŠ” μ—­ν• 
  • 예: Redis, Memcached

πŸ“Œ6️⃣ λ©”μ‹œμ§€ 큐 (Message Queue, MQ)

  • 비동기 이벀트 처리λ₯Ό μœ„ν•œ μ‹œμŠ€ν…œ
  • 예: Kafka, RabbitMQ, AWS SQS

πŸ“Œ7️⃣ λ‘œλ“œ λ°ΈλŸ°μ„œ (Load Balancer)

  • μš”μ²­μ„ μ—¬λŸ¬ μ„œλ²„λ‘œ λΆ„μ‚°ν•˜μ—¬ λΆ€ν•˜λ₯Ό μ€„μ΄λŠ” μ—­ν• 
  • 예: Nginx, HAProxy, AWS ELB

πŸ“Œ8️⃣ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ (Monitoring System)

  • μ„œλ²„ μƒνƒœ, νŠΈλž˜ν•‘, μž₯μ•  λ°œμƒ 감지
  • 예: Prometheus, Grafana, AWS CloudWatch

βœ…3️⃣ μ£Όμš” μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄

πŸ“Œ1️⃣ Monolithic Architecture (λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜)

πŸ“Œ νŠΉμ§•

  • ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λͺ¨λ“  κΈ°λŠ₯을 ν¬ν•¨ν•˜λŠ” ꡬ쑰
  • λͺ¨λ“  μ½”λ“œκ°€ ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈλ‘œ ꡬ성됨

βœ… μž₯점

  • 개발 초기 λ‹¨κ³„μ—μ„œ κ°„λ‹¨ν•œ ꡬ쑰둜 λΉ λ₯΄κ²Œ 개발 κ°€λŠ₯
  • 배포가 λ‹¨μˆœν•¨

❌ 단점

  • ν•˜λ‚˜μ˜ κΈ°λŠ₯ λ³€κ²½ μ‹œ 전체 μ‹œμŠ€ν…œμ„ λ‹€μ‹œ 배포해야 함
  • νŠΉμ • κΈ°λŠ₯만 ν™•μž₯ν•˜κΈ° μ–΄λ ΅κ³ , νŠΈλž˜ν”½ 증가에 취약함

πŸ“ 예제

  • 전톡적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ (Spring Boot + MySQL)

πŸ“Œ2️⃣ Microservices Architecture (λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜, MSA)

πŸ“Œ νŠΉμ§•

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—¬λŸ¬ 개의 μž‘μ€ μ„œλΉ„μŠ€λ‘œ λΆ„λ¦¬ν•˜μ—¬ 개발
  • 각 μ„œλΉ„μŠ€κ°€ λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯
  • μ„œλΉ„μŠ€ κ°„ 톡신은 API (REST, gRPC) λ˜λŠ” λ©”μ‹œμ§€ 큐(Kafka)둜 이루어짐

βœ… μž₯점

  • κ°œλ³„ μ„œλΉ„μŠ€ ν™•μž₯이 κ°€λŠ₯ν•˜μ—¬ μ„±λŠ₯ μ΅œμ ν™”κ°€ 쉬움
  • νŠΉμ • μ„œλΉ„μŠ€λ§Œ μ—…λ°μ΄νŠΈ κ°€λŠ₯ν•˜μ—¬ μœ μ§€λ³΄μˆ˜κ°€ 쉬움

❌ 단점

  • μ„œλΉ„μŠ€ κ°„ 톡신 λΉ„μš©μ΄ μ¦κ°€ν•˜μ—¬ λ„€νŠΈμ›Œν¬ μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯
  • 각 μ„œλΉ„μŠ€ κ°„ 데이터 일관성 μœ μ§€κ°€ 어렀움

πŸ“ 예제

  • Netflix, Uber, 카카였, ν† μŠ€ 같은 λŒ€κ·œλͺ¨ μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©λ¨

πŸ“Œ3️⃣ Layerd Architecture (κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜)

πŸ“Œ νŠΉμ§•

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 계측(Layer)λ³„λ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•˜λŠ” 방식
  • 일반적으둜 3-Tier λ˜λŠ” 4-Tier ꡬ쑰둜 섀계됨

πŸ“Œ 3-Tier ꡬ쑰

  • 1️⃣ Presentation Layer (ν”„λ ˆμ  ν…Œμ΄μ…˜ 계측) ➞ UI & ν΄λΌμ΄μ–ΈνŠΈ
  • 2️⃣ Application Layer (μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측) ➞ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
  • 3️⃣ Data Layer (데이터 계측) ➞ 데이터 μ €μž₯ 및 쑰회

βœ… μž₯점

  • μ—­ν•  뢄리가 λͺ…ν™•ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±μ΄ 뛰어남
  • μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ ꡬ쑰

❌ 단점

  • λ‹€μΈ΅ ꡬ쑰둜 인해 응닡 속도가 느렀질 수 있음

πŸ“Œ4️⃣ Event-Driven Architecture (이벀트 기반 μ•„ν‚€ν…μ²˜)

πŸ“Œ νŠΉμ§•

  • μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ νŠΉμ • μ„œλΉ„μŠ€μ—μ„œ 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식
  • λ©”μ‹œμ§€ 큐(Kafka, RabbitMQ)λ₯Ό ν™œμš©ν•˜μ—¬ 비동기 처리λ₯Ό 함

βœ… μž₯점

  • 비동기 λ°©μ‹μœΌλ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•  수 μžˆμ–΄ μ„±λŠ₯ μ΅œμ ν™” κ°€λŠ₯
  • 각 μ„œλΉ„μŠ€κ°€ λ…λ¦½μ μœΌλ‘œ μž‘λ™ν•˜μ—¬ μž₯μ•  λ°œμƒ μ‹œ 영ν–₯이 적음

❌ 단점

  • 이벀트 흐름을 μΆ”μ ν•˜κΈ° μ–΄λ €μ›Œ 디버깅이 어렀움
  • λ©”μ‹œμ§€ 지연(latency)이 λ°œμƒν•  수 있음

πŸ“ 예제

  • μ£Όλ¬Έ μ‹œμŠ€ν…œ: 주문이 λ°œμƒν•˜λ©΄ Order Serviceμ—μ„œ Payment Service둜 이벀트 전솑

βœ…4️⃣ ν™•μž₯ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œ 섀계 원칙.

πŸ“Œ1️⃣ Scal-Up vs Scale-Out

  • Scale-Up : μ„œλ²„μ˜ μ„±λŠ₯을 μ—…κ·Έλ ˆμ΄λ“œ (RAM, CPU μΆ”κ°€)
  • Scalce-Out : μ„œλ²„ 개수λ₯Ό 늘렀 λΆ€ν•˜λ₯Ό λΆ„μ‚° (λ‘œλ“œ λ°ΈλŸ°μ„œ ν™œμš©)

πŸ“Œ2️⃣ λ°μ΄ν„°λ² μ΄μŠ€ μ΅œμ ν™”

  • 샀딩(Sharding) : λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—¬λŸ¬ 개둜 λ‚˜λˆ„μ–΄ μ €μž₯
  • λ ˆν”Œλ¦¬μΌ€μ΄μ…˜(Replication) : λ™μΌν•œ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λ³΅μ œν•˜μ—¬ 읽기 μ„±λŠ₯ ν–₯상

πŸ“Œ3️⃣ λ‘œλ“œ λ°ΈλŸ°μ‹± (Load Balancing)

  • Round Robin : μ„œλ²„μ— 순차적으둜 μš”μ²­ 전달
  • Least Connections : ν˜„μž¬ μ ‘μ†μžκ°€ κ°€μž₯ 적은 μ„œλ²„λ‘œ μš”μ²­ 전달

πŸ“Œ4️⃣ μž₯μ•  볡ꡬ (Fault Tolerance)

  • Failover : μž₯μ•  λ°œμƒ μ‹œ λŒ€μ²΄ μ„œλ²„λ‘œ μžλ™ μ „ν™˜
  • Circuit Breaker : 일정 횟수 이상 μ‹€νŒ¨ν•˜λ©΄ μ„œλΉ„μŠ€ 차단

βœ…5️⃣ κ²°λ‘ 

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ μ„±λŠ₯κ³Ό ν™•μž₯μ„±, μœ μ§€λ³΄μˆ˜μ„±μ„ κ²°μ •ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€.

  • μ΄ˆλ°˜μ—λŠ” λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λ‘œ λΉ λ₯΄κ²Œ 개발
  • νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜λ©΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„μΌ€ν…μ²˜λ‘œ ν™•μž₯
  • 비동기 μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ©΄ 이벀트 기반 μ•„ν‚€ν…μ²˜ 도μž