[우아한테크코스 6기 프리코스] 4주차 회고

osohyun0224·2023년 11월 15일
0
post-thumbnail

저는 지난 한 주 동안 아래와 같은 것들을 배우고 느꼈습니다.

1. 살아있는 기능 구현 목록 작성하기

지난주 소감문에서 작성하였던 아쉬운 점으로 기능 구현 목록 문서를 지속적으로 업데이트를 하지 못했다는 점이 있었습니다.
왜 지속적으로 업데이트를 하지 못했을까 고민했는데 맨 처음 기능 구현 목록을 작성할때 MVC 패턴에 맞게 기능을 생각해서 너무 세세하게 기능을 생각하고 작성했기 때문이었다는 것을 알게 되었습니다.

따라서 이번 주차에는 지속적으로 살아있는 기능 구현 목록을 작성하기 위해 처음부터 잘 작성하려는 욕심을 버리고, 개발 요청 사항을 꼼꼼히 정독하였습니다.
그래서 큰 기능 단위로 기능 구현 목록을 작성하였습니다. 단순히 사용자에게 입출력을 하고, 입력값에 대한 유효성 검사 기능을 따로 분리하지 않고 하나의 큰 "고객과 관련된 주문 정보를 처리"하는 기능 제목 아래 앞선 기능들을 작성하였습니다.

아래는 첫 기능 구현 목록을 작성한 것입니다.

1. 고객과 관련된 주문 정보를 처리

- 예상 방문 날짜를 입력 받는 기능
- 예상 방문 날짜에 대한 유효성 검사 기능
.. 생략

이렇게 작성을 하고 구현을 하면서 점점 고려해야할 점이 보이기 시작했습니다.
따라서 한 줄씩 기능을 구현할 때마다 추가로 고려해야할 점을 작성하기 시작했습니다.

다음은 최종적으로 업데이트한 구현 목록입니다.

1. 고객과 관련된 주문 정보를 처리

 - 예상 방문 날짜를 입력 받는 기능
 	- 환영 메세지 출력 기능
 	- 예상 방문 날짜 입력 안내 메세지 출력 기능
 - 예상 방문 날짜에 대한 유효성 검사 기능
.. 생략

이렇게 기능 구현을 하면서 중간중간 추가되는 고려사항에 대해 업데이트를 진행하기 시작했습니다.
또한 기능 구현을 하면서 주의 사항도 함께 작성하게 되었습니다.

예시로 증정 이벤트를 계산하는 기능에서의 주의사항을 추가로 작성한 내용입니다.

3. 증정 이벤트를 계산하는 기능
 - 할인 전 총 금액을 통해 증정 이벤트 적용 계산 기능
  - 증정 이벤트가 적용된 경우, 혜택 내역에는 표시 되지만 총혜택 금액에는 포함되지 않음 주의
 - 증정 메뉴 출력 기능

이렇게 살아있는 기능 구현 목록을 작성하기 위해 기능을 구현하면서 지속적으로 업데이트를 해왔습니다.
다음은 커밋 기록으로 구현 도중에 업데이트를 하며 살아있는 문서를 작성하려고 노력한 사진입니다.

이번 주차에서는 기능 구현 목록을 신경쓰면서 개발을 진행했다는 점이 가장 기억에 남았습니다.

2. 새롭게 알게 된 자바스크립트 문법 반영 노력

지난 주차에 처음으로 domain 로직을 구현할 때 객체를 캡슐화하는 방법을 사용하여 클래스 기능을 구현했던 경험이 있었습니다.
Private class fields를 사용하여 내부 인터페이스와 외부 인터페이스를 구분 지어 구현하였습니다.
이 구현 방법을 지난주차에는 새로 공부하며 작성하여서 domain에 도입하여 외부에서 쉽게 domain 로직에 접근할 수 없도록 하여 로직을 보호하였습니다.

지난 주차에서는 먼저 1차적인 구현을 완성하고, 리팩토링 과정을 진행하면서 Private class fields를 사용하도록 구현했었습니다.
하지만 이번 주차에서는 입출력(InputView, OutputView)로직을 제외한 거의 모든 클래스 구현 로직에 해당 방법으로 구현하도록 노력했습니다.
클래스의 구성 로직은 필드와 생성자, 메소드로 구성되도록 구현하기 위해 고민하고 외부에서 쉽게 메인 로직에 접근 할 수 없도록 구현하려고 열심히 고민했던 한 주였습니다.

1주차 코드를 보았을 때와 4주차 코드를 보았을 때 클래스 구현 방식이 정말 많이 달라졌음을 알 수 있었습니다. 해당 방법은 1주차 미션 끝나고 커뮤니티에서 진행한 코드리뷰를 하면서 메인 로직을 보호하기 위한 최신 자바스크립트 문법인 Private 멤버를 사용해 외부에서 접근할 수 없도록 구현하는 방법을 알게 되었습니다. 이를 알게되고 2주간 공부하며 코드에 반영하려고 한 노력이 보여서 프리코스 기간 기억에 많이 남을 것 같습니다.

3. 프리코스 기간 중 테스트 코드에 대한 소감

프리코스 2주차에는 TDD 구현방식에 욕심을 내었고, 3주차에는 이를 위해 미션이 열리자마자 2-3일을 고민하였지만 결국 실패하였다는 소감문을 작성하였습니다.
최종적으로 저는 프리코스 기간 TDD방식으로 대부분 구현하지 못하고 먼저 기능을 구현을 한 뒤에 바로 테스트 코드를 작성하여 제대로 기능하는지 확인하는 방식으로 구현을 해오게 되었습니다.

사실 이번 프리코스를 통해 테스트 코드라는 것을 알게 되었고, 테스트 코드의 중요성을 뼈저리게 느꼈습니다.
그 이유는 제가 구현한 기능에 대해 바로바로 테스트를 해보면서 로직의 오류를 바로 잡을 수 있었기 때문입니다. 따라서 바로 오류를 잡아 수정할 수 있었다는 점이 저에게 매우 큰 장점으로 다가왔고 앞으로의 개발 공부에서도 테스트 코드를 작성하는 것이 필요함을 느끼게 된 한 달이었습니다.

TDD 구현 방식이 이상적이지만, 초보 개발자가 빠르게 도입하기 쉽지 않다는 것도 3주 간의 구현 노력끝에 알게 되었습니다. 하지만 지난 주차에도 느꼈듯이 꾸준하게 테스트 코드를 작성해나가아간다면 TDD 구현을 성공할 것이라는 꿈을 가지게 되었습니다. 저는 프리코스가 끝나고 테스트 코드 작성에 대해 공부를 지속해 나아갈 것입니다. 이러한 과정을 통해 테스트 코드에 익숙해진 제 자신을 만나게 될 것이라 기대합니다.

한 달동안 테스트 코드에 대해 프리코스 과정에서 몰입해본 경험은 개발자로서의 인생에서 새로운 환기가 되어주었습니다. 프리코스가 끝나도 기간 동안 학습한 내용을 바탕으로 꾸준히 성장해 나가는 개발자가 되겠습니다.

4. View에 대한 고찰

이번주차에 가장 고민이었던 점은 "입력받는 것은 무조건 InputView에서만 구현되어야하고, 출력하는 것은 무조건 OutputView에서만 구현되어야하나?" 라는 점이 가장 고민스러웠습니다. 왜냐하면 이번주차에서 입력받는 로직을 InputView에서 구현할 때 사용자에게 어떤 것을 입력하는지 요청하는 메세지를 출력하는 기능도 같이 구현되어야했기 때문입니다.

지난 3주차에서는 입력받는 것을 무조건 InputView에서만! 출력은 무조건 OutputView에서만! 이렇게 생각하고 구현했었는데 그때 들었던 아쉬움은 오히려 너무 로직을 분리하니까 입력 로직에 대해 코드 가독성이 너무 떨어지는 것을 느꼈습니다.

따라서 이번 주차에서 사용자에게 날짜와 메뉴 및 수량을 입력받는 로직에서 메세지 출력을 어떻게 구현할지 고민을 거듭했지만 입 출력 로직을 명확하게 구분하는 것에 중점을 두지 않고 가독성을 높이는 코드를 작성하도록 판단하였습니다.

이번주차의 InputView에서는 사용자에게 입력을 받아 처리하는 로직을 구현하였고, OutputView에서는 사용자에게 이벤트 결과를 출력하는 로직을 구현하였습니다.

이런 고민을 하면서 InputView와 OutputView의 역할의 영역이 매우 궁금해졌습니다. 프리코스가 끝나고 해당 궁금증을 다른 지원자들과 함께 고찰해보고 싶다는 생각을 하게 되었습니다.

5. 프리코스를 마치며 로직 분리에 대한 고찰

2주차 부터 시작해온 MVC 패턴 도입에 대해 로직을 Model, Controller, View로 분리하였던 노력은 마지막 주차가 되어서는 많은 고민을 하지 않아도 기능 목록을 구현하고 자연스럽게 분리할 수 있는 능력을 갖추게 해주었습니다. 프리코스 기간중 MVC 패턴에 대해 많은 고찰을 하였고, 학습한 끝에 어느정도 자연스럽게 이해할 수 있게 되었습니다. 프론트 개발을 하면서 MVC 패턴을 생각하면서 개발했던 경험이 없었는데 이번 프리코스를 수행하면서 계속해서 저와 함께한 MVC 패턴을 생각하면서 프로젝트 개발을 진행하게 되었습니다.

도메인 로직 / 컨트롤러의 역할 / 입출력 담당인 View 이 3개의 패턴을 공부하고 프리코스 기간 실제 미션에 도입하면서 제 것으로 익숙해지도록 체화한 공부 과정이 정말 의미 깊었습니다. 앞으로도 다양한 디자인 패턴을 도입하여 더 나은 코드를 작성하기 위한 고민을 끊임없이 해나아갈 것입니다.

6. 마지막으로, 프리코스를 마치며

한 달 내내 프리코스 생각을 안 했던 날이 없을 정도로 인생에서의 가장 "몰입" 했던 경험이었습니다.
이렇게까지 많이 제 코드에 대해서 리팩토링을 진행해본 적도 없고, 다른 사람이 내 코드를 평가한다는 생각에 더 가독성있게 짜기 위해서 끊임없이 고민하여 리팩토링을 지속해온 경험은 제 개발자 인생에서 가장 귀중한 경험이 되었습니다.

프리코스를 하면서 전반적인 개발 습관 자체가 바뀌었습니다.

  • 신중한 커밋 작성 : 기능 단위로 커밋하는 습관이 생겼고, 깃모지를 통해 더 명확하게 커밋의 의미를 파악할 수 있고, 헤더 뿐만 아니라 바디를 작성하여 무슨 기능을 어떻게 구현하고 변경하였는지 파악할 수 있도록 작성하는 것이 몸에 습득되어 협업 프로젝트에서도 좋은 영향력을 끼치고 있었습니다.
  • 완주했다는 "몰입" 경험: 프리코스를 시작하기 전에 "모든 테스트를 통과해 완주할 수 있을까?" 고민이 많았습니다. 한 달동안 바쁜 학교 생활이었지만 계속해서 프리코스를 위해 밤을 새며 고민하고 더 나은 코드를 위해 끊임없이 리팩토링한 과정을 통해 인생에서 가장 몰입한 경험을 갖게 되었습니다. 이는 제가 스스로도 완주했다는 자신감을 가져다 주었으며 앞으로도 개발자로써 끝까지 포기하지 않는 끈기의 성공의 경험을 가져다 주었습니다.
  • 코드 가독성을 고려: 코드에서 가장 많이 바뀐 것은 제 코드가 이제 가독성이 고려되 "복잡하지 않은 코드"가 되어가고 있다는 점이었습니다. 저는 협업 프로젝트에서도 이제 간결하고 가독성을 생각하며 개발을 진행하고 있습니다.

프리코스를 마치며 한 달동안 정말 많이 성장했고 1주차때의 코드와 4주차때의 코드가 정말 달라졌다는 점을 알 수 있었습니다.
포기하지 않고 성장해준 자신에게 감사하며, 이만 프리코스를 완주하겠습니다.
지난 한 달 동안 개발자로서 정말 행복했습니다.

profile
Garden / Junior Frontend Developer

0개의 댓글