우아한테크코스 5기 프론트엔드 프리코스 4주차 회고
📌 우아한테크코스 4주차 과제 제출 주소 및 소감
https://github.com/woowacourse-precourse/javascript-bridge/pull/16
📌우아한테크코스 4주차 과제 내용
https://github.com/woowacourse-precourse/javascript-bridge
*과제 내용에 대한 코드나 풀이법에 대해서는 위 과제 내용 링크에 상세히 기재하였으니, 참고하시길 바랍니다.
과정
드디어 프리코스의 마지막 미션이 종료되었습니다~!!
이번 미션에 대해 어떻게 접근했고 어떤 방식으로 풀었는지 적어볼게요
MVC 패턴 적용
이번 다리 건너기 미션은 처음부터 View 파일들과 BridgeGame 이라는 파일이 주어졌습니다.
이 파일들이 왜 주어졌는지에 대해 생각하면서 요구사항을 확인해보니
이거 MVC 적용하라는 거다!! 라는 생각이 들었습니다.
이렇게 생각한 이유는 이번 미션의 목표중 하나가 UI로직과 비즈니스로직을 구분하는 것이였고,
또한 BridgeGame에서 InputView, OutputView를 직접적으로 호출할 수 없었기 때문입니다.
3주차는 클래스 분리를 목표로 미션을 수행했었는데,
4주차는 MVC 적용이라니...!!
설레면서 잘할 수 있을까? 라는 생각이 들었지만, 바로 행동으로 옮겼습니다.
처음에 기능목록을 작성하고 어느정도 코드를 구현해 놓은 상태였었는데, 중간부터 Controller 와 Model , View 파일들로 나누어 본격적으로 MVC 를 적용하려고 하였습니다.
적용전 우선 설계를 하였고, 이 과정대로 코드를 구현하였습니다.
https://www.youtube.com/watch?v=ogaXW6KPc8I
(MVC 패턴에 대해 공부하는데 도움이 되었던 영상입니다)
BridgeGame에서 InputView와 OutputView를 사용할 수 없다는 점에서 Model 로 분류를 해야겠다고 생각했습니다.
이후 Controller 를 만들어서 Model과 View가 데이터를 직접 주고 받지 못하게 하였고, 모든 게임 과정들은 Controller 에서 통제를 해주었습니다.
유효성 검사는 어디서?
어느정도 구현을 하다보니 유효성검사를 어디서 해줘야지? 하는 생각이 들었습니다.
Controller가 유효성검사를 맡아서 올바른 값만 Model 에게 전달하여야하지 않을까 싶었지만, 정확하지 않은 관계로 여러 자료들을 살펴봤습니다.
📌 In MVC should a model handle validation?
📌 Where do you do your validation? model, controller or view
📌 MVC(Model-View-Controller)
여러 자료들중에 위 게시물들이 기억에 남아 가져와봤습니다.
의견들이 나뉘는게 되게 흥미로웠습니다.
Conroller 가 해야한다는 의견이 많긴했지만, 나누지말고 전부 다 해야한다는 의견들도 있었습니다.
저는 최종적으로
Controller 는 View로 부터 전달 받은 값이 "정상적인 값인가?"에 대한 부분을 체크해주고
Model은 Controller로 부터 전달 받은 값이 "어떤 의미가 있는 값인가?"에 대해 체크해준다는 생각을 가지고
Controller에서 해주기로 정했습니다.
하지만, 만약 제가 Model을 만드는 일을 담당하고 있고, 다른 사람들이 View나 Controller를 만드는 일을 담당하고 있다면, 저는 Model에서도 유효성검사를 실시할 것입니다.
왜냐면, 누구나 실수를 할 수 있고 비록 코드의 길이가 길어지더라도 값에 대한 신뢰도를 훨씬 높일 수 있기 때문입니다.
앞으로 프로젝트를 하게된다면 이 생각을 가지고 잘 접근해봐야겠습니다.
새로운 요구사항
1. 함수 메서드 줄 제한 10줄.
2. 단일 책임 원칙 지키기
3. else 지양하라.
여태까지 15줄 제한이였었을때는 문제 없었는데, 10줄 제한은 확실히 걸리는 경우들이 생겼습니다.
그럴때의 해결책은 역시 단일 책임 원칙이였습니다.
'한가지 일만 하라' 라는 것을 지킬려고 하면 생각보다 많은 부분에서 나눌 수 있습니다.
그동안 2,3 주차를 거치면서 함수분리, 클래스분리들을 연습해왔기 때문에 금방금방 해결할 수 있었습니다.
비록 메서드들이 많아지더라도 여러일을 하는 것은 없게 해주었습니다.
또한, 이번 미션에서는 단, 하나의 else 도 사용하지 않았습니다.
if 문과 return 문을 적절하게 사용하면 신기하게도 else문을 사용할 일이 없었습니다.
다만, return 문을 통해 제어가 필요했습니다.
return을 안쓰고도 제어를 할 수 있는지 더 공부해봐야겠습니다.
구현 완성
그리고 제출...
정말 어제가 저한테는 너무 힘든 하루였어요 ㅋㅋㅋㅋㅋ
이번 미션을 정말 많이 신경쓰고 잘 구현했다고 생각했는데
처음보는 이 오류가 저를 당황시켰습니다.
빌드 실패시에 나타나는 오류라는데 도무지 이게 왜 뜨는지 모르겠는겁니다.
심지어,
ApplicationTest 도 통과하고 제가 만든 5개의 테스트 파일에서 또한 모두 이상없이 통과를 하였었는데, 왜 빌드가 안된다는건지 도통 알 수 없었습니다.
1,2,3 주차 때 아무 문제없이 제출을 해서 그런지 더더욱 이게 크게 다가오더라고요.
정말 멘붕 그자체. 그래도 아직 마감까지 시간 여유가 있다고 생각하여 차분하게 에러를 잡아보자 마음을 다짐먹었습니다.
요구사항을 맞추지 않았을 때 보통 발생하는 오류라고 하여서 제가 요구사항을 제대로 지킨건지에 대해 끊임없이 반문했습니다.
1. 따로 명시가 되어있지 않은 파일을 제 임의대로 옮긴 것이 있는건지?
=> InputView, OutputView, BridgeGame 만 경로를 바꿔도 된다는 명시가 되어있어서 파일구분을 했습니다.
이외의 파일은 옮긴 것이 없습니다.
2. 출력 형식이 잘못되었는지?
=> 개행, 마침표, 출력값, 띄어쓰기, [ERROR] 모든 부분을 체크하였습니다.
3. 예외처리가 잘되고 있는건지?
=> 숫자로 들어올 수 있는 소수점조차도 예외처리를 해주었고, 테스트를 통해 여러 케이스들을 확인하였습니다.
4. 이외의 요구사항들 체크
제출 후 슬랙으로 어떤분이 BridgeRandomNumberGenerator 을 다른 곳에서 사용하면 안된다고 하였지만,
여러 PR들을 확인해보니 이 부분은 문제가 되지 않아보였습니다.
아침 10시에 빌드에러를 확인하고 마감 시간까지 밥도 먹지 않고 정말 노트북만 쳐다봤습니다.
저도 놀랐습니다... 오류 찾아내겠다고 식음을 전폐하고 이렇게 몰두할지 ㅋㅋ...
하루만에 살이 2키로 넘게 빠져있었습니다ㅋㅋㅋㅋㅋㅋ
정말 우테코 되고 싶었거든요
정말 간절했기도하고 여태까지 미션들을 잘 수행하다가 이렇게 마지막에 턱하니 막히니
모든것이 무너지는 듯한 느낌이 들었습니다.
그래도 정말 끝까지 포기하지 않고 12시가 찍히는 시간까지 코드를 붙잡고 있었습니다.
최종적으로 오류를 찾아내는 데 실패하였습니다.
정말 해볼 수 있는 모든 것을 해봤습니다.
그래서 그런지 12시 제출 후 아쉬움도 정말 큰 반면에 후련함? 이 엄청 들더라고요.
왜냐면, 전 진짜 해볼 수 있을만큼 다해봤거든요.
시간을 되돌려서 다시 아침으로 돌려놔도 저는 똑같이 했을겁니다.
그만큼 후회없이 도전해봤습니다.
비록 마지막 관문에서 막혔지만, 그간 한달간의 과정 동안 배우고 성장한 것들이 너무 많아서
마냥 아쉽지만은 않습니다. (사실 겁나 아쉽습니다.... 따흙 ㅠㅜ)
제가 알기론 테스트 케이스를 통과 못하면 0점이라고 알고있는데, 이건 ApplicationTest 를 말하는 것 같더라고요?
예제 테스트는 실제 성적과 무관하다는데 채점 방식이 어떤지 알 수 없으나 분명 빌드에러에 대한 패널티가 존재할 것입니다.
그냥 맘 놓고 열심히 공부하면서 기다려야겠습니다.
끝나면 하루는 왕창 놀아야지!!! 하고 맘먹었는데, 끝이 이렇게 나서 그런지
다음날인 오늘도 평소대로 알고리즘 문제를 풀고 코수타 영상을 본 뒤 이렇게 글을 쓰고 있네요.
설령 안되더라도 너무 낙담하지 않고 또 다른 길을 찾아봐야겠습니다 ㅎㅎ
전 꼭 잘 될거니까요~
정말 열심히 살았던 한달이였습니다.
단 하루도 빠짐없이 매일매일 코드를 구현하고, 리팩터링을 하고, 글을 쓰는 과정들이 너무 재밌었습니다.
열심히 한만큼 그만한 결과로 돌아오지 못한다는 점이 참 아쉬움이 큰 부분이지만 그만큼 열심히 했다는거니까요~!
후회없습니다.
이런 귀한 기회를 제공해주신 점 정말 감사하게 생각합니다.
배우고 익힌 것들을 삶에 적용하며 앞으로 개발자의 삶을 만들어가겠습니다.
정말 감사합니다.
프리코스를 참여한 모든 분들 수고 많으셨습니다.
다들 좋은 결과 있으시길 바랍니다. 😊
'성장기록 > 우아한테크코스' 카테고리의 다른 글
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 1번 (0) | 2022.11.25 |
---|---|
우아한테크코스 5기 프론트엔드 프리코스 그 이후 (0) | 2022.11.24 |
우아한테크코스 5기 프론트엔드 프리코스 3주차 회고 (1) | 2022.11.16 |
우아한테크코스 5기 프론트엔드 프리코스 2주차 회고 (2) | 2022.11.09 |
우아한테크코스 5기 프론트엔드 프리코스 1주차 회고 (0) | 2022.11.03 |