Backend Ddevelopment
βπ[Backend Development] λκ·λͺ¨ μμ€ν
μλ² μΈνλΌβ
β
1οΈβ£ λκ·λͺ¨ μμ€ν
μλ² μΈνλΌλ?
- λκ·λͺ¨ μμ€ν
μλ² μΈνλΌλ βλ§μ μ¬μ©μκ° λμμ μ μν΄λ μννκ² λμν μ μλλ‘ μ€κ³λ μλ² νκ²½βμ μλ―Έν©λλ€.
- λνμ μΈ μ
-
- ν΄λΌμ°λ μλΉμ€(AWS, GCP, Azure)
-
- λν μΉμ¬μ΄νΈ(λ€μ΄λ², ν μ€, μΉ΄μΉ΄μ€ν‘)
-
- μ¨λΌμΈ κ²μ μλ²(λ² νκ·ΈλΌμ΄λ, LOL)
- etc.
- μ΄λ¬ν μμ€ν
μμλ νΈλν½ μ²λ¦¬, νμ₯μ±(Scalability), κ°μ©μ±(Availability), 볡μλ ₯(Resilience)λ±μ΄ λ§€μ° μ€μν©λλ€.
β
2οΈβ£ λκ·λͺ¨ μμ€ν
μν€ν
μ²μ ν΅μ¬ μμ.
1οΈβ£ λ‘λ λ°Έλ°μ (Load Balancer)
- μλ²μ λ€μ΄μ€λ νΈλν½μ μ¬λ¬ μλ²λ‘ λΆμ°νλ μν μ ν©λλ€.
- λνμ μΈ λ‘λ λ°Έλ°μ
-
- Nginx
-
- HAProxy
-
- 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)
- μμ£Ό μ‘°νλλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ 곡νκΈ° μν΄ μ¬μ©λ©λλ€.
- λνμ μΈ μΊμ κΈ°μ
- μμ: μΈκΈ° κ²μμ¬μ μΊμμ μ μ₯ν΄ DB λΆνλ₯Ό μ€μ
λλ€.
5οΈβ£ λ©μμ§ ν(Message Queue, MQ)
- λΉλκΈ° μ²λ¦¬λ₯Ό μν΄ μ¬μ©λ©λλ€.
- λνμ μΈ λ©μμ§ ν μμ€ν
- μμ: μ μ κ° κΈμ μμ±νλ©΄, MQμ λ©μμ§λ₯Ό 보λ΄κ³ λμ€μ λΉλκΈ°λ‘ μ²λ¦¬ν¨.
6οΈβ£ CDN (Content Delivery Network)
- μ μ μ½ν
μΈ (μ΄λ―Έμ§, λμμ)λ₯Ό μ μΈκ³ μ¬λ¬ μλ²μ λ°°ν¬νμ¬ λΉ λ₯΄κ² μ 곡νλ κΈ°μ .
- λνμ μΈ CDN μλΉμ€
-
- Clouldflare
-
- AWS CloudFront
- μμ: ν΄μΈ μ¬μ©μκ° νκ΅ μλ²μμ μ΄λ―Έμ§ λ€μ΄λ‘λ μ, κ°κΉμ΄ CDN μλ²μμ μ κ³΅ν΄ μλλ₯Ό λμ
λλ€.
7οΈβ£ λͺ¨λν°λ§ & λ‘κΉ
μμ€ν
- μλ² μνλ₯Ό μ§μμ μΌλ‘ 체ν¬νκ³ , μ₯μ λ°μ μ λΉ λ₯΄κ² λμν μ μλλ‘ ν©λλ€.
- λνμ μΈ λͺ¨λν°λ§ λꡬ
-
- Prometheus
-
- Grafana
-
- AWS CloudWatch
- λνμ μΈ λ‘κΉ
λꡬ
-
- ELK Stack (Elasticsearch, Logstach, Kibana)
-
- 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 μ±λ₯ μ΅μ ν, λ©μμ§ ν, μΊμ μμ€ν
κ°μ μμλ₯Ό κΉμ΄ μ΄ν΄νλ κ² μ€μν©λλ€.