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, 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 computer 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. 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명의 개발자가 있는 회사에 적용하면 매우 좋지 않은 결과를 얻게 됩니다. 여러분 조직에 존재하지 않는 환경과 맥락에 대해 무거운 복잡성 세금을 지불하게 됩니다. 제게 이는 가장 어리석은 일 중 하나입니다. 그래서 저는 모놀리스를 사랑합니다. 너무나 사랑해서 몇 년 전에 '장엄한 모놀리스'라는 용어를 만들었습니다. 저는 오랫동안 가능한 한 간단하게 유지하는 것을 주장해 왔습니다. 장엄한 모놀리스는 정확히 그렇게 합니다. 바로 그렇습니다.