티스토리 뷰
마이크로서비스 아키텍처
<설명>
- 서비스 기능 단위로 시스템을 묶어 기능을 구현한다.
- 작은 단위의 컴포넌트로 구성
- 서비스 전체 기능을 독립된 작은 단위로 나누어 분리, 각각의 컴포넌트는 독립된 시스템 형태로 개발 및 운영한다.
- 서버용량이 다양하고 여러 언어로 구성된 다양한 애플리케이션이 있다.
<특징>
- 잘 분리된 마이크로서비스로 인한 탈중앙화
- 대규모 시스템을 위한 아키텍처
- 가벼운 네트워크 프로토콜
- 느슨한 결합
- 서비스 지향 아키텍처
<장점>
1. 독립성
- 하나의 비즈니스 기능을 담당하므로 다른 서비스와 간섭이 최소화된다.
2. 대용량 데이터를 저장 및 처리에 자유롭다.
- 서비스마다 독립된 데이터베이스를 가지고 있기 때문에 성능적인 부분에서 우세
3. 시스템 장애에 견고하다.
- 서비스가 느슨하게 결합되어 있고 독립되어 있기 때문에, 해당 서비스에 장애가 발생 시 다른 서비스에는 이상 없이 서비스된다.
4. 서비스 배포 주기가 빠르다.
- 모놀리식은 모든 기능이 하나의 코드베이스에서 개발되기 때문에, 배포 일정을 맞추어야한다.
- 하지만 마이크로서비스는 기능별로 분리되어 있기 때문에 해당 서비스 먼저 배포 가능하다.
5. 확장성이 좋아진다.
6. 사용자 반응에 민첩하게 대응
<단점>
1. 개발이 어렵다
- 분리된 데이터, 네트워크를 통한 데이터 통합을 고려해야 한다.
- 데이터가 분리되어 있기 때문에 Transaction을 사용할 수 없다.
- 커넥션 비용이 비싸고, 패킷 누락 및 네트워크 지연이 발생할 수 있다.
2. 운영이 어렵다.
비행기표를 예약한다 -> 인증 서버를 통해 확인 -> 항공 정보에 예약을 시도 -> 유효성 검사 후 해당 좌석을 예약 상태로 변경 -> 예약 기록을 남긴다.
이러한 과정이 이상 없이 처리되어야 한다.
중간에 요청이 처리되지 않았다면 개발자는 어느 단계에서 에러가 발생했는지 찾아야 한다.
3. 설계가 어렵다.
기능과 성격에 맞게 잘 분리되어야 한다. 너무 작게 혹은 크게 설계하면 안 된다.
-> 하나의 기능에 집중되어 모놀리식 아키텍처 시스템과 다른 점이 없어질 수 있다.
4. 데이터를 네트워크를 통해 전송한다.
기능이 복잡하고 처리량이 많은 시스템에 적합하며, 기능이 복잡한 시스템을 편리하게 개발하고 운영하기 위함
각각의 기능은 느슨하게 결합하고 기능별 독립된 데이터베이스를 사용한다.
컴포넌트들이 API를 통해 데이터를 주고받는다. -> 네트워크 프로토콜이 성능 저하의 원인이 될 수 있다.
직렬화, 역직렬화를 최적화하여 사용해야 한다. -> CPU, 메모리 시스템의 성능 저하 발생가능
MSA 대표 키워드
대규모 시스템, 분산 처리 시스템, 컴포넌트들의 지합, 시스템 확장 (서비스 지향 아키텍처와 유사)
모놀리식 아키텍처
<설명>
- 하나의 시스템이 서비스 전체 기능을 처리하도록 설계한 것
- 모놀리식은 하나의 애플리케이션만 있다.
<장점>
- 하나의 Web Application Server(WAS)에서 모든 기능을 처리하도록 구성한다.
- 하나의 데이터 저장소를 사용한다. -> Transaction에 대한 기능을 쉽게 사용할 수 있다. (영속할 때 일관성 유지)
- 간단한 구조 덕분에 시스템 운영과 개발이 편리하다.
- 버그를 발견하기 편하다 -> 로그를 하나의 파일에 기록할 수 있음
- 테스트코드를 작성하기 편하다.
- 개발하기 편리하다는 장점이 있다.
<단점>
- 하나의 서버에서 여러 기능을 제공하므로 서비스 기능이 많아지면 더욱 복잡해질 수 있다. (스파게티 코드가 되기 쉽다)
- 성질이 다른 코드가 하나의 파일에 존재할 수 있다 -> 버그를 수정할 때 서버를 다시 실행해야 한다.
- 서비스 규모가 커지면 git 브랜치 충돌 가능성이 높아진다.
- 소규모 개발팀이 간단하고 작은 기능을 제공하는 서비스를 개발한다면 모놀리식 아키텍처가 효율적이다.
- 빠른 시간 안에 개발할 수 있고, 운영과 유지 보수가 편함 -> 서비스 규모가 커지면 확장에 한계가 있음 (서비스 고도화의 한계)
- 처리량이 높은 엔터프라이즈 시스템들은 기본적으로 분산 시스템 아키텍처를 사용한다 (넷플릭스, 아마존) -> MSA
이 중 3개 이상의 상황에 처해 있다면 MSA로 전환을 고려해 볼 만하다
- 클라이언트 요청이 많아지고 로드 밸런서로 확장해도 한계가 있을 때
- 데이터베이스 성능을 높여도 더 이상 성능 개선의 여지가 없을 때
- 기능 확장 요구가 많지만 현재 시스템 구조로 불가능할 때
- 소스 코드가 너무 복잡해서 리팩터링이 필요할 때
- 기능 중 하나라도 변경되면 전체 QA를 해야 할 때
- 기능을 수정하면 다른 기능에 연쇄적으로 버그가 발생할 때
- 개발자는 늘었는데, 개발 속도는 이전 같지 않을 때
출처
https://www.yes24.com/Product/Goods/115306377
스프링 부트로 개발하는 MSA 컴포넌트 - 예스24
마이크로서비스 아키텍처 환경에서컴포넌트를 개발할 때 무엇이 필요한지 알아보고,이때 필요한 스프링 부트 사용법을 익힌다!마이크로서비스 아키텍처는 대규모 서비스의 ‘정답’처럼 여겨
www.yes24.com
'개발 > 이론 공부' 카테고리의 다른 글
객체 지향 프로그래밍 (Object Oriented Programing) 이란? (0) | 2022.11.12 |
---|---|
Python) __init__ , self 란? (0) | 2022.11.10 |
배열 (Array), 연결리스트 (LinkedList) 란? (0) | 2022.11.09 |
자료구조와 알고리즘이란? (0) | 2022.11.08 |
오버로딩(Overloading) , 오버라이딩(Overriding) 이란? (0) | 2022.11.08 |