한화시스템 BEYOND 캠프 3기 14주차 회고

⭐MSA

이번 주차에는 MSA에 대해 배웠다. MSA는 어플리케이션을 작고 독립적인 서비스들로 나누어 각각이 자신의 프로세스에서 실행되도록 하는 것이다. 지금까지 수업시간에 만들었던 Ordering을 서비스별로 나누어 각각 프로세스가 실행되도록 했다.

 

MSA를 구축을 위해 Spring에서 지원하는 Spring Cloud를 사용하였다. Spring Cloud에서 주요 요소는 Spring Cloud GatewaySpring Cloud Netflix(Eureka)이다.

 

Spring Cloud Gateway는 시스템의 입구역할로써 클라이언트로부터의 요청을 받아, 설정에 따라 해당 요청을 적절한 마이크로서비스로 전달한다.(라우팅, 로드밸런싱-lb)

 

Spring Cloud Netflix중에 Eureka는 마이크로서비스 간의 위치를 자동으로 탐색하는 서비스 디스커버리 역할을 수행하고, 모든 클라이언트 서비스(마이크로서비스 인스턴스)의 위치 정보를 가지고 있으며, 서비스 간의 통신을 위한 동적인 서비스 탐색한다.

MSA시스템 구조
Eureka에 등록된 서비스 목록 예시

 

MSA시스템 구조의 작동방식은 위 사진과 같이 진행된다.

1. Client가 Gateway로 서비스요청

2. Gateway가 들어온 서비스 요청을 어느 마이크로서비스에서 처리할지 Eureka에 확인요청

3. Eureka는 서비스명과 매핑된 마이크로서비스의 위치 정보를 알고있기 때문에 해당 정보를 Gateway에 제공

4. Gateway는 제공받은 마이크로 서비스의 위치로 서비스 요청 전달

5. 마이크로 서비스는 요청을 처리 후 Gateway로 처리정보 전달

6. Gateway가 Client에게 처리된 정보를 전달

 

이미 프론트엔드&백엔드 프로젝트에서 MSA시스템으로 개발을 진행하고 있었기 때문에 수업내용을 조금이나마 익숙하게 진행할 수 있었다. 재미있었던 점은 Spring Cloud Netflix가 이름 그대로 넷플릭스에서 개발했다는 점이다. 

 

2007년 심각한 데이터베이스 손상으로 3일간 서비스 장애를 겪은 넷플릭스는 신뢰성 높고 수평 확장이 가능한 클라우드 시스템으로 이전할 필요성을 느꼈고, 단순한 플랫폼 이전만으로는 기존의 문제점과 한계를 탈피할 수 없다고 판단한 넷플릭스는 고가용성, 유연한 스케일링, 빠르고 쉬운 배포를 위해 MSA를 선택했다고 한다.

 

그리고 MSA 전환을 위한 기술들을 도입하여 무려 7년에 걸쳐 클라우드 환경으로 이전하였는데 이 과정에서 넷플릭스가 경험한 노하우와 문제 해결 방법을 공유하기 위해 MSA 전환 기술을 오픈소스로 공개했다고한다(Netflix OSS).

해당 오픈 소스를 Spring Cloud에서 활용해서 Spring Cloud Netflix라는 이름으로 기능이 나온 것 같다.

Eureka implementation에도 netflix이름이 들어간다.

 


프론트엔드&백엔드 프로젝트

수업이 끝나면 곧장 내가 맡은 부분에 대한 개발을 진행했다. 두가지 서비스에 대한 CRUD를 끝냈다.

 

추가적으로 기능하나를 담당해서 개발해보고 싶었는데 시간이 생각보다 너무 빨리지나가서 실제 프로젝트 기간에는 Vue.js로 화면개발하고 데이터를 연결하는 작업에 시간을 많이 쏟을 예정이다.

 

처음 진행하는 개발프로젝트인데 MSA환경에서 개발해보고 직접 Entity설정, 서비스 CRUD도 해보는 경험들이 재밌고 실력을 빠르게 성장시켜 준다는 생각이 들었고, 코딩이 점점 더 재밌어 진다는 생각이 들었다.

화면 개발은 또 어떤 재미가 있을지 기대가 된다

 


이번주 작성 블로그

 

AWS S3 vue.js build

AWS S3 vue.js build 하기 S3 버킷생성 후 버킷권한 스크립트 적용 dist 폴더 객체에 업로드 정적 웹사이트 호스팅 설정 (S3 속성하단) 활성화로 변경 후 index.html파일 인덱스 문서, 오류 문서에 입력 변경

au1802.tistory.com

 

 

Spring Eureka 설정

Eureka 서버 설정 //build.gradle //스프링클라우드에 대한 버전 지정 ext{ set('springCloudVersion', '2021.0.8') } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' compile

au1802.tistory.com