BookLogs

마이크로서비스 아키텍처 구축 - 대용량 시스템의 효율적인 분산 설계 기법

밥먹고해요 2019. 3. 14. 05:17

본 문서는 아래의 책을 읽으며 인상 깊었던 일부 내용들을 발췌한 내용을 담고 있습니다.




p46


필자는 우리가 바라는 IT 아키텍트의 역할을 더 잘 요약하는 다음의 비유를 좋아한다. 에릭 도넌버그(Eric Doernenbug)아키텍트의 역할을 건축가보다는 도시 설계자(town planners)에 가까운 의미로 접근해야 한다는 아이디어를 처음으로 필자와 공유했다. 도서 설계자의 역할은 이전에 심시티(SimCity) 게임을 해봤던 사람이라면 누구에게나 친숙할 것이다. 도시 설계자의 역할은 다양한 정보 소스를 파악하고, 시민의 요구에 부응함과 동시에 미래의 용도까지 고려하면서 도시 배치를 최적화 하는 것이다.

도시 설계자가 도시 발전에 영향을 미치는 방식은 흥미롭다. 그는 '특정 건물을 거기에 만들라'고 하는 대신 도시를 구역화한다. 심시티 게임에서와 마찬가지로 도시 일부를 산업 구역이나 주거 구역으로 지정할 수 있다. 정확히 어떤 빌딩을 세울지는 다른 이들이 결정할 일이지만, 공장은 산업 구역에 세워야 한다는 규제는 존재한다. 도시 설계자는 구역 내에서 발생하는 일에 대해 지나치게 염려하기 보다는 사람이나 공공 설비가 구역 간을 어떻게 이동할 것인가에 대해 고민하는 데 더 많은 시간을 할애할 것이다.


도시는 시간이 흐르면서 변화환다. 거주자의 다양한 생활 방식과 외력에 의해 도시는 바뀌고 발전한다. 도시 설계자는 이 같은 변화를 예측하기 위해 최선을 다하겠지만, 도시에서 발생하는 모든 측면을 직접 통제하려는 노력은 헛수고임을 이미 알고 있다.


프랑크 부쉬만(Frank Bushmann)의 용어를 빌리자면, 아키텍트는 개발자도 거주할 수 있는(habitable) 시스템을 만들 의무가 있다.


p47


아키텍트와 마찬가지로 도서 설계자 또한 그의 계획이 수행되지 않는 때가 언제인지 알아야 한다. 도시 설계자는 권위적이진 않으므로, 지식 사항을 바로잡는 데는 최소한으로 관여해야 한다. 그러나 누군가 하수처리장을 주거지역에 지으려 한다면 도시 설계자는 이를 중단시킬 수 있어야 한다.


아키텍트로서 우리는 구역 내의 일보다는 구역 사이에서 발생하는 일을 더 걱정해야 한다. 이는 아키텍트가 서비스 간 통신 방법에 대해 고민하거나 시스템 전반의 산태를 적절히 모니터링하는 데 더 많은 시간을 할애해야 한다는 것을 의미한다.


p48


만약 한 서비스는 HTTP상에서 REST를 노출하고, 다른 서비스는 프로토콜 버퍼를, 또 다른 서비스는 자바 RMI(Remote Method Invocation)를 사용하기로 결정한다면, 호출하는 서비스가 의사소통을 위한 다양한 스타일을 이해하고 지원해야 하므로 통합 작업은 악몽이 될 수 있다. 이것이 필자가 다이어그램 박스들 간에 벌어지는 이벤트를 걱정하고, 내부에서의 일에 대해서는 자유로워야 한다는 지침에 집착하는 이유다.


p51


누군가의 원칙(principle)이 다른 사람에게는 실천 사항(practice)이 될 수 있다. 예를 들어, 우리는 REST 사용을 실천 사항 보다는 원칙이라고 부를 수 있다. 요점은 시스템이 어떻게 전개될지 설명하는 대단히 중요한 아이디어를 내포해야 하고, 사람들이 그런 아이디어를 구현할 수 있을 만큼 충분히 상세해야 한다는 것이다. 단일팀처럼 충분히 작은 그룹웨서 원칙과 실천 사항을 결합하는 일은 문제가 되지 않는다. 그러나 큰 조직의 경우에는 공통된 원칙을 지향하면서도 기술과 실천 사항이 서로 다를 수 있으며, 장소에 따라 다른 요소가 필요할 수 도 있다. 예를 들어, 닷넷 팀과 자바 팀의 원칙은 서로 같더라도 공통된 실천사항과 더불어 고유의 실천 사항이 별개로 존재할 수 있다.


p53


넷플릭스의 소프트웨어 엔지니어인 벤 크리스텐센(Ben Christensen)이 언급한 것처럼, 우리가 큰 틀에서 시스템을 생각한다면 자율적인 수명주기를 가지면서도 함께 협업하는 수많은 작은 부분으로 구성된 응집력 있는 시스템이 되어야 한다. 그러므로 우리는 거시적 시각을 잃지 않으면서도 개별 마이크로서비스 간의 자율성 최적화와 관련한 균형을 찾아야 한다. 이를 위한 확실한 방법 중 하나는 각 서비스가 가져야 할 명확한 속성을 정의하는 것이다.


p54부터..


(계속,...)