3.1 MemoryPool 클래스

간단하지 않은 내용이라 따로 포스팅하였다.

https://swjman.tistory.com/5



3.2 Crypt 클래스

데이터를 암호화해주는 클래스를 설명한 섹션이다. 나는 보안은 정말 모르는 분야라서 설명된 내용을 구글링하여 찾아보았더니, 대략 대칭키 방식의 암호화이며 키 교환 없이 사전 약속된 키를 이용하는 방식인 것으로 보인다. 나름 강점은 베이스 키를 기준으로 1바이트 암호화마다 이전 암호화 바이트 데이터를 기반으로 키를 계속 변경해준다는 점 같다. 즉,


 


위처럼 단일 키를 암호화 전체에 이용하는 것이 아닌 키 수열을 만들어가면서 암호화를 하기 때문에 해킹이 더 어려울 것 같다.



3.3 Service 클래스

윈도 프로그램은 서비스 모드라는 방식으로 구동할 수 있다. 리눅스의 데몬과 거의 같은 개념이라고 보면 된다. 내용을 살펴보았을 때는 쉽게 서비스 프로그램을 만들어 구동할 수 있기 때문에 필요할 때 찾아서 참조하면 될 것 같다.



3.4 MiniDump 클래스

게임 업계에 종사하기 전에는 상용 윈도 프로그램을 만들 일이 없어서 미니덤프의 필요성을 느끼지 못하였다. 리눅스는 보통 core dump를 남기도록 프로그램을 빌드하고, 커널의 core dump 사이즈만 잘 설정해주면 알아서 dump가 남기 때문이다. 그런데, 윈도 상에서는 core dump를 위해 특별한 후처리 작업을 해줘야 한다는 사실을 몇년 전에야 알게 되었다. 본 교재 역시 그 방법을 설명하고 있었다. 클래스로 구조화해서 이용하도록 안내하고 있는데, 차후에 그대로 활용이 가능할 것 같다.



3.5 MemoryLeak 클래스

나는 개인적으로 윈도 프로그래밍을 할 때 MFC를 쭉 써왔는데, MFC 프레임워크 내에서 디버그 모드로 실행을 하면 자동으로 memory leak 디텍팅 관련한 작업을 해준다. 그런데, MFC가 아닌 애플리케이션(서버든 클라이언트든)을 만들게 되면 수작업을 좀 해줘야 하는 것 같다. 그 수작업 방법을 교재에서 안내를 해주고 있다. 그런데, 내 경험 상 이 방법이 메모리 누수를 찾아내는 완벽한 방법은 아니었던 것 같다. 기본 중의 기본일 뿐이고, 제대로 프로파일링이나 모니터링 하기 위해서는 상용 솔루션을 도입해야 하는 것으로 알고 있다. 



3.6 ThreadSync 클래스

MemoryPool 부분과 연결된 중요한 부분이라 따로 포스팅하였다.

https://swjman.tistory.com/6



3.7 Random 클래스

난수 생성을 system API를 이용하지 않고, 직접하는 방식을 설명하고 있다. 그런데, 경험 상 직접 생성하는 방식이 속도가 더 느렸던 것으로 기억해서 교재의 코드와 rand()의 성능을 비교해 보기로 했다. 


 방법

1회 소요 시간

 CRandom::SimpleRandom()

6.5ns 

 CRandom::ComplexRandom()

31.1ns

 rand()

30.7ns


내가 주로 쓰는 노트PC에서 테스트를 해보았고, 시험 방법은 1천만회 기능 수행 후, 1회 당 소요 시간을 구하고, 10회 반복하여 평균을 구했다. 또 최적화 옵션을 끄고 빌드하였다. 최적화를 켜게 되면 테스트 코드 자체도 최적화가 되는 등 제대로 성능 측정을 할수가 없기 때문이다.

어쨌든, 실제로 교재의 랜덤 함수가 대체로 우수한 성능을 보이는 것 같다. 임의성을 크게 보장할 필요가 없다면 SimpleRandom() 함수를 이용하면 더 이득을 볼 수 있을 것 같고, ComplexRandom()도 최적화를 끈 상태에서 거의 동일한 성능인 것으로 보아, 전반적으로 rand() 보다는 속도 자체는 더 빠른 것으로 보인다. 하지만, 단위 수행 시간이 워낙 작아서 실제로 효과를 볼지는 모르겠다.

시험 코드는 아래에 접어 두었다.


Posted by JMAN