ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링] 아키텍쳐
    스프링 2023. 10. 10. 11:57
    728x90

    아키텍쳐란?

    "하나의 서비스가 어떻게 구성이 되며 어떻게 동작이 된다" 라고 표현이 되는데,

    즉, 서비스의 동작 원리를 나타내는 것 입니다.

     

    프로젝트를 리딩할때, 해당 프로젝트에 대한 핵심 가치를 기준으로 내린 결정들의 집합이라고도 생각해 볼 수 있다.

     

    결국 소프트웨어 개발에서 중심축 (요구 분석부터 구현 테스팅까지 작업의 뼈대 ) 역할을 한다

     

    아키텍쳐 설계란?

    시스템에 대한 아키텍쳐를 정하는 의사 결정 과정이라고 생각하면 됩니다!

    즉, 소프트웨어 아키텍쳐란 의사 결정의 집합체라고 볼 수 있다.

     

    아키텍쳐 스타일

    1. 클라이언트 서버형

     

    • 서버 - 강력한 성능으로 자원을 관리하며 클라이언트가 요청하는 기능이나 자원을 제공
    • 클라이언트 - 서버에 있는 자원의 사용을 위하여 서버에 접속함

    클라이언트 서버형 ( 출처 - 소프트웨어 공학의 모든 것 277page )

     

    장점

    • 데이터 집중화 - 모든 데이터는 서버에 모아서 데이터의 구성과 관리를 단순화 함
    • 보안 - 클라이언트의 요청을 모니터링하고 기록할 수 있음, 인증이 완료된 클라이언트만 서비스에 접근

    단점

    • 병목 - 서버와 통신하려는 클라이언트가 증가하면 서버의 부하가 올라가 네트워크 속도가 느려짐
    • 비용 - 설치 및 관리 비용이 일반적으로 높음
    • 비강인성 - 서버가 고장 나면 클라이언트는 더 이상 작동할 수 없다

     

    2. 계층형

     

    • 소프트웨어의 기능을 수직으로 상호 작용하는 여러 층으로 분할하는 형태
    • 각 층 사이는 메시지를 교환

    계층형 스타일 ( 출처 - 소프트웨어 공학의 모든 것 278page )

    장점

    • 추상화 - 시스템에 대하여 좋은 추상적인 뷰를 제공 -> 각 층의 역할과 책임, 관계를 잘 이해가능
    • 캡슐화, 응집, 결합 - 자세한 데이터나 메소드, 자원, 구현 등이 각 층 안에 캡슐화 되어 층 사이에 가정하거나 이해해야 할 사항이 적음 -> 각 층의 응집이 높고 층 사이의 결합이 적다
    • 재사용성 - 각 층의 의존도가 적어 쉽게 다른 모듈로 교환할 수 있고, 다른 시스템에 사용 가능함

    단점

    • 이웃 층과의 커뮤니케이션이 제한적이며, 결합력이 낮아 시스템을 계층으로 구성하기 쉽지 않음

     

     

    3. 이벤트 기반 아키텍처

     

    • 구성 - 이벤트 생산자(이벤트 스트림 생성)와 이벤트 소비자(이벤트 수신 대기)로 구성
    • 이벤트 -> 실시간으로 전달되어 발생하는 즉시 소비자가 응답할 수 있어야 함
    • 상태기반 처리가 대부분 -> 이벤트와 현재 상태에 따라 다른 처리를 함

    이벤트 기반 아키텍처 스타일의 다이어그램 ( 출처 - 소프트웨어 공학의 모든 것 279page )

     

    장점

    • 캡슐화, 응집 - 이벤트의 생산자와 소비자가 분리되어 캡슐화
    • 확장성 - 시스템에 새 소비자를 쉽게 추가할 수 있음
    • 이벤트 도착 즉시 소비자가 이벤트에 응답할 수 있음
    • 하위 시스템에서 이벤트 스트림을 독립적으로 확인할 수 있음

    단점

    • 복잡성 - 상태에 따라 복잡하고 정교한 제어가 필요함
    • 테스팅 - 각 상태에 허용된 이벤트가 제한적인 것을 정확히 테스트하여야 하며, 허용되지 않은 이벤트에 대한 제어 필요

     

    4. MVC(Model-View-Controller)

     

    사용자 인터페이스로부터 비즈니스 로직과 데이터를 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직 서로 영향없이 쉽게 고칠 수 있는 아키텍처

     

     

    구성요소

     

    - 컨트롤러

    • 어떻게 할지를 정의
    • 요청을 받아 model & view를 연결

    - 모델

    • 무엇을 할지 정의
    • 모델의 변화에 따른 적용 가능한 명령(추가,제거,수정)을 내릴 수 있음 [ 비즈니스 로직이 있다 ]

    - 뷰

    • 결과물을 화면을 통해서 보여준다.

    MVC 스타일 ( 출처 - 소프트웨어 공학의 모든 것 281page )

     

    장점

    • 느슨한 결합, 확장성 - 각 컴포넌트의 결합이 약해 다른 부분에 영향을 주지 않고 수정 가능
    • 다수의 다른 뷰 - 하나의 모델을 위하여 다수의 다른 뷰를 쉽게 제공할 수 있다
    • 비동기 - 비동기 기술을 이용하여 애플리케이션을 빠르게 로딩할 수 있고, 개발자도 각 컴포넌트를 독립적으로 빠르게 개발 가능

    단점

    • 복잡도 - 컴포넌트의 분리로 인하여 메커니즘 이해를 위한 복잡도가 올라갈 수 있음
    • 비효율성 - 뷰에서 데이터를 접근하여야 하는 비효율적인 부분이 있음
    • 각 컴포넌트 구현을 위한 여러 가지 기술에 대한 이해가 필요

     

    5. 파이프 필터

     

    필터 사이에 데이터를 이동시키며 단계적으로 처리하는 구조

     

    데이터의 흐름(입,출력) 필터 구성 요소(데이터의 변환 수행)로 구성되어 있음

     

    예시 > 컴파일러

    파이프 필터 아키텍처 ( 출처 - 소프트웨어 공학의 모든 것 281page )

     

    위 그림에서 데이터는 파이프필터를 통하여 단방향으로 흐르게 된다.

     

    장점

    • 단순성 - 시스템을 일련의 입력, 출력, 변환으로 쉽게 볼 수 있음
    • 재사용 - 다른 응용프로그램에서 필터를 쉽게 재사용 할 수 있고 교체를 할 수도 있음
    • 병렬성 - 병렬 처리로 구현하기 쉬운 아키텍처를 제공함

    단점

    • 자원의 낭비 - 시간과 공간을 낭비할 수 있음
    • 오류 조건을 쉽게 처리할 수 있는 방법이 없음 -> 오류는 별도 출력 스트림으로 처리해야 함

     

    6. 데이터 중심 아키텍처

     

    공유된 자료가 중요한 시스템에서 채택하는 스타일

     

    공유 데이터 저장소, 공유 데이터 접근자(공유 데이터 추가, 삭제, 수정 가능) 구성

     

    ( 각 접근자는 서로에 대해 모름 )

     

    접근자 간의 통신은 공유 데이터에 대한 업데이트를 통하여 간접적으로 수행된다.

     

    데이터 중심 아키텍처 ( 출처 - 소프트웨어 공학의 모든 것 282page )

     

    데이터 중심 아키텍처의 유형

     

    - 블랙보드

    • 공유 데이터에는 제어 스레드가 포함됨
    • 공유 데이터 저장소는 옵서버 디자인 패턴을 사용하여 공유 데이터 변경시 클라이언트에게 알림

    - 리파지토리(repository)

    • 클라이언트는 공유 데이터를 질의하여 변경 사항을 발견함

    장점

    • 낮은 결합 - 접근자 간의 통신은 공유 데이터 저장소를 통해 이루어짐 -> 다른 접근자에 영향 X -> 접근자 사이에 느슨한 결합을 유지
    • 확장성 - 각 접근자의 수정, 확장이 용이함

    단점

    • 단일 장애지점 - 공유 데이터의 장애로 전체가 장애를 일으킬 수 있는 단일 장애 지점이 있음

     

    7. Peer-to-Peer 스타일

     

    각 컴포넌트는 동등하여 서비스를 요청하는 클라이언트가 될 수도 있고, 서비스를 제공하는 서버 역할을 할 수도 있음

     

    시스템은 동일한 수신, 전송 데이터 양을 가지므로 대칭적인 시스템이 된다

    Peer-to-Peer 스타일 ( 출처 - 소프트웨어 공학의 모든 것 284page )

     

    블록체인 기술이 Peer-to-Peer 아키텍처를 기반으로 하고 있음

    >> 보안을 해결하기 위해 각 노드가 상대 노드들을 감시하고 일관성을 유지함

     

    장점

    • 전담하는 애플리케이션이나 서버가 없음
    • 규모 확장성과 신뢰성이 개선됨
    • 컴포넌트에 고장이 있어도 전체 시스템은 가동 됨 ( 단일 장애지점X )

    단점

    • 보안에 취약할 수 있음
    • 중앙에서 제어할 수 없음
    • 공유된 자원으로 성능이 떨어질 수 있음

     

    - 아키텍처 스타일의 비교

     

    스타일 장점 단점
    클라이언트 서버 - 클라이언트가 요청하는 서비스를 종합적으로 모델링하기 좋음 - 서비스 요청이 서버에서 별도의 스레드로 처리됨
    - 프로세스 사이의 커뮤니케이션이 오버헤드가 될 수 있음 (클라이언트들이 다른 표현을 요구하기 때문)
    계층형 - 하위층이 여러 상위층에 의하여 사용됨
    - 각 층을 정확히 정의하면 각 층이 표준화 될 수 있음
    - 다른 층에 영향을 주지 않고 수정을 층 안에 국한시킬 수 있음
    - 광범위하게 적용하기 어려움 (이웃 층과의 커뮤니케이션이 제한적)
    - 특정한 층이 상황에 따라 통과될 수도 있음
    이벤트 기반 - 이벤트 생산자, 소비자 연결을 쉽게 하고 추가할 수 있음
    - 분산 응용에 효과적으로 적용 가능
    - 상태에 따른 복잡하고 정교한 제어가 필요함
    - 큰 규모에 적용하기 어려움
    MVC - 동일 모델에 여러 가지 뷰를 런타임에 쉽게 연결하고 끊을 수 있음 - 복잡도가 증가하고 이로 인하여 사용자 액션을 위하여 불필요한 수정이 증가될 수 있음
    파이프필터 - 병렬처리를 가능하게 함
    - 쉽게 필터를 추가할 수 있고, 시스템이 확장될 수 있음
    - 느린 필터에 의하여 시스템의 성능이 제한적이다
    - 필터를 이동하면서 자료의 변환 오버헤드가 발생할 수 있음
    데이터 중심 - 새로운 응용을 쉽게 추가
    - 데이터 공간의 확장이 용이함
    - 모든 부분이 영향을 받아 중심 데이터의 구조를 변경하는 것이 쉽지 않다
    Peer-to-Peer - 중앙집중을 피할 수 있음
    - 노드 하나의 고장으로 시스템이 멈추지 않음
    - 자원과 컴퓨팅 파워의 확장성이 뛰어남
    - 서비스의 품질을 보장하기 어려움
    - 보안을 보장하기 어려움
    - 성능이 노드의 수에 좌우됨

     

    '스프링' 카테고리의 다른 글

    [스프링] 트랜잭션  (2) 2023.11.01
    [스프링] Spring Security  (0) 2023.10.24
    [스프링] IoC, DI  (0) 2023.10.04
    [스프링] jar, war 차이점  (0) 2023.02.01
    [스프링] Loging 로깅  (0) 2023.02.01
Designed by Tistory.