쿼리 실행 계획 시각화하기

개발/PostgreSQL 2022. 1. 24. 08:20

TypeORM에서 logging 옵션 중 query 옵션을 사용해서 GET 메소드 API 호출 시 날라가는 쿼리의 실행 계획을 출력하고 시각화하였다. SELECT "activity"."id" AS "activity_id", "activity"."created_at" AS "activity_created_at", "activity"."title" AS "activity_title", "activity"."content" AS "activity_content", "activity"."subject" AS "activity_subject", "activity"."end_date" AS "activity_end_date", "activity"."images" AS "activity_images", "activi..

Article Thumbnail
GraphQL과 Rest API 동시 사용시 Cannot read property 'headers' of undefined 에러 해결

개발/NestJS 2022. 1. 22. 08:20

레거시는 GraphQL, 추가 개발은 Rest 방식으로 진행되는 NestJs 기반의 백엔드에서 @Public이 아닌 Rest API에서 TypeError: Cannot read property 'headers' of undefined 가 발생하였다. 원인 처음 생각한 원인은 front에서 Rest API를 호출할 때, header에 토큰 정보가 포함되지 않는 것이라고 생각했는데 체크해보니 잘 들어가 있었다. 백엔드에서 JWT를 검증하는 AuthModule에서 백엔드로 들어오는 request를 체크하는 jwt-auth guard에 문제가 있었다. getRequest()메소드가 기존 @nestjs/passport에 포함되어있는 AuthGuard의 getRequest()를 오버라이드해서 GraphQL의 req..

Article Thumbnail
QueryBuilder .leftJoin사용시 원하는 칼럼만 SELECT하기

개발/TypeORM 2022. 1. 17. 08:20

QueryBuilder를 사용하여 JOIN 쿼리가 포함된 쿼리문을 작성하다보면 주로 .leftJoinAndSelect 메소드를 사용한다. .leftJoinAndSelect를 사용하면 하나하나 칼럼을 체크할 필요가 없고, 코드 가시성적인 면에서는 장점이 있었지만, 모든 칼럼을 Select해오다보니 성능적인 면에서 필요한 칼럼만을 가져오는 쿼리에 비해 상대적으로 메모리 사용량이 많은 문제점 또한 존재한다. 작성하던 코드 중 JOIN을 3개의 테이블에 걸쳐 쿼리를 날려야되는 API가 있었는데 모든 칼럼을 SELECT해올 필요가 없어서 조금 코드 가시성은 떨어져도 .leftJoinAndSelect의 사용을 지양하고, .leftJoin과 .select, .addSelect를 사용하여 작성하였다. async fin..

Article Thumbnail
Duplicate key value violates unique constraint

개발/PostgreSQL 2022. 1. 16. 01:43

포스트를 저장하는 API에서 500번대 에러가 발생하였다. 에러 로그를 찍어보니 "QueryFailedError: dupliacte key value violates unique constraint "PK_eff3e46d24d416b52a7e0ae4159"라고 출력되었다. 원인 TypeORM에서 @Entity를 통해 테이블을 생성하고, id 칼럼을 @PrimarayGeneratedColumn을 사용하여 primary key로 지정하고 unique value로 지정하고 PostgreSQL로 매핑하였는데 데이터를 복사하여 테이블로 이동시키면서 시퀀스 객체와 테이블의 키 값에 차이가 나면서 insert시 Duplicate key value violates unique constraint 에러가 발생된다. 해결..