infra-whale 님의 블로그
카이스트 정글 00주차 회고록 본문
"부끄럼 많은 생애를 보냈습니다."
다자이 오사무의 소설 인간실격 첫 번째 줄은 이렇게 시작된다.
야심차게 인용을 넣어봤으나 아쉽게도 그 다음 내용은 모른다. 그 소설은 대학교 때 중고 책방에서 산 이후로 첫장만 읽은 채 내 길동 집 책장 귀퉁이에 그대로 꽃혀있으니까. 단 내가 살아온 방식과 닮아있단 건 부정할 수 없을 것 같다. 의도하였든 의도하지 않았든 내 삶에서 난 많은 부분을 중도에 쉽게 그만두었고, 그 방식을 부끄럽게 느낀다면 부정할 수도 없을 것 같다.
그렇기에 이번 카이스트 정글은 내게 꽤나 소중한 기회였다.
시작
해당 과정을 알게 된 건 꽤나 우연이었다. 회사를 퇴직하고, 야심차게 시작한 사이드프로젝트도 고민끝에 해체하고 의욕이 조금씩 꺾여가던 차, 4월에 등록했던 원티드 프리온보딩의 디스코드 채널에 소프트웨어 정글에 관한 소개글이 노트북 한 켠에 알람으로 올라왔다. 모든 것이 귀찮기만 하였던 그 때, 여느 때라면 아무런 생각조차 하지 않고 넘겼을 테였지만 무슨 바람이 불었던 것일까. 어느샌가 해당 과정의 취지를 보고 있었고, 난 마치 무엇에 홀린 것마냥 지원 양식을 쓰고 지원 동영상을 촬영하고 있었다.
카이스트/크래프톤 정글 통합모집페이지
5개월 간의 합숙 과정을 거쳐 5~10년에도 성장하는 개발자로 거듭나세요
swjungle.net
우리 기수가 마지막이라 위 URL이 언제까지 유지될 진 잘 모르겠지만...
모두 나에게 필요한 것들이었다. 아무것도 얻을 것이 없단 이유로 이직 준비 중 회사를 나왔지만 어디로 가야할 지도 모르는 상황이었고, 성장하고자 하는 의지가 있는 사람들과 함께 있는다면 뭐든 할 수 있지 않을까 하는 생각도, 준비하던 사이드 프로젝트가 팀원들의 참여 저조로 엎어지면서 세상엔 그런 사람들이 없다는 쪽으로 기울어지던 차였다. 덩달아 나만의 웹서비스를 만들어보고자 하는 야심찬 계획도 기획단계에서 이미 휴지통으로 가버린지 오래였다. 이 모든걸 한번에 해결 가능하다고? 안할 이유가 없었고, 그 자리에서 즉시 지원하였다.
하지만 지원하면서 드는 불안감 또한 존재하였다. 주변 사람들 모두 CS 기본을 다지는 것 보단 실무에서 활용되는 기술을 더 알차게 익혀보거나, 이력서를 다듬는게 더 어떠냐는 조언을 하고 있었고, 실제로 카이스트 정글을 끝마치게 되면 난 거의 1년동안을 무직으로 보내는거랑 다를 바가 없었다. 저축해둔 돈도 조금씩 까먹고 있었으며, 이게 끝나고 나서도 취업이 가능할거란 보장 또한 없었다. 입학 시험을 준비하면서까지도, 심지어 입학하기 전날까지도 이러한 불안은 계속 존재했던 것 같다. 시간은 시간대로 쓰고 돈은 돈대로 쓰는 것 아닐까. 나중에 결국 내 결정을 후회하는 건 아닐까.
개발자라는거 진짜 될 수는 있는 걸까. 너무 늦어버린건 아닐까.
8월 5일
불안한 마음을 여전히 안은 채, 대전으로 향했다. 5시에 길동에서 기상하였을 땐 소나기가 쏟아지고 있었고, 간만에 일찍 일어난 탓인지 컨디션도 그리 좋지는 못했다. 대전으로 가는 차 안에선 날씨가 화창하였으나 기대감보단 여태 품어왔던 불안감만이 머릿속에 가득하였다. 태워주신 부모님께 인사를 하던 순간에도, 기숙사 1층에 도착하여 코치님들을 뵙고 이름 모를 또다른 입학생이랑 애써 웃음지으며 이야기를 하던 순간에도 말이다. 어느새 정신을 차려보니 내 목엔 "소프트웨어 정글 장효범" 이란 팻말이 달려있었고, 기숙사 룸메이트를 만났고, 대강당 비슷한 곳 맨 앞줄에 앉아 정글 운영진분들이 진행하시는 카이스트 정글의 소개를 듣고 있었다.
운영진분들이 말씀해주시는 정글의 모토는 아래와 같았다.
내 삶은 내 것. 어떤 질문이든 환영
이에 대해 난 이렇게 받아들였다.
이곳에서는 무엇이든 해도 된다. 말 그대로 정글이니까. 하지만 그 행동에 대한 책임은 전부 내가 지게 될 것이다.
질문은 곧 의문, 즉 이유를 찾는 과정이다. 무언가를 하고자 한다면 항상 그 이유를 들고 같이 오자. 내가 쓰려고 하는 개념이 있다면 적어도 왜 써야 하는지는 아는 정도의 상태여야 한다.
추가적으로 정글에서 있을 일정과 규칙, 그리고 팁들을 말씀해주시면서 소개 시간은 끝났다.
첫 프로젝트
이후 바로 강의실로 이동하여 00차주의 발제를 하였다. 주제는 작은 웹서비스를 만들어 보는 것이었다. 단 시간은 목요일 정오까지, 프로젝트는 배포까지 완료된 상태여야 했다. 추가적으로 다음과 같은 요구사항들이 더 주어졌다.
- 로그인 기능
- Jinja2 템플릿 엔진을 이용한 서버사이드 렌더링
- Bootstrap을 대체할 CSS 라이브러리 사용하기 (Bulma, Tailwind 등) (권고사항)
- JWT와 HTTP Authorization header를 사용하여 구현하기 (Session cookie 대비 등장하게 된 배경은?) (권고사항)
2명의 팀원 분들은 만나자마자 미리 생각해 온 웹서비스에 대한 아이디어를 내놨다. 잘은 기억이 나지 않지만 굉장히 여러가지 아이디어가 오고갔고, 그 와중에 한 분이 이러한 아이디어를 내놓았다.
어떤 고민거리가 있는데, "그런데 갑자기 닌자가 나타났다" 식으로 해치워버리는 컨셉 어때요?
여기에서 착안하여, 우리는 정글 참여자들의 고민을 익명으로 올리고, 고민 해결책을 제시도 가능한 해우소라는 웹 애플리케이션을 만들기로 하였다.
동시에 걱정과 기대가 동시에 들긴 하였다.
걱정은 물론 시간과 관계되어 있었다. 기획과 발표 시간을 제한다면 실질적으로 개발이 가능한 시간은 이틀이 채 안되었다. 지난 비트캠프 팀 프로젝트에서 2달이 걸린 것을 생각하면 턱없이 부족한 시간이었다. 우리 팀은 그래도 현업 경험이 있는 사람이 2명, 전공자가 1명이라 그나마 다행이었지만, 다른 조 중에 이번에 처음 개발을 접한 사람의 경우 개발이 가능은 할까 하는 걱정이 좀 되긴 하였다.
기대는 물론 팀원들에 대한 거였다. 개발에 대한 열정을 불태우는 2명을 보고 난 순간 이게 말로만 듣던 이세계가 아닐까 하는 생각을 했었다. 몇 개월 전 한 달 동안, 아이디어를 물어봐도 조용하고 목표를 제시하여도 따라오지도 않던 전 팀원들 사이에서 얼마나 고통받았던가. 그렇게 원하던 열정넘치는 동료들이 여기에 있었다니. 정글에 오기 정말 잘했단 생각이 들었다.
그 이후로는 정말 순식간이었다. 와이어프레임을 작성하고, 깃허브를 이용한 분업을 잘 아시는 동료분의 리드에 따라 커밋 컨벤션을 작성하고 칸반보드형 프로젝트 관리 페이지를 만들어서 일사천리하게 일을 헤쳐나갔다. 물론 그 와중에도 시간은 부족했다. 당연하다 겨우 이틀밖에 없는데. 집이었으면 일주일은 걸렸을 것 같은 업무가 하루만에 끝나는 모습에 감탄하면서도, 아직 할 게 너무 많아 고통받기도 하다가 밤 12시가 넘었는데도 마치 낮 12시마냥 불태우는 팀원들과 다른 팀들을 보며 다시 정신을 가다듬기도 하며... 그렇게 정신 차릴 새도 없이 3일이 흘러갔다.
개발은 끝났지만, 그렇다고 쉴 순 없었다. 바로 다음날 정오까지 발표자료와 함께 만든 서비스를 제출하여야 하였기 때문이다. 밤새 발표자료를 만들면서도 구현하지 못하였거나 부족했던 부분들이 보여 뭇내 아쉬웠다. 아니나 다를까, 정신없이 발표를 마쳤지만 미비하다고 생각했던 부분들을 포함해서 여러 가지를 코치님들께서 지적해주셨다.
- 검증에 실패한 경우 상태 코드를 반환하였는데, 사용법이 저게 맞는가.
- url 설계가 restful하지 않는데 왜 저렇게 설계하였는가.
- JWT 저장위치별 차이는 뭘까?
- 세션, 로컬, 쿠키 차이는 뭐고 어느 경우에 탈취가 되는 걸까?
- 특정 API 요청에 대한 응답 안에, 다른 데이터의 ObjectId가 그대로 노출되는 경우가 있는데 왜 저렇게 개발하였는가.
제대로 알아보지 못한 문제도 있고 지적받은 사항 모두 합당한 말이어서 할 말이 없었다. 시간이 없어 정신이 없었다는게 유일한 이유였으나, 내가 만든 제품을 사용하는 고객에겐 그건 변명이 될 수 없을테니까 말이다.
다른 조원에게 하신 말씀은 다음과 같은 것들이 있었다.
- 로그인 시, 아이디와 암호화된 비밀번호를 그대로 보내면, 탈취될 시 이를 사용하면 로그인 가능하다.
- 이를 리플레이 공격이라 한다.
- 즉, 보낼때는 전체 암호화해서 보내야 한다.
- 서버사이드 렌더링을 언제 쓰는지 더 생각해보라
- SEO, 웹 크롤러 등이 있다. 왜 이때 써야할까?
- 대댓글은 어떻게 구현하면 될까? (몽고디비에서)
- 세션은 언제 쓰고 jwt는 언제 쓰는걸까?
- 로그인 만료 시자동연장은 어떻게 해야할까?
- SHA256 말고 bcrypt를 사용하는 이유는 무엇일까?
- bcrypt는 SHA256 + sort키로 이루어진다.
- SHA1은 쓰면 안된다. 왜 안될까?
- sort를 쓰는 이유, sort는 어떻게 해야하나?
- sort값은 유저마다 전부 다르게 설정해야 한다. 왜 그럴까?
모두 생각해볼만한 질문들이었고 꼭 찾아본 후 따로 기록하고자 한다.
추가로 전체에게 다음과 같은 피드백도 주셨다.
- 서비스를 발표할 일이 있을 때, 시연은 미리 여러번 해봐야 한다.
- 시연 시, 안되는 부분이 있다면 무리하게 보여주지 말고 빼버리는게 낫다.
- 시연 시, 테스트에서 사용한 더미데이터는 무조건 제거하여야 한다.
- 기능을 넣을거면 이유를 확실하게 알고 넣어야 한다.
- 남들이 다 써서, 멋져보여서는 이유가 되지 못한다.
- 필요한게 아니라면 쓰지 말자
- 어떤 기술을 쓰려고 한다면 최소한 그 기술을 쓰는 이유에 대해 5분정도 그 기술에 대해 떠들 수 있을 정도는 되야 한다.
- 만약 면접 상황이라면 면접관이 해당 질문을 하였을 때 모른다면 확실히 인정하자
- 챗지피티한테 질문 목록을 뽑아보는것도 좋을 것이다.
- 발표 연습을 좀 하자
- 웹 서비스 암호화는 필수다. DB에 비밀번호를 암호화 안 하는 것은 실제로 형사처벌감이다.
몰랐던 것은 시간이 나는 대로 무조건 찾아서 정리해 볼 것이다...!
0주차가 끝나고 나니깐 하는 생각들
아쉬움이 남는 결과였지만 이런 생각도 하게 된거 같다.
첫 번째로 제한된 시간 안에서 하는 팀플레이가 꽤나 어려웠고, 특히 시간이 없단 이유로 코딩 컨벤션을 따로 정해두지 않았는데 팀원들 사이 변수명 통일이 되지 않고, 코딩 스타일도 차이가 나 맞추는데 시간이 더 걸렸단 생각이 든다. 반대로 깃허브 프로젝트, 풀 리퀘스트등은 잘 세팅하고 사용하게 되니, 허비하는 시간이 정말 줄어들었단 체감이 들었다. 아무리 시간이 없어도 팀워크에 도움이 되는 일에는 시간을 아끼지 말잔 생각이 들었다.
두 번째로 챗 지피티에 대한 견해가 바뀌었다. 이전에는 솔직히 스스로의 학습과 구현을 막는 나쁜 방법이란 생각이 들었지만, 제한된 시간 안에 빠른 구현을 해야 하는 상황에선 매우 유용한 선택지일 수 있단 생각이 들었다. 아직 사용방법을 잘 모르기는 하지만, 좀 더 공부해서 정말 필요한 상황에 적절히 사용하고자 한다.
마지막으로는 이전 내 삶에 관한 견해가 바뀌었다. 지금껏 취업이 되지 않는단 이유로 힘들어했고, 그렇다고 엄청난 노력을 기울이지도 않는 삶을 살아왔지만, 여기 있는 약 30명 전원이 밤낮 가릴 것 없이 카이스트 문지캠퍼스의 등대가 되는 모습을 보고,
솔직히 이렇게 미치고자 하는 사람들 틈바구니에서 살아남고자 한다면 내가 더한 미친 놈이 되어야 겠단 생각이 들었다. 또한 그 과정이 점점 재밌어지고 있기도 하고... 앞으로 남은 5개월은 컴퓨터 자체에 제대로 미쳐보는 시간이 되었으면 한다.
정글에 있어야 할 또다른 이유
입학하고 나서 하루가 지나 8월 6일, 오후에 류석영 교수님, 정주원 코치님, 이범규 대표님과 함께 팀별 면담을 하는 자리가 있었다. 몇 가지의 질문이 오갔고, 내가 한 질문은 이러했다.
CS지식이 다들 중요하다고는 하고, 기업 모집 요강에도 자주 보이는데 정작 왜 중요한지 말해주는 사람은 아직 없었습니다. 왜 우리는 이걸 배워야하는 걸까요?
이 질문에는 이범규 대표님이 답해주셨다.
첫 번째. 우리가 실무에서 사용하는 지식들의 근간은 CS 지식이다. 즉 추후 배움의 속도에 있어서 기본기가 제대로 쌓인 사람일수록 더 빠르게 성장할 수 있다.
두 번째. 당장의 간단한 오류는 해결 가능할지 몰라도 이후 현업에서 정말 크리티컬한 오류가 발생하여 아무도 해결하지 못할 상황이 올 수도 있다. 이럴 때, 해당 프로그램 자체를 까보면서 오류를 해결할때 사용할 수도 있다.
내게 하는 투자라는 개념이라 생각하였다. 당장 쓸 데가 없을수도 있지만, 이후 내 성장에 필요한 시간을 비약적으로 줄여줄 수 있는 투자.
정글에 들어온지 이제 6일이 되었고 이 모든 과정은 고통스러우면서도 동시에 재미를 동반한다. 솔직히 말해서 내가 살면서 언제 카이스트에서 공부를 해보고 언제 또 하나에 이렇게까지 미칠 수 있겠는가. 주어진 이 기회를 감사함과 동시에 즐기면서 올해를 보냈으면 한다.
+ 내게 있어선 첫 에세이다. 늘 느끼는 거지만 글 쓰는건 항상 어려운 것 같다. 나름 있었고 느꼈던 모든 걸 담으려 했지만 많이 부족한 것 같고 ... 자그마치 이걸 쓰는데 거의 2시간 반이 걸렸단 게 더 충격이다. 시간 날 때 마다 자주 쓰면 나아지리라 믿는다.