우아한테크코스 5기 프리코스 회고

2023. 2. 7. 15:55기타

개발자로 성장하는데 밑거름이 되어 준 우테코 프리 코스! 여기서 무엇을 배웠고, 어떤점이 좋았는지 글을 작성해보려고 합니다.

https://woowacourse.github.io

 

우아한테크코스

우아한테크코스에서 개발자들을 위해 디자인된 강의를 수강해보세요.

woowacourse.github.io

 

2022년 진행했던 우테코 프리코스

일단 결과부터 말하자면 떨어졌습니다. 웹 프론트엔드 과정에 지원했고, 경쟁률이 1:10 정도 였는데 매우 아쉽습니다. 하지만 배운게 워낙 많았는데, 그걸 한번 정리 해보겠습니다.

1주차 과제

1주차는 온보딩 과제로 알고리즘 문제 7문제를 풀어야 했다. 이때 기본 적인 깃 컨벤션과 깃 사용법을 숙지하고 제출 했어야 했다.

  • 글에서 요구하는 요구사항과 과제 제출 방법을 헷갈려서 기간지키지 못한 pr을 제출했었는데, 한 번 우테코 측에서 한번 물러준 덕에 탈락을 면할 수 있었다… 꼭 요구사항을 잘 읽어보고 정리해야 한다는 교훈을 얻었다.
  • 이미 알고 있는 자바스크립트 문제로 충분히 풀 수 있는 온보딩 알고리즘 문제들 이였지만, 따로 학습이 필요한 부분이 있어서 추가적으로 공부하면서 문제를 해결했다. 확실히 실력을 올리는 법에 대해 잘 알고 있는 우테코측에 대한 노하우를 알게 된것 같아서 앞으로 코스에 대한 기대감이 커진것 같다.

2주차 과제

https://github.com/yeongi/javascript-baseball/tree/yeongi

 

GitHub - yeongi/javascript-baseball: 숫자 야구 게임 미션을 진행하는 저장소

숫자 야구 게임 미션을 진행하는 저장소. Contribute to yeongi/javascript-baseball development by creating an account on GitHub.

github.com

 

2주차 때는 1주차에 받은 피드백을 바탐으로 깃에 대한 심화적인 컨벤션과 자바스크립트 클린 코드에 대한 기본적인 지식을 공부 해서 그것을 코드에 적용하려고 노력했던것 같다.

기능 목록과 흐름도로 정리 ?

나름 그림으로 정리 해가면서 프로세스 및 요구사항을 정리 하면서 프로그램 요구사항을 맞춰 나갔고, 자바스크립트 컨벤션과 깃 컨벤션에 대해서 추가적인 공부를 했다. 그리고 처음으로 테스크 코드로 테스트를 돌려 봤고, 테스트 코드를 작성해보는 계기가 됐다! 테스트에 통과 하지 못하면 그것을 통과 하기 위해 계속 수정하고... 왜 안되지 고민하고..결국 시간내에 다 완성하고 제출했다.

 

2주차 과제 피드백

숫자야구과제를 진행하고 3주차 때, 피드백 영상을 받고, 그것을 정리한 내용이다. 유익할거 같아서 여기도 첨부한다.

숫자 야구 피드백 받기

미션: 2주차 공통 피드백
상태: 학습장
작성일시: 2022년 11월 9일 오후 8:07

어플리케이션 구현

  • 바로 처음부터 어플리케이션을 구현하면 천재다.
  1. 먼저 요구사항을 정리한다. ( 기능 요구 사항을 복사 ).
기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.

같은 수가 같은 자리에 있으면 스트라이크, 
다른 자리에 있으면 볼, 
같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 
그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
예) 상대방(컴퓨터)의 수가 425일 때
  - 123을 제시한 경우 : 1스트라이크
  - 456을 제시한 경우 : 1볼 1스트라이크
  - 789를 제시한 경우 : 낫싱
- 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 
컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 
게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고,
 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
- 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
- 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
- 사용자가 잘못된 값을 입력한 경우 
`throw`문을 사용해 예외를 발생시킨후 애플리케이션은 종료되어야 한다.
  1. 기능 요구 사항을 작성 한다
  • 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다.
  • 컴퓨터의 수(3자리)와 플레이어의 수(3지리)를 비교할 수 있다.
    • 몇 개의 숫자가 같은지를 알 수 있다.
    • 같은 수가 같은 자리에 있으면 스트라이크이다.
    • 같은 수가 다른 자리에 있으면 볼이다.
    • 같은 수가 전혀 없으면 낫싱이다.

자바는 클래스가 무조건 필요하다. → 그 클래스에서 main 함수를 프로그램 시작점으로 정의 한다.

public class Application {
    public static void main(Strings[] args) {
        System.out.print("Hello world!");
    }
}

자바에서 Package는 디렉토리를 의미한다. Application은 어디 package의 시작점인가

→ 무슨 개발을 할지 미리 정하고 개발을 시작해야하는 이유

 

baseball.model OR baseball.domain n

→ 도메인 : 내가 실제 사용하려는 서비스 비즈니스 로직이 들어 있는 영역

  • 숫자를 계산한다던지
  • 기능을 개발한다던지

ex) baseball / domain / Caculator.class

→ 도메인을 분리하면 import 를 이용해서 가져온다. (java 기준)

import baseball.domain.Calculator;

객체 지향적으로 문제해결하기

  1. 기능을 가지고 있는 클래스를 인스턴스화 한다.
  2. 필요한 기능을 (역할에 맞는) 각 인스턴스가 수행하게 한다. (의인화)
  3. 각 결과를 종합한다.
  4. 기능이름을 짓는다. → 이름짓기 시작.. ㅋㅋㅋ
  5. 어디 파일로 들어갈지 정한다.
    • 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다. - NumberGenerator#createRandomNumbers()
    • 컴퓨터의 수(3자리)와 플레이어의 수(3지리)를 비교할 수 있다.- Referee#compare()
      • 몇 개의 숫자가 같은지를 알 수 있다. - Judgement#correctCount()
      • 특정 자리에 특정 숫자가 있는지 알 수 있다. - Judgement#hasPlace()
        • 같은 수가 같은 자리에 있으면 스트라이크이다.
        • 같은 수가 다른 자리에 있으면 볼이다.
        • 같은 수가 전혀 없으면 낫싱이다.
  6. 패키지를 만들어서 뼈대를 정한다.
  7. 기능을 하나씩 구현한다.
  8. [ ] 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다.
  9. 구현 하고 Check를 한다.
  10. [X] 1부터 9까지의 서로 다른 임의의 수 3개를 생성한다.
  11. 테스트 코드를 작성하고 테스트를 한다.

 

이때 까지 공부를 해오면서 객체지향을 아주 등한시 한것은 아니지만 웹 프론트 엔드 개발자를 목표로 두고 학습 했을 때는 객체 지향적 사고를 프론트엔드에서 적용할 수 있는 방법을 잘 찾지 못하고 애초에 적용이 되나? 싶은 생각이 였다.

하지만 프론트엔드 개발에서도 객체 지향적 사고가 필요하고 기능 단위, 컴포넌트 단위로 따지고 보면 어디에든 적용할 수 있는 얘기라고 생각하게 됐다.

2주차 숫자 야구 피드백 영상은 그야 말로 기능 단위로 요구사항 정리 부터 단위 기능 테스트 코드 작성 까지 프로그래밍적 사고를 하는 프로세스를 압축적으로 풀어낸 2시간 짜리의 보물이였다.

3주차 과제

로또 미션 과제
더 어려워진 미션과 더 어려워진 클린 코드 컨벤션을 준수하며 풀어야했다. 2주차 피드백자료에 첨부된 영상을 보면서 나는 이때 까지 요구사항을 적고 있는게 아니라, 낙서를 하고 있었구나라고 생각 했다.

https://github.com/yeongi/javascript-lotto/tree/yeongi

 

GitHub - yeongi/javascript-lotto: 로또 미션을 진행하는 저장소

로또 미션을 진행하는 저장소. Contribute to yeongi/javascript-lotto development by creating an account on GitHub.

github.com

 

확연히 달라진 기능 개발
기능 단위에 따른 깃 컨벤션
기능 단위로 테스트 코드 작성

피드백 영상을 보고 난뒤로부터는 확연히 달라지게 기능을 정리 할 수 있게 되고 테스트를 어떤 단위로 써야 하는지 알 수 있게 됐다. 기능을 하나하나 구현하면서 커밋 컨벤션을 짤 수 있게 되었고, " 테스트 하기 쉬운 단위 기능 코드는 클래스 단위로 분리 하면서 상호소통을 하는 클래스를 줄이자" 며 나름 잘 생각하면서 짤 수 있게 됐다.

 

3주차 미션 소감

이번주 미션도 끝이 났습니다. 3주차에서는 객체 지향의 개념을 알고 있던지라 이것의 사용방법을 배우는듯 했습니다. 왜 클래스로 분리를하는지 테스트를 작성하기 쉬운 코드는 뭔지에 대해서 조금 생각해보는 계기가 된것같습니다. 지난주 보다는 클래스 간의 의존성을 없애려고 노력했고, 테스트 코드도 한 도메인을 작성 할 때 마다 도메인 단위로 작성해 봤습니다. 클래스에 대한 문법만 알고 있었던 저에게는 살짝 재밌있는(?) 시간이 된것 같았습니다. 2주차 피드백 숫자야구 구현 영상을 보고 많은 도움이 된거 같습니다. 프로그래밍의 절차에 대해서 쉽고 재밌게 설명해주셔서 바로 코드 구현에 반영이 됐던것 같습니다. 도메인이란 지식과 테스트에 대한 어려운? 접근도 해결이 된것 같습니다.

 

도메인 지식 과 단위 테스트

 

도메인은 한 기술분야의 전문 지식이라고 알고 있었습니다. 프로그래밍에서는 한 기능이 돌아가는 로직의 개발 단위로 쓰이는것을 숫자야구 구현영상을 통해서 알게 됐습니다. 도메인을 분리하는것은 크게 어려운일은 아니였지만, 온전히 저의 생각으로 분리를 했던지라 정확히 분리 했는지는 모르겠습니다.

단위 테스트는 생각해보면 코드를 구현하고 클래스를 만들어서 돌려보는것과 유사한것 같습니다. 어차피 코드를 컴파일해서 돌려볼것같으면 그것을 하는 행동을 코드로 짜는게 테스트인것 같다는 생각이 들었습니다. 그렇게 생각하면 오히려 테스트 코드를 작성하는게 더 이득일거 같다는 생각이 들었습니다.

이번주엔 개발자로써 좀더 소프트웨어를 바라보고 설계하는 관점을 성장시킬 수 있는 좋은 한 주 였던것 같습니다. 다음주도 열심히 하겠습니다. 감사합니다.

4주차 미션

대망의 마지막 미션은 오징어 게임에 " 다리건너기 미션 " 이다.

https://github.com/yeongi/javascript-bridge/tree/yeongi

 

GitHub - yeongi/javascript-bridge

Contribute to yeongi/javascript-bridge development by creating an account on GitHub.

github.com

다리건너기 미션에서는 이 때 까지 배운 모든 지식을 집약해서 녹여낼 수 있도록 노력 했고, 특히 상호 작용 하는 클래스와 각자의 책임이 있는 도메인들을 잘 분리 할 수 있도록 노력 했다. 엄청난 난이도에도 불구하고 꾸준히 매일매일 개발에 몰두해서 일단 기능과 테스트 코드를 모두 작성한 채로 제출은 했다.

 

4주차 미션 소감

4주차 과제가 끝나갑니다. 이번주는 도메인을 잘 분리하고자 노력했습니다.
UI와 Input 그리고 서로 역할을 하는 Player , Bridge 로 분리하고, 상호작용하는 BridgeInteractionPlayer 객체를 함께 짯습니다.
이번주 과제에서 가장 아쉬운 점은 테스트 하기 쉬운 코드를 작성하지 못했다라는 점입니다. 역할을 나누고 상호작용을 시키다 보니 메인 로직이 대부분 엉켜져 버려서 테스트를 하기엔 연쇄적으로 함수 호출이 일어난다는 점이 테스트를 하기 어렵게 만든것 같습니다.

도메인을 빠른 기간에 이해하기에는 너무 많은 자료와 정보가 있어서 바로적용하기에는 약간 무리가 있었습니다. 도메인을 나누고 기능을 구현하고 합치는데 급급하다 보니 테스트코드는 작성 하지도 못하고, 마감날이 다가왔습니다… 그래도 요구사항에 맞춰서 깔끔하게 만든 코드를 보니 뿌듯하기도 하고, 한편으로는 성장을 느끼기도 했습니다.

시간이 없어서 회고를 하지는 못했지만, 그래도 확실히 모니터 너머로 보이는 코드들로 조금 나아진듯한 모습이 보여서 뿌듯했고, 어찌 됐던 미션 완료를 한것도 매우 기분이 좋습니다. 꼭 합격점에 도달해서 최종 코딩테스트를 보고 싶습니다. 최종 코테를 볼 수 없음에도 지난 4주간의 시간은 저의 개발 실력의 밑거름이 될거 같습니다. 감사합니다.

 

2022.11.23. 우테코 프리코스 끝낸 소감문 : YEONGI

4주간의 여정이 끝이 났다. 매주 과제를 받았을 때, 문제를 읽고 어지러웠을 때, 고민고민하다가 오류해결을 할 때, 새로운 문제를 정의 할 때, 전부 개발 진행에서 겪는 과정이라고 생각한다. 개발자라는 직업은 개발에 있어서 철학적인 부분과 문제해결능력 글쓰는 능력, 의사소통 능력, 사회적인 능력, 리더쉽 물론 다른 직업에 있어서도 사회적으로 높은 지위에 올라가려면 필요한 부분이고 강조되는 능력이지만, 개발자는 왠지 좀 더 필수요구사항에 가까운 생각을 받는다 ( 물론 개발 노예 코딩 노예 이런 분야는 제외 ) 회사의 톱니바퀴같은 존재가 되서 그런가..

4주간 매우 생각이 많았고 바빳고 힘들었지만, 응원해주는 사람들, 알아주는 사람들, 같이 하는 친구들 덕분에 많은 힘을 얻었던 것 같다. 진짜 감사합니다 (__) 좀 더 챙기겠습니다 알러뷰,, 내가 이 때까지 코드를 짜는 부분에 있어서는 자신만의 세상의 갇혀 있었지만 ( ? ), 이 과정을 통해서 국제 표준…? ( 협업하기 쉽다는 뜻) 을 많이 따라오고 고쳐진것 같아서 뿌듯함과 은근 힘든 과정을 4주간 했다는 생각에 기분이 좋았다. 한가지 아쉬운점은 하도 바빠 가지고 (사실 핑계 ㅋㅋ) 남들 코드를 볼 시간이 없었고, (공통피드백만 따라 했었지..) 본인 코드 리뷰도 못했다는 것,,, 지금 첫주차 과제 코드를 보면 불과 3주전이지만 고칠점이 수두룩 빽빽할 것이다. 하지만 중요한것은 정확성 가독성이 아니라 일단 비둘기가 머리로 날더라도 기능을 하게 구현해야 한다는점 ㅋ,ㅋ,ㅋ

4주간 프리코스에 붙고 최종 코테를 갈 수 있을지 없을지 모르지만 꼭 되서 서울 가서 시험 치고! 거기서도 붙고! 1년간 불태우면서 공부하고 싶다. 아자. 아자. 아자자~


블로그 글을 작성하면서...

우테코는 진짜 개발자로써 쉽게 성장 할 수 있는 cheet sheet를 제공했다. 라고 생각한다. 이때 까지의 프로그래밍 역사에 선배들이 잘 쌓여준 탑들을 집약해서 우리에게 보여준것 같다. 꼭필요한 지식과 코드들을 제공했으며, slack커뮤니티 또한 활용해서 지원자들과 소통 또한 멈추지 않았다. 신입 개발자 뿐만아니라 모든 개발자에게 프리코스를 체험할 수 있는 기회를 준것도 참 좋다고 생각한다. 선한 영향력 그 자체라고 생각이 드는 수업이라고 생각한다.

'기타' 카테고리의 다른 글

GIT  (0) 2022.08.11