CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • Micro Service Architecture
  • 모놀리식 아키텍쳐 VS 마이크로서비스 아키텍쳐
  • 모놀리식 아키텍쳐(Monolithic Architecture)
  • 마이크로서비스 아키텍쳐(MSA)
  • Spring Cloud의 MSA아키텍쳐
  • Spring Cloud Gateway
  • Spring eureka
  • Feign
  • Spring Config
  • Ref
  1. etc

MSA

PreviousetcNextREST, REST API, RESTful

Last updated 1 year ago

Micro Service Architecture

모놀리식 아키텍쳐 VS 마이크로서비스 아키텍쳐

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

소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 서비스

장점

  • 단순한 아키텍쳐로 개발이 편리

  • 배포 방법이 간단함

  • 로드밸런서를 통해 요청을 분산시켜 확장하기 쉬움

  • 디버깅이 쉬움

단점

  • 부분 장애가 전체 서비스의 장애로 확대될 수 있음

  • 서비스의 특정 부분만 스케일 아웃(Scale-Out)하기 어려움

  • 전체 시스템 구조 파악의 어려움

  • 서비스 변경의 어려움과 수정 시 영향도 파악이 힘듦

  • 빌드 시간 및 테스트, 배포 시간의 급증

마이크로서비스 아키텍쳐(MSA)

단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법

  • 컴포넌트

    • 각 컴포넌트는 서비스 형태로 구현

    • API를 이용해 타 서비스와 통신

  • 서비스

    • 각 서비스는 독립된 서버로 타 컴포넌트와 의존성을 가지지 않음

    • 독립된 배포 진행

느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법

서비스지향 아키텍쳐 (SOA)

대규모 컴퓨터 시스템 구축 시, 애플리케이션의 기능을 비즈니스 적인 의미를 가지는 기능 단위로 묶어서 표준화된 호출 인터페이스(Rest API 등)를 통해 서비스로 구현하고, 이 서비스들을 업무에 따라 어플리케이션을 구성하는 소프트웨어 개발 아키텍처

특징

  • API를 통해서만 상호작용 가능

    • 접근점(end-point)를 API형태로 외부에 노출하고, 실질적인 세부사항은 모두 추상화

    • 내부 구현로직, 아키텍처, 프로그래밍 언어와 같은 기술적인 사항들은 API에 의해 가려짐

  • 하나의 기능만 수행

    • 마이크로 서비스는 하나의 비즈니스 범위에 맞춰 만들어짐

  • 다양한 언어와 기술로 구축 가능

  • SOA에서 사용되는 집중화된 관리체계 사용하지 않음

    • REST등 가벼운 통신 아키텍쳐, Kafka등을 이용한 message stream 주로 사용

  • 데이터 분리

    • 서비스 별 별도의 데이터베이스 사용

    • DB 종류 별도로 가져 가거나, 같은 DB를 사용하더라도 나누어서 사용

    • 데이터 분산으로 다른 서비스와 의존성 없음

      • 서비스 독립 개발, 배포, 운영 가능

장점

  • 배포

    • 시스템 전체의 중단 없이 필요한 부분만 업데이트 및 배포 가능

    • 실시간으로 요구사항을 반영하는 유연한 대응 가능

  • 확장

    • 특정 서비스에 대한 확장성 유리

    • 클라우드 기반 서비스 사용에 적합

  • 장애

    • 일부 장애가 전체 서비스로 확장될 가능성 적음

    • 부분적으로 발생하는 장애에 대한 격리 수월

단점

  • 모놀리틱 아키텍쳐에 비해 느린 속도

    • 서비스간 호출을 API통신을 이용함으로 속도 느림

  • 통신에 사용하기 위한 값을 데이터 모델로 변환시켜주는 오버헤드 발생

  • 데이터 분리로 인한 문제

    • 다른 컴포넌트의 데이터는 API를 통해 가져와야하므로 성능상 문제 발생

    • 트랜잭션으로 묶을 수 없음

    • 데이터 관리의 어려움

  • 설계의 어려움

    • MSA는 모놀리식에 비해 상대적으로 많이 복잡함

    • 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야 함

Spring Cloud의 MSA아키텍쳐

Spring Cloud Gateway

  • Api Gateway를 구현하는 라이브러리

  • 'API Gateway'는 분리되어 있는 서버들의 End-Point를 단일화하여 클라이언트에게 동일한 base url제공

  • 라우팅, 로드밸런싱, 인증 역할 등을 수행

Spring eureka

  • 디스커버리 서비스 서버와 클라이언트를 구현하는 라이브러리

  • 분리되 서비스(클라이언트)의 Ip/Port/InstanceId 정보를 디스커버리 서버에 저장하고, 특정 서비스의 정보가 필요할떄 저장된 서비스 정보를 반환 (e.g Api Gateway에서 서비스에 접근하고자 하는 경우)

Feign

  • 타 서비스에 API로 접근을 지원해주는 Http Client 라이브러리

  • 어노테이션만으로 편리하게 구성가능

  • 다른 Spring Cloud 기술들과 통합이 편리

Spring Config

  • 분산된 서비스의 모든 애플리케이션 설정 정보를 한곳에서 관리

  • 설정파일 수정으로 서버를 재가동해야하는 불편함 해소

Ref

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)