처음 F-Lab을 안 것은 대학교 4학년 때, 그러니까 2020년 쯤이었다. 그 때 당시에는 대학생이라 돈이 없었기 때문에 신청을 하지 못했었다. 하지만 SI 회사를 다니다가 퇴사를 하게 된 이후, 개발자로 어떻게 성장해야할까 라는 고민을 하다가 대학생 때 본 F-Lab이 떠올라 신청하게 되었다. 그래서 내가 직접 F-Lab 멘토링을 진행하면서 느낀점들을 최대한 자세하게 써내려갈 예정이다.
내가 어떤 점 때문에 좋았다는 것인지 멘토링을 진행하면서 얻은 것들을 상세하게 풀어보고자 한다.
6개월 중의 2개월 동안은 이론과 관련된 학습을 개인이 진행하고 일주일마다 한 번씩 Google Meet 으로 멘토분과 만나게 된다. 단순히 공부하셨나요? 네 그럼 됐습니다. 이런 방식이 아니라 공부한 내용을 토대로 꼬리에 꼬리를 무는 질문을 지속적으로 받는다. 예를 들면 이런식이다.
Mentor: HashMap 의 시간 복잡도를 아시나요?
나: O(1) 입니다.
Mentor: 항상 O(1) 인가요?
나: (...) 네 그럴 것 같습니다.
Mentor: 해시 충돌에 대해서 아시나요?
나: (몰라서 답변 못함)
제대로 된 답변을 못했기 때문에 다음 답변은 더 잘해가기 위해 자바의 소스 코드 내부를 전부 살펴보게 된다. 그리고 다음 주차 때 이 부분에 대해 다시 공부를 해가면 또 다른 꼬리 질문이 나온다.
Mentor: 해시 충돌에 대해서 아시나요?
나: 네. (이런저런 설명. 해시 충돌 때문에 최악의 상황 때 시간복잡도 O(N)이 될 수 있음을 말함)
Mentor: 그렇다면 그걸 자바에서는 해시 충돌에 대해 어떻게 대응하나요?
나: 상황에 따라 다른데 Separate Chaning 방식이나 TreeBin 방식을 사용합니다.
Mentor: TreeBin 방식은 어떨 때 사용하나요?
나: 내부의 TREEIFY_THRESHOLD 값을 넘어가면 TreeBin 방식으로 값을 찾습니다.
Mentor: HashMap 이외에 다른 Map 종류들을 알고 계신게 있으신가요?
나: ConcurrentHashMap, WeakHashMap.. 여러가지 종류가 있습니다.
이후에도 동일하다. ConcurrentHashMap 에 대해서 다시 깊숙히 물어보셨고, WeakHashMap 에 대해선 자바의 WeakReference 에 대해서 알고 계신 것이 있냐고 물어보셨다. 한 부분의 파트만 해도 이런데 진도가 나아가면 나아갈수록 공부해야할 양도 어마어마해졌다. 자바와 스프링에 대해선 어느정도 알고있지 않을까 생각했는데 하면할수록 내가 모르고 있던 것들이 너무 많았구나 라고 생각하게 되었다.
사람이라면 복습이 제대로 이루어지지 않으면 항상 잊어먹게 된다. 그래서 많은 개발자들이 다시 되돌아보기용도로 개발 블로그에 자신이 공부한 내용을 올리게 되는데 나도 처음엔 velog.io 에 단순 요약글만 올리다 깃허브 TIL로 그 장소를 옮기게 되었다.
위 사진처럼, 멘토링에서 여러가지 조언을 듣기 전 요약글은 그냥 구글에서 굴러다니는 정보를 짜집기해서 복사/붙여넣기 그 이상 그 이하도 아니었다. 그리고 내가 잊어먹은 부분을 한 눈에 보기에도 불편해 결국 작성만 하고 다시 들여다보진 않는 악순환이 반복됐다. 그냥 한컴타자연습만 하고 있었던 것이다.
몇 가지 팁을 얻은 이후에는 개발 블로그에 어떻게 글을 써야하는 지 알게 됐고 간단한 학습 정리 내용인 TIL도 많은 변화가 있었다. 최종적으로 개발 블로그와 그 날 배운 학습 내용 TIL은 분리가 된 상태로 지금도 유지하고 있다.
위 링크는 현재 나의 TIL 링크인데 잊어먹은 부분을 빠르게 재습득하기 위해 글 내에서도 목차를 클릭하면 해당 목차로 바로 이동하게 구성했다. 아마 안 되어 있는 부분도 있을텐데 그건 엄청 예전에 작성한 자료라 그렇다. 예전 부분에 대해서는 지금도 자료 추가를 하면서 TIL 리팩토링? 을 진행 중이다.
개발 블로그는 내가 생긴 의문이나 코드를 작성하면서 생기는 이슈들을 정리하는 공간으로 이용하고 있다. 어떤 파트에 의문이 생기면 해당 코드가 어떻게 되어있는지 알기 위해 코드를 직접 보거나 공식 레퍼런스를 참조해서 글을 올리고, 프로젝트를 진행하다 처음 적용해보는 부분도 그렇다.
글을 올리다보면 틀리지 않은 정보를 전달하고 최대한 간결하게 전달하기 위해 엄청나게 많은 자료를 보면서 생각보다 많은 시간을 들이게 된다. 이런 시간을 들이게 되는 과정에서 복습이 자연스럽게 진행되고 한 번 작성한 내용은 잘 잊어먹지 않게 된다.
이론을 학습하는 기간이 끝나면 협업 프로젝트를 설계 단계부터 진행하게 된다. 그런데 코드를 merge 하는 과정이 생각보다 쉽지 않다. 이 정도면 되지 않을까 했는데 코드 리뷰를 하다보면 내가 생각하지 못한 많은 부분에 결함이 있다는 것을 깨닫게 된다.
외부 API를 적용하는 과정에서 이런 것들도 있었고,
이런 것들도 있었다. 이외에도 한 번 feature 브랜치를 열고 merge 하는 과정에서 수 많은 코드 리뷰가 오고 갔다.
때로는 오고가는 메시지가 20개 정도로 그칠 때도 있었지만, 많을 때는 위 사진 처럼 거의 50~60개에 달할 때도 있었다. 이 때 코드리뷰를 하면서 얻어간 게 엄청 많았다. 사진에만 보이는 코드리뷰가 끝이 아니라 구글 밋으로도 코드 리뷰를 해주시면서 이러이러한 부분은 이런 기능의 적용을 한 번 검토해보는 것이 좋다라는 말씀도 많이 해주셔서 프로젝트를 진행하면서 많은 공부가 되었다.
기능 구현에만 중점을 둔 것이 아니라 설계부터 배포까지 전부 담당하다보니 자연스럽게 전체적인 개발 프로세스가 어떻게 돌아가야하는 지를 알게 되었다. 일례로 프로젝트를 진행하면서 서버에 올리는 빌드 과정과 배포 과정을 수동으로(FileZilla 같은 것들) 진행하면서 시간을 상당히 많이 잡아먹었다. 로컬 서버에서 클라우드 서버로 빌드된 파일을 올릴 때마다 DB 환경 문제 등 여러가지 문제가 터져 안될 때도 있었는데 로컬 서버가 아니다보니 해결하는데도 많은 시간이 걸렸다.
이렇게 어려움을 겪고 나서 GitHub Actions 를 사용해 CI/CD를 프로젝트에 적용했는데 로컬 환경에서 merge 만 해주면 자동으로 빌드를 해주고, 테스트 코드에 대한 검증과 배포를 자동으로 해준다는 것이 너무 편했다.
자동화된 빌드/배포가 개발에 있어 얼마나 시간단축을 해줄 수 있음을 몸소 체험할 수 있게 됐고 면접에서 "내가 한 프로젝트의 전체적인 그림을 칠판에 그려보라" 라는 요구를 받았을 때도 빠르게 답변이 가능했다.
F-Lab 을 하면서 좋았던 점은 슬랙 커뮤니티가 굉장히 잘 되어 있다는 점이다. 이 커뮤니티에는 모두 성장을 하고 싶어 들어온 개발자들로 가득하다. 개발 소식 채널에선 트렌디한 여러 개발 자료들이 많이 올라오고 무엇이든 물어보세요 채널에서 질문을 하면 해당 질문에 대해 본인의 경험을 토대로 성심성의껏 답변해준다. 아직까지 무엇이든 물어보세요 채널에 답변이 하나도 달리지 않은 질문글은 하나도 보지 못했다. 알고리즘 스터디도 매주 진행되고 있으며 스터디모집 채널에서 다른 개발 스터디 진행도 가능하다.
F-Lab 은 강남역에 스터디를 할 수 있는 장소가 있다. 사용료는 전부 무료이고 지문 등록만 되면 평일이든 주말이든 언제든 쓸 수 있다. 본인도 몇 번 가서 멘토링을 진행하고 있는 멘티분들끼리 공부도 하고 점심도 같이 한적도 있었다. 그리고 실내에 커피 머신이 있어 커피가 공짜다. 멘토링 기간이 끝나도 모각코 장소는 계속 이용이 가능하다.
F-Lab 멘토는 홈페이지에 나와있다시피 전부 훌륭하신 분들이다. 모두가 이름만 들어도 알 수 있는 유명한 회사에서 실무를 하고 있고 그 중에서도 면접을 통해 멘토를 선별한다. 좋았던 점은 멘토링 기간이 끝나서 완전히 관계 끝! 이게 아니라 여전히 멘토와 멘티로 남아있다는 점이었다.
나는 가끔 이렇게 개발을 진행 하면서 질문을 하기도하고, 개발 이외의 개인적인 고민이 있을 때도 슬랙으로 질문을 많이 하는 편이다. 멘토링 기간이 끝났음에도 불구하고 감사하게도 답변을 정말 잘해주신다. SI 에서 이미 길을 잃어본 적이 있는터라 잃으려 할 때마다 물어볼 사람이 있다는 것은 큰 행운이라고 생각한다.