2005-08-29

C 프로그래밍 배우기

컴파일

(GCC 컴파일러를 사용하는 경우)

gcc 파일이름

-> a.out 파일이 생성되며, ./a.out 명령을 통해서 실행시킴


gcc -o 결과이름 파일이름

-> 결과이름 파일이 생성되며, ./결과이름 명령을 통해서 실행

2005-07-18

Agile 북 리뷰

Agile 방법론과 관련한 Extreme Programming Explained 2nd, Crystal Clear, Agile Project Management 등의 책에 대한 서평이다.


1. 개요

Addison-Wesley에서는 Agile 방법론(통상적인 방법론 이상을 의미)과 관련한 다양한 유형의 책을 출판하고 있다. 이 출판사는 이런 유형을 두개 시리즈로 분류하고 있다.


The XP Series

Kent Beck이 편집자로 있고, XP(eXtreme Programming) 방법론과 관련한 내용을 다루는 시리즈.

  • Extreme Porgramming Explained
  • Extreme Programming Installed
  • Planning Extreme Programming


The Agile Software Development Series

Alistair Cockburn, Jim Highsmith가 편집자로 있고, Agile 방법론과 관련한 다양한 내용을 다루는 시리즈. Agile의 철학에 대한 설명을 기본으로, DSDM, Lean, Crystal 등의 방법론을 다루기도 하고, Use Case, 형상관리 등의 기법을 다루기도 함. 사실상 XP를 제외한 Agile에 대한 모든 것을 다루는 시리즈로 간주할 수 있음.

  • Agile Software Development
  • Agile Software Development Ecosystems
  • Agile and Iterative Development: A Manager’s Guide
  • Writing Effective Use Cases

2004년까지 별도로 진행되던 XP/Agile Universe와 Agile Development Conference가 2005년부터 Agile 2005 Conference로 통합된 것처럼 더 이상 두 시리즈의 구분에 큰 의미는 없다. XP를 중심으로 하던 논의가 이제는 Agile이라는 폭 넓은 화두를 중심으로 해서 진행되고 있는 특징을 반영할 뿐이다.

이 두 시리즈에서 다루어지지 않는 대표적인 Agile 관련 내용으로 Scrum, FDD(Feature Driven Development) 방법론이 있다. 그리고 Addison-Wesley 외에 Agile과 관련한 대표적인 시리즈는 Andy Hunt와 Dave Tomas가 편집자로 있는 The Pragmatic Programmer를 들 수 있다.

아래는 Kent Beck의 Extreme Programming Explained(이하 XPE) 개정판과 Alistaire Cockburn의 Crystal Clear, Jim Highsmith의 Agile Project Management(이하, APM) 등에 대한 서평이다.


2. Agile 방법론

Agile 방법론을 특정 기법이나 도구의 사용 여부로 다른 방법론과 구분하는 것은 유익하지는 않다. XP의 12 기법을 모두 적용한다고 그것이 바로 Agile적이다라도 단정지을 수는 없다. 그보다는 Agile Alliances’s Manifesto에 대한 충실도가 중요하다. 결국 신뢰에 바탕한 관계지움에 대한 고민이 Agile의 척도여야 한다.

아래의 책들은 다양한 기법에 대해 설명하고 있는데 이들에만 집중하면 큰 흐름을 잃어버리는 우를 범할 수 있다. Agile 자체에 대한 고민을 중심으로 저자들이 제시하는 기법에 집중을 해야 그 기법에 대한 이해도를 높일 수 있으며 큰 흐름을 받아들일 수 있다.


3. Extreme Programming Explained 2nd


Agile과 XP를 세상에 알린 1999년에 출간된 XPE에 대한 개정판이다. 개정판이라고는 하지만 별개의 책이라고 해도 무리가 없을 정도로 다시 쓰여졌다. 그러나 XP란 무엇인가와 XP가 추구하는 것은 무엇인가에 대한 설명서라는 초판의 목적에는 여전히 충실하다.

XP에 대해서 개괄적으로 설명하는 첫장(What is XP?)으로 시작하며, XP를 구성하는 요소 및 기법에 대해서 설명하는 내용들(Exploring XP)과 XP의 바탕이 되는 철학을 설명하는 내용들(Philoshophy of XP)로 구성되어 있다.

XP는 사회적 변화에 관한 것이다(XP is about social change)라는 책의 첫 문장처럼 초판에 비해서 개정판은 기법 혹은 기술에 대한 비중을 줄었고, 철학과 태도에 대한 내용의 비중이 늘었다. Test-First Programming과 같은 특정 기법의 선호도에 대한 논쟁이 XP가 궁극적으로 추구하는 바에 대한 주목을 분산시키는 것을 방지하기 위함이다. 초판 이 후 12개 Practices 중 몇 개를 실제로 사용하는 가를 놓고 XP를 하느냐 하지 않느냐를 판단하던 우스운 상황이 개정판 이후에는 없을 것이다.

XP가 작은 규모의 프로젝트 뿐만 아니라 큰 규모의 프로젝트에도 적용할 수 있다고 명시한점과 요구사항이 불확실하고 변경이 잦은 프로젝트 뿐만 아니라 요구사항이 비교적 명확한 프로젝트에도 적용할 수 있다고 한 점이 초판과 비교해서 크게 변경된 부분이다.

그리고 기법을 기본(Primary)과 부가(Corollary)로 구분하였다. 부가적인 기법은 기본 기법에 익숙하지 않은 상황에서는 사용하기 어렵다는 것을 명확하게 하였다.

C3 프로젝트에 대한 비교적 자세한 서술과 테일러즘과 TPS(Toyota Production System)에 내용, 그리고 Offshore 개발에서의 XP의 적용 가능성에 대한 내용들도 추가되었다.

결과적으로 초판에 비해서 개정판 내용의 완성도가 더 높음에도 파급 효과는 크지 않았다. 이는 Kent Beck이 책에서 지적한대로 초판에서는 낮설던 내용들의 상당수가 5년이 지난 지금에는 현장에서 일상적으로 사용되고 있는 상황에 기인할 것이다. XP의 새로운 점을 기대하기 보다는 잘 정리된 XP의 설명서를 읽는다는 점에서 접근하는 것이 좋을 것이다.


4. Crystal Clear : A Human-Powered Methodology for Small Teams

Alistaire Cockburn은 프로젝트의 규모(주로 개발자의 수로 측정)와 위험도에 따라서 다양한 방법론이 필요하다고 보며 이들을 Crystal 방법론 집합으로 지칭한다. 이중 규모가 작고(8명 이하) 위험도가 낮은 방법론을 Crystal Clear로 지칭한다. 또한 이런 세분화된 방법론도 프로젝트 초기에 그 프로젝트의 상황에 맞게 변경되어야 한다고 본다. 이 점이 다른 Agile 방법론들과의 큰 차이이다. 따라서 그는 XP나 Scrum 등의 방법론 주창자들에 비해서 Methodology Shaping을 중시한다.

Agile 방법론에 대한 설명이나 입장을 밝힌 Agile Software Development라는 책의 연장선에서 Crystal Clear라는 구체적인 방법론에 대한 기술서이다. 그러나 그 양식은 기존의 방법론의 표현 방식과 많이 다른데 이는 절차보다는 특질(Properties)를 중시하는 Cockburn의 생각의 반영이다.

Crystal 방법론 집합은 7개의 특질을 이해하는 것이 중요하며, 이 중 마지막 특질(Technical Environment with Automated Tests, Configuration Management, and Frequent Integration)은 The Pragamtic Programmer에서 더 자세하게 설명되고 있다.

Crystal Clear에서는 Frequent Delivery, Reflective Improvement, Osmotic Communication 특질은 항상 적용해야 하며 나머지는 선택사항이다. 실제로 방법론의 기본 줄기는 이 세가지 특질을 충족시키는데 충실하다. Frequent Delivery를 가능하게 하기 위해서 다양한 규모의 사이클로 프로젝트가 반복적으로 계획되며, 각 사이클의 마지막에는 Reflective Improvement를 가능하게 하는 활동들이 있다. 그리고 문서나 보고 또는 회의에 의한 의사소통 보다는 비공적식적인 일상적인 의사소통을 중시한다.

보통의 방법론 책자와 비교해서는 괜찮지만 전체적으로 약간은 지루한 부분이 존재한다. 산출물에 대해서 다루는 부분(Examined - The Work Products)과 사례 부분(Tested - A Case Study)이 이에 해당한다.

따라서 처음부터 책 전체를 읽기 보다는 2장 Applied(The Seven Properties)과 3장 In Practice(Strategies and Techniques)를 우선 읽고 필요에 따라서 다른 부분을 읽는 것이 효과적일 것으로 판단된다.


5.  Agile Project Management

Jim Highsmith는 프로젝트 관리라는 측면에서 Agile 방법론에 대해 서술했다. 그의 말대로 현장에서 좋은 프로젝트 관리자란 야근을 하는 개발자를 위해서 피자를 준비하는 사람일 것이다. 프로젝트 관리자가 그 이상을 하려고 한다면 무가치한 짐을 개발자에게 지운다고 생각하는 것이 일반적인 개발자들의 생각이다. Jim Highsmith는 이런 수동적인 혹은 부정적인 의미로 다가오는 프로젝트 관리를 Agile이라는 측면에서 좀더 긍정적이고 능동적인 측면으로 변화시키려 한다.

우선 고객과 제품(Customers and Products), 그리고 리더십과 협업(Leadership-Collaboration)의 측면에서 Agile 방법론의 원칙을 제시한다. 그리고 개발 단계(Phase)를 Envision, Speculate, Explore, Adapt and Close로 구분하고 각 단계에서 적용할 수 있는 기법(Practices)들에 대해서 설명한다.

다른 Agile 방법론에 비교할 때 프로젝트 관리에 대한 초점을 맞추는 특징과 함께, 가치를 창출하기 위해서 어떤 제품을 탐색하고 개발할 것인가와 관련한 부분에 많은 초점을 두고 있기도 하다.


6. 정리하며

3권의 책은 저자의 특징에 따라 Agile 방법론을 바라보는 상이한 관점에서 쓰여졌다. Kent Beck은 프로그램머의 입장에서, Alistair Cockburn은 방법론 전문가의 입장에서, Jim Highsmith는 비즈니스 컨설턴트의 입장에서 Agile 방법론에 접근했다. 앞으로는 Agile 방법론을 현장에서 적용하면서 입증한 혹은 발견한 내용들과 테스트와 같은 작은 영역에서의 좀더 전문적인 Agile 방법론에 대한 적용을 중심으로 논의가 이루어질 것이다.


The key factor in becoming agile is realizing that principles are most importanat than practices - that what we believe drives what we do.
                                                                                                Agile Project Management, 261p


2005-03-25

윈도우용 tail - TailMe

TailMe는 테스트 혹은 디버깅 등을 위해서 로그를 실시간으로 모니터링 할 때 사용하는 프로그램이다.

1. 설치

다음에서 Tailme 프로그램을 다운로드할 수 있다. 설치는 다운받은 TailMe.zip 압축 파일을 임의의 디렉토리에 풀기만하면 된다.


2. 시작

압축을 푼 디렉토리의 TailMe.exe 파일을 실행하면 TailMe 프로그램이 시작한다.


3. 설정

TailMe에서는 오른쪽 마우스를 클릭하면 나타나는 컨텍스트 메뉴에서 모든 설정을 수정한다. 아래에서 기본적인 설정 방법을 설명한다. 자세한 내용은 압축을 푼 디렉토리의 TailMe Help.htm 파일을 참고한다.


(1) 설정 영구 저장

수정한 설정을 영구히 저장하려면 아래와 같이 Save Settings를 체크한다. 이를 체크하지 않고 TailMe 프로그램을 재시작하면 앞에서 설정했던 모든 사항을 초기화한다. Save Settings를 체크한 상태에서 TailMe 프로그램을 종료하면 압축을 푼 디렉토리에 TailMe.ini 파일에 설정 정보를 저장한다.
 


(2) 실시간으로 로그 모니터링

실시간으로 로그를 모니터링 하려면 아래와 같이 Active를 체크한다.
 


(3) 로그 파일 추가 및 삭제

모니터링할 로그 파일은 켄텍스트 메뉴 상단의 <Add File> 메뉴를 통해서 추가한다. 둘 이상의 로그 파일을 동시에 추가하여 모니터링 할 수 있다. 모니터링하고 있는 로그 파일은 컨텍스트 메뉴 상단의 <Remove File> 메뉴를 통해서 삭제할 수 있다. 실제 파일을 삭제하는 것은 아니다. 그리고 화면에 보이는 로그 메시지만을 지우려면 <Reset File> 메뉴를 사용한다. 최근에 모니터링 했던 파일은 컨텍스트 메뉴 상단의 <Recent Files> 메뉴를 통해서 바로 열 수 있다.


(4) 모니터링 가능한 라인 수 조정

모니터링 가능한 기본 라인 수는 250 줄이다. 이 라인 수를 넘어가면 앞의 내용이 사라진다. 그래서 예외 발생 등과 같이 한번에 긴 라인의 로그가 기록되면 앞의 내용을 모니터링 할 수 없는 경우가 생긴다. 이를 방지하게 위해서 아래처럼 <Monitor Settings | Purge At Line> 메뉴를 통해서 기본 라인 수를 수정한다.
 

라인 수를 너무 크게 잡으면 컴퓨터 메모리에 부담을 주기 때문에 1,000 라인으로 설정하는 것을 권장한다.


(5) 화면 세팅

컨텍스트 메뉴의 <Visual Settings>의 하위 메뉴를 이용하여 폰트 등을 조정할 수 있다.
 


아래는 주요 메뉴와 이에 대한 설명이다.

  • Always On Top - TailMe 프로그램이 비활성화 되어 있어도 맨 앞에 나타나도록 설정
  • Show only in System Tray - Windows 오른쪽 하단에 아이콘으로 등록되도록 설정
  • Single Monitor Area - 둘 이상의 로그 파일에 기록되는 메시지를 영역 구분 없이 한 화면에서 볼 수 있도록 하는 설정
  • Font - 폰트와 폰트 크기에 대한 설정. 기본 폰트인 Small Fonts의 최대 크기는 7이다. 그래서 크기를 증가시키려면 폰트를 먼저 수정해야 한다.
  • Word Wrap - 좌우 스크롤바가 생기지 않도록 하는 설정인데 메시지의 양이 많아지만 오류가 발생한다.
  • Show File Name Image - 둘 이상의 로그 파일을 모니터링 할 때 각 영역에 해당 파일의 이름이 보이도록 하는 설정으로 Single Monitor Area를 체크한 경우에는 반영되지 않는다.