우아한테크코스 프리코스 7기 4주차 - 어려운 난이도 일단 구현하기 및 테스트케이스 분석하기
Description: 이번 주차는 주로 구현시의 이야기를 다룹니다. 특히 복잡한 파라미터에 관해 어려웠던점, 파일의 읽기 및 쓰기, 테스트 케이스 실패한 경우 분석하기 등의 내용입니다.
현재 노트: KR-410.00 d 우아한테크코스 프리코스 7기 4주차 - 어려운 난이도 일단 구현하기 및 테스트케이스 분석하기
상위 분류: KR-410.00 우아한테크코스 프리코스 7기 회고록 1개월 기록
우아한테크코스 프리코스 7기 4주차 - 어려운 난이도 일단 구현하기 및 테스트케이스 분석하기
우아한테크코스 프리코스 저번 주 목표는 다음과 같았습니다
- 커밋 리뷰 항목을 목록화하고 처리하기
- 디스코드 포스트 추천 봇 실제 서비스 하기 -> 디스코드 포스트 추천 봇 실제 유저에게 피드백 받기
결론 부터 말하면 둘 다 제대로 수행되지 못했습니다... 이번 주 구현미션인 편의점 구현이 무척 난이도가 높아 해당 미션을 구현하는데만 대부분을 사용했기 때문입니다.
그래서 미션 위주로 이번주는 회고록을 작성해보았습니다.
이번 4주차 어려웠던점
시간 계산기 한국시간계산, 처음에 파일이 없는 줄알고 처음부터 만든점등 여러개가 있지만 몇개를 선정하자면 다음과 같습니다
- 복잡한 구현시 파라미터 처리
- 파일 읽기 및 쓰기
- 테스트 케이스 실패 원인 분석
복잡한 구현시 파라미터 처리
이번 편의점에서는 복잡한 부분이 특히 구현시 프로모션 재고가 있는 경우, 없는 경우, 부족한 경우, 이벤트가 가능한 경우등 여러 복잡한 조건이 설정됩니다. 그러다보니 해당 조건을 판단하는 과정에서 해당 파라미터가 있어야하는데 이를 클래스로 나누는 과정이 있다보니 많이 쪼갤수록 접근하기 어려워진다는 어려움이 있었습니다. 그래서 결론적으로는 구현을 위해 클래스를 덜 조개며 여러 파라미터를 포함하는 형태로 구현했습니다. 예를들어 한 조건에서 파라미터만 4개를 들고 해당 조건을 확인하는 방식으로 구현했습니다.
파일 읽기 및 쓰기
파일을 읽기 및 쓰기 위한 모듈을 사용하기위한 path읽기, 읽기, 쓰기 기능이 어려웠습니다.
파일을 읽는 과정에서 상대경로, 절대경로등 로컬에서는 간단하게 넘어가는 것이 문제가 됩니다. 오프라인 스터디에서 만난3명이서 3가지 방식으로 다르게 구현한 것만 봐도 알 수 있습니다.
process.nev.pwd
,path.resolve
,procees.pwd()
이번엔 특히 소스의경우 es6방식이 강제되고 Jest의 경우 CommonJS가 강제되면서import.meta.url
가 Common JS에서는 허용안되는 문제등...
파일 읽기에서는
fs 모듈을 사용하여 읽어오는 과정에서 빈칸과 \r
을 편집하여 head및 body를 구별하는 기능이 어려웠습니다. 해당 파일을 출력하면서 보이지 않는 부분을 제대로 확인한 이후해야 다시한번 정규표현식 방식으로 해결
파일 쓰기
이 경우 파일을 업데이트해야하는데 원본을 건들면 안되는 상황이 문제였습니다. 그래서 여러 시도 끝에 변수 파일을 읽기 및 쓰기에 변수 TEST_FILE
을 선언해서 원본을 건드리지 않기. 그리고 초기화 함수를 도입하여 해당 파일을 원본에서 가져온 결과로 쉽게 초기화하기를 통해 쓰기 기능을 구현했습니다.
테스트 케이스 실패 원인 분석
마지막 테스트케이스가 실패하며 3/4결과가 나왔습니다. 그 이유는 테스크케이스의 표기에서는 없는 데이터가 출력되는현상때문이었습니다. 해당 테스트의 경우 해결법으로는 없는 데이터의 경우 임의로 구현하라
라는 기능을 보이지 않지만 구현해야하는 점이 었습니다. 단순히 테스트의 목적 ,결과, 표시가 완벽한 상황만 미션으로 수행하다가 그렇지 않은 경우를 처음 접하다보니 이런 경우를 통해 배우게 되네요
이번 4주차 아쉬웟던점: 처음에 통합 프로세스 다이어그램 그려볼 걸
이번에 구현시 복잡한 부분을 그림을 그리며 한 번 쯤은 코드작성먼저가 아닌 다이어그램을 그려보았으면 이라고 생각이 들었습니다. 지금까지 미션들은 어느정도 머리에 그려지다보니 구현시 바로바로 구현했지만, 이런 미션의 경우 처음부터 한번에 전체적으로 스캔했었으면 훨씬 더 장기적으로 문제가덜 했었을 걸 이라는 아쉬움