발표
11:13 ~11:22
- 과제 소개 (3분 30초)
- 기존 성과리포트 문제점
- 좀 더 빠르게 + 대충 설명해도 될듯
- 개발 과정 요약 (3분 30초)
- 주요 개발 이슈 (2분)
- 리렌더링 관련 최적화
- 캐싱
- 같은 쿼리 → recoil selector로 불필요한 API call 방지
11 : 36 ~ 12 : 00
프로젝트 질문
- 상태관리 라이브러리로 recoil 사용 이유?
- props drilling ..
- 다른 것과 비교해본 건지?
- redux는 사용 경험이 있어서 새로운 스택을 사용해보고 싶었다
- recoil은 hooks랑 비슷하게 상태를 관리할 수 있어서
- useState, useEffect.. 처럼 사용가능해서 redux보다 사용하는데 장점이 있었다 (러닝커브가 낮다, 가독성 있다)
→ 요거만 말하면될듯
- e2e 테스트를 왜 해야한다고 생각?
- 기능이 리팩토링 전후에 같은 기능을 하는지 확인 용도
- jest로 유닛테스트
- '사용자가 사용하는 환경'에서 잘 작동하는지 확인하려고 사용했다
- 과제가 사용자 요청에 따라 그래프에 잘 반영되는지 '시각적'인 부분을 확인하는게 좋을 것 같았다.
- React useMemo, useCallback으로 어떻게 리렌더링
- props 변경 없으면 메모이제이션해둔 기존 컴포넌트를 반환
- 함수는 렌더링 될때마다 생성됨 → 계속 리렌더링 발생
- 메모이제이션된 함수 사용하도록
- 클린코드 읽으면서 가장 인상깊던 부분?
- 구체적으로 어떤거 적용했는지
- 클린코드란 유지보수 비용을 낮추기 위해 코드의 가독성을 높이기 위한 작업이라는 생각이 들었다.
- 적용 : 추상화 수준을 맞추는 작업
- 핵심 부분만 남고, 세부 구현은 모듈화 → 코드 읽을 때 핵심 부분만 빨리 읽을 수 있도록
- 한 컴포넌트에서 추상화하는 수준을 공통적으로 맞춤
- 한눈에 주요로직을 파악할 수 있도록 함
- 헤더 컴포넌트 → datepicker 부분이 상당수를 차지, '날짜'라는 부분만 남기고 추상화함
- 프로젝트하면서 가장 성장했다고 생각하는 부분?
기술질문
- Array, Linked List 차이점?
- 배열 : 나열
- 탐색 : O(1)
- 삽입/삭제 : O(n) → 메모리 공간 확보 필요
- 링크드 리스트 : 다음요소 정보까지 가짐
- 탐색 : O(n)
- 삽입/삭제 : O(1) → 해당 메모리 주소만 변경
- 해시맵, 해시충돌 해결방법?
- 해시맵
- 유동적인 데이터를 고정적인 크기로 맞추는 자료구조
- 해시화 과정 거침 = 해시함수에 인자를 넣어 변환하는 것
- 해시 충돌
- 해시화 결과가 같은 것 (같은 메모리 반환)
- 해시 충돌 해결법
- 좋은 해시함수 만들기 : 다양한 요소를 받았을 때, 값들이 골고루 분포되도록
- 선형 탐사법 : 인접한 메모리 공간에 저장
- 개방주소법
- Linked List 사용
- Set, Map, List 차이점
- Set
- 하나의 집합을 표현하기 위한 자료구조
- 유일한 요소만 허용
- Map
- 객체와 유사하지만, key로 다양한 자료형을 받을 수 있다
- Object는 key로 string, symbol
- MVC 패턴이란?
- Model : 데이터
- View : User Interface
- Controller : Model-View 상호작용
- React는 MVC 패턴?
- MVVM 패턴도 아는지?