본문 바로가기

일상 & 생각

입대 전 생각 정리

반응형

공군! AirForce! Yay!

최근 2달동안 미친듯이 달렸다. 개인적으로 진행하고 있는 프로젝트가 있는데, 낮에는 팀 프로젝트를 진행하고 집에 와서는 새벽까지 리눅스 커널을 보는 것을 반복했다. 그동안 느낀 것도 있고, 또 입대도 19일 남고 하니 이런저런 생각을 정리해본다.

문서화와 커밋 메시지는 정말 중요하다.

이전까지는 제대로 git을 쓰는 법을 몰랐다. 보통 1 - 3인 정도에서 소규모로 프로젝트를 진행할 때는 카톡 정도로 의사소통 해도 해결이 되었다. 심지어 문서화는 제대로 하지도 않았다. 하지만 커널을 공부하면서, 프로젝트 바깥에서 참여를 하려고 하니 눈앞이 깜깜했다. 문서도 부족하다고 느꼈다.

 

그리고 패치를 보내다 보니, 리뷰하는 사람이 쉽게 이해할 수 있도록 커밋을 잘게 쪼개고 메시지도 명확하게 남기는 게 중요했다. 프로젝트가 커질 수록 리뷰가 중요하고, '리뷰를 하기 쉽게' 메시지를 남기고 PR을 날리는 게 중요하단 걸 깨달았다.   

어떤 지식을 이해했다고 착각하는 것이 많았다

지식이 체화되는 데에는 많은 시간과 노력이 필요하다. 책의 한 부분을 공부할 때. 예를 들어 USB 드라이버 파트를 공부했을 때를 생각해보자. 책으로 공부를 했을 때 흐름을 어느 정도 파악했다고 생각했다. 그러고 몇주 후에 실제 드라이버 (usbmouse, usbkbd)를 보다보니 실제 구현 예제를 보기 전까지 내가 이해하지 못한 부분이 많았다. (그리고 지금도 이해하지 못한 부분이 있다.) 물론 무엇을 공부하든 해당되는 당연한 말이지만  고등학교 때 수학 문제 공부하듯 "예제를 풀어본다"와 같은 학습 단계를 리눅스 커널 공부에 쉽게 적용하기 어려운 게 가장 큰 문제인 것 같다.

부분적으로만 이해하는 것은 아무 쓸모가 없다

전체적인 흐름을 이해하지 못하면 잘못된 코드를 작성하게 된다. 어제 패치를 하나 작성했는데, 함수 하나만 보고 전체적인 흐름을 이해하지 못하다 보니 잘못된 코드를 만들어냈다. 결국 리뷰를 받으면서 잘못된 걸 알게 되었다. 물론 실수를 하면서 배우는 거라지만, 부분적으로만 이해한 채로 내 생각이 맞다고 판단하는 습관은 정말 버려야겠다.

나의 목표는 무엇인가?

나에게도 리눅스 커널을 공부하게 된 계기가 있다. 어렸을 때 (중2병이 도져서..ㅋㅋㅋ) 나는 해커가 되는 게 멋지다고 생각했고, 해킹 중에서도 리눅스 커널의 취약점을 공격해서 권한을 얻는 게 제일 멋지다고 생각했다. 그리고 또 나만의 운영체제를 만드는 것도 되게 재미있고 뿌듯하다고 생각했다.

 

그래서 당시에 리눅스 커널 책과 운영체제 책을 몇 권 사서 공부했던 기억이 난다. 물론 당시에는 제대로 이해하지 못한 부분이 많았다. 그런데 공부하다 보니 해킹 자체보다도 운영체제가 되게 복잡하면서도 체계적으로 구성된 것이, 기술의 정수를 보는 것 같았다. 그래서 운영체제 자체에도 흥미를 갖게 되었다. 물론 이때는 손을 놓았고, 최근에 다시 시작을 했다.

 

리눅스 커널을 공부하다 보면 처음에는 공통적인 부분을 먼저 다루게 된다. 프로세스란 어떤 자료구조로 표현되며 관리되는지, 페이징을 통해 메모리에 어떻게 접근하고 관리하는지, 파일시스템에 접근하기 위한 추상계층인 VFS, 인터럽트란 무엇이며 인터럽트와 후반부 처리를 왜 나누었는지, .... 등등등 전체적인 기능이 대략적으로 어떻게 흐르는지에 대한 내용을 배운다.

 

그런데 공부하다 보니 한 가지 문제점에 부딪혔다. 커널은 그저 흥미만으로 공부하기엔 너무 복잡하다. 리눅스 커널은 너무 복잡해졌기 때문에 한 사람이 모든 파트를 100%를 이해하는 사람은 없다. 다만 각자 자신이 파는 서브시스템을 이해하고 있을 뿐이다. 따라서 공부를 계속하려면 서브시스템을 정해야 한다.

 

그렇다면 어떤 서브시스템을 공부해야 하나? 난 단순히 커널을 공부하는 것을 넘어서, 내가 개발에 참여해서 기여를 하고 싶었다. 고민하다 보니 하지만 나의 목표는 무엇인가? 라는 생각이 머릿속을 떠나지 않는다. 나의 목표와 동기를 제대로 잡고 가야 할 것 같다.

 

그리고 생각이 꼬리에 꼬리를 물다보니 나는 왜 개발을 하는가, 내가 개발자로 하고 싶은 것이 무엇인가라는 근본적인 질문에 다다랐다. 숨이 막혔다. 이제는 단순히 흥미 위주로 공부하던 것을 떠나서 나도 개발자로서 어떤 가치를 만들어내야 하지 않을까 하는 생각이 들었다. 이 질문에 대한 답은 좀 더 생각해봐야 할 것 같다.

좀 더 여유를 갖자

너무 조급할 필요는 없는 것 같다. 우선 군대를 가기까지 남은 시간이 별로 없다. 그리고 남은 3주동안 공부한다고 의미있는 결과를 내기는 어렵다고 생각한다. 차라리 군대에 가서, 군대라는 체계에 적응하고 다시 공부 계획을 세우고 습관을 만드는 것이 좋겠다. 그 전까지는 이제 좀 마음을 놓고 인생을 좀 즐기고, 팀 프로젝트 정도만 마무리 하고 가려고 한다.

'일상 & 생각' 카테고리의 다른 글

성장하고 싶다.  (1) 2021.10.28
공군 전자계산 훈련소 + 특기학교 후기  (8) 2021.08.16
입대 전 생각 정리  (7) 2021.05.26