본문 바로가기

javascript/이외

(9)
[graphql] graphql N+1 문제와 prisma ORM의 해결 방식 Query optimization | Prisma Docs Query optimization How Prisma optimizes queries under the hood www.prisma.io graphql은 resolver을 적절히 연결하고, 이를 결합하여 한번의 요청으로 많은 데이터를 가져올 수 있다. 이때 resolver이 동작하는 과정에서 N+1 문제가 발생하므로, 이를 처리하기 위한 적절한 방법이 요구된다. N+1 문제 1번의 쿼리를 이용하여 A 엔티티를 N개 가진 배열을 읽어왔을 때, A엔티티에 대한 연관 관계 B 엔티티를 가져오기 위해 N번의 쿼리를 추가로 수행하는 상황이다. 간단하게 생각하면, 아래처럼 동작하는 상황이 N+1이라고 볼 수 있다. const users = db.user.f..
[nest.js & docker] window 환경에서 nest.js에 volume을 연결했지만 동작하지 않는 경우 결론 typescript 4.9 버전 정도부터 감시 옵션이 파일 시스템 기반 감시를 수행하도록 구성되어 있으나, window 환경에서 volume을 지정하면 해당 옵션이 제대로 동작하지 않는 듯 하다. tsconfig.json 파일에 다음 옵션을 추가해보자. "watchOptions": { "watchFile": "fixedPollingInterval" } 최신 버전의 nest.js을 사용하고 있다. docker-compose.yml 파일을 다음과 같이 작성했다. version: '3' services: backend: ports: - 8080:8080 depends_on: - my-redis # redis 동작해야 의미 O build: context: ./server dockerfile: Dockerf..
[오늘의 삽질] jest.fn이 undefined을 반환하는 경우 jest를 이용하여 테스트를 진행하는데, mocked 객체가 동작하지 않는 현상이 발생했다. jest.fn( )에 반환값을 명시했기 때문에 반드시 함수가 값을 반환해야 하지만, 실제로는 undefined만 반환되는 문제가 있었다. 참고로 javascript에서 아무런 값도 반환하지 않으면 undefined이므로 정확히 말하면 mock 함수가 값을 반환하지 않는 문제로 볼 수 있다. describe('TokenInfoService', () => { let service: TokenInfoService; let repo: jest.Mocked; // 작성한 mock repository 객체 const mocked_repo = { save: jest.fn((tokenInfo: TokenInfo): Promis..
[javascript] Ajv 라이브러리 https://ajv.js.org/ Ajv JSON schema validator The fastest JSON schema Validator. Supports JSON Schema draft-04/06/07/2019-09/2020-12 and JSON Type Definition (RFC8927) ajv.js.org Ajv는 자바스크립트 진영에서 많이 사용되는 validator 라이브러리 중 하나로, JSON Schema 또는 JSON Type Definition (JTD)을 이용하여 객체의 타입을 표현한다. 두 표현 방식 모두 표준으로 등록되어 있기 때문에, 해당 표준을 이용한 표기법만 알고 있다면 Ajv를 사용하기는 매우 쉽다. JSON Schema 문서: https://json-schema.org..
[jest] 동일 파일 내의 함수 mocking하기 코드 깃허브 주소: https://github.com/blaxsior/my_nest_study/tree/master/capp/src/auth/util 참고한 내용: https://stackoverflow.com/questions/45111198/how-to-mock-functions-in-the-same-module-using-jest export async function genHash(user_pass: string, salt: string) { return (await pbkdf2(user_pass, salt, 100000, 64, 'sha512')).toString('hex'); } export async function generatePassword(user_pass: string) { cons..
[nestjs] DI token https://docs.nestjs.com/fundamentals/custom-providers#non-class-based-provider-tokens Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Re..
mermaid.js - 프론트엔드에서 UML을 그리는 라이브러리 과거 사용한 draw.io 파일들: https://github.com/fish9903/Bus-Tour/tree/main/drawio 학교에서 소프트웨어 공학 프로젝트를 수행할 때 UML을 다룬 적이 있었다. 당시에는 UML 이미지를 얻는 것 자체가 목적이었기 때문에 plantUML, draw.io을 병행해서 사용했고, 설계 과정에서 큰 도움을 받았다. 최근 트리 자료구조를 공부하면서 이를 시각화하기 위해 라이브러리를 찾던 중, 위 언급한 plantUML과 문법이 비슷하면서 자바스크립트 기반으로 작성된 라이브러리를 발견했는데, 그게 오늘 설명할 mermaid.js이다. Mermaid.js https://mermaid.js.org/#/ Mermaid | Diagramming and charting tool ..
node redis : 노드 환경에서 사용하는 redis 데이터베이스 인터넷 강의를 들으면서 공부하다 보니 redis 데이터베이스를 사용하는 상황이 생겼다. 해당 강의에서는 레디스를 노드 환경과 연결하기 위해서 npm의 redis 패키지를 이용했고, 이 글에서도 해당 패키지에 대해 간단하게 정리할 것이다. 주소는 다음과 같다. https://www.npmjs.com/package/redis 공식문서가 약간 이미 v3 이하를 사용했음을 전제하고 설명하지 않는 부분이 좀 있는 것 같다. v3 문서는 여기. https://www.npmjs.com/package/redis/v/3.1.2 이 글을 쓰는 시점에 해당 패키지의 최신 버전 은 v4이다. 클라이언트 생성 시 설정하는 부분이나 async 코드의 사용 가능 여부, pub/sub 구조에서의 이벤트의 비중 등 몇몇 부분에서 자질..