오늘은 USER CRUD
를 생성하는 와중 배운 새로운 지식에 대해서 공유해보려고 한다.
- Programming Language
TypeScript- Framework
NestJS- API 설계
GraphQL and Apollo- Database & Relevant
PostgresQL & TypeORM
자바스크립트 이외에 자바와 C 그리고 python등을 사용해봤던 프로그래머들이라면 enum에 대해서 꽤 익숙하게 들어봤을 것이다만 자바스크립트를 사용했었던 사람이라면 다음과 같이 Object.freeze(obj)
를 써봤을 것이다.
let obj = { name: "John", age: 30 };
// Freeze the object
Object.freeze(obj);
// Try to modify the object
obj.name = "Jane"; // This will have no effect
obj.newProp = "new value"; // This will have no effect
// Output the object
console.log(obj); // { name: "John", age: 30 }
사실 위 처럼 사용해도 크게 상관은 없지만 타입스크립트는 다른 언어를 공부했던 사람들에게 조금 더 친근감을 주고자 enum
을 도입한 것 같다.
여기서 enum이란
여러 값들에 미리 이름을 정의하여 열거해 두고 사용하는 타입이다.
!! 미리 정의를 해두었기 떄문에 추후에 수정이 불가능하다.
enum
사용법은 타입스크립트의 가이드를 참고하자!
enum
은 함수를 설계할 때 쓰이는 로직
같은 것이 아닌 설계 방식 이기 때문에 가독성 면 이외에는 큰 영향이 없고 개발자마다의 성향에 따라 쓰이기도 하고 안쓰이기도 한다.크게 단점은 없어보이나 검색을 해본 결과, TypeScript => JavsScript로 Compile 되면서 Tree Shaking 관련 문제가 발생한다고 하지만 아직 거기까지의 응용력이 부족하기에 우선 참고만 해보고 나중에 직접적으로 문제가 생기면 지켜보려고 한다.
NestJS에서의 Common Module이란 글로벌적으로 사용될 Service, Entity, 그리고 Dto를 의미한다.
condition
과 일치하는 데이터만 반환import { Entity, PrimaryColumn, Column } from "typeorm"
@Entity()
export class Thing {
@PrimaryColumn()
id: number
@Column("point")
point: string
@Column("linestring")
linestring: string
}
...
BeforeInsert
와 AfterInsert
는 상황에 따라 실행될 함수에 적는 decorator
로써 Insert
의 앞 수식어에 맞게 entity
가 입력됨에 따라 작동 된다.import { Entity, Column, BeforeInsert } from "typeorm";
@Entity()
class User {
@Column()
email: string;
@Column()
password: string;
@BeforeInsert()
hashPassword() {
this.password = bcrypt.hashSync(this.password, 10);
}
=> 위 상황에서는 패스워드가 데이터 베이스에 입력이 되기 전에 해시 될 수 있도록 설정 되는 함수가 실행될 것이다.
import { Entity, Column, AfterInsert } from "typeorm";
@Entity()
class User {
@Column()
email: string;
@AfterInsert()
sendWelcomeEmail() {
sendEmail(this.email, "Welcome to our app!");
}
}
=> 위 상황에서는 데이터 베이스에 이메일이 입력된 후에 입력된 이메일로 환영 이메일이 보내 질 것이다.