💡 서론
해야 하는 일, 하고 싶은 일
하기 싫은 일을 할 줄 알아야, 하고 싶은 일을 할 수 있다.
오글거리기는 하지만, 우테코 프리코스 1주차를 진행하면서 제가 느낀 감정이었습니다.
사람이라면 당연히 하고 싶은 일을 먼저 하고 싶을 것입니다. 하지만 그 이후에는 하기 싫고, 힘이 드는 일만 남게 됩니다.
저 또한 한 때는 알고리즘 공부를 하고 코딩테스트 문제를 풀며 레벨을 올리는 것에 푹 빠져있었습니다. 그렇기에 빠른 레벨 업을 할 수 있었지만, 정작 프로젝트에서 사용해야 할 스프링 공부는 소홀히 하게 되었습니다. 결과적으로 이는 저에게 쓰린 여러 번의 탈락이라는 상처를 주기도 하였습니다.
물론 알고리즘 공부를 하며 얻은 점도 많이 있었지만, 성장을 위해서 시간을 더욱 잘 사용했을 수도 있지 않을까하는 아쉬움도 남았습니다.
즉, 이러한 경험을 통해서 저는 지금 내가 성장을 위해 해야 할 일이 무엇이고, 어떻게 시간 분배를 할 것인가 를 계속해서 고민하는 것이 중요하다고 느꼈습니다.
목요일부터 프리코스를 시작하게 되었는데, 타이밍 좋게도 그 날은 중간고사 시작일이었습니다. 학교 공부와 우테코, 뭐가 더 중요하다고 따질 수는 없겠지만 재미로 본다면 글을 읽는 것보다 코드를 고민하며 짜는 게 훨씬 나았습니다.
심지어 다음날이 시험인데도 공부를 하고 있지 않은 제 모습을 보면서, 우선순위를 제대로 정해야겠다는 생각이 들었습니다. 일단은 상대적으로 하기 싫은 일인 전공 공부를 하기로 마음 먹었습니다. 집중해서 끝낼 수 있을만한 시간을 배분했기에, 제가 집중하지 않는다면 이후에 하고 싶은 일들을 할 수 없었습니다.
그 시간 안에는 오로지 공부에만 집중을 했고, 이렇게 해야 할들을 먼저 쳐내고 나니, 남는 시간을 프리코스에 모두 투자할 수 있었습니다.
정말 간단한 진리이지만, 막상 실행하기에는 간단하지 않았습니다. 하지만 꾸준한 성장을 하기 위해서, 그리고 백엔드 개발자로서의 더 좋은 역량들을 갖추기 위해서 꼭 습관화해야 할 부분이라고 생각이 들었습니다.
회고록 작성 시기
현재 저는 1주차 미션 제출이 종료되지 않은 수요일 오후에 글을 작성하고 있습니다. (물론 규칙에 따라서 미션과 관련된 본 글은 목요일에 게시할 예정입니다!)
그리고 아직은 코드리뷰를 진행하지 않았기 때문에, 이와 관련하여 배우고 느낀 내용은 프리코스 2주차 회고록에 함께 작성할 계획입니다. 개인적으로 리뷰를 통해서 정말 많이 성장할 수 있을 것이라는 생각이 들어 기대가 되는 부분입니다.
굳이 글을 지금 작성하는 이유는, 우선 첫번째로 소감문을 조금 더 수월하게 작성하기 위해 정리함이 있으며, 두번째로는 일정이 밀리는 것을 방지하기 위함입니다.
본 글에는 제가 한 주간 느낀 모든 것을 최대한 작성할 생각이기 때문에, 이를 요약하여 소감문을 쓸 생각입니다.
그리고 하루하루 할 일이 밀리게 되면, 프리코스 미션을 하는 데 방해가 될 수 있기에 웬만하면 매주 수요일에 회고록 작성을 마치려고 합니다.
💡 오리엔테이션
프리코스가 시작된 10/19(목)에 오리엔테이션도 함께 진행되었습니다.
저는 아쉽게도 학교 수업이 있어 듣지는 못했지만, 풀버전이 유튜브에 올라와 있어 집중해서 들으며 글로 정리를 해보았습니다.
OT를 들으며 느낀 점은, 우테코에서 지향하는 교육관과 저의 성향이 아주 잘 맞는다는 점이었습니다. 그리고 코치분들이 자주 언급하신 내용들이 저의 자소서에도 어느 정도 들어 있었기에, 이번 자소서는 그래도 나쁘지 않게 쓴 것 같다는 생각도 들었습니다.
그렇기에 기분 좋은 시작이 되었고, 이는 앞으로 펼쳐질 프리코스의 과정들에도 많은 기대감을 심어주었습니다.
💡 미션 & 커뮤니티
미션 첫인상
솔직히 말해서, 미션을 처음 보고는 왜 이렇게 쉬워?라는 오만한 생각을 하였습니다.
1주차 과제는 숫자 야구 게임을 만드는 것으로, 코딩을 처음 배울 때 자주 연습문제로 나오곤 했습니다. 또한 저는 평소에도 알고리즘 문제 푸는 것을 즐겨 하다 보니 상대적으로 쉬운 문제라고 여겨졌습니다.
하지만 이는 아주 잘못된 생각이었습니다. 왜냐하면 저는 지금까지 단순히 기능 구현에만 초점을 두었기 때문에, 미션이 쉽게 느껴졌던 것이었습니다.
우테코 프리코스는 기능 구현을 하기 전에 우선 어떠한 기능이 필요할지를 문서화하는 기능 명세서를 작성해야 합니다.
입출력 기준을 꼭 충족해야 했고, 예외사항 또한 스스로 생각해서 처리해야 했습니다.
그리고 처음 알았던 자바 컨벤션도 준수를 하며 프로그래밍하라는 요구도 존재했습니다. 아직은 1주차라 조건이 많지는 않았는데, 후에는 더욱 많은 제약이 생긴다는 걸 들으니 걱정이 좀 더 커졌습니다.
백준 || 프로그래머스 에서 기능 구현만 하고 정답을 맞췄던 저에게, 이러한 부분들은 큰 부담으로 다가왔습니다.
코딩테스트의 폐해
알고리즘 문제를 풀 때는, 코드를 가독성 좋게 짜든, 컨벤션을 맞추든, 변수명을 어떻게 설정하든 아무런 상관이 없습니다. 그저 결과만 잘 나오면 되기에, 최대한 빠른 시간 안에 코드를 작성하는 것이 관건입니다.
그렇기에 저는 어떻게든 코드를 간소화하고, 다양하고 유용한 메소드들을 아는 것이 자연스레 실력이라고 느꼈습니다.
클래스를 여러 개 만드는 것은 고사하고, 메소드를 여러 개 만드는 경우도 크게 있지 않았습니다. 많아봐야 2~3개의 메소드를 만들고 대부분은 메인에서 실행시켰습니다.
결국 저의 이러한 코딩 습관은 프리코스 1주차에서 까발려졌고, 산산조각 났습니다.
그리고 많은 사람들이 왜 코딩테스트에 대해서 안 좋은 시각을 가지고 있는지에 대해서도 이해하게 되었습니다. 물론 시간 안에 기능 구현을 완료하고, 문제 해결을 할 수 있는 사고력을 체크한다는 점에서는 정말 효율적인 테스트라고 생각을 합니다.
하지만 코딩테스트는 점점 난이도가 올라가고 있고, 좋은 기업에 취업하기 위해서는 반복적인 연습을 통해서 알고리즘 자체를 외워버려야 합니다.
마치 대학에 들어가기 위해 수능 공부, 내신 공부를 했던 것처럼 말입니다.
물론 제가 이 구조를 바꿀 능력은 없기 때문에, 앞으로도 꾸준히 1일 1문제를 풀 생각입니다. 다만, 이전처럼 해결해야 하는 문제로만 여기지 않고, 하나의 프로그램을 만들어낸다고 생각하며, 좋은 코딩 습관을 들이기 위해 노력할 계획입니다.
커뮤니티
우테코 프리코스에는 디스코드 커뮤니티가 있습니다. 처음에는 들어갈지 고민을 했었는데, 결론적으로 들어가길 참 다행이었다고 생각합니다.
미션이 시작하기도 전부터 토론 글이나 정보 공유 글을 작성하는 분들도 꽤나 계셨습니다. 심지어 어떤 분은 하루에 글을 5개 이상이나 올리셨는데, 그 글의 퀄리티와 양도 상당했습니다. 분명히 개발이라는 분야를 좋아하지 않고서는 할 수 없는 정도였습니다.
그들의 열정과 노력에 함께 자극을 받으며, 스스로를 계속해서 일깨웠습니다.
무엇보다 가장 좋았던 점은, 나와 함께 하나의 문제를 해결하기 위해서 고민하고 서로 힘을 주는 공동체에 속한 기분을 느낄 수 있다는 점이었습니다.
개발 공부를 시작하고 거의 대부분 혼자 학습을 진행했기 때문에, 더욱 그러한 감정을 느낀 것 같습니다. 왜 개발자에게 커뮤니티가 중요하고, 지식을 나누는 장이 필요한지를 알 수 있었습니다.
열정이 빛나는 사람들과 함께 우테코라는 단체에 더 속하고 싶다는 열망이 커지는 순간이었습니다.
MVC 패턴? DDD?
하지만 좋은 부분만 있지는 않았습니다.
커뮤니티에는 제가 모르거나 들어보기만 한 용어들을 사용하는 분들도 정말 많았습니다. 과연 내가 여기 있는 게 맞을까라는 생각도 들며 조금 주눅이 들기도 했습니다.
MVC 패턴, 헥사고날 아키텍처, DDD 등.. 너무나 자연스럽게 말을 하고 토론하는 사람들을 보며 마음이 조급해져 급하게 용어를 공부하기도 하였습니다.
그렇게 되자, 어느 순간 지금 이 프리코스가 즐겁지 않게 느껴졌습니다.
프리코스에 임하는 자세
그 때 아주 시의적절하게도 우테코 코치 포비님께서 토론의 장을 하나 여셨습니다.

마침 이러한 고민도 들었던 때라, 저도 한마디를 거들었고, 정말 수많은 사람들이 본인의 생각을 공유하는 순간에 함께할 수 있었습니다.
다른 사람들의 댓글을 보며 나만 이렇게 느낀 게 아니구나. 라는 동질감도 느끼고, 많이 배우기도 하였습니다.
그리고 프리코스를 어떤 마음가짐으로 임할 지도 생각해보았습니다.
저는 합격이 아니라 성장에 모든 초점을 맞추기로 결정했습니다.
합격을 하려고만 노력하다보면, 무조건적으로 함께 하고 있는 사람들과 비교를 하게 될 것이고, 이는 저의 페이스를 망치게 될 것입니다.
그렇기에 저는 4주라는 기간 동안 하루하루 성장하는 제 모습을 보며 뿌듯함과 행복함을 느끼고, 실제로 성장한 모습으로 더욱 좋은 개발자가 될 것입니다.
이렇게 스스로의 마인드를 잡고 나니 프리코스 과정이 너무 즐거워졌고, 다른 사람들의 말들을 견제하는 것이 아니라 그저 흡수할 수 있었습니다.
💡 컨벤션
미션을 통과하기 위해서는, 깃허브도 어느정도 사용할 줄 알아야 합니다.
저는 학교 수업이나 프로젝트를 통해서 깃허브 사용법은 숙지하고 있었지만, 커밋 메세지에 대한 큰 생각은 하고 있지 않았습니다.
하지만 프로젝트가 커지고, 기능과 이슈가 많아질 수록 정확하고 세세한 커밋 메세지를 작성하는 것이 정말 중요하다는 걸 느꼈습니다.
그렇기 때문에 1주차 미션을 시작하면서 커밋 컨벤션 파일을 생성해 적용하였고, 이는 저에게 편리함을 제공해 주었습니다.
하지만 또 하나 고려해야할 점이 있었는데, 이는 바로 자바 컨벤션이었습니다.
https://myeonguni.tistory.com/1596
위의 링크에 아주 자세하게 잘 나와있어 읽어보았습니다.
이전이었다면 이렇게까지 빡빡하게 짜야해? 했을 것 같지만, 개발자들 간의 소통과 가독성이 정말 중요하다는 것을 알게 된 지금으로써는 오히려 흥미로운 부분이었습니다.
이번 1주차에서는 지키지 못한 부분들도 꽤 있는 듯 하여 아쉬움도 남지만, 종종 읽어보며 체득할 예정입니다.
💡 설계 먼저? 구현 먼저?
여러 사람과 함께 하는 프로젝트에서는 몇 번 설계를 해 본 경험이 있지만, 혼자서 간단한 프로그램을 만드는 데 기능 명세서를 작성한 건 이번이 처음이었습니다.
막상 아무것도 없는 상태에서 요구사항을 분석하고, 리드미 파일을 작성하려니 막막했고, 결국 문서화를 하는 과정이 이번 과제에서 가장 많은 시간을 쓴 부분이 되었습니다.
우선은 최대한 기능들을 나누고, 메소드를 세세하게 구현해보려고 노력했습니다.
평소였다면 그냥 코드 한 줄 더 추가하면 될 것을, 메소드를 하나 만들어야 하니 여간 귀찮고 머리 아픈 일이 아니었습니다.
그리고 과연 얼마나 세세하게 해야 하고, 이건 어디에 둬야 할지 라는 고민도 골치 아픈 주제였습니다.
코드를 일절 짜지 않고 머리 속으로만 설계해서 문서를 만든다는 것은 지금 제 능력으로는 거의 불가능에 가까웠습니다.
결국 너무 시간이 오래 지체되자, 메소드를 하나 둘씩 만들어가며 가닥을 잡았고, 기능 명세서도 이에 따라 수정을 거치며 결국 완성해낼 수 있었습니다.
물론 우테코에서는 기능에 대한 고려를 먼저 해보라는 요구가 있었기에, 이러한 점에서 제가 고민한 시간이 아깝지는 않았습니다.
하지만 다음부터는 어느 정도 큰 틀만 잡아둔 후에, 코드를 작성하며 세세한 부분은 더 채워나가는 방향이 저에게는 더 맞겠다라는 생각이 들었습니다.
처음부터 기능명세서를 완벽하게 짜면 좋겠지만, 그러기는 쉽지 않으니 천천히 저의 방식을 찾아가면 될 것 같습니다.
미션을 풀면서 많은 사람들이 코드 관리, 가독성 면에서 MVC 패턴을 활용해 코드를 짠다는 것도 알게 되었습니다.
그러나 현재 상태에서는 미숙한 부분을 도전해보기보단 제 실력으로 제출한 후에 코드 리뷰를 받으며 수정할 부분을 찾는 것이 더 좋겠다라는 생각이 들어 원래 스타일대로 작성을 하였습니다.
💡 테스트 코드
이번 미션을 진행하면서 수많은 메소드들을 구현했습니다. 그리고 커밋을 하기 전 각각 테스트를 진행해보았는데, 아직 테스트 코드를 작성하는 법을 잘 몰라 결국 메인 메소드 내에서 직접 실행을 시키며 하나하나 확인하는 과정을 거쳤습니다.
5기에 합격하신 개발자분의 블로그에서, 메소드 별로 테스트 코드를 작성하는 게 도움이 되었었다고 했는데 그 이유를 알 것 같은 순간이었습니다.
더 효율적인 방법을 찾아야겠다는 생각이 들었습니다.
💡 2주차에 도전해볼 것들
1. 테스트 코드 먼저 작성
바로 위에서 말한 것처럼, 테스트 코드를 작성하는 방법에 대해 학습할 것입니다.
그리고 구현을 하기 전에 테스트 코드를 먼저 작성해보며, 구현한 메소드가 잘 돌아가는지와 예외 처리가 잘 되는지를 한 번에 확인해보려고 합니다.
2. 자바 컨벤션 최대한 지키기
아직까지는 지키지 못한 부분이 많습니다. 한 주가 지날수록 더욱 조건이 까다로워질 것이기 때문에, 미리 이러한 규칙을 체화시키는 것이 좋다고 생각합니다.
더불어, 객체 지향에 대한 공부를 더욱 진행하며 의의에 맞게 사용하려고 노력할 것입니다.
많은 분들이 추천하고 많이 읽으신, ‘객체지향의 사실과 오해’ 라는 책도 읽어볼 계획입니다!
3. MVC 패턴으로 구현
1주차의 미션에서는 그렇게 많은 클래스와 메소드를 사용하지는 않았습니다.
하지만 점점 이는 많아질 것이고, 그렇다면 위치를 잘 정하는 것 또한 매우 중요해질 것이라고 생각합니다.
이 또한 개발자의 실력을 가늠하는 데 판단될 수 있는 부분이기에, 미숙하더라도 한 번 도전해보고 리뷰를 받을까 합니다.
4. 리뷰 진행
우선은 5명 이상의 참가자분들의 코드를 리뷰해볼까 합니다.
아직 제대로 코드 리뷰라는 것을 해본 적은 없어서 떨리기도 합니다. 하지만 이렇게 많은 사람들의 코드를 볼 수 있고, 리뷰해볼 수 있다는 것도 정말 좋은 경험이라고 생각하기에 도전하기로 결정했습니다.
물론 제 코드도 리뷰를 부탁드리면서 많이 배워가려합니다.
💡 마무리
글을 적다보니 의도한 건 아니지만 조금 딱딱하고 차가워보이는 것 같습니다. 아직 글을 쓰는 능력도 많이 부족함을 느낍니다.
이 또한 성장하는 과정이라고 생각을 하고, 다음에는 더 좋은 글을 작성해보아야겠습니다!
(1주차 깃허브 : https://github.com/bbbang105/java-baseball-6)