::NPTEAM:: Network Programer Team

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

온라인 게임 서버 구조 토론회

2009/01/15 14:54, 글쓴이 TTF
온라인 게임 서버 구조 토론회 발표 자료

2009/01/15 14:54 2009/01/15 14:54

맨 위로

GoogleTest 기본 샘플 프로젝트

2008/07/11 23:26, 글쓴이 TTF

구글에서 Test Framework인 Google Test를 공개하였다.

UnitTest++를 압도하는 획기적인 기능이 포함되어 있는 google test.

그러나 프로젝트 세팅이 어려워서 테스트 코드를 작성하기 어려우셨던 분들을 위해서,

간단한 샘플 프로젝트를 작성하여 올립니다. (비주얼스튜디오 2005)

"도구 -> 옵션 -> 프로젝트 및 솔루션 -> VC++ 디렉터리 -> 다음 파일의 디렉터리 표시 -> 포함파일" 에 아래 설정을 추가해 주세요.

$(SolutionDir)gtest-1.0.1\include


UnitTest++을 사용하셨던 분들은 아래의 명령인수를 추가하시면 입이 딱 벌어질 만한 놀라운 일이 벌어집니다.

--gtest_break_on_failure

2008/07/11 23:26 2008/07/11 23:26

맨 위로

.Net 프로그램 리버스 엔지니어링 하기


가끔 .net으로 프로그래밍된 것을 볼때가 있다.

OllyDbg로 디버깅 하려고 Dll을 열어봤는데 OTL(털썩) 이건 뭔지...

그래서 도전하기로 했다. IL Dasm 고고싱~

역시 MSDN에는 튜토리얼이 나와 있었다.

Ildasm.exe Tutorial
http://msdn.microsoft.com/en-us/library/aa309387(VS.71).aspx

MSIL Disassembler (Ildasm.exe)
http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx(영문판)
http://msdn.microsoft.com/ko-kr/library/f7dy01k1(VS.80).aspx(한글판)

방법: 어셈블리 내용 보기
http://msdn.microsoft.com/ko-kr/library/ceats605(VS.80).aspx

Reverse Engineering To Learn .NET Better
http://www.blong.com/Conferences/DCon2003/ReverseEngineering/ReverseEngineering.htm


자 그럼 ildasm.exe를 받아야 하는데... 설마 .net SDK를 다 받으란 말인가?

결국 MS에서 다운 받았다.(354MB)
http://www.microsoft.com/downloads/details.aspx?FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec&displaylang=en

다운의 압박이 끝나고 설치를 완료하니 ILDASM.exe를 찾을 수 있었다. ㅎㅎ
118kb짜리 다운로드 받기 위해서 무려 354MB를 다운 받을 수 밖에 없었다.(T_T MS의 압박)

ildasm.exe는 찾았는데... ilasm.exe가 없네.. 쩝..
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ilasm.exe" 여기에 있었구나!!

자 이제 다 찾았으니 리버스 엔지니어링 좀 해볼까?

xxx.dll 파일을 xxx.il로 다음과 같이 출력한다.
ildasm.exe xxx.dll /output:xxx.il

그러면 해당 폴더에 리소스 파일 + xxx.il 파일이 생기는 것을 볼 수 있다.
우리는 notepad로 xxx.il 파일을 수정한 후
 
ilasm /dll xxx.il

이렇게 Cmd 명령을 입력하면 xxx.dll이 출력된다.

흐흣. .net 리버스 엔지니어링도 결국 어려운게 아니었다. 
2008/07/08 23:33 2008/07/08 23:33

맨 위로

[TTF 동영상강좌] TDD 유닛테스트 기본 프로젝트 설정

2007/12/24 22:38, 글쓴이 TTF

UnitTest++로 TDD 기본 콘솔 프로젝트를 설정하는 방법입니다.


TDD.zip

TTF UnitTest 설정 강좌

2007/12/24 22:38 2007/12/24 22:38

맨 위로

KGC 2007 참가 후기(TDD 강의를 듣고나서...)

2007/11/12 20:09, 글쓴이 TTF


Session 3
. 게임에 적용해 보는 TDD. UnitTest

1. TDD란 무엇인가? Test Driven Development. (테스트 주도 개발)

지금까지 소개된 TDD 방법론 관련 서적에서는 JAVA 프로그래밍 환경을 위주로 TDD 개발을 소개하였다. TDD 책을 봐도 2% 부족한 느낌을 지울수 없었는데, NCSOFT 서버 프로그래머 박일님의 KGC 2007 강의를 듣고나서 "아! C++에서도 TDD를 이렇게 쓰면 되는구나!"

라는 생각이 느껴질 정도의 감동이 느껴졌다.

2. TDD의 순환 과정

위와 같이 TDD는 1. 테스트 작성 -> 2. 코드 작성 -> 3. 리펙토링의 과정을 거친다.

일반적으로 하나의 상품을 만들기 위해서 거치는 과정은 다음과 같다.
1. 기획 / 설계 -> 2. 사전 시뮬레이션 -> 3. 개발 / 출시 -> 4. 모니터링 및 사후관리, 성과측정 -> 5. 상품 출시 의 순서와 매우 유사한 점을 발견할 수 있다.

컴퓨터 산업에서도 이미 하드웨어 기반의 제품 생산 라인에서는 위와 같이 TDD와 유사한 제품 생산과정이 이미 도입되어 매우 안정적이고 빠른 제품 생산이 가능하다. 프로그래밍 개발에도 이러한 TDD를 도입하면 테스트를 통해서 안정성이 입증된 모듈을 사용함으로써 유지 / 개발에 드는 비용을 획기적으로 줄일 수 있다.


3. TDD 개발론
1. 간단하고 빠른 테스트 코드 추가
  2. 모든 테스트를 수행하고 실패한 테스트 수정 / 진행
  3. 코드 작성 / 수정
  4. 모든 테스트 통과 성공
  5. 리펙토링을 통한 코드 최적화

TDD에서는 가장 간단하고 빠르게 테스트 코드를 만드는 것이 최우선시 됩니다.
테스트 코드를 만든다는 것은 프로그래머의 사고 과정을 유도하고,
간단한 테스트 코드를 만드는 것으로 프로그래머의 사고 과정을 "simple"하게 정리해 줍니다.

인간의 사고 과정은 복잡 다단하지만, 컴퓨터가 이해하기 위해서는 단순하고 간단한 명제로 바꿔야 하는데 TDD는 이러한 사고 과정을 자연스럽게 숙달, 단련 시켜줍니다.

2번 과정에서 사고과정을 단순화시키는 과정에서 발생하는 실수나 명확하지 않는 테스트 코드만 남게 되므로 프로그래머가 실패한 테스트 코드에 대한 집중력을 높일 수 있습니다.

3번 과정에서 이러한 모든 테스트가 완성된 자체가 코드 작성 / 수정을 마치면 1차적으로 완성된 코드 샘플이 나오게 됩니다.

4번 과정에서 모든 테스트를 통과하게 되면, 이제 프로그래머가 요구사항에 맞는 코드 작성을 모두 완성하게 됩니다.

5번 과정에서는 완성된 코드에 대해서 리펙토링을 진행하게 되는데,
여기서 중요한 점!!
이미 위의 과정에서 테스트 코드가 리펙토링이 안전하게 진행되고 있는지 수시로 확인할 수 있는 안전장치로 작동하기 때문에 프로그래머는 아무런 부담없이 최적화된 코드로 리펙토링 할 수 있습니다.

TDD 개발론을 통해서 프로그래머는 사고 과정의 유연함을 얻는 동시에 안정적인 코드를 얻을 수 있습니다. (TDD를 생활화 하면 두마리 토끼도 잡을 수 있게 되는걸까요? ^^;;)

4. TDD를 활용하기 위한 방법(예제)
TDD를 C++에서 사용하기 위해서 http://unittest-cpp.sourceforge.net/ 에서 UnitTest++ 프로젝트를 다운 받을 수 있다.
비주얼 스튜디오 2003 및 2005에서 사용할 수 있도록 프로젝트 파일 2개가 포함되어 있다.

다행히 비주얼 스튜디오 Express Edition에서도 사용이 가능했다.


위와 같이 UnitTest++.vsnet2005 프로젝트를 통째로 프로젝트 추가하고,
stdafx.h에 UnitTest++.h 헤더 파일을 추가하는 경로명을 적어준다.

테스트 코드를 추가하기 위해서 TestCode 폴더를 추가하고 UnitTestCode.cpp를 추가한다.

#include "stdafx.h"
#include "Calc.h"
 
TEST(ValidCheckSucceeds)
{
  bool const b = true;
  CHECK(b);
}
 
TEST(ValidCheck할까)
{
  CCalc calc;
 
  CHECK_EQUAL( 0, calc.Add( 1, -2 ) );
}

첫번째 "ValidCheckSucceeds" 에서는 CHECK(b)의 값이 참이 되므로 성공으로 넘어간다.
두번째 "ValidCheck할까" 에서는 CCalc::Add(int a, int b)를 테스트하는데,
CHECK_EQUAL( 테스트값, 결과값 ); 테스트 값과 결과값이 같아야 한다.
그러나 여기에서는 "-1"이 정답이므로 테스트를 실패하게 된다.

테스트 코드를 수행하면 다음과 같은 결과를 볼 수 있다.




5. TDD가 만능은 아니다.(단점들)
자칫 TDD를 활용하다 보면 TDD가 전지전능한 신으로 우상화하는 경우가 있다. TDD는 어디까지나 프로그래밍 기법의 하나로 좀더 안정적이고 검증된 프로그래밍을 하기 위한 것이지, TDD 자체가 궁극의 해결책이 될 수는 없다.

한가지 예를 들자면, TDD를 이용해서 소수를 구하는 Class에 대한 테스트 코드를 작성했다고 했을 경우. 테스트 코드가 수용하는 범위의 소수에 대해서만 검증이 가능하다.

 

2      3      5      7     11     13     17     19     23     29
31     37     41     43     47     53     59     61     67     71
73     79     83     89     97    101    103    107    109    113 ...

113을 넘어서는 값부터 일치하지 않는 Class라 하더라도 TestCode를 통과했으니 "이 클래스는 안정적이다." 라고 단언할 수는 없지 않은가...

위의 예에서 유추해 보면 TDD에서 TestCode를 끊임없이 관리하고 리펙토링하지 않으면, Test Code가 제 기능을 발휘하지 못한다는 것을 알 수 있다.

프로그래머는 Test Code를 관리하는 유지 보수 비용을 감당해야 한다.


6. TDD를 통해서 얻을 수 있는 장점들
그렇다고 "TDD를 적용하는데 불편한 점이 많아서 나는 쓰지 않을 테야!" 라고 포기해 버리면,
"과일 깎아 먹기 귀찮아서 과일은 절대 안 먹을꺼야!" 이렇게 불평만 늘어놓는 사람이 되고 만다.

도대체 TDD가 어떤 장점이 있어서 TDD를 써야 한다고 외치는 것인지 살펴보도록 하자.
여기에서는 실무에서 직접 TDD를 사용하신 박일님의 자료를 인용하도록 하겠다.



1. 클라이언트 없이 실행가능 -> (엄청난 시간 단축)
2. 직접 확률을 지정하거나, 코드에서 Loop를 돌릴 수 있다. -> (확률을 고정해서 몇만번의 테스트 가능)
3. 한번 만들어진 테스트는 계속 남는다. -> (코드 재활용 및 안정성 검증 가능)
위와 같이 프로그래머에게 가장 부족한 시간을 확보할 수 있게 해주고,
정말 귀찮은 반복 작업에서 해방시켜주며,
똑같은 테스트를 다시 할 수 있다는 장점이 있다.


이 정도면 대한 독립 만세! 만세 삼창을 해야 하는것 아닌가!!

7. TDD를 다른 사람에게 권유하기 어려운 점
TDD는 장점과 단점을 모두 가지고 있다.
특히나 타인에게 권유하기 어려운 점은 이미 코드짜느라 힘들어 죽겠는데,
뭐하러 힘들게 테스트 코드까지 짊어지고 나아가냐! 라는 반감을 사게 된다.

이럴 때에는 반복작업으로 지친 동료의 업무를 분석해서 TDD를 이용해서 간단하게 검증하는 기반을 만들어주고, "이거 사용하면 편한데..." 라면서 슬쩍 건네주는 센스가 필요하다.
물론 박일님이 저렇게 말씀하신건 아니지만, 저런식으로 타인이 편리하다고 느끼기 전에는 TDD를 도입하는데 많은 어려움이 있다는 것을 반증하는 말씀이 아니었나 싶다.


MFC GUI 환경으로 UnitTest 하기 : 쑥갓님의 UnitTest++용 GuiRunner 0.20업데이트
2007/11/12 20:09 2007/11/12 20:09

맨 위로

[UNIT-TEST] TDD를 위한 유닛 테스트

2007/11/11 23:18, 글쓴이 TTF


TDD를 위한 유닛테스트용 프로젝트



UnitTesting.zip

유닛테스트 샘플 프로젝트

2007/11/11 23:18 2007/11/11 23:18

맨 위로

[강좌] TTF ollydbg 강좌 - 메모리 브레이크 포인트 사용 방법


간단하게 MFC로 욕설 검색 프로그램을 제작해서

메모리 브레이크 포인트와 하드웨어 브레이크 포인트를 사용하는 방법을 알려주는 강좌

아래는 확인 버튼에 해당하는 소스 코드
void CMyDlg::OnOK()
{
  UpdateData( true );
 
  CString strBadWord;
 
  strBadWord += "씨발 ";
  strBadWord += "개놈 ";
  strBadWord += "개새끼 ";
  strBadWord += "새끼 ";
  strBadWord += "지랄 ";
  strBadWord += "니미럴 ";
  strBadWord += "씹새 ";
 
  if( strBadWord.Find( m_strSearch ) != -1 )
  {
    MessageBox( "욕 있음" );
  }
  else
  {
    MessageBox( "욕 없음" );
  }
}
 
2007/01/23 14:59 2007/01/23 14:59

맨 위로

DirectX와 CDX를 이용한 장기알 움직임 처리 프로젝트

DirectX와 CDX를 이용한 장기알 움직임 처리 프로젝트
2006/10/09 09:12 2006/10/09 09:12

맨 위로

DirectX와 CDX를 이용한 장기 기본 프로젝트

Direct2D 와 CDX를 이용하여 기본적인 장기 움직임을 구현한 프로젝트



2006/10/08 22:51 2006/10/08 22:51

맨 위로

[PPT] DirectX 파워 포인트 자료

1. DirectX 프로그래밍에 대한 전반적인 설명.

2. CDX 클래스에 대한 설명과 간단한 사용방법.

3. DirectX 프로그래밍을 하기 위한 환경설정, 설치과정, 기본 프로젝트 만들기.

강의 순서는 1, 2, 3 순서...

2006/10/04 14:05 2006/10/04 14:05

맨 위로

ATL/WTL 기반의 CMainFrame 기본 골격 프로젝트

ATL/WTL 기반의 CMainFrame 기본 골격 프로젝트
2006/10/04 14:01 2006/10/04 14:01

맨 위로

[강좌] TTF ollydbg 강좌 - 비주얼베이직 대상 프로그램을 PointA를 이용해서 쉽게 접근하는 강좌

[강좌] TTF ollydbg 강좌 - 비주얼베이직 대상 프로그램을 PointA를 이용해서 쉽게 접근하는 강좌

이 자료도 2005년 5월-8월 사이에 만든 강좌입니다.

이 자료는 POINTA 를 지원하는 플러그인을 설치하고 버튼등을 누르면,
해당 루틴의 시작 주소를 알아내서 좀더 쉽게 크랙미를 풀 수 있도록 도와 줍니다.

추신 : 강좌를 올리다보니 비주얼 베이직 관련 자료가 많네요.
        인엑스존 활동을 할때 비주얼 베이직 크랙미가 많이 나와서 대상 프로그램이
        비주얼 베이직으로 만든 것 밖에 없기도 했지만,
        제가 강좌를 만들 당시만 하더라도 비주얼 베이직 관련 API를 설명한 자료가 없어서
        비주얼 베이직을 중점적으로 다루었었습니다.
2006/08/13 14:05 2006/08/13 14:05

맨 위로

[강좌] TTF ollydbg 강좌 - www.inxzone.com에서 박혜성님이 올려주신 크랙미 강좌

[강좌] TTF ollydbg 강좌 - www.inxzone.com에서 박혜성님이 올려주신 크랙미 푸는 강좌입니다

이 자료도 2005년 5월쯤에 제작한 강좌입니다.

비주얼베이직으로 되어있고 스크롤바를 이용한 크랙미였습니다.

강좌만 있고 대상 크랙미가 없습니다.
2006/08/13 13:55 2006/08/13 13:55

맨 위로

[강좌] TTF ollydbg 강좌 - www.inxzone.com에서 이벤트로 했던 러빙유님이 올려주신 크랙미 강좌

[강좌] TTF ollydbg 강좌 - www.inxzone.com에서 이벤트로 했던 러빙유님이 올려주신 크랙미 강좌입니다.

이 자료도 2005년 5월쯤에 제작한 것이고,

크랙미 제작하신 러빙유님은 지금 군 복무중이랍니다.

예전 자료라서 역시 크랙미 프로그램은 없고 강좌만 남아 있었네요.

비주얼베이직으로 제작한 크랙미 입니다.
2006/08/13 13:52 2006/08/13 13:52

맨 위로

[강좌] TTF ollydbg 강좌 - www.inxzone.com에 올라온 커플이님의 크랙미 강좌

[강좌] TTF ollydbg 강좌 - www.inxzone.com에 올라온 커플이님의 크랙미 강좌

예전 inxzone.com 활동 시절에 있었던 키젠이라 지금은 구할수가 없네요..

강좌만 남아 있었는데 그래도 올려봅니다. ㅎㅎ

대상 크랙미는 비주얼베이직으로 만든 것입니다.
2006/08/13 13:49 2006/08/13 13:49

맨 위로