내가 지금까지 공부해온 분야와는 전혀 다른 개발에 뛰어든지 이제 4개월이 지났다.
스파르타 내일배움캠프에 들어오기 전까지 개발이라는 것을 아예 구경조차 해본 적 없는
상태였기에 수료가 끝난 오늘 많은 생각을 하게 된다.
이제부터 그 이야기들을 천천히 풀어보겠다.
이전까지 그야말로 순도 100%의 문돌이였던 나는, 여러가지 심사숙고 끝에(이에 관련해서는 다른 글을 작성하거나, 혹은 포트폴리오에 녹여낼 생각이다.) 개발자가 되자고 마음 먹었다.
아무것도 모르는 상태였기 때문에 혼자 공부하기보다는 학원이나 부트캠프를 통해서 공부하면 좋을거라고 생각했다. 나름대로 찾아본 곳이나 추천 받은 곳들을 돌며 상담을 받기도 하고, 면접을 보았다.
어떤 학원은 당장 바로 시작할 수 있다는 이야기를 하며
'조금 생각해 보고 다시 연락 드리겠다'는 나에게
남은 자리가 많지 않으니 우선 등록부터 하고 가라는 식으로 이야기 하기도 했다.
(때문에 무언가 급하게 팔아치우는 느낌이 들어 크게 신뢰가 가지 않았다.)
물론 학원 입장에서야 열정을 가지고 본인들의 일을 하신 거겠지만 말이다.
사실 스파르타 내일배움캠프는 지인인 개발자 친구가 커리큘럼을 보고 현업에 들어와 보니
배워야 할 것들을 많이 알려주는 것 같다며 추천해준 곳이었다.
그래서 내심 여기가 되면 좋겠다고 생각하고 있었는데
면접 이후에 무려 '예비' 번호를 알려주며 나중에 자리가 나면 연락을 주겠다고 했다.
그래서 마음을 접고 있었는데..
개강일 바로 전주 목요일이었나? 갑자기 모르는 번호로 전화가 와서 받았더니 앞서 합격한
사람이 빠져서 자리가 났는데, 등록할 의사가 있냐고 물었다.
여러곳에서 상담하거나 면접한 이후로 뭔가 이렇다 할 곳이 없어서 약간은 초조했던 터였는데
잘됐다 싶어 등록하겠다고 했다.
그렇게 나의 4개월간의 개발 공부와 프로젝트 이야기가 시작된다.
그렇게 시작한 캠프는 새로움의 연속이었다. 새로움이란 언제나 설레는 것이지만,
'미지의 영역'이기에 일정부분 두려움의 대상이 되기도 한다. 그 두 가지
감정을 함께 겪게 되리라는 것을 깨닫는 데는 그리 오랜 시간이 걸리지 않았다.
일단 캠프 내에는 매우 다양한 배경을 가진 사람들이 존재했는데, 나같이 아주 처음 개발을 접하는 사람들도 있었지만 전공자도 있었고, 심지어는 현업에서 일을 하다가 온 경력자도 있었다.
그런 사람들의 배경을 고려하여 캠프 운영진 측에서 팀을 배정했다는 것은 아주 다행이었다.
대부분의 경우 4인 1개 팀으로 구성되어 캠프가 끝날 때까지 같이 프로젝트를 하게 된다고 헀다. 다른 공부를 하면서 스터디를 하거나, 학원을 다니면서 사람들과 교류하기는 했지만, 이토록 오랜 시간 (캠프에서는 오전 9시부터 오후 9시까지는 필수로 공부하기를 요구했다.) 계속 함께 있으면서 무언가를 만들어가는 경험은 또 처음이었다.
캠프 운영 방식이었던 100% 비대면 수업 및 프로젝트 진행은 매우 새로운 경험이었던 동시에,
어려움을 매번 직면하는 과정이기도 했다.
아무리 카메라를 켜두고 있더라도 혼자 있는 상황 떄문에 나태해지기 쉽다는 점, 그리고 직접적으로 얼굴을 보며 이야기 하던 것에 익숙해져 있는 상황에서 그냥 대화도 아닌 무려
"프로젝트"를 함께 해야한다는 점이 어려움으로 작용했다.
심지어 처음 본 사람들 사이에 흐르는 어색함은 말로 다 못할 정도였다.
이때 고시 공부 하면서 쌓아둔 습관들이 많은 도움이 되었다. 엉덩이가 무겁다는 점, 힘들어도 일단 계속 찾아보며 노력하는 것, 그리고 원래 친화력있고 사교적인 성격 덕에 시간이 지나자
익숙해져 갔다.
차수로 따지면 총 4차의 프로젝트가 된 거 같다. 1,2,3차 그리고 최종까지.
현업에서도 많이 사용한다는 POC(Proof of Concept) 방식의 프로젝트 진행이라고 했다.
처음부터 완성된 형태의 서비스를 내놓는 것이 아니라, 처음에는 자그마한 기능들로 일단 런칭을 하고 나서 이후에 다양한 데이터를 바탕으로 빠르게 반영하여 업데이트 해 나가는 방식이란다.
1차는 아이디어 차원에서 어떤 아이템으로 프로젝트를 진행해 나갈지 선정하고,
처음 접해보는 언어인 파이썬(python)과 또한 새로운 프레임워크인 플라스크(flask)를
통해 시작해 나갔다.
주제 선정도 팀원들이 아이디어를 그다지 적극적으로 내지 않아서 조금 애먹었던 기억이 난다.
그렇다고 나도 이렇다 할 주제가 떠오르지는 않았다.
그러다가 문득, 내가 걷고 뛰기를 좋아하기 떄문에 서울 시내 걸을만한 산책길을 소개해
주면 어떨까 싶은 생각을 했다. 나는 집 주변에 서울대학교 트랙이나, 도림천변길이
있긴 하지만, 그마저도 사람이 너무 많거나, 혹은 길이 좁아서 아쉬움을 느끼고 있던 터였다.
운동이 가능하면서도 한적한 길들을 알고 싶다는 생각에, 그리고 다른 사람들도 코로나로
인해 너무 붐비는 곳을 가고 싶지 않지만, 답답함을 달래줄 수 있는 야외를 찾지는 않을까
하는 생각을 했었다.
하지만 다른 사람들도 생각이 언제나 같을 수는 없는 법, 앞으로의 확장성을 생각해서 "여행"을 테마로 진행하게 되었다.
기본적인 CRUD 기능과 외부 API의 이용, GIT을 통한 협업 정도가 1차의 주된 태스크였다.
2차 프로젝트는 이미지 업로드를 위해 AWS S3라는 스토리지 서비스를 사용했고, 로그인의 인증 방식을 기존의 쿠키/세션 방식이 아니라 JWT 인증 방식으로 구현하게 됐다.
또한 미흡했던 GIT을 이용한 협업 체제도 좀 더 보완해 나갔다.
칸반보드, 마일스톤, 이슈와 PR후 merge를 이용한 협업 방식에 익숙해지는 단계였다.
더해서 API 호출 시간 줄이기, 서버사이드 렌더링같은 옵셔널한 요구사항도 있었지만, 필수로 지정된 기능을 구현하기에도 시간이 없어서 옵션은 신경을 쓰지 못했다.
2차와 3차 사이에는 알고리즘 주간이 있었다. 코딩 테스트를 보지 않는 회사들도 많다지만, 요즘 점차 보는 것이 추세라는 얘기도 있었는데, 문제들을 코딩으로 해결하는 능력을 보는 듯 했다.
문제들 자체는 간단한 사칙연산에서부터 수학적 사고를 다소 요하는 문제들이나 복잡한 생각을 풀어내는 것까지 다양했다. 사실 들어가기 전에는 PSAT에서 보았던 논리 문제와 비슷한 결을 가지고 있으려나 하는 마음에 기대도 되었지만, 예상과는 조금 달랐다.
일단 코딩 언어에 대한 지식을 기반으로 논리를 쌓아나가는 문제이기 떄문에, 실력이 다소 부족한 나로서는 다른 사람들이 작성해 놓은 코드들을 읽으면서 어떤 사고 흐름으로 문제 해결을 해 나가는지 보는 것에 더 집중했다.
3차는 이제 더 본격적으로 AWS 서비스들을 사용하게 됐다. 프론트단을 s3+cloudfront로 구성했고 백엔드 인프라는 도커를 사용해서 구축했다. 또한 GitAction을 통한 자동배포, 무중단 배포를 요했으며 API 문서 자동화, 리팩토링 사례 남기기, 부하테스트하기 등이 필수 태스크로 주어졌다.
기억에 남는 것은 API문서 자동화였다. 내가 맡아서 해보겠다고 나섰는데, RestDoc을 이용한 자동화가 전제조건이었기 때문에 Test Code가 필수적이었다. 하지만 우리 팀은 Test Code를 작성해 두지 않았다. 당시로서는 테스트 코드까지 작성할 여력이 되지 않아서 다른 방식을 찾아보았다.
다른 팀에서는 Swagger를 이용한 API 문서 자동화를 했다고 이야기를 듣고 나도 그 방식으로 우선 시도했다.
그러기 위해서는 우리 팀의 API를 리팩토링 할 필요가 있었는데, 튜터님으로부터 꾸준히 Restful하지 않다. API를 보면 어떤 기능인지 한눈에 들어오지 않는다는 피드백을 받았기 때문이다.
API 리팩토링을 진행하면서 request와 response시에 어떤 데이터를 받게 되는지를 포함해 자세하게 작성하려고 노력했다.
그리고 나서 Swagger를 통한 API 자동화도 다음과 같이 완성하였다.
3차까지 완성한 이후로는 주변 지인이나 캠퍼들에게 우리 서비스를 소개하고, 사용한 이후 피드백을 달라는 요청을 드렸다.
감사하게도 25명 정도의 피드백이 있어서 아래 링크와 같이 정리했다.
유저 피드백
최종 프로젝트는 고객 피드백을 반영하는 것이었다. 간단한 것들-예를 들면 로그인시 클릭이 아니라 엔터를 치더라도 로그인이 가능했으면 좋겠다는 등의-은 반영하기도 했지만,
우리 팀은 테스트 코드를 작성하고, 슬랙에 상태 관리 시스템을 연동했고, 부차적으로 필요한 부분들을 찾아보는 공부의 시간을 보냈다.
테스트 코드 작성은 본 코드 작성과는 또 다른 어려움이 있었다.
다른 팀원들이 작성한 것을 토대로 연구하며 작성했지만, 많은 시행착오를 겪어야 했다.
그렇게 완성한 코드를 테스트하기 위해 RUN 했을때 아래 console 창에 성공을 알리는
초록색 체크 표시가 뜨면 어찌나 기쁘던지..
그렇게 최종 프로젝트까지 끝나고 우리 팀의 프로젝트는 끝이 났다.
나는 캠프를 통해 이제 막 개발의 세계로 진입하고 있다고 느낀다.
아직 취업은 결정되지 않았고, 지금까지 배운 것들을 100% 소화하고 있다고 자신할수는 없다.
하지만 프로젝트를 진행하며 이전과 달리 "개발자"로 싹을 틔워가기 위한 자양분을 많이 받았다고 생각한다. 글의 마무리는 역시 프로젝트 기간에 배운 KPT 회고법으로 맺고자 한다.
와... 형 수료 회고 보고 나니까, 저도 제대로 한번 써야 겠네요... 저는 "수료, 아쉬운점, 다시 부트캠프를 한다면 이렇게 준비" 이렇게만 쓰려고 했는데... 재밌게 읽었어요!! 큰집, 작은집 같이 힘 합쳐서 취뽀해요!