안녕하세요!
저 이번에 처음으로 우아한테크코스 7기에 지원하게 되어서 지난 한달동안 프리코스를 진행하게 되었습니다. 그래서 제가 한달간 프리코스를 진행하면서 느낀 점을 정리하여 회고로 작성해보고자 합니다.
프리코스란?
프리코스는 우아한테크코스 본 과정을 미리 경험해 보는 단계입니다. 본 과정과 같이 매주 미션을 하나씩 구현하고 제출하는 방식으로 진행합니다. 이 과정을 통해 지원자는 본 과정을 미리 경험해 보면서 교육의 참여 여부를 결정할 수 있습니다.
다시 시작
이번 우아한테크코스에 지원하게 된 계기는 미션 형식으로 선발을 진행하는 과정에는 늘 흥미가 있었고, 배우는 기간이 약 10개월로 꽤 긴편이지만 그렇다보니 더 깊이있게 개발을 배울수 있지 않을까 생각되어서였습니다.
이것저것 더 알아보기보단 일단 바로 지원서부터 작성을 시작했습니다.
저의 시선을 잡은 문항은 오랜 시간 몰입했던 경험 그리고 도전
이었습니다. 몰입! 제가 마침 좋아하는 단어입니다. 몰입이야말로 개발자가 정말 개발을 돈벌이가 아닌 하나의 취미 그 이상으로 만들어줄 수 있는 것이라고 생각합니다. 어찌보면 이 문항은 저의 무용담을 풀어놓을 수 있는 기회라고도 볼 수 있다보니 번거롭게 느껴지지 않고 술술 쓰여졌던 것 같습니다. 그리고 지금으로부터 한달전인 10월 15일에 프리코스가 시작이 되었습니다.
저는 이전에 네이버 부스트캠프에서 챌린지 과정을 진행하면서 미션을 푸는 경험을 해본 적이 있었습니다. 그때는 하루에 한 미션이 나왔었고, 이번 프리코스는 매주에 하나의 미션이 나오다 보니 더 수월하지 않을까 내심 기대했었습니다. 그러나 시작부터 제대로 꼬여버리는 일이 발생합니다.
나 바본가…?
진짜 다시생각해도 레전드 바보짓을 해버렸습니다. 그래서 솔직히 이부분은 우아한테크코스 관계자분이 볼 일이 없었으면 좋겠습니다…ㅎㅎ
위에서 얘기했다시피 우아한테크코스는 한 미션이 1주일동안 진행이됩니다. 그러므로 1주차 과제는 10월 15일 화요일에 시작하여 10월 21일 월요일에 제출이 마감됩니다.
근데… 아니 근데… 프리코스가 시작된 줄 모르고 있었어요ㅠ 거기다가 제가 프리코스가 진행중이라고 알게 된 날짜가 바로 마감일인 10월 21일이었습니다! 프리코스 시작에 대한 안내메일은 왜인지 모르겠지만 스팸함에 들어가있었고(스팸처리 진짜 안했습니다..) 저는 왜인지 모르겠는데 프리코스 시작일을 알아보지 않고 태연하게 지내고 있었던 것이었습니다.
설상가상으로 편의점 알바 진행중에 확인을 해버린 상황. 제대로 망한 상황에 갑자기 머리가 차분해지며 일단 노트북부터 펼치게 되었습니다. “어서오세요 손님” 외치고 프리캠프 진행 방식 파악, “18,300원입니다” 말하고 과제 요구사항 분석, “감사합니다 또오세요” 외치고 마구 구현. 이것이 제 1주차 한줄요약입니다…
다행인것은 1주차이다보니 어려운 요구사항이진 않았다는 것입니다. 요구사항에 맞게 해야 할 작업 리스트를 만드는것은 부스트캠프에서 해봤다보니 익숙했습니다. 체크포인트를 하나 하나 채우고 유의사항에 놓친것은 없는지 다시 확인하고 급하게 제출했습니다. 솔직히 마음에 들지 않는 결과물이었습니다. 제가 미처 처리하지 못한 예외처리들이 더 생각이났고 그냥 급하게 만들었다는게 너무 가슴아팠습니다ㅜㅜ
한 주를 날린만큼 2주차는 2배로 노력하자
만회… 해야만했습니다. 2주차를 맞이하는 제 심정은 매우 비장했습니다.
2주차 과제가 공개되고 난 후 이번엔 한 주의 시간이 있기 때문에 더 잘해낼 수 있을 것이라는 최면을 한번 시원하게 해주고 구현할 목록을 체크리스트로 하나하나 만들기 시작했습니다. 다행히 무엇을 구현해야 할지 바로바도 떠오르더군요. 만든 체크리스트에 따라 하나하나 기능들을 만들어나가기 시작했습니다. 수월하게 진행이 되다보니 되게 안도해했던 기억이 납니다.
2주차에선 함수를 세분화하나는 데에 몰입을 해보려 했습니다. 함수를 재사용성 좋게 구현하려면 어떻게 만들어야할지, 내가 만든 함수가 정말 하나의 기능만 하고 있는 것인지 다시 생각해보고 열심히 리팩토링을 한 것이 저의 2주차 주된 경험이었습니다. 솔직히 저는 함수를 나누는 것이 귀찮아서 한곳에 몰아서 하려했던 경향이 있었는데 이를 반성하게 해주었습니다. 미리 얘기하자면 저는 매주 프리코스가 반성의 시간이었습니다. 그래서 미션을 제 방식대로 하려다가 항상 마지막에 싹 갈아엎었습니다.
만회했다고 생각한 저는 여유를 찾으며 스팸함에 있던 메일에서 프리코스의 커뮤니티가 있다는 것을 알았습니다. 그리고 그곳에 들어가서 엄청난 것들을 보았는데…
다른 분들과의 차이를 느끼다
프리코스 커뮤니티에선 1주차 코드리뷰가 한창이었습니다. 곧이어서 2주차가 끝나고 2주차 코드리뷰 글도 올라오더군요. 다른분들은 어떻게 구현했나 우선 구경차 들어가봤습니다.
저는 2주차에서 기껏 함수분리까지하고 1,2주차 전부 각 미션당 java파일이 하나 나왔습니다. 그러나 코드리뷰를 부탁하며 올린 github링크를 들어가봤을땐 엄청난 양의 파일들이 저를 반겨주었습니다.
잉? 나랑 같은 미션 받은거 맞아? 가 처음 든 생각이었습니다. MVC패턴도 적용하고, 예외 클래스도 따로 처리하고 뭔가 제가 생각했던 것 이상이었습니다.
나 이렇게만 하고 내도 됐던거야? 가 이제 두번째 든 생각이었습니다. 코드리뷰를 위해 github 링크를 올린 분 대부분이 위와같이 소위 거창?하게 프로젝트를 구성하셨더라구요. 저는 유지보수 하기에는 물론 이렇게 클래스를 나눠놓는게 좋지만 미션 구현에서 이정도까지 해야한다는 생각을 못했었습니다. 딱 미션에서 요구한 함수의 역할분리까지만 생각을 했으니까요. 그래서 아 나정도까지만 하면 떨어지는것인가 생각했습니다.
이게 굳이 필요한거야? 는 세번째로 든 생각이었습니다. 3번째 미션은 이런식으로 해야하나 싶어서 MVC 패턴을 적용한 프로젝트들을 파악하던 중 솔직히 이해가 가지 않았습니다. 1,2주차 미션이 이정도로 설계해야할 만큼 복잡하고 큰 프로젝트도 아니었으며, 솔직히 크지 않은 프로젝트에서 클래스들을 과하게 나누다보니 오히려 프로젝트를 살펴보는데 불편하고 가독성이 떨어졌습니다. 전 그래서 저의 미션 구현 결과에 자신감을 가지기로 했습니다. 그러나 MVC 패턴으로 많은 클래스로 나뉘어서 구현한 것은 해당 프로젝트가 기능이 추가되어서 규모가 커질 때 매우 유용한 구조이기 때문에 이 부분에선 잘 설계했다고 할 수 있습니다. 그래서 명확한 정답은 없고 개발자 본인의 신념에 따라 하면 되는게 맞지 않을까 생각했습니다. 어짜피 3,4주차에서 점점 더 큰 미션들을 진행하면서 자연스럽게 이런 패턴들은 사용하게 될 것이라고 생각해서 조바심을 버리기로 마음먹었습니다. 그리고 결과적으로 보면 잘한 선택이라고 생각합니다.
미션을 현실과 대입시키다
3주차를 맞이했는데 이번엔 미션이 꽤 재미있어졌다고 느꼈습니다. 3주차에서 중점적으로 제가 생각한것은 클래스를 효율적으로 잘 나누기
였습니다. 역시 급하게 처음부터 완벽하게 하려 하지 않아도 미션에서 차근차근 저에게 스킬을 익히도록 요구하더군요. 아주 감탄했습니다.
대학교 수업 중 객체지향에 관한 과목을 배웠을 때 책에는 이런 내용이 있었습니다. 정확히는 기억이 안나는데 클래스는 현실에서 관련있는 값들과 행동들의 집합? 뭐 이런느낌이었는데 그래서 버스랑 승용차는 하나의 Car라는 클래스로 묶을 수 있다 이런 내용이었습니다.
클래스를 어떻게 설계할지는 이보다 좋은 방법이 없다 생각해서 미션 내용을 현실에서 실제 일어나는 일이라고 생각했습니다. 미션은 간단히 로또를 구현하는것이었습니다. 갖고있는 돈을 입력받아 그 돈에 맞게 로또가 자동 방식으로 구매되고, 당첨번호를 입력받고, 최종적으로 구매한 로또들의 당첨여부를 확인해서 결과를 보여주는 미션이었습니다. 이를 현실로 보면 어떻게 될지 차근차근 생각해봤습니다.
(코드 안에 사람들이 있잖아!)
우선 로또를 구매할 사용자가 있어야겠다고 생각했습니다. 그러다보니 사용자는 갖고있는 돈이 있을거고, 그걸로 산 로또가 있어야 할 것이라고 생각되었습니다. 그리고 로또 운영기관이 있어야겠다 생각했습니다. 당첨번호를 뽑는 것은 로또 운영기관에서 하는 것이다보니 여기서는 당첨번호를 뽑고, 로또가 당첨되었는지 확인하는 기능이 있어야겠다 생각했습니다. 마지막으로 사용자가 갖고있는 이 로또 자체가 6개의 번호를 가지며 존재하기 때문에 이또한 클래스로 구현되어야겠다 생각해서 최종적으로 로또, 사용자, 로또 운영기관 이 3개의 클래스를 만들게 되었습니다.
더 좋은 방법이 있을수도 있겠지만 위와 같이 생각하고 구현을 해보니 구현이 수월하게 되었습니다. 하지만 마지막에 예외를 처리하는 과정에 공통적인 작업들이 필요했는데 이 또한 클래스로 나눠 구현하는게 좋지 않았을까 생각했습니다.
싹 다 갈아엎은 4주차
4주차는 미션이 아주 요구사항 범벅이었습니다. 프로그램의 진행 순서 그리고 여러 다른 가정된 상황에 대해 생각할 점이 많았고, 그러다보니 시간이 많이 필요했습니다. 그런 와중에 싹 다 갈아엎는다는 선택을 한 저는 과연 어떻게 되었을까요?
우선 싹 다 갈아엎은 이유를 설명드려야겠죠. 미션은 편의점 결제 시스템을 만드는 것이었습니다. 뭔가 프리코스하면 전 앞으로 편의점이 많이 생각날 것 같아요. 편의점에서 첫 미션을 확인했고, 편의점에서 미션을 많이 진행했었는데, 마지막 미션까지 편의점이라니! 질릴 지경입니다.
위에서 얘기했다시피 프로모션이 적용되는 상황, 1+1제품인데 1개만 구입해서 한개 더 구입해도 된다고 알려야 하는 상황, 프로모션 제품 재고가 없어서 몇개는 프로모션 적용이 안된다고 알려야 하는 상황 등 정말 생각하고 신경써야할 점이 많았습니다. 그러다보니 자연스레 프로젝트가 커지게 되었습니다. 그래서 엔티티 단위들을 클래스로 만들었으나 프로젝트에서 사용할 데이터를 정의한 부분과, 서비스 로직부분을 그냥 Application 하나에 때려박아버렸다는 것을 만들고 나서 알았습니다.
Application에 이와 같이 별의 별 로직을 다 때려박으니 단점을 한눈에 확 알게 되었습니다. 제가 짰지만 제가 못알아먹겠습니다. 맞습니다. 스파게티 코드가 완성된 것이죠. 도저히 더 프로젝트를 구현할 자신이 없어지고 있었습니다. 이 때 바로 Repository와 Service 클래스도 만들어 각 역할에 맞게 로직을 나누고 이를 Singletone으로 구현하면 효율적으로 구성할 수 있을 것 같았습니다. 그러나 이미 구현을 많이 해버린 상황. 진짜 손이 안가지만 그래도 꼭 필요한 과정이라 생각해서 싹 갈아엎기를 시작했습니다.
여기서 시간을 엄청 잡아먹게 됩니다. 안그래도 시간 없는데 여기서 시간을 많이 소모해버려서 정말 가능한데까지만 해보자 생각하고 진행했습니다. 그런데 스파게티를 쫙 펴서 샴푸 광고에 나오는 엘라스틴한 머릿결로 만들어버리니 확실히 코드를 파악하기 좋아졌고 제가 예상한 부분보다는 더 진행하게 되어 다행히 4개의 테스트중 4개 전부 통과하게 되었습니다.
물론 부족한 부분 제출하고 나서 마구 보이고 완성되지 않은 프로젝트를 제출했다고 생각합니다. 그래도 저는 이 프로젝트를 진행하면서 Repository와 Service 클래스를 구현했을때의 장점 그리고 Singletone을 쓰는 클래스는 왜 써야하는지에 대해 뼈저리게 느낀 경험이 되어서 정말 뜻깊은 과제였다고 생각합니다.
마지막은 선배 개발자의 위로로 마무리
사실 제가 유명한 개발자인 포비님에 대해서 잘 알지 못합니다. 이 분에 대해 들어볼 기회가 없었고 기껏 아는 분이라면 Spring 강의를 들었을때 강의해주신 김영한분 한분정도 압니다.
그런데 포비님이 4주차가 끝나고 11월 12일 온라인으로 포수타?라는 것을 하신다해서 또 편의점 알바를 하면서 이어폰으로 듣게 되었습니다. 근데 왜 포비님이 유명하신지 알 것 같습니다. 말 하나하나에 감명을 받았거든요.
특히 실패를 빨리 해봐라라고 하신 부분에서 뭔가 제 프리코스 과정이 생각나더라구요. 제 프리코스는 실패의 연속이었고 때문에 반성의 연속이었거든요. 덕분에 저번주에 아쉽다고 생각했던 부분들을 개선하게 될 수 있어서 좋았는데 마침 포비님이 이와 비슷한 얘기를 하셨습니다. “성공만 하려 하지말고 실패를 빨리 해봐라. 그래서 그 실패를 통해 더 나아질 방향을 찾아야 한다” 이 말이 정말 와닿았고 뭔가 저에게 위로가 되었습니다.
그리고 개발자를 하겠다고 직장을 그만둔지 이제 10개월이 되는데 사실 매일 불안의 연속이었거든요. 근데 포비님께서 해주신 말들이 정말 위로가 많이 되었습니다. 원래 불안한 길이고, 이런 과정이 있어야 더 성장할 수 있는 것이기에 저는 저를 믿고 계속 나아가보려고 합니다.
프리코스는 우아한테크코스를 지원하면 누구나 참여할 수 있습니다. 무료한 개발에 하나의 작은 도전이 큰 동기부여가 될 수 있으니 프리코스 한번쯤 해보시기를 추천드립니다!