저는 꽤 최근까지 MVC라고 하면 모든 개발자가 같은 개념을 떠올린다고 생각했습니다. 애시당초 디자인패턴이나 아키텍처를 배우는 이유가 다른 개발자, 특히 다른 분야의 개발자들과의 의사소통에 도움이 되기 때문이라고 생각 했으니까요. 하지만 어느 순간, 안드로이드 개발자분들이나 백앤드 개발자분들과 이야기하면서 뭔가 대화가 어긋나고 있다는 느낌을 종종 받았습니다.
그래서 다시 한 번 MVC 관련 문서들을 훑어보게 되었고, 그 동안 제가 MVC에 대해 오해했던 점들이 여러가지 있었음을 알게 되었습니다.
Apple MVC ≠ Original MVC
가장 중요한 오해는, 제가 애플의 MVC문서에서 배웠던 MVC는 오리지널 MVC가 아니라는 점이었습니다. 제가 MVC문서만 읽는데 그치지 않고, 그 문서의 말미에서 언급하는 Definitive Discussion 까지 모두 읽었더라면 미리 발견할 수 있었던 내용이었습니다.
이렇게 같은 MVC이지만, 각 컴포넌트 사이의 관계나 책임, 의사소통 방식은 상당히 다릅니다.
특히 Cocoa MVC와 MVP패턴을 비교해보면 재미있는 사실을 알 수 있습니다.
세세한 단어 선택은 조금씩 다르지만, 내용만 놓고 봤을 때 Cocoa MVC는 우리가 MVP라고 부르는 패턴과 굉장히 유사합니다. 유저가 뷰를 탭하는 것을 “user action”이라고 부르느냐 “user events”라고 부르느냐의 사소한 차이 정도지요. 그러니까 사실, “우리 iOS프로젝트는 이제 더 이상 MVC를 쓰지 않을거야. 그 패턴은 너무 낡았어. 우리는 MVP로 갈아탈거야!”와 같은 발언은 상당히 부적절한 측면이 있습니다.
Android MVC ≠ Original MVC
이런 상황은 다른 프레임워크에서도 크게 다른 것 같지 않습니다. 안드로이드의 경우, MVC를 공식문서에서 다루지는 않지만, MVC를 소개하는 여러 안드로이드 관련 아티클들을 보면 서로 조금씩 다른 MVC를 얘기하고 있다는 것을 알 수 있습니다.
이 역시 세부 컴포넌트들의 역할은 조금씩 다르지만, 컴포넌트들간의 관계나 데이터의 흐름만 놓고 봤을 때는 MVP와 좀 더 유사합니다. 적어도 “전통적인” MVC와는 완전히 다르지요. 하지만 아마 적지 않은 안드로이드 개발자분들이 “안드로이드 MVC”로 구글에서 검색했을 때 제일 최상단에 나오는 검색결과인 위 도표를 보고 MVC를 배웠을 것입니다. 이러니 안드로이드 개발자와 아이폰 개발자, 백앤드 개발자들이 서로 조금씩 다른 얘기를 하고 있을 수 밖에요.
맺으며
막연히 MVC라고 말하면 서로 이해할 것이라 생각했던 내용이, 생각만큼 표준화되어 있지도, 공유되고 있지도 않았습니다. 가장 기초적인 개념이라고 생각했던 MVC조차도 이러니, 다른 복잡한 디자인패턴이나 아키텍처관련된 단어들은 더 심할 수도 있겠습니다.
개발자들간의 대화는 참 어렵습니다. 개발자들이 알아야 할 것은 너무나 많고, 서로가 조금씩 아는 분야가 다르기 때문입니다. 이런 상황에서, 조금이라도 더 원활한 소통을 위해서는 어떻게 해야 할까요? 정답은 없겠지만, 적어도 “우리가 대화하기 아주 어려운 상황에 있다”는 현실 인식은 필수일 것입니다. 이런 인식이 있으면 상대방이 내가 모르는 용어를 쓰거나, 내가 아는 용어도 내가 이해할 수 없는 용례로 사용할 때, 좀 더 부끄러움 없이 “저기… 제가 이해가 잘 안 가서 그러는데, 여기서 XXXX을 OOO한다는게 무슨 뜻인지 설명해 주실 수 있을까요?“와 같은 질문을 던질 수 있을테니까요.