Next.js api 라우트를 통한 데이터베이스 조작 (PostgreSQL)
KUKJIN LEE • 3개월 전 작성
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 });
}
}
장점
-
간단한 설정: 별도의 서버 설정 없이 API를 구현할 수 있습니다.
-
파일 기반 라우팅: 파일 구조가 곧 API 구조가 되어 관리가 용이합니다.
-
풀스택 개발: 프론트엔드와 백엔드를 동일한 프로젝트에서 관리할 수 있습니다.
-
타입스크립트 지원: 타입 안정성을 확보할 수 있습니다.
단점
-
보안: API 라우트에서 직접 데이터베이스를 조작하므로, 입력 값 검증과 인증/인가 처리를 철저히 해야 합니다.
-
확장성: 대규모 애플리케이션의 경우, 로직이 복잡해지면 관리가 어려워질 수 있습니다.
-
성능: 복잡한 쿼리나 대량의 데이터 처리 시 성능 이슈가 발생할 수 있습니다.
대규모 프로젝트가 아닌 이상 Next.js api는 효과적이라 판단됩니다. 별도의 서버 설정 없이 api를 구현할 수 있어 관리가 용이했습니다. 단 대규모 프로젝트에서 Next.js api 도입 시 복잡도와 구조에 대한 검토가 필요하기 때문에 Next.js api를 활용하기 보다 전문적인 서버로 분리하는 것이 좋아보입니다.