네트워크 공부를 시작하게 된 계기

네트워크 공부를 시작한 계기는 생각보다 단순했다. 소프트웨어 마에스트로 과정에서, 우리는 화면공유 기반의 화상채팅 웹 어플리케이션을 제작하였는데, 아무래도 RTC 기반의 작업을 하다보니 네트워크가 필수적이였다. 문제는 내가 네트워크에 대한 지식이 너무 부족하여 항상 아쉬움을 느끼게 되었고, 네트워크 공부를 시작하게 되었다.

사실 9월달부터 시작하려고 크로우즈 교수님이 집필하신 네트워크 하향식 접근 책을 구매했지만, 너무 바빠 볼 시간이 없었고 11월 중순부터 제대로 시작하게 되었다.

image

11월에 Network 공부의 시작을 알리는 Commit

네트워크 스터디

원래 혼자 천천히 책을 읽으며 정리를 해나가는 방식으로 네트워크 공부를 하려 했지만, 프로젝트를 진행하다 보니 책에 나오는 정보들이 전부가 아님을 깨달았다.

프로젝트를 진행하고 면접을 보다보니 , TLS, Session, HTTP, DNS, JWT 등이 언급 되었지만, 아무래도 책은 OSI 7 Layer 관점에서 매우 세세하게 접근을 하기에 책만 읽고 네트워크 공부를 마쳤다고 하기에는 아쉬움이 들었다. 그래서 네트워크 스터디를 진행하며 네트워크 관련 지식을 전체적으로 쌓는것으로 방향성을 다시 잡게 되었다.

구체적으로는, 매일 오후 23시에 디스코드에서 모여 각자 맡은 네트워크 파트에 대한 공부를 진행하고, 마치게 되면 테크톡처럼 발표를 하는 방식으로 진행을 하였다. 첫 일주일은 꽤나 진행이 잘 되었지만, 아무래도 진행했던 시점인 11월 중순에 소프트웨어 마에스트로 최종 발표및 나의 면접과 채용프로세스 등 일정이 겹쳐 제대로 하지 못했다. 스터디 주최자로서 제대로 방향성을 잡지 못해 아쉬움이 남는다.

그렇게 다들 스터디에대한 의욕도가 떨어지고, 자연스럽게 스터디는 포기하게 되었다. 그래서 나라도 공부를 해야겠다 싶어 혼자서 진행을 하게 되었다.

네트워크 공부

나의 스터디 목표는 네트워크 관련 어떠한 인터뷰 질문을 받아도 정말 잘 대답할 수 있을정도로 말을 할 수 있을만큼 지식을 쌓는 것이였다. 그렇게 하기 위해서는 단순히 인터뷰 질문을 달달 외우기보다는, 정말 관련 이론에 대하여 공식 문서를 읽어보며 학습을 하는 방향으로 공부를 하였다.

예를들어, DNS를 학습하자고 마음 먹었다면, 단순히 DNS query의 순서를 학습하기 보다는, 실제로 우리가 AWS에서 애먹었던 A Record, CName 등도 같이 정리를 하고, 현재 우리가 사용하는 DNS에서는 GSLB 등으로 load balancing을 한다는 것 까지 정리를 해보았다.

그리고 나의 학습에는 특이한 점이 하나 존재한다. 다이어그램을 왠만하면 내가 그린다는 것이다. 다이어그램을 그리면서 학습을 하다보면, 내가 학습한 내용을 정리할 수 있고, 또한 내가 학습한 내용을 다른 사람에게 손쉽게 설명할 수 있기 때문이다.

image

image

네트워크 공부를 하며 느낀점

사실 면접을 보면서 네트워크 관련 질문을 받았을 때 힘들었던 일이 생각보다 꽤 있었다.

`google.com`을 치면 어떤 일이 일어날까요?

이런 질문을 처음 받았을 때 정말 너무 힘들었었다. 어디서부터 시작을 해야될지도 몰랐었지만, 이제는 정말 자신있게 대답을 할 수 있게 되었다.

아마 네트워크가 연결되기 위한 구성요소 -> 7 layer -> DHCP -> NAT -> ARP -> DNS -> Routing -> TLS -> GET 이런 방향으로 흘러가지 않을까…

그리고 마침 네트워크 공부를 막 마치고 다음날 면접을 보았을때 이런 질문이 나왔었다.

DHCP에 대한 설명을 해주세요 라는 질문이었다. 학습했던 대로, 4가지의 과정을 설명하고, 어떤 이유에서 broadcast를 해야되는지 등 잘 대답을 했었다.

REST api 에 대한 설명을 해주세요 라는 다음 질문에도 로이 필딩이 주장한 REST부터 시작하여 microsoft가 주장하는 REST까지 내려오며 잘 대답을 해나갔다.

이렇게 대답을 잘 했을 때 정말 내가 공부한게 헛된게 아니였고 뿌듯함을 더 느꼈던 것 같다.

단순히 인터뷰에 더 잘 대답을 할 수 있는 것 뿐만 아니라, 이제 네트워크 자체에 대해서 더 친숙해진 느낌이고, 다음에 RTC관련 문제가 생긴다면 당당하게 packet을 분석하며 어디가 문제인지 파악하고 해결할 수 있을것 만 같은 자신감이 생겼다.