로그인 / 등록 Account

클라우드 네이티브 애플리케이션

서비스 지향 아키텍처(SOA)란?

Jump to section

서비스 지향 아키텍처(SOA)는 네트워크에서 공통의 통신 언어를 사용하는 서비스 인터페이스를 활용하여 소프트웨어 구성 요소를 다시 사용할 수 있게 만드는 소프트웨어 설계 유형입니다. 

서비스란 독립적인 소프트웨어 기능 단위 또는 기능 모음을 가리킵니다. 서비스는 지정된 정보를 검색하거나 작업을 실행하는 등 구체적인 태스크를 완료하도록 설계되어 있습니다. 서비스에는 완전한 개별 비즈니스 기능을 수행하는 데 필요한 코드와 통합 데이터가 들어 있으며, 원격으로 서비스에 액세스할 수 있고 독립적으로 상호작용하거나 업데이트할 수 있습니다.

다시 말해 SOA는 별도로 배포 및 유지관리되는 소프트웨어 구성 요소를 통합하고, 이러한 구성 요소가 서로 통신하고 연동되도록 함으로써 여러 시스템에서 실행되는 애플리케이션을 구성할 수 있습니다.

작동 방법

1990년 말에 SOA가 상용화되기 전에는 어떤 애플리케이션을 다른 시스템의 서비스와 연결하려면 접속, 라우팅, 데이터 모델 변환 등 수준 높은 P2P(point-to-point) 통합을 비롯하여 복잡한 프로세스를 거쳐야 했고, 이후 새로운 프로젝트를 할 때마다 개발자가 이 과정을 반복해야 했습니다. 이를 “모놀리식(monolithic)” 모델이라고 하는데, 애플리케이션 전체의 코드가 하나의 배포에 구현되기 때문입니다. 모놀리식 모델에서는 애플리케이션의 어느 측면이 제대로 작동하지 않을 경우 애플리케이션 전체를 잠시 오프라인 상태로 전환한 다음 문제를 해결하고 새 버전을 다시 배포해야 했습니다. 

SOA에서는 요청을 보내거나 데이터에 액세스할 때 SOAP, JSON, ActiveMQ, Apache Thrift와 같은 표준 네트워크 프로토콜을 사용하여 서비스를 공개하므로 개발자가 처음부터 새로 통합할 필요가 없습니다. 그 대신 엔터프라이즈 서비스 버스(ESB)라는 패턴을 사용하면 됩니다. ESB는 중앙화된 구성 요소와 백엔드 시스템을 통합한 다음 이를 서비스 인터페이스의 형태로 제공합니다.

서비스 지향 아키텍처(SOA)에서는 서비스끼리 "느슨한 결합(loose coupling)" 시스템을 사용하여 통신합니다. 이런 식으로 어떤 시스템 또는 네트워크 내의 여러 구성 요소("요소")를 서로 연결하면 상호 의존도를 최소한으로 줄이면서도 정보를 전달하거나 프로세스를 조율할 수 있습니다. 이렇게 해서 사실상 새로운 애플리케이션이 만들어집니다.  

모놀리식 방식보다 나은 점

  • 출시 일정 단축 및 유연성 향상: SOA에서는 서비스 재사용이 가능하므로 훨씬 더 쉽고 빠르게 애플리케이션을 조합할 수 있습니다. 즉, 모놀리식 애플리케이션처럼 개발자가 매번 새로 시작하지 않아도 됩니다. 
  • 신규 시장에서 레거시 인프라 활용: SOA에서는 개발자가 어떤 플랫폼 또는 환경의 기능을 선택한 다음 새로운 플랫폼 또는 환경에 확대 적용하기가 더 수월합니다. 
  • 더 효율적인 애자일 개발 방식으로 비용 절감
  • 손쉽게 유지관리: 모든 서비스는 독립적으로 완성된 형태이므로 다른 서비스에 영향을 주지 않고 필요에 따라 수정하고 업데이트할 수 있습니다. 
  • 확장성: SOA에서는 여러 가지 서비스, 플랫폼, 프로그래밍 언어로 실행할 수 있기 때문에 확장성이 획기적으로 향상됩니다. 또한 표준화된 통신 프로토콜을 사용하는 SOA에서는 클라이언트와 서비스 간의 상호 작용을 줄일 수 있습니다. 이러한 상호 작용이 줄어들면 애플리케이션을 더 부담 없이 편리하게 스케일할 수 있게 됩니다. 
  • 안정성 강화: 큰 코드보다 작은 서비스를 디버깅하기가 더 쉽기 때문에 SOA에서는 더 안정적인 애플리케이션을 만들 수 있습니다.
  • 편리한 이용: SOA 기능은 누구나 이용 가능합니다.

SOA와 마이크로서비스 비교

서비스 지향 아키텍처에서 처음 선보인 서비스의 개념이 오늘날 클라우드 컴퓨팅가상화(미들웨어, 마이크로서비스 등)의 주요 구성 요소로 발전했습니다. 

SOA와 마이크로서비스는 그 유사성 때문에 혼동하기 쉽습니다. 이 둘의 근본적인 차이점은 범위에 있습니다. SOA가 전사적인 아키텍처 접근 방식이라면 마이크로서비스는 애플리케이션 개발 팀 내의 구현 전략입니다. 

그리고 각각의 구성 요소와 통신하는 방법도 다릅니다. SOA는 ESB를 사용하는 반면, 마이크로서비스끼리는 언어의 제약이 없는 API를 통해 스테이트리스(stateless) 방식으로 통신합니다. 마이크로서비스의 API에는 언어의 제약이 없기 때문에 개발 팀에서 사용하고 싶은 툴을 선택할 수 있습니다. 따라서 마이크로서비스의 내결함성과 유연성이 더 우수할 수 있습니다.

 

Red Hat과 마이크로서비스

컨테이너 기술의 발전에 힘입어 마이크로서비스는 클라우드 네이티브 애플리케이션의 기반으로 자리잡았습니다. Linux 컨테이너의 형태로 배포되고 메시지 라우팅을 위해 메쉬 네트워크 또는 API를 통해 연결된 마이크로서비스는 서로 느슨하게 결합되어 있습니다. 

각 요소가 하나의 비즈니스 기능을 구현하고, 소규모 DevOps 팀에서 지속적인 통합(Continuous Integration, CI)과 지속적인 제공(Continuous Delivery, CD) 같은 워크플로우에 따라 각 요소를 독립적으로 개발합니다. 따라서 모놀리식 개발 주기의 제약에서 벗어나 더 빠른 개발, 자동 배포, 정기적인 업데이트가 가능합니다. 

Red Hat은 Red Hat® Enterprise Linux®, Red OpenShift 등이 포함된 Red Hat 오픈소스 포트폴리오를 통해 여러 기업과 협력할 수 있습니다. 빠른 속도와 우수한 적응성을 자랑하는 클라우드 컴퓨팅 환경으로 인프라 및 애플리케이션 개발 업무를 점차 이전하는 한편 기존 인프라를 최대한 활용하고자 하는 기업이라면 Red Hat과 파트너십을 활용해 보세요. 

Red Hat과 마이크로서비스에 대한 추가 정보