■ 분산 컴퓨팅이란?
- 화면구성 및 입출력은 클라이언트 PC에서 수행하고, 
  비즈니스로직 및 저장 기능은 여러대의 서버급 PC에서 수행하는 방법이 분산컴퓨팅이다.


■ 분산 컴퓨팅의 모델

1) 2-tier 클라이언트/서버 모델
   분산처리의 초기 형태로서 사용자에게 보여지는 부분인 프리젠테이션 및 각종 계산 처리 작업인 비즈니스로직을 클라이언트에서 담당
   하고 서버는 공유할 데이터를 저장하는 형태였다.
 
    -> 클라이언트 업무증가로 인하여 팻(Fat) 클라이언트형태가 되어, 클라이언트의 성능이 떨어지게 된다.
       즉 클라이언트가 모든 업무를 처리해야되는 구조로서 업무증가량에 따라 성능이 떨어지게 되고,
       클라이언트 수가 많은 경우에는 유지보수에 문제점을 가지고 있다.

2) n-tier 모델
   2-tier 모델을 개선한 모델로, 팻 클라이언트에서의 업무 중 비즈니스 로직을 서버측의 프로그램으로 이동시킨 것이다.
 
    -> 클라이언트의 업무는 단순히 사용자에게 보여지는 부분인 프리젠테이션만 담당하기 때문에 클라이언트의 성능이 좋아지게 된다.
       비즈니스로직을 미들웨어 서버에서 집중 관리함으로써, 변화가 많은 비즈니스 업무에 쉽게 대응할 수 있도록 되어있다.
       즉 클라이언트 프로그램을 수정하지 않아도 비즈니스 로직 부분만 수정하면 되므로 유지 보수가 아주 쉬워지고 확장성이 뛰어나다.

 

◎ 팻 클라이언트(Fat client)
   현재의 일반적인 클라이언트 환경, 즉 자체 CPU와 메모리,DISK, 그래픽카드 등 컴퓨터로서 필요한 모든 자원을 갖춘 클라인언트를 
   팻 클라이언트(Fat client)라고 칭한다.
   팻 클라이언트는 네트워크에 연결되지 않더라도 자체적인 운영의 능력이 있다. 
   바로 현재 우리가 사용중인 PC의 형태라고 보면 된다.

◎ 씬 클라이언트(Thin Client)
   씬 클라이언트(Thin Client)는 팻 클리언트의 반대이다.
   최소한의 CPU 파워와 램 용량만을 갖고 있으면 되고 HDD와 복잡한 I/O는 굳이 필요없고 중앙 서버에 네트워크로 연결되지 않고서
   운영 할 수 없다.즉, 독자적인 운영이 불가능하다.

 

■ 분산 컴포넌트 기반의 컴퓨팅

 (1) 컴포넌트의 개념
     컴포넌트란 하나의 객체 또는 여러개의 객체로 구성된 재사용 가능한 소프트웨어 단위를 말한다.
     대게 컴포넌트는 객체와 같은 의미로 사용되지만, 여러개의 객체로 구성될수 있다는 점에서 객체보다는 큰 단위를 말한다.

     컴포넌트는 속성과 메소드를 가지고 있어, 프로그램의 소스를 변경하지 않고 속성을 변경해서 개발자의 의도에 맞게 다양한 용도로 사용된다. 
     객체지향 프로그램에서 한 개의 응용 프로그램은 여러개의 컴포넌트들로 구성된다.
     응용프로그램을 개발한다는 것은 재사용 가능한 컴포넌트들을 조합하는 과정이라고 생각해도 크게 잘못된 것이 아니다.

 (2) 컴포넌트의 종류
     1) 비주얼 컴포넌트 (Visual Comonent)
     눈으로 볼수 있는 GUI(Graphic User Interface)를 가지고 있는 컴포넌트를 말한다.
     비주얼 컴포넌트는 주로 클라이언트 Windows 응용프로그램 제작에 사용 된다.
     예) 버튼, 체크박스, 콤보박스

     2) 넌 비주얼 컴포넌트(Non Visual Component)
     GUI를 가지지 않고 응용 프로그램 내부적으로 재사용 가능한 컴포넌트를 말한다.
     클라이언트 응용프로그램뿐만 아니라, 주로 비즈니스 로직을 담당하는 서버쪽에서 많이 사용된다.

     서버쪽에서 주로 사용하는 넌 비주얼 컴포넌트들은 사용 목적에 따라 다시 구분된다.
     - 웹 컴포넌트 : JSP, Servlet 
       웹 컴포넌트는 웹서버 상에서 컨테이너에 의해 실행되는 컴포넌트를 말한다.
       웹 컴포넌트는 주로 HTTP 클라이언트 요청을 처리하고 실행결과를 응답 HTTP 메시지로 구성하여 클라인트로 보내준다.

     - 비즈니스 컴포넌트: BEAN, EJB(Enterprise Java Bean)
       여러가지 계산 처리 작업에 해당하는 비즈니스 업무를 소프트웨어로 구현한 컴포넌트를 말한다.
       대표적인 비즈니스 컴포넌트는 JSP에서의 BEAN, EJB(Enterprise Java Bean)를 들수 있다.
       비즈니스 컴포넌트는 주로 비즈니스 로직을 가지고 있는 미들웨어에서 사용된다.
       비즈니스 컴포넌트를 사용하는 대상은 클라이언트 응용 프로그램일 수도 있고, 웹 컴포넌트 일 수도 있다.


    비즈니스 컴포넌트가 존재하는 곳과 사용되는 곳이 원격으로 떨어져 있는 경우 이러한 비즈니스 컴포넌트를 
    원격 컴포넌트 또는 원격 객체라고 한다.
    원격 컴포넌트들로 이루어진 프로그램 실행 환경을 분산 컴포넌트 기반의 컴퓨팅이라고 부른다.

 


■ 웹서비스의 탄생

 (1) 기존 분산 컴퓨팅 프로토콜의 문제점
     컴포넌트 기반의 분산 컴퓨팅에 사용되는 대표적인 프로토콜로서는 
     OMG(Object management Group)의 CORBA(Common Object Request Broker Architecture) 표준 프로토콜인 IIOP와 
     마이크로소프트의 DCOM(Distributed Component Object Model), 그리고 썬의 RMI(Remote Method Invocation) 프로토콜이 있다.

    이러한 프로토콜을 사용해서 클라이언트 응용프로그램 또는 웹 컴포넌트는 다른 서버에 존재하는 원격 객체의 매소드를 호출할 수 있다.
    이것을 RPC(Remote Procedure Call)이라고 부른다.
 
    공통점 : 
    이들 프로토콜의 공통점은 연결지향(connection - oriented)이라는 것이다.
    클라인언트는 우선 서버와 연결을 만들고, 연결된 상태에서 서버쪽 원격 객체의 매소드를 실행해 달라고 요청한다.
    연결된 상태에서 서버는 클라이언트의 요청을 기다리고 있다가 요청이 들어오면 해당 원격 객체의 메소드를 실행시켜 결과를 다시 보내준다.

    이런 연결 지향적인 프로그래밍 모델은 대략 네가지 문제점을 가지고 있다.
    1) 연결된 상태에서 클라이언트 또는 서버의 갑작스런 연결 끊김이 발생했을 경우에 적절히 대응하지 못한다는 것
    2) 수천개의 클라이언트가 서버로 연결되어 있는 경우, 이미 비 활동 중인 클라이언트로 인해 서버쪽의 귀중한 자원이 낭비될수 도 있다.
    3) 연결지향적인 프로토콜은 대부분 방화벽을 통과하지 못한다는 것이다.
    4) 프로토콜의 구조가 모두 다르기 때문에 같이 사용하기힘들고, 프로토콜 자체가 복잡하다.

    1번 같은 경우에는 연결이 끊겼을 경우 다시연결해서 사용할 수는 있지만, 이전에 상태정보는 모두 잃게 된다는 것이 문제이다.
    2번의 귀중한 자원이란 서버쪽 메모리나 연결이 될수 있다.
    3번은 다시 말해서 보안이 강화된 인터넷상에서 컴포넌트기반의 분산 컴퓨팅이 어렵다는 것이다.
    4번은 위에서 언급한 프로토콜들 간에 호환성이 없기 때문에 같은 프로토콜을 사용하는 클라이언트와 서버간의 통신만 가능하다.

    즉 RMI를 사용하는 클라이언트에서는 RMI를 지원하는 서버 쪽 객체의 메소드만 호출이 가능하다는 말이다. CORBA, DCOM도 마찬가지다.

 

    --> 이들 프로토콜을 통합 시키는 방법에 대해서는 많은 시도가 있었지만, 널리 사용되지는 못했다.
        왜냐하면 처음부터 같은 프로토콜 환경으로 시스템을 설계하기 때문에 크게 문제가 되지 않았다.
        하지만!!!!!! 
        비즈니스 사업 규모가 커지고, 기업 간의 전자상거래가 활발해짐에 따라 서로 다른 시스템간의 연동은 불가피하게 되었다.
        그래서 적은 비용으로 다른 시스템을 통합시키는 새로운 분산 컴포넌트 기반의 컴퓨팅 기술이 요구 되기 시작했고 그결과!!
        웹 서비스 기술이 탄생한 것이다.

 

 (2) 웹서비스란 무엇인가?

    1)  IBM에서 정의하는 웹서비스
        웹서비스는 표준화된 XML 메세징을 통하여 접근 가능한 네트워크 명령들의 집합을 기술한 인터페이스이다.
        웹서비스는 특정 작업이나 이들의 집합을 수행한다.
        웹서비스는 메시지 포맷, 전송 프로토코르 접속URL등의 서비스를 위한 필요요건들을 기술한 서비스 명세서인 표준 형식의XML을 통하여 표현된다.
        인터페이스의 특징은 서비스 구현의 세부 사항을 숨김으로써, 서비스가 구현된 하드웨어나 소프트웨어에 독립적이고, 
        구현된 프로그래밍 언어에 독립적으로 사용될 수 있다는 것이다. 
        웹서비스는 복잡한 비즈니스 처리를 위하여 단독으로 또는 다른 웹 서비스와 결합하여 사용할 수도 있다.

    2)  Microsoft에서 정의하는 웹서비스
        웹서비스는 다른 응용프로그램에 데이터와 서비스를 제공하는 응용프로그램로직의 단위이다.
        응용프로그램은 각각의 웹서비스가 어떻게 구현되었는지 신경 쓸 필요 없이 HTTP, SOAP과 같은 웹 프로토콜과 XML 데이터 포맷
        을 이용하여 웹서비스에 엑세스 한다. 웹서비스는 Microsoft.NET의 핵심기술이다.
 
    3)  SUN에서 정의하는 웹서비스
        웹 서비스는 사용자의 요청에 솔루션을 제공하기 위하여 임의로 찾아서 조합될 수있는 소프트웨어 컴포넌트이다.
        자바와 XML은 웹서비스를 위한 뛰어난 기술이다.
 
     정리 : 웹서비스란?
     -> 유,무선 웹상에서 플랫폼과, 구현언어에 독립적인 컴포넌트 기반의 분산 컴퓨팅 서비스

 


    (3) 웹서비스의 기반 기술인 XML
        RMI, CORBA, DCOM 프로토콜은 동일한 플랫폼에서 실행되는 분산 응용 프로그램을 만드는데에는 아무런 문제가 없지만, 여러 플랫폼이 존재하는 시스템에서는 적합하지 않다.
        그러한 이유로 여러 플랫폼을 통합할 수 있는 웹서비스에서 가장 중요한 기반 기술은 XML이다.
        XML문서는 유니코드 문자로 이루어져 있어 유니코드를 인식하는 모든 시스템에서 해석이 가능하다.
        현재 대부분의 시스템에서는 유니코드를 인식한다.
 
        XML이 웹서비스의 가장 중요한 기반 기술인 이유는 웹서비스의 기능 호출 및 결과 등이 모두 XML문서로 전송되기 때문이다.
        구체적으로 말하면, 웹서비스의 원격 프로시저 호출은 XML을 이용한 SOAP 메시지로 이루어져 있고, 
        반환되는 결과 형식도 XML을 이용한 SOAP 메시지로 이루어져 있다.
        XML이 여러 플랫폼을 하나로 묶는 프로토콜인 셈이다.


    (4) SOAP(Simple Object Access Protocol)
        인터넷 상에서 정보를 전송하기 위해 가장 많이 사용된 프로토콜이 HTTP(Hypertext Transfer Protocol)이다.
        HTTP는 웹 브라우저와 웹서버간의 텍스트, 바이너리 데이터(그림, 동영상)등 여러가지 종류의 데이터를 전송하도록 제작된 전송용 프로토콜이다. 
        하지만 원격 응용 프로그램간의 효율적인 정보 교환용으로는 부적합한 프로토콜이다. 왜냐하면 정보 표현에 있어서 HTTP는 부족한 면이 많기 때문이다.
        그래서 정보 교환용 프로토콜로 탄생한 것이 SOAP이다.

        SOAP은 XML문서로 구성되어 있기 때문에, 정보 표현력이 아주 우수한 프로토콜이며, 가볍고 구조가 간단한 프로토콜이다.
        SOAP은 단순히 정보전달용으로 사용될 수도 있지만, 주로 원격 프로시저 호출용으로 이용된다.
        SOAP은 정보 표현 및 교환에 중점을 둔 프로토콜이기 때문에 다른 전송용 프로토콜에 의해서 전송돼야 한다.
        SOAP은 HTTP 내부에 실려서 목적지로 전송된다.따라서 HTTP와 SOAP은 상호 보완적인 프로토콜이다.
        SOAP은 HTTP 이외에 SMTP로도 전송될 수 있다.
        인터넷에서 전송용 프로토콜로서 현재 가장 많이 사용되고 있는 HTTP가 SOAP메시지를 전달하는 최적의 전송용 프로토콜이다.


    (5) 웹 서비스의 특징
        1) 웹 서비스 시스템과 클라이언트는 지속적인 연결을 가지지 않는다.
        2) 웹서비스는 상태 정보를 유지하지 않는다.
        3) 사용하는 프로토콜은 XML기반의 SOAP이다.
        4) 기존의 다른 프로토콜로 구현된 분산 컴포넌트 환경을 통합시킬수 있다.
        5) 인터넷 상에서의 분산 컴퓨팅이 가능하다.
 

        부가설명 : 
        1) 클라이언트가 웹 서비스 시스템에서 제공하는 메소드를 호출하면, 웹서비스 시스템은 메소드의 실행 결과를 클라이언트에게 보여주고 나서 즉시 연결을 해제한다.
        2) 즉시 연결이 해제 되기 때문에 이전 클라이언트의 상태 정보를 웹서비스는 유지 하지 않는다.
           이전에 접속한 클라이언트가 다시 접속하게 되면 새로운 클라이언트 접속으로 취급한다.
        3) 웹서비스와 클라이언트 간의 프로토콜로서 사용되는 것은 XML기반의 SOAP이다. XML기반이 아주 중요한 의미를 가지는데, 이것은 곧 플랫폼 중립적인 프로토콜을 말한다.
        4) XML기반의 SOAP를 이용하기 때문이다.
        5) 웹 서비스와 클라이언트는 SOAP을 사용해서 요청 및 응답을 한다.
           SOAP은 HTTP 전송 프로토콜에 의해서 운반 될 수 있다.
           방화벽은 일반적으로 HTTP 프로토콜은 통과시키기 때문에 SOAP 역시 통과될 수 있다.
           
           즉 RMI, CORBA, DCOM등의 프로토콜과는 달리 SOAP은 방화벽을 넘나들며 원격객체의 메소드를 호출할 수 있게 된다.
           이것은 큰 장점인 동시에 큰 단점으로 작용할 수 있다.
           익명의 SOAP이 중요한 기능의 메소드를 실행시킬수 있기 때문이다.


    (6) 웹 서비스의 용도
        기존의 분산컴퓨팅은 제한된 운영환경에서만 가능하였다.
        제한된 운영 환경이란 플랫품과 프로그래밍 언어에 종속적이란 뜻이다.
        플랫폼이란 응용프로그램이 실행할 수 있는 하드웨어 및 S/W환경을 말한다.
        
        웹을 통한 분산 컴퓨팅 기술인 웹 서비스는 하드웨어 독립적으로 사용될 수 있다.
        하드웨어는 위치 고정적인 서버 및 개인용데스크탑, 그리고 휴대 가능한 노트북, 휴대폰, PDA등을 들수 있다.
        최근 노트북, 휴대폰, PDA등의 휴대용 기기들이 무선으로 인터넷에 연결되면서 부터 웹을 통해 정보를 공유할 수 있게 되었다.
        이들 휴대용 기기들은 현재 XML문서를 생성하고, 전송할 수 있도록 개발되고 있다.

        SOAP은 서로 다른 분산 컴퓨팅 프로토콜을 사용하는 컴포넌트 간에 중계자 역할을 함으로써, 
        기존에 서로에게 접근할 수  없었던 것을 가능하게 한다.