
: 데이터베이스에 SQL을 이용하여 직접 쿼리를 요청하는 것으로 SQL만으로 다양한 데이터베이스에 연결하여 상호작용, 엄청 긴 쿼리를 수행하거나 트랜잭션을 직접적으로 관리할 수 있다는 등의 장점을 가지고 있다.
하지만 테이블 칼럼을 수정할 때 수정해야하는 양이 많고, 누락하면 서버에 문제가 생기며, 또한 SQL 인젝션의 취약점을 가지는 등의 문제점도 있다.
Prisma: ORM(Object Relational Mapping)으로써 Javascript 객체와 데이터베이스의 관계를 연결해주는 도구. mongoose와 같은 ODM은 객체를 document(rows)와 연결하지만 ORM은 객체와 데이터베이스의 관계를 연결해준다.
: 파일을 저장할 때마다 변경 사항을 감지하고, 자동으로 서버를 재시작해주는 라이브러리
# 형식
nodemon <실행할 JavaScript 파일명>
# nodemon을 이용해 app.js 파일 실행하기
nodemon app.js
// package.json
...
"scripts": {
"dev": "nodemon app.js"
},
이후 yarn (run) dev 명령어를 실행하여 nodemon을 이용하여 서버를 시작한다.
: prisma가 사용할 데이터베이스의 설정 정보를 정의
🍬 datasource: 데이터베이스에 대한 정의를 하기 위해 사용. 사용자 아이디, 비밀번호, 엔드 포인트 등 다양한 설정값을 입력한다.
<provider(prisma가 사용할 db 엔진), url(protocol://baseURL/path?arguments)>
🍬 generator: prisma 클라이언트를 생성하는 방식을 설정하는 구문
: 특정 table과 column의 속성값을 입력하여, 데이터베이스와 Express 프로젝트를 연결시켜줌.
데이터의 유형에는 Int, String, DateTime 등이 있음. 데이터 유형 뒤에 ?가 붙으면 Null을 허용하는 칼럼임. UNIQUE 제약 조건과 AUTO_INCREMENT 제약조건 사용 가능함. @@map("Products")는 Products 테이블을 MySQL에서도 Products란 이름으로 사용한다는 의미. @@map()이 없으면 테이블명의 대문자는 전부 소문자로 치환됨.
➕ 이 때 prisma.schema에서 datasource의 provider이 위의 url의 protocol과 일치하는지 꼭 확인할 것! 다르면 빨간 글자의 에러가 뜬다...
🐿️ prisma db push
🐿️ prisma init
🐿️ prisma generate
🐿️ prisma db pull
: Schema.prisma에 정의한 데이터베이스 모델을 TypeScript 코드로 변환하여 개발자가 데이터베이스와 상호작용할 수 있도록 함