본 시리즈의 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" 카테고리의 다른 글
- 블루투스와 GPS 사용: 1부 - 무선 직렬 포트 데이터 읽기 (댓글 0개 / 트랙백 0개) 2008/08/11
- 서비스 지향 아키텍처 및 자바 ME (댓글 7개 / 트랙백 0개) 2007/04/10
- destroyApp()는 당신의 친구 (댓글 0개 / 트랙백 0개) 2009/09/28
- 자바 ME 장치 매트릭스로 필터 사용 (댓글 0개 / 트랙백 0개) 2008/03/13
- Java ME를 사용한 블루레이 디스크 애플리케이션 개발 제 1 부: 나만의 애플리케... (댓글 0개 / 트랙백 0개) 2008/10/13
- 모바일 플랫폼의 비교: Java ME와 Adobe Flash Lite (댓글 0개 / 트랙백 1개) 2008/06/03
- NetBeans Mobility Pack 5.0 입문을 위한 속성 가이드 (댓글 5개 / 트랙백 0개) 2006/09/26
- 모바일 자바 플랫폼의 현재와 미래 (댓글 5개 / 트랙백 1개) 2006/07/26
- MIDlet의 로깅과 모니터링을 위한 간단한 전략 (댓글 0개 / 트랙백 0개) 2009/10/22
- 아프리카에서 전하는 소식: 이 지역에서 자바 ME 플랫폼에 주어진 과제와 기회 (댓글 0개 / 트랙백 0개) 2008/12/16
댓글을 달아 주세요