System Architecture

문진영·2022년 9월 13일
0

파이널 프로젝트

목록 보기
2/9

설계

이번 프로젝트를 기획 하면서 SystemArchitecture를 이제 막 입문 하는 수준이어서 MSA Architecture 와 API Gateway의 개념과 비슷하게 구현하자는 의미로 구성을 해보았습니다.

SystemArchitecture란?

시스템 구성 및 동작 원리를 나타낸다
시스템 전체에 대한 논리적인 기능 체계와 그것을 실현하기 위한 구성방식

모놀리식 아키텍처(Monolithic Architecture)

  • 모놀리식 아키텍처는 마이크로서비스아키텍처(MSA)에 반대되는 개념으로, 에플리케이션의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태를 말한다.
  • 장점 :
  1. 개발 초기에 단순한 아키텍처 구조로 인해 개발에 용이하다
  2. 어떤 서비스든지 개발되어 있는 환경이 같아서 복잡하지 않다
  3. 배포가 간단하고 확장성이 쉽다.
  4. 쉡게 고가용성 서버 환경을 만들 수 있다.
  • 단점 :
  1. 프로젝트 규모가 커짐에 따라 애플리케이션 구동 시간이 늘어나고 빌드 및 배포의 시간이 길어진다.
  2. 조그마한 수정 사항이 있어도 전체를 다시 빌드하고 배포해야 한다.
  3. 많은 양의 코드가 몰려있어서 개발자가 모든 코드를 이해하기 힘들며, 유지보수가 어렵다
  4. 일부분의 오류가 전체에 영향을 미친가(이것이 치명적이다...)

마이크로 서비스 아키텍처(Micro Service Architecture)

  • 마이크로 서비스 아키텍처는 스스로 돌아갈 수 있으며 독립적으로 배포각 가능한 서비스라 할 수 있다.
  • 특징 :
  1. 각각의 서비스는 그 크기가 작을 뿐, 서비스 자체는 하나의 모놀리식 아케텍처와 유사한 구조를 갖는다
  2. 각각의 서비스는 독립적으로 배포가 가능해야 한다
  3. 각각의 서비스는 다른 서비스에 대한 의존성이 작아야 한다.
  4. 각 서비스는 개별 프로셋스로 구동되며, Rest API와 같은 가벼운 방식으로 통신되어야 함.

장점 :

  • 배포 관점
  1. 서비스 별 개별 배포가 가능하다. (배포 시 전체 서비스의 중단이 없음.)
  2. 독립 배포가 가능하므로 개발자의 자율성이 증가한다.
  3. 요구 사항을 신속하게 반영하여 빠르게 배포할 수 있다.
  • 확장 관점
  1. 특정 서비스에 대한 확장성이 용이하다.
  2. 클라우드 사용에 적합하다.
  • 장애 관점
  1. 장애가 전체 서비스로 확장될 가능성이 적다.
  2. 부분적 장애에 대한 격리가 수월하다.
  • 코드 / 유지 보수 관점
  1. 팀 별로 프로젝트가 분리되어 있으므로 코드의 이해도가 증가하고, 그에 따라 유지 보수하기 쉽다.
  2. 신기술의 적용이 유연하고, 서비스를 polyglot하게 개발 및 운영할 수 있다.
    polyglot 개발: 여러 프로그래밍 언어, 패러다임 등을 사용

단점 :

  • 성능 관점
  1. 서비스 간 호출 시 API를 사용하기 때문에 통신 비용 및 지연 시간이 증가한다.
  • 데이터 관리 관점
  1. 데이터가 여러 서비스에 걸쳐서 분산되므로 한 번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어렵다.
  • 테스트 / 트랜잭션 관점
  1. 단위 테스트는 쉽지만, 통합 테스트 및 End-to-End 테스트 단위로 들어가면 여러 서비스의 API를 검증해야 하므로 시간과 비용이 많이 든다.
  2. 각 서비스 별로 데이터베이스가 있으므로 트랜잭션을 구현하기 까다롭다.
  • 아키텍처가 다소 복잡하므로 개발 및 관리가 어렵고, 비용이 많이 든다.

출처 : MSA 아키텍처, https://steady-coding.tistory.com/595

왜 MSA인가!!!

  • 프로젝트 특성상 개발하는 사람이 여러 명이므로 개발하면서 업데이트, 테스트, 유지, 보수에 따른 코드 수정이 많아지고
  • git 등록으로 인한 코드 충돌 가능성이 농후하며
  • Amazone AWS 환경에서 개발이 이루어지기 떄문에 한번 수정 할때마다 빌드 시간과 테스트 시간이 길어지기떄문에 MSA를 고려하게 되었습니다.

API Gateway

이번 프로젝트에서 JWT방식과 SpringSecurity, Filter, 서버간 통신에 사용되는 WebClient를 이용하여 API Gateway역할을 하는 서버를 설계하여 개발 하였습니다.

  • 서비스로 전달되는 모든 API요청의 관문(Gateway) 역할
  • 시스템의 아키텍처를 내부로 숨기고 외부의 요청에 대한 응답만을 적절한 형태로 응답

출처 : API Gateway, https://www.tibco.com/ko/reference-center/what-is-an-api-gateway

profile
개발 하는 게 좋은 사람입니다.

0개의 댓글