티스토리 뷰
'자바 기반의 마이크로서비스 이해와 아키텍처 구축하기'는 약 4달간 함께 했던 회사 선배가 추천해준 책이다.
항상 읽어야지 하며 미루다가, 주말을 활용하여 읽어 봤다. 기존 모놀리스 서비스를 구축하는 방법에서, 왜 마이크로 서비스로 구축을 해야 하는지 간단한 예제와 함께 설명해 준다.
먼저 모놀리스 아키텍처는 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스되고, 데이터 또한 한 곳에 모인 데이터를 참조하여 서비스하는 우리가 일반적으로 개발하고 있는 방법이다. 이에 비해 마이크로 서비스 아키텍처는 아주 작은 단위로 동작하는 서비스가 구동되도록 시스템 및 소프트웨어의 구성과 구성 요소 간의 관계를 정의하고 설계하는 방식이다. 두 아키텍처 간 가장 큰 차이 점은, 하나의 애플리케이션 형태가 아닌 분할된 다수의 서비스 라는 점이다. 마이크로 서비스 아키텍처는 애플리케이션 기능 뿐만 아니라 데이터까지 분리하여 격리된 독립된 환경으로 구성한다.
그렇다면 우리는 왜 마이크로 서비스를 사용해야 하는가?
독립적으로 실행할 수 있고, 다른 서비스들과 결함이 없는 서비스 이기 때문이다. 구현과 배포, 실행 측면의 독립성도 있겠지만 장애에 대한 영향도 측면에서도 영향을 받지 않는다. 이는 서비스 간의 연간관계를 최소화하여 상호 영향을 주지 않고 독립적으로 실행되기 때문이다. 기존 모놀리스 애플리케이션에서는 특정 기능 한 곳에서 문제가 된다면 특정 비즈니스 자체가 불가능한 상황이 발생할 수도 있다. 그러나 마이크로 서비스에서는 좀더 빠르게 대응할 수 있고, 서킷 브레이크 기능을 통해서 다른 기능으로 대체 수행시켜 장애를 회피할 수 도 있다.
또한, 요즘은 비즈니스 변화가 빠르고 수시로 애플리케이션을 변경하여 적용해야 하는 경우가 많다. 그러나 하나의 거대한 애플리케이션으로는 유연하게 대처할 수 없다. 일부만 수정하려고 해도, 관련 없는 기능 들 까지 빌드되어 다시 배포해야 한다. 변경 배포에 따른 영향도를 파악하기 위해 직접 관련이 없는 많은 사람들의 노력과 시간을 할애해야 한다.
팀 구성원은 각각의 전문성을 가진 팀원들로 기획자, 아키텍트, 설계자, 개발자, 디자이너 등이 하나의 팀으로 구성되는게 이상 적이다. 마이크로 서비스 측면에서 팀 구성은 서비스 개발에서 운영까지의 의사결정에 관한 모든 권한이 주어지고, 시장의 반응에 더욱 빠르게 대응할 수 있는 팀원으로 구성하는 것을 권한다. 개발팀끼리 모이거나 기획팀끼리 모이는 전통적인 팀의 형태는, 팀간의 의사결정을 하기까지 짧게는 수일에서 길게는 수주 일의 시간이 걸리기 때문이다.
예제로는 커피 전문점 시스템 개발을 스프링 부트, 줄, 유레카, 터빈, 히스트릭스 대시보드, 서킷 브레이커, 도커 빌드를 활용하여 마이크로 서비스로 개발한다. 프로젝트는 서비스에 따라 회원 확인 프로젝트, 커피 주문 프로젝트, 주문 처리 상태 확인 프로젝트로 나뉘어 있다.
커피 전문점 마이크로서비스 아키텍처 구성요소
구성 요소 |
설명 |
깃 소스 저장소 (Git repository) |
마이크로서비스 소스 관리 및 프로파일 관리 |
설정 서버 (Config server) |
깃 저장소에 등록된 프로파일 연계 |
유레카 서버 (Eureka server) |
마이크로서비스 등록 및 발견 |
줄 서버 (Zuul server) |
마이크로서비스 부하 분산 및 서비스 라우팅 |
마이크로서비스 (Microservice) |
커피주문, 회원 확인, 주문 처리 상태 확인 서비스 |
큐잉 시스템 (Queueing system) |
마이크로서비스 간 메시지 발행 및 구독 |
터빈 서버 (Turbine server) |
마이크로서비스의 스트림 데이터 수집 |
히스트릭스 대시보드 (Hystrix Dashboard) |
마이크로서비스 스트림 데이터 모니터링 및 시각화 |
코딩이 중심이 되는 책이 아니다 보니, 기존에 다른 IT관련 서적보다는 조금 더 읽기 쉬웠고 책이 잘 넘겨 졌다. 이런 표현이 그렇지만, 가볍게? 읽기 좋은 책이라고 생각된다. 또한, 책에서 소개된 기술들을 보며 지금 내가 개발 및 운영하고 있는 서비스에 도입해봐야 겠다는 생각을 했다.
'jvm언어관련 > Spring(SpringBoot)' 카테고리의 다른 글
ModelMapper사용하기 (0) | 2019.02.22 |
---|---|
간단한 springboot error 처리 (0) | 2019.02.22 |
EhCache 사용(Spring+Maven) (0) | 2019.02.11 |
AsyncRestTemplate 사용하기 (0) | 2019.01.28 |
스프링의 DI(Dependency Injection) 이란? (0) | 2019.01.21 |
- Total
- Today
- Yesterday
- java
- 슬랙 /
- 슬랙
- update query multi row
- springboot https
- vue.js
- effectivejava
- 몽고DB 완벽가이드
- 다중 업데이트
- MSSQL
- 그레이들
- Slack
- 슬랙봇
- update query mutiple row
- visual studio code
- multiple row update
- 뱅크샐러드 유전자
- 이펙티브자바
- update query
- gradle
- update query set multiple
- 업데이트 쿼리
- update set multi
- update set multiple
- 뱅크샐러드
- SpringBoot
- 싱글턴
- 뱅셀 유전자
- spring-boot-starter-data-redis
- 이것이 자바다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |