2008년 11월 18일
SOAP 학습 - 소프트웨어와 통신
SOAP(Simple Object Access Protocol)이라는 괴악한 기술을 익히기에 앞서 선행 학습을 진행하도록 하겠습니다. 가장 좋은 학습법은 자신이 알고 있는 지식을 남에게 가르쳐 보는 것이라고 했으니, 제 자신을 위해서라도 꾸준히 여러가지 기술들에 대한 스터디를 진행하고 있습니다.
소프트웨어 개발을 학습하다 보면, 자연스럽게 통신이라는 주제를 접하기 마련입니다. 초기 컴퓨터가 개발되었을 때 개발된 대다수의 프로그램들은 통신을 필요로 하지 않았고, 또 그럴 수도 없었지만 하드웨어가 발전하면서 최근에 개발되는 프로그램의 대다수는 통신 기능을 자연스럽게 탑재하고 있습니다. 따라서 프로그래머들은 다양한 통신 메카니즘을 이해하고 통신을 구현하기 위한 함수나 API를 사용하게 됩니다.
1. 소프트웨어와 통신
통신(네트워킹)을 통해서 어떤 기능들을 구현하는지, 어떤 프로그램들이 존재하는지 몇가지만 살펴 봅시다.
- 인스턴트 메신저 (사용자 간 대화, 파일 송수신, 파일 공유)
- 웹 브라우저를 통한 다양한 서비스 (인터넷 뱅킹 및 쇼핑몰, 커뮤니티, 게시판, 동영상 제공)
- 기업 내부의 업무 시스템 (사내 게시판, 문서 공유 프로그램, 전사적 자원 관리 - ERP)
- 휴대폰, 모바일 기기에 탑재되는 프로그램 (문자 송수신, 날씨 뉴스 등 컨텐츠 제공)
- 네트워크 기반의 게임 (다중접속 온라인 게임, 슈팅 게임 등)
엄청나게 다양한 네트워크 프로그램들이 존재하며, 다양한 서비스들이 네트워크를 기반으로 구축되고 있습니다. 어쩌면, 네트워크를 모르고 개발해도 되는 프로그램보다 네트워크를 이해해야 만 개발할 수 있는 문제들이 더 많아지는 것은 아닐까 생각해 봅니다.
2. 네트워크 기반 프로그램을 개발하기 위해 프로그래머가 알아야 할 개념들
네트워크 상에서 동작하는 프로그램을 개발하기 위해서는 아래와 같은 몇 가지 개념을 알아야 합니다.
- 주소 체계 (address system)
서로 다른 프로그램들이 대화를 나누기 위해서는 상대 프로그램이 어디에 있는지 '위치'를 알아야 합니다. 일상 생활에서 편지를 주고 받는 것과 똑같죠. 주소도 모르는 사람에게 편지를 보낼 수야 없지 않습니까? 물론 산타 할아버지 같은 분은 예외로 칩시다. 이웃 나라 일본에서는 인기 만화가 이름 이라던가, 만화에 나오는 주소로 엽서를 보내도 제대로 배달이 된다고 하더군요. 이런 경우에도 어쨋든 주소가 적혀 있긴 때문에 제대로 전달되는 것이겠죠.
지금까지 개발된 네트워크의 종류가 다양하기 때문에 주소 체계도 일정하지는 않습니다. IP(Internet Protocol) 주소라는 것도 있고, DNS(Domain Name Service) 주소라는 것도 있고, 심지어 전자우편 계정도 주소 체계의 일부입니다. 프로그램을 개발할 때는 어떤 종류의 네트워크를 사용하는가 그리고 해당 네트워크 시스템에서는 어떤 형식의 주소를 사용하는가를 먼저 알아야 합니다.
요즘은 인터넷이 대세라서 일단 네트워크 주소라고 하면 인터넷 주소를 생각하시는데, 인터넷은 다양한 네트워트 유형 중에서 작은 부류에 불과합니다. 하여간, 일단 중요한 점은 통신하기 위해서 보내는 측하고 받는 쪽 주소라는 것이 꼭 필요하다는 것이죠. 너무 당연한가요?
- 포트(port)
가장 단순한 형태의 네트워크를 상상해 봅시다. 두 개의 컴퓨터가 있고, 서로 케이블 혹은 무선으로 통신할 수 있으며 그것만으로도 네트워크의 형태를 갖춘 겁니다. 그리고, 각 컴퓨터에 서로 다른 주소를 부여하면 정보를 주고 받을 수 있겠지요. (사실 1:1 관계라면 주소가 필요 없을수도 있지만...) 두 개의 컴퓨터에 탑재되어 있고, 통신하는 프로그램이 하나뿐이라면 분명히 서로 통신하는데 아무런 문제가 없을 겁니다.
그런데, 이런 문제를 생각해 보십시다. A와 B 컴퓨터 간에 통신을 하는데 두 가지 유형의 통신 프로그램이 동작해야 한다면 어떨까요? A 컴퓨터에서 B 컴퓨터로 데이터를 보내는 프로그램이 2개, 반대로 받는 쪽도 2개가 실행되고 상황에서 B 컴퓨터가 수신받은 데이터를 어느 쪽 프로그램에 전달해야 하는가 문제가 발생합니다.
이런 문제를 해결하기 위해서 단일 머신에서 동작하는 다양한 통신 프로그램들이 충돌하지 않게끔 각 프로그램은 고유한 대화 채널(channel) 번호를 할당 받습니다. 이것을 전문 용어로 포트(port)라고 하는데, 일반적으로 웹 브라우저들은 80포트를 사용하고, 텔넷(telnet) 프로그램들은 23번, 파일 송수신(FTP) 프로그램은 21번을 사용합니다.
개념을 좀 쉽게 풀어보면 우편을 보내는데 '서울시 서초구 방배동 국민 아파트 101동'까지가 네트워크 주소이고, 아파트 한 동을 컴퓨터라고 한다면, 아파트 동 내에 있는 각 호들은 개별 프로그램이라고 보시면 됩니다. 각 프로그램을 구분하기 위해서 번호를 부여하는 것이죠. 아파트 호수처럼 말입니다.
- 프로토콜(protocol)
프로토콜은 네트워크를 통해서 주고 받는 데이터의 형식(format)을 사전에 정의해 놓은 것을 말합니다. 용어 자체가 좀 딱딱하니 일상 생활에서 벌어지는 일들에 비유해서 설명해 보겠습니다.
여러분이 회사에 입사하고자 한다면 '이력서'라는 문서를 작성하게 될 것입니다. 이력서에는 여러가지 빈칸들이 나뉘어 있고, 각 칸에 어떤 내용을 적어야 할 지 항목별로 의미가 부여되어 있습니다. 이외에도 일상적으로 다양한 서식을 사용하고 있습니다. 간단히 메일을 보낼 경우에도 목차를 쓰고, 순번을 매기고, 제목과 내용을 구분하게 되죠. 서식을 사용하는 목적은 쓰는 사람과 읽는 사람 사이에 오해 없이 정확한 정보가 전달되도록 하기 위해서입니다.
이와 마찬가지로 컴퓨터 간에 정보를 전달할 때도, 보내는 컴퓨터 주소, 받는 컴퓨터 주소, 제목, 내용, 보낸 날짜 등 다양한 항목들을 사전에 만들어둔 규칙(혹은 서식)에 담아야 해석할 때 오류가 발생하지 않게 됩니다.
다양한 프로토콜들이 사용되고 있습니다만, 공통적으로 프로토콜이라는 규칙에서 정의하는 것은 주고 받는 자료 항목들의 종류, 각 항목의 길이, 개별 항목의 형식(예를 들어 날짜를 20071216으로 표기할 것인가 아니면, Febrary 10 처럼 영문 표기할 것인가)입니다.
위에 설명한 바와 같이 프로그래머는 주소 체계와 포트 그리고, 프로토콜이라는 이론적인 배경을 알아야만 네트워크 프로그램을 개발할 수 있습니다. 그런데, 주소 체계라는 것은 어차피 범용적인 것이기 때문에 별로 바뀌지 않고 그럴 필요도 없습니다. 문제는 프로토콜이라는 것이죠. 세상의 온갖 다양한 프로그램과 다양한 시스템이 존재하는데 모든 시스템에서 범용적으로 사용할 수 있는 프로토콜은 존재하지 않습니다. 만병통치약이 없다는 것이고, 따라서 상황에 따라 다른 프로토콜을 써야 하고 까다롭고, 머리 아플 뿐이고, 엄마가 보고 싶을 뿐이고~
개발자들이 일상적으로 주워듣는 프로토콜만 해도, TCP/IP, UDP, POP3, SMTP, IMAP, HTTP, SOAP, HTTPS, FTP, TELNET, IPX 등 꽤 많습니다. 어떤 상황에서 어떤 프로토콜을 사용해야 하고 어떤 네트워크 API를 공부해야 하는지 혼란스러울 때가 많습니다. 다음 편에서는 프로토콜의 발전사(?)에 대해서 이야기 해보겠습니다.
소프트웨어 개발을 학습하다 보면, 자연스럽게 통신이라는 주제를 접하기 마련입니다. 초기 컴퓨터가 개발되었을 때 개발된 대다수의 프로그램들은 통신을 필요로 하지 않았고, 또 그럴 수도 없었지만 하드웨어가 발전하면서 최근에 개발되는 프로그램의 대다수는 통신 기능을 자연스럽게 탑재하고 있습니다. 따라서 프로그래머들은 다양한 통신 메카니즘을 이해하고 통신을 구현하기 위한 함수나 API를 사용하게 됩니다.
1. 소프트웨어와 통신
통신(네트워킹)을 통해서 어떤 기능들을 구현하는지, 어떤 프로그램들이 존재하는지 몇가지만 살펴 봅시다.
- 인스턴트 메신저 (사용자 간 대화, 파일 송수신, 파일 공유)
- 웹 브라우저를 통한 다양한 서비스 (인터넷 뱅킹 및 쇼핑몰, 커뮤니티, 게시판, 동영상 제공)
- 기업 내부의 업무 시스템 (사내 게시판, 문서 공유 프로그램, 전사적 자원 관리 - ERP)
- 휴대폰, 모바일 기기에 탑재되는 프로그램 (문자 송수신, 날씨 뉴스 등 컨텐츠 제공)
- 네트워크 기반의 게임 (다중접속 온라인 게임, 슈팅 게임 등)
엄청나게 다양한 네트워크 프로그램들이 존재하며, 다양한 서비스들이 네트워크를 기반으로 구축되고 있습니다. 어쩌면, 네트워크를 모르고 개발해도 되는 프로그램보다 네트워크를 이해해야 만 개발할 수 있는 문제들이 더 많아지는 것은 아닐까 생각해 봅니다.
2. 네트워크 기반 프로그램을 개발하기 위해 프로그래머가 알아야 할 개념들
네트워크 상에서 동작하는 프로그램을 개발하기 위해서는 아래와 같은 몇 가지 개념을 알아야 합니다.
- 주소 체계 (address system)
서로 다른 프로그램들이 대화를 나누기 위해서는 상대 프로그램이 어디에 있는지 '위치'를 알아야 합니다. 일상 생활에서 편지를 주고 받는 것과 똑같죠. 주소도 모르는 사람에게 편지를 보낼 수야 없지 않습니까? 물론 산타 할아버지 같은 분은 예외로 칩시다. 이웃 나라 일본에서는 인기 만화가 이름 이라던가, 만화에 나오는 주소로 엽서를 보내도 제대로 배달이 된다고 하더군요. 이런 경우에도 어쨋든 주소가 적혀 있긴 때문에 제대로 전달되는 것이겠죠.
지금까지 개발된 네트워크의 종류가 다양하기 때문에 주소 체계도 일정하지는 않습니다. IP(Internet Protocol) 주소라는 것도 있고, DNS(Domain Name Service) 주소라는 것도 있고, 심지어 전자우편 계정도 주소 체계의 일부입니다. 프로그램을 개발할 때는 어떤 종류의 네트워크를 사용하는가 그리고 해당 네트워크 시스템에서는 어떤 형식의 주소를 사용하는가를 먼저 알아야 합니다.
요즘은 인터넷이 대세라서 일단 네트워크 주소라고 하면 인터넷 주소를 생각하시는데, 인터넷은 다양한 네트워트 유형 중에서 작은 부류에 불과합니다. 하여간, 일단 중요한 점은 통신하기 위해서 보내는 측하고 받는 쪽 주소라는 것이 꼭 필요하다는 것이죠. 너무 당연한가요?
- 포트(port)
가장 단순한 형태의 네트워크를 상상해 봅시다. 두 개의 컴퓨터가 있고, 서로 케이블 혹은 무선으로 통신할 수 있으며 그것만으로도 네트워크의 형태를 갖춘 겁니다. 그리고, 각 컴퓨터에 서로 다른 주소를 부여하면 정보를 주고 받을 수 있겠지요. (사실 1:1 관계라면 주소가 필요 없을수도 있지만...) 두 개의 컴퓨터에 탑재되어 있고, 통신하는 프로그램이 하나뿐이라면 분명히 서로 통신하는데 아무런 문제가 없을 겁니다.
그런데, 이런 문제를 생각해 보십시다. A와 B 컴퓨터 간에 통신을 하는데 두 가지 유형의 통신 프로그램이 동작해야 한다면 어떨까요? A 컴퓨터에서 B 컴퓨터로 데이터를 보내는 프로그램이 2개, 반대로 받는 쪽도 2개가 실행되고 상황에서 B 컴퓨터가 수신받은 데이터를 어느 쪽 프로그램에 전달해야 하는가 문제가 발생합니다.
이런 문제를 해결하기 위해서 단일 머신에서 동작하는 다양한 통신 프로그램들이 충돌하지 않게끔 각 프로그램은 고유한 대화 채널(channel) 번호를 할당 받습니다. 이것을 전문 용어로 포트(port)라고 하는데, 일반적으로 웹 브라우저들은 80포트를 사용하고, 텔넷(telnet) 프로그램들은 23번, 파일 송수신(FTP) 프로그램은 21번을 사용합니다.
개념을 좀 쉽게 풀어보면 우편을 보내는데 '서울시 서초구 방배동 국민 아파트 101동'까지가 네트워크 주소이고, 아파트 한 동을 컴퓨터라고 한다면, 아파트 동 내에 있는 각 호들은 개별 프로그램이라고 보시면 됩니다. 각 프로그램을 구분하기 위해서 번호를 부여하는 것이죠. 아파트 호수처럼 말입니다.
- 프로토콜(protocol)
프로토콜은 네트워크를 통해서 주고 받는 데이터의 형식(format)을 사전에 정의해 놓은 것을 말합니다. 용어 자체가 좀 딱딱하니 일상 생활에서 벌어지는 일들에 비유해서 설명해 보겠습니다.
여러분이 회사에 입사하고자 한다면 '이력서'라는 문서를 작성하게 될 것입니다. 이력서에는 여러가지 빈칸들이 나뉘어 있고, 각 칸에 어떤 내용을 적어야 할 지 항목별로 의미가 부여되어 있습니다. 이외에도 일상적으로 다양한 서식을 사용하고 있습니다. 간단히 메일을 보낼 경우에도 목차를 쓰고, 순번을 매기고, 제목과 내용을 구분하게 되죠. 서식을 사용하는 목적은 쓰는 사람과 읽는 사람 사이에 오해 없이 정확한 정보가 전달되도록 하기 위해서입니다.
이와 마찬가지로 컴퓨터 간에 정보를 전달할 때도, 보내는 컴퓨터 주소, 받는 컴퓨터 주소, 제목, 내용, 보낸 날짜 등 다양한 항목들을 사전에 만들어둔 규칙(혹은 서식)에 담아야 해석할 때 오류가 발생하지 않게 됩니다.
다양한 프로토콜들이 사용되고 있습니다만, 공통적으로 프로토콜이라는 규칙에서 정의하는 것은 주고 받는 자료 항목들의 종류, 각 항목의 길이, 개별 항목의 형식(예를 들어 날짜를 20071216으로 표기할 것인가 아니면, Febrary 10 처럼 영문 표기할 것인가)입니다.
위에 설명한 바와 같이 프로그래머는 주소 체계와 포트 그리고, 프로토콜이라는 이론적인 배경을 알아야만 네트워크 프로그램을 개발할 수 있습니다. 그런데, 주소 체계라는 것은 어차피 범용적인 것이기 때문에 별로 바뀌지 않고 그럴 필요도 없습니다. 문제는 프로토콜이라는 것이죠. 세상의 온갖 다양한 프로그램과 다양한 시스템이 존재하는데 모든 시스템에서 범용적으로 사용할 수 있는 프로토콜은 존재하지 않습니다. 만병통치약이 없다는 것이고, 따라서 상황에 따라 다른 프로토콜을 써야 하고 까다롭고, 머리 아플 뿐이고, 엄마가 보고 싶을 뿐이고~
개발자들이 일상적으로 주워듣는 프로토콜만 해도, TCP/IP, UDP, POP3, SMTP, IMAP, HTTP, SOAP, HTTPS, FTP, TELNET, IPX 등 꽤 많습니다. 어떤 상황에서 어떤 프로토콜을 사용해야 하고 어떤 네트워크 API를 공부해야 하는지 혼란스러울 때가 많습니다. 다음 편에서는 프로토콜의 발전사(?)에 대해서 이야기 해보겠습니다.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- a cake of SOAP? 비누가 필요하세요? by 써니
- 기차가 달리기 위해서 철로, 소프트웨어는 플랫폼이 필요하다 by 써니
- Web Services by 거만쟁이
# by | 2008/11/18 16:57 | Development | 트랙백




