1. TypeORM(PostgreSQL)
(1) TypeORM, postgresql 연동
npm i pg typeorm @nestjs/typeorm --save
- configs/typeorm.config.ts
- src/app.module.ts
(2) TypeORM, Entity 생성
@Entity()
- Entitu() 데코레이터 클래스는 해당 클래스가 엔티티임을 나타내는 데 사용 ~ CREATE TABLE
@PrimaryGeneratedColumn()
- PrimaryGeneratedColumn() 데코레이터 클래스는 해당 열이 엔티티의 PK 지정
@Column()
- Column() 데코레이터 클래스는 해당 엔티티의 다른 열
(3) Repository 생성 및 이용
레포지토리는 엔티티 개체와 함께 작용하여 CRUD 등을 처리
Repository 파일 생성
@EntityRepository()
- 클래스를 사용자 정의 저장소로 선언하는 데 사용
- 사용자 지정 저장소는 일부 특정 엔티티를 관리하거나 일반 저장소로 사용
모듈 및 서비스에 Repository 주입
- module.ts
- servcie.ts ~ @InjectRepository 데코레이터로 repo 주입
DB로직 Repository 작성 후 서비스에서 사용
DB관련 로직은 Service단이 아닌 Repository에서 작성 후 Service에 주입
- Repository에 DB 로직 작성
- Service에 임포트
(4) TypeORM 엔티티 (@Unique)고유값 처리
- Unique에 대한 에러 처리를 하지 않을 시, nest js는 기본적으로 Internal server error 반환
- postgresql error_code 23505(unique_violation)에 대한 에러처리
(5) TypeORM 엔티티 관계 (1 : N)
User 엔티티
- OneToMany의 첫번째 파라미터에는 가져올 엔티티의 타입 지정
- 두번째 파라미터는 가져올 엔티티 컬럼 명시
- 세번째 파라미터 eager이 true이면 user 정보 가져올시 article데이터도 같이 가져옴
2. NestJS Auth 구현
npm i @nestjs/jwt @nestjs/passport passport passport-jwt @types/passport-jwt --save
(1) JWT를 이용한 토큰 생성
authmodule.ts
- 애플리케이션 모듈에 JWT, Passport 등록
authservice.ts
- 애플리케이션 서비스에 JWT 종속성 주입 및 토큰 생성
(2) Passport Strategy
jwt.stategy.ts
- jwt.startegy를 다른 app에서 사용하기 위해 @Injectable() 주입
- PassportStrategy 상속
- 토큰 유효성 검사 후 username에 대한 DB 쿼리 사용을 위한 userRepository 주입
- secretOrKey : 토큰 유효성 체크
- jwtFromRequest : ExtractJwt.fromAuthHeaderAsBearerToken() : Authrozation Header로 부터 토큰 받아 BaarerToken 인증
클라이언트 req 요청에 AuthGuard 미들웨어 적용 및 user 정보 획득
AuthGuards : nestJS 인증 미들웨어로, 지정된 경로로 통과할 수 있는 유저와 허용되지 않는 유저를 서버에게 알림
커스텀 데코레이터를 통한 req 요청의 user 정보 획득(번외)
nestJS미들웨어 called 순서
: guard -> interceptor (before) -> pipe -> controller -> service -> controller -> interceptor (after) -> filter -> client