일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- reacts3
- utf8mb4
- 리액트코드정렬
- elasticIP
- react
- 자연수 뒤집어 배열로 만들기
- next #middleware
- 코드정렬
- 코딩테스트
- 리액트
- AWS
- dotenv
- axios
- s3확장자
- 자동완성방지
- EC2
- interactive_timeout
- 커밋 한번에
- useReducer
- 제일 작은 수 제거하기
- Node
- 프리티어
- express
- prettier
- max_allowed_packet
- 프로그래머스
- 부족한 금액 계산하기
- .env
- MySQL
- vscode
- Today
- Total
Sungtt
[Next.js@13] Next에서 mysql 연동하기 본문
[Next.js@13] Next에서 mysql 연동하기
기본적으로 필요한 세팅인 mysql, schema, table은 설치 및 생성되어있다는 가정하에 작성한다.
필요한 라이브러리를 설치한다.
serverless-mysql은 서버리스 규모로 mysql 연결을 관리하기 위한 모듈이다.
이 라이브러리는 mysql을 랩핑하고있기때문에 반드시 mysql을 설치해주어야한다.
npm i mysql
npm i serverless-mysql
//typescript 이용 시
npm i @types/mysql
1. mysql 연결 파일을 생성한다.
루트경로에 db 디렉토리를 만들고 db.ts 파일을 생성했다.
내부에는 'serverless-mysql'에서 mysql을 import 시킨다.
기본적인 설정은 mysql과 동일하다.
mysql을 호출하여 config객체 키에 값들을 할당해준다.
보안을 위해 환경변수에서 가져왔다.
//db.ts
import mysql from 'serverless-mysql';
const db = mysql({
config: {
host: process.env.MYSQL_HOST,
port: process.env.MYSQL_PORT as unknown as number,
database: process.env.MYSQL_DATABASE,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
charset: 'utf8mb4',
},
});
2. 비동기 쿼리실행 함수를 생성한다.
첫번째 인자로 쿼리문을 받고, 두번째 인자로 밸류를 받는다.
받은 인자들로 query를 실행하고 난 뒤에는 end()를 실행하여 정리해준다.
//db.ts
.
.
.
중략
export default async function excuteQuery({
query,
values,
}: {
query: string;
values: any;
}) {
try {
const results = await db.query(query, values);
await db.end();
return results;
} catch (error) {
return { error };
}
}
3. 필요한곳에서 호출해준다.
준비는 끝났다. 위에서 만들었던 excuteQuery를 import 시켜주고 적재적소에 호출해주자!
excuteQuery는 실행한 쿼리의 결과값을 리턴해준다.
나는 게시판 페이지로 진입했을 때 getServerSideProps를 통해 아래 API Routes를 호출하는 방식으로 사용했다.
import excuteQuery from '../../db/db';
import type { NextApiRequest, NextApiResponse } from 'next';
const handler = async (req: NextApiRequest, res: NextApiResponse<any>) => {
try {
await excuteQuery({
query: 'SELECT * FROM board_table',
values: '',
}).then((queryResult) => {
res.status(200).send(queryResult);
});
} catch (err) {
console.log(err);
}
};
export default handler;
- 참고 사이트
https://www.npmjs.com/package/serverless-mysql?activeTab=readme
serverless-mysql
A module for managing MySQL connections at serverless scale.. Latest version: 1.5.4, last published: 3 years ago. Start using serverless-mysql in your project by running `npm i serverless-mysql`. There are 56 other projects in the npm registry using server
www.npmjs.com