[Spring Cloud로 개발하는 마이크로서비스 애플리케이션]-Introduction to Micro Service-1

Sungjin·2021년 5월 24일
1
post-thumbnail

이 글은 인프런 이도원님의 'Spring Cloud로 개발하는 마이크로서비스 애플리케이션'을 수강하고 작성합니다.
출처:https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

Software 발전 과정

-1960~1980: 메인프레임의 시대. 하드웨어로 모든 서비스 들이 이루어짐
-1990~2000: 분산 시스템 발전. Robust,Distributed의 시기
-2010~: Fragile과 반대되는 Anti-fragile,Resilient 시대. Cloud Native를 활용한 시스템이 활발하게 구축

2010년대 이후 Sortware Architecture

-Anti-fragile
-Auto Scaling: 자동 확장성, 사용량에 따라 자동으로 인스턴스 증가.
-Micro Service: 기존의 서비스들이 하나의 거대한 형태로 이뤄진 것과 달리 전체 서비스를 구축하고 있는 개별적인 모듈 및 기능을 독립적으로 개발,배포 운영할 수 있는 세분화된 서비스
-Chaos Engineering: 시스템이 급격하고 예측할 수 없는 상황에서도 견딜 수 있고 신뢰성을 쌓기 위한 기술 -> 예견되지 않는 상황 속에서도 안전해야 한다는 것을 의미!
-Continuous deployments: CI/CD와 같은 배포
CI/CD란? Cloud Native Application은 수 십개~수 백개의 서비스로 구성. 이를 일일히 빌드,테스트,배포를 수작업으로 한다면? 시스템 자체의 복잡성을 떠나서 어플리케이션을 구성하고 있는 각각의 서비스를 구성하고 빌드하는 것이 하나의 커다란 업무가 되어버릴 것, 이렇기 때문에 자동화된 시스템을 구축하고 하나의 작업에서 다른 작업으로 연계되는 과정을 파이프라인으로 연결 시켜놓으면 전체적인 시스템 업그레이드를 빠르게 적용 가능. 즉, Cloud Native와 Micro Service에 빠질 수 없는 기술!

Cloud Native Architecture

-확장 가능한 Architecture (필요에 따라 변경 가능)
-시스템의 수평적 확장에 유리: 더 많은 사용자의 요청 처리 가능
-확장된 서버로 시스템의 부하 분산,사용성 보장
-시스템 또는 Service Application단위의 컨테이너 기반 가상화
-Cloud Native에 사용된 서버,리소스등을 다양한 Tool로 Monitoring
-탄력적 Architecture: CI/CD기법 적용,분할된 서비스 구조, 무상태 통신 프로토콜,서비스의 추가와 삭제를 자동으로 감지, 변경된 서비스 요청에 따라 사용자 요청 처리(동적 처리)
-Fault Isolation: 특정 서비스에 오류가 발생해도 다른 서비스에는 영향을 끼치지 않음 Because, Micro Service는 하나의 작은 독립적인 Application이므로!
-부연 설명
배포가 되는 Micro Service들은 자신의 위치가 어디에 있는지 등록을 해야함. 그래야 다른 서비스들이 해당 서비스를 검색하고 사용할 수 있기 때문.Micro Service는 Discovery Service라는 곳에 등록하고 삭제 되도록 함!

Cloud Application

Cloud Native Architecture에 의해 설계되고 구현 됨
Micro Service로 개발
-CI/CD를 통해 빌드-테스트-배포를 자동적으로 해야함 : 결과물을 통합하기 위한 형상 관리 OR 통합된 코드를 빌드하고 테스트 하는 과정 자체를 의미
-DevOps: Micro Service에 문제가 생겼을 경우 바로바로 수정을 해서 배포 Development와 operaion이 합쳐진 말(개발 조직과 운영 조직의 통합을 의미) 기존의 Application들은 고객의 요청에 맞게 도메인을 분석하고 시스템을 설계, 어플리케이션 구현,테스트, 배포 과정을 거쳐 시스템을 개발 완료.과정이 오래 걸렸었음 -> 기간이 길어지는 만큼 변화하는 요구사항 대처를 유연하게 하지 못하게됨.
DevOps환경은 지속적으로 기획, 빌드, 테스트, 배포 과정을 시스템이 종료될 때 까지 무한으로 실시하여 바로 수정 가능. DevOps의 환경에 맞춰 서비스의 구조를 작은 단위로 분할 할 수 있게끔 하여 더 자주 통합 및 테스트,배포를 할 수 있음!
-컨테이너 가상화: 하나의 Application을 구성하는 Micro Service들을 Cloud 환경에 배포하고 사용하기 위하여 사용.
*가상화는 Cloud Native Architecture의 핵심
왜냐?? 기존의 로컬 환경에서만의 개발이 아닌 Cloud환경으로 이전해서 적은 비용으로 탄력성 있는 시스템을 구축할 수 있기 때문!
또한, 컨테이너 가상화는 기존의 가상머신을 사용하는 것과 달리 공통적인 라이브러리나 리소스를 공유하여 각자 필요한 부분에서만 독립적인 영역에서 실행할 수 있는 구조이므로 더 적은 리소스를 이용하고 가볍고 빠르게 운영 가능.

블로그 포스트를 마치겠습니다. 감사합니다 :)

profile
WEB STUDY & etc.. HELLO!

0개의 댓글