우테코 프리코스를 오기까지 🔥
우테코와의 인연은 취업 준비를 하던중 친구로부터 "난 우테코를 지원하겠다~"는 이야기를 듣고 우테코에 대해 조사를 하며 시작되었습니다. 우테코에 대해 조사를 하며 우테코는 개발자로 성장하기에 좋은 모든 환경을 갖추었다는 것을 깨달았고 우테코에 들어가서 개발자로서 큰 성장을 하겠다는 목표를 세워 꾸준히 공부를 하였습니다.
특히 현재 학습에 많은 부족함을 느껴 취업 전에 더 많은 공부와 프로젝트를 진행하며 개발자로서 성장을 하고 싶다는 생각을 가진 저에게 우테코는 최고의 선택지라고 생각했습니다.
우테코는 우아한형제들에서 지원하는 IT 교육 프로그램입니다. 비슷한 타사 프로그램으로는 SSAFY, 부트캠프, 42Seoul, DevCamp등이 있습니다.
그렇게 우테코 지원을 하게 되었고 현재 서류와 1차 코딩테스트 전형을 합격하며 우테코의 프리코스 전형을 진행하게 되었습니다. 😁😁
프리코스 1주차 과제
🚀 미션 간단 설명
해당 미션은 우리가 학생시절 자주 하였던 숫자 야구게임을 코드로 구현하는 미션입니다. 대결은 컴퓨터와 하는 것으로 컴퓨터가 랜덤하게 3자리 수를 만들고 유저는 해당 수를 맞추는 방식으로 진행됩니다.
컴퓨터가 만드는 값은 서로 서로 다른 1~9까지의 수로 이루어진 3자리 수의 숫자이며 입력값에 따른 힌트를 기반으로 숫자를 맞춰야합니다.
🔒 제약사항
- 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행해야한다.
- 기능 요구사항, 프로그래밍 요구사항, 과제 진행 요구사항을 지켜야한다.
- Java code convention을 지키며 코딩해야한다.
- indent depth가 3이 넘지 않도록 구현해야합니다.
- Scanner, Random API대신 camp.nextstep.edu.missionutils에서 제공하는 Randoms, Console API를 활용해 구현해야 합니다.
- Applicatoin Test에 주어진 테스트 케이스가 모두 통과해야합니다.
🎓 프리코스 1주차에서 배운점
1. 요구사항 정리
과제 요구사항에 Git의 커밋 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가해라
라는 요구사항이 있어 개발을 하기 전에 개발을 해야할 내용들에 대해 미리 생각을 하며 아래와 같은 구현할 기능 목록을 만들었습니다.
요구사항을 개발 전에 정리를 하니 개발에 있어 "다음에는 어떤 내용을 만들어야하지?"라는 내용의 생각과 각각의 기능별 주의해야할 사항, 조건 등을 쉽게 인지하고 코드를 작성할 수 있어 편리함을 느꼈습니다.
2. Java프로그래밍 코딩 표준
프리코스를 진행하며 Google Java Style Guide에 대해 처음 접하며 해당 내용을 하나씩 세밀하게 번역하고 공부하였습니다.
이전 코드를 작성할 때는 코딩 표준이라는 것을 접해본 적이 없어 아무런 생각 없이 코드를 작성하곤 하였습니다.
코드도 일정 규칙을 따라 작성하면 가독성이 좋고 변수와 메서드들의 역할을 쉽게 파악할 수 있다는 것을 깨달고 해당 내용을 공부하며 번역본을 만들어보기도 하였습니다.
처음부터 완벽하게 해당 가이드를 따르며 코딩하기는 어려우나 가이드를 자주 보며 가독성 좋은 코드를 작성하기 위해 노력해야겠다는 다짐을 하였습니다.
3. 가독성 좋은 코드
이전까지 프로그래밍을 할 때 indent depth는 기본적으로 3,4까지 가게되며 복잡한 로직의 경우 주석을 달지 않으면 가끔씩 코딩을 하면서도 내가 작성한 코드가 헷갈릴 때가 있었습니다.
과제의 요구사항 중 함수는 한 가지 일만 하도록 최대한 작게 만들어라
, indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
의 조건을 따르며 프로그래밍을 하다 보니 평상시보다 더 많은 시간이 걸렸지만 코드의 가독성이 좋아지는 것을 배울 수 있었습니다.
앞으로 프로그래밍을 할 때도 위의 2가지 조건들을 생각하며 최대한 가독성이 좋은 코드를 작성하도록 습관화시키겠다는 다짐을 하였습니다.
4. 크게 관심 갖지 않았던 Test
이전까지는 Unit Test에 대해서는 개념 정도만 알고 있었는데 해당 1주차 과제를 진행하며 Test의 중요성에 대해 알게 되었습니다.
처음에는 주어진 Test코드를 실행시킬 때 NsTest.java
, assertRandomNumberInRangeTest
, assertSimpleTest
와 같은 처음보는 내용대한 호기심으로부터 시작되었습니다.
처음 보는 코드에 대한 이해를 하고자 NsTest & Assertion 분석을 하며 정리를 하였고 그러다보니 다른 여러 메서드에 대해서 Unit Test를 하고자 하는 욕심이 생겼습니다.
내가 작성한 메서드들에 대해 Test를 하고자 Unit Test에 대해 먼저 알아보며 Unit Test정리를 하였고 몇몇 테스트를 진행하였습니다.
그 결과 Input값이 3자리의 수가 입력되어야하는데 내가 작성한 코드는 4자리수 이상의 입력값에 대해서만 Exception을 발생시키고 2자리, 1자리 수에 대해서는 IllegalArgumentException
을 발생시키지 않는 다는 것을 알 수 있었습니다.
테스트 코드를 작성하며 코드 작성시 알아차리지 못하였던 예외상황에 대해서 알게 되며 테스트의 중요성에 대해 다시 한번 깨닫게 되었습니다.
5. Git 커밋 메세지 규약
프리코스의 과제 진행 요구사항으로 the AngularJS commit conventions를 참고하여 Commit log를 남기라는 요구사항이 있어 커밋 메시지 규약이라는 것에 대해 공부를 하는 기회를 갖게 되었습니다.
이전까지 팀 프로젝트와 개인 프로젝트 진행을 할 때는 commit규약을 따로 정하지 않고 다들 원하는 log를 붙이며 커밋을 하였습니다. 그러다보니 확실히 정황히 어떤 내용을 추가하였고 변경하였는지 단번에 알기 힘들었습니다. 확실히 아래의 이미지를 보면 "alter변경, 텍스트 영어로 변경", "js파일 생성"등 log를 통해 어떤 파일의 내용을 변경하였는지 예측할 수 없으며, 무엇을 변경하였는지 확인을 하려면 커밋 내용을 직접 들어가서 확인을 해야지만 내용을 알 수 있었습니다.
그러나 프리코스를 진행하며 the AngularJS commit conventions을 읽고 공부하며 Commit log의 형식을 통일하였을 때의 장점을 알게 되었고 Commit log의 형식을 바꾸게 되었습니다.
그 결과 아래와 같이 어떤 기능을 추가하고 변경한 커밋이며 어떠한 내용을 리펙토링 했는지에 대해 log를 통해 유츄할 수 있게 되었습니다. 이러한 규칙은 여러 팀원들과 함께 큰 프로젝트를 진행할 때 장점을 크게 느낄 수 있을것이라 생각됩니다.
아쉬운점😥 : 모든 과제를 제출하고 다시 돌아보니 몇몇 log들의 Type을 잘못 설정한 것들이 있었습니다. 예를들면 코드의 indent를 맞추는 formatting작업을 하는데
style
이 아닌refactor
를 사용하는 등의 잘못된 log를 남긴 것들이 보였습니다. 이에 다음 2주차 과제부터는 commit log형식을 더욱 더 신경쓰며 학습을 해야겠다는 다짐을 하였습니다.
학습을 하며 해당 문서를 번역하고 정리하며 Git 커밋 메세지 규약 정리 - The AngularJS commit conventions.를 작성하였습니다.
최종 후기
프리코스를 진행한지 1주일도 지나지 않았지만 많은 것을 배울 수 있었습니다.
indent depth를 2까지 허용하는 요구사항 등을 지키고 그동안 접하지 않은 Git커밋 메시지 규약, Java 코드 컨벤션과 같은 내용들을 공부하며 코딩을 하다보니 내가 작성한 코드들의 가독성이 높아진 것을 확인할 수 있었습니다.
프리코스를 진행하며 몇일 사이에 이러한 발전을 할 수 있었는데 남은 기간동안 얼마나 더 많은 학습을 하고 발전을 할 수 있을지 기대가 됩니다.
남은 프리코스 기간동안도 많은 것을 학습하며 더욱 더 성장하는 개발자가 되도록 하겠습니다.🔥🔥