'LAYER'에 해당하는 글 1건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
작년에 진행했던 프로젝트에는 여러 기술적 토론이 있었습니다. 그 중 인상 깊었던 토론 하나는 특정 문제의 해결을 위해 웹워크(Webwork)에 있는 기능을 쓸 것인지 아니면 그냥 POJO를 이용하여 해결할지에 대한 토론이였습니다. 이 토론은 깊히 생각해볼만한 흥미로운 요소를 많이 가지고 있었기에 토론 자체에 대해 자세히 적어보는 것도 의미가 있다고 생각합니다. 하지만 저는 이번 글에서 이 문제를 좀 더 일반화시켜 이야기해보고자 합니다.

사용자 삽입 이미지

#그림1. 레이어의 성질

여러 층으로 구성되어 있는 레이어를 생각해볼 때 하위 레이어로 향할수록 '일반성'을 가지며 상위 레이어로 향할수록 '구체성'을 가지는 것을 볼 수 있습니다. 일반성을 가진다는 것은 해당 레이어가 보다 넓은 영역에서 사용될 수 있다는 것을 뜻합니다. 예를 들어 웹워크보다는 그 하위 레이어라 할 수 있는 자바 API가 보다 넓은 영역에서 사용될 수 있다는 점을 생각해볼 수 있습니다. 반대로 구체성을 가진다는 것은 해당 레이어가 자신이 다루는 영역에 대한 전문성을 가질 수 있다는 것을 뜻합니다. 위에 예를 다시 이용해보자면, 웹워크는 몇 가지 영역에서만큼은 자바 API 보다 전문성을 가집니다. 이것은 해당 영역에 관련한 부분을 개발하는데에 있어선 자바 API를 직접 이용하여 개발하는 것보다 웹워크에서 제공하는 API를 사용하는 것이 생산성이나 품질면에서 더 좋을 수 있다는 것을 뜻합니다.

그렇다면 우리는 문제 해결을 위해 항상 적당한 상위 레이어를 찾아서 써야 하는 걸까요? 이 질문을 좀더 구체적으로 표현하자면 이런 질문이 될수 있을 것입니다. "자바 개발을 할 때 최대한 프레임워크를 많이 사용해야 하나요?" "윈도우 개발을 할 때 최대한 컴포넌트를 이용하는 게 옳을까요?" 저는 이러한 질문에 대한 답변을 위해 아래 세 가지 측면을 생각해보고자 합니다.

첫번째는 무게입니다. 레이어가 갖는 무게는 아래와 같이 표현해볼 수 있을 것 같습니다.
n = 레이어의 레벨. 높을수록 상위 혹은 응용 레벨, 예를 들어 어떤 자바 프레임워크의 레벨이 5라면 그 프레임워크가 의존하는 자바 API는 4라 할 수 있다.

레이어(n)의 의존자 ⊂ 레이어(n - 1)의 의존자
따라서
레이어(n)의 의존자 수 ≤ 레이어(n - 1)의 의존자 수

∞ 레어어의 무게 = 의존자 수
위 정의에 따라 의존자를 많이 가지는, 즉 보다 하위에 존재하는 레이어가 상위 레이어와 비교하여 무게가 더 많이 나간다고 볼 수 있습니다. 또한 무게가 많이 나간다는 것은 그만큼 변화의 가능성이 적다는 것으로 볼 수 있습니다. 예를 들어 자바 기반에서 개발을 할 때 자바 기반 자체를 바꾸는 일은 왠만하면 없습니다. 반면에 자바 위에 올라가는 프레임워크는 자주 바뀝니다. 이러한 개발 현장의 모습은 우리가 보다 하위 레이어에 의존할 때 변화에 대한 안정성을 보다 확보할 수 있다는 것을 보여줍니다.

두번째는 유용성입니다. 상위 레이어는 해당 레이어가 지원할 수 있다고 하는 모든 상황에서 유용할까요? 저는 아니라고 생각합니다. 보통 상위 레이어는 특정 영역에 대한 구체성을 가지면서도 그 안에서 최대한의 범용성을 추구합니다. 이 범용성은 해당 상위 레이어가 널리 사용되려면 반드시 가져야 하는 필수적인 성질입니다. 그렇지만 이러한 범용성 때문에 우리가 만나는 구체적이고 다양한 상황에 대해서는 미흡함을 줄 때도 있습니다. 즉 문제에 대한 해결책은 제공하지만 그것이 지금 상황에 딱 들어 맞지는 않는 것입니다. 이것은 마치 몸에 맞지 않는 옷을 입은 것과 흡사하다 볼 수 있습니다. 비록 원래 목적인 몸을 가리는 것에는 성공했지만 보기 좋지 않고 불편한 것입니다.

세번째는 학습 비용입니다. 보통 특정 문제를 해결하기 위한 적합한 상위 레이어가 존재하더라도 그 레이어를 이용하기 위해서는 학습이 필요합니다. 학습에는 시간이라는 비용이 필요합니다.

혹시 현재 환경에서 변화를 최소화 하는 것이 가장 중요한가요? 그렇다면 보다 하위 레이어에 의존하여 개발을 하는 것이 현명할 것입니다. 빠른 개발이 필요한가요? 그렇다면 상위 레이어의 유용성과 학습 비용을 고려하여 적절한 상위 레이어를 선정하고 사용하는 것이 도움이 될 것입니다. 또 다른 경우로 유용성은 있어보이나 학습 비용이 너무 많이 드는 경우도 생각해볼 수 있습니다. 이럴 때는 각각이 주는 가치의 무게를 신중히 비교해보는 것이 도움이 될 것입니다. 만약 유용성에 비해 학습 비용이 지나치게 많이 든다면 하위 레이어를, 학습 비용이 많이 듬에도 불구하고 더 많은 유용성을 준다면 상위 레이어를 선택할 수 있을 것입니다.

결론적으로 앞서 던졌던 질문인 "우리는 문제 해결을 위해 항상 적당한 상위 레이어를 찾아서 써야 하는 걸까요?"에 대한 저의 대답은 "아니다" 입니다. 그것보다는 위에서 얘기했던 것처럼 세 가지 요소를 상황에 맞게 잘 고려한 후 의존할 곳을 신중히 선택하는 것이 현명한 결정이라 생각합니다.

2007/11/29 ~ 2008/07/16

WRITTEN BY
차민창
르세상스 엔지니어가 사회를 이끌어나가는 상상을 하며!

,