Architecture Pattern Framework의 문제점과 고민해볼 것들 Software Engineering/Architecture2025. 4. 30. 05:40
1. Intro
: iOS App을 개발하면서 Ribs나 TCA같은 Architecture Pattern을 사용하지 않았습니다. 해당 Architecture에서 동의하지 못하는 부분도 있었지만, Architecture를 사용하기 위해 별도의 의존성을 추가해야 하는 것이 위험해 보였기 때문입니다.
작년 하반기에, Robert C. Martin이 Framework에 대해 이야기하는 영상을 보았습니다. Uncle Bob은 해당 영상에서 Framework를 사용했을 때 겪을 수 있는 문제들에 대해 이야기를 하였는데요, 영상을 보면서 제가 Ribs나 TCA Module에 대해 갖고 있던 생각이 정리가 되어서 글로 작성해보았습니다.
2. Framework의 문제점과 고민해볼 것들
: Framework가 무엇인지부터 정의해보죠. Ribs, TCA 처럼 개발자가 Application을 효율적으로 개발할 수 있도록 이런저런 것들을 제공하는 것을 Framework라고 부를 수 있습니다. Framework마다 정해진 규칙, 흐름대로 개발자가 Code를 작성하게끔 유도하므로(이런걸 Invasive Framework라고도 합니다)... Project에 있는 Code들의 일관성을 높일 수 있고, 동료들이 Code를 파악하기 쉬워지니 협업에도 도움이 됩니다.
※ Invasive Framework
: Application을 개발할 때, Framework에서 제공하는 API나 Type을 이용하여 개발하게끔 하는 Framework.
Framework를 이용하여 Application을 개발할 때, 생산성이 높아지고 편리해졌다고 느낄 수 있습니다. 하지만 시간이 갈수록 Application은 Framework에 깊게 결합되고 혹시라도 Framework에서 문제가 생긴다면 대응이 어려워지게 됩니다. TCA를 예로들면, 현재도(2025-04-30 기준) Xcode에서 Indexing이 느려져서 개발에 불편함을 주고있고, Swift Version Up 대응이 늦어지기도 했었습니다(link). 그리고 어떤 Spec을 구현해낼 때... Framework가 구현에 필요한 API를 제공하지 않거나, 예상하지 않았던 Flow로 Code를 작성해야 한다면 Framework가 오히려 방해가 될 수도 있습니다.
Framework를 사용하는게 무조건 나쁘다고 단정지을 순 없지만, Framework를 Project에 사용하기 전에 몇 가지는 고민해보는게 좋을 것 같습니다.
1. Framework를 사용하여 무엇을 얻고싶나요?
2. 사용하고자 하는 Framework가 그것들을 제공해주나요?
3. 그 Framework를 사용한다면 어떤 위험들을 감수해야 하나요?
Framework 대신에 단어만 바꾸면 일반적으로 많이 생각해보는 것들이죠? 만일 저라면... Redux와 유사하게 State를 관리하는 Code를 많이 작성하게 될 것 같고, Project 내 Code의 일관성을 높이고 싶으며, 사용하고자 하는 Framework에 존재하는 문제가 나에게 큰 영향이 없는 상황이라면 TCA를 사용할 것입니다.
Uncle Bob이 Framework에 대해 이야기하는 영상에서 이런 말을 했습니다. 좋은 Architect는 Production Code가 Framework에 과하게 의존하지 않게하여, Framework를 Safe & Unintrusive하게 유지할 수 있게한다구요. 그리고 Framework를 사용하려면, Framework를 만든 사람들이 사용자를 위해 Commit하지 않으니(꼭 그렇지는 않습니다만) 직접 Commit해야 한다는 것을 알고 있어야 한다고도 말했구요.
Framework에 너무 많은 것을 의존하지 않고, 충분히 고민 후 사용합시다. Framework는 도구니까요.
99. Reference
1) The problem with frameworks - Uncle Bob, youtube (link)
2) Invasive and Non-Invasive Frameworks in Java (link)
'Software Engineering > Architecture' 카테고리의 다른 글
MVP: Model-View-Presenter, The Taligent Programming Model 요약 (0) | 2020.12.13 |
---|---|
The original MVC Reports 요약 (0) | 2020.08.31 |
VIP를 읽어보고 고민한 것들 (0) | 2019.09.08 |