서버

WSDL이란?

vamosdev12 2025. 12. 4. 15:38

WSDL은 SOAP 기반 웹서비스에서 **서비스의 모든 구조·규칙을 기술한 문서(계약서)**라고 생각하면 가장 이해가 쉬워요.
쉽게 말해 "이 웹서비스는 이런 함수들을 제공하고, 이렇게 호출해야 하고, 이렇게 응답한다" 라는 것을 XML로 정리한 파일입니다.

아주 직관적으로 설명해줄게요.


🟦 1. WSDL이란?

Web Services Description Language
→ 웹서비스 설명 언어
SOAP API의 설계서(인터페이스 정의서)

즉 WSDL은 SOAP 서비스의:

  • 전달 방식
  • 요청/응답 데이터 구조
  • 사용할 주소(Endpoint)
  • 사용할 프로토콜
  • 에러 형태(fault)

등을 “기계가 읽을 수 있게” XML로 정의한 문서.


🟦 2. WSDL 문서가 필요한 이유

SOAP 서비스는 JSON처럼 유연하지 않고,
반드시 정해진 형식으로 데이터를 보내야 합니다.

그래서 WSDL이 있어야:

  • 클라이언트는 어떤 XML을 보내야 하는지 알 수 있고
  • 서버는 어떤 구조의 XML을 받아야 하는지 알 수 있음
  • 개발 도구(e.g. Eclipse, JAX-WS, .NET)가 자동으로 클라이언트 코드 생성 가능

SOAP 서비스는 WSDL 없으면 쓸 수 없다고 보면 돼요.


🟦 3. WSDL 문서의 기본 구성 요소

WSDL은 크게 4가지 구성 요소로 이해하면 됩니다.


✔ (1) types

서비스에 필요한 데이터 타입 정의 (XSD 기반)

예:

<xs:element name="UserRequest">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="id" type="xs:string"/>
      <xs:element name="name" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

여기서 요청/응답에 사용되는 필드들을 정의함.


✔ (2) message

SOAP 메시지를 구성하는 파라미터 그룹 정의

예:

<message name="getUserRequest">
  <part name="parameters" element="tns:UserRequest"/>
</message>

✔ (3) portType (= 인터페이스)

어떤 “기능(오퍼레이션)”을 제공하는지 정의

예:

<portType name="UserService">
  <operation name="getUser">
    <input message="tns:getUserRequest"/>
    <output message="tns:getUserResponse"/>
  </operation>
</portType>

Java로 표현하면 Interface 메서드 선언과 같은 역할.


✔ (4) binding

통신 방식과 SOAP 규칙 정의

예:

<binding name="UserServiceSoapBinding" type="tns:UserService">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>

여기에서:

  • SOAP 1.1인지, 1.2인지
  • document/literal 인지 RPC 인지

등을 정의.


✔ (5) service

실제 호출할 Endpoint URL 제공

예:

<service name="UserService">
  <port name="UserServicePort" binding="tns:UserServiceSoapBinding">
    <soap:address location="http://example.com/userService"/>
  </port>
</service>

→ “여기로 호출하시면 됩니다”라고 알려주는 부분.


🟦 4. 전체 구조를 한 눈에 보면

문서 구조는 보통 다음 순서:

definitions
 ├── types
 ├── message
 ├── portType
 ├── binding
 └── service

이 구조는 SOAP 서비스 개발과 연계의 핵심이에요.


🟦 5. WSDL을 사용하면 개발자는 어떻게 쓰나요?

✔ Java에서는 보통 이렇게 사용:

wsimport -keep http://example.com?wsdl

→ 자동으로

  • 요청/응답 클래스
  • 서비스 인터페이스
  • 호출 stub
    을 생성해줌.

그래서 개발자는 HTTP XML을 직접 만들 필요 없이:

UserService service = new UserService();
User port = service.getUserServicePort();
port.getUser("1234");

처럼 함수를 호출하듯 사용.


🟦 6. REST API와의 차이 (감 잡기 쉽게)

항목 SOAP + WSDL REST + JSON

규칙 매우 엄격 (정적) 유연 (동적)
문서 WSDL 필수 Swagger/OpenAPI 선택
데이터 XML JSON, XML 등
자동 코드 생성 매우 잘 됨 Swagger 기반으로 가능
보안/트랜잭션 표준화 강함 유연해서 직접 설정

SOAP은 엄격, REST는 유연하다고 보면 됨.


🟦 핵심 요약

  • WSDL은 SOAP 웹서비스의 설계서, 인터페이스 정의서
  • 요청/응답 종류, 데이터 구조, URL 주소 등이 모두 정의됨
  • 5가지 파트(types, message, portType, binding, service)로 구성
  • wsimport 같은 도구로 클라이언트 코드 자동 생성 가능
  • WSDL 없으면 SOAP 서비스 연계 불가

필요하면 WSDL 실제 문서를 예로 들고
"여기서 어떤 값이 요청 필드인지", "어떤 값이 응답인지" 같이
현업 운영자가 로그 분석·연계 확인할 때 보는 포인트도 알려줄게!