[11 19] 피어세션 - boostcampwm-2021/WEB08-AgileStorming GitHub Wiki

피어세션 Web08, Web20

참가자

Web08

  • 김승현
  • 김유석
  • 안주영
  • 조성현

Web20

  • 강호형
  • 방규빈
  • 유제호
  • 이신필

질문

피곤해보이신다ㅠㅠ

5시까지 머지를 했습니다... 다 문제였다. 넘길 수 없는 버그가 많았습니다. 목표한 거에 반을 못했다. 완전 처음 api를 합친거다...

머지 과정

4명이서 페어프로그래밍을 하다보니 오류가 많이 났다. 라이브쉐어를 vsc로 쓰다보니 실시간 반영이 안되는 이슈가 있었다. 하다보니, 느낌이 오기는 했는데 (맛이 가는게(본인이)) 로컬에서 돌리 백엔드가 미리 준비가 안됬다고 느꼈다. 백엔드 처음 보는 스택, nestjs, typeORM, swagger UI

스웨거?

규빈님 발표영상 보았듯이 데코레이터로 NESTJS와 연동해서 쓸 수 있다. => 자동으로 문서화를 해준다. 이거를 잘 해놨어야지 매끄럽게 연동이 됐을텐데, 아쉬움이 남는다.

typeorm에 관한 이슈

row 쿼리가 편한 분들인데, 타입 orm에 도전하고 있다.(?ㅋㅋㅋ)

fk id를 안들고 온다. => typeORM에 entity에 관계만 설정해주지말고 따로 컬럼을 설정해주면 받아 올 듯

커리빌더를 쓰면, select가 중간에 껴있다. => 마음에 안들어서 그냥 row 쿼리 쓰기로 했다.

typeorm 트랜잭션 관리가 힘들다. => 일단은 쿼리 러너를 사용해서 관리하도록 했다.

프로젝트 정보를 긁어올때 쿼리에 대한 고민

nullable하지 않다면 inner이 left join보다 더 효율적이다. nullable 하냐 안하냐가 중요한 이슈

inner join = N+M 효율 left join = N*M 효율

결론, 쿼리를 나눠 보내는게 나아보인다.

어플리케이션 조인 vs db에서 조인 => 어플리케이션에서 아예 조인을 하는 방법

one query vs many queries => 대용량 데이터를 넣고 테스트를 해보면 성능차이가 있을 수 있다.

n to one vs n to n 과의 join성능도 차이가 난다. => 찬반 이슈가 있다. 맞다는 이유로 따라가고 성능 검사를 해보는 것도 좋을 것 같다.

=> 비정규화도 방법이 될수도

저희도 인지하고 있고, 추후에 쿼리 성능 개선을 목표로 하고 있다!!

무한스크롤

api => 피드 갯수를 샘 => 스크롤 길이를 측정 => 배열안에서 다섯 개씩 피드를 그림 => 스크롤 탑 위치를 측정 => 스크롤 길이와 배열의 길이에 따라서 알맞은 피드를 찾아 표시 => 스크롤을 강제로 내려줌

피드가 다시 그려지는 이슈가 있는데 => useMemo를 사용해서 해결

네스트js 인터셉터?

인터셉터는 핸들러랑 가장 가깝게 붙어 있는 미들웨어 axios랑 비슷한데, 요청을 중간에 처리할 것 한다. 미들웨어인데 앞뒤로 붙일 수 있는 미들웨어

express에서 돌아가는 친구라 => 결국 다 미들웨어 미들웨어는 앞에만 붙일 수 있구 인터셉터는 앞뒤로 붙일 수 있게 구분되어있다.

역할에 따라 배치가 있다. 미들웨어 => 가드 => 파이프 => 익스프레스도 미들웨어를 결국 종류를 나눈다. 이를 명시적으로 구분한 느낌.

레디스

히스토리 구현 어떻게 할 수 있을까? db 데이터베이스 업데이트 해야한다. =>동기화문제

이벤트소싱! 오직 create만 있고, 로그를 쌓는 방식

마이크로 서비스 아키텍쳐에서 자주 쓰이는 방식

이벤트가 100만개라면? => 특정 이벤트 개수를 기준으로 스냅샷 => 가까운 정보 기준으로 스냅샷

아무리 스냅샷이 있어도 불편! => CQRS 명령 조회 책임 분리

이벤트소시에 있어 CQRS 필수

이벤트 스키마 관리에 주의 이벤트 일과성을 잘 지키도록 만들어야한다. (멱등성) 이벤트 DB와 조회 DB사이에 불일치가 있다.

단순히, 클라이언트 히스토리 재현을 위함 읽기 DB는 데이터를 가져오는 일을 마인드맵 페이지 진입시에만 일어남

Redis는 싱글스레드이니까 순차적으로 하기 좋겠다.!

Redis stream 카프카의 consumer groups 개념

XADD 데이터 추가 XLEN 데이터 길이 XRANGE, XREVANGE 데이터 읽어오기 (범위로) XREAD 읽기

프로듀서 컴슈머를 제대로 쓰려면 명령어가 사실 엄청 많음

express 타입스크립트 이슈

express가 async await 가 지원을 제대로 안한다. => 제대로 오류를 캐치하지 않음 참고 키워드 : wrapasync

노드 LTS 16

unhandled promise => warning 에서 exception으로 자바스크립트 = [length -1] => Array.at()