본 시리즈의 1편에서는 애플리케이션 간에 비동기식으로 간단한 메시지를 보내는 데 SIP(Session Initiation Protocol)를 사용하는 두 개의 예시 애플리케이션을 소개했습니다. 이번 테크팁에서는 REGISTER 메소드 유형이 중요한 이유 그리고 그 사용 방법에 대해 알아보겠습니다.

SIP 프로토콜은 SIP 장치가 통신할 때 다음 메소드 유형을 지원합니다.

ACK MESSAGE REFER
BYE NOTIFY REGISTER
CANCEL OPTIONS SUBSCRIBE
INFO PRACK UPDATE
INVITE PUBLISH

이전 예에서는 각 사용자가 MESSAGE 메소드 유형을 사용하여 얼마나 쉽게 서로 통신할 수 있는지 알아봤습니다. 물론 각 사용자에게 라우팅 가능한 IP 주소가 있으며 장치 간 통신을 방해하는 장벽(예: 방화벽)이 없었기 때문에 가능했습니다. 그러나 사용자 중 한 명 이상이 그림 1과 같이 방화벽이나 NAT 프록시 뒤에 위치할 경우 약간 까다로워집니다.

그림 1. 방화벽 뒤에 위치한 장치로 들어오는 요청이 차단됩니다.

운이 좋다면 매번 회사의 네트워크 관리자에게 방화벽에서 해당 장치의 포트를 열어달라고 요청할 수 있습니다. 그러나 이는 확장성 없는 솔루션입니다. 회사의 다른 사용자도 자신의 장치를 위해 포트를 열어두기를 원한다면 어떻게 될까요? 게다가 모바일 장치의 IP 주소가 바뀌면 어떻게 해야 합니까? 네트워크 관리자는 새 주소를 가리키도록 방화벽을 재구성해야 합니다. 아래의 그림 2는 방화벽에서 SIP 장치마다 포트를 열 경우 발생할 확장성 문제를 보여 줍니다.

그림 2: 방화벽에서 들어오는 SIP 요청에 대해 해당 포트를 여는 것은 확장성 있는 솔루션이 아닙니다.

물론 여러 개의 SIP 장치 중에서 하나 이상이 방화벽 뒤에 있을 경우 이 장치들 간의 통신을 가능하게 할, 확장 가능한 솔루션이 있어야 합니다. 다행히 REGISTER 메소드 유형이 여기서 진가를 발휘합니다. 아래의 그림 3과 그림 4에서 보여 주듯이, SIP 프록시와 REGISTER 메소드 유형을 사용하면 간단하면서도 확장 가능한 솔루션이 됩니다. SIP 장치가 방화벽 뒤에 있을 경우 방화벽 밖에 위치한 외부 SIP 프록시에 REGISTER 메소드 유형을 보내야 합니다. 이 테크팁에서는 외부 SIP 프록시가 레지스터 역할도 수행합니다.

그림 3. REGISTER 요청이 곧바로 외부 SIP 프록시에 보내집니다.

그림 4. 들어오는 SIP 메시지가 이제 적절한 장치로 라우팅됩니다.

SIP 장치가 새 IP 주소를 갖게 되면 어떻게 될까요? 새 IP 주소와 함께 새 REGISTER 요청을 SIP 프록시에 보내면 됩니다. 더 이상 필요한 조치는 없습니다. SIP 프록시는 이제 장치에 도달하는 방법을 알고 있으므로 모든 메시지를 장치에 적절하게 라우팅합니다.

직접 테스트하고 싶은 분은 썬 자바 무선 툴킷 2.5.2 애플리케이션에 내장된 SIP Proxy/Registrar를 작동하면 됩니다. SIP 프록시를 시작하려면 무선 툴킷 프로그램 그룹에서 “Utilities” 애플리케이션을 실행합니다. Utilities 애플리케이션이 시작하면 “Start SIP Server” 옵션을 클릭합니다. 서버가 시작하면 이제 SIP 프록시에 REGISTER 메시지를 보내 이 프록시에 직접 등록할 수 있습니다. 목록 1의 코드는 그 방법을 실제로 보여 주는 예입니다.

     public void register(final SipClientConnectionListener listener, final Thread waitFor){
Thread t = new Thread() {
public void run(){
runGauge();

try {
try {
if (waitFor != null) {
waitFor.join();
} else {
}
} catch (InterruptedException ie) {
}

scc = (SipClientConnection)Connector.open("sip:" + proxyAddress +
":5060;transport=udp");
scc.setListener(listener);
scc.initRequest("REGISTER", scn);

String adr =
myDisplayName + "



다음 이미지는 SIP proxy로 보낸 REGISTER 요청의 결과를 보여줍니다.
제 디바이스가 proxy에 등록된 것을 볼 수 있습니다.

   그림 5. SIP proxy로 보낸 REGISTER 요청의 결과

결론
JSR-180 API를 이용하여 디바이스를 SIP Proxy에 등록하는것은 어렵지 않습니다.
완벽하게 동작하는 예제를 보려면 Sun Java Wireless Toolkit 2.5.2*에 포함된 GoSIP 데모 애플리케이션을 실행해 보십시오.
이 애플리케이션은 Wireless Toolkit에 포함된 SIP Proxy 와 함께 바로 사용할 수 있으며, 여러 대의 디바이스를 proxy에 등록하여 커뮤니케이션할 수 있습니다.



이 글의 영문 원본은
Asynchronous Communications with Java ME and SIP: Part 2
에서 보실 수 있습니다.



"Java ME" 카테고리의 다른 글

2008/12/15 11:16 2008/12/15 11:16

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/693

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 166 167 168 169 170 171 172 173 174  ... 806  Next ▶