본문 바로가기

CS 잡지식

클라이언트와 서버에 대한 오해, 그리고 Proxy Pattern과 Decorator Pattern.......

클라이언트( Client )와 서버( Server )라고 하면 개발자들은 보통 서버 컴퓨터를 생각한다.

사실 클라이언트와 서버의 개념은 상당히 넓게 사용된다.

클라이언트는 의뢰인이라는 뜻이고, 서버는 '서비스나 상품을 제공하는 사람이나 물건'을 뜻한다.

따라서 클라이언트와 서버의 기본 개념을 정의하면 클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요

청을 처리하는 것이다.

이 개념을 우리가 익숙한 컴퓨터 네트워크에 도입하면 클라이언트는 웹 브라우저가 되고, 요청을 처리하는 서버는 웹 서버

가 된다

이 개념을 객체에 도입하면, 요청하는 객체는 클라이언트가 되고, 요청을 처리하는 객체는 서버가 된다.

 

직접 호출과 간접 호출(Proxy 객체 사용)

클라이언트와 서버 개념에서 일반적으로 클라이언트가 서버를 직접 호출하고, 처리 결과를 직접 받는다.

이것을 직접 호출이라 한다.

 

그런데 클라이언트가 요청한 결과를 서버에 직접 요청하는 것이 아니라 어떤 대리자를 통해서 대신 간접적으로 서버에 요

할 수 있다.

예를 들어서 내가 직접 마트에서 장을 볼 수도 있지만, 누군가에게 대신 장을 봐달라고 부탁할 수도 있다.

여기서 대신 장을 보는 대리자를 영어로 프록시(Proxy)라 한다.

 

그런데 여기까지 듣고 보면 아무 객체나 프록시가 될 수 있는 것 같다.

객체에서 프록시가 되려면, 클라이언트는 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 조차 몰라야 한다.

쉽게 이야기해서 서버와 프록시는 같은 인터페이스를 사용해야 한다.

그리고 클라이언트가 사용하는 서버 객체를 프록시 객체로 변경해도 클라이언트 코드를 변경하지 않고 동작할 수 있어야

한다

 

Proxy 객체를 사용하는 주요 2가지목적

1. 접근 제어 ( Proxy Pattern을 사용 )

권한에 따른 접근 : 서버로의 접근을 차단

차단 캐싱 : 라면을 이미 마트(서버)에서 집(Proxy 객체)로 가져 옴으로써, 라면을 더 빨리 먹을 수가 있다(실행 속도가 빨라짐)

2. 부가 기능 추가 ( Decorator Pattern을 사용 )

원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다.

예) 요청 값이나, 응답 값을 중간에 변형한다.

예) 실행 시간을 측정해서 추가 로그를 남긴다.