Search

서비스 아키텍처

정의

소프트웨어 시스템을 구성하는 구성 요소와 그 구성 요소 간의 관계를 정의하는 패턴
서비스는 독립적으로 배포 및 관리 가능한 기능 단위
서로 통신하여 시스템 전체 기능을 제공

주요 특징

서비스 지향 : 서비스는 특정 기능을 수행하는 독립적인 단위로 구현
느슨한 결합 : 서비스는 서로 간단한 인터페이스를 통해 통신하며, 구현 방식에 대한 의존성을 최소화
재사용성 : 서비스는 여러 애플리케이션에서 재사용될 수 있도록 설계
확장성 : 서비스는 수평적으로 확장하여 성능 및 용량을 늘릴 수 있다.
유연성 : 서비스는 변경에 유연하게 대응하고 새로운 기능을 쉽게 추가할 수 있다.

종류

단일 계층 아키텍처 : 모든 기능을 하나의 서버에서 처리하는 가장 단순한 형태
멀티 계층 아키텍처 : 프레젠테이션, 애플리케이션, 데이터베이스 등 여러 계층으로 나누어 각 계층의 기능을 분리
마이크로서비스 아키턱처 : 각 기능을 독립적인 서비스로 구현하여 서로 통신하는 방식

구성 요소

서비스 : 서비스는 특정 기능을 수행하는 독립적인 단위. 서비스는 서로 통신하여 시스템 전체 기능을 제공
서비스의 특징
독립성 : 서비스는 다른 서비스에 의존하지 않고 독립적으로 작동할 수 있다.
재사용성 : 서비스는 여러 애플리케이션에서 재사용될 수 있도록 설계
확장성 : 서비스는 수평적으로 확장하여 성능 및 용량을 늘릴 수 있다.
유연성 : 서비스는 변경에 유연하게 대응하고 새로운 기능을 쉽게 추가할 수 있다.
인터페이스 : 서비스 간 통신을 위한 규약.
인터페이스의 구성요소
작업 : 서비스가 제공하는 기능을 정의
데이터 : 서비스가 주고받는 데이터를 정의
메시지 : 서비스 간 통신에 사용되는 메시지를 정의
계약 : 서비스 제공자와 서비스 소비자 간의 합의.
계약의 포함 내용
서비스 수준 목표(SLO) : 서비스 제공자가 제공해야 하는 서비스 수준을 정의
보안 요구 사항 : 서비스 제공자가 충족해야 하는 보안 요구 사항을 정의
모니터링 및 보고 : 서비스 제공자가 수행해야 하는 모니터링 및 보고 활동을 정의
레지스트리 : 서비스에 대한 정보를 저장하는 저장소
레제스트리가 저장하는 정보
서비스 이름 : 서비스를 식별하는 이름
서비스 설명 : 서비스가 제공하는 기능에 대한 설명
서비스 인터페이스 : 서비스 간 통신을 위한 인터페이스
서비스 위치 : 서비스가 실행되는 위치
게이트웨이 : 서비스에 대한 오부 접근을 제어하는 중앙 집중식 포인트
게이트웨이의 수행 기능
보안 : 서비스에 대한 부정적인 접근을 처단
로드 밸런싱 : 서비스 요청을 여러 서비스 인스턴스에 분산
모니터링 : 서비스 요청 및 응답을 모니터링
메시징 시스템 : 서비스 간 비동기 통신을 위한 플랫폼
메시징 시스템의 제공 기능
비동기 통신 : 서비스는 서로 직접 연결하지 않고 메시징 시스템을 통해 메시지를 주고받는다.
확장성 : 메시징 시스템은 수평적으로 확장하여 성능 및 용량을 늘릴 수 있다.
안정성 : 메시징 시스템은 메시지 손실 없이 안정적으로 메시지를 전달
관리 도구 : 서비스 아키텍처를 관리하는 데 사용되는 도구
관리도구의 제공 기능
서비스 배포 : 서비스를 배포하고 관리
서비스 모니터링 : 서비스 성능 및 상태를 모니터링
서비스 문제 해결 : 서비스 문제를 해결

용도

시스템 분해 : 복잡한 시스템을 작고 독립적인 서비스 모음으로 분해하는 데 사용
시스템 개발, 배포, 유지 관리 용이
재사용성 향상 : 서비스를 재사용 가능하도록 설계하여 여러 애플리케이션에서 활용할 수 있도록 한다.
개별 효율성을 높이고 비용을 절감
확장성 향상 : 서비스를 수평적으로 확장하여 성능 및 용량을 늘릴 수 있도록 한다.
급증하는 사용자 트래픽이나 데이터 처리량에도 안정적으로 대응할 수 있다.
유연성 향상 : 서비스를 변경에 유연하게 대응하고 새로운 기능을 쉽게 추가할 수 있도록 한다.
시장 변화에 빠르게 대응하고 새로운 비즈니스 기회를 활용할 수 있다.
보안 강화 : 서비스 간 통신을 제어하고 서비스에 대한 외부 접근을 제한하여 시스템 보안을 강화
운영 효율성 향상 : 서비스를 모니터링하고 관리하는 데 사용되는 도구를 제공하여 운영 효율성을 높일 수 있다.
비용 절감 : 개발 효율성을 높이고 운영 효율성을 향상시켜 비용을 절감할 수 있다.

장점

개발 효율성 향상
확장성 향상
유연성 향상
보안 강화
운영 효율성 향상
비용 절감

단점

설계 복잡성 증가
관리 복잡성 증가
성능 저하
보안 취약점 증가