David Heinemeier Hansson: Microservices vs. Monolith - https://www.youtube.com/watch?v=rkXGSLf-rVQ
For the last several years, one of the big titanic battles in how to structure your application has been to go microservices or to go monolith. This debate has been raging on and off, sometimes intensively, otherwise dulling down. But as of recent note, it's kind of blossomed up again, because a lot of applications who've gone with a microservices architecture when that was the hot, hot thing, have I realized that perhaps it wasn't so hot for them? Even the likes of Amazon has backed off on microservices for at least some of their applications. And I think there's a really good reason for that. Microservices is a pattern that is about organizational structure much more than it is about how to organize your code. If you have incredibly large teams working on single applications and you have to break those up such that the individual teams can own a sub area of it, yeah, microservices can make sense in some cases. But if you're a team of 10, 20, maybe even 50 or 100 developers, going with a monolith is just so much simpler. Instead of replacing all your method calls with network calls, you can just keep it on the same computer. When you don't have to worry about network connectivity to make the app do its most basic functions, you cut out a huge swath of complexity that otherwise bogs you down, makes things hard to debug, makes it hard for any individual to understand the whole system. And I think what's really key here is to realize that different patterns fit different organizations. Microservices, and that whole approach came out of companies like Netflix, with thousands and thousands of developers who needed a different approach to building their systems and making it scale for that level of an organization. And if you take those kinds of patterns, the patterns that were built and extracted from companies of thousands of developers, and you apply them to companies of 5, 10, or 100 developers, you very often get really poor results. You are paying a heavy complexity tax for an environment and a context that just doesn't exist in your organization. That, to me, is one of the most foolish things that you can do. So I love the monolith. I love it so much. I coined the term the Majestic Monolith many years ago. I've been advocating for keeping things as simple as possible for as long as possible. And the Majestic Monolith does exactly that.
David Heinemeier Hansson: Microservices vs. Monolith - https://www.youtube.com/watch?v=rkXGSLf-rVQ
지난 몇 년간, 애플리케이션 구조를 설계하는 방식에 있어 마이크로서비스를 선택할지 모놀리스를 선택할지에 대한 거대한 논쟁이 있어왔습니다. 이 논쟁은 때로는 격렬하게, 때로는 잠잠하게 계속되어 왔는데, 최근 들어 다시 불꽃이 타오르고 있습니다. 마이크로서비스 아키텍처가 한창 유행이던 시절에 그 방식을 도입했던 많은 애플리케이션들이 사실 그게 자신들에게는 그다지 좋지 않았다는 것을 깨달았기 때문입니다. 아마존 같은 대기업조차 최소한 일부 애플리케이션에서는 마이크로서비스에서 물러섰습니다. 저는 그 이유가 충분히 납득된다고 생각합니다. 마이크로서비스는 코드를 구성하는 방법보다는 조직 구조에 관한 패턴입니다. 단일 애플리케이션에 엄청나게 큰 팀이 작업하고 있고, 개별 팀이 특정 영역을 독립적으로 담당해야 한다면 네, 마이크로서비스가 어떤 경우에는 의미가 있을 수 있습니다. 하지만 10명, 20명, 혹은 50명이나 100명 정도의 개발자 팀이라면, 모놀리스가 훨씬 더 단순합니다. 모든 메서드 호출을 네트워크 호출로 대체하는 대신, 그냥 같은 컴퓨터 안에서 처리하면 됩니다. 앱의 기본 기능을 수행하는 데 네트워크 연결을 걱정하지 않아도 된다면, 복잡성의 상당 부분을 덜어낼 수 있습니다. 그 복잡성이 발목을 잡고, 디버깅을 어렵게 만들고, 전체 시스템을 한 사람이 이해하기 어렵게 만드는 원인이 됩니다. 핵심은 서로 다른 패턴이 서로 다른 조직에 맞는다는 것을 이해하는 것입니다. 마이크로서비스와 그 접근 방식은 수천 명의 개발자를 보유한 Netflix 같은 기업에서 나왔습니다. 그들은 시스템을 구축하고 그 규모의 조직에 맞게 확장하기 위한 다른 접근 방식이 필요했습니다. 수천 명의 개발자를 가진 기업에서 만들어지고 추출된 그런 패턴을 5명, 10명, 혹은 100명의 개발자를 가진 회사에 적용하면, 매우 좋지 않은 결과를 얻는 경우가 많습니다. 여러분의 조직에는 존재하지도 않는 환경과 맥락을 위해 막대한 복잡성의 대가를 치르고 있는 것입니다. 저는 그것이 할 수 있는 가장 어리석은 일 중 하나라고 생각합니다. 그래서 저는 모놀리스를 사랑합니다. 정말로요. 저는 몇 년 전에 '웅장한 모놀리스(Majestic Monolith)'라는 용어를 만들었고, 가능한 한 오랫동안 최대한 단순하게 유지하는 것을 지지해 왔습니다. 그리고 웅장한 모놀리스는 정확히 그것을 실현합니다.