Media Log

윈도우즈를 잘 이해하기 위해서는 레지스트리와 친해져야 한다. - Jeffery RichterWindows via C/C++ 중에서

한 때 이 글을 읽고 레지스트리를 다루는 책을 도서관에서 몽땅 빌려서 읽었던 적이 있다. 어느 정도 숙달이 되어 레지스트리 에디터를 열면 빛의 속도로 트리를 탐색해 나갈 수 있었는데, 작년에 회사를 그만두고 2달여를 집에서 쉬다가 다시 새로운 회사에 들어갔을 때 나의 이 능력이 마법처럼 사라져 버렸다는 것을 깨닫게 되었다. 아쉬운 일이다.
저작자 표시 비영리 동일 조건 변경 허락
신고

submit
Windows 시스템 프로그래밍 - 9점
Johnson M.Hart 지음, 류광 옮김/정보문화사

오래전부터 이 책이 좋은 책이라는 이야기를 많이 들었었는데, 여태까지 못보고 있다가 이번에 4판이 번역되어 나온 김에 하나 구입해서 며칠동안 재미있게 읽었다.

저자는 이 책을 리차드 스티븐스의 유명한 고전인 APUE에 대응하는 윈도우 버전이라고 말했지만 책을 읽는 내내 자꾸 비슷한 주제를 다루는 제프리 리처의 Windows via C/C++과 비교가 되는 것은 어쩔수가 없었다.

책 중간의 동기화 오브젝트를 다루는 부분에서는 이 책이 Windows via C/C++보다 훨씬 구체적이고 많은 실례들을 들어 설명을 하고 있으며(제프리보다 재밌게 설명하는 것은 아니지만) 그 이후에 나오는 소켓과 파이프, 윈도우즈 서비스 그리고 오브젝트 보안에 대한 내용들은 Windows via C/C++에서는 다루지 않는 내용이다.
맨 마지막 챕터에서 보안 디스크립터로 ACL을 조작하는 내용은 제프리의 책뿐 아니라 다른 책들에서도 쉽게 다루지 않는 보기 힘든 내용이다. 윈도의 파일들을 리눅스 스타일의 권한(rwx--로 관리되는)처럼 관리할 수 있게 하는 재미있고 실용적인 예제와 함께해서 더 좋았다.

간간히 유닉스 시스템과 비교해서 설명해주는 저자의 코멘트들 또한 이 책의 큰 장점이다.
부록에서는 윈도 API의 유닉스와 CRT 대안 함수들을 표로서 제공해주기도 한다.

제프리리처 책의 모든 챕터를 이제는 2-3번씩 읽어서 윈도우 시스템 프로그래밍에 대해 꽤 많이 알게 되었다고 생각했는데, 이 책을 읽으면서 아직도 많은 부분을 제대로 이해 못하고 있구나 하고 느꼈다. 속상한 일이다.

책에서 옮긴 단어중 신호, 일꾼쓰레드, 스택 위넘침 등은 약간 부자연스럽긴 하지만 내용을 이해하는데는 아무런 문제가 없었다. 하지만 딱 한가지 단어가 나를 힘들게 했는데 그것은 '회부' 라는 단어였다. 가상 메모리를 커밋한다고 할 때 바로 그 커밋을 뜻하는데, 잘 매치가 되지 않아서 머리 속으로 계속 Replace를 했다.

부록에는 여러가지 I/O 방식들에 대한 성능 테스트가 나와 있다.
나는 블로그나 잡지 같은 곳에서 프로그램 성능 테스트를 해봤더니 결과가 어떻더라라고 하면 의심을 하고 잘 믿지 않는 편인데, 그것은 많은 사람들이 페이지 폴트나 캐시 등의 잡음을 고려하지 않고 테스트를 하기 때문이고, 또 그런 것들을 미리 알고 있다 하더라도 완벽히 잡음을 제거하기가 힘들기 때문이다.

책을 읽는 동안 이 책의 저자가 상당히 부지런하고 꼼꼼한 사람이라는 느낌을 받아서 벤치마크 결과에 대해 믿음도 가고 기대를 많이 하고 있었는데, 이 저자 역시 실수를 범해 누군가가 이미 벤치마크의 오류를 지적했었나보다.
아래 페이지에서 저자의 코멘트를 볼 수 있다.
http://jmhartsoftware.com/comments_updates.html
램이 1.5기가가 달린 윈도 XP가 페이지 폴트의 영향 때문에 성능이 몹시 떨어져서 나왔는데,  나중에 다시 테스트해서 올리겠다고 한다. 이런, XP하고 비스타의 I/O 성능 비교가 가장 궁금했는데.
어쨌거나 이것들을 다시 테스트 해보는 일은 엄청 귀찮을텐데 5판을 낼 때쯤에나 다시 해보지 않을까 걱정이 되기도 한다.

제프리 리처의 책이 더 이상 새 버전이 안나오는 것은 정말 아쉬운 일인데, 이 책은 5판도 6판도 계속 해서 쓰여졌으면 좋겠다.
저작자 표시 비영리 동일 조건 변경 허락
신고

submit
Windows 시스템 실행파일의 구조와 원리 - 9점
이호동 지음/한빛미디어

이 책은 PE(Portable Executable)라고도 불리우는 윈도우즈 실행 파일의 내부 구조에 대해서 다룬다.
EXE, DLL, OCX, SYS, DRV 확장자들로 된 파일들이 모두 PE파일이다.

이런 PE 파일들이 실행되는 순간에 메모리에 어떻게 매핑되고 그 자료구조는 어떻게 구성되는지가 바로 이 책이 다루는 내용이다.

이 책을 읽기 전에 제프리리처의 Windows Via C/C++

13장 윈도우 메모리의 구조
14장 가상 메모리 살펴보기
17장 메모리 맵 파일
19장 DLL의 기본
20장 DLL의 고급 기법

위 장들을 읽어보는 것이 이 책을 이해하는데 많은 도움을 줄 것이다.

나는 처음에는 헥사코드를 하나씩 따라가면서 정독해서 읽었는데, 관련 구조체들이 다 비슷비슷 하게 구성되어 있어서 중간쯤 부터는 그런 부분들을 제껴가면서 조금 더 편하게 읽을 수 있었다.

개인적으로 DLL의 깊숙한 부분에 대해서 많은 것을 얻을 수 있어서 좋았고, 또 리소스에 대해서는 거의 아는 것이 없었는데, 이 부분을 많이 다루어 주어서 특히 좋았다.

이 책의 단점을 꼽자면, 그림이나 코드들이 보기에 너무 조잡하다는 것이다.
또한 느낌표나 말줄임표를 잔뜩 붙여놓은 문장들이 곳곳에서 보이는데, 이는 잘 정제되지 못한 글의 느낌을 받게 한다. 마치 인터넷에 써서 올렸던 글을 추려서 책으로 낸듯이 말이다.
저자는 프로그래머이지 글쟁이가 아니므로 이런 것들은 출판사에서 신경을 써준다면 좋을 것이다.

이 책과 비슷한 경우로 김상형의 Windows API 정복이라는 명서가 있는데, 나는 이 책을 국내에서 출판된 가장 잘 쓰여진 프로그래밍 책이라고 생각하지만, 책 안의 그림들은 저자의 깔끔한 글솜씨에 비해 조잡하게 느껴진다.
이 책은 가남사에서 출판되었다가 한빛미디어에서 개정되었는데, 그림들이나 표는 아마도 그대로 옮긴 것 같다.

저자가 그린 그림을 출판사에 제출하면 편집없이 그대로 실는 것 같은 느낌인데, 만약 정말 그러고 있다면 출판사에서 좀 더 다듬어서 주기를 바란다.
오라일리 같은 출판사에서 발행하는 책들은 그림이나 표가 참 보기 좋게 그려져있다. 그 책을 쓰는 저자들이 모두 미술에까지 일가견이 있어서 그런 것은 분명 아닐 것이다.

다음은 내가 출판사에 바라는 점들이다.
1. 모든 코드 조각은 회색 박스로 둘러싼다.
2. 코드 폰트는 고정폭 폰트를(기왕이면 프로그래머가 많이 쓰는) 사용한다.
3. 지저분한 그림이나 표는 예쁘게 다시 그린다.

쓰다보니 단점의 내용이 길어져 버렸는데, 이 것은 이 책만이 아니라 국내에서 출판되는 모든 프로그래밍 서적에 대한 내용이다.

이런 자잘한 단점을 제외하면 이 책은 읽을만한 가치가 있는 아주 훌륭한 책이다.
이런 지식을 얻기위해서, Matt Pietrek이 쓴 다음과 같은 글 들을 눈이 빠지게 읽어야 하는데
보기만해도 질려버린다.




이미 이 책의 저자가 이 문서들을 잘 읽어본 후에 우리들에게 한글로 쉽게 설명해주고 있으니 그저 고마울 뿐이다.

이 책이 개정판이 또 나올 것 같지는 않지만 혹시 개정된다면, 위에서 말한 부분들의 교정과 함께 64bit PE나 Managed PE에 대해서도 살짝 다루어주면 좋겠다.

신고

submit
Jeffrey RichterWindows via C/C++ 예제 코드에는 공통 헤더파일이 있는데, 이 곳을 살펴보면 유용하게 사용할 수 있을만한 팁들이 많이 있다.

그 중 가장 쉽고 편하게 쓸 수 있는 기능 하나를 소개하고자 한다.

코드를 작성하다가, '이 부분은 나중에 고쳐야지' 하고 주석으로 마킹해 놓은 뒤에 나중에 잊어버리고 그대로 릴리즈했던 경험이 있는 사람이라면 이 매크로를 아주 좋아하게 될 것이다.

그의 예제코드 중 CmnHdr.h 라는 파일을 보면 다음과 같은 코드가 있다.

//// Pragma message helper macro ////
/* 
When the compiler sees a line like this:
   #pragma chMSG(Fix this later)

it outputs a line like this:

  c:\CD\CmnHdr.h(82):Fix this later

You can easily jump directly to this line and 
 examine the surrounding code.
*/

#define chSTR2(x) #x
#define chSTR(x)  chSTR2(x)
#define chMSG(desc) message(__FILE__ "(" chSTR(__LINE__) "):" #desc)


주석에 잘 쓰여 있듯이 Pragma 지시어를 이용해서 코드 어떤 부분에,
#pragma chMSG(나중에 고칠 것)
int c = a + b;
이런 식으로 주석 대신 적어두는 것이다.

이제 빌드를 하게 되면, Output 창에 이 메세지가 나타나게 되므로 실수를 줄일수 있다.
또한 에러나 경고 메세지와 같이, 더블 클릭 하게되면 해당라인으로 바로 이동하게 된다. 이것은 pragma message의 기능이 아니라, Jeffry가 매크로에 파일과 라인수를 Output창이 알아볼 수 있는 형태로 잘 정의해두었기 때문이다.

하지만 그럼에도 불구하고, 빌드 되는 동안 다른 경고들이 화면 가득 나와서 아예 경고 메세지를 쳐다보지 않는 사람들에게는 혜택이 없다.

이 지시어는 아주 유용하긴 하지만 나는 조금 더 쓰기 편하도록 다음과 같이 매크로로 고쳐서 사용하고 있다.
 
#define chSTR2(x) #x
#define chSTR(x)  chSTR2(x)

#define chMSG(desc) message(__FILE__ "(" chSTR(__LINE__) "): --------" #desc "--------")
#define chFixLater message(__FILE__ "(" chSTR(__LINE__) "): --------Fix this later--------")

#define FixLater \
    do { \
    __pragma(chFixLater) \
    __pragma (warning(push)) \
    __pragma (warning(disable:4127)) \
    } while(0) \
    __pragma (warning(pop))

#define MSG(desc) \
    do { \
    __pragma(chMSG(desc)) \
    __pragma (warning(push)) \
    __pragma (warning(disable:4127)) \
    } while(0) \
    __pragma (warning(pop))



우선은 코드 중간 중간에 #pragma를 쑤셔넣는 것이 보기가 싫었는데, 이 pragma를 매크로 안으로 넣어버렸다. MSVC에는 __pragma라는 키워드를 사용할 수 있는데, 매크로 안에서 pragma 지시어을 사용하기 위해 고안되었다.
만일 예전에 매크로를 만들다가 매크로 안에 #pragma 지시어까지 넣을 수 없을까 고민했던 적이 있던 사람에게는 아주 좋은 소식일 것이다.

또 하나는 코드 맨 끝에 세미콜론을 붙여야 컴파일 되도록 강제하였다. #pragma 지시어는 C문법이 아니므로 세미콜론을 써줄 필요가 없는데, 코드 중간 중간에 들어갈 매크로인만큼 세미콜론이 없으면 미관상에도 안좋고, 복사해서 붙여넣기 등을 할 때 들여쓰기가 깨져버리는 문제가 있다.

그래서 보통 매크로를 만들 때는 세미콜론을 꼭 붙여야 정상적으로 컴파일 되도록 작성하는 것이 좋은데, 위 매크로에서는 do while 얍삽이를 통해서 세미콜론을 강제하고 있다.
저 얍삽이는 Ace 프레임워크의 ACE_DEBUG 매크로를 살펴보다가 알게 된 것인데, 세상에는 참 얍삽하게 머리 좋은 사람들이 많구나 하는 생각을 했다.
농담이다.

do while 얍삽이를 쓰게되면, while(0) 때문에 경고가 발생하는데, 이 역시 __pragma로 감싸버려서 없앨 수 있다.

마지막으로 앞뒤로 ----를 붙여서 좀 더 눈에 띄기 쉽도록 하였다.

이제 다음과 같이 사용할 수 있다.

#pragma chMSG(블라블라블라)
int main()
{
    FixLater;
    int a;

    MSG(나중에 고칠 것);
    return 0;
}

신고
  1. Favicon of http://eslife.tistory.com BlogIcon eslife at 2010.01.14 23:28 신고 [edit/del]

    재호님 글 잘 봤습니다.
    저도 가끔씩 이용하는 방식인데.. 재호님처럼 매크로와 얍샵이 방법까지 활용할 생각은 못해 봤습니다. 좋은 방법 배우고 갑니다 ^^

    Reply
  2. Favicon of http://www.voiceportal.co.kr BlogIcon 김태정 at 2010.01.21 00:43 신고 [edit/del]

    오호~ 오랜만에 글?? ㅎㅎ

    Reply

submit
제프리 리처의 Windows via C/C++ - 10점
제프리 리처.크리스토프 나자르 지음, 김명신 옮김/한빛미디어


제프리 리처의 Windows via C/C++ 번역서가 나왔다.

김상형의 윈도우즈 API 정복이나 윤성우의 TCP/IP는 모두가 잘 알고 있는 반면에,
이 책은 -그리고 제프리 리처를 모르고 있는 사람들이 상당히 많다.

이 책은 99년도에 4판이 발행된 이 후 2008년 12월에 5판이 발행되었다.
간단히 설명하면, 이 책은 Microsoft Windows 프로그래머를 위한 최고의 책이다.

나는 이 책의 베타리딩을 했었는데, 처음 해보는 베타리딩은 꽤 괜찮은 경험이었다.
재밌는 경험을 하게 해준 역자님께 감사한다.
게다가 이런 훌륭한 책에 내 이름이 들어갔다는 것은 정말 기쁜 일이다.

제프리 리처는『Code Complete』를 10년 동안 읽고 있지만, 아직도 그 책에서 배우고 있다고 말했습니다. 나는 이 책 또한 모든 윈도우 개발자가 10년 동안 곁에 두고 살아야만 한다고 생각합니다. 점점 .NET의 시대로 접어 들어가고 있긴 하지만, 그것이 중요한 것은 아닙니다. 제프리 리처가 서문에서 말했다시피 정말 중요한 것은 윈도우 시스템 자체를 이해하는 것입니다. 관리 코드보다는 네이티브 코드가 시스템을 이해하기에 훨씬 더 적합합니다. 게다가 네이티브 애플리케이션들은 앞으로도 오랜 시간 동안 건재할 것입니다. 이 책은 제프리 리처의 네이티브 애플리케이션 개발을 다루는 마지막 에디션입니다. 이것은 이 5판이야말로 모든 윈도우 개발자에게 있어 불후의 명작이 될 것이라는 걸 의미합니다.
- 김재호 / 이스트소프트 비즈하드팀

한빛미디어에서 책을 보내줘서 오늘 받아볼 수 있었는데 생각보다 두께가 얇았다.
이 책의 원서는 하드커버에 돼지인데, 일반적으로 번역서는 원서보다 약간 더 두껍기 때문에 조금 이상했다.
책의 높이가 다른 책들보다 약간 더 길고, 여백을 줄여서 페이지 수를 상당히 아낄 수 있었던 것 같다.
어쨌거나 이 책의 두께가 원서의 부담스러운 두께보다 상당히 마음에 든다.

이 책의 정가는 42000원인데, 요즈음 오른 종이값과 다른 책들에 비하면 아주 싸게 책정되어 나왔다고 할 수 있다.
최근 나오는 신간 서적들, 800페이지 정도의 분량과 그저 그런 내용에도 40000 ~ 45000원 딱지를 달고 있는 여러 책들과 비교하면 말이다.

어째 쓴소리 하나 없이 칭찬만 하게 되는 것 같은데, 이 책은 충분히 그럴만한 가치가 있다.

오늘 강컴에 Windows API 정복을 저술한 김상형씨께서 이 책에 대한 서평을 남겨주셨는데 그 내용이 아주 재밌다.

 아직 읽어 보지 않았지만 감히 서평부터 쓴다. 왜냐하면 안 읽어 봐도 내용을 거의 다 알고 있으며 저자의 이름만으로도 품질을 능히 짐작할 수 있기 때문이다. 대부분 알고 있겠지만 이 책의 전판은 Programming Application for Microsoft WIndows이며 그야말로 전설같은 책이다. 한때 대림 출판사에서 황기태님에 의해 번역되었지만 지금은 완전히 절판되어 서점에서는 구할 방법이 없다. 하지만 아직까지 중고라도 좋으니 이 책을 구해 달라는 사람들이 얼마나 많은지 모른다. 강남 모 서점에서 재본된 책을 구할 수 있는데 그나마도 쉽게 구하기는 어렵다.
 
NT 4.0을 대상으로 하는 책이지만 지금 읽어도 실무에 적용하는데 큰 무리는 없다. 이 책을 읽어 보면 윈도우즈에 대한 저자의 내공에 감탄하게 되고 하나라도 더 상세하게 설명하기 위해 애쓰는 저자의 노력에 감동하게 된다. 멀티 스레드, 메모리, DLL, IPC 같은 고급 주제들을 아주 속속들이 정확하게 파헤쳐 놓았다. 예제들도 핵심의 정곡을 찌르는 주옥같은 명작들이다. 이 책을 읽으면 운영체제의 내부를 들여다 볼 수 있으며 여기 저기 숨어 있는 함정들도 잘 피해 다닐 수 있다.
 
이렇게 좋은 책을 구할 수 없어 못 읽는 사람들이 많고 또 시간이 많이 흐른만큼 아무래도 최신 운영체제에 대한 내용이 없어 아쉬웠었다. 그렇다고 원서를 구해 읽기는 사실 부담스럽다. 이런 차에 제프리 리처의 최신판이 번역되어 나왔으니 그 반가움을 어떻게 표현해야 할지 모르겠다. 나는 이 책을 열번 넘게 읽었는데 새로 출판된 책도 또 그만큼 읽고 싶다. 분명히 다 읽었는데도 새로 읽을 때마다 새로운 고급 기법들을 터득하게 된다.
 
이상의 서평은 사실 전편에 대한 평가이다. 새로 번역된 책은 아직 보지 못했으니 번역의 질이나 편집 상태같은 것은 평할 수 없다. 또 목차상으로 볼 때 비스타나 64비트에 대한 내용이 보이지 않아 조금 아쉽기도 하다. 조만간 이 책을 읽어 본 후 정확한 서평을 다시 올릴 것이되 아직 이 책을 모르는 사람들은 일단은 읽어 보기를 권한다.


 
이 책이 얼마나 훌륭한 책인지 알 수 있을 것이다.

나는 서평의 첫 머리에, 내용을 이미 거의 다 알고 있다고 자신있게 말하는데서 한 번 놀랐고, 말미에 이 책을 10번 넘게 읽었다는 부분에서 다시 놀랐는데, 저런 실력과 자신감을 갖게되려면 그 정도는 공부 해야 하는구나 하고 느꼈다.

자, 우리도 10번씩 읽어봅시다^^
신고
  1. Favicon of http://oseb.textcube.com BlogIcon oseb at 2008.12.18 15:48 신고 [edit/del]

    마소 사이트에 광고된 책이군요.

    오 맙소사! 4만원이 넘어갑니까? 요즘 win32 api 기초 볼려고 Windows Applications for examples 구해 놓았는데 저 책도 예제 중심인가 보군요.

    Reply
  2. Favicon of http://eslife.tistory.com BlogIcon eslife at 2008.12.23 12:53 신고 [edit/del]

    오늘 책을 받았는데 책 추천글에 있는 그 '분' 이시네요
    책 느낌이 아주 좋습니다. 추운 겨울에 열이 나게 해 줄 책일 듯 한데 벌써 부터 기대되네요

    Reply
  3. Favicon of http://archvista.net/ BlogIcon 아크몬드 at 2008.12.24 18:01 신고 [edit/del]

    오옷.. 저도 한 번 읽어 봐야 겠네요.

    Reply
  4. Favicon of http://hanb.co.kr BlogIcon 송성근 at 2009.01.07 14:12 신고 [edit/del]

    저는 본서를 기획한 한빛미디어 기획자입니다.
    먼저, 이렇게 블로그에 책을 소개해주셔서 감사합니다.
    다름이 아니라 포스팅하신 글을 보니 두 가지 사항을 궁금해하시는 것 같아서 이곳에 답변을 답니다.(^^)

    책 두께가 얇은 것은 여백을 줄인 편집에도 1차적인 원인이 있지만 또 하나, 얇은 종이를 사용한 것도 주요한 원인입니다. 보통 80g짜리 종이를 사용하는데 이 책은 70g을 사용했습니다. 책 두께를 줄이기 위해서 그런 것이고 아울러 비용절감의 효과도 있습니다.
    한편, 가격은 45,000원으로 잠정 책정했으나 비용상승으로 인한 부담을 전적으로 독자에게 지우는 것은 옳지 않다는 사장님의 의지가 있으셔서 42,000원으로 낮추었습니다.

    Reply
  5. 양재호 at 2009.10.08 10:53 신고 [edit/del]

    저는 Native Windows Programming 에 관한 지식이 없어서,

    읽으면서도 이게 뭔 뜻이지? 하고 좌절하곤 합니다.

    역시 닷넷(.Net) 같은 편한 프레임워크에 익숙해진 폐단이 아닐까 생각되네요. ㅠㅠ

    그나저나 이 책을 10번이나 읽는 다는 것은 어마어마한 내공의 소유자가 아닐까 생각합니다.

    어휴.. 한 챕터라도 제대로 읽을 수 있으면 좋겠는데 말이죠.

    Reply
  6. Favicon of http://wapi.springnote.com/pages/5625179 BlogIcon namo at 2011.01.20 08:39 신고 [edit/del]

    이 책 저도 좋아합니다... OS를 잘 알고 개발을 한다는 것은 연장 잘 아는 것을 넘어선 그 이하의 기초가 단단하다는 것을 의미하지 않을까 생각해봅니다.

    Reply
    • Favicon of http://www.benjaminlog.com BlogIcon 김재호 at 2011.01.20 10:25 신고 [edit/del]

      네. 정말 좋은 책이에요. 저는 필요할 때 마다 관련 챕터를 쭉 다시 읽어보고 있는데요, 김상형님이 말씀하신 것처럼 볼 때마다 새로운 것들을 배우네요. 정말 신기해요.

  7. 눈물나는 at 2011.08.11 14:51 신고 [edit/del]

    프로그래밍을 공부하고있는 대학생입니다.
    현재 제 수준이 More Effective 를 겨우 한번 정독한 정도의 수준인데,
    시작하기에 무리가 없는지 여쭤보고싶네요..

    염치 불구하고 답변 기다립니다 ㅠ_ㅠ

    Reply
    • Favicon of http://www.benjaminlog.com BlogIcon 김재호 at 2011.08.12 00:51 신고 [edit/del]

      More Effective C++는 이 책 하고는 거의 상관없는 내용이라 뭐라 말씀드리기가 그렇습니다. 언어 지식보다 윈도 플랫폼에 대한 이해가 더 중요합니다. 그런데 그런 것은 너무 신경쓰지 마시고 일단 그냥 도전 해보세요. 보다가 막히면 덮어놓고 다른 공부 좀 하면서 살다가 한참 후에 또 보면 이해가되고 그럴껍니다.

  8. 눈물나는 at 2011.08.12 10:45 신고 [edit/del]

    아... 그렇군요..
    멋모르고 어려운책들 사놓고 읽지못했던 기억이있어서
    두려움이 먼저 앞섰었나보네요ㅠ
    친절한 답장 감사합니다..

    제가 좋은 프로그래머가 되어 나중에 꼭, 감사인사드릴 날이 오길 바래요.
    주말엔 비가온다고 하니 날씨염두해두시고 주말보내세요.

    Reply
  9. aa at 2016.01.11 14:38 신고 [edit/del]

    서평 최고네요

    Reply

submit