사실 본 강좌는 ASP 나 ASP.Net 과는 관련 없는(?) 강좌일지도 모르겠다. 하지만 .Net 으로 소켓프로그램을 개발하고, 개발된 컴포넌트를 .Net 환경에 등록하고, ASP에서 CreateObject 를 통해 인스턴스를 생성 및 사용하는 방법 등을 알아 볼 수있는 시간이 될 것이다. 이는 소켓 컴포넌트에국한 된 이야기가 아니다. 프로그래밍을 좀 더 강력하게 해줄 닷넷 컴포넌트들을 .Net 환경에서만 누리지 말고. .Net 없이 힘겹게 버텨온 ASP에서 이용해 보는 방법을 다룰 것이다. ASP.Net 이 ASP 보다 확실히 나은 환경을 제공하고 있다. 하지만 ASP에서 .Net 으로 넘어가는 과도기에는,NT 계열의 웹프로그래머들은 ASP 를 여전히 사용해야만 할 것이다.
그래서 ASP 나 ASP.Net 의 얘기보다는 .Net 프로그래밍에 대한 얘기가 주를 다룰 것이며,소켓통신의 개념의 위한 재미있는(?) 네트워크 이야기들도 함께 구성되어질 것이다.
강좌는 C# 으로 이뤄질 것이다. C# 언어의 문법적인 설명이나 OOP 의 개념들은 설명하지 않을것이다. 또한 어떠한 용어에 대해 깊숙히 파고들어가기보다는, 프로그래밍 적으로 구현하는데 있어서 필요한 만큼의 설명만 하게 될 것이며, 좀 더 디테일하게 알고 싶은 분들은 서적 또는 사이트의 검색을 통해 지식을 습득하기 바란다. |
ASP 에서의 컴포넌트
ASP 에서의 컴포넌트(외부) 사용이란, 이미 VB , C++(ATL) 로 작성된 컴포넌트(DLL) 파일을레지스트리에 등록하고 ASP에서 인스턴스를 생성하여 사용하는 방식이었다. 물론 .Net 컴포넌트 또한 크게 다르지는 않다., 하지만 .Net에서 작성된 컴포넌트들은 GAC(Global Assemly Cache) 지원및 SN, Regasm 등의 좀 더 진보적인 방법으로 어셈블리들을 등록하고 관리 한다.(강좌가 진행되면서 자세히 알아보도록 하자)
기존의 ASP 개발을 위해 각종 PG(PayGate)사의 컴포넌트나 B2B 간의 내부 정보 교류를 위해 개발된컴포넌트들을 사용해 보았을 것이다. 이런 컴포넌트들은 모두 소켓으로 이루어져 있다. 물론 우리가 자주 이용하는 웹 이나 FTP , SMTP 등의 서비스들 또한 파고 들어가 보면 결국 소켓을 통해 서비스 되고 있으며, 원격 메소드 호출을 위한 웹서비스나 원격에서의 객체 전달을 위한 Serialize, .Net 리모팅 등 또한 정보 교환의 방식이지 결국은 소켓을 통해 스트림으로 모두 전달하고 있다.
어쩌면 당연한 얘기를 하고있는지 모르겠다 모두 TCP/IP 를 이용하니까..
네트워크의 소켓(Socket) 과 TCP/IP
네트워크란 무엇인가? 는 컴퓨터는 무엇인가? 와 일맥상통하는 겁나는 질문이다. 이는 뜻을 모른다고 하기 보다 어떻게 설명해야 할지 모르는 경우가 다분할 것이다. 나름대로 프로그래밍 적으로 네트워크의 정의를 내려보면, 원거리 컴퓨터들이 통신을 위해 선(논리적인 선)들로 연결된 모양을 네트워크라고 할 것이다. (아직 정의가 어설프다) 어떻게 연결되어 서로 정보를 주고 받고 할 수 있는 것인가? 바로 "소켓(Socket)"으로 연결점(종단점- EndPoint) 을 제공하고 "TCP/IP" 로 연결되어있다. 소켓은 어떠한 행위를 한다기보다는 인터페이스를 제공한다 .즉, 소켓은 단지 연결점만을 제공하는것이다.소켓은 인터넷의 근간이된 ARPA 의 ARPANet에서 TCP/IP 통신을 위해 개발되었고, 이는 UNIX 의 모체가된 BSD에서 처음으로 네트워크 통신을 위해 ‘소켓’ 이란 API 로 제공되기 시작 하였다. 이것을 MS는 윈도우에서 네트워크 통신을 위해 윈도우용 소켓 API로 옮겨 놓았는데 그것이 윈속(WinSock)이다.이제 다시 네트워크를 정리해 보면, "원격으로 떨어진 컴퓨터들이 소켓이라는 연결점(종단점)을 통해TCP/IP 프로토콜로 연결되어 진 모습" 이라고 구지 정의해 보고 싶다. 어떻게 보면 이 정의는통상적인 개념이기보다. 강의를 작성하고 있는 본인이 프로그래밍에 좀 더 이해하기 쉽도록 정의했다고 봐줬으면 좋겠다.

(각종 응용프로그램들이 통신을 위해 소켓과 TCP/IP,응용프로그램과의 관계를 잘 묘사하고있다)소켓을 통해 연결되는 TCP/IP는 크게 연결지향형인 TCP(Transmission Control Protocol) 와비-연결형인 UDP(User DataGram Protocol) 를 지원한다.
소켓을 연결하는 TCP 와 UDP
일단 우리는 소켓을 통해 TCP/IP 가 연결 할 수 있는 연결점(종단점 이라고도 한다-End Point) 을 제공하고 실제 데이터를 교류 할 수 있도록 TCP/IP 가 연결이 된다고 했다. 이는 다시 TCP 와 UDP 연결방식으로 나눌 수 있으며, TCP는 연결지향형(Connection-Oriented) 방식, UDP 는 비연결형(Connectionless) 방식으로 데이터를 전송 할 수 있다. 그럼 무엇이 다른가?
TCP 의 경우 소켓을 통한 데이터의 송/수신이 이루어 지기전에 컴퓨터간에 소켓끼리 통신할 수 있도록"연결" 이 맺어져 있어야 한다는 점이다. 이는 신뢰성있는 통신을 위해 3Way HandShaking라는 방식으로 클라이언트는 서버와의 연결을 맺는다. 아래 [그림]과 같다.(TCP부분 참조)
1단계 클라이언트는 서버에 접속하기전에 접속할것을 미리 서버??신호를 보낸다.
2단계 수신한 서버는 클라이언트부터 접속에 대한 요청을 받았음을 클라이언트에 발송한다.
3단계 클라이언트는 서버로부터 자신의 요청이 수신되었음을 확인하고, 수신확인 메시지를 전송한 후 서버와의 통신을 시작한다.
(사실 TCP 접속의 신호는 모두 TCP 헤더에 포함된 각종 제어 비트들에 의해 좀 더 복잡한 구조로 통신한다. 자세한 내용은 관련 사이트나 서적을 참고하기로 하자.)
이러한 방법으로 연결된 TCP는 정보 교환을 위해 반드시 연결되어 있어야 한다. 그것이 바로연결지향(Connection-Oriented)방식의 TCP 이다. TCP 를 통한 데이터 전송은 수신된 데이터에대해 제대로 도착했는지, 이상은 없는지, 이상이 있을 경우 폐기하고 다시 발송을 요청한다.또 네트워크의 불안정성으로 인해 순서가 뒤엉킹 패킷에 대해 발송시 헤더에 포함 한 시퀀스번호를 통해 순서있게 조립 한다. TCP 는 신뢰성있는 통신을 준수한다. 이러한 통신을유니 캐스트 라고 한다. (Point to Point - 1:1 통신) 뭔가 가슴에 확 와 닿지 않는다면, UDP 를살펴보기로 하자.
위의 [그림] UDP 는 클라이언트가 서버쪽으로 단지 하나의 화살표만 갖는다. 이뜻은 클라이언트가 서버측으로 정보를 보내거나 요청하기위해 연결을 하지 않는 다는 뜻이다.
클라이언트가 서버??"a" 라는 정보를 보내려고하면 연결을 맺고 보내는것이 아니라 바로 서버로 send 하게된다. 이는 send 가 연결을 포함하고있는 개념이며, 데이터를 보내고 나서는 아무런 연결이 없다.(이는 직접코딩해도 느낄수 있다 소켓을 받는 서버부분을 꺼놓고 클라이언트가 발송해도 아무런 오류나 응답이 없다.)
데이터를 보낸 클라이언트로서는 정보가 제대로 갔는지도 알수가 없다. 그렇다면 안정성이 없는UDP 를 어디서 사용할까? 이미 스타크래프트와 같은 온라인게임 이나 , 대량의 데이터를 신속하게전달을 요하는 스트리밍 서비스 그리고 음성 , 영상 서비스들, DNS, 모두 UDP 를 이용한다. 이는 대량의 데이터을 빠르게 전송해야하는 서비스나 전송된 데이터에 대해 일련의 순서들이 반드시 일치하지 않아도 되는 서비스들에 적합한 프로토콜이며, 네트웍에서의 브로드캐스트, 멀티캐스팅 이필요한 다양한 분야에서 효율적으로 사용되어지고있다.
(배틀넷과 같은 온라인 게임 경우는 UDP 의 신뢰성 없는 통신을 신뢰성을 늘이기 위해 이중 패킷을 발송하거나 UDP 위에 좀더 신뢰성 있는 독자적인 프로토콜을 개발하여 UDP 와 함께 사용된다고 한다.)
쉽게 이야기 하자면 TCP 는 전화와 비슷한 방식을 제공한다. 서로 연결된 상태에서만 정보를 교환할 수 있다. UDP 는 편지나 , 방송과 비슷하다고 할 수 있다. 발송된 편지는 수신자가 받았는지 안받았는지 알수 없다 전달하게 되면 그만 인것이다(적절한 표현인지 모르겠다...) 방송과 같은경우는 UDP 와잘 맞는거 같다. KBS나 MBC에서 브로드캐스팅된 정보를 각각의 가정에서 받아 TV 화면으로 보지만우리는 그것을 잘 받았다고 MBC 나 KBS에 응답하거나. 잘못된 수신된 화면에 대해 재요청하거나 하지 않는다.
용어를 조금 정리해 보자면 전화가 유니캐스트 라면 방송의 경우는 브로드 캐스팅이며,멀티캐스트는 브로드캐스트와 비슷하지만 전체 중 선택된 그룹만 보낼수 있다는 점이 각각 다르다.
예를 들어보자. CP 사와 관련되어 결제 및 중요한 인증부분을 개발 할 경우 TCP/IP 로 개발하는 것이신뢰성을 높일 것이며, 사내 A 네트워크에 포함된 컴퓨터들??일종의 패치 파일이나 메시지를 전달하고자 한다면 UDP 를 이용해야 할것이다.
그럼 TCP/IP 와 함께 네트워크 용어를 다시 한번 정리해 보도록 하자.
"서로 원격(또는 내부)으로부터 떨어져 있는 컴퓨터간에 소켓이라는 연결점(종단점)을 통해 TCP/IP (TCP 혹은 UDP )로 연결되어져 있는 한 개 이상의 노드(컴퓨터)"
자.. 범용적으로 사용하기에는 어딘가에? 종속되어 보이는 네트워크의 뜻을 만들어 냈다 -_-;좀 완전하지 못하지만 앞으로 프로그래밍 해 나가는데 중요한 논리가 될것이다.