Next.js api 라우트를 통한 데이터베이스 조작 (PostgreSQL)

KUKJIN LEE's profile picture

KUKJIN LEE3개월 전 작성

Next.js의 API 라우트를 사용하면 app/api/users/route.js, app/api/restaurant/route.js 등의 파일만으로 데이터베이스 쿼리를 포함한 모든 백엔드 로직을 처리할 수 있습니다.

 

폴더 구조

app/
├── api/
│   ├── users/
│   │   └── route.js
│   └── restaurants/
│       └── route.js
└── lib/
    └── db.js

 

api 라우트 예시 (app/api/restaurants/route.js)

import { NextResponse } from 'next/server';
import pool from '@/lib/db';

export async function GET(request) {
  const { searchParams } = new URL(request.url);
  const id = searchParams.get('id');

  try {
    let query = 'SELECT * FROM restaurants';
    let values = [];

    if (id) {
      query += ' WHERE id = $1';
      values.push(id);
    }

    const result = await pool.query(query, values);
    return NextResponse.json(result.rows);
  } catch (error) {
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

 

장점

  1. 간단한 설정: 별도의 서버 설정 없이 API를 구현할 수 있습니다.

  2. 파일 기반 라우팅: 파일 구조가 곧 API 구조가 되어 관리가 용이합니다.

  3. 풀스택 개발: 프론트엔드와 백엔드를 동일한 프로젝트에서 관리할 수 있습니다.

  4. 타입스크립트 지원: 타입 안정성을 확보할 수 있습니다.

 

단점

  1. 보안: API 라우트에서 직접 데이터베이스를 조작하므로, 입력 값 검증과 인증/인가 처리를 철저히 해야 합니다.

  2. 확장성: 대규모 애플리케이션의 경우, 로직이 복잡해지면 관리가 어려워질 수 있습니다.

  3. 성능: 복잡한 쿼리나 대량의 데이터 처리 시 성능 이슈가 발생할 수 있습니다.

 

대규모 프로젝트가 아닌 이상 Next.js api는 효과적이라 판단됩니다. 별도의 서버 설정 없이 api를 구현할 수 있어 관리가 용이했습니다. 단 대규모 프로젝트에서 Next.js api 도입 시 복잡도와 구조에 대한 검토가 필요하기 때문에 Next.js api를 활용하기 보다 전문적인 서버로 분리하는 것이 좋아보입니다.

New Tech Posts