Drizzleλ‘ λ°μ΄ν°λ² μ΄μ€ μ°κ²°νκΈ°
Drizzle ORMμ λ°μ΄ν°λ² μ΄μ€ λλΌμ΄λ²λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ SQL 쿼리λ₯Ό μ€νν©λλ€.
import { drizzle } from "drizzle-orm/node-postgres"
import { users } from "./schema"
const db = drizzle(process.env.DATABASE_URL);
const usersCount = await db.$count(users);                        ββββββββββββββββββββββββ
                        β   db.$count(users)   β <--- Drizzle 쿼리
                        ββββββββββββββββββββββββ     
                            β               Κ
select count(*) from users -β               β
                            β               β- [{ count: 0 }]
                            v               β
                         βββββββββββββββββββββββ
                         β    node-postgres    β <--- λ°μ΄ν°λ² μ΄μ€ λλΌμ΄λ²
                         βββββββββββββββββββββββ
                            β               Κ
01101000 01100101 01111001 -β               β
                            β               β- 01110011 01110101 01110000
                            v               β
                         ββββββββββββββββββββββ
                         β      Database      β 
                         ββββββββββββββββββββββDrizzleλ λ΄λΆμ μΌλ‘ node-postgres λλΌμ΄λ² μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€. νμν  κ²½μ° db.$clientλ₯Ό ν΅ν΄ μ΄ λλΌμ΄λ²μ μ κ·Όν  μ μμ΅λλ€.
import { drizzle } from "drizzle-orm/node-postgres"
const db = drizzle(process.env.DATABASE_URL);
const pool = db.$client;// μ μ½λλ μλμ λμΌν©λλ€.
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});
const db = drizzle({ client: pool });Drizzleλ μ€κ³μ λͺ¨λ μ£μ§ λλ μλ²λ¦¬μ€ λ°νμκ³Ό κΈ°λ³Έμ μΌλ‘ νΈνλ©λλ€. μλ²λ¦¬μ€ λ°μ΄ν°λ² μ΄μ€μ μ κ·Όν΄μΌ ν λλ Drizzleκ° λμμ€λλ€.
import { drizzle } from "drizzle-orm/neon-http";
const db = drizzle(process.env.DATABASE_URL);λν, Bun SQLiteλ Expo SQLiteμ κ°μ λ°νμ νΉν λλΌμ΄λ²λ μ§μν©λλ€.
import { drizzle } from "drizzle-orm/bun-sqlite"
const db = drizzle(); // <--- λ©λͺ¨λ¦¬ λ΄ λ°μ΄ν°λ² μ΄μ€ μμ±
const db = drizzle("./sqlite.db");import { drizzle } from "drizzle-orm/expo-sqlite";
import { openDatabaseSync } from "expo-sqlite/next";
const expo = openDatabaseSync("db.db");
const db = drizzle(expo);λ°μ΄ν°λ² μ΄μ€ μ°κ²° URL
λ°μ΄ν°λ² μ΄μ€ μ°κ²° URL κ°λ μ μ΅μνμ§ μμ λΆλ€μ μν΄ μ€λͺ λ립λλ€.
postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/dbname
             ββββ βββββββββ βββββββββββββββββββββββββββββββββββββββββββββββ ββββββ
              Κ    Κ          Κ                                              Κ
        μν  -β    β          β- νΈμ€νΈλͺ
                                    β- λ°μ΄ν°λ² μ΄μ€
                   β
                   β- λΉλ°λ²νΈμ μμ λ PostgreSQL λ°μ΄ν°λ² μ΄μ€ μ°κ²° URLμ 보μ¬μ€λλ€. κ° λΆλΆμ λ€μκ³Ό κ°μ μλ―Έλ₯Ό κ°μ§λλ€:
- postgresql://: λ°μ΄ν°λ² μ΄μ€ νλ‘ν μ½
- alex: λ°μ΄ν°λ² μ΄μ€ μ μ μν (role)
- AbC123dEf: λ°μ΄ν°λ² μ΄μ€ μ μ λΉλ°λ²νΈ
- ep-cool-darkness-123456.us-east-2.aws.neon.tech: λ°μ΄ν°λ² μ΄μ€ νΈμ€νΈλͺ
- dbname: μ°κ²°ν λ°μ΄ν°λ² μ΄μ€ μ΄λ¦
μ΄ νμμ λ€μν λ°μ΄ν°λ² μ΄μ€ μμ€ν μμ μ μ¬νκ² μ¬μ©λ©λλ€. μ¬λ¬λΆμ΄ μ¬μ©νλ λ°μ΄ν°λ² μ΄μ€μ λ§κ² URLμ ꡬμ±νλ©΄ λ©λλ€.
λ€μ λ¨κ³
κ° λλΌμ΄λ²λ³ λ¬Έμλ₯Ό νμΈν΄ 보μΈμ.
PostgreSQL λλΌμ΄λ²
MySQL λλΌμ΄λ²
SQLite λλΌμ΄λ²
λ€μ΄ν°λΈ SQLite
κΈ°ν