MySQL 연결

pnpm add mysql2

src/lib.db.ts

import mysql from 'mysql2/promise';

export async function createConnection() {
  const connection = await mysql.createConnection({
    host: process.env.NEXT_PUBLIC_DB_HOST, // localhost
    user: process.env.NEXT_PUBLIC_DB_USER, // 데이터베이스 사용자
    password: process.env.NEXT_PUBLIC_DB_PASSWORD, // 데이터베이스 비밀번호
    database: process.env.NEXT_PUBLIC_DB_NAME, // 데이터베이스 이름
  });

  return connection;

CRUD 구현

친구 로직

GET 메서드

page/api/user.ts

import { NextApiRequest, NextApiResponse } from 'next';
import { createConnection } from '../../lib/db';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method === 'GET') {
    try {
      const connection = await createConnection();
      const [users] = await connection.execute('SELECT * FROM user');
      connection.end();
      res.status(200).json(users);
    } catch (e) {
      res.status(500).json({ error: 'Failed to fetch data' });
    }
  } else {
    res.setHeader('Allow', ['GET']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}

GET 메서드가 들어왔을 때 db와 연결

const connection = await createConnection();

그 다음에 execute 명령어를 통해 쿼리를 실행하면 된다. 현재는 테스트용으로 db에 있는 user 데이터를 불러올 생각이기 때문에 SELECT * FROM user 이렇게 실행

const [users] = await connection.execute('SELECT * FROM user');

실행하고 나서 연결을 종료

connection.end();

결과를 response에 담아서 200 status와 함께 클라이언트 측으로 발송.

res.status(200).json(users);

특정 유저 조회