우당탕탕
백엔드 개발에서의 성능 최적화 및 스케일링 전략 본문
오늘은 최근 지인들에게 많은 질문을 받고 있는 성능 최적화와 스케일링 전략에 대해 적어보려고 한다.
성능 최적화와 스케일링은 백엔드 개발에서 핵심적인 요소이다. 서비스의 성공 여부와 직결되는 이슈이기 때문에 꾸준한 최적화와 효율적인 스케일링 전략은 선택이 아닌 필수이다.
성능 최적화 전략
1. 캐싱
캐싱이란 반복적으로 사용되는 데이터나 계산 결과를 메모리에 저장하여 빠르게 액세스 할 수 있도록 하는 기법이다.
데이터베이스에 접근하는 데 시간이 많이 걸리는 작업일 경우, 캐싱을 사용하여 빈번하게 사용되는 데이터를 빠르게 가져올 수 있다. 예시로 Redis와 같은 인메모리 캐시 솔루션을 활용하여 조회 속도를 크게 향상 시킬 수 있다.
캐싱의 종류로는 아래와 같다.
1-1. 지역캐싱 (Local Caching)
지역 캐싱은 서버 내부의 메모리에 캐시 데이터를 저장하는 방식이다. LRU 캐시 등의 알고리즘을 사용하여 메모리 내부에서 캐시 데이터를 관리할 수 있다. 지역 캐싱은 간단하게 구현할 수 있지만, 여러 서버 간의 캐시 데이터 동기화와 관리가 어려운 문제를 가지고 있다.
1-2. 분산캐싱 (Distributed Caching)
분산 캐싱은 여러 서버에 걸쳐 캐시 데이터를 저장하고 관리하는 방식이다. Memcached나 Redis와 같은 인메모리 데이터 저장소를 사용하여 분산 캐싱을 구현할 수 있다. 분산 캐싱은 확장성이 좋고 여러 서버 간의 캐시 동기화가 용이하지만, 설치 및 운영에 추가적인 비용과 복잡성이 발생할 수 있다는 단점이 있다.
2. 데이터베이스 쿼리 최적화
데이터베이스 쿼리를 최적화하면 응답 시간을 단축 할 수 있다. 인덱스를 적절하게 추가하거나, 비효율적인 쿼리를 수정하여 성능을 개선해 나갈 수 있다
3. 비동기 처리와 메시징 큐의 사용
긴 작업 시간이 필요한 처리를 비동기 방식으로 변경하거나, 메시징 큐를 활용하여 병목현상을 줄이고 성능을 개선할 수 있다. RabbitMQ, Kafka 등의 메시징 큐 시스템을 사용하여 서버 간 데이터 전송과 처리를 효율적으로 처리할 수 있다.
스케일링 전략
1. 수평적 스케일링 (Horizontal Scaling) or 스케일아웃 (Scale out)
수평적 스케일링이란 서버 수를 늘리거나 줄이는 방식으로 시스템을 확장하는 것을 말한다. 로드 밸런싱을 사용하여 작업 부하를 여러 서버로 분산시키는 것이다. 이 방식은 리소스 사용률을 높이고, 서버 간의 작업 부하를 고르게 나누어 진행함으로써 성능을 개선할 수 있다.
장점 : 유연성과 확장성이 뛰어나고, 장애 발생 시에도 다른 서버가 대체할 수 있어 안정성이 높다.
단점 : 서버가 늘어날수록 시스템 관리의 복잡성이 높아지고, 데이터 동기화와 같은 문제가 발생할 수 있다.
👩💻 로드 밸런싱이란 ?
- 로드 밸런싱은 여러 서버 간에 트래픽을 효율적으로 분산시키는 기술이다. 이를 통해 시스템의 성능을 최적화하고 장애를 방지할 수 있다.
로드 밸런싱 방법
1. DNS 로드 밸런싱
클라이언트의 요청을 여러 서버의 IP 주소로 분산시키는 방법. DNS 서버가 요청을 수신하면, 여러 서버 중 하나의 IP 주소를 반환한다. 장점으로는 간단하고 구현이 용이하지만 단점으로는 DNS 캐싱으로 인해 실시간 트래픽 조정이 어렵다.
2. 소프트웨어 로드 밸런서
Nginx, HAProxy와 같은 소프트웨어를 사용하여 요청을 여러 서버로 분산하는 방법이다. 다양한 알고리즘(ex: 라운드 로빈, 최소 연결 등)을 통해 로드를 분배할 수 있다. 장점으로는 유연하고 다양한 설정이 가능하지만 단점으로는 추가적인 서버 자원을 요구할 수 있다.
3. 하드웨어 로드 밸런서
전용 하드웨어 장비를 사용하여 트래픽을 분산한다. 보통 대규모 시스템에서 사용되며, 높은 성능과 안정성을 제공한다. 장점으로는 하드웨어에 따라 성능이 뛰어나고, 대량의 트래픽처리가 가능하다. 하지만 비용은.... 매우 비싸다
4. 클라우드 기반 로드 밸런서
AWS와 Azure 같은 클라우드 서비스 업체에서 제공하는 로드 밸런싱 서비스이다. 자동으로 확장할 수 있으며, 관리가 용이하다. 장점으로는 비용이 효율적이며 쉽게 확장이 가능하다. 하지만 클라우드 종속성이 생길 수 있다.
로드 밸런싱은 스케일링에서 효율성을 극대화하는데 중요한 역할을 한다.
2. 수직적 스케일링 (Vertical Scaling) or 스케일업 (Scale up)
하나의 서버의 자원(메모리, CPU 등)을 증가시키는 방식으로 시스템을 확장하는 것이다. 수직적 스케일링은 간단하고 명확한 방법이지만, 하드웨어의 한계 존재와 비용적인 측면에 단점이 있다.
장점 : 관리가 용이하고, 애플리케이션의 복잡성을 줄일 수 있다.
단점 : 하드웨어의 한계가 명확하고, 비용이 많이들 수 있다( 돈찍누.. ) 또한, 단일 장애점(Single Point of Failure)이 발생할 수 있다.
👩💻 단일 장애점 (Single Point of Failure) 이란?
- 단일 장애점(Single Point of Failure, SPOF)은 시스템이나 네트워크에서 특정 구성 요소가 실패할 경우 전체 시스템의 기능이 중단되는 상황을 말합니다. 즉, 하나의 요소가 문제가 생기면 시스템 전체가 영향을 받는 구조이다.
'Tech' 카테고리의 다른 글
[GIT] Git 및 Github 사용가이드 (0) | 2023.06.16 |
---|---|
[MSA] 마이크로서비스 아키텍처(MSA)란 뭘까? (0) | 2023.06.15 |