SOAP(Simple Object Access Protocol) API 통신은 웹 서비스 간에 데이터를 교환하는 방식 중 하나로, 주로 XML 형식을 사용하여 메시지를 주고받습니다. SOAP는 웹 서비스 간의 통신을 표준화하고, 다른 프로토콜 위에서도 동작할 수 있도록 만들어졌다. SOAP API는 특히 보안과 트랜잭션 관리가 중요한 엔터프라이즈 환경에서 널리 사용된다.
1. SOAP의 주요 개념
1) XML 기반
SOAP 메시지는 XML 형식으로 작성된다. XML은 사람이 읽을 수 있는 텍스트 형식이면서 기계도 쉽게 분석할 수 있는 구조화된 데이터 포맷이며, SOAP 메시지는 요청(request)과 응답(response) 양쪽 모두 XML로 구성된다.
2) SOAP 메시지 구조
SOAP 메시지는 크게 3개의 주요 요소로 구성된다
- Envelope: 메시지의 루트 요소로, 메시지가 SOAP 메시지임을 나타내고 전체 구조를 감싼다.
- Header: 선택적 요소로, 인증 정보, 세션 정보, 트랜잭션 ID 같은 메타데이터를 포함한다.
- Body: 실제 데이터를 포함하는 부분으로, 요청/응답에 필요한 정보를 담고 있다.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.example.com/webservice">
<soapenv:Header/>
<soapenv:Body>
<web:getProduct>
<web:productId>12345</web:productId>
</web:getProduct>
</soapenv:Body>
</soapenv:Envelope>
3) WSDL (Web Services Description Language)
WSDL은 SOAP API의 계약서 역할을 합니다. WSDL 파일에는 해당 API가 제공하는 서비스, 호출할 수 있는 메서드, 입력 및 출력 데이터의 형식, 통신할 엔드포인트 등이 기술되어 있으며 이를 통해 클라이언트는 API 사용 방식을 알 수 있다.
4) 통신 프로토콜
SOAP는 다양한 프로토콜 위에서 작동할 수 있지만, 주로 HTTP(S)를 많이 사용하며, SOAP 요청은 HTTP POST 방식으로 전송되며, 응답도 HTTP를 통해 수신된다.
2. SOAP API 통신 연동 과정
1) WSDL 파일 파악
SOAP API를 사용하려면 우선 서비스 제공자가 제공한 WSDL 파일을 확보해야 하며, WSDL 파일을 분석하여 사용할 메서드와 필요한 매개변수를 확인한다.
2) SOAP 클라이언트 생성
클라이언트 측에서 SOAP API를 호출하기 위해서는 SOAP 클라이언트를 생성해야 한다. Java에서 SOAP API를 호출하는 방법 중 하나는 JAX-WS(Java API for XML Web Services)를 사용하는 것이다.
3) SOAP 요청 메시지 작성
SOAP 요청 메시지는 XML 형식으로 작성된다. WSDL에 정의된 형식에 맞춰 요청 데이터를 XML로 구성하고, HTTP POST 요청을 통해 전송한다.
4) SOAP 응답 처리
서버에서 반환하는 SOAP 응답 메시지는 역시 XML 형식입니다. 이 응답 메시지에서 필요한 데이터를 추출하여 처리한다.
3. Java를 이용한 SOAP 통신 예제 (JAX-WS)
Java에서 SOAP API와 통신하기 위해서는 JAX-WS 라이브러리를 사용할 수 있으며, WSDL 파일을 바탕으로 자동으로 클라이언트 코드를 생성해 주는 도구도 제공된다.
1) WSDL로부터 Java 클래스 생성 (wsimport)
먼저, WSDL 파일을 바탕으로 Java 클래스를 생성하기 위해 wsimport 도구를 사용한다.
wsimport -keep -p com.example.soapclient http://www.example.com/service?wsdl
2) SOAP 클라이언트 코드 작성
생성된 클래스를 이용해 SOAP API를 호출하는 클라이언트를 작성할 수 있다.
import com.example.soapclient.MyService;
import com.example.soapclient.MyService_Service;
public class SoapClientExample {
public static void main(String[] args) {
// WSDL로부터 생성된 서비스 객체
MyService_Service service = new MyService_Service();
// 실제 서비스 객체
MyService myService = service.getMyServicePort();
// SOAP API 호출 (메서드명은 WSDL에 정의된 것에 따라 다르다)
String result = myService.getProductDetails("DA-1101");
// 결과 출력
System.out.println("result: " + result);
}
}
위 코드는 wsimport 명령으로 생성된 MyService 클래스를 사용하여 SOAP API를 호출하고, 특정 결과를 가져오는 예시이다.
4. SOAP 통신의 장점 및 단점
장점
- 표준화: SOAP는 WSDL과 함께 표준화된 프로토콜을 사용하여 웹 서비스 간 통신을 표준화한다.
- 보안성: SOAP는 WS-Security와 같은 보안 확장 기능을 통해 메시지 레벨에서 보안(암호화, 서명)을 제공한다.
- 트랜잭션 지원: SOAP는 메시지 전송에 있어서 ACID 트랜잭션을 지원한다.
- 확장성: SOAP 메시지에 추가적인 헤더를 통해 다양한 확장성을 제공할 수 있다.
단점
- 복잡성: SOAP 메시지는 XML 기반이기 때문에 상대적으로 크고 복잡하며, JSON 같은 경량화된 형식에 비해 성능이 떨어질 수 있다.
- 높은 오버헤드: XML 파싱과 네트워크 트래픽에서 오버헤드가 발생할 수 있다.
- REST 대비 사용성 부족: REST API는 더 간단하고 직관적인 방식으로 사용되기 때문에 최근에는 SOAP 대신 RESTful API를 많이 사용한다.
5. SOAP vs REST
- 데이터 포맷: SOAP는 XML을 사용하지만, REST는 JSON, XML, HTML 등 다양한 포맷을 지원한다.
- 보안: SOAP는 자체 보안 규격(WS-Security)을 가지고 있는 반면, REST는 주로 HTTPS를 통해 보안을 제공한다.
- 상태 유지: SOAP는 상태 유지를 지원하지만, REST는 기본적으로 상태를 유지하지 않는다.
- 트랜잭션: SOAP는 트랜잭션을 지원하는 반면, REST는 명시적인 트랜잭션 지원이 없다.
SOAP API 통신은 보안성과 트랜잭션 관리가 중요한 대규모 엔터프라이즈 환경에서 유용하며, Java를 이용해 SOAP API와 통신하려면 WSDL을 기반으로 클라이언트 코드를 생성하고, XML 형식으로 요청을 보내는 과정을 이해해야 한다. RESTful API와는 차이가 있지만, 여전히 많은 시스템에서 사용되고 있는 기술이라한다.
'IT' 카테고리의 다른 글
[SEO] 검색 엔진 최적화(SEO)란? (4) | 2024.09.03 |
---|---|
[Sqoop] 스쿱 이란 ? (0) | 2024.08.26 |
[Hosting] 호스팅 유형별 작동 원리 (0) | 2024.08.26 |
[Tibero] Jenkins로 WAR 파일을 Jeus 서버에 배포하기 (0) | 2024.08.07 |
[JDBC-90401]Connection refused by the server. - Connection timed out connect 에러 (0) | 2024.08.07 |