라벨이 네스트JS인 게시물 표시

NestJS TypeORM의 Many to Many 구현 4- Join Table에 CASCADE적용하기(부모Record삭제시 자식 Record도 동시 삭제)

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 3- Join Table 구성 안녕하세요. 이번에는 'CASCADE'를 JoinTable에 적용해 보도록 하겠습니다.  사진1) userId 삭제할때 에러 위 SQL문에서 user 테이블의 id 2인 레코드를 지울려면 해당 JoinTable의 연관된 Record를 먼저 삭제를 해야 합니다. 이것을 삭제하고 진행을 할수 있지만 무척 번거로워 지겠죠.   좋은 방법중 하나는 user의 Record를 삭제하면 JoinTable의 연관된 Record도 자동으로 지워지는 것입니다. 그것이 CASCADE입니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => Us...

NestJS TypeORM의 Many to Many 구현 3- Join Table 구성

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 2- 관계형 구성 및 User, Book의 CRUD구현  이제 Join Table을 이용하여 관계를 만들도록 하겠습니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => User , ( user ) => user . id ) user : User ; @ ManyToOne (() => Book , ( book ) => book . id ) book : Book ; }   위 Entity는 user와 book을 연결해 주는 JoinTable 입니다. 다만 그대로 연결하는 것이 아닌 리뷰도 작성하여 저장할수 있습니다. import ...

NestJS TypeORM의 Many to Many 구현 2- 관계형 구성 및 User, Book의 CRUD구현

이미지
 이제 본격적으로 각 테이블간 관계형을 작성하도록 하겠습니다.  이전글 : NestJS TypeORM의 Many to Many 구현 1- 셋팅 및 각 테이블 생성 사진1) TypeORM Entity 사진1에서 보면 가장 오른쪽부터 User, User_Book_Join 그리고 마지막은 Book entity입니다. Many To Many를 구현할때 TypeORM으로 자동 생성(@ManyToMany)할수 있지만 현재 DB스키마에는 JoinTable에 리뷰도 작성해야 하기때문에 직접 entity를 만든 것입니다. 사진2) 사진1을 run후 MySQL Table 사진1의 코드를 저장한 다음 'npm run start'를 하면 사진2와 같이 각 테이블들이 관계를 갖게 된다. 이제 User의 CRUD를 구성하도록 하겠습니다. 먼저 Dto를 만들어야 합니다. // create-user.dto.ts : src/users/dto export class CreateUserDto { full_name : string ; } user를 생성할때 'full_name'하나만 있으면 되기 때문에 위 코드처럼 작성해 줍니다. // update-user.dto.ts : src/users/dto import { PartialType } from '@nestjs/mapped-types' ; import { CreateUserDto } from './create-user.dto' ; export class UpdateUserDto extends PartialType ( CreateUserDto ) {} user를 업데이트 할때 기존의 CreateUserDto를 참고해서 UpdateUserDto에 적용한다. // users.service.ts : src/users import { Injectable } from '@nestjs/common' ; import { InjectRepository ...

NestJS TypeORM의 Many to Many 구현 1- 셋팅 및 각 테이블 생성

이미지
 안녕하세요. 이번에는 nestjs의 프레임 워크와 TypeORM을 이용하여 다대다(Many to Many)관계도를 구축할려고 합니다. 다대다 관계를 구축할때 Record 생성, 수정, 삭제는 다음 글에서 작성하고 지금은 DB Table을 생성하도록 하겠습니다. DBMS은 MySQL을 사용할 것입니다. 참고로 Many to Many(다대다) 구조에 대해서 잘 모르시는 분들은 아래 링크를 참고해 주시기 바랍니다. 링크 :  SQL 관계도 Many to Many(다대다 관계) 그리고 위 글에서는 NestJS와 TypeORM을 이용한 Many To Many 테이블을 구축하는 것입니다. NestJS가 설치되어 있어야 합니다. 설치가 안되어 있으면 아래 링크를 참고해 주시기 바랍니다. NestJS설치법 링크1 :  nest js - install & Create Project from Linux or Ubuntu NestJS에 MySQL셋팅법 링크2 :  nest js -5 Connect to DataBase(mysql) with TypeORM 링크2에서 블로그에서 작성할 코드와 다른점은 '.env'파일을 사용한다는 것입니다. 환경설정변수를 저장한 문서인데 쉽게 말하자면 민감한 정보를 저장한 파일 입니다. 자세한 이야기는 블로그 글을 작성하고 링크를 달아두도록 하겠습니다. (아니면 검색하셔도 됩니다.) 먼저 npm 설치가 필요합니다. $ npm i dotenv copy 사진1) .env파일 생성 // TypeORM의 option 설정 import { TypeOrmModuleOptions } from '@nestjs/typeorm' ; require ( 'dotenv' ). config () // .env파일 적용을 위해 npm 추가 // TypeORM과 DataBase를 연결하기 위한 셋팅 export const typeOrmConfig : TypeOrmModuleOptions = { ...

nest js -4 member.controller.ts, member.module.ts app.module.ts coding

이미지
/* member.controller.ts 파일 */ // Controller를 구성하기 위한 method // Controller : nest js에서 컨트롤 구현시 필요 // Post : nest js에서 Client의 Post 구현시 필요 // Body : nest js에서 Client의 Body를 추출할때 필요 // Get : nest js에서 Client의 Get 구현시 필요 import { Controller , Post , Body , Get } from '@nestjs/common' ; // MembersService method를 참조 import { MembersService } from './member.service' ; // Controller의 시작부분 // ('members')일시 url은 root/members으로 요청이 와야 // 아래 Controller이 실행된다. @ Controller ( 'members' ) export class MembersController { // MembersService는 현재 class안에서만 사용할수 있다. // 동시에 읽기 전용이다. constructor ( private readonly membersService : MembersService ) { } // GET요청 URL : root/members @ Get () // 모든 members의 정보를 요청한다. getAllMembers (){ return { // Controller에서 membersService의 getMembers method // 에서 해당값을 요청. members : this . membersService . getMembers () } } // POST요청 URL : roo...

nest js -3 member.service.ts, members.module.ts coding

 먼저 members.module의 틀을 작성하도록 하겠습니다. /* 회원가입시 유저가 입력해야하는 정보 name : 이름 (string) password : 비밀번호 (string) email : 이메일 (string) age : 나이 (number) 위 members.module을 만드는 방법은 2가지가 있습니다. */ // 1번째 cless를 이용하여 지정 export class Member_ver1 { id : string ; // DB저장시 PR키 name : string ; password : string ; email : string ; age : number ; constructor ( id : string , name : string , password : string , email : string , age : number ) { this . id = id ; this . name = name ; this . password = password ; this . email = email ; this . age = age ; } } // 2번째 public를 이용하여 지정 export class Member_ver2 { // 위쪽 코드와 동일함 constructor ( public id : string , public name : string , public password : string , public email : string , public age : number ) { } } 2가지 경우를 모두 사용하기 위해 class 명칭을 각...

nest js -2 테스트 및 폴더 구성

이미지
   일단 'nest new [project name]'을 실행하고 생성된 폴더와 파일들이 제대로 동작되는지 확인하기 위해서 'npm start'를 실행합니다. 위 Postman을 이용항여 localhost:3000에 GET요청을 할때 Respone으로 "Hello World!"가 온것을 확인할수 있습니다.  참고로 'Hello World!'문자열의 app.service.ts에서 getHello() method의 'Hello World!'문자열이 return 한 값입니다. 전체적이 구조를 이해할려면 이전 글(nest js -1 Structure) 을 참고해 주시기 바랍니다. 이제 src경로에 'members'폴더를 만든다. 이 폴더는 members의 controller, module, modules, service의 ts파일이 저장된다. 이제 폴더와 파일이 완성되었다. 다음 글서부터는 ts파일 작성법에 대해서 글을 쓰도록 하겠습니다. 

nest js -1 Structure

이미지
안녕하세요. 저번에 작성한 글( nest js - install & Create Project from Linux or Ubuntu )에 이어서 nest js에 대한 구조를 알아보도록 하겠습니다. nest js의 프로젝트를 생성하면 여러개의 폴더와 파일들이 생성되는 것을 알수 있습니다. 그중에서 src폴더가 실제적으로 API동작을 하게 됩니다.   그럼 표를 보면서 어떤식으로 동작하는지 설명 드리겠습니다. 1) 프로젝트 생성시 나오는 폴더(members제외) 2) app 및 main관계도 생성된 파일을 보면 4개가 생성됬음을 알수 있다.  app.service.ts : app.controller에서 해당 method를 사용한다. app.controller : 웹상에서 요청(request)이 오면 그것을 처리하고 return한다. return한 내용은 곧      respone 내용이다. app.module  - imports : 다른 모듈이 존재시 추가할수 있다. (아래 사진에서는 members, 기본적으로 비어있음) - controllers : app.controller의 Class AppController를 받는다. - providers : Class AppController 에 사용할 method을 제공받는다. - main : app.module에 있는 class AppModule를 app에 받고 서버를 실행한다. 2번의 구조를 보면 역할이 모두 나누어 진것을 알수 있습니다. 다른 모듈들을 만들때도 이와 같은 방법으로 만듭니다.  3) members모듈 구조  이제 앞으로 글을 작성할때 코딩할 members모듈을 구조로 그려봤습니다. 위 구조에서 보면 app의 모듈과 상당히 유사한 것을 알수 있습니다.   간단히 설명하자면 모든 멤버의 데이터를 GET요청으로 받아오는 것입니다. 물론 실제로는 있으면 안되고 더군다나 비밀번호도 포함되어있기 때문에 예제로만...