TIL 01 - 인스타그램 클론코딩 (1) 기본 SETUP

MOON·2021년 5월 9일
0
post-thumbnail

노마드코더 인스타그램

노마드코더 인스타그램 클론코딩 바로가기 https://nomadcoders.co/instaclone

🖥 INSTACLONE 시작하기 전

GraphQL에 대해서 한번 더 복습하고 Prisma에 대한 기초 지식 다지고 클론 Start !

BackEnd SetUp

npm init -y
npm install apollo-server graphql
yarn add nodemon --dev

nodemon ?

nodemon을 사용함으로써 변경사항을 적용하기 위해 서버를 죽이고 재실행하는 작업을 해주지 않아도 된다!!

nodemon 사용법

package.json 추가

"scripts":{
   "dev":"nodemon --exec node server.js"
}

babel ?

babel이란 node의 버전에 따라 최신의 JS문법을 사용했을때 이해하지 못하는 경우가 발생하는데
babel을 사용해 줌으로써 browser가 이해할 수 있는 JS코드로 변환해준다.
즉 코드에 따라 계속해서 node버전을 바꿔야하는 불편함을 해결

babel Install

yarn add --dev @babel/core
yarn add --dev @babel/preset-env
yarn add --dev @babel/node

변경해줘야 하는 사항

package.json의 코드 변경
"scripts":{
   "dev":"nodemon --exec node server.js"
}
babel.config.json 생성 후 다음 코드 작성
{
  "presets":["@babel/preset-env"]
}

babel/preset-env : 코드가 변환되어야 하는지 아닌지를 판단

Prisma

Prisma는 ORM이다.

ORM ?

Object Relatinal Mapping 즉 객체 관계 매핑의 줄임말이다.
객체지향프로그래밍(OOP)는 클래스라는 개념이 있고 관계형DB에는 테이블이라는 개념이 있다.
이 클래스와 테이블을 자동으로 매핑하는 것을 의미한다.
따라서 ORM을 이용해주면 따로 SQL을 사용하지 않아도 객체(클래스)를 통해서 간접적으로 데이터베이스에 접근이 가능해지는 것이다.

Prisma + TypeScript의 조합이  👍

Prisma SetUp

npm install prisma -D
npx prisma init

  • 위의 작업을 마치면 prisma/schema.prisma파일과 .env파일이 생성됨
  • Postgresql app 설치
  • Postgresql app을 이용해 DB생성하고 이를 사용하기 위해 .env에서 URL의 사용자명과 DB명 수정
  • Postgresql DB 생성 : CREATE DATABASE instaclone
  • Postgresql DB 제거 : DROP DATABASE instaclone

Prisma Model 생성

model Movie{
    id Int @id @default(autoincrement())
    title String
    year Int
    genre String?
    createdAt DateTime @default(now())
    updatedAt DateTime @updatedAt
}
  • prisma도 django에서도 model 생성 후에 항상 해줘야했던 migrate작업을 해줘야 한다.
  • npx prisma migrate dev -> 이를 package.json에서 migrage명령어로 지정해줘서 쉽게 사용

Prisma와 Graphql의 Type 차이점

Prisma는 기본적으로 모든 필드들이 필수사항 | 선택사항 지정방법 : Type?
Graphql은 기본적으로 모든 필드들이 선택사항 | 필수사항 지정방법 : Type!

EX) 위의 Movie model에 관련된 Graphql의 Type

const typeDefs = gql`
   type Movie{
	id:Int!
	title:String!
	year:Int!
	genre:String
	createdAt:String!
	updatedAt:String!
}
`

0개의 댓글

관련 채용 정보