grep

Backend

마이크로서비스, 그 단어의 역사

김희수Higgs(힉스) / 기술기획팀여기어때

2023년 7월 21일

원문에서 보기 ↗

2018년 이전에 고등학교를 졸업하신 분들께는 굉장히 생소할텐데, 2015년 개정 교육과정 중 ‘과학사’라는 선택과목이 있습니다. (그 이전에도 일부 학교에서 시범적으로 시행하기는 했습니다.) 과학 이론이나 개념 설명보다는 역사적 인물이나 사건, 그 시대의 상황을 이야기처럼 다루는 수업이 진행되고 있습니다. IT산업 한켠에서 일하고 있는 사람으로서, 어쩌면 가까운 미래에 ‘정보기술사’라는 과목도 새로운 교과로 채택되지 않을까 하는 기대를 가지고 이야기를 시작해 보겠습니다.

Photo by Museums Victoria on Unsplash

마이크로서비스(Microservice)라는 단어는 애자일, 데브옵스 및 REST(Representational State Transfer)를 대체하여 모든 이력서 및 컨퍼런스 발표에 등장하는 최신 유행어입니다. 그 개념을 설명할 수 있는 사람들은 많지만, 서로 다른 플랫폼 간 더 나은 통신방식과 더 단순함, 더 사용자 친화적인 시스템을 제공하려는 지속적인 노력과 함께 해 온 그 용어의 기원과 역사를 말할 수 있는 사람은 드문 것 같습니다. 이 글에서는 이러한 내용을 최대한 시간 순서대로 정리해 보았습니다. 관련된 사람들의 이름을 찾을 수 있거나 출처가 상대적으로 명확한 사건들만을 다루었기 때문에 실제 일어난 일과는 시차가 있거나, 누락된 사실이 있다는 점은 미리 양해를 구하겠습니다.

개념의 출발

마이크로서비스를 설명할 수 있는 적당한 어휘가 없던 시절, 그러한 용어가 필요한 상황이 되도록 점차 개념이 만들어지는 단계가 있었습니다. 이 개념은 소프트웨어 아키텍트와 엔지니어가 Monolithic 애플리케이션의 한계를 깨닫기 시작한 2000년대 초반에 뿌리를 두고 있습니다. 기존의 시스템들이 대규모로 성장해가며, 유지 관리 및 확장이 어려워져 개발 주기가 길어지고 다운타임이 증가했습니다. 그리하여 일부 아키텍트와 개발자들은 기존 애플리케이션을 독립적으로 개발, 배포 및 유지 관리할 수 있도록 더 작고 독립적인 서비스로 분해하는 아키텍처를 시험해보기 시작했습니다.

이 개념을 가장 먼저 사용했다고 주장하는 사람은 Fred George인 것 같습니다. 이 분은 1974년부터 26년 간 IBM에 재직하였고, 2003년부터 2007년까지 ThoughtWorks(뒤에 나오는 James Lewis와 Martin Fowler 또한 이 기업과 관련이 있습니다.)라는 소프트웨어 기업에서 Vice President로 재직하였습니다. 현재는 본인의 이름을 딴 Fred George Consulting과 Scienta AS에서 컨설턴트로 일하고 있습니다. 근 50년 정도에 걸쳐 70여개 언어를 경험했고, 일흔이 넘은 나이에도 직접 개발을 하고 있다고 합니다. 개발자 무정부주의(Programmer Anarchy, 프로그래머는 관리자가 필요 없다는 의미의 개발자 중심주의)라고 명명된 후기 애자일 프로세스의 아버지라고 소개되곤 합니다.

이 분이 ThoughtWorks에 재직하던 2004년, Jeff Bay의 이름을 딴 Baysean Principals라고 불리는 것을 기반으로 아키텍처 초기 원형을 작업하기 시작했습니다. 앞서, Jeff Bay는 SOA(Service Oriented Architecture)를 대규모 서비스에 적용하기 위해 필요한 요건들을 제안했는데, 1) 서비스별로 분산하여 배포할 수 있어야하고, 2) 각 서비스가 데이터베이스 스키마를 공유하지 않으며, 3) 서비스 간 서로 데이터를 쉽게 이전할 수 있어야 한다. 와 같은 내용이었습니다.

마이크로서비스라는 단어가 생성되기 이전, 가장 유사한 어휘로 Peter Rodgers 박사는 “Micro Web Service”라는 용어를 최초로 사용했습니다. 이 분은 1060 Research의 설립자이자 CEO이며, 1060 NetKernal XML 애플리케이션 서버의 설계자입니다. 1060 Research를 시작하기 전에 그는 휴렛패커드의 XML 연구 프로그램을 설립하고 이끌었으며, 소프트웨어 비즈니스에 전략적 컨설팅을 제공했습니다.

이 분은 2005년 2월, 클라우드 컴퓨팅 엑스포의 Web Service Edge 컨퍼런스 발표에서 본인의 네 번째 슬라이드에 “Software components are Micro-Web-Service”라고 언급하였습니다. 이 개념은 1999년 휴렛패커드 연구소의 Dexter 연구 프로젝트에서 시작한 것으로 보입니다. 이 프로젝트의 목적은 코드를 더 견고하게하고 대규모의 복합적인 소프트웨어 시스템을 어떠한 변화에도 유연하게 만드는 것이었습니다. 이 연구의 결과로 일반화된 형태의 Computing Abstraction인 ROC(Resource-oriented Computing) 개념이 개발되었습니다. 유닉스 시스템 내에서는 모든 것이 파일로 존재했다면, ROC에서는 모든 것이 Micro-Web-Service로 존재할 수 있다는 개념입니다.

비슷한 시기에 유사한 개념을 소개한 분이 또 있습니다. Alistair Cockburn이라는 Computer Scientist인데, 이 분은 1991년부터 지금까지 프리랜서 컨설턴트로 일하고 있습니다. 국제 애자일 컨소시움(International Consortium for Agile)의 공동 설립자로, Heart of Agile 컨셉을 만들고 서명합니다. 몇 가지 저서를 남겼는데, “Writing Effective Use Case”를 집필한 베스트셀러 작가입니다.

그 중 2005년 1월, Hexagonal Architecture라는 제목으로 작성한 문서에서 마이크로서비스와 유사한 설계 패턴을 소개합니다. 이 패턴에서는 한 서비스를 다른 서비스들과 완전히 독립적으로 Deploy하고 런타임에서는 서비스와 비즈니스 로직을 Layer로 분리/독립하여 마이크로서비스 설계가 가능하게 했습니다. Trigger Data, Notifications, Administration, Database 등, 네 개의 주요 영역을 육각형모양에 그려서 표현하고 Hexagonal이라는 단어를 붙인 이유는 아무도 모르는 것 같습니다.

손으로 그렸습니다. 발 아니구요.

Juval Löwy 또한 비슷하게 선구적인 사상을 가지고 있었습니다. 이 분은 소프트웨어 아키텍트이면서 IDesign이라는 소프트웨어 기업의 설립자입니다. .NET 아키텍처 컨설팅에 특화된 기업이라, Microsoft 내부 프로젝트에도 여러 차례 참여하였습니다. 그리하여 본인의 사상을 WCF(Windows Communication Foundation)을 통해 전파하기도 합니다. 최근 저서 “Righting Software”는 소프트웨어 아키텍트 사이에서 상당히 인기가 있었다고 합니다.

이 분은 2007년부터 마이크로서비스와 관련한 문서와 발표에 대한 기록이 있습니다. 1) 서비스는 유닉스와 같은 파이프라인을 사용하여 구성되며 웹이 유닉스를 만나 아주 느슨한 결합으로 서비스가 서비스를 호출한다. 2) 복잡한 서비스 조합들은 간단한 URI(Uniform Resource Identifier) 인터페이스 뒤에 추상화한다. 3) 모든 클래스를 낱개의 서비스화하여 시스템을 구성한다. 이렇게 마이크로서비스 컨셉을 소개하고 전파합니다, 그러나 그 단어를 만드는 데는 조금도 기여하지 않은 것 같습니다. 아직까지 “마이크로서비스는 없다. 오로지 서비스만 존재할 뿐(There are no microservices — only services)”이라고 이야기한다고 합니다.

나중에 알려진 일이지만, Amazon 또한 2001년부터 SOA로 전환할 때 이러한 방식을 활용했다고 합니다. 2002년 공개된 Bezos’ mandate와 최근에 알려진 two-pizza rules를 더하면 우리가 알고 있는 마이크로서비스 컨셉과 정확하게 일치합니다. 2005년까지 amazon.com의 CTO였던 Steve Yegge와 그 뒤를 이어 현재까지 역임하고 있는 Werner Vogels는 Amazon이 마이크로서비스라는 용어를 최초로 사용하지는 않았지만, 이 설계방식의 기원이며 이를 최초로 구현한 기업이라고 주장합니다.

더 멀리 본다면

마이크로서비스 개념의 조상을 찾기 위해, 1970년(1969년이라고도 알려져 있는데, 벨연구소 문서에 처음으로 등장한 시점은 1978년 입니다.) 최소 모듈단위 소프트웨어 개발을 설명한 유닉스 철학까지 거슬러 올라가기도 합니다. “각자 프로그램이 한가지 일을 잘하게 하라.”, “몇 주안에 설계하고 개발하도록 노력하라.”를 포함한 네 가지로 정리되어 있는 이 철학은, 마이크로서비스와 애자일을 설명하고 있는 것 같기도 합니다.

1980년대 초, 유닉스 쉘 위에서 동작하는 프로그램의 프로세스간 통신 방식에서 힌트를 얻어 Sun Microsystems에서 개발한 최초의 시스템 분산 처리 기술 RPC(Remote Procedure Calls)에서 기원한다고도 합니다. 아니면 1988년 개발된 DCE(Distributed Computing Environment) 또는 1991년 개발된 CORBA(Common Object Request Broker Architecture)를 상용 서비스에 활용할 수 있는 아키텍처 관점에서의 시초라고 볼 수 도 있습니다. 1999년 Microsoft에서 출시한 SOAP(Simple Object Access Protocol)라는 “작동할 수 있는 가장 간단한 작업 수행”으로 시작되었다고 이야기 하는 분도 있는 반면, 본질적으로 SOAP는 HTTP를 통해 개체 메서드를 호출하는 방법에 지나지 않는다고 생각하는 분도 있습니다. 이 시기를 데이터 네트워크 기술이 발전하면서 무엇이든 분산하여 처리해도 되겠다는 아이디어가 태동하는 기간으로 여긴다면 아주 틀리지는 않을 것 같습니다.

단어의 탄생

마이크로서비스는 아직도 공식적으로 사전에 없는 단어입니다. 그렇다면, (사전에 실리기까지 충분한 시간이 지나지 않은 다소 가까운 과거인) 최근에 누군가가 처음으로 만들고 널리 회자되는 과정을 역추적 할 수 있을 것 같습니다.

위키피디아는 사전이 아닙니다.

위에서 언급한 SOA, SOAP, REST 등의 방식이 인기가 많아지고 널리 사용되기 시작하던 시기에 드디어 마이크로서비스라는 단어가 처음 등장합니다. 2011년 5월, 베네치아 인근에서 열린 Software Architect Workshop에서 ThoughtWorks의 동료였던 Martin Fowler와 James Lewis, Fred George 등 몇 사람이 공동 연구했던 아키텍트 스타일을 설명하기 위해 이 단어를 사용했습니다. 2012년 5월, 이들은 “마이크로서비스”가 그들이 연구하고 있는 내용을 설명하는 가장 적절한 이름이라고 결정하고 공식적으로 채택했습니다.

그 중 Martin Fowler에 대해서 소개드리면, 개발자이면서 소프트웨어 아키텍처에 대한 서적을 10권 가까이 저술하였습니다. 그 중 “Refactoring”은 1999년 출간 당시 상당한 반향을 일으켰고, 개정을 거듭하며 코드 리팩토링 관련 서적으로는 지금까지도 높은 인기를 유지하고 있습니다.

2012년 3월, James Lewis는 크라쿠프에서 열린 33rd Degree Conference(자바 개발자 컨퍼런스인데, 2011년에 시작하여 2014년까지 개최되었고 2015년부터는 Devoxx로 통합되었습니다.)에서 “Micro services — Java, the Unix Way”라는 제목으로 이런 아이디어에 대해 몇 가지 사례 연구 중심으로 발표했습니다. 이 분은 2005년부터 지금까지 ThoughtWorks에서 소프트웨어 아키텍트로 일하면서 마이크로서비스를 이용한 다양한 서비스를 만들고 있습니다.

2012년 초, Netflix의 Adrian Cockcroft 또한 마이크로서비스를 섬세한 SOA(Fine-grained SOA)라고 설명하며, 그들의 전체 시스템에 적용할 수 있는 규모로 이 스타일을 적용하기 시작했습니다. Netflix는 그 보다 앞선 2008년, 단 하나의 세미콜론을 빠뜨리는 실수로 대규모의 장애를 경험한 이후 그들의 인프라를 클라우드로 이전함과 동시에 꾸준히 이러한 설계 방식을 개척해 왔습니다. 2010년 Daniel Jacobson이 합류하여 API(Application Programming Interface)개발 프로그램을 이끌며 AWS 클라우드 위에서 새로운 API가 동작하도록 구성하였습니다. 그리고 2011년 4월, 미동부지역 AWS의 정전으로 인한 대규모 장애를 또 한 차례 겪으면서 이러한 아키텍처의 필요성과 시급성을 완벽하게 체감하며 MSA(Microservice Architecture)를 엔터프라이즈 규모로 완성하는 계기가 되었습니다.

Adrian Cockroft는 1982년 Cambridge Consultant의 소프트웨어 엔지니어 경력을 시작으로 Sun Microsystems, eBay 등을 거쳐 2007년부터 2013년까지 Netflix에서 웹엔지니어와 클라우드 아키텍트로 근무했습니다. 이후 AWS 등에서 소프트웨어 아키텍트로 일했으며, 최근에는 프리랜서 컨설턴트 또는 파트타임 Tech Advisor로 활동하고 있습니다.

Daniel Jacobson은 NPR, Netflix, New York Times등에서 소프트웨어 엔지니어로 근무하였고 Edge-computing 및 API 분야의 전문가로 알려져 있었습니다. 클라우드 환경에서 API를 적합하게 활용하여 선구자적 입지를 구축하며 Netflix 서비스의 클라우드 전환을 성공적으로 이끌었다는 평가를 받고 있습니다.

이와 반드시 함께 언급되는 네 분이 있는데, Joe Walnes와 Daniel Terhorst-North, Evan Bottcher와 Graham Tackley입니다. 이들의 공통점은 모두 저명한 소프트웨어 아키텍트이며 ThoughtWorks에 근무한 경력이 있다는 점 입니다. 이 분들이 여기 근무한 기간은 각각, 2002~2006년, 2002~2009년, 2006~2021년, 2003~2008년 입니다. 네 분이 동시에 근무하던 2006년에 이 회사 안에서 어떤 중요한 사건이 있었나봅니다. 아마 이 분들도 엄청난 장애를 경험한 게 아닐까요.

어떤 만화의 일부가 떠오르신다면, 판사님 저는 모르는 일입니다.

2013년에는 IT업계의 다양한 그룹에서 마이크로서비스를 논하였고, 누구도 모르는 사람이 없을만큼 힙한 단어가 되었습니다. 마지막으로, 2014년 James Lewis와 Martin Fowler가 함께 몇 가지 실제 사례를 제공하며 마이크로서비스를 그들의 언어로 정의했습니다. 여기까지 읽은 분이라면 그 내용을 더 잘 아시리라 생각합니다. 그렇지 않으시다면 일독을 권해드립니다.

http://martinfowler.com/microservices/

저희 회사의 소프트웨어 플랫폼 또한 Monolithic 아키텍트를 MSA로 전환해 가고 있습니다. 앞서 살펴 본 소프트웨어 아키텍트 대가들이 주창한 바에 따르면, 아직까지는 절반의 성공이라고 평가할 수 있을 것 같습니다. 더욱 완벽한 아키텍처를 위해서는 몇 가지 최종 과제들이 남아 있습니다. 저희 회사에는 이 과제를 해결해 가는 분들이 있는데, 어쩌면 이분들이 서두에서 말씀드린 ‘정보기술사’의 마지막 페이지를 장식할 분들이 아닐까 생각해 봅니다. 그리고 MSA 이후의 새로운 아키텍처를 적용해 가는 여정에 대한 소개를 드릴 날도 머지 않았을 것 입니다.