spaci***
2024-01-02

아마존 소프트웨어 공학 분야 베스트셀러! 아키텍트, 설계자, 개발자를 위한 소프트웨어 엔지니어링 필독서
대용량 웹 분산 시스템을 위한 운영을 고려한 설계한 내용을 담은 Release의 모든 것을 읽어 보았다.
최근 대용량 웹 분산 시스템은 여러가지 이슈를 거치며 마이크로서비스 아키텍처의 시기를 거치고 있다고 한다.
아무래도 디커플링의 효과가 가장 큰게 아닌가 싶다.
기능 개발 완료는 1차적으로 서비스를 시작할 준비가 되었다는 것을 의미한다. 즉 아직 완성 단계는 아닌것이다. 많은 테스트와 실 운영상의 이슈를 해결하며 시스템을 안정화 시켜야 하는 단계로 생각이 든다. 이 과정에서 가장 최악의 경우는 실 서비스가 어렵다고 판단될 수 있고 그런 경우를 거치지 않기 위해서 대용량 서비스 아키텍처에 대한 지식을 미리 습득하는 것이 어느정도 중요하다 생각이 든다.
실 서비스 시, 서버가 크래시되며 남은 덤프와 로그를 통해 왜 크래시가 났는지 당시 어떤 상황인지를 유추할 수 있다. 위의 경우는 try, finally만 사용했고 예외 상황에서 메모리 누수와 데이터 증가가 빠르게 일어난 상황으로 보인다. 이런 장애 상황에 대한 여러가지 시나리오를 분류해서 소개하고 있다.
중앙 시스템 구조를 모노리스라고 부르는 것으로 보인다. 보통 일정 범위 안의 유저 풀 만이 보장된다면 모노리스 방식은 괜찮은 선택이 될 수도 있을 것이다. 거미줄 패턴은 부하 분산이 이루어 지겠지만 디버깅과 각종 장애 상황의 견고한 구현에 어려움을 겪을 수 있을 것으로 생각된다. 아마 마이크로서비스 아키텍처는 거미줄 패턴에 더 가까울 것으로 생각된다.
대용량 서비스를 구성할 땐, 일어날 것이라 생각되는 소프트웨어 로직 장애 뿐만 아니라 하드웨어와 맞물린 이슈들도 예상하여 작업해야 하는 것으로 보인다. 나열된 서비스들이 상호간에 통신을 하며 계산을 하고 최종적으로 클라이언트에게 적절한 응답을 제공해 줘야하기 때문이다. 이 책에서는 하드웨어 이슈로 인한 대용량 분산 서비스 장애 상황 시나리오와 예방, 극복 예에 대해서도 다루고 있다.
이 글은 해당 출판사로 부터 책을 증정받아 작성되었습니다.