행복한 아빠

(지난 간 이야기) CBD에 관하여 본문

잡다한기록

(지난 간 이야기) CBD에 관하여

행복한아빠 2016. 9. 27. 00:36


오늘은 집에서 소주 한 잔 하고 글을 남겨 봅니다. 이 다음은 그냥 구어체로 이야기합니다. 뭐 내 블로그니까. 크하하~ (술 취했음)


완벽(?)해지고 싶은 아키텍트

얼라 빡센 프로젝트에 들어왔지. 200명이 넘는 개발자를 대상으로 아키텍처 가이드 제시해야 해...
그리고 우리는 그 당시(2005년) 최신 기술? 트랜드였던 컴포넌트 기반 설계/개발을 위한 아키텍처를 수립했어.
아주 정교한 그리고 현실적인 아키텍처로 말이야...


CBD 전략

우리의 전략은 이랬지(Java 그리고 j2EE를 기반으로...). 우선 컴포넌트마다 패키지를 정의해. 그리고 그 패키지에 외부에서 접근을 허락한 인터페이스를 정의해. 외부에서 우리가 작성한 컴포넌트는 이 인터페이스로만 호출할 수 있는 거야. 이건 약속이야 아키텍처니까.

우리의 패키지는 인터페이스와 그 구현 그리고 흔히 이야기하는 Value Object, 그 외 각종 로직을 담고 있는 helper 클래스가 존재해. 이건 컴포넌트 내부 구현을 위한 클래스야. 관심 두지마. 그냥 인터페이스만 보고 호출해...

그런데 말이야... Javadoc 주석을 충실히 달기를 바래. 소스코드는 문서화의 마지막 보루야. Javadoc 잘 달아야 다음 개발자가 무리없이 작업할 수 있어. 우리는 프로니까... 소명감을 가지고 충실히 달자.


뭔가 잘못됨

우리는 훌륭한 빌드 시스템을 구축하여 빌드 뿐만 아니라 Java API 문서화 시스템도 훌륭히 갖추었지. 이제는 우리가 예측한 데로 결합도는 낮으면서 응집도는 높은 아주 훌륭한 설계를 가진 시스템이 탄생할 거야...

그런데...

예측하지 못한 일이 발생했어. 우리 컴포넌트를 사용하는 개발자들이 우리 인터페이스만 이용하는게 아니야. 우리 컴포넌트 패키지의 모든 클래스를 훑어보고는 괜찮은 API는 죄다 사용하는 거지. 훌륭한 Java document가 문제였던 거지.


오 마이 갓~. 나는 인터페이스만 사용하기를 바랬어. 급하게 만든 MyCalculator나 MyStringUtil 같은 클래스의 API는 나중에 바꿀라고 했어. 그런데 이걸 누군가 사용했다는 거네. 촌스럽게 지은 클래스 이름과 API 이름.. 이거 어떻게.

우리는 고민했지. 도대체 어떻게 이 일이 번지는 걸 막을 수 있지? 우선 규칙을 정했지. 컴포넌트의 최상위 패키지에 있는 클래스나 인터페이스만 너희들이 쓸 수 있는 물건이라고... 그 아래는 구현과 관련된 내부 클래스나 API이니 관심갖지 말라구.

그러나... 개발자들은 대단해. 괜찮은 API 있으면 어떻게든 찾아서 그냥 써 버려. 이건 우리의 경우만 아니야. 개발자들은 원래 그래. 파고 들고 해결하려는 경향이 있어. 우리는 이것을 hack 이라고 하지. 소프트웨어가 발전한 원동력이기도 하지.

물리적으로 제어할 메커니즘이 필요해. 내가 호출 하라고 정의한 것만 호출하게... 더 나아가 내부 문서화를 위한 document 주석은 외부로 내 보내지 않았으면 좋겠어. 그러나... 그런 장치는 없어. 아키텍처 문서나 개발 가이드 잘 작성해서 규칙을 따르자고 이야기를 할 수 밖에...

그런데 개발자들이 이 문서는 잘 안 보네.

뭐 완벽한 게 어디있어. Java는 원래 그래. 원칙적으로 그냥 다 열려 있어. 아키텍처 규칙 잘 정하고 잘 통제하는 수 밖에... (잘 안되어서 그렇지)


그렇게 잊고 살았는데.... 잉 Java Jigsaw 이건 또 뭐야?


0 Comments
댓글쓰기 폼