최상훈 소프트웨어 엔지니어 (vicdev@magicn.com)

CORBA ORB Naming, Notification 서비스를 설계, 개발, 컨설팅했고, EAI, BPM 및 메시징 시스템 개발 프로젝트에 참여했다. 현재는 다날㈜에서 모바일 결제 시스템을 개발하는 해외 개발팀 팀장을 맡고 있다. objectworld.org에서 방법론, 아키텍처, 패턴 등을 스터디하고 있으며 JCO 부회장으로 활동하고 있다. 우리라에도 아파치 JBoss 같은 오픈소스 재단 창립되어 우리라 개발자들도 개발을 즐길 수 있기를 꿈꾸고 있다.

 

 

집중화와 분권화 현상

세상엔 개연성이 없음에도 불구하고 동일한 시점에서 동일한 현상이 발생하는 경우가 있다. 이를테면, 일본의 고지마섬의 원숭이들은 고구마에 묻은 흙을 손으로 털어 먹었다. 그런데 어느 암컷 원숭이가 고구마를 강물에 씻어먹기 시작했다. 그 후 고구마를 강물에 씻어먹는 원숭이 개체가 늘어나기 시작한다. 여기까지는 진부한 얘기이다. 마법은 다른 섬에서 일어난다. 이 사건 이후, 다른 섬들의 원숭이 무리에서도 고구마를 물에 씻어먹는 원숭이 개체가 출현한 것이다. 물론 그 각각의 섬들은 서로 정보교환을 할 수 없게 고립되어있는데도 말이다. 에르빈 슈뢰딩거는 이런 현상을 파동역학(wave mechanics)으로 설명한다. 일정한 개체에서 발생하는 파동이 다른 집단에 전달되어 똑 같은 양상을 보이는 현상을 말한다.

파동역학의 원리에 대입하여 설명할 수 없지만, 필자는 서로 개연성이 없는 학문이나 분야에서 동일한 패턴을 갖는 현상을 목도할 때가 있다. 제일 재미있게 관찰하는 현상이 ‘집중화’에서 ‘분권화’로 변화되는 현상이다. 가령 국가 행정 체계를 예로 들면, 많은 국가들은 중앙집권 체계에서 지방분권(또는 지방자치) 체계로 전환한다. 왜냐하면, 중앙정부에서 모든 것을 통제하기 힘들 정도로 행정체계가 복잡하고 거대해졌기 때문이다. 철학에서도 모더니즘 이전에는 자연(또는 세계), 인간, 언어 등의 대상만 바뀌었을 뿐이지 하나의 주제를 완성하고 설명하기 위해 여러 견해들을 동원하고 지지한다. 그렇게 해서 그 주제를 완성하기 위해 여러 이론을 집중시킨다. 모더니즘 이후엔 (포스트 모더니즘부터) 오랜 역사 끝에 완성된 이론들을 부정하기 시작한다. 그리고 집중된 이론들을 기존과 다른 접근법으로 철학의 대상을 분해하기 시작한다.

이러한 현상은 다른 분야에서도 충분히 관찰할 수 있는데 정치나 예술, 종교 등 여러 분야의 이론과 현상에서도 같은 현상을 읽을 수 있다. 이런 일련의 현상들은 적용대상이 물리적 개체가 아니고, 시점도 각각 달라서 파동역학으로 설명하기엔 적절치 않지만, 같은 양상의 역사와 패턴을 갖는다는 것은 부정할 수 없다. , 서로 다른 분야에서도 동일한 역사와 패턴을 읽을 수 있다. 이 글에서는 그 패턴 중 하나로 패러다임의 ‘집중화’에서 ‘분권화’로 변이되는 모습을 설명하고 그것을 통해 생각해볼 거리를 다루도록 하겠다.

컴퓨터 공학에서의 집중화, 분권화 현상

소프트웨어의 세계에서도 상술했던 현상을 읽을 수 있다. 우선, 엔터프라이즈 컴퓨팅의 흐름을 보면 초기에 메인프레임이 출현했고 그 후 얼마 동안 메인프레임 집중적인 연구가 활발했다. 최대한 메인프레임에 많은 비즈니스 로직을 수행하려 했으며, 사용자는 PC라고도 할 수 없는 단말기를 이용해 메인프레임을 이용해야 했다. 사용자가 늘어나거나 시스템의 역할이 커지는 것에 비례해 메인프레임은 계속해서 복잡하고 거대해져 갔다. , 메인프레임에게 모든 컴퓨팅의 요구사항이 집중되었던 것이다. 이른바 ‘중앙집중식 컴퓨팅’의 시대가 된 것이다. 그럴수록 메인프레임은 막강한 하드웨어적 인프라와 정교한 소프트웨어적 처리를 제공해야 했다. 이 시점부터 메인프레임에 대한 요구사항의 증가에 따라 메인프레에 기능, 성능의 발전과 응용 프로그램 개발이 집중되었다. 이렇게 요구사항의 증가와 그에 맞춘 솔루션의 제공 관계는 경쟁적으로 증가하여 산업을 활성화 시켰다. 결국 메인프레임에 모든 것을 집중시키는데 일관했던 방식은 한계를 느끼게 된다.

왜냐하면 컴퓨터로 요구되는 일이 갈수록 더 많아졌으며 사용자도 더 많이 늘어나는 상황에서 이 스펙을 맞추기엔 메인프레임에 드는 경제적 비용이 상당히 컸기 때문이다. 조금 과장한다면 메인프레임의 요구사항은 지수적으로 늘어갔고, 소프트웨어/하드웨어적인 스펙을 가중하기엔 경제적 비용이 또 한번 지수적으로 늘어난다. 무엇보다 중요한 변수는 컴퓨팅의 환경이 변한 데 있다. 메인프레임의 방식은 극소수의 메인프레임과 다수의 터미널로 이루어져 있는데, PC 가격이 싸지고 네트워크 환경이 확산됨에 따라 기존의 컴퓨터를 이용하는 방식이 변했다는 것이다. 이에 대한 다른 접근법이 제안되고 유닉스 기반의 n개의 서버 시스템이 대안 시스템으로 등극한다.

네트웍과 PC의 확산으로 로직이 서버에서 PC로 양분되고 서버의 역할은 1개의 메인프레임에서 n개의 유닉스 서버로 분할된다. 이때 미들웨어가 시대적 대안으로 자리잡는다. 이 시대를 '분산 컴퓨팅'의 시대라고 한다. 가속화된 컴퓨팅 환경의 발전 + WWW의 출현은 다시 컴퓨팅 패러다임을 바꿔놓는데, 비즈니스 로직이 다시 서버에 집중되고 서버는 역할별로 n 개의 tier로 분할된다. 그리고 몇 번의 변수의 출현과 패러다임 변이를 거쳐 지금의 엔터프라이즈 컴퓨팅 환경이 되었다.

다시 한번 역사를 관찰해보자. 엔터프라이즈 컴퓨팅의 역사는 메인프레임에 모든 것을 집중시키며 발전했고, 다시 메인프레임에 집중된 모든 것을 다른 방식으로 분산(분권)시키면서 발전했다. 여기서 관찰되는 비즈니스 로직의 이동은 흥미롭다. 현재 대세인 웹 2.0의 선언과 함께 이제 다시 C/S 모델로 비즈니스 로직이 전이되고 있기 때문이다. 원인은 RIA(Rich Internet Application)의 대두에 있다. 썬마이크로시스템즈의 JavaFX, 어도비의 Apollo, 마이크로소프트의 WPF/E, 그리고 Ajax는 서서히 비즈니스 로직을 서버에서 클라이언트로 이양시키고 있다.

다음으로 소프트웨어 방법론을 살펴보도록 하자.

전통적인(traditional) 또는 거대라는 수식어를 갖는 RUP 방법론은 현대 방법론의 틀을 정의했다. RUPtree amigo(세 친구)라 불리는 Grady Booch, James Rumbaugh, Ivar Jacobson에 의해 완성됐지만 폭포수 모델에서 절차를 나선형 모델에서 반복을 차용했다. 세 거두에 의해 의기투합하여 탄생한 RUPBoochOOD, RumbaughOMT, JacobsonOOSE Use CaseUnified 함으로 만들어졌다. 이후 방법론적 연구와 아이디어는 RUP에 집중되었으며, RUP를 지지하거나 편입되면서 발전한다.

하지만 현재는 어떤가? 방대한 산출물, 시스템의 요구사항이 완전히 정의되지 않은 상태에서 정의된 아키텍처, 방법론에 대한 학습곡선 그리고, 짧은 프로젝트 기간과 적은 리소스 그리고, 테일러링(tailoring)의 취약 등 방법론이 견고하고 완전할수록 방법론적 비용은 상대적으로 증가하는 상황이 발생했다. 이 시점에서 서서히 Agile적 접근법이 주목을 받는다. XP의 성공과 기존 방법론의 회의에 대한 반사이익을 얻어 현재 Agile 방법론은 많은 개발자들의 사랑을 받고 있다.

그렇다면 Agile 방법론이 RUP을 압도했던 원리는 무엇일까? 그것은 RUP Unified 하게 해결하려 했던 문제를 분리(분권화)하여 정반대의 방식으로 접근했기 때문이다. 그리고 아이디어의 참신성..

앞서 파동역학을 거론했지만, 이런 현상들은 칼 구스타프 융의 싱크로니시티(Synchronicity, 동시성의 과학) 학설에 더 가깝게 느껴진다. 의미 있는 우연의 일치, 비인과적인 우연... 놀랍게도 서로 전혀 다른 분야에서 동시에 같은 현상이 일어나거나 시차를 두지만 같은 패턴을 보이는 현상은 특히 소프트웨어의 분야에서 자주 관찰된다. 특히 방법론과 프로그래밍 언어 트랜드, 엔터프라이즈 컴퓨팅의 발전과정은 의미 있는 우연의 일치로 설명하기에 적합하다.

이뿐 아니다. 프로그래밍 언어의 트랜드 변화나 프레임워크의 기능, Java EE의 역사 등도 집중화와 분권화의 패턴으로 해석할 수 있다.

집중화/분권화 그 후

위에서 살펴본 바와 같이 패러다임은 집중화에서 분권화로 전환된다. 이 패턴 꼭 같은 시대에 탄생하는 동시성을 가지지 않지만, 역사가 짧은 소프트웨어 세계에서는 비슷한 시기에 동일한 종류의 패러다임이 선택되는 경우가 많다. 이유는 뒤늦게 나온 학문인 만큼 압축된 성장 선상에서 동일한 시대정신을 반영하기 때문이고, 환경과 조건이 유사하기 때문이다.

하지만 패러다임은 집중화에서 분권화로 전환된다는 명제는 틀렸다. 사실은 집중화분권화는 서로 경쟁관계에 있으며 시간과 환경에 따라 왕좌를 서로 뺐고 빼앗기는 순환 관계 속에 있다. , 집중화와 분권화의 전이 패턴은 순환적이다. 중앙집권과 지방자치제는 조건과 환경, 시대적 요구에 의해 흥망성쇠를 달리 했으며, 미시철학과 거시철학 또한 이러한 패턴을 반복하며 성장했다. 엔터프라이즈 컴퓨팅에서 다뤘던 것처럼 비즈니스 로직의 위치 변경은 이러한 양자간의 순환성을 증명하는 대표적인 사례로 볼 수 있다.

여기까지는 집중화분권화에 대한 코드로 현상을 대입시킨 작업이었다. 그렇다면 이런 패턴 속에서 우리가 읽어야 할 것은 무엇인가? 우선 이 두 가지 접근법은 서로의 전제를 부정하고, 모순을 극복하며 성장했다는 것이다. 따라서 우리는 현재 사용하고 있는 방법과 도구들이 과거의 모순을 어떻게 극복하고 있으며 대안적으로 제시하는 솔루션이 무엇인지 파악해야 한다. , 역사적 흐름을 읽을 수 있어야 하며 흐름 속에 현재 대안이 과거 대안의 어떤 모순을 극복했고 어떤 강점을 제공하는지 알아야 한다.

또한, 이 두 관계 들이 서로 변이되어야만 했던 원인에는 환경이 있음을 읽어야 한다. 메인프레임에서 유닉스 시스템으로, 비즈니스 로직이 C/S에서 서버로, 서버에서 다시 RIA로 옮겨진 데에는 네트워크 환경과 PC의 보급률, 이에 더해 어플리케이션의 용도가 변했기 때문이다. 어떤 대상의 역할과 책임에 의해 그 대상이 변하기도 하지만 그 대상이 적해 있는 환경에 의해 그 대상이 변하기도 한다. 물론 환경은 그 대상의 역할과 책임 자체를 바꾸기도 한다.

에필로그

끝으로, 위에 설명된 예시나 전제 자체에 이견이 있을 수 있을 것 같다. 역사학자 E.H. 카아는 역사는 과거와 현재의 끊임없는 대화이며, 팩트 그 자체가 아니라 그 팩트와 상호작용하며 그걸 바라보는 역사가의 주관적 관점에 의해 재구성된 것이라고 얘기한다. 게다가 다뤘던 주제 또한 여러 접근법으로 해석할 수도 있겠다. 하지만, 큰 틀에서 같은 잣대로 이해해 주시길 바란다.

역사는 두 번 반복된다. 한번은 비극으로, 또 한번은 희극으로…” - 칼 맑스





크리에이티브 커먼즈 라이센스
Creative Commons License

트랙백 주소 :: http://sdnkorea.com/blog/trackback/384

  1. Subject: 소프트웨어 흐름에 대한 관찰

    Tracked from deuk79님의 블로그 2007/09/19 14:17  삭제

    소프트웨어 흐름에 대한 관찰 썬특집기사/특별기고 세상엔 개연성이 없음에도 불구하고 동일한 시점에서 동일한 현상이 발생하는 경우가 있다. 이를테면, 일본의 고지마섬의 원숭이들은 고구마에 묻은 흙을 손으로 털어 먹었다. 그런데 어느 암컷 원숭이가 고구마를 강물에 씻어먹기 시작했다. 그 후 고구마를 강물에 씻어먹는 원숭이 개체가 늘어나기 시작한다. 여기까

댓글을 달아 주세요

  1. 최재인 2007/09/04 15:10  댓글주소  수정/삭제  댓글쓰기

    말하고 싶은 내용은 자세하게 모두 얘기해주신거 같은데요. 일반인이 보기에는 다 읽어도 이해하기가 좀 어려운 부분이 없지않아 있습니다. 그림을 중간중간 첨부하여 설명한다면 이해하기가 더 쉬울거 같다는 아쉬움이 남네요.
    잘 읽었습니다.^^

  2. 이주복 2007/09/05 06:30  댓글주소  수정/삭제  댓글쓰기

    요즘의 모든 산업분야에서 기존의 R

  3. 이원종 2007/09/07 09:12  댓글주소  수정/삭제  댓글쓰기

    자바 기술 을 어느정도 알겠네요

  4. 이우철 2007/09/07 19:53  댓글주소  수정/삭제  댓글쓰기

    어렵지만 소프트웨어 흐름을 잘 정리하셨네요..
    막연하게 느껴지던 소프트웨어를 알 수 있어 좋은 포스트 같아요..
    칼 막스의 마지막 말도 기억에 남네요
    굿 포스트!

  5. 윤태호 2007/09/08 15:42  댓글주소  수정/삭제  댓글쓰기

    집중화와 분권화!
    논쟁이 될 수 있는 내용이고 어느 것이 옳다고 단언하기에는 조금 그렇습니다.
    물론 역사적인 흐름은 무시 못하지요.
    잠시나마 사색의 시간을 갖게 되네요. 감사^^

  6. 안선환 2007/09/08 17:01  댓글주소  수정/삭제  댓글쓰기

    역시나 어려운 글들이내요 한때 개발자의 길을 걸었지만.
    지금 보니 그립기만하내요 ^^ 모든 개발자 분들 열심히 화이팅 입니다~

  7. 김종혁 2007/09/14 16:22  댓글주소  수정/삭제  댓글쓰기

    "파동역학" 인상적이였습니다. 잘 읽었습니다.

  8. 권미자 2007/09/14 19:15  댓글주소  수정/삭제  댓글쓰기

    썬특집기사가 유용하네요..

  9. 고진구 2007/09/17 23:48  댓글주소  수정/삭제  댓글쓰기

    자바는 알면 알수록 재미가 있어지네요. 무궁무진한 자바의 세계로 빠져들어 갑니다. 좋은 자료 잘 활용하겠습니다.

  10. 박정숙 2007/09/19 03:29  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

  11. 황종생 2007/09/19 14:15  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘보고 갑니다. 환경의 영향을 받고 과거를 알아야 현재를 알수 있듯 소프트웨어의 흐름또한 인류에 의해 만들어진만큼 영향을 받지 않을수 없고 마치유행이 반복하듯 돌고 돈다는데 대해 매우 재밌게 읽고 갑니다.

  12. 김형준 2007/09/19 19:36  댓글주소  수정/삭제  댓글쓰기

    흥미로운 글이긴 하지만 이런 지적도 있습니다. <a href="http://jania902.egloos.com/3753199">분야를 넘나드는 글쓰기</a>

  13. 진정미 2007/09/19 23:12  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 많이 얻어서 갑니다.

댓글을 쓰시려면 로그인해주세요.

블로그 이미지
Statistics Graph
회사소개  |   문의  |   사용약관  |   개인정보보호정책  |   등록상표