2005년 5월 3일 화요일

[Tech]Unix Network Programming(By Steven) 공부하기

Unix Network Programming(By Steven) 책을 보고 있으니,
어느 Kernel Hacker가 이렇게 말한다.
"TCP Stack을 보려면 Kernel부터 공부해. 뭘 이런 책을 보고 그래.
 TCP, Socket structure가 어떻게 되있는 지 알아야지."


봐서 나쁠건 없지만, 내게 당장 볼 시간은 없을 것 같다.
TCP 공부하는 cost보다 지저분하고 복잡하기 그지없다는 kernel에
파묻힐 위험이 더 크다.
특히 TCP 같은 것을 처음 공부하는 학부 2~4학년생에게는 매우 힘든 주문이다.
괜히 열어봤다가 겁만먹고 좌절하기 십상이다.
(커널을 뜯어 고쳐보기도 힘들고, 컴파일도 좀 복잡한가..
 부팅 안되거나 로딩 안되면 더 낭패)


Socket, File Descriptor를 왜 만들었는 지도 생각해보면
그런 복잡한 일들을 kernel에서 맡기고 쉽게 보기 위함이다.


저자가 이런 책을 쓴 이유도 수많은 좋류의 Unix Kernel들을 열어보거나
직접 써보고 Trial and Error하는 삽질없이도 빠르게 배우라고 만든 것이다.
이런 책이 없었더라면 이 정도 수준의 내용을 얻기위해
Kernel을 몇 년간 몇 대의 컴퓨터에서 돌려보고
RFC든 뉴스그룹이든 수만개의 글을 읽어야 한다.


그리고 결정적으로 세상 어떤 kernel도 표준을 완벽하게 구현하지 못하고 있고,
Kernel마다 구현이 다르기 때문에 한, 두가지 implementation에 의존하는 코드를 짜면
이식성이 떨어지고 위험하다.


학부 수업시간에 Assembly도 조금 배우기는 하지만
그 후 언어들과 비교해보고 얼마나 primitive한지 느껴보기 위함이 더 크다.
실제로 assembly 몰라도 할 수 있는 일은 충분히 많고
배워야할 다른 것들도 많다.


"영어를 공부하려면 라틴어를 먼저 배워라."
"영문법를 배우기 전에 변형생성 문법을 먼저 배우면 좋다."라는 말과 똑같다.


나중에 Kernel Hacker나 Network Device Driver쪽 일을 하게 된다면 그 때 봐야겠다.
학교 다닐 때는 그런 것을 해야만 Advanced한 개발자라고 생각했는 데,
그것 말고도 많은 길들과 많은 툴들, 많은 선택이 있다.


----------
UNP가 나오기 전에 TCP를 공부한 선배 해커의 조언이라서.
그는 자신이 공부할 때 이런 책들이 없어서 삽질을 참 많이 한 것 같다.
이 분은 Kernel 뜯고, Boot strapping 과정 개입 같은 걸 좋아하시는 데.


나는 Design Pattern, Generic Programming(Template) 같은 게 더 맘에든다.
반대로 그분은 design pattern이나 generic programming은 별 관심 없으시다.
Function call이나 inheritance, Component를 쓰면 performance가 떨어진다나..
(원래 performance를 고려하고 만든게 아니니까.)

댓글 없음:

댓글 쓰기