2007년 09월 03일
아키텍쳐라는 거대한 숲에 들어가기 앞서...
한동안 미루어 왔던 아키텍쳐 설계에 대한 글쓰기 작업을 다시 해 볼 생각이다. 마침 새롭게 시작되는 프로젝트에서 맡게된 업무가 모 은행 인터넷 시스템 아키텍쳐 설계이다 보니, 업무와 병행해볼 요량이다. 아키텍쳐라는 용어가 주는 부담을 덜고 좀 더 체계적으로 접근할 수 있도록 첫 시작은 미시적인 관점부터 얘기해볼 생각이다. 예전에 써두었던 글들을 다시 재활용하게 될지도 모른다.
소프트웨어 그리고 나아가 소프트웨어 아키텍쳐의 개념을 이해하기 위해서는 그 기반이 되는 하드웨어를 먼저 이해해야 한다. 프로그래머들에게 '컴퓨터(computer)란 무엇인가?'라는 질문을 던졌을 때 아무런 망설임 없이 한 마디로 설명하는 사람은 몇이나 될까? 스스로 전문가라고 자부하고, 컴퓨터를 생계의 수단으로 활용하는 사람들이지만 막상 컴퓨터라는 도구를 제대로 이해하는 사람은 많지 않다. 그저 도구일 뿐이지 잘 쓰면 되지 않는가라고 말할 수 있지만 정말 그런가, 다시 한 번 생각해 볼 문제다. 가정주부에게 진공청소기의 원리를 설명할 수 있느냐고 질문하는 것은 적절치 못하다. 하지만, 더 나은 진공청소기를 만들어보고자 하는 패기 있는 젊은 엔지니어라면 그런 질문에 답할 수 있어야 할 것이다. 이런 상황을 프로그래머에게 대입해보자. 우리는 컴퓨터 하드웨어 그리고 소프트웨어의 구조를 제대로 이해하고 개발하고 있는 것인가? 예전(?)에는 프로그래머 중에서 하드웨어 전공자가 많았고, 컴퓨터공학과에 대한 인기가 높고 저수준의 어셈블리 언어를 접해본 개발자들이 많은 시절에는 이런 질문이 불필요 했다. 하지만, 지금은 프로그래머가 되고자 회사에 입사원서를 낸 직원들 중 많은 수가 머뭇거리며 대답할 말을 찾지 못해 헤매는 표정을 드러내고 만다. 몰라도 프로그램 개발하는데 당장 지장은 없다. 책에 나온 예제대로 키보드를 따닥따닥 눌러대면 손쉽게 누구라도 홈페이지를 만들어 낼 수 있으니까 말이다. 프로그램을 만드는 일이 정말 쉬워진 시대인데 왜 고리타분하게 이런 말을 할까 싶은 사람도 많을 것이다. 질문의 의도는 '원리', '근본'을 이해하고 있어야 한다는 주장이다. 왜 원리와 근본을 알아야 하는 것일까? 더 나아가 얘기해보자.
대학 시절 '어셈블리 언어'라는 과목을 수강하게 되었는데 첫 시간에 학생들에게 던진 교수님 한마디는 '공학(engineering)이란 무엇인가?'라는 질문이었다. 공대에 진학했으나 자연대(순수과학)과의 차이가 무언지도 모르는 학생들을 깨우치고자 하신 것이고, 교수님은 공학의 목표는 '문제를 해결하는 것이다(problem solving)'라고 설파했다. 그렇다면 컴퓨터공학 혹은 프로그램을 제작한다는 것을 앞서의 정의에 따라 다시 설명해보자. 컴퓨터를 이용해서 문제를 해결하는 것이라고 말할 수 있다. 그런데, 프로그래밍 언어를 배우는 책에 나오는 대로, 혹은 인터넷에서 구할 수 있는 예제대로 프로그램을 제작하고 그것을 동작시키는 것이 문제 해결인가? 아니다. 그건 단지 누군가 배운 그대로 컴퓨터를 이용(use)하는 것 뿐이다.
누군가 당신에게 프로그래머인가? 라고 물었다. 당신은 그렇다라고 말할 것이다. 그러면 프로그래머인 그대의 진정한 역할 혹은 사명은 무엇인가? 당신에게 질문을 던진 사람이 제시하는 문제들을 해결하는 것이다. 당신에게 질문하는 상대는 일정하지 않다. 즉, 은행 직원으로서 예금과 대출 업무을 담당하는 사람일 수도 있고, 편리한 동영상 제작 도구를 찾는 방송 관계자일 수도 있다. 그리고 당신은 도구(컴퓨터)를 이용해서 주어진 문제들을 해결해야만 한다. 프로그램 짜는 법을 가르치는 책에 은행 업무에 대한 설명이 나와 있지 않으며, 온라인 게임을 제작하는 방법이나 복잡한 주식거래 과정에 대한 설명도 없다. 그런데 프로그래머는 전혀 생소한 문제들을 해결해야만 한다. 공학도 혹은 문제 해결자로서의 프로그래머가 가져야 할 소양은 단지 프로그래밍 언어를 구사할 줄 안다는 것 이상을 의미하는 것이다. 솔직히 골치 아픈 문제가 아닐 수 없다. 문제가 단지 하나가 아닌 것이다. 도구를 잘 활용해야 한다는 것과 전혀 모르는 비지니스들을 이해해야 한다는 것이다. 후자는 사전에 대비할 수도 없는 문제니 적어도 도구를 잘 이해해야 하지 않을까?
게다가 도구를 단지 사용할 줄만 알아서는 문제를 해결하기 힘들다. 도구를 제대로 이해해야만 그것을 응용하고 개선할 수 있는 것이다. 비유를 들어서 설명하자면 이렇다. 자동차를 개조하기 위해서는 자동차의 구조를 이해해야 한다. 단지, 운전 면허를 가지고 있다는 것만으로 개조는 할 수 없지 않은가? 마찬가지로 컴퓨터 프로그램을 작성할 줄 안다고 해서 고도의 시스템을 설계하고 구축할 수는 없다. (업계 용어로 단지 프로그램을 작성할 줄만 아는 사람을 코더라고 한다.)
# by | 2007/09/03 01:07 | Architecture | 트랙백(1)





제목 : 기본에 충실하자...
"기본에 충실하자." , "기본기가 되어 있어야 한다." 인생을 살아오면서 많이 들었던 말이다. 아마 다들 이런 이야기 한 두번쯤은 듣고, 또 남들에게 이런 충고 한두 마디는 하고 살아왔을 것이다. 기본? 그게 뭘까? 써니님의 글 "아키텍처라는 거대한 숲에 들어가기에 앞서" 는 우리를 다시금 돌아보게 한다. 2000년대 초였던가? 정확히 언제인지는 모르겠지만, 하여튼 IT 붐이 일면서 많이 이들이 IT 쪽에 몸을 담게 되었다. 대학에서는 앞을 ......more