데이터베이스 설정을 위해 먼저 프로젝트를 GitHub에 업로드해야 합니다.
📋 준비 사항:
💡 참고 자료: GitHub Repository 생성 가이드
Vercel은 Next.js 개발팀이 제공하는 클라우드 플랫폼으로, 웹 애플리케이션과 정적 사이트를 쉽게 배포하고 호스팅할 수 있습니다.
Status가 Ready 상태로 표시되면 배포 완료입니다.
PostgreSQL은 강력한 오픈소스 ORDBMS(객체 관계형 데이터베이스 관리 시스템)입니다.
🔧 주요 특징:
1️⃣ Storage 탭 접근
배포한 프로젝트에서 Storage 탭을 선택합니다.
2️⃣ 데이터베이스 생성
Connect Store → 새로 만들기 → Postgres → 계속 진행 순으로 진행합니다.
📍 Region 설정: Washington D.C. 선택 권장
3️⃣ 환경 변수 복사
Quickstart 영역의 .env.local
탭에서 환경 변수를 복사합니다.
⚠️ 중요 사항:
.gitignore
에 .env.local
포함 여부 확인4️⃣ SDK 설치
npm i @vercel/postgres
데이터베이스 시딩은 데이터베이스에 기본 데이터를 미리 입력해두는 작업입니다. (데이터베이스에 씨앗을 뿌린다는 의미)
scripts/seed.js
파일에는 4개 테이블 생성 및 데이터 삽입 로직이 포함되어 있습니다:
users
- 사용자 정보customers
- 고객 정보 invoices
- 송장 정보revenue
- 수익 정보// scripts/seed.js
const { sql } = require('@vercel/postgres');
const {
invoices,
customers,
revenue,
users,
} = require('../app/lib/placeholder-data.js');
const bcrypt = require('bcrypt');
async function seedUsers() {
try {
await sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;
// users 테이블 생성
const createTable = await sql`
CREATE TABLE IF NOT EXISTS users (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
);
`;
console.log(`Created "users" table`);
// 사용자 데이터 삽입
const insertedUsers = await Promise.all(
users.map(async (user) => {
const hashedPassword = await bcrypt.hash(user.password, 10);
return sql`
INSERT INTO users (id, name, email, password)
VALUES (${user.id}, ${user.name}, ${user.email}, ${hashedPassword})
ON CONFLICT (id) DO NOTHING;
`;
}),
);
console.log(`Seeded ${insertedUsers.length} users`);
return {
createTable,
users: insertedUsers,
};
} catch (error) {
console.error('Error seeding users:', error);
throw error;
}
}
// 다른 시드 함수들 (seedInvoices, seedCustomers, seedRevenue)도 유사한 패턴
// 모든 시드 함수 실행
(async () => {
await seedUsers();
await seedCustomers();
await seedInvoices();
await seedRevenue();
})();
{
"scripts": {
"seed": "node -r dotenv/config ./scripts/seed.js"
}
}
npm run seed
Vercel의 Data 탭에서 생성된 4개 테이블을 확인할 수 있습니다:
✅ 생성된 테이블:
users
- 사용자 정보customers
- 고객 정보invoices
- 송장 정보revenue
- 수익 정보각 테이블의 데이터가 placeholder-data.js
와 일치하는지 확인 가능합니다.
Query 탭에서 데이터베이스와 직접 상호작용할 수 있습니다.
📝 지원하는 SQL 명령:
DROP TABLE customers
- 테이블 삭제SELECT * FROM users
- 데이터 조회JOIN
쿼리 - 테이블 결합SELECT invoices.amount, customers.name
FROM invoices
JOIN customers ON invoices.customer_id = customers.id
WHERE invoices.amount = 666;
🔍 쿼리 분석:
invoices
와 customers
테이블 JOINcustomer_id
와 id
기준으로 결합amount
가 666인 조건으로 필터링amount
와 name
컬럼 조회.env.local
)이제 데이터베이스 설정이 완료되었습니다! 다음 장에서는 설정된 데이터베이스를 활용하여 실제 데이터 페칭 및 표시 기능을 구현해보겠습니다.