올해 봄 집중한 부분은 크게 2가지다.
졸업 준비
취업 시도 및 준비
졸업 준비는 딱히 얘기할 거리가 없다고 생각했는데 쓰다보니 길어졌다.
우리 학교는 졸업 연구가 필수라서 연구를 진행할 연구실을 알아봤는데 평소 OS에도 관심이 있어 운영체제 중심으로 연구를 진행하는 연구실로 결국 정했다.
거기서 Persistent Memory(PM)상에 운영되는 파일 시스템의 파일 매핑 자료 구조를 뭘로 하느냐에 따라 성능이 어떻게 차이가 나는지를 분석했다. 사실 이에 관해 논의한 논문이 발표된게 이미 21년에 있었는데 (PMFS 분석 논문이라고 이후 언급하겠다), 거기에 자료구조 하나 정도 추가로 비교해보는 것이 전부였다. 그 자료구조가 바로 블로그에서도 잠깐 정리한 Cuckoo Trie다.
난감한 점이 꽤 있었는데
일단 주제가 바로 정해지질 못했다. 사수님이 바쁘기도 하고 알아보라고 했던 용어도 알고보니 용어 이름을 잘못 알려줘서 약간 헛수고 하기도 했고(...)
그래도 주제가 잡힌 후 Cuckoo Trie 논문, 그리고 PMFS 논문은 크게 이해가 어렵지 않았다.
문제는 PM 관련 라이브러리도 다루는게 쉽지 않았고, Cuckoo Trie도 기본 코드가 완성된 형태가 아니라 바로 파일 매핑에 적용하기 힘들었다. 게다가 PMFS 논문에서 활용한 코드, 그리고 파일 매핑 자료구조를 바꾸는 API 별다른 doc 없이 이해하는 것도 꽤 힘들었다. 맘 같아선 직접 물어보고 싶지만 외국 분에 이미 alumni라 실시간으로 직접 물어볼 상황이 아니었기에
그래도 박아가면서 다 해결은 가능했다. 목적은 명확했고, 이론이 크게 어려운 것도 아니고, 무엇보다 완성 후의 성능도 내가 이론 기반으로 예상한 결과랑 크게 차이가 없었기 때문.
배운 점...이라면
파일 시스템이 리눅스 상에서 어떻게 잘 돌아가냐, Cuckoo Hashing과 Trie가 뭔가, peeling hash는 뭔가, 병렬 처리 관련해서 versioning에 대해 원래 좀 알고 있었지만 좀 더 자세히 알았다 등의 이론적 성장
이론 기반으로 결과 예측하는 실력. 이전 개별 연구 때는 이게 꽤 쥐약이었는데 이번에는 자료 구조의 특성 자체가 꽤 특이해서 그런지 예측이 쉬웠던 것 같기도 하다.
구현 능력.
솔직히 PM에 대해 많이 이해하게 되었다고는 말 못하겠다. 그래도 개인적으론 2~3달만에 이정도 성과를 낸거라 만족하는 편이다.
이 강의가 뭔지는 사실 강의 계획서를 보면 바로 파악이 가능하다.
- We live in a time when CS is eating the world. As CS researchers and developers, we need to understand what CS makes possible and how we can make the world a better place with it.
- KAIST is a world-class institution with talented students. As future leaders, our graduates need to understand global standards. Studying and living in a place like this is also very stressful. Learning how to manage stress will make everyday life much easier.
- To prepare students to be global leaders with an understanding of CS impact and mental health, we invite experts from various departments at KAIST and CS alumni to give special lectures.
처음 2개의 목적을 위해, 3번째에서 말하는 것처럼 카이스트 출신자들을 초대해 세미나를 운영하는 것이다.
1번과 관련된 강의들에서 흥미로운 주제를 많이 볼 수 있었다. 가장 흥미있게 본 것은
2번은 스트레스 해소 관련 강의가 많았는데... 나에겐 크게 도움이 된 것 같진 않다. 다만 이건 진짜로 많이 몰려있거나 힘든 사람들에게는 도움이 많이 되었을 거라고 생각한다.
개인적으로, 이렇게 1, 2번 내용을 섞은 세미나도 좋지만 1번'만' 집중적으로 얘기하는 세미나도 있었으면 좋겠다.
하여간 다양한 개발자들을 만날 수 있던 것이 좋았다.
이건 사실 졸업에 필요한 건 아닌데, 한번 해보고 싶어서 이번에 지원해봤다.
이유는 내가 남에게 개념을 '쉽게' 설명하는 것을 잘 못하는 것 같아서 그렇다. 복잡하게 전문용어 들여가지고 이미 비슷한 레벨을 가진 사람들에게 설명하는 것은 어느정도 되는데... 사실 나보다 레벨이 낮은 사람을 이끌 경험도 필요하지 않겠는가? 그래서 연습 차원에서 한번 지원해 봤다.
일단 과목 자체가 난이도가 높은 내용이냐고 물으면 그건 아니었다. 이건 내 목표를 생각하면 아쉬웠는데, 쉬운걸 쉽게 설명하는 것은... 애초에 쉬우니까 난이도가 낮고 어려운걸 쉽게 설명하는 것이 어렵다고 생각했기 때문.
다만 쉬운 내용 이상으로 수강하고 있는 학생들의 레벨이 낮았기 때문에(...) 내 지원 목표를 이루는데 어느정도 도움이 되었다. 왜 레벨이 낮냐면 전산 전공이 아닌 모든 학생이 수강해야 하니까.
과목이 프로그래밍기초인데, 난 이 과목이 프로그래밍을 통해 문제 해결을 할 수 있는 '기본적인' 능력을 기르는 것이라 생각한다. 이를 위해
그리고 이 목표에 잘 부합하는 과목이라 생각한다. 여기서 2번째는 실습으로 기르는데, 내가 이를 검토하고 또 누군가 질문이 있으면 이에 대해 답변해주는 역할이었다.
엄청 어려운걸 시키는 것은 아니라 코딩을 이미 하던 학생들은 술술 풀어나갔다. 내가 걱정해야 하는 학생들 그리고 내 연습 대상인 학생들은 코딩을 처음 하게 되었으면서 감을 잘 못잡는 학생들.
단순히 공부를 안해서 그런거 아니냐고 하기에는... 조금 의심 가는 학생들도 몇명 있지만 대부분 처절하게 노력하는 것이 보일정도로 애쓰는 학생들이었다.
이들의 질문은 대부분 특정 문제를 어떻게 푸는지 감이 안온다의 내용이었다. 이에 대해 대답하려면 일단 2단계로 질문하는 것이 좋다는 것을 느꼈다.
왜 질문을 했는데 역으로 질문을 하냐면, 이걸 파악해야 본인의 프로그래밍 사고력을 기르는데 도움이 되기 때문이다. 이 단계 자체를 인지시키는 것도 매우 중요하다 생각한다.
예를 들어 for문은 반복해서 특정 프로그램을 실행하기 위해 존재한다. 그리고 배열은 어떤 값들을 저장하고 재활용하는데 사용이 된다. (물론 변수도 이 기능은 가능하지만 그 저장해야 하는 값들이 매우 많은 경우 이렇게 코딩한다는 것도 알려준다.) 이 둘을 활용해 1~10번째 피보나치 수열 값을 만드는 것이 가능하다.
그러면 for문, 배열이 무슨 의미를 가지는지 먼저 물어보고 모르면 알려준다. 그리고 이를 기반으로 위 피보나치 수열 값을 만드는 것을 어떻게 할 수 있는지 다시 생각해보도록 한다. 못하면 다시 알려준다.
이를 반복하다보니 단계적으로 발전해 나가는 학생들이 몇명 있는 것에 만족했다. 물론 끝끝내 제대로 파악을 못하는 학생들도 있었지만... 아쉬운거죠 뭐.
또 위 단계에서 그냥 문제 자체를 잘못 파악하는 경우도 있고, 때문에 어떻게 풀어야하는지를 제대로 이해하지 못한 경우도 있다. 그때 문제를 제대로 이해시켜주면? 잘 푸는 학생이 있기도 했다.
덕분에 어떤 문제를 computational problem으로서 어떻게 접근해야 하는지에 대해 기초부터 생각하는 능력을 기를 수 있었던 것 같다.
그 외에도 졸업 요건 충족을 위해 교양 과목을 하나 들었는데 특별히 언급할 만한건... 언어 자체가 그 나라의 문화를 드러내는 요소 중 하나라는 것을 언어학 관점에서 체계적으로 이해할 수 있었다. 그런데 여기서 언급할 건 아닌 것 같다. 개인적으로 그게 제일 재밌었다.
이건 자세한 경험을 얘기하기엔... 면접 내용이나 코테 과정이 대부분 대외비고, 기본적인 내용은 검색하면 잘 나와서 하기 힘들 것 같다.
결론부터 말하면 AWS, 한화 (앞의 둘은 실험적 지원), 토스, 삼성, 네이버에 지원했고 전부 떨어졌다.
AWS는 사실 직무가 내가 하던 것이랑 많이 관련 없었지만, 해당 회사의 채용 절차 자체를 체험해보고 싶어서 지원했다. 그리고 겁나 피곤하다는 것을 느꼈다. 준비하려면 진짜 빡셀듯. 다음에는 진짜 관심있는 직무가 아니면 지원하지 않을 것 같다.
한화는 백엔드였는데 서류는 합격했다만, 면접은 가지 않았다. 그쪽 분야로 메리트 있는 기업이 아니라 생각했고, 딱히 후회는 안하는 상황.
토스는 직무면접탈이다. 개인적인 분석은, 백엔드 관련 이론을 잘 알고 있다는 것만으로 실제 문제 해결 능력이나 직무 어필이 잘 되지는 않는 것 같다. 뭐, 정확히는 그 이론들을 잘 조합해 백엔드서 신경쓰는 문제들을 잘 해결하지 못한다는 것이 패착으로 보인다. 면접 때 성장을 위한 노력도 인상깊게 보여주질 못한 것 같다.
네이버는 서탈이다. 일단 코테를 잘 못본것 같다. 엣지 케이스들을 생성해내는 것을 매번 신경써야할 것 같다. 자소서에 백엔드랑 연관될만한 경험을 찾아내는데 끝내 실패한 것도 문제인 것 같다. 사실 애초에 엇비슷하게나마 관련있는 경험마저도 별로 없기도 하고.
여기가 개인적으로 제일 아쉬웠다. 요약하면 이거다. 면접을 내가 진짜 못봤다.
내 나름(?)대로 준비를 했지만, 정작
회사가 원하는 인재상 및 추구하는 방향이 뭔지 전혀 파악을 못했다.
회사가 나를 뽑고 싶어할만한 메리트들을 어필할 수 있는 답변들을 전혀 못했다. (관련 노하우가 처참하게 부족)
그 와중에 내가 한 답변들은 엄청 길었다. 그 안에 면접관이 질문을 한 의도에 부합할만한 내용은 하나도 나오질 못했다.
그리고 이렇게 이상하게 면접이 꼬이다보니 자소서 안에서 면접관들이 뭔가 건져내려고 이것저것 던지기 시작하고 난 그건 그것들대로 전부 이상하게 대답했다. (위 두 요소처럼)
마지막 한마디도... 상황에 따라서는 좋을 수 있을지 모르겠지만 별로 도움이 안되었다고 생각한다.
이 때문에 아빠가 진지하게 취업 컨설팅을 받거나 면접 학원 가라고 할 정도였고 나까지 동의할 정도였다.(...)
이게 아쉬운 이유는, 주변에 저걸 교정해 주는데 도움을 수 있는 사람이 없던 것도 아니었음에도 불구하고 혼자 힘으로 여기까지 왔기에 면접도 괜찮겠지 라는 마음으로 혼자서 준비했기 때문이다. 정작 저 사람들에게 도움을 받았으면 진짜 최초합도 가능하지 않았을까 싶다(...)
- 사실 SSAFY랑 우테캠도 지원을 했는데 전자는 면접까지 갔지만 (밝힐 수 없는 이유로 인해) 탈락이 확실한 것 같고, 후자는 코딩 테스트 탈락이었다. 후자가 왜 탈락이었는지 솔직히 감이 안 오는데, 그냥 너무 노는 느낌으로 푼게 문제인것 같...다? 당시 첫 코테였기 때문.
IT 대기업에 갈지, 반도체 쪽 대기업에 갈지는 솔직히 아직 잘 모르겠다.
후자는 관련된 경험으로 어필할만한게 있고 실제로 이를 기반으로 최종 면접까지 갔었기에 잘 준비하면 다음에 될 확률이 높다.
하지만 전자, 정확히는 웹쪽 공부를 몰입해서 해본 적도 없긴 하다. 이론이나 프레임워크 공부를 야금야금 하긴 했지만, 대체로 학교 과제를 하느라, 개별연구 하느라 집중해서 공부한 적이 없다. 여기가 내 적성에 맞을지 제대로 평가해본 적이 없다는 것이다. 하지만 흥미가 매우 있는 분야다.
또 난 개인적으로 이 기간이 해보고 싶었던 개발을 마음대로 할 수 있는 절호의 기회라고 생각한다. 아이디어 생각한 것들이 몇개 있는데, 못해본 것이 많다.
그리고 몇몇 지인은, 지금이야말로 회사 다니기 전에 살면서 마지막으로 하고 싶은거 마음껏 할 수 있는 나날(...)이라고 한다.
그래서 다음 계획을 세웠다.
네이버 부스트캠프를 신청했다. 해보고 싶은 프로젝트를 여기서 배운 개념들을 활용해서 할 수 있지 않을까 싶은것도 있지만, 뭣보다 이 직무가 나랑 맞는지 몰입해서 확인해 보고 싶다. 삼성/SK 떨어질 때 보험 느낌 아니냐고 생각할 수 있고 반은 맞는 말이지만, 정말로 이 직무로 개발자가 되는 것을 고려해보기 위해서다. 그래서 방학 때 꽤 열심히 준비할 예정이고 블로그에 관련 현황을 올릴 예정이다. 근시일내에 이거랑 관련된 이벤트가 있는데 바로 토요일에 보는 코테... 이번주는 이걸 준비할 생각이다.
면접/컨설팅 학원들을 알아보고 지원하고 싶은 IT 대기업/시스템 설계 관련 대기업들에 대해 자세히 알아보고 싶다. 특히 삼성 관련 직무가 흥미도 있고, 합격 가능성도 충분히 있다. SK에서도 해당 직무를 뽑을 수도 있다. IT 대기업은 부스트캠프에서 공부하면서 그거랑 연관지어가지고 다시 한번 도전해보고 싶다. 조사한 것들은 추후 취업 대비할 때도 도움이 될 것이다.
이 때 나 자신에 대한 연대기를 한 번 정리하고, 예상되는 면접 질문들도 미리 준비, 위의 조사한 기업들의 가치관에 맞춰서 어떻게 답변할지 생각해볼거다. 외우는건 별로 안 좋고, 해당 기업의 가치관이랑 내 삶을 동기화시켜가지고 매력적인 사람으로 보이도록 연습하는게 목표다.
거기에 더불어, 어휘력 좀 기르게 책 읽는것도 습관 들이고 앞으로 이런 글 쓸 때도 슬랭보다는 교양있는(?) 단어들을 써보려고 노력 할 생각이다. 그리고 이걸 실제로 말로 표현할 수 있도록 말하는 연습을 주기적으로 할 생각. 주제는 아무 기사. 기업과 관련된 기사여도 괜찮다. 근데 이거 피드백 할 사람이 필요할 것 같긴 하다. GPT는 못해주나
뭣보다 주변 사람들에게 도움을 많이 요청할 생각이다. 현직자 등의 선배들한테 말이다. 자소서 검토, 면접 검토. 특히 인성 면접은 이번에 피드백을 많이 받았고, 그걸 토대로 다시 준비해서 피드백을 받으면 될 것 같은데 직무 면접을 도통 어떻게 진행해야 할지 잘 모르겠다. 또 각 대기업별로 세부적으로 원하는 것도 다를 것이라 이거 관해서도 피드백을 받고 싶다. 필요하다면 컨설팅 학원이나 면접 학원에 도움을 요청해야 할지도...
개인 프로젝트도 몇개 생각한 것들이 있다. 이것들은 일간, 혹은 주간 단위로 성과를 작성할 예정이다. 매일 한가지 기능은 완성하는 것을 목표로 삼고 있다.
Rust를 공부해서 예전에 찾은 가이드라인을 기반으로 OS를 만들어보고 학교에서 공개된 병렬 처리 수업을 독학해보고 싶다.
쟁여두던 디스코드 봇 프로젝트도 다시 수행하고 싶다.
또 게임 매크로 하나랑, 버튜버 소식 알려주는 사이트도 만들어 보고 싶다. 후자는 네이버 부스트캠프의 풀스택 공부를 하는 것이 도움이 많이 될 것 같다.
그리고 학교서 배웠던 내용들을 간략히 정리해서, 블로그에 연재해볼 생각했는데... 사실 앞의 것들로 이미 바쁠거라 직무 면접 대비 관련 공부만 개인적으로 할 것 같다. 글로는 간략히, 실제로는 깊게 공부하는 것이 목표다.
그 외에 시간이 '남는다면' 리눅스도 제대로 공부하고 싶다. (비현실적인 편)
여름 계획이라 했지만 사실상 12월까지의 계획이다. 보다시피 하고 싶은것이 엄청 많다. 거기에 게임 등 노는 것이나 지인들과 이곳저곳 만나거나 놀러다니는거 생각하면 사람이 남아돌지 않을 것 같다. 실제로 이걸 다 할 수 있을지도 약간 걱정이다.
첫 2개는 무조건 할 생각이고, 세번째도 가급적 하고 네번째 이후는 사실 이번에 할 수 있을진 모르겠다. 직무 관련 공부는 한다 해도 그걸 글로 남기기는 많이 힘들 것 같기에... 그래도 다 해보고싶은거라, 적당히 조율하면서 만족스러운 하반기가 되길 개인적으로 빈다...
그리고 성장하려고 노력하는 개발자 분들, 취업을 위해 고군불투하시는 개발자 분들도 힘내시길 바랍니다.