ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. [MSA 구현 퀵스타트] 초간단한 MSA 개발하자
    Spring Cloud 2021. 3. 26. 23:57

    앞서 알아본 이론을 기반으로 드디어!! 여러 장에 걸쳐서

    실제 MSA 프로젝트를 구축을 시작해 보겠습니다.

    MSA의 개요와 Spring Cloud의 주요 라이브리들의 이해가 선행되어야 실제 개발하는데 수월하기에 혹시 앞장을 못보신 분들은 먼저 읽어보시고 시작하시길 권장드립니다.

    앞으로 진행될 포스팅과 관련된 소스는 아래 Github 주소에서 다운로드 가능합니다.

    URL : https://github.com/chanheejung/SimpleMSA

    • 2021년 3월 26일 기준으로 이번장의 그림4-1에서 설명하는 내용이 구현되어 있습니다. 다음 포스팅부터의 상세 구현을 기다리지 않으셔도 미리 다운받아서 보실 수 있습니다.
    • 소스는 앞으로 예정된 각 블로그 포스팅별로 브랜치를 생성해두었으니 원하는 부분을 체크아웃하시면 됩니다. 예를 들어 "1.Discover&Service" 브랜치는 다음 장에 상세 다룰 내용의 소스 버전입니다.
    • Postman Collection : 소스를 다운받아보면 Postman 폴더에 Simple MSA.postman_collction.json 파일이 있습니다. 예제를 실행하는데 필요한 Rest API를 저장해두었으니 편리하게 활용하실수 있습니다.

     

     

    퀵스타트 과정에서는 Simple MSA라고 명명하며, 불필요한 기능들을 모두 제거하고 최대한 Spring Cloud의 핵심적인 기능만을 사용하여 구현함으로서 전체적인 MSA의 흐름을 파악하는데 집중할수 있도록 하겠습니다.

     

    또한 Spring Cloud 라이브러리들에는 상당히 많은 환경 설정과 옵션이 존재 합니다. 이는 실제 운영 모드에서는 여러 환경 설정들과 옵션을 조정하고 튜닝하면서 각자의 서비스에 맞게 최적의 프로젝트 상태를 유지하여야 합니다.

    하지만 처음부터 세세한 부분까지 모두 고려하면서 학습을 하면 금방 지치게 되더라구요.

     

    하여 퀵스타트 과정에서는 우선 꼭 필요한 최소한의 설정만으로 구현을 하고(나머지 설정은 Default 이용) 퀵스타트 과정이 완료된 이후 세세한 부분을 하나씩 포스팅할 예정입니다.

     

    우선 구현할 Simple MSA의 전체적인 구조를 살펴보겠습니다.

    서비스는 Service1Service2 총 2개로 구성하였습니다. (실제 프로젝트에서는 이렇게 적지는 않겠지요.)

    그리고 Service Discovery, API GateWay, Config Server로 구성되어 있습니다.

     

    프로젝트는 아주 심플합니다.

    API Gateway는 단일지점으로서의 역할을 합니다.

    클라이언트에서 "GET /api/service1/ribbon/{id}" API 로 요청을 하면, Service1서비스를 찾아서 "GET /ribbon/{id}" API를 다시 요청합니다.

     

    Service1의 주요 기능은 고객의 ID를 받아서 Service2에게 Rest API로 통신 요청하여 이름을 받아오는 것입니다.

    Api Gateway로 전달 받은 ID를 서비스2의 "GET /name/{id}" API로 요청을 하고 이름을 받아옵니다.

    서비스1은 최종 ID와 이름을 조합하여 "ID is Name."이라는 문장을 만들어 반환 합니다.

     

    (Spring Cloud 라이브러리 관련 외 소스코드와 파일을 최대한 줄이고 복잡도를 낮추고자, 통신 결과도 단순한 String Text를 반환하였습니다.)

     

    Service2는 고객의 ID를 받으면 해당 ID의 이름을 반환 합니다.

     

    Service Discovery와 Config Server는 앞장에서 이론을 설명하였기에 넘어가도록 하겠습니다. 이후 장에서 구현을 하면서 다시 상세히 다룰 예정입니다.

     

    • 앞의 1~3장을 꼼꼼히 읽으신 분들은 그림과 요약 설명을 보시면 대충 감을 잡으셨을지도 모르겠습니다. 잘 모르겠다는 생각이 드셔도 괜찮습니다. 다음장부터 하나씩 구현해나가면 이해하는데 전혀 어려움이 없을 것입니다.

    상당히 단순해 보이는 프로젝트입니다. 하지만 이 기능만으로도 Spring Cloud의 주요 핵심 기능을 구성하였다고 할 수 있습니다.

     

    전체 퀵스타트 프로젝트를 다 구현하고 이후 각 모듈들을 이중화 구성도 해보고, 실무에서 꼭 필요한 추가 환경 설정들을 해보면서 완성도를 높여 나가 보겠습니다.

     

    이후 Spring Cloud의 추가적인 라이브러리(비동기 메시지 큐, 보안 처리 등)를 활용해보고 다양한 환경 설정 및 옵션을 변경하면서 세세하게 컨트롤해보면 좋을 듯합니다. 

    클라우드 환경에 핫한 Docker 컨테이너에 담아서 띄워도 보고, 간단한 컨테이너 오케스트레이션도 해보고요.

     

    (혹시라로 제가 여력이 된다면 이부분까지도 포스팅 해볼수도 있지 않을까 라는 욕심도 생기네요.)

     

     

    마지막으로 프로젝트의 개발 환경에 대해 정리합니다.

     

    Spring Boot 2.3.9.RELASE

    Spring Cloud Hoxton.SR10

     

    추가 라이브러리

    • spring-boot-starter-actuator : 유틸리티성 API를 제공해주는데 MSA 운영에 필요한 기능들이 있습니다. 자세한 것 하나씩 다루도록 하겠습니다.
    • lombok : 어노테이션만으로 객체의 코드(대표적으로 Getter/Setter)를 확줄여 가독성을 좋게 합니다. 
    • jasypt 3.0.3 : Config Server의 GIT의 접속 Password를 암호화한 후 복호화 할때 사용 (Config Server 장에서 상세 설명합니다.)
    • junit : Jasypt 암복호화 키를 만들때 사용 (Config Server 장에서 상세 설명합니다.)

    빌드 : Gradle (Gradle을 몰라도 Maven을 아신다면 Simple MSA를 이해하는데 전혀 어려움이 없습니다.)

    형상 관리 : Github

     

    저는 IDE로 인텔리제이를 썼지만 이클립스 등 스프링을 지원하는 툴을 제약 없이 쓰시면 될듯 합니다.

    댓글

Designed by Tistory.