글

라벨이 Table인 게시물 표시

Prisma Many to Many(다대다) schema 작성

이미지
 해당 스키마는 아래 글을 참고로 만들었습니다. 링크 : SQL 관계도 Many to Many(다대다 관계) 해당 링크의 스키마를 작성하기 위해서 아래와 갖이 코드를 작성합니다. // prisma/schema.prisma // This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env ( "DATABASE_URL" ) } model users { id Int @default ( autoincrement ()) @id full_name String @unique created_at DateTime @default ( now ()) @db.Timestamptz ( 3 ) comments joinTable [] } model joinTable { users users @relation ( fields : [userId], references : [id] ) // users와joinTable은 1:N이다 userId Int comment comments @relation ( fields : [commentId], references : [id] ) // comments와 joinTable은 1:N이다. commentId Int @@id ( [userId, commentId] ) // userId, commentId는 Primary key이다 } model comments { id Int @default ( autoincrement ()) @id conten...

NestJS Prisma ORM으로 DB구성하기(다른 env파일명)

이미지
 nestjs에 prisma를 셋팅하여 해당 DB를 구성하도록 하겠습니다. 아래는 참고한 공식 문서 입니다. NestJS 문서 : https://docs.nestjs.com/recipes/prisma Prisma 문서 : https://www.prisma.io/docs/guides/development-environment/environment-variables/using-multiple-env-files NestJS공식 문서에서는 .env파일로  prisma환경을 셋팅하는 방법이 나와있습니다. 하지만 위 블로그 글에서는 .env파일이 아닌 다른 ENV파일(.development.env)로 셋팅하는 방법에 대해서 작성하겠습니다. NestJS 설치 및 셋팅은 아래 링크를 참고해 주시기 바랍니다. 링크 : nest js - install & Create Project from Linux or Ubuntu 프로젝트가 설치후 해당 경로로 들어가서 prisma를 설치한다(yarn) 1) yarn prisma 설치 - NestJS에서 prisma를 설치하기 위해서 모듈을 설치한다 $ yarn add prisma copy 이후 제대로 설치가 됬는지 확인하기 위해서 터미널에 'yarn prisma'를 입력하고 아래 사진과 같이 출력 되는지 확인한다. 사진1) prisma 결과 화면 2) npx prisma 설치 - prisma의 환경변수(.env)와 폴더, 스키마를 생성한다. $ npx prisma init copy 사진2) prisma 셋팅 사진2와 같이 이제 프로젝트에 prisma폴더 및 스키마 그리고 .env파일을 'npx prisma init'을 이용하여 생성합니다. 폴더 구조는 아래 사진과 같습니다. 사진3) prisma 폴더 및 .env파일 해당 .env파일에서 'DATABASE_URL'은 사용하고 있는 DB에 맞춰 작성합니다. 저는 postgres을 사...

PostgreSQL Column(컬럼)의 속성을 배열로 하고 생성, 조회, 수정, 삭제하기

이미지
 postgres의 컬럼 설정에서는 배열을 넣을수가 있다.  컬럼을 생성할때 위 사진처럼 컬럼 arr을 숫자형 배열로 지정할수 있다 하나의 레코드를 삽입하면 위 사진처럼 id및 arr이 배열로 저장되게 된다. 이때 동일한 배열을 찾을때 WHERE을 이용하여 찾는다. 하지만 모든 배열을 아는것이 아니면 위방법으로 레코드를 조회할수 없다. arr을 텍스트로 변환한 다음 LIKE을 이용하여 조회를 해야 합낟. 이때 arr은 배열에서 문자열로 조회할때만 전환된다. 문자열 배열또한 만들수 있다. 문자열 배열또한 생성, 수정 삭제, 조회가 가능하며 LIKE을 사용할려면 조회할 배열을 text로 변환후 확인해야 한다.

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 ...

DBMS MySQL - SQL1 : DATABASE, TABLE, INSERT

이미지
 안녕하세요. 알렉스 입니다. 이번에는 시리즈별로 DBMS의 MySQL의 SQL문에 대해서 블로그 글을 작성할려고 합니다. 가장먼저 DB생성, Table생성 그리고 레코드 삽입으로 먼저 진행을 하도록 하겠습니다. 1. DB생성 MySQL에 DataBase를 생성합니다. $ CREATE DATABASE [DATABASE이름]; copy 사진1) DB생성 DataBase을 생성하기 위한 명령어 입니다. 해당 DataBase의 이름이 같은 MySQL안에서 중복이 되면 안됩니다. 2. Table생성 MySQL에서 DataBase을 조회합니다. $ SHOW DATABASES [DATABASE이름]; copy 사진2) DataBase조회 MySQL에서 DataBase을 선택합니다. $ USE [DATABASE이름]; copy 사진3) DataBase 선택 선택한 DataBase안에서 Table을 생성합니다. $ CREATE TABLE [Table 이름] ([Column1 이름] [Column1 속성], [Column2 이름] [Column2 속성], [Column3 이름] [Column3 속성], [.....]); copy 사진4) DataBase에서 Table생성 테이블에 들어가는 Column속성은 MySQL공식 문서에서 확인할수 있습니다.( Link ) 3. Table안에 Record를 INSERT하기 선택한 Table안에 Record를 생성합니다. $ INSERT INTO [Table 이름] ([Column1 이름],[Column2 이름],[Column3 이름], [...]) VALUES([Column1에 해당하는 Value], [Column2에 해당하는 Value], [Column3에 해당하는 Value], [....]) ([Column1에 해당하는 Value], [Column2에 해당하는 Value], [Column3에 해당하는 Value], [....]); copy 사진5) Table에 Recor...

nest js -12 Turn Your Server url http to https2 : Apply to your code

이미지
 저번시간의 연장선으로 이번에는 nestjs에 https프로토콜을 적용하도록 하겠습니다.  위 화면은 key, cert.pem파일이 포함된 코드 입니다. NestJS에서 코딩하는 부분과 실행하는 부분이 다르기 때문에 src에 있는 .pem파일은 dist쪽으로 옮겨줘야 합니다.  $ mv cert.pem ../dist/ $mv key.pem ../dist/ // main.ts : /src/ import { NestFactory } from '@nestjs/core' ; import { AppModule } from './app.module' ; // NodeJS에 있는 모든 FileSystem을 // fs로 import 한다. import * as fs from 'fs' ; async function bootstrap () { // https옵션을 저장할 변수 // httpsOption을 생성한다. const httpsOptions = { // key, cert의 해당경로를 통해 read한다. // __dirname은 디렉토리 경로를 나타낸다. key : fs . readFileSync ( __dirname + '/key.pem' ), cert : fs . readFileSync ( __dirname + '/cert.pem' ), } const app = await NestFactory . create ( AppModule , { httpsOptions }); await app . listen ( 3000 ); } bootstrap (); 이제 main.ts부분의 코드를 추가하겠다. 일단 httpsOptions변수가 추가됬다. 이 변수안에는 key, cert 두개의 키값이 존재하는데 파일경로를 통해 읽은 문자열을 갖고있다. 파일경로는 cli로 옮긴 파일 경로를 작성하면 된다. ...

nest js -11 Turn Your Server url http to https1 : create certificate(key, cert.pem)

이미지
 안녕하세요. 기존의 NestJS는 http로 되어있습니다. 그대로 사용할수 있지만 보안이 중요한 웹사이트 같은경우는 위험할수 있습니다. 그래서 이번에는 지금까지 작성한 NestJS서버를 https프로토콜로 변경하도록 하겠습니다.  - 위 코드는 nest js - 1번 부터 10번까지 코딩한 자료를 바탕으로 만들었습니다. 자세한 코드는 블로그 글을 참고해 주시기 바랍니다. 일단 https프로토콜을 적용하기 위해서는 인증서가 필요합니다. 이번 글에서는 mkcert를 사용하여 인증서를 생성하도록 하겠습니다.  $ sudo apt install libnss3-tools $ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 $ chmod +x mkcert $ sudo cp mkcert /usr/local/bin/ 이제 위와같이 cli작성이 마무리 되면 key, cert.pem파일을 생성할수 있다. 일단 인증발급기관을 추가합니다. 여기서는 mkcert입니다. $ mkcert -install 이제 해당 인증서를 생성합니다.  $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1 이제 해당 프로젝트 안에 key, cert.pem파일이 생긴것을 확인 할수 있습니다. 다음 글에서는 이걸로 실제 https프로토콜을 적용하고 사용을 하도록 하겠습니다.

nest js -10 Delete Particular member(parameter) in DB Record with TypeORM(DELETE)

이미지
// member.repository.ts : /src/members import { Member } from './member.entity' ; import { EntityRepository , Repository } from 'typeorm' ; // 내부에 에러가 발생시 사용. import { BadRequestException , InternalServerErrorException } from '@nestjs/common' ; // Member entity를 불러서 DB의 테이블 생성 @ EntityRepository ( Member ) export class MemberRepository extends Repository < Member > { // members.service.ts에 사용할 method생성 // Member를 생성한다. async createMember ( name : string , password : string , email : string , age : number , ) : Promise < Member > { // member record 생성 const member = new Member () // service에서 받은 정보를 record에 작성 member . name = name ; member . password = password ; member . email = email ; member . age = age ; try { // 작성한 record를 DB에 저장. await member . save (); } catch ( e...