비전공자인 상태에서 처음 개발을 접한것은 2021년 초였다. 운이 좋게 교내 IT 동아리에 합격하여 들어갈 수 있었고, 그 곳에서 자바와 안드로이드 스튜디오와 파이어베이스를 이용해 앱을 개발하며 개발에 입문할 수 있었다.
그러나 이 한 해 동안은 지금 돌아보면 정말 개발 공부를 열심히 했다고는 말하기는 부끄러운 것 같다. 그저 내 전공 학점이 낮았기 때문에, 학점의 영향을 덜 받는 분야로 도피를 위한 방법 중 하나라고 생각했던 것 같다. 그렇게 2021년 1학기가 지나갔다.
2021년 2학기에는 1학기때 파이어베이스를 사용해 서버를 구현하면서 서버의 동작 원리가 궁금했었기 때문에, 안드로이드 스튜디오와 스프링 부트를 이용해 서버와 클라이언트를 모두 개발하는 경험을 해볼 수 있었다. 총 4명의 팀원으로 인공지능 추천 알고리즘을 도입하여, 소개팅 상대를 추천받는 프로젝트였는데, 인공지능 모델과 통신을 주고받는 것이 흥미로웠다. 또한 이 프로젝트를 통해 스프링부트를 입문하면서, 서버 공부가 더 적성에 맞다는 것을 알 수 있었다.
본격적으로 서버 공부를 시작하면서 동아리내 현업 개발자분이 리딩해주시는 스프링 스터디에 합류하였다. 우아한테크코스 미션들을 페어프로그래밍으로 진행하고, 코드리뷰를 받고 반영하는 과정을 경험하면서 자바라는 언어와 객체지향에 대한 이해도를 크게 높일 수 있었다.
이후 우아한테크캠프의 웹 미션들을 수행하며, 스프링부트의 전반적인 기능들을 구현하며 빠르게 경험해볼 수 있었다. 이런 미션들을 진행하며 빠르게 기능들을 훑어봄과 동시에, 웹에 대한 부족한 개념을 채우기 위해 <웹을 지탱하는 기술> 스터디와 언어에 대해 더 깊게 공부하기 위해 <모던 자바 인 액션> 스터디를 병행하였다.
또한 동아리의 부회장직을 맡게 되면서 동아리 신입기수 선발, 최종성과발표회 준비, 후원사 유치 등등 개발 외적으로의 일들도 많았기 때문에, 정신 없었던 한 학기였던것 같다.
디프만(depromeet) 12기 연합동아리 활동
동아리내에서 프로젝트를 진행하기는 하였으나 한 학기 단위로 성과발표회가 돌아오고 중간고사, 기말고사, 과제 등 학사 일정과 프로젝트 일정이 겹치게 된다. 이러한 이유 때문에 사실상 우리가 구현한 프로젝트가 실제 사용자에게 제공되기에는 턱없이 모자란 수준이었다.
나는 실제로 사용자가 사용할 수 있을 정도의 서비스를 개발해보고 싶다는 생각이 들었고, 교내 동아리 프로젝트가 아닌 연합동아리에 들어가 프로젝트를 진행해보고 싶다고 생각하게 되었다.
우연히 이 생각을 했던 시점에 디프만(depromeet)라는 연합동아리에서 모집 공고가 올라왔고, 서류와 면접을 보고 운이 좋게 합격할 수 있었다.
디프만에서의 팀은 디자이너 3명, 클라이언트(AOS) 3명, 서버 3명으로 구성되었다. 이 중 클라이언트 개발자분들 중 한분과 나를 제외한 나머지 7분은 현업 IT업계에 종사하고 계시는 분들이었다.
서버 개발파트를 맡은 나는 나를 제외한 두 분의 백엔드 현업 개발자분들과 함께 프로젝트를 진행하게 되었다. 그래도 자바라는 언어를 1년 가까이 공부하고, 스터디를 통해 우테코 미션등을 진행하며 역할과 책임분리에는 자신이 있다고 생각했던 나였다. 그러나 현업의 벽은 생각보다 높았던 것 같다. 내가 단일 책임이라고 분리해서 올린 PR에서 코드리뷰를 받을 때마다 생각지도 못한 부분들이 더 쪼개질 수 있었다.
내가 지금까지 잘못 공부하고 있었구나를 처음 느낀 순간이었다.
이 프로젝트를 진행하며 많은 것들을 처음 경험해보았던것 같다. 말로만 듣던 Docker를 이용해 로컬 개발환경을 구성함으로써, 모두가 동일한 환경에서 개발을 편하게 진행할 수 있었다.
협업에 있어서는 Jira를 이용하여 개발 태스크를 에픽과 티켓 단위로 관리함으로써, 태스크 정리가 간편했고 팀원간의 불필요한 커뮤니케이션 리소스를 줄일 수 있었다.
가장 어려웠고 지금도 어렵게 느끼는것은 인프라 구성이었다. AWS를 이용해 구성하였는데, 단순하게 EC2 하나만 띄워보았던 이전의 경험이 쓸모없게 느껴졌다. 각 인스턴스 역할별로 subnet을 분리하여 RDS와 같은 데이터베이스 인스턴스와 서버 인스턴스를 격리시켰고, ECR, ECS, Github Action등을 이용해 서버 오토스케일링, 무중단 배포와 CI, CD 등을 구성하였다.
팀원분들은 모르는 부분들에 대해서 항상 친절하게 알려주셨고, 도와주려고 하셨지만, 나 스스로 다른 분들에 비해 항상 실력이 부족하다고 느꼈고, 실제로 그랬기 때문에 눈치를 많이 봤던 것 같다.
프로젝트는 무사히 구글 플레이스토어에 릴리즈 할 수 있었고, 디프만 최종 발표회때 우리 팀은 최우수상을 수상할 수 있었다.
프로젝트가 끝나고 돌아보니 프로젝트를 진행하며 발생했던 문제들 중 내가 해결방법을 떠올리지 못해 질문했던 것들은 대부분 나의 기초 부족에서 비롯되었었다. 비전공자인 상태에서 언어와 스프링부트라는 도구의 사용법만 계속해서 익혀왔기 때문에, CS에 대한 지식과 스프링부트 내부적으로 어떻게 동작하는지에 대한 이해도가 많이 부족한 상태였던것 같다.
우아한테크코스 최종 탈락
평소 우테코 미션으로 공부를 해왔었고, 동아리내에 우테코를 진행하고 있거나 수료했던 동아리원들이 있었기 때문에 우테코에 대해 너무나 잘 알고 있었다.
그만큼 배달의민족이라는 회사에 들어가고 싶다는 욕망도 컸기 때문에, 어떻게든 우테코에 합격해야겠다는 생각뿐이었다.
총 지원자는 3300명이었다. 서류와 한 달간의 프리코스를 진행하고 1차 선발로 100명을 선발했다. 다행히 100명안에 들어갈 수 있었다.
2주 정도 시간을 가진 뒤 잠실의 우테코 강의실에서 5시간의 최종 시험을 치루었다. 사실 시험 중반쯤 진행되었을때, 합격하겠다는 생각이 들 정도로 자신감이 있었다. 그런데 시험 시간 30분을 남겨두고 테스트를 진행할 때, 테스트가 실패하였다.
요구사항 문서를 꼼꼼하게 읽지 않아, 우테코에서 제공한 라이브러리를 가이드 대로 적용하지 않아 발생한 문제였다. 모든 기능은 구현되었으나, 테스트코드가 통과하지 못했고 다시 고치기에는 시간이 부족했기 때문에 그대로 제출할 수 밖에 없었다.
결과는 예상했던대로 탈락이었다. 사실 우테코는 무조건 합격한다는 목표가 있었는데, 탈락하고 나니 며칠간은 정말 상심이 컸다. 그래도 어쩔 수 없었다. 요구사항을 꼼꼼히 안읽은것도 분명 내 실력 부족이었다.
다시 취업을 위한 새로운 방향을 잡을 때였다.
SW사관학교 정글
앞서 프로젝트를 진행하고 취업을 준비하면서 코딩테스트 실력과 CS기초에 대한 지식이 많이 부족하다고 느꼈기 때문에, 어떻게 하면 이 부분들을 채울 수 있을지 많이 고민했다. 혼자 공부할까도 생각하던 중 SW사관학교 정글을 발견해 지원하였고 서류, 입과시험과 면접을 통과하여 지금 카이스트 문지캠퍼스에 올 수 있었다.
5개월 동안 얻어가고 싶은 것은 내가 지금까지 공부해왔던 과정에서 결핍이라고 느꼈던 부분들을 채워가는 것이다. 비전공자인 만큼 당연히 전공자에 비해서 CS관련 지식이 부족할 것이라고 생각하기 때문에, 이 부분에 대해서 스스로를 탓하거나 기죽지는 않으려고 한다.
앞으로 진행될 5개월 동안 다른 생각은 하지 않고, 주어진 커리큘럼만 성실하게 따라가려고 한다. 운영진분들이 말씀해주셨던 것처럼 이렇게 하루하루 성장하다보면, 뭐든 되어 있겠지 라는 생각이다.