본문 바로가기
개념/etc

WebService / SOAP / WSDL / EAI

by Hwanii_ 2024. 1. 24.
728x90

WebService란 ?

 

서로 다른 컴퓨팅 환경에서 사용되는 모든 애플리케이션들이 직접적으로 소통하고 실행될 수 있도록 동적 시스템 환경을 구현해주는 소프트웨어 구성 요소를 의미.

 

'서로 다른 컴퓨팅 환경' 의 의미는 다음과 같다.

 

서로 다른 종류의 컴퓨터 시스템, 운영체제 (OS), 네트워크 환경, .. 등등

여러가지 다양한 하드웨어와 소프트웨어가 사용되고 있으므로 서로 다른 환경에서 동일한 소프트웨어가 동작하도록 하는 작업이 반드시 필요하게된다.

 

위의 목적을 실현시키기 위해 표준 기술이 사용되는데, 대표적인 최초의 표준 프로토콜로 SOAP이 있다.

 

SOAP : Simple Object Access Protocol (단순 객체 접근 프로토콜)

 

정리하자면, SOAP 프로토콜을 통해 WebService 간에 통신을 진행한다.

 

SOAP은 XML (Extensible Markup Language) 형식을 사용해서 데이터를 교환한다.

 

 

 

SOAP 프로토콜을 사용할 때 WSDL 이라는 것이 필요하다.

 

WSDL : Web Services Description Language (웹 서비스 기술 언어 == 서비스 설명자)

 

즉, WSDL은 웹 서비스의 기능, 작동 방식, 메세지 형식, 네트워크 프로토콜 등을 기술하는 언어를 의미한다.

 

WSDL은 주로 SOAP 기반의 프로토콜을 사용하는 웹 서비스에서 사용된다.

(WSDL은 하드웨어 보다는 주로 웹 서비스에 사용됌)

 

WSDL도 XML 형식으로 작성된다.

 

(실제로 개발자가 직접 WSDL을 작성하지는 않는다. 번거롭고 실수를 하면 오류의 여지가 생기기 때문이다)

(대부분의 경우 웹 서비스 프레임워크를 사용해서 자동으로 WSDL을 생성하고 관리하는게 보편적이다)

(스프링부트를 예시로 들면 Spring Web Services (SWS) 라는게 있고, 이것을 사용해서 웹 서비스를 개발하고 관리한다)

(어노테이션을 사용해서 여러 정보들 (엔드포인트, 페이로드, .. 등등) 을 정의한다)

 

 

예시)

 

더보기

 

WSDL은 다음과 같은 주요 요소를 포함한다.

 

1) 포트 타입 (Port Type) : 서비스가 제공하는 작업을 정의.

각 작업에 대한 입력 / 출력에 대한 메세지 타입을 정의.

 

2) 바인딩 (Binding) : 실제로 사용될 네트워크 프로토콜과 메세지 형식을 정의.

주로 SOAP을 사용하므로 SOAP 바인딩이 일반적이다.

 

3) 서비스 (Service) : 엔드포인트 URL과 해당 서비스에서 제공하는 작업 (Operation) 들을 결합해서 전체 서비스를 정의.

 

4) 메세지 (Message) : 데이터 요소를 정의하고, 데이터 요소들이 입력 / 출력으로 사용할 수 있도록 구성.

 

 

 

WSDL 작성 예시

 

간단한 블로그 서비스를 가정하고, 글 작성 + 글 조회 라는 2개의 작업을 제공하는 웹 서비스.

 

CreatePost와 GetPost라는 2개의 작업을 가진 BlogPortType을 정의한다.

 

(물론 실제로 개발자가 아래와 같이 직접 WSDL을 작성하지는 않는다)

(웹 서비스 프레임워크가 자동으로 WSDL을 생성하고 관리한다)

 

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:tns="http://example.com/blogservice"
             targetNamespace="http://example.com/blogservice"
             name="BlogService">

  <!-- Port Type -->
  <portType name="BlogPortType">
    <operation name="CreatePost">
      <input message="tns:CreatePostInput"/>
      <output message="tns:CreatePostOutput"/>
    </operation>
    <operation name="GetPost">
      <input message="tns:GetPostInput"/>
      <output message="tns:GetPostOutput"/>
    </operation>
  </portType>

  <!-- Message Types -->
  <message name="CreatePostInput">
    <part name="title" type="xsd:string"/>
    <part name="content" type="xsd:string"/>
  </message>

  <message name="CreatePostOutput">
    <part name="postId" type="xsd:int"/>
  </message>

  <message name="GetPostInput">
    <part name="postId" type="xsd:int"/>
  </message>

  <message name="GetPostOutput">
    <part name="title" type="xsd:string"/>
    <part name="content" type="xsd:string"/>
  </message>

  <!-- Binding -->
  <binding name="BlogBinding" type="tns:BlogPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="CreatePost">
      <soap:operation soapAction="http://example.com/blogservice/CreatePost"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
    <operation name="GetPost">
      <soap:operation soapAction="http://example.com/blogservice/GetPost"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>

  <!-- Service -->
  <service name="BlogService">
    <port name="BlogPort" binding="tns:BlogBinding">
      <soap:address location="http://example.com/blogservice"/>
    </port>
  </service>

</definitions>

 

SOAP과 WSDL은 현재에도 사용되고 있지만, 최근에는 RESTful한 웹 서비스 및 JSON 데이터 형식을 사용하는 경향이 늘고 있다. 

 

훨씬 더 가볍고 디자인이 간단하기 때문에 대부분의 경우 RESTful한 웹 서비스 및 JSON 형식을 사용한다.

 

클라우드 환경, 모바일 애플리케이션, .. 등등에서 활용도가 높아지고 있다.

 

 

 

 

 

EAI란 ?

 

EAI : Enterprise Application Integration (기업 어플리케이션 통합)

 

EAI는 기업 내에서 사용되는 다양한 응용 프로그램, 시스템, 데이터베이스, .. 등의 여러 IT 자원들을 효과적으로 통합하는 접근 방식 및 솔루션을 의미 한다.

 

EAI의 주요 목표는 기업 내의 다양한 IT 자원들 간에 데이터 및 비즈니스 프로세스를 공유하고 연계함으로써 기업 전체의 효율성을 향상시키는 것이다.

 

한 기업 내의 ERP (전사적자원관리), CRM (고객관계관리), SCP (공급망 계획) 시스템 또는 인트라넷 등의 시스템 간에 서로 데이터를 주고받는 필요성이 생길 수 밖에 없다.

 

데이터를 주고받을 때 각 시스템 간 개별적으로 서로 통신을 하면 시스템 간 개별적인 연결이 너무나 많이 생성되게 된다.

 

그렇다는 것은 유지보수가 어려워진다는 큰 문제점이 발생하게 된다.

 

이런 문제점을 해결하기 위해서 EAI 솔루션을 적용하는 것이다.

 

예시)

 

 

각 시스템은 EAI 솔루션하고만 연결을 하게된다. 다른 시스템들은 모두 EAI를 통해서 진행된다.

 

이로인해 중앙 집중화된 시스템 관리가 가능하고, 각 시스템은 EAI와 연결을 하기위한 인터페이스만 지원하면 되므로 다른 시스템과의 인터페이스는 전혀 고려하지 않아도 된다.

 

EAI 솔루션은 대표적으로 IBM의 WebSphere 등이 있다.

 

EAI의 단점으로는 소규모 시스템에서는 EAI를 적용하기 위해 필요 이상의 개발 비용이 발생하게된다.

 

반응형

'개념 > etc' 카테고리의 다른 글

Quartz / Crontab / Cron 표현식  (1) 2024.01.24
SOA / ESB / OSGI  (0) 2024.01.24
Servlet & Spring MVC  (0) 2023.10.27
Ajax  (1) 2023.10.25
RESTful API  (0) 2023.10.25