on
우아한테크코스 4기 프리코스 후기
우아한테크코스 4기 프리코스 후기
멀리 보였던 3주간의 우테코 프리코스 기간이 끝났습니다. 매주 수요일, 떨리고 기대되는 마음으로 미션을 받아서 3주 동안 정신없이 코딩하다 보니 벌써 마지막 세 번째 미션을 마무리하게 되었습니다. 우테코에 꼭 붙고 싶어서 모집공고가 나오고부터 지금까지 대략 한 달 반 정도 되는 기간 동안 여러 가지로 열심히 준비했습니다. 몇 번을 지우고 다시 쓴 자소서부터 코딩 테스트 준비, 그리고 프리코스까지의 과정을 거치면서 올해 가장 열심히 산 기간이 아닐까 라는 생각이 듭니다. 아직 마지막 코딩 테스트가 남았지만 프리코스를 마무리하면서 간단한 프리코스 후기를 남겨보려고 합니다. 우테코 프리코스의 정보라기보다는 3주간의 미션을 하면서 개인적으로 느낀 점과 배운 점들을 정리해 보겠습니다.
처음부터 끝까지 스스로 구현하기
https://github.com/woowacourse/java-baseball-precourse/pull/462
https://github.com/woowacourse/java-racingcar-precourse/pull/463
https://github.com/woowacourse/java-vendingmachine-precourse/pull/86
저 같은 경우 비전공자이고 아직 학습 기간도 길지가 않아서 주로 인터넷 강의를 통해 실습 예제들을 따라서 만들어 본다던가 인터넷에 올라와 있는 코드나 프로그램을 따라서 만들어 보는 식으로 학습을 했습니다. 이렇게 미리 정답이 나와있는 것을 따라서 하나하나 구현하는 것도 공부가 되지만 스스로 판단하면 처음부터 끝까지 혼자 구현하는 것과는 많은 차이가 있다는 것을 프리코스를 진행하면서 다시 한번 느끼게 되었습니다.
프리코스는 미션 요구사항에 맞춰서 내가 판단한 나의 방식으로 어플리케이션을 구현해 볼 수 있는 좋은 기회였습니다. 아주 복잡하고 어려운 어플리케이션은 아니라서 요구사항을 이해하는 것 까지는 괜찮았지만 이걸 프로그램으로 직접 구현한다는 건 생각보다 금방 되지 않았습니다. 스스로 고민하면서 프로그램 구조에 대한 결정을 내리고 문제 해결의 논리도 직접 선택하여 완결성 있는 프로그램을 만드는 연습이 저에게 많은 도움이 되었습니다. 과정 자체가 사람들과 직접적인 교류를 하면서 코드를 작성하는 것이 아니라 혼자 생각하는 시간이 많을 수밖에 없는 구조라서 가끔 외롭기도 했지만 힘든 만큼 그만큼 성장한 기분이 드는 경험이었습니다.
코딩 컨벤션과 환경 설정
https://naver.github.io/hackday-conventions-java/#editorconfig
프리코스 미션에서는 기능적인 요구사항 외에도 코딩 컨벤션과 환경 설정도 하나의 중요한 요구사항이었습니다. 특히 첫 번째 미션을 시작하면서는 이런 코딩 컨벤션과 개발 환경 세팅하는데 하루 이틀 정도를 쓴 거 같습니다. 개발이라는 것이 다른 사람과의 협업이 필수인 작업이다 보니 원활한 의사소통을 위해서 문법적인 코딩 컨벤션뿐만 아니라 새줄 문자의 종류라든지 자바 버전, 파일 인코딩 같은 작업 환경의 통일성도 고려해야만 합니다. 지금까지는 혼자서 코딩을 하다 보니 그냥 내가 편한 방식으로 마음대로 코드를 작성하고 파일을 만들어 왔었기 때문에 프리코스의 이런 요구사항을 지키는 것이 쉽지는 않았지만 하다 보니 점점 손에 익어 갔습니다. 이런 맥락에서 프리코스를 하면서는 항상 어떻게 하면 다른 사람이 내 코드를 봤을 때 쉽게 이해할 수 있을까 고민하면서 작업을 했던 것 같습니다.
git
https://velog.io/@outstandingboy/Git-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%8B%9C%EC%A7%80-%EA%B7%9C%EC%95%BD-%EC%A0%95%EB%A6%AC-the-AngularJS-commit-conventions
코딩 컨벤션, 환경 설정의 중요성과 마찬가지로 협업을 위해서 git 의 사용은 필수적이라고 할 수 있습니다. 우테코 프리코스는 문제 출제와 제출을 모두 github 를 통해서 하고 있어서 git 은 필수적으로 익혀야 하는 부분이었습니다. 프리코스를 하기 전까지는 인텔리 제이에서 제공하는 GUI 기반 툴을 사용해서 git 을 관리했는데 이번을 계기로 CLI 기반으로 하는 git 관리법을 찾아서 공부하게 되었습니다. git 에 대한 부분은 사실 미루고 미뤘던 부분인데 우테코를 기회로 제대로 배우게 되니 이전까지 불안하게 사용하던 git 이 익숙해지고 이제는 작업하는데 많은 도움을 주는 툴이 되었습니다.
단순히 git 을 사용하는 것뿐만 아니라 커밋 메시지 컨벤션을 지키면서 로그를 만들어 나가는 연습도 하게 되었습니다. 우테코 미션은 기본적으로 어플리케이션 세부 기능 단위로 커밋을 하는 것을 원칙으로 하고 있습니다. 이것을 지키기 위해서 커밋을 하다 보니 언제 어떤 단위로 커밋을 해야 할지 항상 생각을 하면서 작업해야 했고 커밋 메시지를 어떻게 작성해야지 다른 사람이 봤을 때 쉽게 작업 과정과 코드 구조를 이해할 수 있을까도 고려해야 했습니다. 코드를 한참 작성하고 로그를 들여다보니 마음에 들지 않아서 다시 한 적도 있고 여러 시행착오를 거쳤지만 이제는 훨씬 익숙해진 거 같습니다.
이름 짓기의 중요성
첫 번째 미션에서 나름대로 열심히 한다고 구현한 코드에 주석을 덕지덕지 붙여서 코드를 설명하려고 했었습니다. 당시 생각에 다른 사람들이 이해하기 쉬우라고 주석을 많이 달았던 것이었는데 1주 차 피드백 문서를 보고 잘못된 방법이라는 것을 깨닫게 되었습니다. 구구절절 주석을 다는 것이 아닌 클래스나 메서드의 이름을 통해서 그 의도를 드러내라고 피드백을 받고 다시 제가 작성한 코드를 보니 설명만 지저분하지 이름을 짓는 것에는 다소 소홀히 한 게 느껴졌습니다. 이후의 미션에서는 주석을 거의 달지 않았고 최대한 이름으로 해당 메서드, 클래스의 역할과 의도를 나태낼 수 있도록 노력하면서 작업을 했습니다. 이 부분은 프리코스를 하면서 개인적으로 크게 얻어 간 부분 중 하나라고 생각합니다.
객체지향 프로그래밍
프리코스를 준비하면서 '객체지향의 사실과 오해'라는 책을 읽었습니다. 어디선가 추천을 받았는데 프리코스를 대비하면서 읽으면 좋을 것 같아서 다른 것보다 이 책을 읽으면서 프리코스를 준비했습니다. 그래서 개인적으로 이 책에서 읽은 객체지향 프로그래밍의 내용을 코드에 녹여내는 것을 목표로 삼고 미션에 임했습니다. 결과적으로 '객체지향의 사실과 오해'를 읽고 온 것은 잘한 일이었습니다. 우테코 프리코스 자체적으로도 참가자들이 미션을 매주 매주 진행하면서 자연스럽게 객체지향 프로그래밍의 요소를 코드 속에 녹이도록 유도하고 있는 거 같았습니다
프리코스 프로그래밍 요구사항 중에는 메서드의 라인 제한과 들여쓰기 제한이 있습니다. 이런 요구사항을 지키기 위해서는 기본적으로 메서드가 비대해지면 안 됐고 하나의 메서드가 한 가지 일만 잘하도록 만들어야 했습니다. 하나의 메서드, 클래스가 한 가지 일만 잘하도록 하라는 것은 프 리코스 과정에서 반복적으로 강조하는 부분들 중 하나였습니다. 이런 연습은 결과적으로 큰 책임을 작은 책임으로 적절하게 나누는 연습이 되었고 자연스럽게 나누어진 책임들을 모아서 협력에 효과적인 한 가지 역할을 잘하는 객체를 설정하는 것에까지 연결이 되어 객체지향 프로그래밍의 아이디어를 자연스럽게 체득할 수 있었습니다.
협력, 책임, 역할과 같은 객체지향 프로그래밍 구조에 대해서 고민하고 구현해 보면서 느낀 점은 안정적인 구조 위에서 코드를 구현하는 것이 코드를 짜는데도 더 편하고 전체 어플리케이션의 구조를 이해하기도 쉽다는 것이었습니다. 안정적인 구조 위에서는 예외 처리 항목을 추가한다거나 다른 기능을 추가할 때도 훨씬 편하고 코드를 작성하면서 발생한 실수나 에러를 파악하기에도 훨씬 용이하다는 느낌이 들었습니다.
스스로 하는 학습
프리코스를 진행하면서 했던 저의 학습방법을 간단하게 설명하자면 우선 진행방식과 요구사항들을 잘 읽고 체크해야될 부분들을 리스트화 합니다. 이때 피드백 문서도 읽으면서 내가 놓친 부분들에 대한 체크리스트를 만듭니다. 그리고 전체적인 어플리케이션의 동작을 상상하면서 기능목록을 만듭니다. 만들어진 기능목록을 바탕으로 순서대로 구현합니다. 막히거나 필요한 지식이 있을 때는 잠시 멈추고 관련 내용을 학습합니다. 기능 목록을 중간중간 업데이트 해가면서 1차적인 구현을 완료 합니다. 그리고 코드를 쭉 다시 보면서 리팩토링을 하고 더 나은 방법은 없는지 고민하면서 수정하는 작업을 계속했습니다.
우테코 프리코스는 우테코가 지향하는 학습방식을 잘 보여주는 과정이라고 생각합니다. 단순히 목록화되고 정리된 지식을 주입하는것이 아닌 제시된 미션을 해결하기 위해서 필요한 부분들을 스스로 찾아서 학습하게 만드는 방식, 그 안에서 학생들이 조금은 덜 헤매도록 약간의 가이드라인을 제시하는 방식은 우테코의 철학을 잘 나타내는 것 같습니다. 실제로 3주간 프리코스를 하면서 그때 그때 필요로 하는 지식들이 있었고 미션 중간중간 공부해 가면서 미션을 구현해나갔던 것 같습니다. 미션 자체도 재미가 있었지만 여러모로 3주간 꾸준히 공부를 해나갈수 있었던 이유는 이런 설계에도 이유가 있지 않을까 생각됩니다.
정말 프리코스라도 해보고 싶다는 마음으로 있다가 합격 메일을 받고 기뻤던 것이 3주 전이 었는데 그 프리코스가 이제는 마무리 단계에 왔습니다. 프리코스 참여를 간절히 원했지만 기회를 받지 못한 분들을 생각해서라도 무조건 열심히 해야겠다는 각오로 임했던 시간이었습니다. 후기를 적으며 1주 차 때 제출한 코드를 다시 봤습니다. 당시 제출하면서 '더는 고칠게 없다!'라고 생각했는데 지금단계에서 보니 수정하고 싶은게 산더미 같아서 부끄러워졌습니다. 하지만 지금 이렇게 느낀다는 건 3주간 나름에 성장이 있었다는 생각도 들어서 조금은 뿌듯하기도 합니다. 아직 많이 부족하지만 그래도 이제는 문제 상황에 닥치게 됐을 때 '모르는 부분은 공부하면 되니까 일단 차근차근 덤버보자' 라는 마인드가 생긴 것이 저의 가장 큰 성장인것 같습니다. 이제 마지막 코딩 테스트가 남았습니다. 제발 무사히 잘 봐서 꼭 합격하고 싶습니다. 그래서 1년 후에 우아한테크코스의 후기를 쓰면서 프리코스 때 제출한 코드가 부끄럽다고 말하고 싶습니다 :)
from http://jojogreen.tistory.com/22 by ccl(A) rewrite - 2021-12-14 18:27:50