2004년 11월 30일 화요일

client-server model

client-server 모델
대학 1학년 때부터 무진장 많이 들어왔고
웹서버, BBS서버 등.. 수없이 많이 쓰고 있었지만
참 여러가지를 성질을 가지고 있는 것 같다.

1. connection 갯수와 복잡도를 줄임
server가 중앙에 있음으로 해서
P2P처럼 connection이 n^2개가 되지 않고
다수의 client와 1개의 server간의 n개의 connection만으로
문제를 해결해 준다.
그래서 server를 통해 client가 서로 자료를 주고 받을 수도 있다.
예) 채팅 서비스
    (물론 IRC 서버인 경우 서버들은 tree구조이지만 외부에서 보는 client에게는
     중앙에 있는 하나의 서버그룹일 뿐이다.)

2. client를 가볍게 만든다.
예) 더미 터미널 - 비싼 server와 접속기능만 가진 client
    웹브라우저 - 서버에서 뭐든 다 구현하고 유저는 달랑 웹브라우저만 있으면 된다.

3. local에서도 client-server는 효과를 발휘한다.
   loading을 줄여서 성능을 향상 시킨다.

   큰 data를 server에 loading해두면 메모리에 계속 올라가 있고
   client는 작은 data를 읽어 server의 큰 data와 processing하고 종료한다.
   매번 큰 data를 loading하는 데 소요되는 시간을 줄여준다.
   데이터가 메모리 용량보다 크더라도 상관없다.
   메모리 space내에만 있다면 OS의 I/O cache, buffer 메카니즘 들에서 알아서
   swap in/out, sync, load on demand 등을 해준다.
   disk와 메모리관리는 OS에게 맡기는 편이 편리하고 효율적이다.

4. client는 stateless하게 만들면 편하고, server는 state를 가지고 있을 수 있다.
   2번에서 말했던 것처럼 client를 간단하게 만드는 잇점이 있다.

헛소리)
어떤 사람들은 batch model에 너무 익숙해서
어떤 부분은 client-server model로 디자인을 바꾸면 더 편리하다는 것을 잊어버리는 것 같기도 하다.
batch model도 물론 단순하지만 client-server가 더 가벼울 때도 있다.
특히 큰 한 덩어리로 처리가 불가능하여 여러 모듈과 여러 서버등으로 나누고
자원을 multiplexing해서 사용하려면 client-server model을 도입해야 한다.

댓글 없음:

댓글 쓰기