입사 후 약 1년 반의 기간에 대한 스토리지 개발자로서의 회고

벌써 9월입니다. 2020년의 3분기가 끝나가는 시점입니다. 입사한 지는 1년 8개월이라는 시간이 흘렀습니다. 입사 이후에 배운 것에 대해 되돌아볼 시간이 없었던 것 같아 지난 시간을 되돌아보기 위해 이번 기회에 회고를 해보려고 합니다.

회고를 쓰기 전에 다른 분들의 회고를 많이 읽어 보았습니다. 팀 회고에 대한 내용도 있고 개인 회고에 대한 내용도 많이 있었습니다. 회고의 방법에 대한 글도 많이 있었지만 한 가지를 따르기보다는 다른 분들의 회고를 보고 느낀 점을 토대로 작성해보려고 합니다.

  • 했던 일을 돌아보고
  • 배운 것이 무엇인지
  • 약점은 무엇인지
  • 그리고 새로운 목표는 무엇인지 순서로 적어보려 합니다.

지난 업무들

입사 초반


초반에는 많은 분이 그렇겠지만 회사에 적응하는데 집중했던 것 같습니다. 스토리지 개발이라는 다소 생소한 분야다 보니 다른 분들이 사용하는 단어를 못 알아듣는 경우도 있고 아는 단어지만 뜻이 정확하게는 다른 경우도 종종 있었습니다. 스토리지 분야를 공부하면서 잘한 점이라면 별거 아니지만 모르는 단어들은 전부 적어놨습니다. 아는 단어라도 다시 적어넣고 스토리지 분야에서는 어떤 의미로 해석되는지 찾아보며 공부했습니다. Git도 혼자 코딩할 때는 편하게 쓰다가 막상 협업하면서 사용하려고 하니 모르는 부분이 생각보다 많았습니다. Git, Redmine, slack, jenkins, etc.. Git은 사용해봤지만 다른 협업 도구나 CI/CD는 사용해 본 적이 없어서 협업 도구를 사용하는데도 시간이 들었던 것 같습니다.

커널 스터디


Alt text

회사에 조금 적응을 한 후에는 커널 관련해서 공부할 기회가 있었습니다. LVM의 커널 코드에 관해서 공부한 적이 있는데 대부분의 코드가 C언어로 작성되어 있는데 대학교 2학년 때 C를 사용하고 처음 보는 거라 많은 시간이 소요되었습니다. 아마 한 달이 넘도록 시간 투자를 했던 것 같은데 공부가 많이 됐지만 명확한 결과물이 잘 나오지 않았었던 것 같습니다. 그때 잘못한 점은 코드 분석을 하다가 포인트를 잘못 잡아서 시간이 많이 소요되었는데 질문할 타이밍을 한참 지나고 나서 질문을 하여 시간이 많이 들었던 것 같습니다. 이후에는 늦지 않게 질문을 하여 정해진 시간에 일을 끝내려고 노력 중입니다.

커널 활용 및 오픈소스 스터디


Alt text

그래도 공부한 내용을 사용할 기회가 있었는데 한번은 LVM 코드를 일부를 고치는 백포팅 작업이 하나가 있었고 하나는 커널 코드는 아니지만 Gluster 3.12 에 존재하던 메모리 누수 문제가 차후 버전에서 해결된 이후 메모리 누수를 해결한 부분만 3.12버전에 적용하는 백포팅 작업이 있었습니다. 두 작업 모두 그렇게 어려운 작업은 아니었지만, 커널과 오픈소스를 수정하고 RPM을 빌드 할 수 있었던 점에서 정말 기억에 남는 작업이었습니다.

오픈소스 스터디 및 발표


Alt text

이후에 VDO라는 중복제거 오픈소스가 있는데 중복제거기술을 처음 알았을 때는 정말 신기했습니다. 한정된 공간 안에 그 이상을 넣을 수 있다는 부분이 마음에 들었습니다. 꽤 오랜 시간 동안 VDO에 대해서 관심 두고 공부하면서 처음으로 작지만 컨트리뷰트도 해봤는데 정말 값진 경험이었습니다. VDO를 공부한 것을 토대로 리눅스 커뮤니티에서 발표할 기회가 생겼습니다. 발표를 위해서 알고 있던 내용을 정리하고 자세히 모르던 부분을 다시 공부하면서 VDO에 대해 좀 더 알 수 있었습니다. 물론 발표 자체는 벌벌 떨면서 진행했지만, 어찌어찌 마무리는 할 수 있었던 것 같습니다.

Alt text

발표후기 링크 : https://blog.naver.com/gluesys/221741226486

테스트


종종 테스트할 일이 있는데 개발 관련된 테스트야 당연한 부분이고 그 외에도 성능 테스트를 할 일이 종종 있었습니다. 그 사용해본 성능 측정 툴들이 FIO, Bonnie++, vdbench, AJA 등 다양한 툴을 사용해봤는데 툴을 사용하면서 스토리지 성능의 기본적인 부분에 대해서 학습할 기회였던 것 같습니다. 디렉터리나 파일 사이즈, 블록 사이즈, IO 패턴, 네트워크, HDD 및 SSD 스펙 등 성능에 영향을 줄 수 있는 요소가 많아서 따로 학습하면 쉽지 않았을 텐데 테스트를 통해 각 부분에 대해서 하나씩 배울 좋은 기회였습니다.

기술 지원


업무 특성상 기술 지원을 떼어 놓기 어려워 종종 기술지원으로 외근 나갈 일이 있었습니다. 외근을 나가게 되면 어떤 분야든 그렇겠지만 사이트마다 환경이 달라서 종종 곤욕을 겪고는 했습니다. 어떨 때는 네트워크 복잡도가 높아서 준비한 대로 잘 처리하지 못한 적도 있고 어떨 때는 잘 모르는 리눅스 지식이 필요해서 많은 시간이 소요된 경우도 있습니다. 긴장도 많이 하고 실수도 많이 했지만, 결과적으로 기술지원을 통해서 실제 서비스 환경이나 다양하게 구성된 네트워크 환경에 대해서 실제로 접할 수 있어서 많이 배울 수 있었습니다

제품 개발


본격적으로 개발 업무를 맡으면서 전보다 협업과 코딩규약에 대해서 신경을 쓰고 있습니다. 물론 이전에도 개발 업무가 있었지만, 본격적으로 시작하니 부족한 부분이 많았던 것 같습니다. perl 언어에 대한 이해도도 생각보다 많이 부족했고 한동안 알고리즘 공부를 게을리해서 복잡도가 필요한 코딩에서는 많은 시간이 소요되었습니다. perl의 슬로건이

There’s more than one way to do it (어떤 일을 하는 데에는 하나 이상의 길이 있다.)

이다 보니 개발자마다 코드 스타일이 달라서 처음에는 고생을 좀 했던 것 같습니다. 공부하지 않았다는 변명을 장황하게…
그래도 머지리퀘스트를 올릴 때마다 동료 개발자분들의 코드리뷰를 받을 수 있어서 조금씩 꾸준히 발전할 수 있는 것 같습니다.

배운 것

아마 지난 시간 동안 했던 일들이 배운 것들이겠지만 그래도 적어볼까 합니다.
스토리지 전반의 지식(NAS, SAN, Gluster), linux에 대한 지식(CentOS, Fedora 등, 리눅스 명령어 등), 커널(LVM), 중복제거 기술(VDO), RPM을 빌드하는 방법, 레이드(HW RAID, SW RAID), 여러 가지 백업 도구(Veeam, Tina), 성능 테스트 도구(FIO, vdbench, bonnie++, AJA), 형상 관리 도구(GIT), 외에도 네트워크 전반적인 지식(10G, IB, 스위치, 허브, IP 대역 등)이나 새로운 언어(Perl, Rust) 등 다양하게 배운 것 같습니다. 물론 아직은 완벽하게 익혔다고 생각하지는 않지만, 그동안 배운 것들을 적어보니 폭넓게 일하고 배웠다는 생각이 듭니다.

약점

여러 가지 부족한 점이 있겠지만 약점은 크게 3가지 인 것 같습니다.
하나는 Perl, 하나는 네트워크에 대한 지식, 마지막으로 일의 마무리에 대한 문제입니다.

Perl


언어가 개발의 모든 것은 아니라고 생각하지만 Perl이라는 언어와 조금 더 친해질 필요가 있는 것 같습니다. 아직은 언어에 대한 이해도 부족하고 익숙하지 않다 보니 간단한 것 조차 다시 찾아보는 경우가 있었습니다. 물론 많이 사용하는 만큼 더 좋아질 거라고 생각하지만, 더 노력할 필요가 있을 것 같습니다.

네트워크 지식


제품 특성상 네트워크와 밀접한 관계에 있어서 네트워크에 대한 지식은 필수라고 생각합니다. 간혹 외근을 나가서 새로운 네트워크 구성을 만나면 당황하기도 하고 초반에 네트워크 설정 때문에 여러 가지 해프닝들이 있어서 아직 조금은 두려운 분야 이기도 해서 극복을 해야 할 필요는 있다고 느낍니다.

마무리


DM이나 LVM 스터디 그리고 커널 스터디 같이 공부할 기회가 있었던 건 정말 좋았습니다. 다만 아쉬운 점은 명확한 결과물이 있어야 하는데 그러지 못했던 게 아쉽습니다. 스터디 외에도 일을 하는 것과 일을 마무리하는데 드는 시간이 비슷하게 소요돼서 일을 확실히 마무리하는 습관이 필요할 것 같습니다.

목표

남은 2020년 및 2021년의 목표는 어떻게 해야 할지 생각을 해봤는데 하고 싶은거 배우고 싶은 거는 많은데 시간은 한정되고 어려운 것 같습니다. 당연히 약점에 대한 보완도 해야 되고 관심 있는 오픈소스들도 주의 깊게 보고 싶고 영어 공부도 해야 되고 커널에 관한 공부도 더 하고 싶습니다. C나 Rust에도 관심이 있고 더 좋은 코딩에 대한 관심도 많습니다. 솔직히 일하면서 하고 싶은 모든 걸 다하기에는 무리라고 생각합니다. 다만 올해의 목표는

  • Perl에 더 친해지고 개발을 많이 해보기
  • 스토리지 개발자로서 기반 지식 확실히 알기
  • TIL 시작하기 입니다.

TIL(Today I Learned) & 일일커밋 TIL은 이름 그대로 오늘 배운 것을 적는 겁니다. 일일 커밋도 마찬가지로 하루 커밋 한번을 하는 것을 뜻합니다. 생각하기에 따라 둘 사이에 약간의 차이는 있을 수도 있지만, 목적은 같다고 생각합니다. 둘의 목적은 모두 하루에 한 번씩 의식적으로 시간을 투자하여 공부하고 발전하기 위함입니다. 개인의 발전을 위해 TIL을 시작해보려고 하는데 처음부터 매일은 못하겠지만 조금씩 늘려보려고 합니다.

2021년의 목표는

  • Software Raid 관련 개발 및 연구
  • 알고리즘 공부
  • 개발 관련 커뮤니티 참여
  • 매일 TIL 작성하기 입니다.

2020년을 정신없이 열심히 일하면서 보낸 것 같은데 막상 소홀해졌던 부분도 많았던 것 같습니다. 회고를 하지 않았더라면 뭘 했는지 뭘 해야 하는지 뭐가 부족한지 놓치고 지나갈 뻔했다는 생각이 많이 듭니다. 또 회고를 쓰기 위해 다른 분들의 회고를 보다 보니 새로 알게 되는 것도 있고 정말 노력하시는 분들이 많다는 것을 다시 한번 깨달음과 동시에 다시금 저의 불을 지피는 소중한 시간이었습니다.


참고
https://brunch.co.kr/@taeboklee/31
https://joshua1988.github.io/web-development/translation/how-to-become-uncommonly-web-dev/#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0
https://github.com/oaksong/developers-retrospective