Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- BookReview
- KAKAO
- 삼성페이
- AI5
- 카카오웹툰
- 생성형AI
- 시큐어코딩가이드
- Algorithm
- CSRF
- 알고리즘
- MSA
- FAANG
- IT
- 이분탐색
- microservice
- cloudnative
- LeetCode
- 원자성
- 플랫폼수수료
- 하이브리드업무
- 웹엑스
- 핀테크
- 간편결제
- 은행IT
- 대출대환서비스
- 프로세스상태
- binarysearch
- 카카오페이
- 최단경로문제
- 운영체제
Archives
- Today
- Total
평안하자
Microservice와 Spring Cloud의 소개 본문
Microservice와 Spring Cloud의 소개
1. 소프트웨어 아키텍처
과거 하드웨어 종속적인 아키텍처
-> 2010년 이후로 탄력적이고 Anti-Fragile, Cloud Native 시스템 아키텍처로 변화/추구
다른 아키텍처에 비해 시스템 변화가 적다.
변화에 바로 적응 가능하며 비용이 저렴하다.
Antifragile 아키텍처 특징
- Auto scaling
- 트래픽 등에 따라 자동으로 인스턴스를 추가 또는 제거하는 서비스
- https://affectionatedevlog.tistory.com/5 (EC2 Autoscaling 작성 글 참고)
- Microservices
- 모놀리식 아키텍처와 달리 전체 서비스를 구축하고 있는 개별적인 모듈이나 기능을 독립적으로 개발, 배포, 운영할 수 있는 서비스
- Chaos engineering
- 시스템이 급격하고 예측하지 못한 상황에서라도 견딜 수 있는 신뢰성 있는 소프트웨어 시스템의 실행 방법이나 규칙
- Continuous deployments
- 지속적 통합, 지속적 배포 (CICD)
Cloud Native 아키텍처 특징
- 확장 가능한 아키텍처
- 시스템의 수평적 확정에 유연
- 확장된 서버로 시스템의 부하 분산, 가용성 보장
- 시스템 또는, 서비스 애플리케이션 단위의 패키지 (컨테이너 기반 패키지)
- 모니터링
- 탄력적 아키텍처
- 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축
- 분할/종속되지 않은 서비스 구조
- 무상태 통신 프로토콜
- 서비스의 추가와 삭제 자동으로 감지
- 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리)
- 장애 격리 (Fault isolation)
- 특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음
Cloud Native Application

1. Microservices
- 아래에서 더 자세히 설명
2. CICD
- 지속적인 통합, CI(Continuous Integration)
- 통합 서버, 소스 관리(scm), 빌드 도구, 테스트 도구
- ex) Jenkins, Team CI, Travis CI
- 지속적 배포
- Continuous Delivery (운영자 o)
- Continuous Deployment
- Pipe line
- 블루그린 배포 등 고려 가능
3. DevOps

- 개발조직과 운영조직의 통합
- 테스트, 피드백, 업데이트 등의 과정을 전체 개발 일정이 완료될 때까지 지속적으로 끊임없이 진행해가게 함
- 클라우드 네이티브 애플리케이션은 이러한 DevOps 환경에 맞춰서 서비스의 구조를 작은 단위로 분할할 수 있게 함으로써 더 자주 통합, 테스트, 배포할 수 있는 구조가 될 수 있다.
4. Container 가상화

- 클라우드 네이티브 아키텍처 핵심
- 기존의 하드웨어 가상화 또는 서버 가상화에 비해서 적은 리소스를 사용하여 가상화 서비스 구축 가능
1. 하드웨어 시스템 위에 운영체제 설치
- 전통적인 방식의 개발 시스템
2. 가상화 방식
- 호스트 시스템이 가지고 있는 물리적인 하드웨어를 쪼개서 사용하는 개념
- OS위에 Hypervisor 기술을 통한 가상머신을 기동 하는 방식
- 시스템이 가지고 있는 물리적인 하드웨어, 호스트 시스템이 가지고 있는 물리적인 하드웨어를 쪼개서 사용하는 개념
- 하나의 가상머신은 독립적인 운영체제를 가지고 실행될 수 있으나, 호스트 운영체제에 많은 부하를 주게 되고 시스템 확장에 한계가 있다.
3. 컨테이너 가상화
- 공통적인 라이브러리나 리소스를 공유해서 사용 가능
- 각자 필요한 부분에 대해서만 독립적인 영역에다가 실행할 수 있는 구조
- 기존의 하드웨어 가상화 기술보다는 더 적은 리소스를 사용하게 될 수 있다
- 컨테이너 가상화 위에서 작동되는 서비스들은 가볍고 빠르게 운영할 수 있다
Monolithic vs. Microservice

- 모놀리식 아키텍처(Monolithic)
- 모든 서비스 내용들이 하나의 어플리케이션에서 유기적으로 연결되어 작동하고 배포
- 서로 의존성을 가진 채 패키징 된 서비스
- 마이크로서비스 아키텍처(Microservice)
- 애플리케이션을 구성하는 각각의 구성 요소 및 서비스의 내용을 분리해서 개발하고 운영하는 방식
- 유지보수나 변경사항을 적용하는데 모놀리식보다 유리
- 분리된 서비스가 다른 서비스에 영향을 주지 않거나 최소화하면서 독립적으로 배포 가능
Monolithic Architecture

- 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스
- 애플리케이션에서 사용하는 데이터가 한 곳에 모여 참조되어 서비스되는 형태
- 일부만 수정되더라도 전체 애플리케이션을 다시 빌드하고 테스트하고 패키징해야 된다는 단점을 가지고 있다
What is the Microservice?
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, on an HTTP resource API....These services are built around business capabilities and independently deployable by fully automated deployment machinery ...
- James Lewis
There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies
- Martin Fowler
Monolith vs Front & Back vs Microservice Architecture

Microservice의 특징
- Challenges
- Small Well Chosen Deployable Units
- Bounded Context
- RESTful
- Configuration Management
- Cloud Enabled
- Dynamic Scale Up And Scale Down
- CI/CD
- Visibility
Microservice를 도입하기 전 고려해야할 점
- Multiple Rates of Change
어느정도 변화가 생길 것인가? 비용, 공수 등 - Independent Life Cycles
독립 라이프 사이클: 어플리케이션을 구성하고 있는 각각의 서비스들이 독립적으로 개발되고 운영될 수 있도록 서비스 경계가 잘 만들어져 있는가 - Independent Scalability
서비스 유지보수 및 확장성 - Isolated Failure
오류사항이 독립적인가 - Simplify Interactions with External Dependencies
외부 종속성을 최소화하고 (결합도를 낮추고) 응집도를 높인다 - Polyglot Technology
각각 서비스들이 제공해야 되는 기능에 맞는 프로그램의 언어와 데이터베이스 운영 환경을 자유롭게 선택하고 지정할 수 있는가
MSA 표준 구성요소

Spring Cloud
https://spring.io/projects/spring-cloud
Spring Cloud
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices and
spring.io

- 스프링 클라우드는 개발자들이 분산 시스템을 신속하게 구축할 수 있는 도구를 제공하고 도와주는 스프링부트 기반 프레임워크
- e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices and contract testing
- 스프링 클라우드를 사용하기 위해서는 스프링 부트가 필수로 사용되어야 한다.

- 앞으로 다뤄보고자 하는 영역

출처 - 인프런 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의
'Review' 카테고리의 다른 글
| [Book Review] 더 머니북 (1) | 2024.08.31 |
|---|---|
| [실용주의 프로그래머] 동시성 (0) | 2024.03.04 |
| [실용주의 프로그래머] 실용주의 접근법 (0) | 2024.02.20 |
| [실용주의 프로그래머] 실용주의 철학 (1) | 2024.02.14 |