NestJs Chapter 1

yeopยท2022๋…„ 7์›” 15์ผ

Nest JS ์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
2/10

๐Ÿ”ท TypeORM special columns

๐Ÿ”น CreateDateColumn

@CreateDateColumn์€ ์—”ํ„ฐํ‹ฐ์˜ ์‚ฝ์ž… ๋‚ ์งœ๋กœ ์ž๋™ ์„ค์ •๋˜๋Š” ํŠน์ˆ˜ ์—ด์ด๋‹ค. ์ด ์—ด์€ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๐Ÿ”น UpdateDateColumn

@UpdateDateColumn์€ entity manager ๋˜๋Š” repository์˜ ์ €์žฅ์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์—”ํ‹ฐํ‹ฐ์˜ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์œผ๋กœ ์ž๋™ ์„ค์ •๋˜๋Š” ํŠน์ˆ˜ ์ปฌ๋Ÿผ์ด๋‹ค. ์ด ์—ด ๋˜ํ•œ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๐Ÿ”น DeleteDateColumn

@DeleteDateColumn์€ entity manager ๋˜๋Š” repository์˜ ์ผ์‹œ ์‚ญ์ œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์—”ํ„ฐํ‹ฐ์˜ ์‚ญ์ œ ์‹œ๊ฐ„์œผ๋กœ ์ž๋™ ์„ค์ •๋˜๋Š” ํŠน์ˆ˜ ์—ด์ด๋‹ค. ์ด ์—ด ๋˜ํ•œ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. @DeleteDateColumn์ด ์„ค์ •๋˜๋ฉด ๊ธฐ๋ณธ ๋ฒ”์œ„๋Š” "์‚ญ์ œ๋˜์ง€ ์•Š์Œ"์ด ๋œ๋‹ค.

@ObjectType()
export class CoreEntity {
  @PrimaryGeneratedColumn()
  @Field((type) => Number)
  id: number;

  @CreateDateColumn()
  @Field((type) => Date)
  createdAt: Date;

  @UpdateDateColumn()
  @Field((type) => Date)
  updatedAt: Date;
}

๐Ÿ”ท Enums

enum์€ ํŠน์ • ํ—ˆ์šฉ ๊ฐ’ ์ง‘ํ•ฉ์œผ๋กœ ์ œํ•œ๋˜๋Š” ํŠน์ˆ˜ํ•œ ์ข…๋ฅ˜์˜ ์Šค์นผ๋ผ์ด๋‹ค.

  • ์ด ์œ ํ˜•์˜ ๋ชจ๋“  ์ธ์ˆ˜๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’ ์ค‘ ํ•˜๋‚˜์ธ์ง€ ํ™•์ธ
  • ํ•„๋“œ๊ฐ€ ํ•ญ์ƒ ์œ ํ•œํ•œ ๊ฐ’ ์ง‘ํ•ฉ ์ค‘ ํ•˜๋‚˜์ž„์„ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ „๋‹ฌ

code first ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๋•Œ TypeScript enum์„ ์ƒ์„ฑํ•˜์—ฌ GraphQL enum type์„ ์ •์˜ํ•œ๋‹ค.

registerEnumType ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AllowedColor enum์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

export enum AllowedColor {
RED,
GREEN,
BLUE,
}
registerEnumType(AllowedColor, { name: 'AllowedColor' });

๐Ÿ”ท Entity Listeners and Subscribers

๋ชจ๋“  ์—”ํ„ฐํ‹ฐ์—๋Š” ํŠน์ • ์—”ํ„ฐํ‹ฐ ์ด๋ฒคํŠธ๋ฅผ listenํ•˜๋Š” ์ปค์Šคํ…€ ๋กœ์ง ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ listenํ•˜๋ ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฉ”์„œ๋“œ์— ํŠน์ • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๋งˆํฌํ•ด์ค€๋‹ค.

๐Ÿ”น @BeforeInsert

์ด ์—”ํ„ฐํ‹ฐ ์‚ฝ์ž… ์ „์— ์ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ์— ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  @BeforeInsert ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํ‘œ์‹œํ•˜๋ฉด TypeORM์€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ repository/manager save๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ insert๋˜๊ธฐ ์ „์— ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
ex) mongoose์—์„œ pre save์ฒ˜๋Ÿผ DB์— ์ €์žฅ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

@BeforeInsert()
updateDates() {
this.createdDate = new Date();
}

๐Ÿ”ท bcrypt

Hash function : input ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋žœ๋ค output ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜

  • ๋‹จ๋ฐฉํ–ฅ์„ฑ: output์„ ํ† ๋Œ€๋กœ input ์—ญ์ถ”์ • ๋ถˆ๊ฐ€.
  • input์„ ์กฐ๊ธˆ๋งŒ ์ˆ˜์ •ํ•ด๋„ output์€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง.
  • input์— ๋Œ€ํ•œ output์€ ์–ธ์ œ๋‚˜ ๋™์ผ => table์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ.

npm i bcrypt
npm i @types/bcrypt -D

0๊ฐœ์˜ ๋Œ“๊ธ€