bass
article thumbnail

글의 목적

우테코의 프리코스가 무엇이고, 무엇을 하는지 그리고 어떻게 공부할 수 있는지 궁금한 분들을 위해 적습니다.

누구나 지원할 수 있고, 경험할 수 있습니다. (코딩테스트가 사라졌습니다)

프리코스?

프리코스는 pre-course라는 말 그대로 우아한테크코스 맛보기입니다.

매주 과제가 주어지고 일주일 동안 스스로 해결해서 제출합니다. 그리고 나중에는 프리코스와 비슷한 형식으로 최종 코딩테스트를 보게 됩니다.

프리코스를 하며 내가 우테코와 잘 맞는지 알 수 있고, 열심히 했으면 최종 코딩테스트에서 빛을 발할 수 있다고 합니다.

우테코를 하지 않더라도 프리코스를 진행하는 사람이 있을 정도로 학습에 도움이 되는 과정입니다.

프리코스가 학습이 되는 이유

1. 요구 사항

과제는 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항이라는 3개의 요구사항이 주어집니다.

저희가 평소에 하는 코딩은 기능을 구현하는데 집중합니다. 그러나 우테코는 여기서 프로그래밍 요구사항을 추가해서 코딩의 품질까지 신경 쓰도록 합니다.

숫자 야구 게임 프로그래밍 요구 사항

이처럼 기능과는 관련 없지만 들여 쓰기, 함수의 길이, 테스트 등 코드의 품질을 높이는 요구사항이 있고, 이는 매주 발전합니다.

2. 코치와 수다 타임 (코수타) / 피드백

1주 차 코수타: https://www.youtube.com/watch?v=wwsAvbBGU-8 

 

과제가 끝나고 새로운 과제가 주어지기 1시간 전, 코치분들이 유튜브 라이브 방송을 하십니다.

이때 질문을 주고받으며 지난 과제의 피드백을 하거나 개발자에게 도움이 되는 조언을 많이 해주십니다. 예를 들면 테스트를 왜 진행해야 하는가? 좋은 개발자란 무엇일까? 와 같은 질문의 대답입니다.

그리고 다음 과제의 조언도 항상 해주시기 때문에 시청하면서 큰 도움이 되었습니다.

 

또한 과제가 끝나면 이메일로 공동 피드백이 옵니다. 내가 직접 구현한 코드의 피드백이기 때문에 더욱 와닿고 즉시 다음 과제에 적용할 수 있기 때문에 많은 도움이 되었습니다. 

3. 커뮤니티

프리코스 깃헙 커뮤니티 : https://github.com/orgs/woowacourse-precourse/discussions

 

GitHub: Let’s build from here

GitHub is where over 94 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

'혼자'보다 '함께'가 더 좋은 이유입니다. 분명 함께가 더 좋습니다. 우테코에서는 '함께'를 더욱 잘 활용할 수 있도록 커뮤니티를 활성화하고 관리해 주십니다.

프리코스 커뮤니티에서는 제출을 마감한 과제에 한에서 다양한 궁금증을 서로 토론할 수 있고, 각자의 해결방법을 공유할 수 있습니다.

또한 풀리퀘스트를 하면 깃헙에서 직접 리뷰를 진행할 수 있는데, 이 리뷰기능을 활용해서 서로의 코드를 리뷰하며 학습을 할 수 있습니다. 저 또한 과제마다 리뷰를 진행했고 다음 과제에서도 큰 도움이 되었습니다.

GitHub 코드 리뷰

1주 차 - 온보딩

과제 : https://github.com/woowacourse-precourse/javascript-onboarding

내 제출 : https://github.com/woowacourse-precourse/javascript-onboarding/pull/164

 

[온보딩] 유강현 미션 제출합니다. by bassyu · Pull Request #164 · woowacourse-precourse/javascript-onboarding

 

github.com

알고리즘 7문제를 해결하면 됩니다. 개인적으로 알고리즘의 난이도는 백준 실버 4~1 정도였습니다.

과제의 핵심은?

1. 스스로가 중요하다

알고리즘 문제들의 입력 범위나 시간, 메모리 제한이 정확하게 주어지지 않았고, 나중에 알았지만 이는 의도된 것이었습니다. 현실에는 더 정답이 없고 주어지는 것이 부족하기 때문이라고 합니다.

입력값을 예상하며 유연한 코드를 스스로 작성하는 것이 이번 과제의 핵심이지 않을까 생각합니다.

 

2. 요구사항 분석

스스로 해결하기 위해 중요한 것 중 하나가 바로 요구사항 분석이라고 생각합니다.

코치분들도 메일이나 문서를 꼼꼼히 읽고 문제를 이해하는 것도 개발자의 역량이라고 강조해 주셨습니다.

2주 차 - 숫자 야구 게임

과제 : https://github.com/woowacourse-precourse/javascript-baseball

내 제출 : https://github.com/woowacourse-precourse/javascript-baseball/pull/14

 

[숫자 야구 게임] 유강현 미션 제출합니다. by bassyu · Pull Request #14 · woowacourse-precourse/javascript-baseb

 

github.com

프리코스의 단골 과제인 숫자 야구 게임입니다. 콘솔에서 동작하는 숫자 야구 게임을 구현하면 됩니다.

고민한 부분 - 비동기 입력

입력을 받기 위해서는 꼭 제공된 라이브러리를 사용해야 합니다. 그런데 이것이 비동기입니다. while문 안에 입력을 넣으면 입력을 받기도 전에 다음 코드를 실행하고 무한반복 합니다.

해결하기 위해서는 어쩔 수 없이 콜백 안에 입력 후 실행할 함수를 넣어줘야 합니다. 그리고 이는 콜백지옥을 만들기 때문에 코드를 깔끔하게 보이기 위해서 노력했습니다.

성장한 부분

1. 컨벤션

Airbnb 컨벤션을 더욱 정독하고 prettier 설정을 추가하며 코드를 작성했습니다. 반면 커밋 컨벤견은 처음이었는데 직접 적용해보니 코드가 발전되는 모습이 한눈에 들어와서 보기 좋았습니다.

 

2. 함수 나누기

인덴트를 최대 2 제한하기 위해서 함수를 나누었고 자동으로 함수의 크기가 작아졌습니다. 작아진 함수의 네이밍이 편해짐과 동시에 주석이나 설명없이 가독성이 좋은 코드를 작성할 있었습니다.

 

3. 테스트 작성

한 가지함수를 고치면 다른 함수나 기능에 영향이 가서 원래의 결과와 달라질 있습니다. 테스트를 작성하지 않으면 직접 실행해보면서 테스트해야 하고 테스트를 해봐도 제대로 한건지 몰라서  찜찜했지만, 테스트 코드를 미리 작성하면 이전과 기능이 동일한지 즉시 피드백을 받을 있어서 좋았습니다.

테스트가 처음이어서 스트레스도 조금 받고 작성 시에는 몰랐지만 실제로 테스트 덕분에 많은 실수를 즉시 해결할 있었고 리팩터링할 때마다 테스트로 안심할 있었습니다.

3주 차 - 로또

과제 : https://github.com/woowacourse-precourse/javascript-lotto

내 제출 : https://github.com/woowacourse-precourse/javascript-lotto/pull/24

 

[로또] 유강현 미션 제출합니다. by bassyu · Pull Request #24 · woowacourse-precourse/javascript-lotto

📝 구현할 기능 목록 UI : App.js 순위 계산 : Lotto.js 돈 계산 : Calculator.js 검증 : Validator.js 입력 / 출력 1. 구입 금액 입력 App.recordPay 2. 구입한 로또 출력 App.printLottos 3. 당첨 번호 입력 App.recordWinNumbers

github.com

돈을 낸 만큼 랜덤 로또를 발행합니다. 당첨 번호를 입력하면 수익률을 계산해 줍니다.

과제의 핵심 - 클래스 나누기

웹개발을 공부할 때 라이브러리의 활용이나 기능에는 집중했지만 객체지향적 설계에는 큰 고민을 하지 않았습니다.

가장 많이 고민은 클래스를 나누는 기준이었습니다. 일단 기능 목록을 작성하고 함수를 최대한 작은 단위로 설계해서 함수부터 구현했습니다. 그러고 나니 입력과 출력 기능, 로또 관련 기능, 관련 기능, 검증 기능이라는 공통점을 가진 함수 집합이 생겼고 함수를 묶어서 하나의 클래스로 분리할 있었습니다.

 

클래스를 분리하고 나니 해당 함수가 무슨 역할을 하는지 한눈에 보기 좋았고, 함수끼리 공통으로 사용하는 변수를 필드로 공유할 있어서 유지 보수하기에도 좋았습니다. 예를 들어서 구입 금액을 필드로 저장하면 하나의 객체 안에서 구입 금액을 검증하거나, 구입 개수를 계산하거나, 수익률을 계산할 공통으로 사용할 있습니다.

그래서 테스트 작성도

기능별로 클래스를 나누고, 함수를 최대한 작은 단위로 구현했기 때문에 테스트 또한 클래스별로 나누어서 함수 단위로 작성하기 편했습니다.

4주 차 - 다리 건너기

과제 : https://github.com/woowacourse-precourse/javascript-bridge

 

내 제출 : https://github.com/woowacourse-precourse/javascript-bridge/pull/94

 

[다리 건너기] 유강현 미션 제출합니다. by bassyu · Pull Request #94 · woowacourse-precourse/javascript-bridge

📝 구현할 기능 목록 입력 1. 다리 길이 입력 2. 이동할 칸 입력 3. 게임 재시작/종료 여부를 입력 출력 1. 게임 시작 문구 출력 2. 현재 다리 건너기 결과 출력 3. 게임 종료 문구 출력 기능 1. 랜덤

github.com

 

오징어 게임 유리징검다리

오징어 게임에 나온 유리징검다리 건너기를 콘솔로 구현하면 됩니다.

 

 

 

 

 

MVC 패턴

주어진 코드를 활용하라는 요구사항이 있었고 그중 InputView, OutputView 가 있었습니다. 그래서 이번 기회에 말로만 들어본 MVC 패턴을 적용해 봤습니다.

완벽하진 않지만 분명 더 좋은 객체지향적 설계를 할 수 있었습니다. 특히 고민한 부분은 입력이 비동기인데 InputView를 어떻게 설계할지였습니다.

블로그나 유튜브에 MVC 패턴을 정리한 내용은 많지만 그중 제가 가장 많이 참고한 영상입니다.

https://www.youtube.com/watch?v=ogaXW6KPc8I 

제리의 MVC 패턴

하루 전날 깜짝 미션

안녕하세요. 우아한테크코스입니다.
웹 프론트엔드 교육 분야의 4주 차 미션에 대해 추가 공지합니다.
예제 테스트 코드에서 사용하는 타입이 요구 사항과 다른 부분이 있어 정정합니다.
이 메일을 받기 전에 Fork 했다면 저장소의 최신 커밋을 받아와야 정상적으로 확인할 수 있습니다.

Pull Request를 생성하면 Can't automatically merge. 문구를 볼 수도 있는데요.
이번 기회에 Can't automatically merge. 문구를 노출시키지 않고 Git의 파일 충돌을 해결하는 방법에 관해 공부해 보면 재밌을 거예요.

이 문구가 노출되어도 미션 제출에는 영향이 없으니 걱정하지 않으셔도 괜찮습니다.

모두 즐거운 코딩하길 바랍니다.
감사합니다.

마감 하루 전에 이러한 메일이 왔습니다. 원래 저장소의 최신 커밋을 개발 중인 브랜치에 병합을 해야 하는 상황이었습니다.

분명 현업에서도 개발을 하다 보면 이러한 상황을 맞이할 수 있기 때문에 최대한 깔끔하게 병합을 해결하고 싶었고, 즐거운 마음으로 공부할 수 있었습니다.

추천합니다!

끝나고 돌아보니 금세 4주가 지났다는 사실이 놀라울 정도로 몰입했던 시간이었습니다. 컨벤션이나 함수길이 제한, git 활용 등 혼자서는 선뜻 도전하기 힘든 공부를 할 수 있었습니다. 프리코스는 누구나 지원할 수 있기 때문에 한 번쯤 경험해 보는 것을 추천합니다.

'회고 > 우아한테크코스' 카테고리의 다른 글

협업 더 잘해보기  (0) 2023.08.21
정답 대신 경험  (8) 2023.06.10
혼자하는 코딩보다 중요한 것  (8) 2023.04.21
최종 합격 후기  (0) 2023.01.10
profile

bass

@bassyu

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!