MSA >



2019-03-22 / 2019-03-22




1. Microservices의 이해 #

1.1. Microservices란 무엇인가
..
- SoA와 Microservices의 차이점: "Microservices SoA지만 모든 SoA가 Microservices는 아니다."
..
1.2. Microservices 원칙
  • 비즈니스 역량 중심 모델: 해당 비지니스 도메인 전문가는 이런 기능이 어떻게 동작하고 어떻게 결합되고 사용되는지를 명확히 이해하고 있다. 도메인 전문가와의 협업은 마이크로서비스를 미래의 자신을 포함한 모든 사람이 이해할 수 있게 만들며, 서비스가 비지니스 역량의 단순한 추상화가 아니라 원래 비지니스 역량이 매핑되도록 한다.
  • 느슨한 결합: ex. 상품추전 마이크로서비스의 경우 고객ID까지는 다루어야 하지만 고객의 이름을 다루어서는 안된다.
  • 단일 책임: OOP의 SRP을 차용할 수 있다. 하나의 마이크로서비스는 변화에 오직 한 가지 이유만 있어야 한다.
  • 구현 은닉
  • 격리: 인프라 분리돼야 한다. (ex. 자체 DB, 자체 서버) 이를 통해 외부 요인으로부터 영향을 막고 외부에도 영향을 주지 않는다.
  • 독립적인 배포 가능
  • 장애를 고려한 빌드: Upstream, Downstream, Logging, Monitoring, 경고, 복구, Fallback 등을 마이크로서비스 설계 시 고려해야한다.
  • 확장성: 확장이 필요한 마이크로 서비스만 확장 가능
  • 자동화
1.3. 도메인 주도 설계 마이크로서비스에서 DDD(Domain-Driven Design)를 사용하면 마이크로서비스 원칙을 충족하는데 도움이 된다.
  • DDD: 핵심 도메인으로 경계지어진 진화하는 복잡한 모델을 다루는 소프트웨어 개발 방안
    - Ubiquitous Language: 개발자와 사용자간의 공통적이고 엄격한 언어를 구축해야한다. 이 언어는 도메인 모델에 기초해야하며, 도메인 전문가와 공통적이고 유동적인 대화를 하는데 도움이된다.
    - Bounded Context: ex. 파트너라는 용어는 컨텍스트마다 다르게 사용된다.
    - Context Mapping: 다수의 컨텍스트를 가진 대규모 애플리케이션에서는 전체에 대한 시각을 놓칠수 있다. 컨택스트 맵은 시스템 전체뷰로 BC간의 커뮤니케이션 방식을 보여준다.

  • Microservices에서 DDD 사용하기
    - Bounded Context: 하나 이상의 BC를 포함하는 마이크로서비스를 만들지 말아야
    - Ubiquitous Language: Microservices가 사용하는 언어가 유비쿼터스 언어임을 보장해야하므로 노출된 Operation과 Interface는 Context Domain Language로 표현된다.
    - Context Model: Microservice가 사용하는 Model은 BC 내에서 정의되어야 하며 UL을 사용해야 한다.
    - Context Mapping: Microservice의 의존성, 결합을 이해하기위해 전체 시스템의 Context Mapping 을 검토해야한다.

1.4. Reactive Microservices
..
- Reactive 선언문: 응답성, 복원성, 탄력성, 메시지 기반, 배압
- Reactive Frameworks: 리액티브 익스텐션(ReactiveX or Rx), 프로젝트 리액터, 자바 리액티브 스트림, Akka
- Why Reactive Microservices?: 인프라자원을 더 효율적으로 활용할수 있는 빠른 넌블러킹 소프트웨어를 만들수 있다. 더 나은 응답성, 개발을 단순화시켜 느슨한 결합을 가진 재사용 가능한 서비스 만들수 있다.

1.5. Cloud Native Microservices 클라우드 네이티브 마이크로서비스는 클라우드 컴퓨팅 모델의 이점을 활용해 마이크로 서비스를 구축하는 방안으로 마이크로 서비스의 배포, 관리, 확장을 클라우드가 책임지도록 하기때문에 마이크로서비스를 만드는 데 집중할 수 있게 한다.
- 클라우드 컴퓨팅
- 컨테이너
- 배포 모델: Private, Public, Hybrid
- 서비스 모델: IaaS(AWS, Google Compute Engine), Paas(Google App Engine), SaaS(Google G Suite, MS Office 365)

- 클라우드 네이티브 마이크로서비스를 구축해야하는 이유: 마이크로 서비스는 쉽게 확장 및 관리 가능, 마이크로서비스간의 느슨한 결합으로 쉽게 컨테이너에 담을 수 있다. 마이크로서비스를 만들때 클라우드 네이티브 애플리케이션으로 만들면 클라우드 컴퓨팅 모델의 이점을 최대한 확용할수 있다.

2. Spring Boot 2.0 시작하기 #

..

3. RESTful Service 만들기 #

..

4. Reactive Microservices 만들기 #

4.1. Spring WebFlux 이해 4.2. Reactive Services 만들기 4.3. Functional Web Programming 사용하기
- Router Function
- Handler
- Reactive Service
- 다중 경로
- JSON 본문 처리
4.4. Reactive 오류 처리하기 ..

5. Reactive Spring Data #


5.1. NoSQL.. Mongo DB

5.2. Spring Data

5.3. Reactive Repository

5.4. RESTful API for CRUD

6. Cloud Native Microservices 만들기 #

6.1. Spring Cloud의 이해

- Cloud Native Programming이란 무엇인가
- Spring Cloud Architecture: Config Server, Service 탐색, Load Balancer, Gateway, Circuit Breaker
- Spring Cloud Netflix
- Spring Cloud Microservices 만들기
6.2. Config Server 6.3. Service Discovery 6.4. Gateway: 만들기, Router 정의

7. Docker 만들기 #

..

8. Microservices 확장 #

8.1. 확장 가능한 Architecture

8.2. Cloud 만들기: 스웜 만들기, ...

8.3. Microservices를 Service로 Publish: Registry 만들기, Microservice 만들기, Docker 만들기, Service 만들기

8.4. Service 제어하기

..

9. Spring Microservices Test #

.. MockMvc 사용하기 .. Fluent Test.. Kluent

10. Microservice Monitoring #

.. 10.2. Spring Boot Actuator .. 10.3. JMX

11. Microservice 배포 #

.. .. Github upload .. 오픈시프트에 게시

12. 모범 사례 #


12.1. Kotlin 관용구: 타입추론, 표현식, 기본매개변수, 람다

12.2. Spring Context 관리: 생성자 주입, 명시적 컨텍스트 설정, 서비스 분리

12.3. Application 계층화

12.4. 효과적인 테스트

12.5. CI/CD 처리
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2023-09-05 09:58:56
Processing time 0.2164 sec