본문 바로가기
SW공학

[SW공학] 아키텍처

by qoth_0 2023. 12. 6.
728x90
반응형

모놀리식 아키텍처

  • 단일 대규모 애플리케이션
    • 모놀리식 아키테거는 애플리케이션의 모든 기능이 하나의 큰 시스템으로 구축되는 방식
  • 통합된 개발 접근
    • 애플리케이션의 모든 구성요소가 하나의 코드베이스에 포함되어 있으며, 이로 인해 소스코드가 서로 영향을 받아 배포 및 테스트가 복잡하고 어려워짐
  • 관리 및 유지보수의 복잡성
    • 상호 영향도
      • 하나의 모듈을 수정할 때, 이를 참조하거나 영향을 받는 모든 모듈들도 영향을 받을 수 밖에 없는 구조
    • SW아키텍처의 복잡도와 배포의 어려움
      • 소스코드의 영향도로 인해, 배포도 팀마다 불가능하고 전체 배포 시간을 정하여 모든 소스코드를 한꺼번에 반영.
      • 일반적으로 새벽시간이나 DB작업 등 복잡한 작업의 경우엔 새벽에 진행. 심지어 변경의 규모가 큰 작업일 경우 명절 등 공휴일을 정해 배포
    • 시스템 구성의 복잡성
      • 시스템이 복잡해 개발의 영향도 파악이 어려움

MSA 아키텍처 (=컨테이너 화)

  • 폭포수 개발바어본에서 나오는 아키텍처가 모놀리식이라면, 애자일하게 일하는 조직에서 취할수있는 아키텍처는 MSA(Micro Service Architecture)
  • 독립적이고 작은 서비스들로 구성된 시스템을 의미
  • 서비스 마다 최적의 기술을 선택 가능 - 언어가 달라도 가능
    • 로직이 복잡하면 자바가 효율적
    • 로직이 단순하면 노드가 효율적
  • 모놀리식에서 문제의 원인이었던 서비스들간의 의존성이 약화되거나 제거돼 느슨한 결합 상태로 구성
  • 서비스는 저마다 데이터베이스를 가지며, 각 서비스마다 더 적합한 기술이 사용
  • 서비스의 수정이 발생하여도 다른 서비스로의 영향이 없거나 적기 때문에, 독립적 인 개발 및 배포가 가능하기 때문에 빈번한 배포 가능
  • 장애가 발생하더라도 장애 범위가 서비스에만 국한
  • 특정 이벤트로 대량의 트래픽이 몰릴 경우, 해당 서비스에만 컴퓨팅 리소스를 더 투입하는 스케일 아웃 전략(컴퓨터 하나 늘림)을 적용 - 스케일업은 컴퓨터 한대의 성능을 높임

MSA 통신 방식

  • API 기반 통신 - 동기
    • Application Programming Interface
    • 소프트웨어나 시스템 간의 상호작용을 가능하게 하는 규약 또는 인터페이스
    • 즉, 소프트웨어 컴포넌트 간의 ‘연결고리 역할을 하며, 사용자들이 복잡한 코드를 직접 작성하지 않고도 특정 기능에 대한 정보를 받거나 구현하는데 도움
    • ex) 한국거래소 API를 통해 주식시세 받기, 두나무 API를 통해 코인 시세 받기, 윈도우 API를 통해 쉽게 폴더 생성 및 파일생성, java API를 통해 쉽게 문자열처리 등
    • API 기반 통신은 주로 동기적 처리를 위한 용도
      • ex) 주문서비스에서 회원정보가 필요할 때, 회원 ID를 가지고 회원 서비스를 호출하여 정보를 조회
  • 이벤트 기반 통신 - 비동기(큐)
    • 비동기 또는 독립적 처리를 위한 용도
    • 큐엔 PUBLISHER와 SUBSCRIBER가 있음
    • 주문이 발생하면(신규 주문 이벤트가 발생하면) 주문 정보를 가진 메시지를 발행하고, 재고 서비스나 앱 푸시 서비스에서 해당 메시지를 구독하여 후속 처리
      • 주문, 재고서비스에 큐를 연결하여 주문 요청 발생 시 큐에 저장됨.
      • 순차적으로 큐에서 저장된 요청이 재고 서비스로 이동
      • 이때 주문 서비스는 발행하는 PUBLISHER, 재고 서비스는 소비하는 SUBSCRIBER가 됨
    • 큐를 이용해서 요청을 던지고 빠르게 회전 - 성능
    • SUBSCRIBER인 B 서버가 죽었을 때 동기는 응답받을 때 까지 계속 기다려야해서 성능이 느리고, B가 죽어서 요청이 들어왔느지도 몰라서 구동이 안된다. 큐를 사용하면 큐에 저장되어 있기 때문에 B가 죽어있는 동안에도 큐에는 쌓이면서 B가 살아나면 다시 요청을 받아 응답할 수 있따.- 안정성 높아짐

msa와 컨테이너 환경구성

  • msa는 경량화된 아키텍처로서 분산 아키텍처로 구성
    • 경량화된 서버인 docker container와 같은 컨테이너 기반 아키텍처에 적합
    • 확장가능성에 염두를 둔 msa 설계사상과 확장에 유연하고 용이한 이미지 기반의 컨테이너 서버구성은 상호 적합한 기술 선택지
    • 쿠버네티스(k8s)와 같은 컨테이너 오케스트레이션 기술 덕분에 대규모 컨테이너 시스템을 기존의 legacy보다 효율적으로 관리할 수 있는 점이 큰 장점

  • k8s의 활용과 msa
    • AWS에 쿠버네티스 - EKS (대규모)
    • ECS 는 소규모
    • 자동화된 배포와 롤아웃 관리를 통해 msa 환경에서의 빈번한 수정과 배포 가능
    • 자동 확장과 로드밸런싱
      • 특정 서비스의 고 트래픽 상황 시 빠른 자동확장 서비스와 로드밸런싱
    • 서비스 검색과 네트워킹을 통한 내부 통신 용이 - 인터넷까지 안가고 api 게이트웨이를 통해 내부적 통신 가능
      • 내부 서비스간의 통신 용이와 확장성이 용이하게 함으로서 msa 컨테이너간의 통신에 최적화
    • 자원 관리 및 최적화
    • 서비스 health check 자동관리
      • 특정 컨테이너가 down 된 상황을 자동으로 인지하고 컨테이너 재생성 또는 서비스 자동 재시작 기능
    • 단점
      • learning curve(배우기 어려움)

728x90
반응형

'SW공학' 카테고리의 다른 글

[SW공학] JIRA 활용  (1) 2023.12.06
[SW공학] 소프트웨어 개발 방법론  (2) 2023.12.06