Akashic Records

SIP Servlet 본문

오래된글/Articles

SIP Servlet

Andrew's Akashic Records 2018. 4. 19. 14:09
728x90

SIP(Session Initial Protocol)는 두 엔드포인트 사이에 세션을 설정, 수정하고 종료할 때 쓰이는 시그널링 프로토콜이다. SIP는 양자간 호출, 다자간 호출 심지어 인터넷 호출/멀티미디어 호출/멀티미디어 배포를 위한 멀티캐스트 세션을 설정할 때도 사용한다.


SIP Servlet(JSR 116) API는 SIP 구성요소 또는 서비스의 컨테이너를 설명하는 서버측 인터페이스입니다. SIP Servlet, 즉 SIP Container에서 실행되는 Servlet은 HTTP Servlet과 비슷하지만, SIP Protocol도 지원한다. SIP와 SIP Servlet 모두 VoIP(Voice-over-IP), 인스턴트 메시징, 상태 알림 및 버디 목록 관리 그리고 웹 컨퍼런싱과 같은 서비스를 제공하는 널리 이용되는 여러 통신기반 Application의 배후에 구현되어 있다.


SIP와 SIP Servlet은 Enterprise환경에서도 중요하다. SIP Servlet을 Java EE기술과 함께 사용하면 Enterprise Application에 Rich 미디어 상호작용을 추가할수 있다. SIP Servlet v1.1(JSR 289)은 SIP Servlet 기능을 업데이트하며, SIP Servlet과 Java Ee구성요소를 혼하하기 위한 표준 Application 프로그래밍 모델을 정의한다.


What is SIP?

A라는 사용자가 B라는 사용자와의 호출을 설정하려고 한다. 통신 설정에서는 사용자 에이전트라는 것을 통해 사용자 A와 B가 통신하게 된다. 사용자 에이전트의 한 예가 VoIP를 사용하는 전화기를 들수 있을 것이다.


  1. 대화를 시작하기 위해 A가 B를 초대한다. 초대하면서 A는 어떤 미디어가 지원 가능한지 알린다.

  2. 초대를 받은 B는 즉시 A에게 응답한 다음 초대를 평가한다.

  3. B가 초대를 받아들일 준비가 되었으면 A에게 확인응답(Acknowledgement)을 보낸다. 확인 응답 과정에서 B는 자신이 어떤 미디어를 지원하는지 알린다.

  4. A는 B로부터 받은 확인 응답을 검사하고 B와 A가 지원하는 미디어가 동일한지 확인한다. A와 B가 동일한 미디어를 지원할 경우 A와 B사이에 호출이 설정된다. 초대에 지정된 미디어가 호출을 지원한다.



SIP는 이 단계를 수행하는 표준화된 방식을 제공한다. 그러기 위해 구체적인 요청 메소드, 응답, 응답 코드 기르고 시그널링 및 호출 제어를 위한 헤더를 정의한다. 이 프로토콜은 IETF(Internet Engineering Task Force)의 RFC3261에서 표준화되었다.


SIP는 HTT와 어떤 관련이 있는가?

SIP는 HTTP를 사용하지 않는다. SIP는 HTTP와 동일한 계층, 즉 Application 계층에서 작동하는 프로토콜이며 TCP, UDP또는 SCTP를 기반 프로토콜로 사용한다. 그러나 SIP는 HTTP와 유사한 점이 많다. HTTP 처럼 SIP는 텍스트 기반이며 사용자가 읽을 수 있다. 또한 HTTP와 마찬가지로 SIP는 특정 메소드, 응답, 코드 및 헤더가 있는 요청-응답 메커니즘을 사용한다. HTTP와 SIP의 뚜렷한 차이점 중 하나는 요청-응답 메커니즘이 SIP에서는 비동기식이라는 것이다. 요청 다음에 그에 대한 하나의 응답이 올 필요는 없다. 실제로 SIP 요청의 결과로 하나 이상의 요청이 생성되기도 한다.


SIP는 다음 요청 메소드와 응답 코드를 지원합니다.


요청 메소드

  • REGISTER. 클라이언트가 SIP 서버에 주소를 등록할 때 사용합니다. .

  • INVITE. 사용자 또는 서비스가 세션에 참가하도록 초대받고 있음을 나타냅니다. 이 메시지의 본문에는 사용자 또는 서비스가 초대된 세션에 대한 설명이 포함되어 있습니다.

  • ACK. 클라이언트가 INVITE 요청에 대한 최종 응답을 받았음을 확인합니다. 이 메소드는 오로지 INVITE 요청과 함께 사용합니다.

  • CANCEL. 보류 중인 요청을 취소할 때 사용합니다.

  • BYE. 사용자 에이전트 클라이언트가 호출 종료를 원한다는 것을 서버에 전달할 때 보냅니다.

  • OPTIONS. 서버에 그 기능에 대해 쿼리할 때 사용합니다.


응답 코드

  • 1xx: 임시. 액션이 성공적으로 수신, 이해되고 수락되었음을 나타내는 ACK입니다.

  • 3xx: 리디렉션. 이 요청을 처리하려면 추가 액션이 필요합니다.

  • 4xx: 클라이언트 오류. 요청이 잘못된 구문을 포함하며, 이 서버에서 실행할 수 없습니다.

  • 5xx: 서버 오류. 서버는 유효해 보이는 요청을 처리하지 못했습니다.

  • 6xx: 전역 실패. 어떤 서버에서든 요청을 처리할 수 없습니다.


What is SDP?

SDP(Session Description Protocol)는 멀티미디어 세션에 사용할 미디어 형식과 유형을 설명한다. SIP에서는 SDP를 메시지의 페이로드로 사용하면서 여러 사용자 에이전트 간의 기능 교환을 지원한다. 예를 들어, SDP의 내용에서는 사용자 에이전트가 지원할 코덱 그리고 RTP(Real-time Transport Protocol)와 같이 사용할 프로토콜을 지정하기도 한다.


SIP Message


  • Request Line: 요청 메소드, 주소 및 SIP 버전을 지정한다.

  • Headers: 설정하거나 종료할 세션이나 호출에 대한 데이터를 지정한다.

  • Message Body: 세션을 위한 미디어를 설명하는 페이로드, 즉 SDP를 제공한다.


SIP Servlet Model
SIP Servlet 프로그래밍 모델은 Servlet 프로그래밍 모델을 기반으로 한다. Servlet은 Server Side 개체로서 들어오는 요청을 처리하고 적합한 응답을 클라이언트에게 보낸다. 일반적으로 Servlet은 Servlet Container에 배포된다. Servlet Container는 Servlet의 생명주기를 관리하고 JNDI, JDBC와 같은 Servlet이 사용하는 기술과 관련된 Resources를 관리하는 일을 담당한다.

SIP Servlet은 SIP 요청을 처리한다는 점을 제외하고 HTTP Servlet과 비슷하다. 그러기 위해 SIP 요청 메소드 각각을 처리할 구체적인 메소드를 정의 한다.


SipServletRequest 및 SipServletResponse

SIP의 요청-응답 방법론은 HTTP 서블릿의 경우와 비슷합니다. 요청은 SipServletRequest 개체에서 정의되며, 응답은 SipServletResponse 개체에서 정의됩니다. 그러나 단 하나의 ServletRequest 또는 ServletResponse 개체만 null이 아닙니다. SIP 요청이 대칭형 응답을 내놓지 않기 때문입니다. 또한 SipServletRequest 및 SipServletResponse 개체 모두의 공통적인 수퍼 인터페이스인 SipServletMessage가 있습니다. SipServletMessage 인터페이스는 SipServletRequest 및 SipServletResponse 개체의 공통된 메소드를 정의합니다.




배포 설명자

XML 기반의 배포 설명자는 SIP 서블릿과 이를 호출하기 위한 규칙 그리고 애플리케이션에 쓰이는 리소스 및 환경 등록 정보를 설명할 때 사용합니다. 이 설명자는 sip.xml 파일에 있으며, HTTP 서블릿에 쓰이는 파일과 비슷합니다. sip.xml 파일은 XML 스키마에 의해 정의됩니다.


SIP 애플리케이션 패키징

SIP 애플리케이션은 웹 애플리케이션과 동일한 패키징 구조를 갖습니다. .sar(Sip 아카이브) 또는 .war(웹 아카이브) 파일 확장자를 갖는 JAR 파일 형식으로 패키징됩니다.



통합 컨텍스트 및 통합 애플리케이션

애플리케이션에서는 SIP 및 HTTP 서블릿을 모두 사용하여 서비스를 생성할 수 있습니다. HTTP 및 SIP 서블릿이 동일한 애플리케이션 패키지에 있을 수 있도록 SIP 서블릿 스펙에서 ConvergedContext 개체를 정의합니다. 이 개체는 HTTP 및 SIP 서블릿 모두가 공유하는 서블릿 컨텍스트를 보유하며 서블릿 컨텍스트 속성, 리소스 및 JNDI 네임스페이스 측면에서 동일한 애플리케이션 뷰를 SIP 및 HTTP 서블릿에게 제공합니다. 애플리케이션이 SIP 및 HTTP 서블릿을 모두 포함할 경우 통합(converged) 애플리케이션이라고 합니다. 이는 SIP 전용 애플리케이션, 즉 SIP 애플리케이션과 대비되는 용어입니다. 통합 애플리케이션은 sip.xml 파일 외에도 web.xml 파일을 배포 설명자로 갖는다는 점을 제외하고, SIP 애플리케이션과 비슷한 구조입니다.

SIP Servlet API 1.1(JSR289)에서 통합 애플리케이션의 개념은 엔터프라이즈 애플리케이션도 다루도록 확장되었습니다. 이제 엔터프라이즈 애플리케이션은 SIP 애플리케이션 또는 통합 애플리케이션을 모듈로 포함할 수 있습니다. 이런 유형의 엔터프라이즈 애플리케이션을 통합 엔터프라이즈 애플리케이션 (converged enterprise application)이라고 합니다.



SIP 세션

SIP 서블릿 스펙에서는 HttpSession 개체가 HTTP를 통한 세션을 나타내는 것과 동일한 방법으로 SIP를 통한 세션을 나타내는 SipSession 개체를 정의합니다. 통합 애플리케이션과 같은 하나의 애플리케이션이 HTTP를 통한 세션과 SIP를 통한 세션을 포함할 수 있으므로, 이 스펙에서는 애플리케이션 수준의 세션 개체인 SipApplicationSession도 정의합니다. SipApplicationSession 개체는 애플리케이션에서 HTTP 및 SIP 세션(즉 프로토콜 세션)의 상위 역할을 합니다.


Annotation

SIP Servlet API 1.1의 목적은 SIP 서블릿을 Java EE 5에 맞도록 조율하는 것입니다. 따라서 이 스펙에서는 Java EE 5에서 정의한 주석의 사용을 SIP 서블릿 및 수신기 내부에 도입합니다. 또한 SIP 서블릿 스펙에서 정의한 인터페이스를 나타내도록 커스텀 Annotation도 정의합니다. 이 스펙에서는 다음 Annotation을 도입합니다.


  • @SipServlet. 특정 클래스가 SipServlet임을 나타낼 때 사용합니다.

  • @SipApplication. SIP 애플리케이션을 정의할 때 사용합니다. 이 주석에는 속성의 집합이 있는데, 그 중 하나인 "name" 속성은 애플리케이션의 이름을 정의할 때 사용합니다. SipApplication 주석은 애플리케이션을 구성하는 서블릿의 논리적 컬렉션을 배포 설명자를 사용하지 않고 생성할 때 사용합니다..

  • @SipListener. 어떤 클래스가 특정 SIP 애플리케이션의 SipListener로 등록될 수 있게 합니다. SIP 애플리케이션의 이름은 이 주석의 속성으로 정의됩니다.

  • @SipApplicationKey. SIP 애플리케이션에 대해 SipApplicationKey를 정의하는 데 도움이 되는 메소드 수준입니다. SipApplicationKey는 기존의 SipApplicationSession과 요청을 연결할 때 사용합니다.



PS: SIP Servlet 1.1은 Java Servlet 3.0에 포함되어 있으며 Tomcat 7, JBoss 7에서 지원한다.

728x90
Comments