좋아하던 기업에서 면접을 보자고 연락이 왔다. 솔찍히 시험치면서 한수 배우자는 마음으로 지원한건데 시험이 통과되니 당황스럽기도 했다.
지난 3주간 문득 문득 불안감하더라. UX의 끝판왕이라 너무 좋아했던 기업인데, 막상 면접 기회가 생기니 걱정부터 되는건 사실이었다. 나의 부족함을 알기에 "떨어질 확률이 99%야 ㅎㅎ 혹시 1%면 좋긴하겠지만~" 이라고 이야기 하고 있지만 마음속으론 너무 합격하고 싶다. 그러다 보니 불안한건 어쩔 수 없나보다.
면접을 준비하며 내가 뭘 모르는지 깨닫는 중이다. 단순히 JS, React, Java, Spring을 넘어 "시스템 아키텍쳐"가 무엇인지 알게 되었고, "DDD"라는게 있다는 사실, "데중어설"이라는 책이 있다는 것, "운영 경험"과 트러블 슈팅 경험이 중요하다는 걸 깨닫고 있다.
공부를 위해 책을 읽고, 책에 나오는 모르는 부분들을 찾아가며 공부중이다. 그 와중에 좋은 글을 만나면 저자가 누군지 어떤 경험을 하고 어떤 책을 읽었는지 어떤 일을 하는지 구경도 하는 중이다. 그러면서 내가 여태까지 알던 세계는 좁고 아늑한 세계였다는 걸 깨닫고 있다.
면접 후기를 보면 "깊이" 있게 끝까지 물어본다고 하더라. 그 깊이라는게 어디까지인지 아직 모르지만 어떤 느낌인지는 어렴풋이 알 것 같다. "JPA를 사용해서 구현했습니다~" 에서 끝나는게 아니라 "JPA를 사용하면서 어떤 문제점을 발견했는지", 예를 들면 N+1과 같은 유명한 문제부터 내가 발견했던 @Transactional의 유무에 따라 어플리케이션의 속도가 느려지고 이를 이해하기 위해 Heap Dump를 떠서 봤더니 영속성 컨텍스트의 메모리 사이즈가 계속해서 늘어나더라는 관찰. 그리고 이 원인은 변경 감지를 위해 스냅샷을 지속해서 떠서 그렇고, 10만건의 flush를 개별로 하는것과 10만건의 변경을 한번의 flush로 마무리 짓는것의 속도 차이는 어떤지. 뭐 이런 경험들을 해봤는지 그리고 생각해봤는지, 그리고 그 과정을 통해 얻게 된 레슨런에 대해 끝까지 물어본다는 이야기인것 같다는 생각을 하는 중이다.
나는 아직 경험 자체가 부족하기에 "깊이"가 채워진 사람이긴 어렵다고 생각한다. 하지만 "깊이있는 개발자"가 되기 위해 개발을 하며 항상 "파헤치는 습관"을 갖춘다면 근시일 내에 그런 개발자가 될 수 있지 않을까?
나같은 주니어에게 "깊이"만큼 중요한게 "넓이"라고 생각한다. 사실 깊이를 챙기다보면 넓이가 챙겨지긴 하지만 "넓이"라는 키워드를 심은 의도는 따로 있다. 책을 통한 학습이 넓이를 챙기기에 적절한 방식이라는 생각을 했기 때문이다.
책을 통한 학습
책을 통한 학습은 올해 3월, BE 개발자로 전환 하며 생긴 습관이다. CS기초 공부는 책으로 해야 했고, 마침 독서를 좋아하던 사람이라 책을 통한 공부가 잘맞다는걸 알게 되었다. 이후 Spring 인강에서 지루함을 많이 느꼈고, 책으로 공부방법을 바꿨다. 그리고 서술형 코테와 면접 준비를 하며 "책을 통한 학습"을 중점적으로 하고 있다. "책을 통한 학습"에는 예제코드를 따라 치는 실용적인 서적도 물론 포함되지만 시스템 아키텍쳐에 관한 책이나 DB나 설계에 관한 책이 포함된다.
넓이에 적합하다고 생각하는 이유는 다음과 같은 경험을 하고 있기 때문이다. "가상 면접사례를 통해 배우는 대규모 시스템 설계"라는 책을 읽다 모르는 부분을 검색하다 보니 "마이크로서비스 패턴"이라는 책을 알게 되었다. 간단히 요약본을 훑어 보는 중 "데이터 중심 어플리케이션 설계"라는 책을 참고하라는 내용이 있어 데중어설도 검색해보았다. 그리고 이 3 책 모두 DDD라는 설계 패러다임(?)이 스며들어 있다보니 자연스레 사놓고 아직 못읽고 있는 "도메인 주도 개발 시작하기"라는 책도 꼭 읽어야 되겠다는 생각을 하고 있다. 깊이를 챙기는 방식과 비슷하지만 동작원리에 대한 탐구를 하는 "깊이"와 전혀 알지 못하는 키워드를 알게 되는 "넓이"라고 이야기하면 조금 정리가 되려나.
내가 하고 싶은 말은 "책을 통한 학습"을 하다보면 자연스레 "넓이"라는 부분이 채워지지 않나? 하는 것이다. 무엇을 공부해야 하는지 조차 모르는 상황이라면 책을 통해 다양한 사례와 키워드를 머릿속에 인덱싱함으로써 내가 채워야하는 깊이가 어떤것인지 알게 되는 것 같다. 그렇게 지식을 하나 하나 채워나가고 경험을 통해 지식을 체화하다보면 실력있는 개발자가 되지 않을까? 생각한다.
면접을 보기도 전부터 준비 과정을 통해 많은 성장을 이뤄서 참 감사하다. 부족한 사람이지만 많은 것을 채울 수 있었고 어떤 부분을 채워야 하는지 알게 되었다. 면접장에선 어떤 인사이트가 있을지 기대된다. 면접관분들의 소중한 1시간이 낭비되는 시간이 아닐 수 있도록 최선을 다해 임해야지.
BE 공부를 시작한 뒤로 단 한건의 회고도 발행하지 않았었네. 오히려 퍼스널한 공간에 회고하고, 정말 중요한 시기에만 이렇게 발행하는것도 괜찮은 방법인것 같다.
글 잘 봤습니다.