오픈지엘- 오픈지엘 공식 사이트, 생각외로 뉴스가 잘 올라온다.Viewer
NeHe Tutorial- OpenGL Tutorial. 내용도 좋지만, 각 플랫폼, 언어별로 구현된 소스가 유용.Viewer
OpenGL man page- OpenGL MAN 페이지. 일종의 매뉴얼.Viewer
OpenGL Manual- SGI 의 OpenGL 1.2 매뉴얼Viewer
GL4Java- 자바를 위한 OpenGLViewer
OpenGL Win32 Tutorial- OpenGL Win32 ToturialViewer
GLUT3- glut3 소스 및 다운로드.Viewer
glut for win32- Glut for Win32 DLL DownloadViewer
OpenGL Gamedev- OpenGL Gamedev FAQ & Mailing listViewer
cannon_smash- OpenGL 로 만든 오픈소스 탁구게임Viewer
OpenGL FAQ- OpenGL FAQViewer
OpenGL Reference Manual- 온라인북Viewer
OpenGL Programming Guide- 온라인북Viewer
OpenGL 수퍼 바이블- 온라인북Viewer
OpenGL 튜토리얼 링크- OpenGL 튜토리얼 링크Viewer
OpenGL 게임개발 FAQ- OpenGL 게임개발 FAQViewer
GLVelocity- OpenGL 관련 소스 및 뉴스, 토론 등등Viewer
DelphiGL- Delphi 로 하는 OpenGLViewer
Yindo- 차세대 웹 애플리케이션Viewer
GLScene- OpenGL Solution for DelphiViewer
FLTK- OpenGL 그래픽 유저인터페이스 라이브러리(LGPL)Viewer
Quesa- Apple Quick Draw 3D Open-source ImplementationViewer
GLdomain- 파티클, 그라비티 등에 관한 튜토리얼Viewer
게임튜토리얼- 오픈지엘 튜토리얼 및 MP3 라이브러리, 쓰레드 예제 등등이 있다.Viewer
Delphi3D- 델파이와 OpenGL를 사용한 최신 그래픽 기술에 관한 정보Viewer
RadioGL- OpenGL Realtime Radiosity Viewer (free open-source)Viewer
Sulaco- 수준높은 오픈지엘 코드들. 델파이로 짜여 졌음.Viewer
HUMUS- 각종 테크닉들의 예제 소스들Viewer
DirectX Dev- Developer-only ForumViewer
DirectX8 FAQ- Microsoft DirectX 8 개발자 FAQViewer
DirectX 개발- DirectX Developer Center (MSDN)Viewer
XBOX- Microsoft XBOXViewer
Mr.Snow's column- DirectX8 튜토리얼Viewer
Gamedev DirectX- Gamedev.net's DirectX resourcesViewer
DrunkenHyena- Direct3D 8.0 TutorialViewer
Meltdown2001- DirectX Meltdown2001 presentationViewer
ShaderStudio- Vertex/Pixel Shader 를 쉽게 쓸 수 있는 툴.Viewer
Pixel/Vertex Shader- 톰스하드웨어의 픽셀/버텍스 쉐이더에 대한 간단한 정리Viewer
GDC2002-DirectX- Game Developer's Conference 2002 - MS DirectX TutorialViewer
DirectX 뉴스그룹- DirectX관련 뉴스그룹Viewer
TomsDXFaq- Tom Forsyth의 DirectX FAQViewer
DX FAQ- DirectX MVP 로버트 던로프씨가 관리하는 DirectX FAQViewer
D3DCAPS- 각 카드별 D3D Caps 내용을 확인할 수 있음.Viewer
STEEL 프로그래밍 리소스- 200여개의 그래픽 관련 문서 및 튜토리얼 모음Viewer
그래픽스문서찾기- 다운로드는 안되고 문서명만 검색되네.Viewer
파일포맷- 모든 파일 포맷에 대해서.Viewer
게임프로그래밍뉴스그룹- comp.games.development.progrmming.algorithmsViewer
3D Engines- 3D 엔진 목록 및 검색Viewer
GPGStudy.com- Game Programming Gems 스터디 사이트Viewer
KGDA- 한국 게임 개발자 협의회Viewer
FlipCode- 게임개발관련 뉴스와 자료들Viewer
게임코드- 게임 프로그래밍에 관한 자유로운 얘기와 도움을 주고받는 곳Viewer
GameDev.Net- game developer networkViewer
가마수트라- game developer webzine.Viewer
GDAlgorithm- Game Development Algorithm 메일링 리스트Viewer
nVidia Developer- nVidia 사의 개발자 네트워크Viewer
ATI Developer- ATI 사의 개발자 네트워크Viewer
Matrox Developer- 매트록스 사의 개발자 네트워크Viewer
쿼터니온- 가마수트라의 쿼터니온 설명Viewer
문서들- 가마수트라의 프로그래밍 관련 문서Viewer
gdconf- 게임 디벨로퍼 컨퍼런스Viewer
인텔- 개발자 네트워크 게임부문Viewer
게임튜토리얼- 게임관련 튜토리얼, 문서, 토론 등등Viewer
Genesis3D- 소스가 공개된 게임엔진. 유명.Viewer
Jet3D- Genesis3D를 기반으로 하는 차기 버전(소스공개)Viewer
타이탄프로젝트- 퀘이크3의 맵을 읽는 엔진(소스공개)Viewer
AfterShock- GPL 퀘이크 렌더러Viewer
PolyCount- 퀘이크3/2, 언리얼, 하프라이프 등의 모델데이타.Viewer
소스포지의 3D 파운드리- 소스포지의 공개된 여러 3D 관련 프로젝트 및 컨텐츠Viewer
3D Engine List- 3D Engine List - 우와 많다.Viewer
DDG Toolkit- Digital Dawn Graphics Toolkit (C++ OpenGL Terrain Toolkit)Viewer
OpenFX- 오픈소스 공개 모델러, 렌더러, 애니메이터(게임엔진아님)Viewer
FLY3D- FLY3D 게임 엔진. 책도 있음.Viewer
매직소프트웨어- 3D Game Engine Design 이라는 책 소스 및 유용한 공개코드Viewer
Nevrax- GPL 게임 엔진(AI, 3D, 네트웍 포함. 베이어패치 및 아웃도어용)Viewer
OGRE- 객체지향 그래픽 렌더링 엔진(베지어패치 및 퀘이크 렌더러 등)Viewer
RadonLabs- Nebula Device 라는 공개엔진. Nomads 라는 게임에 사용.Viewer
NeoEngine- 네오엔진. 멀티 플랫폼 LGPL 게임엔진Viewer
LOD- 지형 LOD 구현 리스트Viewer
CUBE- 깔끔하고 심플한 FPS 게임 엔진. 소스 공개. 서버도 있네?Viewer
F4- Flat Four Engine. 게임 개발 애플리케이션 프레임워크. lua, SDL, ODE, FreeType 등을 사용Viewer
ICE- Internet Communication Engine. GPL기반의 네트웍 엔진.Viewer
크리스 헤커- 크리스 헤커의 게임물리학 및 텍스쳐매핑관련 PDF 문서가 있다.Viewer
피터 린드스트롬- 꽤 읽어봄직한 논문들Viewer
UNC GEOM- UNC 의 물리시뮬레이션, 기하학관련 리서치 그룹Viewer
casManG's 3D 게임 아트- 3D 게임관련 모델링 튜토리얼 자료 많다.Viewer
ingava- Q3A Prgramming/Modeling TutorialViewer
Motion- 캐릭터 애니메이션에 관한 자료 및 문서Viewer
MathEngine- 실시간 물리엔진, 데모Viewer
Art Of Assembly- Art Of Assembly : 어셈블리 책 - 웹에 책 내용 다 있음.Viewer
게임인공지능- 게임관련 인공지능Viewer
블랙북- 마이클 애브래쉬의 블랙북 PDFViewer
게임 모델링 툴 링크- 모델링 툴, 스키닝 툴, 튜토리얼 및 리소스 링크Viewer
Creative- 크리에이티브사의 게임 개발 관련 자료Viewer
Amit's Link- Amit's Game Programming InformationViewer
리스텍- 리스텍(lithtech) 게임엔진Viewer
NetImmerse- NDL사의 NetImmerse 엔진Viewer
Audiere- 오디에르. ogg, wav, mod, s3m 등을 지원하는 오디오 라이브러리(LGPL)Viewer
GDZine- 게임 개발자를 위한 웹진Viewer
Torque엔진- Tribes 2 에 쓰였다는 Torque 게임 엔진. 개발자 당 $100 이란다.Viewer
Gyedo's pot- Maya 스크립트 강의도 하시는 CGP 전계도씨의 홈Viewer
그래픽 파일 포맷- 그래픽 관련 파일 포맷 링크Viewer
파워플랜트- 무척 많은 폴리곤으로 구성된 공장, 시설물 모델 데이터 제공. 공개Viewer
Collada- 공개 3D 포맷 포럼. 메이저 3D 툴 회사들이 파트너쉽을 맺고 있다. 소니에서 주도.Viewer
HighEnd3D- 하이엔드 쓰리디. 마야, XSI, Shake 커뮤니티Viewer
씨쥐링크- 컴퓨터 그래픽 관련Viewer
3D Links- 3D 관련 링크 및 뉴스Viewer
디지탈 프로듀서- 디지털 영상 편집 및 3D 관련 웹진. 공짜 3D 모델도 있음.Viewer
아발론.뷰포인트- 뷰포인트사의 공개 모델링 데이타들이 있는 곳.아발론Viewer
모델뱅크- 뷰포인트사의 모델뱅크-상용Viewer
Steven Stahlberg 갤러리- 여자 3D 캐릭터 죽~인다Viewer
3D Artisan- 국내 3D 관련 잡지Viewer
드림모션- 국내 모션캡쳐 장비 회사Viewer
OpenEYE- 3DS MAX 사용자 그룹Viewer
3D 캐릭터- 나잘난박사의 이상호님 홈Viewer
더-포즈- Poser 애니메이션을 판다.Viewer
포져- 3D 인체 포즈 및 애니메이션 툴. 훌륭...짝짝짝.Viewer
3D필름메이커- 3D 영상 및 컨텐츠 개발 관련Viewer
밀크쉐이프3D- 쉐어웨어 로우 메쉬 에디터, 애니메이터(하프-라이프모델 지원빵빵)Viewer
안드로이드월드- 안드로이드 관련 정보Viewer
소다플레이- 마치 애완동물을 괴롭히는 것 같은...Viewer
메타모션- 실시간 모션캡쳐 시스템Viewer
제니류님의 홈- 마야 3D 케릭터 모델링과 애니메이션Viewer
CGLand- 다수의 CG 갤러리 및 링크Viewer
Digital Art Zone- Poser Map & Model 파는 곳Viewer
Motion Analysis- Motion Analysis : Motion Capture System/SoftwareViewer
Zygote- 상용 3D 모델 데이타Viewer
Famous3D- Facial motion-capture 솔루션Viewer
3D Artists- 세계적인 3D Artists 들의 작품 감상 및 포럼Viewer
소아나라- 3D 아티스트. 실사와 거의 흡사한 이미지. 국산.Viewer
Kludge3D- 3D Modeling Tool (LGPL)Viewer
니트정보통신- FilmBox, Toonz, Vicon 등의 디스트리뷰터Viewer
GMAX- 게임 MOD 개발용 gmax (공짜)Viewer
HCIKorea- 인간과 컴퓨터 상호작용 연구회Viewer
JoyCG- 여러 아티스트들의 3D 작품을 구경하고 싶을 때Viewer
KBS 기술연구소- 방송에 관계된 여러 기술 정보Viewer
모캡코리아- 모션캡쳐관련 서비스Viewer
Terragen- 공개용 지형 생성 툴Viewer
두모션- 국산 기계식 모션캡쳐 시스템Viewer
Quest3D- 실시간 3D 멀티미디어 툴Viewer
문라이트3D- 오픈소스 3D 소프트웨어 (모델러, 넙스, 레이트레이서, 라디오시티 포함). 리눅스만 지원Viewer
소프트 쉐도우- Michael Herf & Paul Heckbert 의 소프트쉐도우에 관한 페이지Viewer
쉐도우- 쉐도우에 관한 여러가지 자료Viewer
Jeff Lander- Jeff Lander의 게임개발관련 문서Viewer
리얼타임렌더링- 리얼타임렌더링책선전 및 각종 링크Viewer
Math3D- The 3D Computer Graphics Math Library HomepageViewer
New York Univ.- New York Univ. Media Research LabViewer
Red3D- Non-photorealistic Rendering LinksViewer
쿼터니온- 쿼터니온링크Viewer
SIGGRAPH PROCEEDINGS- ACM Digital Library(SIGGRAPH Proceedings Listing)Viewer
WhyQuat- Do you really need quaternion?Viewer
Nurbs++- C++ Nurbs LibraryViewer
매직소프트웨어링크- 매직소프트웨어의 그래픽관련 링크Viewer
gdconf 2000- Game Devel. Conf. 2000 procedingsViewer
gdconf 2001- Game Devel. Conf. 2001 procedingsViewer
CFXWEB- 데모와 게임 개발에 관한 문서, 소스 및 갤러리Viewer
I_COLLIDE- 인터액티브하며 정확한 충돌 감지 라이브러리Viewer
ACM JGT- Journal of Graphics ToolsViewer
RTRT- RealTime RayTracerViewer
피에르의 링크- 3D, 수학, 물리관련 각종 링크Viewer
GeometricModeling- On-Line Geometric Modeling Notes. 맘에드는 주제들.Viewer
Heriot-Watt- Heriot-Watt University Graphics Notes. 설명양호.Viewer
미시간주립대- 미시간주립대 그래픽스 노트. 프레젠테이션Viewer
Don Lancaster's Guru's Lair- Cubic Spline Library (PDF 서비스)Viewer
Paul Bourke- Curve 및 그래픽스 관련 노트 및 C 소스코드Viewer
Journal of Graphics Tools- 실제 현장에 바로 응용할 수 있는 그래픽스 연구Viewer
RayTracing- RayTracing TutorialViewer
TomasMöller- Real Time Rendering 의 저자Viewer
CassEveritt- nVidia 사 개발자, Per-Pixel Lighting 관련 연구Viewer
DavidBarraff- 현 Pixar (전 CMU). 강체시뮬레이션관련Viewer
Jos Stam- Alias|Wavefrot 사 근무. FFT 에 기반한 간단한 Fluid SolverViewer
efg's 링크- 시뮬레이션과 모델링에 관한 링크모음Viewer
그래픽스젬스- 차례 및 소스 다운로드Viewer
BOID- BOID(새들의 무리?) 관련 정보(인공지능)Viewer
NatureWizard- 그래픽으로 자연을 표현하기 위한 정보들Viewer
오픈넙스- 공개용 넙스(NURBS) 파일 포맷Viewer
Jan Kautz- BRDF, Shadow Bumpmap, Realtime Bumpmap 등등Viewer
ColDet- 공개 충돌 검사 라이브러리Viewer
University of Leeds- 여러가지 그래픽스 관련 기본적인 튜토리얼.Viewer
스탠포드대학- 컴퓨터 그래픽스를 위한 수학적 방법(웨이블릿, 몬테카를로...)Viewer
Water- Rendering and Animation of LiquidViewer
인텔3D 문서- 인텔의 3D 소프트웨어 개발 관련 문서들Viewer
GTS- GNU Triangulated Surface LibraryViewer
LargeModels- 공짜로 다운받는 무지 큰 3D 모델 파일들.Viewer
RBF- Radial Basis Function 에 관한 FAQViewer
Art-based Modeling...- 아트 기반의 모델링 및 렌더링. 브라운 대학의 리서치 프로젝트Viewer
HyperGraph- ACM의 그래픽 튜토리얼얼얼얼....Viewer
노말 맵 튜토리얼- Object Space Normal Mapping with Skeletal Animation TutorialViewer
HDR- Debevec의 HDR관련...Viewer
HDRShop- HDR 이미지를 조작할 수 있는 툴(비상업적 사용가능)Viewer
OpenExr- ILM사에서 공개한 HDR 파일포맷Viewer
ICC- 국제 컬러 컨소시움(ICC). .icc 포맷에 관한 문서들...Viewer
소프트쉐도우- 토마스 밀러의 실시간 부드러운 그림자 프로젝트Viewer
Stefan Brabec의 논문들- 그림자 관련 논문이 많아요.Viewer
PocketMovies- PocketMoviesViewer
Projectmessiah- ProjectmessiahViewer
Anzovin Studio- Anzovin StudioViewer
AtomFilims- AtomFilimsViewer
4CSCG- 컴퓨터 그래픽 아트 관련Viewer
PepeLand- Daniel Martinez LaraViewer
SIGGRAPH 2003 PAPERS- SIGGRAPH 2003 논문 링크Viewer
M. Gleicher 의 홈페이지- 캐릭터 애니메이션 수업 및 모션 에디팅 논문 자료Viewer
캐릭터 애니메이션 강의자료- 위스콘신Viewer
Thalmann- Thalmann's HomeViewer
CG KAIST- KAIST COMPUTER GRAPHICS LABViewer
Motion Editing Lecture- KAIST Motion Editing & Manipulation ClassViewer
서울대 그래픽스 랩- 서울대 대학원 그래픽스 & 미디어 랩Viewer
Postech VR lab- 포항공대 VR 랩Viewer
H-Anim- Humanoid Animation Working GroupViewer
Virtual Humans- ben's Virtual Humans PageViewer
Bio Virtual- 3차원 얼굴 뷰어Viewer
모션캡쳐- 모션캡쳐 리서치Viewer
한국생산기술연구원- 메카트로닉스 연구실(로봇관련정보)Viewer
Robotics- Mathematical Methods for Robotics and VisionViewer
Linear Algebra- Computation Methods in Linear AlgebraViewer
MotionEditing Web- M.Gleicher 의 모션에디팅 메일링리스트Viewer
애니큐브- 자신의 아바타를 만든다.Viewer
Heloli.com- 멋진 일본 캐릭터 애니. 카툰렌더링. 치마펄럭. 머리약간 펄럭.Viewer
경사면 걷기- 경사면에서 걷기동작 생성에 관한 논문Viewer
스프링인간- 플래쉬로 만든 고무줄 꼭두각시Viewer
DX8스키닝- DX8 버텍스 쉐이더에 대한 간단설명 및 스키닝 등에 대한 상세한 설명Viewer
게임데브넷- Character Animation with DirectX 8.0Viewer
캐릭터애니관련책- Programming Dynamic Character AnimationViewer
CoderCorner- Pierre Terdiman의 Realtime Cloth, Flexporter, Z-Collide 등등 구경Viewer
Advanced Character Physics- Thomas Jakobsen의 GDC 2001 강연자료Viewer
ESC- 가상 나이트클럽.Viewer
메타휴먼- 메타휴먼? 재미있는 프로젝트들을 연구하는 그룹.Viewer
Cal3D- 공개 캐릭터 엔진Viewer
Watt- 3D게임, 실시간렌더링 및 캐릭터 애니 강연자료Viewer
Expression- 공개 페이셜 애니메이션 툴킷(TTS, 맥스익스포터, 스크립팅)Viewer
HFAP- 마이크로소프트사의 "휴먼 피규어 애니메이션 프로젝트" 연구관련Viewer
Kaneko- Kaneko의 궁극의 캐릭터 애니메이션 데모들Viewer
LinuxGames- 리눅스게임에 관한 뉴스Viewer
리눅스 게임 톰- 리눅스 게임에 관한 많은 뉴우스들.Viewer
OpenAL- Loki 사의 오디오 라이브러리Viewer
SDL- 쓸만한 멀티플랫폼 멀티미디어 라이브러리Viewer
Broodcast2000- 리눅스시스템을 위한 실시간, 비선형 오디오 비디오 편집기 (소스공개)Viewer
Inovation3D- 오픈소스 3D 모델링 툴, 키프레임 애니메이션과 본도 지원(간단하게...)Viewer
Linux Game Dev. in GDC2001- Linux Game Dev. in GDC2001Viewer
리눅스3D- 리눅스 3D 게임 뉴스Viewer
리눅스 3D (org)- 리눅스 3D 뉴스Viewer
LinuxVideo- Linux Video and DVD ProjectViewer
Kano- 실시간그래픽스에 관심있는 일본개발자. GPG 일본판 번역자Viewer
Ádám Moravánszky- ShaderX 에 Bump Mapped BRDF Rendering 파트집필Viewer
Thomas Jakobsen- Game Engine, Physics, Character Animation, DenmarkViewer
Cass Everitte- nVidia 사에서 일하는 카스 에버릿. 몇몇 오픈지엘 예제Viewer
Hoppe- 메쉬 최적화 및 기타 유용한 자료들. MS 사 댕김.Viewer
Jonathan Blow- GDMag의 이너프로덕트를 기고하는 조나단 블로우의 글모음Viewer
Charles Blooom- Oddworld 의 개발자. 실용적인 수많은 문서들. 아름다운 텍스트.Viewer
Kwanny- 서관희님의 개인 홈페이지Viewer
Toki- 토끼님의 개인 홈페이지Viewer
류광- 류광님의 개인 홈페이지Viewer
3dstudy- 김용준님의 개인 홈페이지Viewer
g-Matrix- 김성완님의 개인 홈페이지Viewer
울트라 감자- 김성수님의 개인 홈페이지Viewer
게임통합환경- 신용우님의 개인 홈페이지Viewer
테제- 김태진님의 개인 홈페이지Viewer
김완종- 김완종님의 개인 홈페이지Viewer
Pangde- Pangde님의 개인 홈페이지Viewer
Kimsama- 김현우님의 개인 홈페이지Viewer
NOERROR- 김성익님의 개인 홈페이지Viewer
브렌더- 최고의 오픈소스 3D 모델러/애니메이터Viewer
demonews- 3D 게임 데모 정보Viewer
DPlayer- 3D 댄스 플레이어. 캐릭터 깔끔 예쁘다.Viewer
뷰포인트- 뷰포인트사의 웹3D (메타스트림)Viewer
iWorld3D- 국내 Web3D 개발업체Viewer
와일드 탄젠트- Web3D, Web Streaming, ....Viewer
sumea- 환상적인 자바 3D 영상Viewer
WEB3D 콘소시움- 웹3D 콘소시움Viewer
Blaxxun3D- X3D 포맷을 지원하는 자바로 만든 3D 클라이언트Viewer
펄스3D- 꽤 괜찮은 캐릭터 애니메이션Viewer
슈퍼스케이프- 워크맨 등의 가전제품에 써먹을만한...질은 별루...Viewer
샤우트3D- 자바 기반으로 만들어짐. 툴킷도 제공Viewer
사이코어- Cult3D, CultEffect, PuppetTime 등의 프로덕트Viewer
드림스케이프- 국내 웹3D 관련Viewer
GIBLE3D- 국내 웹 3D 뷰어 개발 업체Viewer
QEDSoft- 3D 웹 에이전트Viewer
오락닷컴- 실시간 스트리밍 3D 춤 강좌 서비스Viewer
KLDP- 리눅스사용자라면 꼭 가봐야 할 사이트Viewer
리눅스시스템관리- 리눅스 시스템 관리자를 위한 홈페이지Viewer
Debian-KR 메일링 리스트- 데비안-KR 메일링 리스트 아카이브Viewer
Trinux- 디스켓 3장에 들어가는 리눅스Viewer
linux-firewall- linux-firewallViewer
certcc.or.kr- 한국정보보호센터Viewer
쉘프로그래밍- 쉘프로그래밍매뉴얼Viewer
SAINT- 보안분석툴Viewer
securityfocus.com- 보안관련정보Viewer
정규표현식설명- 정규표현식에 대한 설명Viewer
Thinkpad Tool- Thinkpad Notebook Linux Configuration ToolViewer
네트워크프로그래밍- BeeJ's Guide to Network ProgrammingViewer
webalizer- 웹 로그 분석툴Viewer
MRTG- 서버 네트워크 통계 프로그램Viewer
VirtualPC- 윈도우에서 리눅스를 깔 수 있다는Viewer
IBM Linux- 한국 IBM의 리눅스 기술문서 번역 및 자료Viewer
헤커되기- 헤커가 되는 법(에릭.S.레이몬드)Viewer
데비안사용자- 국내 데비안 사용자 그룹Viewer
리눅스 가제트- 리눅스관련 웹진Viewer
프렉- 헤킹관련 웹진Viewer
CygWin- GNU + Cygnus + WindowsViewer
GNU GPL FAQ- GPL 에 관련된 빈번한 질문과 답Viewer
phpBB- PHP, MySQL 로 만드는 커뮤니티. 디자인이 깔끔.Viewer
KTUG- Korea TeX Users GroupViewer
KLDP 닷넷- 소스포지와 같은 국내의 오픈소스 프로젝트 서비스 제공Viewer
Emacs-KR 홈페이지- 최고의 에디터인 Emacs 의 사용자 모임Viewer
Emacs 설치- 이맥스 윈도우즈용/유닉스용 설치에 관한...Viewer
정재목씨의 Emacs- 정재목씨의 Emacs 관련 페이지Viewer
NT Emacs- Windows 95/98/NT 용 Emacs 설명Viewer
Elisp Manual- Emacs Lisp ProgrammingViewer
Elisp intro page- Elisp Introduction & linkViewer
Elisp Reference- Elisp Reference ManualViewer
VisEmacs- Visual Studio 내장 에디터로 Emacs 를 사용하게 해 줌Viewer
Doxygen- C++ 개발 문서화 도구Viewer
HeaderDoc- C/C++ 헤더파일을 HTML 로 문서화(펄)Viewer
CVS Home- 버젼 컨트롤 시스템Viewer
RCS- GNU Revision Control SystemViewer
CS-RCS- 윈도우용 RCS. 1인용은 공짜Viewer
ViewCVS- CVS 레파지터리를 웹상에서 보기Viewer
ActiveState- ActivePerl, ActiveTCL 등등Viewer
Cetus링크- 프로그래밍관련 방대한 링크Viewer
ZipArchive- C++ Zip 압축 라이브러리(소스동봉, zlib 사용)Viewer
zlib- zip 라이브러리Viewer
Data Compression Lib- 데이터 압축 관련 정보(인덱스, 링크, 소스)Viewer
GNU Win32- Win32 용 각종 GNU 라이브러리 소스(libjpeg, crypt, freetype, zlib 등등)Viewer
루아- 엘레강트하고, 심플하며, 빠르고, 가벼우며, 확장성이 용이한 스크립트 언어Viewer
공개 컴파일러들- 각종 언어에 대한 공개 컴파일러 목록Viewer
CGShaders- C for Graphics. 사용자그룹을 가장한 공식홈Viewer
UPX- 실행 프로그램 압축 유틸리티. 여러분의 프로그램이 작아집니다.Viewer
oggvorbis- 오그 보비스 플러그인, SDK 및 소스 다운로드Viewer
IGLOO- Visual Studio 용 CVS 플러그인Viewer
OONumeric- Object Oriented Numerics Page, 수치 계산용 각종 라이브러리 링크Viewer
Script Tutorial- 게임용 스크립트 컴파일러, 가상머신 제작 튜토리얼Viewer
SSWF- 플래쉬 SWF 파일을 생성할 수 있도록 해주는 라이브러리. 자체 스크립트도 제공Viewer
ACM- The ABCs of Writing C++ ClassesViewer
Guru of the Week- Guru of the WeekViewer
STL- Standard C++ Library Tutorial 한글Viewer
STL- Standard C++ Library (SGI)Viewer
STL- Visual C++ 의 STL SampleViewer
C++ FAQ- C++ FAQViewer
MSJ- Microsoft Systems JournalViewer
VC++ STL Reference- VC++ STL ReferenceViewer
Thinking in C++- Thinking in C++ 온라인 북Viewer
코드 구루- 코드 샘플이 많은 개발관련 사이트Viewer
OpenIL- Open Image LibraryViewer
Win32ASM- Iczelion's Win32 Assembly HomepageViewer
Priority Que & STL- by Mark Nelson (Dr. Dobb's Journal)Viewer
STLPort- 범용, 공개, 오픈소스 STLViewer
데이타 압축- 데이타 압축 관련 링크 모음Viewer
C++ Optimize- C++ 최적화 방법에 대한 내용Viewer
STL newbie- STL 초보자를 위한 문서Viewer
코드프로젝트- 다양한 장르의 프로그래밍 강좌Viewer
MTL- Matrix Template LibraryViewer
CPlusPlus- C++ TutorialViewer
AssemRef- Assembler Programmer's ReferenceViewer
공짜 C/C++ 컴파일러들- 공개 C/C++ 컴파일러들에 대한 상세한 목록Viewer
어셈러브- 국내 어셈블리 관련 홈페이지Viewer
C++ Online Books- C++ 관련 공짜 온라인 북 링크Viewer
STL Document- RogueWave Software 의 STL 튜토리얼 및 레퍼런스Viewer
Blitz++- 객체지향 공학용 수치계산 라이브러리(C++)Viewer
행렬 라이브러리 비교- C/C++ 용 행렬 라이브러리 비교평가Viewer
AoA- Art of Assembly. 최고의 어셈블리 공개문서Viewer
Win32ASM_comm- Win32 어셈블러 커뮤니티 포럼Viewer
펜티엄 명령- Pentium Instruction Formats and EncodingViewer
MMX소개- 엔젤 코드의 MMX 소개Viewer
전웅님홈- K&R2 레퍼런스 매뉴얼 번역이 있음.Viewer
CodeProject- 공개 소스 코드 및 튜토리얼Viewer
디버깅의 모든것- 디버깅에 대한 자료 및 커뮤니티Viewer
MathWorld- 수학 백과 사전. 방대한 자료 상세한 설명.Viewer
MathBook- Online Books and Lecture Notes in MathematicsViewer
PlanetMath- Wikipedia+MathWorld+SlashdotViewer
Math Fun Facts- 수학의 재미있는 사실들Viewer
AKROWNE's Home- 수학관련 유용한 정보(책 미러 많다)Viewer
Math of DFD- Mathematics of DFD(Discrete Fourier Transform)Viewer
그리스문자 읽는법- 그리스 문자를 읽는 방법Viewer
Numerican Recipes in X- Numerican Recipes in C/Fortran 온라인 북Viewer
Mech-World- 기계공학관련(동역학,수치해석) 강의노트 및 관련정보Viewer
Forgodot- 미적분학 원격 강의Viewer
NetLib- 수학관련 문서 및 소프트웨어 모음집Viewer
물리의 이해- 경상대학교의 물리학 노트. 플래쉬 및 자바애플릿.Viewer
수학사랑- 수학교사들의 연구단체Viewer
대한 수학회- 대한민국 수학 학회.Viewer
GIF math- 각종 수학 식에 대한 GIF 이미지 모음Viewer
SVD- Singular Value Decomposition 을 사용한 이미지 압축Viewer
Physically Based Modeling- (Online Siggraph Course notes)Viewer
Rigid-Body Link- Rigid-Body LinkViewer
RigidTutorial- Rigid Body Simulation TutorialViewer
ODE- Open Dynamics Engine, 공개 다관절 강체 동역학 엔진Viewer
Gene's RealtyRoad- ODE 로 만든 사람 계단에서 굴러 떨어지기Viewer
Dynamo- Dynamic Motion libraryViewer
3DPhysics- 3D Physics 관련 설명Viewer
옥스포드다이나믹스- 자동차 시뮬레이션 라이브러리. (상용)Viewer
BuggyDemo- ODE 를 사용한 3D 자동차 시뮬레이션 데모. 소스 제공Viewer
TJ의 리소스- Thomas Jakobsen의 인터액티브 물리 시뮬레이션 관련 리소스들Viewer
하복- 하복(havok) 물리 엔진(상용)Viewer
Math 엔진- 물리 엔진 까르마(Karma) (상용)Viewer
GamePhysics Book- David H. Eberly 의 게임 피직스 북.Viewer
SOLID- 상용 3D 충돌 라이브러리. 개인사용은 공짜.Viewer
OpCode- 삐에르 테디맨의 공개 충돌 라이브러리. RAPID나 SOLID와 비슷한.Viewer
Novodex- 스위스에 있는 게임 물리 미들 웨어 제작사Viewer
Game Physics 리소스 가이드- 가마수트라에 실린 게임 물리 리소스 가이드편Viewer
TokamakPhysics- 게임을 위한 물리 엔진. 쓸만한 것 같음. 버전1 SDK는 공짜Viewer
NewtonDynamics- 뉴톤 다이내믹스. 작고, 빠르고, 견고하고 사용하기 편하다고 하는 물리 엔진.Viewer
HyperPhysics- 조지아 주립대의 물리관련 백과사전Viewer
아이비즈넷- 인터넷 비즈니스 관련 자료Viewer
DevGuru- 자바스크립트 레퍼런스Viewer
PHP Code Exchange- PHP Code ExchangeViewer
PhpWizard- PhpMyAdmin의 PHPWizardViewer
웹레퍼런스- 여러가지 웹 개발 및 다양한 전문 정보Viewer
Weberdev- PHP, MySQL, JavsScript 등 예제Viewer
자바스크립트 레퍼런스- 자바스크립트 레퍼런스(넷스케이?Viewer
VeriSign 서버인증- 서버인증 신청하려면 (한국)Viewer
VeriSign 서버인증- VeriSign 서버 인증(외국)Viewer
JSBoard- 적수네 게시판 배포본Viewer
jPilot- 자바기반 IRC 클라이언트-상용Viewer
ICQ TOOL- ICQ WEB TOOLViewer
HTML 태그 정리- HTML 태그 정리Viewer
이지보드- 펄 및 씨뿔뿔로 만든 게시판Viewer
nzeo- 제로 보드 커뮤니티Viewer
TT보드- 티티보드 및 티티체(공개웹폰트)Viewer
미니위니- 미니위니 쩜 컴. 홈페이지에 관한 홈페이지Viewer
아시아소프트공개폰트- 아시아소프트에서 공개하는 윈도우용 한글글꼴들Viewer
알티즌웹폰트- 알티즌에서 공개하는 웹폰트 100여종Viewer
WebGFX- 웹상에서 글자 효과 이미지를 만들어 준다니Viewer
MathWorld- 울프람 수학 백과 사전. 방대한 자료 상세한 설명.Viewer
ScienceWorld- 울프람 물리학 백과 사전.Viewer
야후 각종 사전- 야후 한영, 영한, 국어, 백과, 경제 사전Viewer
encarta- MSN 의 영영사전. 단어 발음 제일 많음.Viewer
엠파스사전- 엠파스 백과사전, 영한/한영, 정보통신, 국어사전Viewer
Jargon File- 해커들의 각종 전문 용어 사전.Viewer
야후 영영- American Heritage? DictionaryViewer
한메 마이퀵파인드- 무료 인터넷 영어사전. 간단히 클릭만으로도 쉽게 번역됨.Viewer
캠브리지 영영- 캠브리지 영영 사전Viewer
텀즈- 컴퓨터 용어 사전(한글)Viewer
Whatis- 컴퓨터 용어 사전(영어)Viewer
딕쇼너리- 딕쇼너리 쩜 컴Viewer
정보통신용어사전- 엠파스 정보통신 용어사전Viewer
GoEnglish- 영어 관용어 설명Viewer
수학용어사전1- 중학교 수학 용어 사전Viewer
수학사랑용어사전- 교과서 수준의 수학 용어 정리Viewer
MathNet- 한국과학기술원 수리과학정보센터 수학 용어 디비 검색(영문<->한글)Viewer
IT사전- 디지털 타임즈의 IT 용어 사전Viewer
게임사전- 쥐그라운드의 게임관련 용어사전Viewer
알고리즘사전- NIST. 각종 알고리즘과 데이터 구조 검색Viewer
FOLDOC- 컴퓨터에 관련된 공개 온라인 사전Viewer
물리학용어집- 한국 물리학회 산하의 영한/한영 물리학 용어 변환 데이터베이스Viewer
LG 각종 사전- LG 상남 도서관에서 제공하는 각종 용어 사전 서비스 및 링크Viewer
인터넷 약어- 네티즌들이 사용하는 인터넷 약어 간단 정리Viewer
딕쇼너리- 쓸만한 영어 사전 있음. 숙어가 잘 찾아짐Viewer
격언 우화 사전- 격언, 속담, 우화 등에 사용된 단어들의 의미Viewer
스노우캣- 재밌는 캐릭터, 홈페이지깔끔Viewer
다나와- 컴퓨터 가격 정보Viewer
지하철노선- 완벽한 지하철 노선표Viewer
CNET 코리아- CNET 코리아. 리눅스 소프트웨어도 많이 다운받을 수 있다.Viewer
RJ-45잭- RJ-45잭 설치법 상세히Viewer
지도- 자세한 디지탈 지도Viewer
winamp 로 인터넷 방송하기- winamp 로 인터넷 방송하기에 대한 자세한 설명Viewer
아스키 스타워즈- 아스키로 보는 스타워즈Viewer
KWeather- 날씨정보Viewer
노트패드로 VRML 만들기- 선호형개인홈피. 노트패드를 사용한 VRML 만들기Viewer
Common Lisp HyperSpec- Common Lisp HyperSpecViewer
ACM- ACM Digital Library SearchViewer
세사모- 세벌식 사용자 모임Viewer
Dvorak- 드보락 자판에 대한 소개Viewer
사랑해의 다국어버젼- 사랑합니다를 여러 언어로 표현한 것Viewer
간단한 맞춤법- 통신상에서 잘 틀리는 간단한 맞춤법Viewer
마인드스톰- 레고 마인드 스톰의 다음카페Viewer
생활전화번호- 유용한 전화번호 찾기Viewer
우리말서당- 한글 맞춤법에 관한Viewer
All Posters- 각종 영화 및 기타 포스터들Viewer
IPL- Internet Public Library 공짜 인터넷 책Viewer
단위- 각종 단위(테라, 페타, 엑사, 제타, 요타...)Viewer
언어파괴- 온라인 언어파괴 이제는 그만Viewer
뉴스페이퍼- 만화, 유머 기타등등Viewer
정보과학회논문- 논문 검색 및 무료 다운로드(5개월 이전만)Viewer
KTUG- Korean Tex Users GroupViewer
아스키테이블- 아스키 테이블 조금 디테일하게...Viewer
퍼즐- 생각하는 퍼즐. 아하 그렇구나. 허 참.Viewer
Tech News- c|net 테크 늬우스Viewer
스무쓰째즈- 부드러운 째즈를 들을 수 있는 곳Viewer
티메카- 온라인 전문 서점. 원서 매우 싸다.Viewer
경조사어- 각종 경조사어를 한자로Viewer
DBDIC- 묻고 답하는 지식 커뮤니티. 무엇이든 물어보세요.Viewer
온라인북- 1800권 이상의 온라인 북. 우와~Viewer
용묵님 홈페이지- 한글 입력기 <날개셋> 개발자이신 용묵님 홈페이지. 세벌식관련 및 여러 읽을 거리들Viewer
CTUG- 한글 Tex 사용자 그룹Viewer
새나루- 각종 세벌식 및 드보락 자판을 함께 쓸수 있는 입력기Viewer
윈도우 키맵- 윈도우즈 키맵 변경방법Viewer
TexPoint- 파워 포인트에 LaTeX 사용하기Viewer
맞춤법 변환기- 맞춤법 변환기, 로마자 변환기, 표준 발음 변환기Viewer
오피스 뷰어- 오피스 뷰어 모음집Viewer


체계화된 프로세스와 산출물들로 무장한 개발방법론은 회사에 필요한 이상적인 무기를 제공해줄 것 같지만, 개발방법론을 도입해 크게 효과를 본 회사를 찾기는 쉽지 않다. 개발방법론이 개발을 더 지연시키고 개발자들을 번거롭고 힘들게 한다고 하기도 하고 개발방법론을 도입해서 사용하다가 포기하고 다른 방법들을 기웃거리기도 한다. 왜 이렇게 성공적으로 개발방법론을 도입하는 것이 어렵고, 개발방법론을 효과적으로 소프트웨어 개발에 적용하기 위해서는 어떻게 해야 하는지 알아보자.

 

전규현 gracegyu@gmail.com|데스크톱, 네트워크, 시큐리티 등 다양한 소프트웨어 개발 분야에서 15년 이상의 경험을 쌓았다. 한글과컴퓨터, 안철수연구소 등에서 소프트웨어엔지니어 및 프로젝트관리자로 지냈다. 현재는 소프트웨어 경영/개발 컨설턴트로서 많은 소프트웨어 회사들에게 소프트웨어의 효율적인 개발 방법을 전파하고 있다. 직접 운영하고 있는 소프트웨어 공학 블로그(http://allofsoftware.net)를 통해 효과적이고 실전적인 소프트웨어 공학 경험을 블로거들에게 공유하고 있으며, 저서로 『소프트웨어 개발의 모든 것(페가수스, 2008)』이 있다.

 

독자들 중에서도 개발방법론들을 경험해 본 사람들이 꽤 있을 것이다. 실제로 개발방법론을 경험해 봤다면 그 개발방법론이 실제 소프트웨어를 개발하는 데 얼마나 도움이 되었는지 묻고 싶다. 즉, 이전에 나름대로의 방법으로 알아서 개발하던 때와 비교하면 얼마나 나아졌는지 묻고 싶다. 진짜 개발이 더 빨라지고 생산성이 높아졌는지? 아니면 개발은 오히려 느려졌고 과거보다 번거로울 뿐이지만 그래도 문서를 남겨야 나중에 정보 공유가 가능하니까 따르는 것인지 묻고 싶다. 
필자는 소프트웨어 개발 컨설턴트로서 여러 개발자들이 이러한 질문에 답변하는 내용을 들을 기회가 많다. 그 중에 개발방법론은 고객이 요구하기 때문에 어쩔 수 없이 적용한 경우가 많았고, 실제로 개발하는 데는 필요도 없는 문서를 많이 만들어야 했으며, 그로 인해 개발에 더 많은 시간이 소요되었다는 얘기를 종종 듣게 된다. 하지만 회사에서 시키기 때문에 억지로 하곤 한다고 말한다. 시중에 개발방법론은 넘쳐나는데 왜 개발방법론을 적용해 큰 효과를 봤고 개발 생산성이 크게 향상되었던 경험을 접하기가 어려운 것일까?

 

개발방법론은 필요하다

회사가 작을 때는 소프트웨어를 개발하는 데 있어서 대부분 확실한 개발 체계 없이 시작한다. 대부분의 경우 이렇게 주먹구구식으로 또는 가내수공업 형태로 소프트웨어 개발을 시작해도 별 문제가 없다. 체계가 없다는 것은 소프트웨어를 개발하는 데 문서를 제대로 만들지도 않고, 정형화된 프로세스 없이 개발자들의 경험에 의해 주먹구구식의 절차를 통해 별도의 개발 시스템 없이 순전히 개발자들의 기억력과 약간의 기록만 가지고 개발하는 것을 의미한다. 그렇게 개발하더라도 대부분 큰 문제에 봉착하지 않는다. 대부분의 정보라는 것도 그리 방대하지도 않아서 개발자들의 머릿속에 잘 저장되어 있고, 시스템도 그리 복잡하지 않아서 몇몇 소수의 개발자들이 머리를 맞대고 개발해도 별 문제가 없다. 또 충성심 가득한 개발자들은 회사에 언제까지나 있을 것 같고, 문제가 발생하면 특공대처럼 문제를 빠르게 해결한다.

이러한 시기에는 오히려 주먹구구 방식이 훨씬 빠르고 비용이 적게 든다고 생각할 수 있다. 실제로 이런 개발 방법이 여타 개발방법론을 적용한 개발 방법보다 효율이 더 높은 경우도 있다. 소수의 개발자에게 너무 많은 부분을 의존하고 있는 이런 방식은 장점인 것처럼 보이지만, 사실은 대단히 큰 위협요소가 된다.

성장하는 회사는 조직이나 소프트웨어의 규모가 점점 커지고, 개발해야 하는 제품의 수와 개발자는 점점 늘어가고, 더 이상 주먹구구식으로는 개발이 어려워진다. 회사는 점점 성장하는데 여전히 주먹구구식으로 개발하고 있다면 개발 과정은 점점 혼란스러워지고 설상가상으로 대부분의 정보를 머릿속에 담고 있는 개발자가 퇴사를 하기도 한다. 

개발방법론은 이렇게 소수의 개발자에 편중되어 있는 대부분의 리스크를 시스템적으로 커버할 수 있도록 한다. 문서도 만들어야 하고, 프로세스도 따라야 하기 때문에 당장에는 기존의 주먹구구식의 방식보다는 시간도 많이 들어가고 비용도 많이 들어가는 것처럼 보이지만, 그 대가로 리스크를 줄일 수 있다.

모험심이 가득한 벤처 회사라면 얼마든지 리스크를 감수할 수 있겠지만, 회사가 점점 커지면 리스크보다는 비용을 선택하게 되어 있다. 따라서 주먹구구식으로 시작한 소프트웨어 회사라도 규모가 커지면 자연스럽게 개발방법론에 눈을 돌리게 된다.

이렇게 개발방법론을 시도해보기 위해 개발방법론 도입을 도와주는 컨설팅회사에 의뢰를 하기도 하지만, 대부분은 인터넷이나 책을 통해 개발방법론을 배워보려고 시도한다.

 

개발방법론을 공짜로 배울 수 있을까?

개발자들은 인터넷에서 수많은 소스 코드 샘플을 보고 개발에 활용해 왔듯이, 개발방법론도 인터넷에서 특정 개발방법론의 템플릿과 샘플 그리고 프로세스를 가져와서 따라하면 개발방법론을 그럴싸하게 흉내 낼 수 있을 것으로 생각하기도 한다. 하지만 실제로 따라해보면 생각만큼 잘 되지 않는 것이 사실이다. 일단 기존에 주먹구구식으로 개발하던 개발자들은 개발방법론에서 제시하는 템플릿을 보게 되면 생전 처음 보는 내용도 많을 뿐더러 왜 그러한 것이 필요한지 진짜 의미를 이해하기 어렵고, 어떻게 작성해야 하는 것인지 파악이 잘 안 되는 것이 일반적이다. 그리고 이것이 정말로 자신의 회사에서 필요한 것인지 또는 필요 없는 것인지 판단이 안 되기도 한다.

그래서 일단 이것저것 시도를 해보고 효과가 신통치 않으면 나중에 “그거 해봤는데 별로더라”라는 자신만의 편협한 평가를 내리기도 한다. 이러한 서투른 시도는 개발방법론에 대한 나쁜 인식만 키워주기 때문에 아니 한 만 못하다.

여러 개발방법론에서 제시한 문서들이 작성하기 부담스럽다고 문서를 적게 작성해도 된다는 XP, 애자일(Agile) 등에 쉽게 눈을 돌리곤 하는데, 이 또한 너무 쉽게 접근해 실패하는 경우도 많다. XP 방법론이 모든 종류의 소프트웨어를 커버하는 것은 아니지만, 나름대로 적절하게 쓰이면 훌륭한 개발방법론인 것은 사실이다. 하지만, 왠지 간편해 보인다고 만만하게 접근하다간 큰 코 다칠 수 있다. 소프트웨어를 개발하는 데 있어서 가장 어려운 것 중에 하나가 무엇을 만드는지 결정하는 일이다. XP 방법론에서는 이러한 스펙 작성의 어려움을 덜고자 다른 접근을 하는데, 이것이 마치 스펙을 작성하지 않아도 되고, 문서를 적게 만들어도 되기 때문에 개발자들에게는 최고의 개발방법론인 것처럼 생각할 수도 있지만, 그리 만만한 것은 아니다. 스펙 대신 테스트를 이용하고 있지만, 이 또한 공짜로 되는 것은 아니다. 기존에 이미 분석 능력을 가지고 있고, 유닛 테스트(Unit test)에 능통한 경우라면 무리 없이 받아들일 수 있지만, 주먹구구 방식에 익숙한 경우라면 이 또한 어려운 도전이 될 수 있다.

즉, 그냥 쉽게 배우고 프로세스, 템플릿을 좀 익혀서 개발방법론을 제대로 적용해 보기는 어렵다. 공짜로 배워보기에는 개발방법론은 그리 만만하지 않다.

 

몸에 맞지 않은 개발방법론이 문제

그렇다고 컨설팅을 통해 개발방법론을 도입하는 경우도 그렇게 쉬운 것은 아니다. 여기에는 몇 가지 함정들이 도사리고 있다. 자칫하면 이론에 치우치기 쉽고 회사의 역량이나 규모에 걸맞지 않은 무거운 개발방법론을 도입하게 되기도 한다. 개발방법론을 도입하려는 회사는 어떤 개발방법론이 자신의 회사에 알맞은지 직접 판단하기 어려우므로 외부의 전문가의 판단에 의존하는데 외부의 전문가가 실전 경험이 부족한 경우 회사의 특징과 역량 수준을 고려하지 않고 거대 개발방법론을 기계적으로 도입할 수 있다. 이 경우 큰 Learning Curve를 겪게 되고 결국 이를 극복하지 못하고 실패할 가능성이 높다. 따라서 자신의 회사에 알맞은 수준의 개발방법론을 선택해야 하는데, 이렇게 몸에 딱 맞는 개발방법론을 선택하는 것도 쉬운 일은 아니다.

또, 개발방법론을 하나 정해 놓고 회사의 모든 프로젝트에서 그 개발방법론을 무조건 따르게 하는 것도 문제다. 모든 프로젝트는 그 성격이 다른데, 하나의 개발방법론을 무조건 따르게 되면 간단한 프로젝트에서도 과도한 비용을 지불해야 한다. 이는 개발방법론이 자칫 관료화되는 것을 조심해야 한다는 뜻이다. 애초에 개발방법론을 도입한 이유를 망각하고 관리자나 프로세스 부서에서는 무조건적인 강요로 효율성을 떨어뜨리는데, 애초에 개발방법론을 도입할 때 유연하게 적용을 할 수 있는 여지를 남겨 둬야 할 것이다.

 

방법론의 목적은 효과적인 개발

소프트웨어 개발방법론의 근본 목적은 소프트웨어를 빠른 시간 안에 적은 비용을 들여 요구되는 품질의 소프트웨어를 만들어내는 것이다. 이런 과정에서 개발자들이 혹사되어서는 안 되며 개발자들은 자연스럽게 소프트웨어 전문가로서의 능력이 향상되어야 한다. 즉 프로젝트도 성공하고 개발자에게도 도움이 되어야 진정한 방법론인 것이다. 그렇지 않고 단순히 절차를 지키기 위한 방법론, 개발자는 희생하면서 프로젝트만 어떻게든 성공하기 위한 방법론은 반쪽짜리일 뿐이다. 그럼에 불구하고 개발방법론은 왠지 무겁고 형식적이고 소프트웨어를 개발하는 데 진짜 도움은 되지 않는다는 생각들은 개발방법론 시도 실패에 대한 반작용으로 생겨난 경험담들 때문이다.

 

국내 현실은 도 아니면 모
국내 대부분의 소프트웨어 회사는 소프트웨어를 개발하는 방법에 있어서 아래 세 가지의 부류로 나눌 수 있다.

첫째, 주먹구구식으로 소프트웨어를 개발하는 회사. 특별한 프로세스 없이 개발자들의 경험에 의존해 자체적으로 약간의 문서를 만들면서 소프트웨어를 개발하고 있는 회사. 주로 작은 회사들이며 개발자가 100명 이상인 중견 기업들도 상당히 많은 회사들이 이 단계에 머물러 있다.

둘째, 거대 방법론을 도입해서 흉내 내는 회사. 이 경우도 상당수가 내부적으로는 주먹구구이나 형식적으로는 방법론을 따라하고 있다. 주로 대기업에 해당하며 이들 기업은 개발 효율성보다 리스크 감소에 더 관심이 많으며 개발자들보다 회사의 힘이 압도적으로 크므로 추진력 강하게 이러한 개발방법론을 도입할 수 있고, 이러한 무리한 도입 과정에서 벌어지는 비효율성은 개발자들이 요령껏 편법을 이용해 피해가는 경우가 많다. 즉, 내용보다는 형식에 치우친 경우라고 할 수 있다. 이 경우 리스크는 줄어드나 개발 효율성도 따라서 줄어들어 일정 수준 이상을 넘을 수가 없다.

셋째, 거대 방법론이 회사에 맞지 않음을 깨닫고, 다시 주먹구구 개발방법으로 되돌아 온 회사. 그러면서 다른 방법이 없을까 고민하고 있는 회사들이다. 이런 실패의 경험이 반복될수록 내부에 불신이 쌓여가므로 쉽게 새로운 시도를 못하고 주먹구구와 개발방법론 사이를 떠도는 경우이다.

물론 이 세 부류에 속하지 않은 회사들도 있다. 그런 회사들은 스스로를 잘 알고 있으므로 별도로 언급할 필요가 없을 것이다. 그리고 그런 회사는 그리 많지 않다. 첫째와 셋째는 ‘도’에 해당하고 둘째는 ‘모’에 해당하는 경우이다. ‘도’도 바람직하지 않고 ‘모’도 소프트웨어를 개발하는 데 비효율적이다. 가장 좋은 경우는 ‘개’나 ‘걸’처럼 회사의 규모와 개발자들의 역량이 같이 성장해 나가면서 그 단계에서 딱 필요한 것들을 차근차근 하나씩 도입해 나가면서 내재화시켜 나가는 것이다.

 

뭐든지 단계가 있는 법
뭐든지 배우려면 그 단계가 있고, 차근차근 배우고 익혀나가야 한다. 예를 들어서 골프를 배우고 싶다면 어떻게 될까? 소프트웨어를 취미로 개발하고 있는 것은 아니므로 골프로 프로 선수가 되는 것을 목표로 삼는 경우를 예로 들어보자.

골프를 처음 배워나가면서 타이거 우즈가 공을 치는 방법이 가장 완벽하다고 해서 그 방법을 그대로 따라하기란 불가능하다. 타이거 우즈가 그렇게 공을 치기까지는 십 수 년의 훈련이 필요했고, 타이거 우즈에 가장 알맞은 방법으로 진화해 온 것이다. 그런데 타이거 우즈가 그 방법으로 세계에서 가장 골프를 잘 치는 사람이 되었다고 그것을 그대로 흉내 내는 것은 어리석은 짓이다. 사실 그대로 흉내 내는 것 자체도 불가능하다. 타이거 우즈와 똑같이 치는 방법을 책을 쓰면 책 한 권은 넘을 것이다.

하지만 타이거 우즈는 그 방법을 일일이 생각하면서 공을 치지 않는다. 그 방법이 몸에 익었을 뿐이다. 그냥 공을 치면 저절로 되는 것이다. 이를 ‘내재화’가 되었다고 한다. 그 최고의 방법을 모델로 놓고 그대로 따라하고 훈련한다고 해서 그 방법을 익힐 수 있는 것은 아니다. 그러한 단계로 가기 위해서는 기초부터 배워나가는 방법이 따로 있을 것이다. 또 우리 몸에 맞는 모델은 타이거 우즈의 방법이 아닐 수도 있다. 그런데 최고의 방법이 타이거 우즈의 방법이라고 따라하는 것은 무리한 시도이며 대부분 포기하게 될 것이다.

진짜 프로골퍼를 목표로 하고 골프를 배우고 있다면 타이거 우즈가 골프를 치는 것을 그대로 따라하는 것이 좋은 방법이 아님을 누구나 알 수 있을 것이다. 재미로 마구 골프를 쳐보다가는 평생 프로선수가 되지 못할 것이다. 누구나 상식적으로 생각해도 아주 기초부터 차근차근 훈련을 받아나가야 한다는 것을 알 수 있을 것이다.

그런데 소프트웨어 세상에서는 이런 섣부른 시도들이 종종 발생한다. 개발자들의 역량은 아직 기초 수준인데 세계 최고의 방법론들을 도입해서 시도하면 개발자들도 저절로 세계 최고의 역량을 갖출 수 있을 것으로 착각하는 것 같다.

 

개발방법론이 가르쳐주지 않는 것
개발방법론은 소프트웨어 회사라면 당연히 갖추고 있어야 하는 것은 가르쳐주지 않는다. 즉, 소스 코드를 어떻게 관리하고, 버그는 어떻게 추적할 것이며, 빌드/릴리즈는 어떻게 할지는 크게 상관하지 않는다.

하지만, 이러한 것들이 아직 체계적으로 갖춰지지 않는 회사가 개발방법론을 도입한다고 하면 따라가기만 하는 것도 벅차고 성공적으로 내재화되기는 어려울 것이다. 축구팀이 기초 체력은 갖추지도 못하고 기본적인 드리블이나 슛 실력이 부족한 상태에서, 다양한 전술과 전략을 익혀봤자 말짱 허사일 것이다. 여기서 말하는 기초 역량은 개발자에게 있어서 설계, 코딩 능력을 말하는 것은 아니다. 우리나라 개발자들의 코딩 능력은 전 세계 어디 내놔도 손색이 없을 만큼 뛰어나다. 여기서 말하는 기초 역량은 소프트웨어 회사라만 기본적으로 갖춰야 할 요소들과 설계, 코딩을 제외한 소프트웨어 전문영역의 다양한 지식들을 말한다. 이러한 것들은 워낙 당연한 것들이기 때문에 개발방법론을 만든 사람들은 소프트웨어 회사라만 당연히 보유하고 있어야 하는 것으로 생각한다.

방법론에서는 그러한 것들은 너무나 당연한 것이라 어떤 방법을 사용하든 별 개의치 않는 경우가 많기 때문에, 그러한 기초조차 제대로 갖추고 있지 않은 소프트웨어 회사라면 현재의 수준을 자각하지 못하고 자칫 그럴듯하게 포장된 방법론만 눈에 들어올지도 모른다. 이런 경우 방법론은 공염불이 되기 십상이다. 방법론을 고민하기보다는 기초부터 다져야 하는 경우이다.

 

개발자들의 역량

기초란 회사에만 적용되는 것은 아니다. 개발자들도 개발방법론을 따라 개발하기 위해서는 필요한 역량이 있다. 가장 먼저 방법론 하면 산출물이 떠오르는데 대부분의 개발자들은 문서를 작성하는 데 익숙하지도 않고 그보다 먼저 문서 작성을 싫어한다. 이러한 상황에서 템플릿만 잔뜩 제공하고 이를 만들어내라고 하면 보통 괴로운 일이 아니다.

그럼 이쯤에서 의문이 생긴다. 과연 개발자가 문서를 잘 작성한다는 것은 무엇을 말하는 것인가? 개발자들 스스로도 본인이 문서를 잘 작성하고 또 잘 작성할 능력이 있는지 알지 못하는 경우도 많다. 개발자들의 문서 작성 능력을 한번에 알아내기는 어렵지만, 아래와 같은 질문을 해보고 싶다.

소프트웨어를 개발하면서 문서를 만드는 이유가 무엇이라고 생각하는가?

1. 고객이 원해서
2. 나중에 유지보수를 위해서
3. 개발 시간과 비용을 단축하려고

이 중에서 1이나 2라고 답하는 사람들은 아직 문서를 제대로 작성할 능력이 낮을 가능성이 높다. 그 동안 문서를 형식적으로 작성해 왔거나, 문서 작성을 거의 하지 않고 개발을 해오면서 문서는 거추장스러운 것이라고 생각하고 있는 경우가 많을 것이다. 이런 상태라면 개발방법론은 정말 거추장스러운 방해밖에 될 수 없다. 3번이라고 자신 있게 답할 수 있는 사람들은 개발하면서 문서들도 진정 필요한 시점에서 필요한 내용으로 작성했을 것이고, 그렇게 오랜 시간 훈련이 되어 필요한 문서 작성에 능숙할 것이다. 하지만 이렇게 3번이라고 자신 있게 답할 수 있는 개발자들이 많지 않은 것이 현실이다.

방법론에서 만들어내는 수많은 문서들은 문서 자체가 목적이 아니다. 모든 문서들은 다음 작업을 진행하는 데 필요하기 때문에 만드는 것이다. 따라서 다른 개발자들이 내가 만들어 놓은 문서들을 보고 그 다음 작업을 진행할 수 있어야 한다. 즉, 내가 작성한 스펙문서를 보고 설계를 담당한 개발자는 설계를 할 수 있어야 한다. 또 테스트팀은 테스트 계획과 테스트 케이스를 만들어낼 수 있어야 한다. 그리고 기술문서팀(Techpub)에서는 스펙문서만 보고도 매뉴얼을 작성할 수 있어야 한다. 또한 빌드/릴리즈팀에서는 빌드 준비를 할 수 있어야 한다. 하지만, 분석 역량이 부족한 개발자에게 템플릿만 제공해 스펙문서를 만들어 낸들 제대로 설계가 가능하고 테스트 케이스를 만들어 낼 수 없다.

그리고 방법론을 도입하고 약간의 교육으로 그런 수준까지 역량을 끌어올리기는 어렵다. 오히려 거대한 방법은 역량을 차근차근 끌어올리기에는 거추장스러운 옷처럼 방해 요소가 될 수 있다. 차라리 방법론 전체보다는 각 회사에 필요한 기초적인 부분을 추출해 조금씩 적용하는 것이 좋을 것이다. 그러한 과정을 거치면서 개발자들의 역량도 같이 키워나가야 한다. 여기서 필요한 것은 분석, 설계, 프로세스, 형상관리, 테스트 등 개발에 필요한 다양한 것들이다. 이러한 지식과 경험은 하루 아침에 배운다고 익힐 수 있는 것이 아니고, 회사에서 일하면서 조금씩 쌓아 나가는 것들이다. 또한 개발자 혼자서 스스로 익힐 수 있는 것도 아니고, 회사와 같이 개발 업무를 해나가면서 계속 배우고 익혀나가야 하는 것들이다.

 

잘못 사용되는 개발방법론

개발방법론을 사용하는 이유가 고객이 해당 개발방법론을 적용하기를 원해서인 경우가 종종 있다. 이러한 경우 고객들도 목적이 개발방법론은 아니지만, 소프트웨어 개발에 대한 전문지식이 모자라므로 회사의 규정에 의해서든 여러 연유로 인해 개발방법론 적용을 요구하게 된다. 이 과정에서 개발방법론을 효과적으로 추려내서 적용하지 못하고 전체를 그대로 적용해 달라고 요청하는 일이 발생한다.

고객은 개발방법론 교과서에 나온 대로 기계적으로 산출물과 프로세스를 요구하고 소프트웨어 개발사는 비효율적인 것을 알아도 고객이 원하므로 울며 겨자 먹기 식으로 무조건 따라야 하는 경우가 많다. 하지만 우리나라 개발자들이 어떤 개발자인가. 모든 난관은 헤쳐 나가는 방법이 있다. 방법론에서 요구하는 문서는 어쨌든 만들어내고 있다. 다양한 편법을 통해 문서를 만들어 내고 있고, 대부분의 경우 문서들이 실제 소프트웨어를 개발하는 데 도움이 되지 않더라도 고객이 요구하는 문서는 충족하고 있다. 이렇다 보니 문서 작업은 소프트웨어를 개발하는 데 도움이 되기는커녕 시간만 축내는 낭비요소가 되곤 한다. 하지만 고객의 요구사항이기 때문에 따르는 수밖에 없다.

그 결과, 이렇게 만들어 낸 산출물은 고객에게도 실제로는 아무런 쓸모없이 책꽂이만 차지하는 경우가 허다하고 개발자들은 방법론에 대한 부정적인 생각만 키워나가게 된다. 이렇게 잔뜩 만들어낸 산출물은 유지보수 시 매우 유용하게 사용될 것으로 홍보하지만, 막상 유지보수 때는 개발에 참여했던 개발자를 찾게 되고 문서보다도 소스 코드를 가지고 유지보수를 하게 된다. 이런 것들이 반복되면 개발자들은 개발방법론이란 형식적이고 실제 소프트웨어를 개발하는 데는 별 도움이 안 된다고 생각하게 되고 진짜 제대로 된 방법을 더욱 더 배우기 어렵게 만든다.

 

고객의 무리한 개발방법론 적용 요구

개발 회사는 아무리 개발방법론을 효과적으로 적용하려고 해도 이렇게 고객이 기계적으로 또는 규정에 의해 무리하게 개발방법론을 요구하는 경우에는 어쩔 도리가 없다. 실제로 고객이 개발방법론을 콕 찍어서  **CBD 또는**OOP 방법론을 요구하기도 하는데, 고객을 잘못 만나면 30~40종류 이상의 산출물을 에누리 없이 만들어 내야 하는 경우도 있다. 또 마일스톤마다 산출물을 검사하기도 하기 때문에 프로젝트가 끝나고 밤샘해서 산출물을 만들어 낼 수도 없는 노릇이다. 
이러한 경우에는 진짜로 소프트웨어를 잘 개발하기 위해 필요한 문서와 고객의 요구 때문에 어쩔 수 없이 만들어야 하는 문서를 구별할 필요가 있다. 사실 웬만한 규모의 소프트웨어까지는 주요 문서 2, 3개로 충분히 프로젝트를 진행할 수 있고, 그 외의 문서들은 가능하면 최소한의 노력으로 고객의 요구를 만족시켜주는 수준으로만 만들어주는 것이 가장 효율적일 것이다.

이러한 상황에서 진짜 개발에 필요한 문서와 고객의 요구 때문에 어쩔 수 없이 만드는 문서의 구별이 없다면 자칫 모든 문서가 형식적으로 작성될 수도 있다. 이 과정에서 개발자들은 모든 문서에 대한 거부감만 커지고, 방법론을 제대로 적용한 것 같지만 실제 개발은 주먹구구와 다름없게 될 수도 있다. 아니 오히려 주먹구구에다가 문서를 잔뜩 만들어야 하므로 주먹구구만도 못한 경우가 될 수도 있다.

 

방법이 목적인 개발방법론
이쯤 되면 개발방법론이 진짜 필요한 것인지 오히려 개발을 방해하는 것인지 헷갈리기도 한다. 하지만 서두에서 말했다시피 개발방법론의 목적은 소프트웨어를 적은 비용으로 짧은 시간에 효과적으로 개발하는 데 있다. 하지만 개발방법론을 만든 사람들의 진짜 목적은 돈을 버는 것이다. 방법론을 팔아서 돈을 버는 회사들은 자신들의 개발방법론을 비싸게 많이 팔아야 한다. 그리고 누구나 쉽게 흉내 낼 수 없게 만들어야 한다.

그래서 자신들의 개발방법론을 다른 방법론들과 차별화하기 위해 노력하고 점점 복잡하게 만들게 된다. 그래야 아무나 따라할 수 없게 되고 또 더욱 비싼 값에 팔 수 있다. 이러다 보니 소프트웨어 업계에는 소프트웨어를 개발하는 수많은 개발방법론들이 넘쳐나고 점점 복잡해지고 있다. 그 반작용으로 간단하다고 어필하고 있는 개발방법론이 출현하기도 한다.

이렇게 되니 대부분의 개발방법론 자체가 잘못된 것은 아닐지라도 우리 회사에 알맞은 개발방법론을 찾기란 쉬운 일이 아니게 돼 버렸다. 오히려 잘못된 함정에 빠지기 쉬운 상황이 된 셈이다.

특히 이전에 어느 정도 경험과 기초가 되어 있는 회사들은 개발방법론을 바라볼 때 어느 정도의 판단 능력을 가지고 자신의 회사에 필요한지 그렇지 않은지 판단할 수 있겠지만, 주먹구구에서 시작한 대부분의 소프트웨어 회사들은 그저 혼란스럽기만 할 것이다.

softcompany.jpg

 

어떻게 해야 하나?

필자의 경험에 의하면 국내의 많은 소프트웨어 회사들은 거대 개발방법론을 당장 도입하기에는 아직 적당한 상황이 아니다. 개발방법론을 거론하기 이전에 소프트웨어 회사라면 필수적으로 갖춰야 할 조직과 시스템을 먼저 갖추고 회사에 필수적인 프로세스를 만들어가면서 회사와 개발자 모두 필수 역량을 갖출 때쯤 그리고 회사가 좀 더 크고 복잡해지면 방법론을 생각해보는 것이 좋겠다.

또, ‘자전거’를 만드는 회사에서 ‘우주선’을 만드는 방법론을 사용해서는 안 된다. ‘자전거’ 정도의 소프트웨어를 만드는 수많은 국내 소프트웨어 회사들은 거대 개발방법론이 필요하지 않다. 고객이 요구해서 방법론을 꼭 적용해야 하는 경우가 아니고 자체적으로 소프트웨어를 잘 개발하는 것이 목적이라면, 회사에 알맞은 작고 가벼운 개발방법론이면 충분할 것이다.

럼 소프트웨어 회사가 갖춰야 할 필수 역량에는 무엇이 있는가? 가장 먼저 소스 코드 관리시스템, 버그 관리시스템, 빌드 자동화 등 기본적인 인프라스트럭처 시스템들은 갖춰야 한다. 물론 이것이 그렇게 쉬운 것은 아니다. 실제로 이들을 사용하는 많은 회사들이 기본적인 기능만 사용하고 있음에도, 전혀 이런 시스템들의 도움을 받지 않고 소프트웨어를 개발하고 있는 회사들보다는 훨씬 나은 형편이다. 이런 시스템들을 사용해 개발하다 보면 자연스레 그러한 시스템들에 묻어 있는 소프트웨어 개발 철학을 익히게 되고 기본적인 개발 프로세스도 배울 수 있게 된다.

또, 조직적인 측면으로는 소프트웨어 개발에 필수적인 전문 조직이 기본적으로 필요하다. 대부분의 소프트웨어 회사는 처음 시작하게 되면 개발자들이 전문성을 가리지 않고 온갖 일들을 다하게 된다. 개발도 하고 테스트도 하고 고객지원도 하고, 심지어는 영업을 하기도 한다. 하지만 회사의 규모가 커져 가는데 소수의 개발자들이 개발하던 방식과 똑같이 개발하고 있다면 효율성은 점점 떨어져 간다. 이럴 때는 꼭 필요한 부분부터 전문화된 팀으로 구분하고 전담자를 둬서 해당 분야의 전문성을 높이고 개발자는 개발에 집중할 수 있도록 해줘야 한다. 이러한 대표적인 분야는 테스트와 빌드/릴리즈다. 아직도 테스트를 전적으로 개발자들이 담당하고 있는 회사들이 많다. 개발자 10명만 있는 조직보다는 개발자 7명과 테스터 3명이 있는 조직이 더 효율적인 경우가 많다. 개발자들은 자신이 개발한 소프트웨어를 잘 테스트하지도 못하는데, 해당 소프트웨어의 스펙을 상세히 아는 사람이 개발자 밖에 없고 별도의 테스터를 뽑아도 개발자만큼 제품을 알아서 테스트하기 어렵다고 개발자에게 테스트를 계속 맡기는 것은 잘 하지도 못하는 일을 비싼 인건비를 주고 계속 맡기는 것과 같다.

테스트를 별도의 조직에 맡기는 것이 제품의 품질을 더 높여주고 비용 효율적이며 개발자는 개발에 더 집중할 수 있게 한다. 또 이와 더불어 빌드/릴리즈팀은 빌드/릴리즈 과정을 자동화하고 효율을 높임으로써 그 동안 보이지 않지만 많은 비용을 차지하던 것을 절약하면서도 개발을 더 원활하게 진행하도록 지원한다.
이런 회사의 기본 역량 확보와 더불어 개발자들은 문서를 작성하는 능력, 리뷰하는 능력, 분석 능력, 설계 능력 등 개발자들이 갖춰야 할 코딩 능력 외의 필수 능력들을 쌓아 나가야 한다. 이들은 학교에서 배울 수도 없고, 실무를 통해 오랜 시간에 걸쳐서 차근차근 쌓아 나가야 하는 것들이다.

이렇게 기본적인 조직, 프로세스, 시스템을 갖춰나가면 소프트웨어 회사가 내적으로나 외적으로 기본적인 역량을 갖추게 된다. 이쯤 되면 어떤 개발방법론을 접하더라도 이전보다는 조금 더 잘 이해할 수 있게 된다. <그림 1>과 같이 개발방법론을 성공적으로 도입하기 위해서는 소프트웨어 회사와 개발자들이 기초 역량을 갖추고 있어야 한다. 회사가 어느 정도 역량을 갖추고 판단력이 생기면 무작정 좋다고 하는 개발방법론을 도입하기보다는 회사의 수준에 알맞은 방법들을 취사선택해서 조금씩 받아들이는 방법을 택하게 될 것이다.

결국 개발방법론의 목적인 소프트웨어를 빠른 시간 내에 적은 비용으로 효율적으로 개발한다는 것에 좀 더 가까워질 수 있다.



ch3_2009.pdf



bayesGauss.pdf


+ Recent posts