Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240801 로드밸런서 본문

개발Article

[TIL]20240801 로드밸런서

최밤빵 2024. 8. 2. 04:58

결국 로그인기능구현은 해내지 못해서 다른 기능을 맡게되었다..! 해내지못해서 너무 아쉽긴하지만.. 어렵고 아직은 내가 레디스? 라는것도 알지못해서 그냥 할 수 있는 간단한 CRUD를 맡기로 했다. API를 설계하면서 개발일지 소재를 생각하다가 멘토링에서 들었던 로드밸런서에 대해 정리하기로 결정했다! 

🤓로드밸런서(Load Balancer)란?

로드밸런서(Load Balancer)는 여러 서버에 걸쳐 트래픽을 분산하여 웹 애플리케이션의 가용성과 성능을 향상시키는 역할을 하는 네트워크 장치 또는 소프트웨어이다. 로드밸런서는 클라이언트의 요청을 여러 서버(또는 인스턴스)로 분산하여, 서버의 부하를 줄이고 시스템의 안정성을 보장한다.

 

▶ 로드밸런서의 주요 역할

로드밸런서의 역할은 크게 네 가지로 나눌 수 있다:

 

→ 트래픽 분산:

로드밸런서는 클라이언트로부터 들어오는 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 특정 서버에 과도한 부하가 걸리는 것을 방지한다. 이를 통해 서버의 응답 속도가 빨라지고, 애플리케이션의 성능이 최적화된다.

→ 고가용성(High Availability) 및 장애 대응:

로드밸런서는 서버가 장애가 발생하거나 과부하 상태일 때 자동으로 해당 서버로의 트래픽을 다른 정상 서버로 전환하여, 서비스가 중단되지 않도록 한다. 이를 **헬스 체크(Health Check)**라고 하며, 정기적으로 서버의 상태를 모니터링하여 장애에 신속하게 대응한다.

→ 확장성(Scalability):

로드밸런서는 서버를 추가하거나 제거하는 작업을 유연하게 처리할 수 있어, 시스템의 확장성을 지원한다. 이는 애플리케이션이 성장하고 사용자 수가 증가할 때 서버를 쉽게 확장하여 성능을 유지할 수 있게 한다.

→ 보안 강화:

로드밸런서는 보안 기능을 제공하여, 애플리케이션을 보호할 수 있다. SSL 인증서를 적용하여 HTTPS 트래픽을 처리하거나, 방화벽 역할을 수행하여 특정 IP의 접근을 차단하는 등의 보안 정책을 관리할 수 있다.

 

▶ 로드밸런서의 종류

로드밸런서는 다양한 방식으로 분류할 수 있으며, 주요 종류는 다음과 같다:

 

→ 하드웨어 로드밸런서:

전용 하드웨어 장비를 사용하여 트래픽을 분산한다. 높은 성능과 안정성을 제공하지만, 비용이 비싸고 초기 설정이 복잡할 수 있다. 주로 기업의 대규모 데이터센터에서 사용된다.

→ 소프트웨어 로드밸런서:

소프트웨어 기반의 로드밸런서로, 서버나 클라우드 인프라에서 실행된다. Nginx, HAProxy, Apache HTTP Server 등이 대표적이며, 설정이 비교적 쉽고 유연성이 높다. 비용이 저렴하고, 클라우드 환경에서도 많이 사용된다.

→ 클라우드 로드밸런서:

클라우드 서비스 제공자가 관리하는 로드밸런서로, AWS의 Elastic Load Balancer(ELB), Azure의 Azure Load Balancer, Google Cloud의 Cloud Load Balancing 등이 있다. 클라우드 인프라에 최적화되어 있으며, 자동화된 관리 기능과 확장성, 보안 기능을 제공한다.

 

▶로드밸런싱 알고리즘

로드밸런서는 여러 가지 알고리즘을 사용하여 트래픽을 분산한다. 로드밸런싱 알고리즘은 트래픽이 어떤 서버로 전달될지를 결정하는 방식으로, 각 알고리즘은 특정 상황에 맞는 장단점을 가지고 있다.

 

→ 라운드 로빈(Round Robin):

가장 기본적인 로드밸런싱 알고리즘으로, 각 서버에 순서대로 요청을 분산한다. 서버의 처리 능력이나 상태를 고려하지 않기 때문에, 서버들이 유사한 성능을 가질 때 효과적이다.

→ 가중치 라운드 로빈(Weighted Round Robin):

서버마다 가중치를 부여하고, 가중치에 따라 더 많은 요청을 특정 서버로 전달한다. 서버의 성능이 다를 때 적합하며, 성능이 더 좋은 서버에 더 많은 트래픽을 할당할 수 있다.

→ 최소 연결(Least Connections):

현재 활성화된 연결 수가 가장 적은 서버로 트래픽을 전달한다. 각 서버의 부하 상태를 고려하여 분산하므로, 동적으로 변화하는 트래픽을 처리하는 데 효과적이다.

→ IP 해시(IP Hash):

클라이언트의 IP 주소를 해시(Hash)하여 특정 서버로 매핑한다. 이를 통해 동일한 클라이언트의 요청이 항상 같은 서버로 전달되도록 할 수 있어, 세션 유지(Session Persistence)에 유리하다.

→ 반응 시간 기반(Response Time-Based):

서버의 응답 시간을 기준으로, 가장 빠른 응답 시간을 가진 서버로 요청을 분산한다. 이를 통해 트래픽을 효과적으로 분산하고, 응답 속도를 최적화할 수 있다.

→ 동적 서버 부하(Dynamic Server Load):

서버의 CPU 사용률, 메모리 사용량, 네트워크 대역폭 등 현재 부하 상태를 모니터링하고, 부하가 가장 적은 서버로 요청을 분산한다. 이를 통해 서버 자원을 효율적으로 사용할 수 있다.

 

▶ 로드밸런서의 사용 사례

로드밸런서는 다양한 상황에서 사용되며, 대표적인 사용 사례는 다음과 같다:

 

→ 웹 애플리케이션의 트래픽 관리:

웹 서버가 여러 대일 때, 로드밸런서를 사용하여 트래픽을 균등하게 분산하고 서버의 부하를 줄인다. 이를 통해 웹 애플리케이션의 응답 속도를 향상시키고 가용성을 높일 수 있다.

→ 마이크로서비스 아키텍처:

마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 배포되고 실행되므로, 로드밸런서를 통해 각 서비스에 대한 요청을 적절히 분산하여 서비스 간의 부하를 관리할 수 있다.

→ 데이터베이스 트래픽 분산:

읽기 및 쓰기 작업이 분리된 데이터베이스 환경에서는 로드밸런서를 통해 읽기 작업을 여러 대의 읽기 전용 서버로 분산하여 성능을 최적화할 수 있다.

→ 애플리케이션의 장애 대응:

서버 중 하나에 장애가 발생할 경우, 로드밸런서는 트래픽을 자동으로 다른 정상 서버로 전환하여 서비스 가용성을 유지한다.

 

▶로드밸런서 사용 시 주의사항

 

→ 세션 관리:

로드밸런서를 사용하면, 각 요청이 다른 서버로 분산될 수 있다. 이를 해결하기 위해 세션을 특정 서버에 고정하는 세션 지속(Session Persistence) 설정이 필요하거나, 세션을 외부 데이터베이스나 캐시 서버에서 관리하는 방법을 사용해야 한다.

→ 헬스 체크 설정:

로드밸런서는 서버의 상태를 정기적으로 체크하여, 비정상적인 서버를 자동으로 제거해야 한다. 헬스 체크 설정을 적절히 구성하여 장애 대응을 신속하게 처리할 수 있도록 해야 한다.

→ 보안 설정:

로드밸런서에서 SSL/TLS 인증서를 적용하여 HTTPS 트래픽을 처리하고, 방화벽 역할을 수행하여 보안을 강화해야 한다. 특히, 공개 인터넷에 노출된 로드밸런서는 외부 공격에 노출될 수 있으므로, 네트워크 방화벽과 함께 설정하는 것이 중요하다.

→ 성능 모니터링:

로드밸런서의 성능과 서버 부하를 모니터링하여, 병목 현상을 미리 파악하고 서버를 증설하거나 설정을 조정하는 등의 조치를 취해야 한다. 이를 통해 서버 자원을 효율적으로 관리할 수 있다.

→ 로드밸런서의 장애 대비:

로드밸런서 자체가 단일 장애점(Single Point of Failure)이 되지 않도록, 로드밸런서를 이중화하거나 여러 로드밸런서를 클러스터로 구성하여 장애 발생 시에도 가용성을 유지해야 한다.

 

▶ 예시: Nginx를 이용한 간단한 로드밸런서 설정

Nginx는 소프트웨어 로드밸런서로서 사용이 간편하며, 로드밸런싱 기능을 쉽게 설정할 수 있다. 다음은 Nginx를 이용한 로드밸런서 설정의 간단한 예시이다. ( Nginx에 대한 내용은 첨부하려다가 따로 개발일지를 쓰기로 결정했다!) 

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;

        location / {
                proxy_pass http://backend_servers;
        }
    }
}

upstream 블록은 백엔드 서버 그룹을 정의한다. backend1.example.com과 backend2.example.com으로 요청을 분산한다. proxy_pass 디렉티브는 클라이언트 요청을 백엔드 서버로 전달한다.

 

▶ 정리 

로드밸런서의 개념과 역할, 다양한 로드밸런싱 알고리즘, 사용 사례, 그리고 사용 시 주의사항에 대해 정리하면서 로드밸런서는 애플리케이션의 성능 최적화와 고가용성을 보장하는 핵심 기술로, 특히 트래픽이 많은 웹 애플리케이션에서 중요한 역할을 한다는 것을 알게되었다. 시니어 멘토님께서 로드밸런서를 자꾸 언급하시길래 꼭 공부해둬야지 했는데, 지금 우리 팀을 담당하시는 멘토님은 내가 꽂히는 단어를 많이 말씀하시는거같아서 개발일지 소재가 마구마구 생겨나고있다. 한동안은 개발일지 소재에 대해 고민할 걱정이 없어졌다. 

'개발Article' 카테고리의 다른 글

[TIL]20240803 스프링 시큐리티(Spring Security)  (0) 2024.08.03
[TIL]20240802 Filter  (0) 2024.08.02
[TIL]20240731 쿠키와 세션  (0) 2024.08.02
[TIL]20240730 Bcrypt  (0) 2024.07.30
[TIL]20240729 jwtUtil은 순수하다  (0) 2024.07.30