[Front-End] 우테코 프리코스 3주차 회고 (로또 게임)

2023. 11. 9. 17:15우아한 테크 코스/프리코스

지난주 미션을 받고 첫 날은 Eslint를 설정하는 법을 배우고 설정하기 바빴고, 둘째날은 하루종일 기능목록만 작성했다.

그리고 남은 토,일,월에 구현하고, 화요일에 리팩토링,테스트 코드 작성, 그리고 수요일에 마지막 12시까지 소감문을 작성하다가 제출했다. 

 

그 뒤 오늘 아침 수업을 다녀온 뒤 한숨 푹 자고 일어나니 마지막 미션이 시작됐다.

이제 4주차 미션을 시작하기에 앞서 3주차 미션을 돌아보고, 시작하려 한다.

 

3주차 미션을 진행하며 신경썼던 부분들

  1. 기능 목록 퀄리티 높이기
  2. 기능 요구 사항에 명시되지 않은 부분에 대해서도 고민해보기
  3. Eslint, Prettier 사용하기
  4. 클린 아키텍쳐

 

1. 기능 목록 퀄리티 높이기

 

2주차 미션때도 1주차에 비하면 기능 목록 퀄리티가 많이 향상 됐었지만,

3주차 미션의 기능 목록은 그보다 더 발전한 것 같다. 

 

지난주 기능 목록에서 특히나 개선하고자 신경 썼던 부분은 플로우 차트와 구현된 메서드 목록이였다.

 

1주차 기능 목록 - https://github.com/djLee77/javascript-baseball-6/tree/djLee77/docs

2주차 기능 목록 - https://github.com/djLee77/javascript-racingcar-6/tree/djLee77/docs

3주차 기능 목록 - https://github.com/djLee77/javascript-lotto-6/tree/djLee77/docs

 

그런데 시간을 기능 목록 작성에 하루를 할애해서 구현을 촉박하게 할 줄 알았는데,

오히려 기능 목록을 잘만들어 놓으니 설명서를 보고 레고를 조립하듯이 훨씬 수월했었다.

 

 

2. Eslint, Prettier 사용하기

 

나는 원래 VSCode의 확장팩으로 설치한 Prettier만 설치하다가, 이것만 하면 Eslint도 같이 준수하고 있는 줄 알았다..

이번 미션에서는 직접 노드 패키지 설치를 통해서 설정했었다. 

 

이 부분에 대해서는 아직 완전히 이해하지 못한 것 같아 이번 4주차 미션까지 끝나고 조금 더 공부해서 포스팅해야겠다.

 

 

 

클린 아키텍쳐

 

이번 미션에서 가장 많이 고민했지만 이루지 못한 부분이다.

 

나는 기존에 MVC 패턴 같은 소프트웨어 디자인 패턴에 대한 지식이 하나도 없었고,

어떤 그런 것들이 어떤 역할을 하는지 모르니 필요성을 느끼지 못해서 공부 해본적도 없었다.

 

그런데 로또 게임 미션 요구사항 중 "도메인 로직에 대한 단위 테스트를 작성하세요."라는 문장을 보고

"도메인 로직"이 뭔지 찾는 과정에서 클린 아키텍처에 관한 글까지 흘러들어 갔다.

 

도메인 로직과 어플리케이션 서비스 로직을 잘 분리해야지 개발자가 이해하기 쉬운 코드가 되고 유지보수에도 용이하다는 내용이었다.

 

이미지 출처- https://developer.android.com/jetpack/guide/domain-layer?hl=ko

 

안그래도 이번 미션의 클래스 구조를 어떻게 설계해야 할지 고민이 많았었는데 큰 기연을 얻은 기분이었다.

 

그리고 위와 같이 도메인 로직을 다른 로직들과 분리하는 것에 MVC 패턴이 효과적이라는 것을 알게 되었다.

 

 

하지만 이 글을 읽었을 때 쯤엔 이미 제출까지 얼마 남지 않은 상황이었고,

덕분에 4주차 미션에서 해내고자 하는 목표가 생겼다.

 

 

MVC패턴, 클린 아키텍쳐 등 전혀 생각해보지 않았고 필요성도 느끼지 못했던 것들이 직접 난잡하게 구조를 짜고 나보니 왜 필요한 것들인지 절실하게 느낄 수 있었다.

 

 

마지막은 이번 미션의 목표로 설정한 것들을 나열하고 포스팅을 끝내겠다.

 

 

4주차 미션에서 이루고자 하는 목표
  1. MVC패턴을 사용하고, 도메인 로직을 명확하게 분리하여 객체에 명확한 책임을 부여하는 클린 아키텍처 지향하기
  2. 2주차 미션에서 배운 private 키워드를 사용하여 해당 객체의 데이터를 외부에 노출시키지 않고 해당 객체 내에서 프로세스를 수행하도록 설계하기
  3. 이번 미션 역시 빠트리는 기능이 없도록 꼼꼼히 기능 요구사항 확인하기

 

 

 

느낀 점과 깨달은 것들을 일기처럼 주절주절 써내렸더니 내가 다시 보기도 힘든 글만 가득한 포스팅이 돼버렸다.

 

배운 것들에 대해서는 미션 종료 이후에 모두 따로 포스팅하겠습니다.

 

 

 

마지막 미션까지 화이팅!!!!!!!!!!!!!!!!