부서에 배치 된 후 접하게 된 것들은 아래와 같다.
Linux
Perforce
QuickBuild
Jenkins
Vagrant
Docker
Odin
ReviewBoard
Protex
Shell Script
Python
Gradle
Groovy
Webkit
Chromium
리눅스를 임베디드 수업 때 몇 번 사용했던 경험 외에는 정말 기초적인 명령어 밖에 몰랐으나, 이제는 아주 초보적인 수준은 넘은 것 같다. 왜 개발에 리눅스가 편리한지 설명할 수는 없지만 새삼 느끼게 된다. 리눅스를 사용하면서 익숙했던 윈도우의 GUI가 이제는 불편해지면서, CUI 환경과 vi editor의 편리함을 느끼게 됐다. 마우스를 사용하기 위해 키보드에서 손을 떼야하는 것이 줄어들었다는 것이 가장 큰 차이인데, 이것이 정말 큰 차이라고 생각한다. 큰 프로젝트를 관리하는 것이 아니라 파일 몇 개를 수정하면서 가볍고, 키보드만으로 모든 것을 해결하는 vi editor가 처음에는 익숙하지 않아 불편했지만 이제는 다른 IDE 보다 신속하고, 효율적으로 작업할 수 있어 정말 좋다.
버전 관리 시스템의 경우 대학교 4학년 2학기에 동아리 세미나로 git를 준비했었는데, 회사에 와서는 분산형 버전 관리가 아닌 중앙집중방식의 Perforce를 사용하게 됐다. 처음에는 git에 대해 알고 있던 얄팍한 지식 때문에 조금 헷갈린 점도 많았다. 그리고 막연히 분산(Distributed)이라는 단어가 무조건 더 좋다는 개인적인 선입견도 있었기에 Perforce를 사용하는 것이 많이 불편했다. 지금은 중앙집중이든, 분산형이든 장단점이 있고 버전 관리 시스템이라는 것 자체가 대단한 것임을 느끼며, 편리한 것임을 인지하게 됐고 어느 정도 익숙해졌다.
ReviewBoard를 통해서는 개발자간의 code review를 통해 프로젝트의 source를 양질로 관리하고, 개발자간 의사소통을 하는 방법을 어렴풋이 익힐 수 있었다.
QuickBuild를 통해 Perforce의 shelve 기능을 이용하여 local에서 build하는 것이 아니라 좋은 하드웨어를 가진 서버에서 build를 시키고, submit 전에 미리 build test를 할 수 있게 됐다. 그리고 Jenkins라는 CI(Continuous Integration) tool을 이용하면서, 프로젝트를 지속적으로 자동으로 build하며 안정성을 높일 수 있는 지속적 통합(?) 툴을 알게 됐다. 직접 내 컴퓨터를 jenkins의 node로 설정하고, job을 생성하여 build를 해보기도하고, 이 가운데 vagrant를 통해 가상 머신을 node로 이용해보기도 하고, docker를 이용해보기도 했다.
Shell script, python을 접하면서 기존의 compiler를 이용한 언어가 아닌 interpreter를 이용한 언어를 이용하게 됐는데, 내가 알고 있던 c, c++, java와는 전혀 다른 매력을 발견할 수 있었다. 손쉽게, 즉각적으로 debugging을 해볼 수 있고, 특히나 반복적인 작업의 자동화 tool을 제작하는 것에는 필수적인 것이었다. 내가 좀 더 학교를 다니는 동안 컴덕후였더라면 이런 강력한 기능들을 미리 체험하고 좀 더 성장하지 않았을까하는 아쉬움이 있다.
그리고 Gradle build system을 이용하면서 단 한 번의 build를 통해 해상도, 모델별로 여러 apk를 추출하고, task를 통해 build를 관리하는 방법도 맛볼 수 있었고, gradle script 수정을 하면서 Groovy도 살짝 맛볼 수 있었다. 여전히 Gradle에서 task의 initialization, configuration, execution 단계와 dependencies를 설정하는 것은 굉장히 까다롭고 짜증난다. 망할 up-to-date.
chromium과 webkit 이는, 앞으로 계속 공부해야 할 것들이다.
참 갈 길이 멀고, 모르는 것이 너무 많다. 그래서 막막하고 평생해도 끝나지 않는 학습 요구에 부담스럽기도 하지만, 그래서 좋다. 공부할 것이 끝이 없다.