CS

MSA 란? 특징과 장단점

출처: https://gruuuuu.github.io/cloud/architecture-microservice/

  • 특징: 클라우드와 컨테이너가 잘 어울리는 아키텍처. 각각의 작은 서비스 여러 개가 독립적이며 느슨하게 결합되어 있음. 그렇기 때문에 각각의 서비스들을 독립적으로 배포할 수 있으며, 전체 프로그램을 빌드한 뒤 재배치하지 않고 기존 서비스들을 업데이트 할 수 있음.
  • 장점으로는 독립적인 개발 및 배포 가능 / 서비스 하나가 다운되어도 전체 서비스에 영향을 주지 않는다는 점 / 리소스의 유연한 운용 가능이 있다
  • 단점으로는 서비스간 통신 방법이 필요하고, 복잡하고 / 서비스끼리의 테스트가 어렵다 / 또한 복잡하고 독립된 구조로 인해 통합적인 유지관리가 어려워질 수 있다
  • 조금 더 자세한 내용(https://yeti.tistory.com/269)
  • 각각의 서비스와 데이터를 나눠서 관리하고, 서비스 간 통신은 REST API 나 message queue 를 활용한다. 각가의 서비스들은 독립적인 devops 환경을 갖고 있고, 서비스에 대한 모니터링이 지속적으로 이뤄져야 한다.
  • CI 는 코드를 merge 하고 빌드 및 정적 분석, 테스트, 배포 결과물까지 만드는 과정
  • CD 는 배포 결과물을 운영 서버에 전달하거나 서비스에 적용하는 과정
  • Microservice 간 호출 방식은 동기식과 비동기식으로 구분할 수 있음
  • REST API 와 같은 동기식 방식은 구현이 쉽다는 장점이 있지만, 특정 서비스의 장애가 다른 서비스의 장애로 전파될 위험성을 갖고 있어 MSA 에서는 적합하지 않음
  • 따라서, Microservice 에서는 Kafka, Rabbit MQ, Active MQ 와 같은 메시지 브로커를 사용함. 이러한 방식은 메시지 큐에 전달할 메시지 이벤트를 던지고, 메시지 브로커가 전송을 보장하는 방식이다. 브로커에 의해서 동작하기 때문에 통신하는 서비스들이 물리적으로 같은 시스템에 있을 필요도 없고, 서비스의 요구에 따라서 scale out 할 수 있는 구조이다. 이러한 구조를 event driven architecture 라고 부른다.

Vue.js 를 사용한 이유는? 특징과 장단점

  • Vue.js 는 UI 및 SPA (단일 페이지 어플리케이션) 을 구축하기 위한 javacript framework 이다. Vue.js 는 MVVM (model-view-viewmodel) 패턴을 갖는다. Vue.js 와 React.js 를 비교했을 때의 차이는 무엇일까?

출처: https://velog.io/@leehaeun0/React-vs-Vue-장단점-비교

  • React.js 는 라이브러리이고, Vue.js 는 프레임워크다. 따라서 React 는 자유도가 높고, Vue 는 자유도가 낮다는 특징이 있다. 예를 들어, React 는 버튼이 보이고 안 보이고를 정할 때, && 연산자 방식 또는 삼항 연산자 방식을 사용하는 등 다양한 옵션이 있지만 vue 에서는 v-if 만 사용하는 것과 같은 기능이 제한되어 있다. For 문 또한 react 는 javascript에서 사용하는 map, foreach, for 다양하게 사용할 수 있지만, vue 는 v-for 만 사용해야한다.
  • 컴포넌트를 분리하여 재사용하는 측면에서 봤을 때, react 는 한 개의 파일에서 새로운 함수형 컴포넌트를 정의해서 만들고, 부모에서 자식으로 props 를 전달하는 과정이 함수에서 인자를 전달하듯이 매우 자연스럽게 진행된다. 반면에 vue 는 새로운 컴포넌트를 위해서 새로운 파일을 만들어야 하고 그 파일에서 template script style 도 작성해야 한다. 그래서 props 를 전달할 때도 2개의 파일을 왔다갔다 해야한다.
  • Vue 가 React 에 비해서 learning curve 가 낮은 편이다.

RPC 를 사용한 이유는? 특징과 장단점

  • RestAPI 와 비교했을 때, RPC 를 사용하는 이유는 무엇일까? 일단, REST API 는 HTTP 기반이고, 리소스는 고유한 URI 이다. URI 는 단순하고 직관적인 구조여야 하며 처리 결과는 status code 에 의해서 정의될 수 있다. 리소스의 상태는 http method를 활용하여 구분한다. 특징으로는 stateless 하고, 캐싱이 가능하다. Http 프로토콜 표준에서 사용하는 last modified tag 를 활용해서 캐싱을 구현하 수 있다. 구조는 클라이언트 - 서버 구조로 되어 있다. 장점으로는 낮은 복잡도, 완만한 학습 곡선 그리고 높은 개발 생산성이 있다.
  • RPC 는 원격에 위치한 프로그램을 로컬에 있는 프로그램처럼 사용할 수 있다는 특징이 있다. 개발자는 네트워크 통신과 관련된 작업은 신경쓰지 않아도 된다. Stub 이라는 개념이 있는데 클라이언트와 서버 쪽에서 인터페이스하기 위한 객체라고 볼 수 있다. 장점으로는 자신의 로컬에서 함수호출하는 것과 같은 인터페이스로 원격 API 를 호출할 수 있다는 특징이 있다.

비동기 방식 메시지큐에 대해서

  • Kafka 의 예를 들면, 언어에 종속적이지 않고 데이터를 주고 받는 기능을 제공하는 producer/consumer 구조의 비동기식 메시지 큐이다.
  • Producer가 메시지를 생산하는 방식은 KafkaProducer 를 생성하고 json 형태로 데이터를 전달할 수 있다. Bootstrap_servers 에 브로커 리스트를 입력하면 이 브로커들에게 메시지가 전달되는 방식으로 보인다
  • Consumer 쪽에서는 KafkaConsumer 를 생성하고 producer 와 같은 방식으로 boostrap_servers 에 브로커 리스트를 작성한다. 추가적으로 몇가지 옵션들을 설정할 수 있다.