남이 읽는 CS/네트워크

[네트워크 4편] DNS와 로드 밸런싱

배발자 2022. 9. 25.
반응형

 

 

안녕하세요~ 개발자 배씨입니다!!😁😁

오늘은 "[네트워크 4편] DNS와 로드 밸런싱"에 대해서 포스팅을 해보려고 합니다 ㅎㅎ

 

CS 스터디 마지막 블로그 포스팅이니까 열심히 적어보겠습니다~ 

 

 

 

 


DNS

 

일단 DNS가 무엇인지 개념부터 조금 알아볼게요! 

 

여러분들은 웹 사이트에 접속할 때 해당 사이트의 IP 주소를 통해 접속하게 될 거에요

보통 IP 주소는 "225.235.63.221" 이런식으로 10진수 형태로 4 옥텟 규칙에 맞게 나타낸다고 말씀드렸던 거 기억 나시죠..? 

 

기억 안 나시면.. 아래 링크를 통해 IP 주소 체계를 보고 와주세요 ㅎㅎ 아! 보고 오십니다~ 자 그다음에!

 

 

[네트워크 2편] IP 주소 체계

안녕하세요!! 배씨입니다~ 😁😁 오늘 저희가 배울 주제는 꼭 알아야 하는 개념 중에 하나랍니다. 글 구성을 간략하게 잡아봤는데 할 얘기가 너무 많아요...ㅠㅠ 암튼! 상당히 많은 내용을 포스

baebalja.tistory.com

 

 

여러분들은  "225.235.63.221" 같은 IP 주소를 평소에 외우시나요??!

친구들 휴대폰 번호도 안 외우고 다니는데 저런걸 어떻게 외워요.. 요즘엔 제 나이가 몇인지도 깜빡깜빡하는데..ㅎ

 

근데 세상이 좋아져서 친구들 휴대폰 번호를 안외워도 그 친구들의 이름과 휴대폰 번호가 매칭된 전화번호부 서비스가 있기 때문에 친구들 이름만 알아도 전화를 걸 수 있잖아요~  

 

그것처럼 네이버나 구글 그리고 개발자 배씨 같은 멋있는 사이트에 접속을 할 때 네이버는 naver.com , 구글은 google.com, 그리고 baebalja.tistory.com  이런식으로 사람들이 외우기 쉬운 도메인 이름으로 타이핑해서 들어가겠죠 ㅎㅎ

 

출처 : https://sangbeomkim.tistory.com/123

 

 

즉, "도메인"이란! "숫자 형태의 IP 주소를 사람이 기억하기 쉬운 문자로 표현한 주소다!"

위의 그림을 보시면 쉽게 이해되시죠??? 

 

그래그래!!! 도메인은 이제 알겠고 DNS 는 그래서 뭔데 임마!! 

 

아까 예로 들었던 휴대폰 전화번호부처럼 "도메인과 IP 주소를 저장해 놓은 시스템""DNS" 라고 합니다

다시 말해서, DNS는 전 세계의 IP 주소에 대응하는 도메인을 효율적으로 관리하기 위해 개발된 시스템이라는 거죠 :)

 

IP 주소와 도메인을 저장하고 관리하는 컴퓨터나 애플리케이션을 DNS 서버라고 부르고 이 DNS 서버는 IP 주소와 도메인을 저장하고 맵핑하는 일종의 데이터베이스에요ㅎㅎ

 

 

출처 : https://sangbeomkim.tistory.com/123

 

 

위의 그림을 한 번 볼게요 ㅎㅎ

사용자가 구글 도메인  www.google.com 이나 네이버 도메인 naver.com 을 url 창에 입력을 해서 엔터를 누르면 그 엄청 짧은 순간에  DNS 서버에 IP 주소를 물어보고 해당 사이트의 실제 IP 주소를 받아낸 후에 해당 IP 주소로 접속하게 되는거에요~

 

그러면 내 컴퓨터에서 DNS 서버에 찾아가려면 DNS 서버의 IP 주소도 알고 있어야겠죠??

 

 

 

 

보통 ISP 에서 기본적으로 제공하는 DNS 서버의 IP 주소가 내 컴퓨터에 설정되어 있다고 해요! 

ISP가 뭐냐구요?? ㅎㅎ 저번에 다 설명했어요 😥

-> KT, LG U+ 같은 인터넷 접속 서비스 등을 제공하는 회사를 지칭합니다~

 

그래서 내 컴퓨터에서 DNS 서버의 IP 주소를 알고 있답니다 ㅎㅎ 

그래서 위의 그림을 보시면 www.google.com 을 입력을 하게 되면 "182.172.255.180" 의 DNS 서버의 IP 주소에 찾아가서

구글 도메인의 IP 주소를 받아올 수 있는거에요!

 

음.. 그래! DNS 서버에 가서 IP 주소를 받아온다는 것까진 이해됐다면 완벽해요!

그러면 DNS 서버에서는 어떻게 도메인의 주소를 받아와서 리턴해주는 건지 궁금하지 않으신가요??

 

이제 그걸 설명할 거에요 ㅎㅎ 

 

도메인의 계층 구조

 

출처 : https://sangbeomkim.tistory.com/123

 

 

먼저 도메인의 구조를 한 번 볼게요 ㅎㅎ

 

루트 아래로 갈라지는 가지가 보이네요! 보면 국가 코드 도메인 ('kr', 'uk' 등) , 일반 도메인 ('org', 'com' 등) 으로 보이네요 

보면 국가 코드 도메인의 'kr'은 korea 를 뜻하겠죠? com 같은 경우는 등록인의 목적에 따라 사용되는 일반 도메인이라고 부릅니다. 이렇게 루트 바로 아래 도메인을 1단계 도메인이라고 부릅니다! 

 

1단계 도메인의 하위 도메인을 2단계 도메인이라고 하는데 조직의 속성을 구분하는 'co' (영리 기업), 'go' (정부기관), 'ac' (대학)과 같은 도메인이 있습니다. 그래서 대학교 홈페이지 가면 "XX대학교.ac.kr" 이렇게 되어있겠죠?? 

 

그리고 3단계 도메인 조직이나 서비스의 이름을 나타내는 도메인 이름으로 도메인 사용자가 원하는 문자열을 사용할 수 있어요 ㅎㅎ

 

마지막은 컴퓨터의 이름을 나타내는 호스트(Host) 가 위치하게 된답니다! 

 

조금 이해 되시나요?  일단 단계별로 도메인을 분류를 해놨구나! 정도 이해하고 있으면 됩니다. 

좀 더 깊게 들어가봅시다! 

 

 

먼저, 도메인은 도메인 계층 구조를 반영한 네임 서버(네임 서버를 DNS 서버라고도 부릅니다)에 저장, 관리됩니다. 

 

여기서 핵심은 상위 계층의 네임 서버는 하위 계층의 도메인에 대한 정보를 관리하고 하위 계층 네임 서버의 IP 주소를 갖고 있어요!

 

이게 뭔말이냐면, 그림을 보면서 같이 이해해봐요! 일단 저희는 'www.korea.go.kr' 이라는 도메인의 IP 주소를 찾으러 떠날거에요~

 

먼저 DNS 서버에서 루트 네임 서버의 IP 로 가겠죠??

루트 네임 서버에서는 하위 계층인 'kr' 이나 'com'의 정보를 관리하고 'kr' 이나 'com'을 관리하고 있는 네임 서버의 IP 주소가 등록 되어있어요!! 그니까! 하위 계층으로 갈 수 있게 하위 계층의 IP 주소를 알고 있다는 거에요~ 우리는 'www.korea.go.kr' 를 찾으러 가야하니까 'kr'  네임 서버의 IP 주소로 가겠죠 ㅎㅎ

 

그러면 'kr'의 네임 서버에서의 하위 계층인 'co.kr' 또는 'go.kr' 의 정보를 관리하고 있고 해당 네임 서버의 IP 주소가 등록되어 있으니까 다음 단계로 갈 수 있겠죠?? 

 

'go.kr' 의 네임 서버에서는 하위 계층인 korea.go.kr 의 정보를 관리하고 있고 해당 네임 서버의 IP 주소가 등록되어 있으니까 찾을 수 있는 거죠 ㅎㅎ 아시겠나요?  

 

이렇게 DNS 는 전 세계의 수많은 도메인을 효율적으로 저장하고 관리하기 위해서 도메인을 계층화하고 계층의 일부 영역을 네임 서버가 분산 관리하는 시스템으로 설계, 운영되고 있답니다 

 

 

 

제가 지금까지 설명드렸던 내용이 위의 그림으로 정리 되어있네요 ㅎㅎ

그림을 보면서 이해를 해보고 안되면 다시 읽어보고 또 안되면 또 읽어봅니다~ 😋

 

 

 


 

로드 밸런싱

 

전 세계 사람들이 대부분의 정보들을 인터넷을 통해 받아오면서 인터넷의 발달은 데이터 통신을 보다 활발하게 만들어주잖아요?? 😆😆

 

이렇게 수많은 사람들이 인터넷을 사용하게 되면 서버의 트래픽 또한 크게 증가하게 될 거에요 ㅠㅠ

아무리 서버가 성능이 뛰어난다고 해도 동시에 접속한 수많은 사람들의 트래픽을 감당할 수가 없게 된거에요~ 

 

건너 들은 얘기로는 배달의 민족에서 일하는 직원들은 치킨 할인 쿠폰 선착순 지급 하는 날에는 "치킨 DDos" 라는 얘기를 한다고 들었어요. DDos는 누군가가 악의적으로 과도한 트래픽을 발생시켜서 서버 다운 시키는 공격 기법인데 하도 사람들이 치킨 싸게 먹겠다고 정각에 딱 맞춰서 들어오니까 트래픽이 발생해서 우스갯소리로 "치킨 DDos" 라고 한대요 ㅎㅎ

 

이것처럼 증가한 트래픽을 대처할 수 있는 대표적인 방법 Scale-up Scale-out 이 존재합니다 ~

 

저번에 데이터베이스 주제에서 Scale-up 과 Scale-out 키워드에 대해서 언급되었던 것이 기억이 납니다.

여기서도 해당 키워드를 간단하게 설명드릴게요!

 

이미지 출처 : https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903

 

 

위의 그림을 보시면 대충 짐작은 되실거에요~

 

Scale-up서버 자체의 성능을 확장하는 것을 의미합니다~ 그니까 서버를 분산하는게 아니라 서버 하나를 더 큰 데이터를 담을 수 있는 공간으로 확장시킨다는거에요! 

 

Scale-out기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미해요! 

 Scale-out 에서 필요한 것이 바로 로드밸런싱이랍니다 ㅎㅎ

 

여러 대의 서버에 데이터를 저장해 수많은 트래픽을 효과적으로 분산시키는 기술!

그게 바로 "로드 밸런싱" 이랍니다ㅎㅎ

 

 

 

"로드 밸런싱 기술을 제공하는 서비스 또는 장치"로드 밸런서라고 부르고 클라이언트와 네트워크 트래픽이 집중되는 서버들 사이에 위치합니다!! 

 

부하 분산에는 L4 로드 밸런서L7 로드 밸런서가 가장 많이 활용된다고 합니다! 

 

L4 와 L7 이게 뭔말이냐면, 네트워크 통신 시스템은 크게 7개의 계층으로 나뉘잖아요! (OSI 7계층) 

각각의 계층이 L1/L2/../L5/L7 에 해당하는거고 L4 은 4계층, L7 은 7계층을 의미하겠죠??

 

그럼 L4, L7의 로드 밸런서가 많이 활용되는 이유는 또 뭘까요?

L4 로드 밸런서부터 포트(Port) 정보를 바탕으로 로드를 분산하는 것이 가능하기 때문이에요~ 

한 대의 서버에 각기 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드 밸런서 이상을 사용해야한다는 거에요 ㅎㅎ

 

출처 : https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903

 

L4 로드 밸런서네트워크 계층이나 전송 계층의 정보를 바탕으로 로드를 분산해요!  IP 주소나 포트 번호, MAC 주소, 전송 프로토콜에 따라 트래픽을 나누는 것이 가능합니다~

 

L7 로드 밸런서의 경우 애플리케이션 계층에서 로드를 분산하기 때문에 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능해요 ㅎㅎ 쉽게 말해 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능한 거에요!! 위 그림처럼 URL에 따라 부하 부산, HTTP 헤더 쿠키값에 따라 부하 분산 등 클라이언트의 요청을 세분화해서 서버에 전달할 수 있답니다 ;)

 

 

 

로드 밸런싱 알고리즘

 

다음은 로드 밸런싱의 알고리즘은 어떤 것들이 있는지 알아볼게요ㅎㅎ

이제 거의 다 끝났어요! 5가지 정도 특징들만 보구 끝낼게요 😁😁

 

라운드 로빈 방식 

서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식입니다. 

그니까! 첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, 세 번째 요청은 세 번째 서버에 할당한다는거에요 . 

클라이언트의 요청을 순서대로 분배하기 때문에 서버들이 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합해요!

 

가중 라운드 로빈 방식 

각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다. 

주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식이에요. 예를 들어, A라는 서버가 7이라는 가중치를 갖고 B라는 서버가 3이라는 가중치를 갖는다면, 로드밸런서는 라운드 로빈 방식으로 A서버에 7개, B 서버에는 3개의 요청을 전달하는 거에요!

 

최소 연결 방식 

요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분합니다. 

동적인 분산 알고리즘으로 각 서버에 대한 현재 연결 수를 동적으로 카운트할 수 있고, 동적으로 변하는 요청에 대한 부하를 분산시킬 수 있습니다. 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식이에요~ 

 

IP 해시 방식 

클라이언트의 IP 주소를 특정 서버로 매핑해서 요청을 처리하는 방식이에요 

사용자의 IP 를 해싱해서 부하를 분산하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장됩니다. 

경로가 보장되며, 접속자 수가 많을수록 분산 및 효율이 뛰어나요!

 

* 해싱 : 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그러한 함수.

 

최소 응답시간 방식 

서버의 현재 연결 상태와 응답시간을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 할당하는 방식이에요~ 

서버들의 가용한 리소스와 성능, 처리중인 데이터 양 등이 상이할 경우 적합해요! 

 

 

 

 

🤩포스팅 끝!🤩

 

 


 

 

이제 DNS가 왜 필요한지 로드밸런싱이 무엇인지 잘 아시겠나요?? 

 

다음 포스팅은 어떤 주제로 할 지 고민 해봐야겠어요 ㅎㅎ

 

스터디분들 고생많으셨습니다! 

 

감사합니다! 

 

 

반응형

댓글