TIL 24일차 (20240126)

박세연·2024년 1월 26일

TIL

목록 보기
19/70

✏️ Raw Query

: 데이터베이스에 SQL을 이용하여 직접 쿼리를 요청하는 것으로 SQL만으로 다양한 데이터베이스에 연결하여 상호작용, 엄청 긴 쿼리를 수행하거나 트랜잭션을 직접적으로 관리할 수 있다는 등의 장점을 가지고 있다.
하지만 테이블 칼럼을 수정할 때 수정해야하는 양이 많고, 누락하면 서버에 문제가 생기며, 또한 SQL 인젝션의 취약점을 가지는 등의 문제점도 있다.

✏️ ORM과 PRISMA

Prisma: ORM(Object Relational Mapping)으로써 Javascript 객체와 데이터베이스의 관계를 연결해주는 도구. mongoose와 같은 ODM은 객체를 document(rows)와 연결하지만 ORM은 객체와 데이터베이스의 관계를 연결해준다.

🥨 ORM의 장단점:

  • 장점: ORM의 속성값만 변경하여 자유롭게 DB를 변경할 수 있음, prisma의 model을 수정하면 많은 API에서 rqw query를 수정하지 않아도 새 column 값에 대한 정보를 추가할 수 있음.
  • 단점: 복잡한 쿼리를 작성하거나 극한의 성능이 필요할 때는 Raw Query를 사용하는 것이 좋다.

🥨 nodemon 라이브러리

: 파일을 저장할 때마다 변경 사항을 감지하고, 자동으로 서버를 재시작해주는 라이브러리

# 형식
nodemon <실행할 JavaScript 파일명>

# nodemon을 이용해 app.js 파일 실행하기
nodemon app.js

// package.json

...

"scripts": {
	"dev": "nodemon app.js"
},

이후 yarn (run) dev 명령어를 실행하여 nodemon을 이용하여 서버를 시작한다.

🥨 schema.prisma

: prisma가 사용할 데이터베이스의 설정 정보를 정의
🍬 datasource: 데이터베이스에 대한 정의를 하기 위해 사용. 사용자 아이디, 비밀번호, 엔드 포인트 등 다양한 설정값을 입력한다.
<provider(prisma가 사용할 db 엔진), url(protocol://baseURL/path?arguments)>
🍬 generator: prisma 클라이언트를 생성하는 방식을 설정하는 구문

🥨 Prisma model

: 특정 table과 column의 속성값을 입력하여, 데이터베이스와 Express 프로젝트를 연결시켜줌.
데이터의 유형에는 Int, String, DateTime 등이 있음. 데이터 유형 뒤에 ?가 붙으면 Null을 허용하는 칼럼임. UNIQUE 제약 조건과 AUTO_INCREMENT 제약조건 사용 가능함. @@map("Products")는 Products 테이블을 MySQL에서도 Products란 이름으로 사용한다는 의미. @@map()이 없으면 테이블명의 대문자는 전부 소문자로 치환됨.
➕ 이 때 prisma.schema에서 datasource의 provider이 위의 url의 protocol과 일치하는지 꼭 확인할 것! 다르면 빨간 글자의 에러가 뜬다...

🥨 Prisma DB, Table 생성하기

🐿️ prisma db push

  • schema.prisma 파일에 정의된 설정값을 실제 데이터베이스에 반영
  • 내부적으로 prisma generate가 실행됨
  • 데이터베이스 구조를 변경하거나 새로운 테이블을 생성할 수 있음

🐿️ prisma init

  • schema.prisma 파일과 같은 필요한 설정 파일들이 생성됨

🐿️ prisma generate

  • prisma client를 생성하거나 업데이트함
  • schema.prisma 파일에 변경 사항이 생겼거나, 데이터베이스 구조가 변경되었을 때 이 명령어를 통해 prisma client를 최신 상태로 유지할 수 있음

🐿️ prisma db pull

  • 현재 연결된 데이터베이스의 구조를 schema.prisma 파일로 가져옴
  • 데이터베이스에서 구조 변경이 발생했을 때, 이 명령어를 사용하여 schema prisma를 최신 상태로 유지할 수 있음

🥨 Prisma Client

: Schema.prisma에 정의한 데이터베이스 모델을 TypeScript 코드로 변환하여 개발자가 데이터베이스와 상호작용할 수 있도록 함

profile
배워나가는 중

0개의 댓글