# 질문 목록 1. 프로젝트에서 가장 어려웠던 점은 무엇인가요? - CRA를 안쓰고 시작했다가 끝에 가서야 성능 이슈를 발견함 - CRA에서 기본적으로 해주던 성능 문제를 직접 옵션을 공부해서 적용해나감 - 아직도 완전한 최적화는 하지 못함 - chunk 파일로 다운 받는거 - nginx에서 압축 파일로 받는 것 - devtools 없애는거 - code splitting 3. 어떤 식으로 협업을 진행했나요? - zoom 환경 - deadline - 학습과 구현을 모두 해야한다는 점 - 오전의 스크럼, 문서화를 통해서 해결했다. - 구현을 하다가 모르겠는 부분을 zoom을 통해서 함께 논의했다. 4. 가계부에서 가장 중요하게 생각되는 것은 무엇인가요? - 보안적인 서비스 - 사용자 경험 - 시각적 요소가 중요 - 데이터 삽입/조회 위주의 서비스 6. 몽고디비 명분 8. 달력 9. svg 10. 드래그 앤 드랍 - 2가지 과정으로 이루어짐 - 거래내역을 드래그 해 해당 날짜에 드랍하면 수정이 되도록 하는 것 - ondragstart에서 거래내역의 현재 드래그된 거래내역 데이터를 state로 갖고 있도록함 - ondrop에서 state로 갖고 있는 거래내역 데이터를 drop된 곳의 날짜로 변경해서 api 요청, store에서 변경 - 거래내역을 드래그 해 해당 날짜에 hover 하면 미리 거래내역이 들어갈 위치를 보여주는 것을 만드든 것 - 현재 드래그된 거래내역이 어느날짜 위에 있는지를 알아야함 - ondragenter, ondragleave로 구현 - ondragleave가 날짜 컨테이너의 자식 엘리먼트를 지날 때도 호출됨 - ondragleave를 사용하지 않도록 했다. - 계속해서 다른 곳으로 들어갈 때는 문제가 없음 - drag를 하고 drop 불가 지역에서 놓았을 때 표시하는 엘리먼트가 남아있음 - ondragend에서 초기화를 해줌 dropEffect가 none일 경우만 - 그래도 매우 빨리 갔다 오는 경우 남아있는 문제가 있음 - ondragend에서 어느 때나 초기화를 해줌 - 제대로 된 드랍 지역에 놓았을 때 ondragend에서 초기화를 해주면 state가 바뀌어 렌더링이 다시 된 다음 ondrop에서 store의 데이터를 변경하기 때문에 잠깐의 시간동안 깜빡이는 문제가 있음 - ondragend에서 settimeout을 이용해 일정 시간 뒤에 초기화를 해줌 11. oauth - client id를 가지고 각 소셜 로그인 사이트로 이동 - 해당 사이트에서 사용자가 로그인 진행 - 로그인 이후에 정해진 redirect url로 리다이렉트 - 해당 사이트에서 url과 함께 보내진 code를 읽어 서버로 요청을 보냄 - 서버에서 code와 client id, client secret을 가지고 access token 가져옴 - access token을 가지고 사용자 정보를 가져옴 - 사용자가 서버의 db에 있는지 확인, 없으면 넣어줌 - access token 발급 - 클라이언트로 반환 - 어려웠던 점 - 처음에 code를 가지고 각 소셜 로그인 사이트로 바로 요청을 보냈으나 cors 오류. - 표준이 없어서 두 사이트가 조금씩 다른 부분이 있어서 한 함수로 처리하지 못함 12. csv import export - Export 과정이 어떻게 되나요? - 몽고DB의 데이터를 백엔드에서 csv파일로 가공한 후 FE로 보내주었다. - 다운로드 받을 수 있게 blob 파일을 createElement('a')로 생성하여 다운로드 옵션을 주었다. - Import 과정이 어떻게 되나요? - Client가 Import 하고 싶은 csv파일을 첨부하면 useState로 setFile 해준다. - csv 파일을 json형태로 서버에 보내준다. - 서버에서 JSON.parse()로 배열형태로 바꿔준 후 mongDB에 맞는 객체로 가공해준다. - 형식에 맞지 않는 key값이나 필드값이 비어있다면 error를 던진다. - 구현 시 어려웠던 점? - 원래는 csv파일을 첨부하면 통째로 백엔드에 보낸 후 백엔드에서 모든 가공을 하고 싶었지만 csv 파일의 내용을 보기위해선 FE에서 열어서 보내지 않으면 백엔드에서 파싱할 방법이 없어서 어려웠다. 13. 가계부 목록 페이지 질문 - . 14. 메세지 파싱 15. Token - Access Token, Refresh Token 사용 - Access Token 만 사용하는 것은 토큰 탈취의 가능성이 있어 Refresh Token을 사용했다. - Refresh Token의 관리 - Access Token이 만료될 시 Client측 에서 Refresh Token을 보내줘야 했다. - 따라서 Client 측에 보관하기로 결정했다. - 여러가지 보관 방법이 있겠지만, 우선 Local Storage에 보관하기로 했다. - 보완할 수 있는 방법 - Refresh Token의 탈취를 방지하기 위해 "로그아웃"이나 "토큰 만료시"DB에 Refresh 토큰을 Black List로 관리하여 탈취된 토큰으로 접근시 막는다. - Sliding Session 방법을 사용하여 Access Token 이나 Refresh Token에 적용한다. - 가계부는 입력 텀이 짧은 서비스 이기에 Refresh Token에 적용하는 것 보다는 Access Token에 적용하는 것이 좋을 것 같다. - Refresh Token의 보관방식을 변경한다. - Auth Server와 Resource Server를 분리한다. 그리고 Refresh Token 을 Resource 서버에서 가지고 있다가, Access Token이 만료될 시 Auth Server에 전송하여 새로운 Access Token을 받아오고, Client에 보내준다. - Resource 서버에서는 Refresh Token과 Access Token에 대해서 관리 해줘야 할 것 같다. Auth 서버에서는 Refresh Token의 블랙리스트를 관리해준다. 16. TS - TS를 적용했을 때 좋다고 생각한 부분 - 매개변수나 반환 값의 타입을 지정해 줌으로써, 미연에 방지할 수 있다. - 어려웠던 점 - ㅇㄹ 17. koa - Express 랑 차이점? - 느낀점 빌드업 18. mongo db - ㅇㄹ 19. 3d 캐러셀 - ㅇㄹ 21. 라이트모드 / 다크모드 - ㅇㄹ 23. URL에 정보 표기하지 않았을 때의 문제점 - ㅇㄹ 25. MobX 질문 - 차이점 - store를 여러개 만들 수 있다. - mutable 하게 수정 가능 - 상태관리 라이브러리의 장점? - depth가 깊은 컴포넌트 사이의 state와 method 접근이 복잡해지는 문제를 해결할 수 있다. - 컴포넌트에 집중된 비즈니스 로직을 분리할 수 있다. 컴포넌트가 컨트롤러 같은 역할을 하고 나머지 비즈니스 로직은 분리해서 관리할 수 있다. 26.