IT라 해서 모든 것이 빨리만 변하는 것은 아니다

최근 몇 일 me2day와 playtalk에 대한 이야기가 블로고스피어를 뜨겁게 달궜습니다. 특히 짧은 시간에 보여 준 다이나믹한 변화는 제 3자로서 지켜보고 있는 사람조차 가벼운 흥분을 느끼게 만들더군요.
 
그런데 IT의 세계라고 이렇게 빠른 속도로 변화하기만 하는 것은 아닙니다. 어느 순간 돌이켜 보면 예전의 모습으로 다시 돌아가 있는 현실을 볼 때가 종종 있으며, 어떠한 기술들은 매우 오래 전에 나타났지만 여전히 막강한 위력을 보이는 것을 알 수 있습니다. 
 
예를 들어 초기의 메인 프레임 위주의 중앙 집중적인 컴퓨팅 환경에서, 클라이언트 서버의 분산 환경으로, 그리고 다시 Web을 거치며 중앙 집중적인 환경으로 돌아갔다가 다시 RIA를 통해 분산 환경으로 바뀌어 가는 것이 기술의 순환을 보여 주는 대표적인 예라고 볼 수 있겠습니다. 물론 각각의 진화에는 이유가 있으며, 차이점이 있지만 큰 시각으로 보았을 때는 순환 구조가 형성된다 볼 수 있을 겁니다.
 
그리고 어떠한 기술들은 매우 오랫동안 사랑 받아 왔으며, 앞으로도 계속 그러할 것이라 생각됩니다. 태어난 지 오래 되었지만 여전히 유용하며 강력한 지식, 어떤 것들이 있을까요? 개인적으로 떠오르는 몇 가지를 적어 보죠.
 
Regular Expression – 정규 표현식
제일 처음 떠오르는 것은 유닉스 경험이 있는 분이라면 알게 모르게 한 번씩은 사용하게 되는 정규 표현식입니다. 정규 표현식은 1950년대 오토마타 이론과 정규 언어 이론에 대한 연구에서 관련 모델을 수학적으로 표현한 것에서 시작합니다.
 
그 후 이 모델을 켄톰슨이 자신의 에디터에 텍스트 패턴 매칭을 위해 사용하였고, 그 후 다양한 유닉스 유틸리티에 적용되었습니다. grep, vi, expr, awk, emacs 등이 정규 표현식을 사용하는 대표적인 유틸리티 들이죠. 

 
[그림 1 : 정규 표현식 패턴 요약 표]
 
개인적으로 처음 정규 표현식을 보았을 때, 왜 이리 사용이 복잡할까 라는 생각만 하며 제대로 공부하지 않았던 기억이 있습니다. 그 후 텍스트를 다루는 프로그램들을 꽤나 많이 만들었는데, 그걸 모두 C 함수로 하나씩 직접 만들어 처리했었죠. 나중에 정규 표현식에 대해 알고 나서 정말 가슴을 치며 후회했던 기억이 납니다.
 
정규 표현식은 여전히 막강합니다. .Net의 경우 System.Text.RegularExpressions 네임스페이스를 통해 유용한 클래스들을 제공하고 있으며, Ruby의 경우 아예 내장하고 있습니다.
 
또한 여전히 유닉스 계열 운영체계 (리눅스 포함)를 원활하게 쓰려면 정규 표현식에 대한 최소한의 지식은 필수적입니다.
 
Command Console & Shell Script – 커맨드 창 & 쉘 스크립트
두 번째로 떠오르는 것은 커맨드 창과 쉘 스크립트입니다. 이 기술은 컴퓨터를 모니터와 키보드를 통해 제어할 수 있게 된 시점부터 지금까지 계속 이어져 오고 있군요. 쉘 스크립트는 그보다는 역사가 좀 짧지만 말입니다.
 
윈도우 시스템이 대세가 된 지금에도 여전히 커맨드 창은 유효합니다. 다양한 옵션을 이용하여 커맨드를 입맛에 맞게 실행시킬 수 있는 이점은 상당히 큽니다. 게다가 약간의 스크립트를 작성할 수 있게 되면 훨씬 더 많은 일을 한꺼번에 시킬 수 있게 되죠.
 
유닉스 환경에서라면 워낙 쉘 스크립트들이 막강하기 때문에, 굳이 따로 설명할 필요도 없을 것 같군요. 쉘 스크립트만 가지고 간단한 텍스트 게임을 만들던 사람들도 종종 있었으니까요.
 
도스와 윈도우 계열 운영 체계는 상대적으로 스크립트가 조금 약하긴 하지만 유용하게 사용됩니다. 여러 작업을 간단하게 배치 파일로 만들어 놓고 일괄 실행하는 것이 상당한 편리함을 주기 때문입니다. 그리고 오랜 시간이 걸리는 일을 할 때 다양한 옵션을 미리 주어 사용자를 귀찮게 하지 않는다는 점도 멋진 점입니다.
 
예를 들어 대량의 파일을 복사하던 중 의외의 에러로 전체 작업이 중단 되어 버리거나, 시간이 오래 걸릴 작업을 실행시키고 나갔다 왔을 때 “덮어쓸까요?” 라며 멍청히 기다리고 있는 모습을 바라보지 않을 수 있게 되는 것이죠.
 
최근에는 커맨드를 직접 입력해서 무언가를 처리하는 분들이 꽤 줄었습니다. 그만큼 GUI가 발전했다는 것을 반증하는 것이기도 하겠습니다만, 자신의 컴퓨터 활용 능력을 좀 더 높이고 싶으신 분이라면 한 번쯤은 관련 내용을 차분히 읽어 보시길 권합니다.
 
MVC Pattern – 모델, 뷰, 컨트롤러 패턴
이 너무나 유명한 모델은 1979년 한 노르웨이 컴퓨터 공학자에 의해 만들어졌습니다. 최초에는 GUI 애플리케이션을 위해 만들어진 패턴이었지만 그 후 다양한 영역에 적용되었죠.
 
스몰토크를 시작으로 해서 MFC (Microsoft Foundation Class Library)에도 적용되었고, Java 애플리케이션을 위해서는 Struts 프레임워크 등이 이 패턴을 사용하고 있습니다. 그리고 최근에 한참 기세를 올리고 있는 Ruby on Rails 프레임워크 역시 MVC 패턴을 사용하고 있죠. 

 
[그림 2 : MVC 패턴 다이어그램]
 
처음에 한 번 제대로 이해해 두면 그 개념을 오랫동안 유용하게 사용할 수 있는 아주 알짜배기 지식이라고 하겠습니다. 그리고 현재의 추세를 볼 때, 앞으로도 한참은 계속 사용하게 될 패턴이라 생각됩니다.
 
Algorithms – 주요 알고리즘들
사실 알고리즘이란 어떠한 문제를 해결하기 위한 방법을 의미하는 것이기 때문에, 딱히 정형화 되는 것은 아닙니다. 새로운 알고리즘도 계속 나타나며, 기존의 알고리즘은 계속 개선되어 나갑니다.
 
하지만 몇 가지 주요 알고리즘들은 오랜 시간 사용되어 왔고, 앞으로도 계속 사용될 겁니다. 예를 들자면 B-Tree나 Linked List, Que, Stack과 같이 대학의 자료 구조 수업에 나타나는 알고리즘 들은 그 수명이 얼마나 길지 예측조차 안 되는군요. 수업시간에 듣는 것은 너무나도 재미 없을지도 모릅니다만, 역시 제대로 배워 두면 두고 두고 써 먹을 수 있는 지식들입니다.

 
[그림 3 : B Tree 다이어그램]
 
그렇기 때문에 도널드크누스The Art of Computer Programming과 같은 책은 가격도 비싸고 보기에 엄두가 안 날 만큼 두께가 만만치 않지만, 한 번 제대로 읽어 두면 개발자에게는 오랫동안 큰 힘이 되어 줄 책들입니다.
 
마치며
사실 제가 적은 글들 외에도 다양한 내용들을 꼽을 수 있을 겁니다. 여러 분의 생각은 어떠신지요? 여러분께서 오랫동안 소중하게 생각하고 계시는 지식들을 공유해 주시면 많은 이들에게 도움이 될 것입니다.
스마트플레이스의 글을 편리하게 구독하세요. 한RSS 추가 구글추가
크리에이티브 커먼즈 라이센스
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

트랙백 (1) | 덧글 (7)
트랙백 주소: http://www.smartplace.kr/trackback_post_123.aspx
스마트플레이스의 트랙백은 스팸방지를 위해 관리자 승인 후 등록됩니다.
Xeraph Online 2007-03-16 00:36:08
전설
갑자기 생각나는게 있어 끄적끄적 컴파일러 수업 들을 때 이재진 교수님이 해주신 옛날 이야기 중.. C Shell Script를 너무 사랑한 나머지 C Shell Script로 컴파일러를 만들어 온 사람이 있었다고 Lex Yacc 없이 파싱 테이블 직접 손으로 다 치는 것만 해도 쌩 노가다일텐데. 살다보면 변태가 너무 많다. orz...

형기의 자료공간 2007-03-14 09:51:26     답글 삭제
디자인 패턴과 리팩토링 같은 것은 변하지 않는 범주에 속하지 않을까 싶네요..

프로그램을 짜다보면, 소시적엔 각종툴이나 기술에 집착하게 되는데.. 어느 정도 내공이 쌓이면 툴이나 기술 보단 어떤 문제를 바라보고 해결하기 위한 생각의 방법이 더 중요하지 않을까 생각합니다.
앤디 2007-03-14 21:58:47     삭제
중요한 말씀을 해 주셨군요. 어느 정도 경험이 쌓이게 되면 말씀하신 것과 같은 생각의 방법이 더 중요해 집니다. IEEE에서는 SWEBOK (Software Engineering Body of Knowledge, http://www.swebok.org)를 만들고 있습니다. SW 개발에 필요한 코어 핵심 지식을 체계를 갖추는 작업이지요. 여기에 특정 언어나 도구에 대한 지식은 전혀 포함 되어 있지 않습니다. 결국 문제를 풀기 위한 사고방식과 기반지식이 세세한 기술보다 더욱 중요하다는 의미입니다. 피드백 감사 드립니다. ^^
앤디 2007-03-14 22:00:01     삭제
사실 이번 글은 좀 더 라이트하게 개인적으로 중요시 하는 내용을 적은 글인데, 중요한 관점을 짚어 주셔서 좀 글의 내용을 넘어서는 답글을 달게 되었군요. ^^

써니 2007-03-15 10:45:09     답글 삭제
좋은 글 읽고 제 블로그에 몇자 적어봤습니다.
트랙백은 어찌할 몰라서... ^^;

http://sunnykwak.egloos.com/3053148
앤디 2007-03-16 13:06:45     삭제
좋은 글 잘 읽었습니다. 시작하는 개발자들에게는 좋은 충고가 될 글입니다. 피드백 감사합니다. ^^

5throck 2007-03-16 19:35:03     답글 삭제
요즈음 프로그래밍을 하고 있지는 못하지만, 저도 예전에 정규식 관련 작업을 많이 했는데 바쁘다는 이유로 엄청난 노가다(?) 했던 일이 생각납니다.

모든 일이 다 그렇겠지만 원칙을 알고 원칙대로 진행하는 것이 항상 가장 바른 길이였다는 생각이 드네요...

글을 읽고나서 두서없이 떠오르는 생각을 적고 갑니다...
항상 행복하세요... =;-)
앤디 2007-03-18 23:57:01     삭제
답글이 늦었네요. 피드백 감사합니다. 5throck님도 항상 행복하시길.. ^^

이름 비밀번호
홈페이지
덧글
비밀글
RSS 피드
전체글한RSS 추가 구글추가
스마트가젯북스타일
Demo Day