토요일, 3월 11, 2017

[독서광] 마이크로서비스 아키텍처 구축

어쩌다 보니 최근 기술 서적에 대한 독후감을 거의 적지 못했는데, 오늘은 감수 요청을 받고 미리 읽은 독자로서 '마이크로서비스 아키텍처 구축'에 대해 간단한 서평을 남기려 한다. 책에 실린 '추천의 글'을 옮겨온다.

최근 클라우드 환경이 일반화되면서 많은 서비스가 클라우드로 이전하거나 클라우드에서 시작되고 있다. 하지만 클라우드의 확장성과 안정성은 공짜로 얻어지는 산물이 아니다. 기존의 일반적인 애플리케이션 개발 방법을 그대로 적용할 경우 비용절감, 탄력성, 회복성, 배포 편의성과 같은 좋은 특성을 누리기 어렵고 어떤 경우에 있어서는 오히려 서비스의 품질이 떨어지게 된다. 빠르게 변하는 클라우드 시대에 걸맞게 아키텍처 설계, 서비스 모델링, 실제 구현, 통합, 배포, 테스트, 모니터링, 확장에 전력을 다해야 비로소 고객 만족을 극대화하는 서비스를 제공할 수 있다. 이 책은 거대한 모놀리틱 시스템과 반대되는 마이크로서비스를 중심으로 클라우드 시대의 생존 방법을 제시하며 실제 사례를 중심으로 실무에 바로 도움이 되는 내용을 담았ㄷ. 따라서 아키텍처 설계, 실제 구현, 운영 업무를 진행하는 과정에서 많은 도움을 줄 것이다. 미시적인 컴퓨터 프로그래밍 부문에서 리펙토링이 기술 부채를 줄이는 수단이라면 거시적인 서비스 개발과 운영 부문에서는 마이크로서비스가 기술 부채를 줄이는 강력한 수단이다. 이 책은 현대적인 컴퓨팅 환경에 적응하기 위한 좋은 길라잡이가 될 것이다.

마이크로서비스의 정의는 마틴 파울러의 글에 나오듯이 독립적으로 배포 가능한 서비스들의 슈트로서 소프트웨어 애플리케이션을 설계하는 아키텍처 스타일을 일컫는다. 여기서 핵심은 바로 '독립적으로 배포 가능한'이라는 문구다. 모든 서비스를 한 통에 담은 기존의 방식과는 달리 응집력을 높이고 결합도를 떨어뜨리기 위해 서비스를 분할하고 이를 사용(use)하는 방식으로 단일 애플리케이션을 만든다. 이렇게 되면 변경의 범위가 적어지므로 자주 빠르게 서비스를 변경하고 확장할 수 있게 된다.

기본에 서비스를 만들 때는 3계층 구조(브라우저 UI-웹 서버-데이터베이스 관리 시스템)에 맞춰 거대한 실행 가능 단위로 구현하고 배포하는 방법을 사용했다. 아무리 사소한 변경이 있더라도 전체를 새로 배포해야 한다. 물론 어카이빙 형태로 배포하지 않고 단위 클래스 파일이나 공유 라이브러리 파일 단위로 배포하는 방법도 생각할 수 있지만 버전 관리 등을 고려하면 나중에 꼬이는 상황이 발생하기 마련이다. 게다가 클라우드 환경이 일반화되면서 작은 가상 기계나 컨테이너 단위로 애플리케이션을 배포할 수 있는 수평 확장 아키텍처가 인기를 끌고 있기 때문에 거대한 모놀리틱 개발 방식이 점점 시대에 뒤쳐지고 있다. 그렇다면 이런 상황에서 우리는 어떻게 대응해야 하나? 마이크로서비스는 _마이크로_라는 이름과는 달리 생각처럼 단순하지 않으므로 알아야 할 내용도 많고 피해야 할 함정도 많기 때문에 시행착오를 줄이려면 기초를 튼튼히 쌓고 접근할 필요가 있다.

'마이크로서비스 아키텍처 구축'은 거대한 시스템을 리펙터링해서 작은 단위로 쪼개고 이를 효과적으로 연결하는 아키텍처 설계 방법을 다룬다. 마이크로서비스 개념부터 시작해서 진화적 아키텍트를 소개하며 서비스 모델링 기법, 이상적인 통합 방법, 모놀리스 분해 방법, 배포 방법, 테스팅 방법, 모니터링 방법, 보안 강화, 콘에이의 법칙과 시스템 설계 방법을 설명한 다음에 대규모 마이크로서비스 고려 사항으로 마무리한다. 개념과 방법을 소개하며, 여러 가지 실제 사례를 제시하므로 마이크로서비스에 도전하기 전에 읽어두면 여러 면에서 이득을 얻을 것이다.

본문 구성이 어떤지는 미리 보기를 참조하기 바라며, 슬라이드셰어에 올라온 다음 발표 자료도 함께 읽어보기 바란다.

결론: 아키텍처 관점에서 마이크로서비스가 궁금한 개발자분들께 추천!

EOB

댓글 없음:

댓글 쓰기