TIL(210820): TypeORM relations, Redis Key, 향상된 전자상거래, ...

최수민·2021년 8월 19일
0

TIL

목록 보기
2/8
post-thumbnail

1. TypeORM repository.find에서 relations sorting이 지원되지 않는다.

댓글-답글을 불러올 때 답글 list를 id DESC로 정렬하고 싶었는데, 지원하지 않는다고한다...
일단은 queryBuilder를 사용하는 방법으로 해결해볼 수 있지만, 귀찮기 때문에 그냥 client단에서 대응하기로 했다. relation들은 어차피 join 후 전부 한번에 넘기기 때문에 문제는 없지만.. 어서 솔루션을 마련해봐야지.

해당 이슈는 링크에서 핸들링 중이다. 15일 전에 맡겠다는 사람이 나왔는데 언제 해결될진 모르겠다. 주말에 내가 한번 도전해봐야겠다. (수정: 시간 없어서 못 할 것 같다 ㅋㅋ)

2. Redis의 Key

Redis의 Key는 binary safe하다. 즉 "안녕" 같은 문자열부터 JPEG 파일의 내용까지 모든 binary sequence를 Key로 지정할 수 있다. 빈 문자열도 입력할 수 있다.

Key를 설정할 때 주의할 점들

  1. 아주 긴 Key(1024바이트 정도)는 저장 측면에서도 불리하지만, 탐색할 때도 추가적인 비교 연산을 필요로 한다. 지정해야할 값이 너무 길다면 SHA1등의 hash 기법을 고려해보자.
  2. 아주 짧은 Key도 거의 권장되지 않는다. "user:1000:followers" 대신에 "u1000flw"를 key로 사용하는 상황을 생각해보자. 전자가 가독성 측면에서 훨씬 유리할뿐더러 약간 길어진 문자열 길이는 Key object 자체와 Value object 크기에 비하면 매우 작다. (물론 짧은 Key가 더 적은 메모리를 사용하는 것은 사실이니 상황에 맞게 적절히 판단해보자.)
    • 마침 이렇게 쓰고 있었는데 다 고쳐야겠다 😅
  3. 데이터 스키마를 최대한 준수하자. "user:1000"처럼 "object-type:id" 형식을 사용해보는 것도 좋다. multi-word field는 .이나 -으로 구분해서 표현해보자. (e.g. "comment:1234:reply-to")
  4. Key의 최대 용량은 512MB이다.

공식문서 링크

3. 향상된 전자상거래 (Enhanced ecommerce)

Google Analytics 공식 플러그인이다. 상품노출/거래/환불/결제 등등 사용자와 판매상품 간의 interaction을 보다 잘 트래킹할 수 있다.

아래 명령어를 사용해 로드시킨 후 사용할 수 있다.

ga('require', 'ec');

// 예시 - impression
ga('ec:addImpression', { // addImpression이라는 키워드
  'id': 'P12345',                   // Product ID (string).
  'name': 'Android Warhol T-Shirt', // Product 이름 (string).
  'category': 'Apparel/T-Shirts',   // Product 카테고리 (string).
  'brand': 'Google',                // Product 브랜드 (string).
  'variant': 'Black',               // Product 옵션 (string).
  'list': 'Search Results',         // Product 리스트 (string).
  'position': 1,                    // Product 위치 (number).
  'dimension1': 'Member'            // Custom dimension (string).
});

더 자세한 내용은 아래 링크들을 참고하자.

(한글) 유림님의 정리글
GA 공식 문서
Demo

4. lockFileVersion이 뭘까?

npm v5, v6를 통해 생성됐으면 lockFileVersion: 1, v7을 통해 생성됐으면 lockFileVersion: 2다.
version 1에서는 node_modules나 npm registry를 참조해야만 했던 정보들을 version 2에선 파일 자체에 담았다고 한다.
npm 블로그에 장점들이 자세히 나와있는 것 같은데 아직 안 읽어봤다 ㅋㅋ

공식 문서 링크
npm7 릴리즈노트 - Changes to the lockfile
npm 블로그 - Why Keep 'package-lock.json'>

5. Yarn berry, 왜 쓸까?

결론: node_modules의 의존성 관리 문제를 해결하기 위해서.

PnP를 사용해 패키지를 저장하고, 의존성 정보를 기록한다.(.pnp.cjs)
대표적인 장점은 다음과 같다.
1. node_modules를 일일이 탐색하는 대신, .pnp.cjs 파일을 통해 의존성을 한번에 찾을 수 있다. require() 시간 단축
2. .pnp.cjs 파일을 이용해 의존성이 관리됙기 때문에 외부 환경과 무관하게 작동한다.
3. node_modules를 생성하지 않고, 같은 버전의 패키지를 여러번 복사하기 때문에 설치시간이 단축된다.
4. 의존성을 끌어올리지 않아 각 패키지들이 정확히 기술된 의존성에만 접근한다.
5. node_modules와 다르게 변경에 대한 검증이 쉽다. 전체 삭제 후 재설치하는 경우가 발생하지 않는다.
6. node_modules보다 훨씬 작고 가볍기 때문에의존성 파일들을 전부 Git에 올릴 수 있다.(Zero-install) 이러면 git clone시에 의존성을 새로 설치하지 않아도 된다.

진짜 좋은 것 같다. 어서 공부해서 핔 프론트엔드랑 RAP에 적용해야겠다 ㅎㅎ

토스테크 - node_modules로부터 우리를 구원해 줄 Yarn Berry

(번외) Simplicity 21

토스 디자인 컨퍼러스 Simplicity 21 사전신청이 열렸다. 사전신청 링크
네이버 콜로퀴움보다 더 살아있는 생생한 경험들이 공유될 것 같아 기대가 크다.

특히 사일로 중심의 매우 분산된 기업 구조를 갖고 있지만 튼튼한 디자인시스템 TDS를 통해 이를 극복하고 일관된 UI/UX를 제공하고 있는 토스라서 더더욱 기대가 된다 :-)

profile
velog에는 TIL, 잡담만 올립니다! 아티클들은 블로그로 (https://sumini.dev)

0개의 댓글