오늘의 코딩테스트
풀이
[프로그래머스/JS]직사각형 별찍기
문제도전케이스process.stdin.setEncoding('utf8');process.stdin.on('data', data => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[1]); let str = ""; for(let i = 0; i 결과error Output size differs 라는 에러가 떴다. 알아보
ezez99.tistory.com
오늘 한일
오늘은 Prisma의 method를 이용해서 CRUD 기능을 구현해보았다.
프리즈마 라이브러리는
# yarn 프로젝트를 초기화합니다.
yarn init -y
# express, prisma, @prisma/client 라이브러리를 설치합니다.
yarn add express prisma @prisma/client
# nodemon 라이브러리를 DevDependency로 설치합니다.
yarn add -D nodemon
# 설치한 prisma를 초기화 하여, prisma를 사용할 수 있는 구조를 생성합니다.
npx prisma init
다음과 같은 방법으로 설치한다.
설치하고
package.json을 다음과 같이 수정해주면 사용할 수 있다.
위의 devDependencies nodemon의 경우 개발 라이브러리이고, 서버를 계속 껐다켰다 할 필요없이 저장을 하면 알아서 재시작을 할 수 있는 라이브러리이다.
터미널에
yarn run dev를 입력하면 사용가능하다
그리고 prisma의 crud 기능을 이용했는데,
예를하나 들면
/* 게시글 상세 조회 API */
router.get('/posts/:postId', async (req,res, next) =>{
const {postId} = req.params;
const post = await prisma.posts.findFirst({
//where 조건으로 postId값이 같은 것 하나만 find하게 함
//postId앞에 +를 붙여서 postId를 Int형인 숫자로 바꿔주어야하기 위해서 +를 붙여준다
//아니면 req.params에서 밭은 postId가 문자열로 들어와서 숫자와 맞지 않게됨!
where:{postId: +postId},
select:{
postId:true,
title:true,
content:true,
createdAt:true,
updatedAt:true,
}
});
return res.status(200).json({data:post});
});
다음과 같은 코드에서 postId: +postId부분에서 뒤의 입력받은 파라미터는 숫자가 아니라 문자열로 들어가 있기 때문에 +를 해서 숫자로 바꿔줘야 같아지는게 신기했고, select를 통해서 원하는 출력데이터만 보여줄 수 있는 것이나 where을 이용해서 조건을 다는 부분들이 신기했다. 전에 mongoose를 학습할 때는 없던 부분이라서 신기했고 이해하기 편하였다.
그리고 여러번의 Prisma의 데이터베이스 호출을 줄이기위해서
// utils/prisma/index.js
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient({
// Prisma를 이용해 데이터베이스를 접근할 때, SQL을 출력해줍니다.
log: ['query', 'info', 'warn', 'error'],
// 에러 메시지를 평문이 아닌, 개발자가 읽기 쉬운 형태로 출력해줍니다.
errorFormat: 'pretty',
}); // PrismaClient 인스턴스를 생성합니다.
하나의 파일에서 데이터베이스 커넥션을 관리하여 최초로 1번만 MySQL과 커넥션을 생성하도록 코드를 구현하여 낭비를 줄이는 방법또한 배우면서 신기했던 부분이였던 것 같다!
위의 index.js를 사용하기 위해선
해당하는 라우터에
import { prisma } from '../utils/prisma/index.js';
구문을 추가해주어야한다.
내일은 강의를 마무리하고 개인과제에 들어가야겠다!
'코딩 > TIL' 카테고리의 다른 글
[TIL/24일차] EC2서버에 프로젝트 배포 (0) | 2024.05.28 |
---|---|
[TIL/23일차] AccessToken / 회원가입 기능 구현 (0) | 2024.05.24 |
[TIL/22일차] JWT / 비밀번호 암호화 (0) | 2024.05.23 |
[TIL/20일차] SQL 학습 (0) | 2024.05.21 |
[TIL/19일차] 관계형 데이터베이스 (0) | 2024.05.20 |