본문 바로가기

코딩/CS

서버,클라이언트,호스트,노드

https://m.blog.naver.com/myca11/221369799273

 

서버 클라이언트 뜻

네트워크에서 개념입니다. 다른 의미로 검색하신 것이라면 이왕 오신 거 그냥 가지 마시고 한번 둘러보thㅔ...

blog.naver.com

위 블로그는 네트워크 이론상 유용한 정보가 많으니 잘 활용할 것!

 

아래의 내용은 위의 링크에서 복사한 것이다.

내용이 사라질까 두려워 저장소의 개념으로 복사해왔다


먼저 배경 지식부터 시작하자.

네트워크 주소, 혹은 IP 주소(address)는 네트워크 혹은 이해하기 쉽게 인터넷 공간에서 위치를 찾아갈 수 있는 유일한 값이라고 생각하면 된다.

말 그대로 인터넷 공간 상의 주소다. 인간계에서도 집 주소가 있듯이 그런 주소라고 보면 된다.

본론으로 들어가기 앞서

호스트(Host)는, 네트워크를 이용하기 위해 네트워크에 연결된 컴퓨터 혹은 그 외의 장치(Device)를 의미한다.

지금 집 컴퓨터로 이 글을 보고 있다면 그 컴퓨터는 호스트라고 할 수 있다. 스마트폰으로 검색해서 이 블로그에 들어왔다면 그 스마트폰도 당연히 호스트다.

왜냐하면, 이 두 경우 모두 여러분들께서 인터넷을 '이용'하기 위해서 사용한 장치들이기 때문이다. 즉 여러분을 대신하여 인터넷에 연결돼서, 인터넷 어딘가에 있는 네이버 블로그로부터 지금 보고 있는 글을 받아온 것이다.

아 참, 여기서 '네트워크에 연결됐다'는 것은 네트워크 주소가 할당됐다는 의미를 내포한다. 블로그 글을 보고 있다는 것은 네이버 블로그로부터 관련 데이터들(지금의 경우에는 보고 계신 글)을 받았다는 말이고, 뭔가를 받았다는 것은, 컴이든 스마트폰이든 네트워크 주소를 가지고 있음을 의미한다. 주소가 있어야 편지를 받을 수 있는 것처럼, 네트워크 주소가 있었으니 데이터를 받은 것이다. 네트워크 주소를 어떻게 할당받는지는 여기서는 생략한다. 설명하면 스크롤이 길어진다.

호스트와 서버(Server)의 차이를 알아보기 전에 호스트와 노드(Node)의 차이를 알아보자. 딴 거 보러 가고 싶은 마음은 잠시 접어두자.

노드란, 네트워크 공간 상에 있는 모든 장치라고 보면 된다.

그러므로 컴퓨터로 지금 글을 보고 있든, 스마트폰으로 보고 있든 상관없이, 인터넷상에서 연결돼서 보고 있기 때문에, 컴퓨터나 스마트폰 모두 노드다.

호스트의 뜻을 노드로 표현하면, '네트워크를 이용하기 위해 네트워크 주소가 할당된 노드'이다.

그러므로 모든 호스트는 노드이지만, 모든 노드가 호스트인 것은 아니다. 개념적으로 노드가 호스트를 포함한다고 생각하면 쉽다.

호스트가 아닌 노드의 예로, 모뎀, 허브, 스위치 등등이 있다. 이 장치들은 네트워크를 이용하는 것이 아니라, 네트워크 상에서 호스트끼리 데이터를 주고받을 때, 그 데이터를 전달하는 중간자 역할을 하는 장치들이다. 그래서 이 장치들은 네트워크 상에서 '유일한 값'인 네트워크 주소가 없어도 동작할 수 있다. (필요에 따라서는 네트워크 주소를 부여할 순 있다.) 네트워크 주소가 없는데 어떻게 이런 중간자 장치들에게 데이터가 다다를 수 있는지는 다 방법이 있는데 설명하면 길어지고 그럼 지루하고 어려워서 백버튼 눌러서 나갈 것 같기 때문에 여기선 생략하겠다.

이제 드디어 호스트와 서버의 차이를 살펴볼 차례다.

단칼에 설명하겠다.

서버란, 요청에 응답할 수 있는 호스트를 의미한다.

그러므로 서버도 네트워크 상에서 노드이며, 네트워크를 이용하기 위한 장치이며, 이를 위해 네트워크 주소가 할당된다. 호스트와 노드 관계처럼, 모든 서버는 호스트이지만, 모든 호스트가 서버인 것은 아니다.

정리하면 노드>호스트>서버이다. 

노드에서 서버로 갈 수록 조건이 붙는다.

노드->호스트 : 주소가 할당되어 있어야 한다.

호스트->서버 : 응답할 수 있어야 한다.

 

컴퓨터로든 스마트폰으로든 이 글을 보고 있다면, 컴퓨터나 스마트폰 모두 노드이면서 호스트이지만, 서버는 아니다. 왜냐하면 이 둘은 네이버 블로그에 글을 보내 달라고 요청한 요청자이지 요청에 응답한 존재가 아니기 때문이다. 컴퓨터나 스마트폰은 요청에 응답한 호스트들이 보내준 블로그 글을 받아서 보여줄 뿐이다. 실제로 요청에 응답한 네이버 블로그 서버들은 네트워크 공간 어딘가에 따로 있다. 반복해서 학습하자. 서버란 요청에 응답할 수 있는 호스트를 의미한다.

헷갈리면 안 된다. 만약 어떤 장치가 인터넷상에서 뭔가를 요청하기 위해서, 혹은 반대로 요청에 응답하기 위해서 네트워크에 연결돼 있다면, 두 경우 모두 네트워크를 이용한다는 측면에서 호스트이지만, 요청에 '응답'하는 장치인 경우에만 서버라고 불릴 수 있다.

그렇다면 요청하는 호스트는 뭐라고 불러야 할까?

요청자도 서버처럼 맛깔나는 단어가 있으면 좋겠다.

클라이언트(Client)란, 네트워크 상에서 요청하는 호스트를 의미한다.

그러므로, 네트워크 상에서 요청하는 호스트를 클라이언트, 요청에 응답할 수 있는 호스트를 서버라고 부른다. 컴퓨터와 스마트폰으로 이 글을 보고 있다면 컴퓨터와 스마트폰 모두 클라이언트라 부를 수 있는 것이다.


정리하자.

네트워크 상에서 동작하는 보통의 방식은 요청과 응답의 형태이며, 요청하는 장치를 클라이언트, 요청에 응답할 수 있는 장치를 서버라고 부른다.


C1. 서버와 클라이언트는 한번 정해지면 평생 그렇게 사는 존재라고 생각하면 안 된다. 서버이기도 하지만 동시에 클라이언트일 수도 있다. 클라이언트이지만 동시에 서버일 수도 있다. 예를 들어, 실제 네트워크 환경에서는 서버가 서버를 호출하는 경우도 있는데 이때는 호출한 서버가 클라이언트가 된다. (보통 이런 경우 서버투서버 라고 부른다)

C2. 서버와 호스트를 동의어로 쓰기도 한다. 호스트라는 영어 단어가 가지고 있는 본래의 의미 때문인데, 그때그때 융통성 있게 문맥에 따라 잘 해석하면 될 것이다.

C3. '문어맛'님께 감사드립니다. 문어맛 님의 댓글 덕분에 원글이 조금 더 정확해질 수 있었습니다. 호스트를 '네트워크 상에서 데이터를 주고받는 양 끝단(endpont) 노드'라고도 표현할 수 있는데, 끝단이라는 개념이 일반인 뿐만 아니라 전공자도 처음 접했을 때 이해하기에 어려움이 있을 것 같아서 보다 쉽게 표현해보았습니다.

결국 네트워크 상에서 대부분의 경우에는 요청과 응답의 형태로 데이터가 오고 가는데, 요청하고 응답하는 주체들을 호스트라고 할 수 있겠습니다. :)

 

https://www.youtube.com/channel/UCReNwSTQ1RqDZDnG9Qz_gyg

 

쉬운 코드

 

www.youtube.com