---
# System prepended metadata

title: 질문 목록

---

# 질문 목록

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.  

