{{위키데이터 속성 추적}}
'''서비스 지향 아키텍처'''(Service Oriented Architecture, 약칭 SOA 「에스오에이」혹은 「소아」로 발음)란 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상의 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론이다. 업무 처리 변화를 시스템에 빠르게 반영하고자 하는 수요에 대응하기 위해 2004년부터 IT 업계에서 주목을 하고 있다.

== 정의 ==
* 토마스 얼은 그의 저서 [http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788931549386&orderClick=LAG SOA 서비스 지향 아키텍처]에서 서비스지향 아키텍처(SOA)를 다음과 같이 정의하고 있다. 최신 SOA는 공개, 기민성, 확장, 연합, 자립적 요소들로 구성된 조합가능한 아키텍처, 서비스 품질, 다양한 벤더, 상호 운영성, 서비스 발견 그리고 잠재적으로 재사용 가능한 서비스들이 웹서비스로 구현된다. SOA는 비지니스 로직과 기술을 추상화하여, 이 도메인 간에 느슨한 결합을 유도한다. SOA는 과거 플랫폼의 진화물로서, 전통적인 아키텍처의 특징들을 고스란히 가지고 있으며, 명확한 원칙을 가지고 SOE를 지원하며 서비스 지향을 촉진한다. SOA는 엔터프라이즈 환경을 이상적으로는 표준화하지만, 치밀한 사전 계획에 의한 이전 필요성과 현재도 진화하고 있는 기술에 대한 지원만이 이러한 목적을 달성할 수 있다.

* 책 “Enterprise SOA(Dirk Krafzg, Karl Banke, Dirk Slama)”에서는 서비스 지향 아키텍처를 “애플리케이션 프론트엔드, 서비스, 서비스 리포지토리, 서비스 버스의 주요 개념에 바탕을 둔 소프트웨어 아키텍처이다. 서비스는 계약, 하나 이상의 인터페이스, 그에 대한 구현으로 이루어진다.”라고 정의 하고 있다.

* W3C의 Web Service Architecture Working Group에서 활동하고 있는 Hao He 박사는 “상호 작동하는 시스템 사이를 느슨하게 연결하려는 목적을 가진 아키텍처(Service Oriented Architecture is an architectural style whose goal is to achieve loose coupling among interacting software agents)”라고 정의 하고 있다.

== 구성요소 ==
* 서비스 사용자(Service Consumer): '서비스 제공자'에 의해 제공되고 있는 하나 이상의 서비스를 사용.
* 서비스 제공자(Service Provider): '서비스 사용자'가 호출 시 입력하는 값을 가공하여, 그게 해당되는 결과를 제공. 경우에 따라 '서비스 제공자'는 또 다른 '서비스 제공자'의 서비스를 사용하는 '서비스 사용자'가 될 수 있음.
* 서비스 레지스트리(Service Registry): 서비스에 대한 설명정보(description)를 저장. '서비스 제공자'는 자신이 제공하고 있는 서비스를 등록하고, '서비스 사용자'는 자신의 원하는 서비스를 발견하여 사용함.
=== 서비스 ===
* 명확한 기능적인 의미를 지닌 소프트웨어 컴포넌트로, 고차원의 비즈니스 개념을 캡슐화 하고 있는 것을 말한다.<ref>엔터프라이즈 SOA</ref>
* SOA의 관점에서 서비스는 인터페이스를 통해 자신이 가진 비즈니스 프로세스를 처리할 수 있는 컴포넌트로 정의된다. 서비스는 인터페이스와 구현 부분으로 구성된다. 서비스가 가지는 특징을 다음과 같이 3가지로 요약할 수 있다.<ref name="atrri1">[http://blog.naver.com/clickspace/120026142040 네이버블로그]</ref>
** 서비스의 인터페이스는 플랫폼에 독립적이다.
** 서비스는 동적으로 검색될 수 있으며, 호출될 수 있다.
** 서비스는 self-contained하다. 즉, 자신의 상태를 스스로 유지한다.

=== 메시지 ===
SOA를 이루는 두 번째 중요한 개념은 메시지이다. 서비스 제공자와 서비스 사용자는 메시지를 통해 서로 통신한다. 서비스 제공자는 서비스 명세를 통해 자신이 가진 서비스의 인터페이스를 공개하는데, 이 명세 내에는 서비스가 제공하는 기능과 이를 이용하기 위해 사용자와 주고 받아야 하는 메시지의 형식이 정의되어 있다. SOA 관점에서 서비스는 플랫폼 독립적이어야 하므로, SOA에서 정의되는 메시지는 특정 기술에 독립적이어야 한다.<ref name="atrri1"/>

== 특징 ==
* [[서비스]]는 발견이 가능하고 동적으로 바인딩된다.<ref name="atrri1" />
* 서비스는 컴포넌트와 같이 독립된 모듈이다.<ref name="atrri1" />
* 서비스의 플랫폼간 상호 운용이 가능하다.<ref name="atrri1" />
* 서비스는 느슨하게 연결된다.<ref name="atrri1" />
* 서비스는 네트워크 주소로 접근 가능한 인터페이스를 갖는다.<ref name="atrri1" />
* 서비스는 위치 투명성을 제공한다.<ref name="atrri1" />
* 서비스의 조립이 가능하다.<ref name="atrri1" />
* 서비스는 자기 치유(self-healing)를 지원한다.<ref name="atrri1" />

== 참고 문헌 ==
<references />

== 관련도서 ==
* [http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788931549386&orderClick=LAG SOA 서비스 지향 아키텍처] - 저자 : 토마스 얼, 출판사 : 성안당
* [http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788995440766&orderClick=LAH SOA 서비스 지향 아키텍처] - 저자 : 에릭 마크스 & 마이클 벨, 출판사 : 엠플래닝
* 엔터프라이즈 SOA - 저자 : 더크 크래프지그 & 칼 방케 & 더크 슬라마, 출판사 : 태극미디어
* SOA, What & How: A Road to SOA - 저자 : 전병선, 출판사 : 와우북스

== 같이 보기 ==
{{위키공용분류}}
* [[웹 서비스]]
* [[API]]
* [[소프트웨어 구조]]

{{소프트웨어 공학}}
{{전거 통제}}

[[분류:소프트웨어 구조]]
[[분류:정보 기술 관리]]
[[분류:프로그래밍 패러다임]]
[[분류:웹 서비스]]
[[분류:서비스 지향]]
[[분류:아키텍처 패턴]]