목록공부 (179)
저장을 습관화
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bPfbQ8/btsCZjucOhu/So3RYPC7ucVrxjjjwuVvz1/img.png)
예를 들어, 사용자의 정보가 저장되는 Users 테이블과, 사용자가 작성한 게시글이 저장되는 Posts 테이블이 존재한다고 한다. - users.entity.ts import { Column, CreateDateColumn, DeleteDateColumn, Entity, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; import { Posts } from '../posts/posts.entity'; @Entity({ name: 'Users' }) // DB에서 쓰일 테이블의 이름 export class Users { @PrimaryGeneratedColumn({ type: 'int', name: 'id' }) id: numb..
상황은 사용자 로그인 이후 블로그에 게시글을 작성, 조회, 수정, 삭제하는 API를 가정하며, CRUD에 필수적인 패키지 외 가드 등은 생략한다. 사용하는 DB는 MySQL이다. 0. 사용자 정보를 가져오는 데코레이터 - user.decorator.ts import { createParamDecorator, ExecutionContext } from '@nestjs/common'; // 세션 방식 로그인 export const User = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return request.user; }, ); 1. Creat..
문법 기록 하나의 메소드에서 복수의 DB를 향해 쿼리를 전송하던 도중 DB 연결 오류 등의 에러로 쿼리가 누락되는 문제를 방지하기 위함 - examples.service.ts import { DataSource } from 'typeorm'; import { Examples } from './example.entity'; @Injectable() export class ExamplesService { constructor( @InjectRepository(Examples) private examplesRepository: Repository, private dataSource: DataSource, ) {} async exampleMethod() { const queryRunner = this.dataS..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lbIjz/btsCpcXN57g/VGblS6SLIvk7qKDlcmKdg0/img.png)
- 증상 nest.js 프레임워크에서 로그인 기능을 만들기 위해 인증 용 가드 작성 중 가드가 참조할 strategy를 작성하였으니 계속해서 401 unauthorized가 발생하는 문제 - 원인과 해결 각 구간마다 로그를 찍어서 에러가 발생하는 부분을 확인 local-auth.guard.ts import { ExecutionContext, Injectable } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; @Injectable() export class LocalAuthGuard extends AuthGuard('local') { async canActivate(context: ExecutionContext): Promise..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bk3UPk/btsCnGCTRwY/iZnmLkExMB2yBhN5p7STD0/img.png)
메모.. nestJS에 요청이 들어올때 이에 반응하여 동작하는 기능들의 선후관계이다. 먼저 동작하는 부분에 에러가 발생했을 경우 후에 동작하는 부분까지 요청이 가지 않으니, 이 순서를 기억해둔다면 개발 중 문제가 생겼을때 원인을 찾는데에 도움이 될 것이다. 1. 요청 수신(Request) 2. 미들웨어 2-1. 전역 미들웨어 2-2. 모듈 미들웨어 3. 가드 3-1. 전역 가드 3-2. 컨트롤러 가드 3-3. 루트(경로) 가드 4. 인터셉터(컨트롤러 수행 전) 4-1. 전역 인터셉터 4-2. 컨트롤러 인터셉터 4-3. 루트 인터셉터 5. 파이프 5-1. 전역 파이프 5-2. 컨트롤러 파이프 5-3. 루트 파이프 5-4. 루트 매개변수 파이프 6. 컨트롤러 7. 서비스 (존재하지 않는 경우도 있음) 8. ..
- 증상 TypeError: Cannot read properties of undefined (reading 'config') at Object. (C:\생략\project_community\dataSource.ts:5:8) import dotenv from 'dotenv'; import { DataSource } from 'typeorm'; dotenv.config(); const dataSource = new DataSource({ // 생략 신규 프로젝트 진행 중 dataSource.ts 파일에서 dotenv의 설정 내용을 사용하지 못하는 문제가 발생 - 원인 tsconfig.json에 esModuleInterop 옵션이 설정되어 있지 않아서 발생한 문제 이 프로젝트는 nest.js 프레임워크로 개..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c5xjJK/btsBGkVLpWO/Oq1mfLBwnc3fUGhbYcUamk/img.png)
1. FULL JOIN 왼쪽 테이블(table 1)과 오른쪽 테이블(table 2) 레코드에 일치하는 항목이 있는 경우 모든 레코드를 반환한다. FULL OUTER JOIN 이라고도 하며, 잠재적으로 매우 큰 결과 집합을 반활할 수 있다. 예시 테이블 Customers) CustomerID CustomerName ContactName Address City PostalCode Country 1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany 2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 5021 Mexico 3 An..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IYnO9/btsBCmm2cLB/kfIJZjTYK8wc7lpzescbQK/img.png)
1. LEFT JOIN 왼쪽 테이블(table 1)의 모든 레코드와 오른쪽 테이블(table 2)의 일치하는 레코드를 반환한다. 일치하는 항목이 없다면 오른쪽 테이블에서는 아무것도 가져오지 않는다. 오라클에서는 'LEFT OUTER JOIN'이라고 부른다. 예시 테이블 Customers) CustomerID CustomerName ContactName Address City PostalCode Country 1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany 2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 5021 M..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DHc6n/btsBDOhorQu/6FoXbB0IjiDbnWLj7vM8F0/img.png)
1. INNER JOIN 두 테이블 모두에서 일치하는 값이 있는 레코드를 선택한다. 예시 테이블 Products) ProductID ProductName CategoryID Price 1 Chais 1 18 2 Chang 1 19 3 Aniseed Syrup 2 10 예시 테이블 Categories) CategoryID CategoryName Description 1 Beverages Soft drinks, coffees, teas, beers, and ales 2 Condiments Sweet and savory sauces, relishes, spreads, and seasonings 3 Confections Desserts, candies, and sweet breads 예시 1) select Pr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/busgkl/btsByR7MXmq/91N6LObaFAspKX56fNlY21/img.png)
1. JOIN 두 개 이상의 테이블 사이의 열을 기반으로 행을 결합하는데 사용한다. 예시 테이블 Orders) OrderID CustomerID OrderDate 10308 2 1996-09-18 10309 37 1996-09-19 10310 77 1996-09-20 예시 테이블 Customers) CustomerID CustomerName ContactName Country 1 Alfreds Futterkiste Maria Anders Germany 2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico 3 Antonio Moreno Taquería Antonio Moreno Mexico 이때 Orders 테이블의 CustomerID 컬럼은 Customer..