-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1단계 - 지하철 노선도 미션] 미키(권세진) 미션 제출합니다. #21
Conversation
Co-authored-by: Kwon Se-jin <0307kwon@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 발리스타님! 미키입니다 ㅎㅎ
어제 발리스타 님을 볼 수 있어서 너무 반가웠습니다 😊
이번 미션에서 모달 부분이 잘 이해가 안가서 어제 여쭤보았었는데요
사실 잘 이해가 안되었습니다...... ㅠㅜ 😭
그래서 모달 부분에 대한 질문과 Form을 context API로 만들어본 것
두가지가 피드백에 관한 가장 큰 질문입니다!
그 동안 정말 감사했습니다!! 🧡
피드백 관련 질문
모달 관련 질문1
모달 관련 질문2
@를 붙이므로써 더 의미가 강조되는게 있을까요?
Form을 context API로 구현
추가적인 질문
요즘 에러 핸들링을 어디서 해야하는 지 고민이 많습니다!
계속 코드를 짜면서도 에러 핸들링 코드가 너무 분산되는 느낌이 듭니다
고민을 하면서 스스로 생각해보았을 때
보통 fetch와 같은 비동기 요청에서 try catch로 핸들링 하는 경우가 많으므로
API 레이어에서 에러 핸들링을 마치고 추가적인 사이드 이펙트를 막아 최대한 정상 동작 시켜야한다고 생각합니다
그리고 나머지 에러들은 에러바운더리에서 한번에 핸들링하여
화면을 모두 날려버리지 않고, 준비된 화면을 보여주는 것이 맞지 않을까...? 라고 생각합니다!
보통 에러 핸들링은 어디서 처리를 해주는 것이 좋을까요?
발리스타님의 의견이 궁금합니다! 😁
import { LineColorContainer, LineForm, LineModalButtonContainer } from './LinesModal.styles'; | ||
|
||
interface Props { | ||
onClose: () => void; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅠㅜ 다른 모달 관련 피드백과 같은 맥락이군용... 다른 피드백에 질문드렸습니다! 😭
src/pages/Login/Login.tsx
Outdated
const history = useHistory(); | ||
const [errorMessage, setErrorMessage] = useState(''); | ||
|
||
const onLogin: FormEventHandler<HTMLFormElement> = async (event) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어디서부터 어디까지 빼는 것이 좋을까 고민을 하다가 정말 최소한만 page에 남기고
모두 hooks/service 레이어로 빼주었습니다!
이렇게 하니 페이지에서는 마크업만이 남았고 service 레이어에서는 비즈니스 로직이 모두 들어가게 되어
좀 더 명확한 분리가 이루어지는 것 같았습니다.
이러한 방식으로 시도하는 것이 좋은 방향일까요?! 궁금합니다! 🙋♂️
1ba5f3a
to
7d256dc
Compare
일단 미키,
요 답변에는 답변 안할께여! 스스로 알아보시길 권합니다... ㅋㅋ 매일 바로 답을 줬지만, 만나서 설명했음에도 이해를 못했다는것은! 그 외적인 지식이 부족하다는 뜻입니다!! 홧팅 |
@Vallista 발리스타님 마지막 피드백 감사합니다! 객체 지향 프로그래밍 공부 또한 onClose는 없어야 된다는 것은 이해가 갔지만 어떻게 구현해야하는가에 대해 고민이 많았습니다! 이번에 context api의 역할이 그저 다크모드나 언어 선택 기능 정도에 국한되는 것은 아니라는 것을 알게되었습니다. 혹시 다음 단계로 넘어가도 괜찮을까요? 😊 |
고고! |
학습로그[테스트]{컴포넌트 테스트와 E2E 테스트의 차이점} - 4/5내용컴포넌트 테스트와 E2E 테스트가 헷갈렸던 경험 page 컴포넌트 단위로 테스트를 진행하면서 page 중에서도 signup 페이지를 테스트하면서 컴포넌트 테스트 vs E2E 테스트 컴포넌트 테스트와 E2E 테스트의 가장 큰 차이점은 +컴포넌트에서의 단위 테스트와 통합 테스트 리액트 공식 문서에서 말하는 컴포넌트 테스트는 단위 테스트와 통합 테스트의 구분이 명확하지 않다고 한다. form 내부의 button 컴포넌트도 같이 테스트해야하는 것인가? 이러한 질문에 대한 답은 팀마다 다를 수 있지만, 어떤 답을 도출하느냐에 따라서 ✨ 유닛 테스트 로직을 가진 단일한 함수, 클래스 또는 객체에 대한 테스트. ✨ 통합 테스트 여러개의 유닛이 다른 유닛과 통합되는 과정에서 일어나는 일에 대한 테스트 링크https://reactjs.org/docs/testing.html [리액트]{객체 vs 컴포넌트} - 4/5내용객체와 컴포넌트. 같은 것이라 생각할 수 있지만 엄연히 다른 개념이다.
링크https://www.geeksforgeeks.org/difference-between-component-and-object/ https://mckdh.tistory.com/entry/객체지향의-탄생-객체와-컴포넌트-아키첵처와-아키텍트 [js]{객체 지향 프로그래밍} - 5/5내용
[js]{객체 지향 프로그래밍을 잘 하기 위한 5원칙 (SOLID)} - 5/5
링크https://velog.io/@thms200/SOLID-원칙w.OOP https://ko.wikipedia.org/wiki/SOLID_(객체_지향_설계) |
1단계 - 지하철 미션 🚋
데모 페이지
스토리 북
안녕하세요 발리스타님! @SunYoungKwon 과 함께 지하철 미션으로 돌아온 ✨미키✨입니다!! 🐭🐭🐭
자동차 경주 미션 이후 처음이네요 😭😭😭😭
마지막 미션으로 발리스팀을 다시 만나게 되어 너무 기쁩니다!
마지막 미션인 만큼 열정을 담아 최선을 다해 배워가겠습니다!! 🔥🔥🔥
🙋♂️ 집중적으로 피드백 받고 싶은 부분
💕 커스텀 훅을 분리한 것이 적절할까요? 시도해보았습니다!
처음에는 formInput이라는 state로 모든 input을 하나로 묶어보려고 했는데
이건 너무 훅의 크기가 커지는 것 같아 포기하고
input에 관련된 변수와 로직들을 하나로 묶고 관심 있는 부분만 노출시키고 싶어
useNotificationInput과 useInput 커스텀 훅을 만들어 보았습니다!
이렇게 만들어보았더니 다음과 같은 장단점을 느꼈습니다.
의미가 있는 커스텀 훅이었을까요?! 더 좋은 방식으로 훅을 빼낼 수도 있을 것 같은데 아직 미흡하여 잘 모르겠습니다 ㅠㅜ
커스텀 훅에 대한 발리스타님의 의견이 궁금합니다! 😁
💕 생각보다 편하지 않았던 리덕스 툴킷
물론 리덕스만 사용하는 것보다는 리덕스 툴킷이
액션을 일일이 만들어주지 않아도 된다는 점,
그리고 관련된 액션과 리듀서의 코드가 가까이 있어 파악하기가 쉬웠다는 점이 좋았습니다.
하지만 리덕스 툴킷도 생각보다 불편했습니다.
새로운 요청을 위한 리덕스 썽크 함수를 매번 만들어야하는 등 반복적인 작업을 하는 것은 여전했습니다.
저희가 리덕스 툴킷을 처음 사용해보아 제대로 툴킷을 적용한 것인지 중점적으로 봐주시면 좋겠습니다 :)
💕 지하철 앱에 리덕스를 적용하는 것이 괜찮은 방식일까요?
우선 저희가 상태관리로 리덕스 툴킷을 적용한 이유는
이렇게 2가지가 있었습니다.
하지만 실제로는 prop drilling이 그렇게 심하게 일어나는 것 같지는 않았고
fetch도 Get 요청을 최대한 줄여보려 했지만 결국에는 서버 데이터와 동기화를 위해 매번 fetch하는 수 밖에 없어
리덕스 툴킷을 사용하면서 리덕스의 장점을 그렇게 살리지는 못했다는 생각이 듭니다.
(Redux DevTool로 상태 변화를 추적하는 것은 편했던 것 같습니다.)
이번 미션은 정말로 fetch만 사용했어도 되었을지도 모른다는 생각이 듭니다.
아직까지는 redux를 사용하는 이유가 그렇게 와닿지 않아서
혹시 현업에서는 어떤 이유로 redux를 많이 쓰는지 알고 싶습니다!
💕 아직 React Testing Library를 제대로 쓰지 못하는 것 같습니다
아직 단위 테스트와 E2E 테스트의 개념이 잘 잡히지 않는 것 같습니다.
이번 미션에서 저는
<Signup />
이라는 컴포넌트를 테스트하기 위해여러 input을 입력하고, submit 버튼을 누르고, request 함수가 제대로 실행되었는지
검증하였습니다.
그런데 이런 방식으로 테스트하니 E2E 테스트라는 생각이 들었습니다.
저는 처음에는 컴포넌트라는 단위를 테스트하는 것이 단위 테스트라는 생각을 하였는데
이런 방식으로 테스트하니 유저 입장에서 처음부터 끝까지 테스트하는 E2E 테스트라는 생각이 들었습니다.
그리고 cypress처럼 input에 입력값을 넣고 버튼을 누르는 동작들이 화면에 보이는 것도 아니라 cypress보다 더 답답했습니다. React Testing Library의 장점을 제대로 활용하지 못하고 있다는 생각이 들었습니다.
이에 대해 다른 크루의 의견도 물어보았는데 테스트할 기능 하나만 빼고 모두 mocking하여 테스트하는 방식으로 하고 있다고 대답을 들었습니다.
단위 테스트는 어디서부터 어디까지 mocking해야하는 것일까요? 궁금합니다! 🙋♂️