1. 정의
서비스 지향 아키텍처(SOA)는 백엔드에서 사용되는 아키텍처 중 하나로 대규모 컴퓨터 시스템을 구축할 때, 애플리케이션의 기능을 비즈니스 적인 의미를 가지는 기능 단위로 묶어서 표준화된 호출 인터페이스(Rest API 등)를 통해 서비스로 구현하고, 이 서비스들을 기업의 업무에 따라 어플리케이션을 구성하는 소프트웨어 개발 아키텍처를 의미합니다.
* 토마스 얼에 의한 정의로는 SOA는 공개, 기민성, 확장, 연합, 자립적 요소들로 구성된 조합가능한 아키텍처, 서비스 품질, 다양한 벤더, 상호 운영성, 서비스 발견 그리고 잠재적으로 재사용 가능한 서비스들이 웹서비스로 구현된다. SOA는 비지니스 로직과 기술을 추상화하여, 이 도메인 간에 느슨한 결합을 유도한다. SOA는 과거 플랫폼의 진화물로서, 전통적인 아키텍처의 특징들을 고스란히 가지고 있으며, 명확한 원칙을 가지고 SOE를 지원하며 서비스 지향을 촉진한다고 합니다.
이 아키텍처는 주로 대용량 분산 시스템 구현에 활용됩니다.
2. 서비스
서비스(Service)란 플랫폼에 종속되지 않은 표준 인터페이스를 통해서 기업의 업무를 표현한 느슨하게 결합되고 상호 조합이 가능한 독립적인 소프트웨어의 컴포넌트를 말합니다.
서비스는 지정된 정보를 검색하거나 작업을 실행하는 등 구체적인 태스크를 구현하고 표현하며, 완전한 개별 비즈니스 기능을 수행합니다.
ex) 계좌이체 서비스, 상품 주문 서비스, 임직원 정보 조회 서비스 등
반대로, 서비스로 적절하지 않은 것은 SMTP 이메일 클라이언트와 같은 기능이 있습니다.
일반적으로 SOA에서 정의하는 서비스는 비지니스 서비스를 말합니다.
다시 말해 SOA는 별도로 배포 및 유지 관리되는 소프트웨어 구성 요소를 통합하고, 이러한 구성 요소가 서로 통신하고 연동되도록 함으로써 여러 시스템에서 실행되는 소프트웨어 애플리케이션을 구성할 수 있습니다.
서비스의 특징으로는 수직적 분할, 표준 인터페이스 기반, 느슨한 결합, 조합 가능 큰 단위의 서비스 분류와 같은 특징이 있습니다.
1) 수직적 분할
수직적 분할은 애플리케이션을 개발할 때 전체 애플리케이션을 여러개의 서비스로 나누고 각각의 서비스를 독립적으로 개발하는 것을 말합니다. 이전에는 데이터 계층, 비즈니스 계층, 뷰 계층과 같이 수평적으로 분리했지만 SOA에서는 각각의 서비스가 데이터 계층, 비즈니스 로직, 뷰에 대한 모듈을 가지고 있고, 각 서비스 간의 의존성이 최소화 됩니다.
2) 표준 인터페이스 기반
서비스가 제공하는 인터페이스는 표준 기술로 구현되어야 하며, 서비스를 사용하고자 하는 사람이 서비스 규약만 가지고도 해당 서비스를 호출할 수 있어야 합니다.
3) 느슨한 결합
의존성을 최소화 합니다.
4) 조합 가능
서비스 컴포넌트들은 서로 하나의 조합된 형태의 애플리케이션을 구성해야하기 때문에 서비스 간에 연결 및 조합이 가능해야 합니다.
5) 큰 단위의 서비스 분류
서비스의 구성 단위나 인터페이스의 단위는 업무 단위를 기본으로 합니다.
3. 메시지
서비스 사용자(Service Consumer): 서비스 제공자에 의해 제공되고 있는 하나 이상의 서비스를 사용하는 사람.
서비스 제공자(Service Provider): 서비스 사용자가 호출 시 입력하는 값을 가공하여, 그게 해당되는 결과를 제공하는 사람입니다.
서비스 레지스트리(Service Registry): 서비스에 대한 설명정보를 저장하며 서비스 제공자는 자신이 제공하고 있는 서비스를 등록하고, 서비스 사용자는 자신이 원하는 서비스를 발견하여 사용합니다.
서비스 제공자와 서비스 사용자는 메시지를 통해 서로 통신합니다. 서비스 제공자는 서비스 명세를 통해 자신이 가진 서비스의 인터페이스를 공개하는데, 이 명세 내에는 서비스가 제공하는 기능과 이를 이용하기 위해 사용자와 주고 받아야 하는 메시지의 형식이 정의되어 있습니다.
SOA 관점에서 서비스는 플랫폼 독립적이어야 하므로, SOA에서 정의되는 메시지는 특정 기술에 독립적이어야 합니다.
4. SOA 아키텍처 모델
1) Fundamental SOA (펀더멘털 SOA) [통합]
가장 기본적인 형태의 SOA.
기존 시스템들을 서비스화하여 각 시스템들을 통합하는 단계입니다. 비즈니스 서비스와 애플리케이션 서비스만 존재하며 이 서비스들의 조합들은 애플리케이션 프론트엔드에서 이루어집니다.
가장 큰 목적은 기존의 시스템을 각각 서비스화 하는 것과 독립되었던 시스템들을 통합하여 하나의 시스템으로 운영한다는 데 있습니다.
2) Networked SOA (네트워크 SOA) [유연성과 통제 추가]
서비스화하여 통합된 SOA 시스템은 시간이 갈수록 크기가 커지게 되고 서비스 간의 호출 관계는 날이 갈수록 복잡해지며 또한 서비스의 내용이 변경 또는 보완되어 의존성에 의해 서비스 간의 수정이 필요한 경우가 발생합니다. 이러한 문제들로 모든 서비스를 하나의 중앙 버스를 통해 관리하여 서비스 간 연결의 복잡도를 해결하고 중재 서비스를 추가함으로써 서비스의 내용이 변경되었을 때 그 차이를 보강해줄 수 있어야 합니다. 다음의 그림에서 중앙 버스 역할을 하는 것이 Enterprise Service Bus(ESB)입니다.
'Backend&Devops > 프레임워크&아키텍처' 카테고리의 다른 글
AOP란? (Aspect-Oriented Prgramming, 관점 지향 프로그래밍) (0) | 2020.08.14 |
---|