-
강의 과제) 로드 밸런싱, 대칭 키 / 공개 키 암호화 방식TIL-sparta 2024. 6. 26. 18:15
> 9차 강의 과제 키워드인 로드 밸런싱과 대칭 키, 공개 키 암호화 방식에 대해 간단하게 정리해보았다.
학습 키워드: load balancing, public key, symmetric key, encryption
1. 로드 밸런싱 (Load Balancing)
1) What is it?:
로드 밸런싱(load balancing)은 말 그대로 부하(load)의 균형을 맞추는 일, 즉 부하 분산을 의미한다. 대규모 멀티 플레이어 게임 서버를 예로 들면, 유저 수가 많아지게 되면 단일 서버가 모든 트래픽을 감당하는 것이 불가능해진다. 이런 상황에서 보통 두 가지 해결 방법이 있는데, 하나는 서버 하드웨어 자체의 성능을 높이는 것(scale up), 그리고 다른 하나는 서버의 개수를 늘리는 것(scale out) 이다. 따라서 로드 밸런싱은 scale out을 선택했을 때 여러 개의 서버에 트래픽을 분산해주는 작업이며, 서버 과부하로부터 발생할 수 있는 여러가지 문제를 미연에 방지하는 작업이라고 할 수 있다. 로드 밸런싱은 크게 동적 로드 밸런싱과 정적 로드 밸런싱으로 나뉜다.
2) Dynamic load balancing:
동적 로드 밸런싱은 서버의 상태를 감안하는 알고리즘을 이용하여 트래픽을 분산하는 방식이다.
- Least Connection: 가장 적은 수의 연결을 관리하고 있는 서버에게 트래픽 처리를 맡기는 방식이다. 모든 서버 인스턴스가 균일한 성능으로 동작하는 것을 가정한다.
- Weighted Least Connection: 위와 동일하지만, 관리자가 각 서버 인스턴스의 처리 성능에 따라 가중치를 부여하여 우선 순위를 매겨주는 작업이 추가된다.
- Weighted Response Time: 각 서버의 반응 시간 평균과 관리되고 있는 연결의 수를 참고하여 트래픽 분배에 가중치를 두도록 설계하는 방식이다.
- Resource-based: 각 서버의 가용 자원 상태에 따라 트래픽을 분배하는 방식이다. 일반적으로 'agent' 역할을 하는 SW가 서버의 CPU 및 메모리 상태를 측정하고, 로드 밸런서가 해당 agent에 쿼리하여 트래픽을 보낼지를 결정한다.
3) Static load balancing:
정적 로드 밸런싱은 실시간 변동 사항이나 변수에 대한 고려 없이 사전에 정해둔 방식으로 부하를 분산하는 방식이다.
- Round Robin: 가장 단순한 방식의 로드 밸런싱 알고리즘으로, 모든 트래픽을 각 서버에 순차적으로 균등하게 분배하는 방식이다. 예를 들어 서버가 3개 있고 6개의 요청이 처리되어야 한다면, 1번 요청이 1번 서버로, 2번 요청이 2번 서버로, 3번 요청이 3번 서버로 분배되고, 다시 1번 서버부터 4번 요청을 분배받아 처리하는 식이다. 어플리케이션 단계에서 구현한다면 서버 목록을 배열로 유지하고 요청 번호를 서버의 크기로 modulo 계산하여 분배하는 형태가 있다.
- Weighted Round Robin: Round Robin 방식에 가중치가 더해진 형태로, 기존 처럼 순차적으로 트래픽을 분배받지만, 가중치 비율에 따라 한 번에 분배받는 요청의 수가 많아진다.
- IP Hash (Hash Scheduling): 트래픽의 송/수신 IP 주소 등에 hash 함수를 적용하여 나온 결과 hash 값에 따라 해당하는 서버에 트래픽을 분배하는 방식이다. 같은 송신지에서 보내진 트래픽이 동일한 서버 인스턴스에서 지속적으로 처리되도록 유도하는 방식이다.
4) Why use it?:앞서 언급했듯이 실제 서비스에서는 하나의 서버가 감당하는 것이 불가능할 정도의 많은 트래픽이 발생하는 상황도 있고, 서버 자체의 문제(하드웨어 결함이나 기타 이슈로 인한 서버 다운 등)로 서비스가 다운 되는 상황 또한 있을 수 있다. 이러한 상황들은 단순히 장비의 성능을 끌어올리는 수직 확장만으로는 해결되지 않기 때문에 수평적 확장을 고려해야 한다. 이렇게 수평적 확장이 이루어졌을 때 모든 유저에게 균일하고 최적화된 유저 경험(UX)을 선사하기 위해서는 여건에 맞는 적절한 로드 밸런싱 작업이 필수라고 할 수 있다.
2. 대칭/비대칭 키 암호화 방식 (Symmetric/Asymmetric Key Cryptography)
1) What is it?:
한참 전 TIL(링크)에서 hashing과 encryption의 차이에 대해 다룬 적이 있다. 해싱은 해싱 함수를 사용하여 치환한 문자열으로 1:N의 매핑 구조를 가져 복호화가 사실상 불가능한 반면, 암호화의 경우 암호화에 사용된 key, 혹은 복호화에 사용해야하는 key를 알면 원본 문자열의 복구가 가능하다고 설명했었다.
또한 그보다 더 전 TIL(링크)에서 HTTPS를 통해 대칭 키와 비대칭 키 암호화 방식의 차이에 대해 가볍게 배워봤는데, 서버가 암호화에 사용했던 key로 복호화를 진행하면 대칭 키 방식, 클라이언트와 공유되는 key로는 암호화만 진행하고 서버의 개인 key로 복호화를 진행하면 비대칭 키 방식이라고 설명한 바 있다.
2) Symmetric Key Encryption:
대칭 키 암호화 방식은 암호화에 사용된 key 값을 알아야만 문서의 복호화가 가능한 방식이다. 서버 뿐만이 아니라 클라이언트도 암호화와 복호화 작업을 해야하기 때문에 클라이언트에서도 동일한 key 값을 알아야하고, 따라서 key를 네트워크를 통해 전송해야하는데, 이런 방식은 key 전송 시 패킷이 탈취되었다면 민감한 정보가 해커에게 그대로 노출된다는 단점이 있다. 하나의 key가 탈취되었을 때 모든 정보를 해독할 수 없게 하려면 유저마다 다른 key 값을 사용하도록 설정해야 하는데, 이렇게 되면 유저 수 증가에 따라 관리해야할 key의 수가 똑같이 많아지기 때문에 관리에 부담이 생기게 된다.
3) Asymmetric Key (Public Key) Encryption:
비대칭 키 (또는 공개 키) 암호화 방식은 최초에 서버에서 한 쌍의 key 페어를 생성한 뒤 암호화에 사용하는 key만 공개하고, 복호화에 사용하는 key를 서버의 개인 key로 유지하는 방식이다. Key 교환이 필수인 대칭 키 방식과는 다르게 복호화용 key가 서버 내부에서만 관리되기 때문에 공개 key를 탈취하더라도 공격자가 알아낼 수 있는 정보가 없다는 장점이 있다. 강력한 보안성 때문에 사용자 인증, 전자 서명 등의 프로세스에 주로 사용된다.
4) Why use it?:비대칭 키가 보안이 뛰어나니 대칭 키는 안쓰겠구나... 라고 생각할 수도 있지만 꼭 그렇지는 않다. 대칭 키는 상대적으로 작은 오버헤드와 빠른 처리 속도라는 장점이 있기 때문에 VPN에서 사용되거나, 파일 혹은 디스크의 암호화에 사용되기도 한다.
--
REFERENCES:
https://www.cloudflare.com/learning/performance/types-of-load-balancing-algorithms/
> Cloudflare, "Types of load balancing algorithms", accessed: 2024-06-26
https://www.geeksforgeeks.org/load-balancing-algorithms/
> GeeksForGeeks, "Load Balancing Algorithms", accessed: 2024-06-26
https://www.geeksforgeeks.org/what-is-asymmetric-encryption/
> GeeksForGeeks, "What is Asymmetric Encryption?", accessed: 2024-06-26
https://www.geeksforgeeks.org/symmetric-key-cryptography/
> GeeksForGeeks, "Symmetric Key Cryptography", accessed: 2024-06-26
https://blog.naver.com/kinxtime/220570224568
> "서버 부하를 균등하게 나누는 로드밸런싱" by KINX, accessed: 2024-06-26
728x90'TIL-sparta' 카테고리의 다른 글
[TIL] 스파르타) Node.js 게임서버 주특기 플러스 3주차 강의 수강 (DB, connection pool, migration) (0) 2024.06.28 강의 과제) 삼각 함수, 역 삼각 함수 (0) 2024.06.27 [TIL] 스파르타) Node.js 게임서버 주특기 플러스 1주차 강의 내용 정리, 2주차 강의 수강 시작 (0) 2024.06.25 [TIL] 스파르타) Node.js 게임서버 주특기 플러스 1주차 강의 수강, 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기 풀이 (MySQL) (0) 2024.06.24 프로그래머스) 그룹별 조건에 맞는 식당 출력하기 풀이 (MySQL) (0) 2024.06.23