군 복무로 보내는 1년 6개월이라는 시간이 너무 아까웠습니다. 끊임없이 공부하고 성장해야 할 시기에 군 복무로 인해 성장이 멈춰버렸다고 느껴졌기 때문입니다. 아마도 제가 군대를 상당히 늦게 간 편이기에 이미 전역한 후 열심히 성장 중인 친구들이 많아 이런 느낌을 더 강하게 받았던 것 같습니다. 그래서 저는 군대에서의 1년 6개월을 절대로 낭비하지 않기로 마음먹었습니다. 입대하기 전부터 많은 준비를 해왔고, 입대 후에도 계획한 것처럼 다양한 시도를 했었습니다.
이 글은 제 1년 6개월간의 공부 경험을 정리한 글입니다. 이 글을 통해 제가 공부했던 내용들을 기록하는 동시에, 이 글이 저보다 늦게 군대를 가는 친구들에게 조금이나마 도움이 되었으면 좋겠습니다.
서버 구축
저는 어떤 분야라도 공부를 하기 위해서는 반드시 실제로 그것을 해 봐야 한다고 생각합니다. 피아노를 배우는 사람이 악보나 교과서만 보고 실제로는 피아노를 치지 않으면 실력이 늘지 않듯이, 프로그래밍을 하는 사람 역시 어플리케이션이 되었든 인프라가 되었든 실제로 해 보지 않으면 실력이 늘지 않습니다. 그래서 저는 군대에서 실제로 서비스를 개발하고 배포할 수 있는 환경을 구축하는 것을 매우 중요한 목표로 설정했습니다.
그렇기 때문에 입대 전 사전 준비로 집에 서버를 구축했습니다. 24시간 가용한 서버가 있는 것과 없는 것, 예를 들어 구름 IDE 등을 사용하는 것은 차이가 큽니다. 앞서 언급한 것처럼 서버에 개발 환경을 구성해두면 어디서든 접속해서 개발할 수 있습니다. 저 역시 주로 VSCode로 SSH extension를 이용, 서버에 접속하여 개발했습니다. 그뿐만 아니라 개발자에게 서버란 안정적으로 파일을 저장할 수 있는 장소가 되기도 하고, 구현한 서비스를 비용 부담 없이 올릴 수 있는 테스트 베드가 되기도 합니다.
- 하드웨어는 이 글에서 확인할 수 있습니다.
- AWS Route53을 통해 도메인이 연결되어 있습니다.
- 이 도메인에는 직접 구현한 DDNS가 설치되어 IP 변경에 대응할 수 있습니다.
- 다양한 서비스를 올릴 수 있도록 K3S가 설치되어 있습니다.
- 다른 머신에 접속할 수 있도록 이 서버에 Guacamole를 올렸습니다.
- 혹시 모를 상황을 대비해 Code Server를 kubernetes위에 올렸습니다.
특히 군대의 사이버지식정보방에서는 마음대로 프로그램을 설치할 수도 없고 80이나 443을 제외한 포트 역시 대부분 막혀 있습니다. 그러므로 미리 그러한 상황에서도 접속할 수 있는 개발 환경을 잘 구축해두는 것이 중요합니다.
개발 환경 구축
그리고 입대 후 EC2의 Windows Server Instance를 기본 개발 환경으로 선택했습니다. 입대 전에는 앞서 구축한 서버를 이용하거나 아니면 집에 맥북을 놔두고 VNC로 접속할 예정이었습니다. 그러나 다음과 같은 이유로 새로운 환경을 추가로 구축했습니다.
- 범용성을 위해 GUI가 필요했습니다. GUI가 필요한 프로그램 (e.g. 매트랩) 및 영상처리 등 GUI가 필요한 경우가 많이 있었습니다.
- VNC와 윈도우에서 사용할 수 있는 RDP를 비교해보면 RDP가 훨씬 빠릅니다.
- 굳이 Windows Server를 선택한 이유는 Windows 이미지 중 데스크톱 환경을 제공하는 이미지가 이것밖에 없었기 때문입니다.
- 이 서버를 필요할 때만 켤 수 있도록 EC2 Controller를 만들었습니다.
실제로 했던 것들
군대에서는 오랜 기간이 걸릴 수 있는 작업들을 주로 진행했습니다. 예를 들어서 제가 만들었던 프로덕트들의 전반적인 리팩토링을 진행했습니다. 사회에서는 시간이 오래 걸리기 때문에 이러한 리팩토링을 하기 어려울 수 있습니다. 그러나 군생활은 절대로 끝나지 않기 때문에 마음 편하게 리팩토링을 진행할 수 있었습니다.
그리고 군대에 와 보니 아무것도 안 하고 가만히 있는 시간이 대단히 많다는 것을 알게 되었습니다. 그래서 이러한 시간을 효율적으로 이용할 수 있는 공부 방식을 택했습니다. 특히 틈날 때마다 책을 읽었습니다.
- 아래는 군대에서 읽은 컴퓨터에 관련 서적들 중, 저에게 많은 영향을 준 책들입니다.
- Understanding the Linux Kernel (3rd)
- TCP/IP Illustrated Volume 1
- 클린 아키텍쳐
- 데이터 과학자의 사고법
- 기초전자기학(전공서적)
- 그 외에도 컴퓨터와 무관한 다양한 교양 서적들을 읽었습니다.
- 창문 넘어 도망친 100세 노인
- 시민의 교양
- 새로운 가난이 온다
- 앵무새 죽이기
- 사피엔스
- 멘큐의 경제학
- 경영학 콘서트
그리고 심심할 때마다 여러 수학, 공학적인 개념들을 다시 돌아봤습니다.
- 전자회로에서 임피던스에 기반한 회로 해석을 다시 공부해봤습니다.
- 선형대수학의 다양한 개념들에 대한 증명을 다시 진행해봤습니다.
- 통계와 확률에 대한 고찰을 통해 통계에 대한 다양한 인사이트를 얻을 수 있었습니다.
- 이전에 작성했던 베이즈 정리에 기반한 센서 알고리즘을 개발한 것도 이러한 공부의 연장이었습니다.
그리고 다양한 프로젝트들도 진행해봤습니다.
- 사설망 내부의 http 서버에 접근할 수 있는 터널링 서버를 만들어봤습니다.
- 육군창업경진대회를 나가면서 부동산 등기를 자동으로 분석해서 전세 사기를 예방하는 것을 도와주는 서비스를 개발해보기도 했습니다.
결론
사이버지식정보방에서 컴퓨터 사용 기록 로그를 뽑아서 확인해보니 950시간이 넘었습니다. 이 글의 제목인 950시간은 그런 의미를 담고 있습니다. 처음에는 다른 사람의 계정을 빌려 쓰다가 중간부터 제 계정을 만들었으니, 실제로 사용한 시간은 1000시간이 넘을 것입니다.
이로부터 저는 1년 6개월을 낭비하지 않고 계속 발전해올 수 있었다고 생각합니다. 다른 분들도 군대에서의 시간을 낭비하지 않고 효율적으로 사용할 수 있기를 바랍니다.
TMI
사이버지식정보방에서 컴퓨터 사용 로그를 가져오고 싶었습니다. 그러나 관리 프로그램에서는 텍스트를 복사할 수도 없고 별도의 export 기능도 없었습니다. 한참 삽질하다가 결국 Wireshark로 TCP stream을 떠 봤습니다. 다행인지 불행인지 데이터가 그냥 평문으로 전송되기에 데이터를 저장한 후 적당한 파싱 스크립트를 작성해서 총 사용 시간을 알아낼 수 있었습니다.