본문 바로가기
C.W.K.
Stream
Lesson 01 of 10 · published

Python과 Node.js에서 연결하기

~12 min · apps, drivers

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

드라이버가 통신을 맡아

Python의 psycopg, Node.js의 pg, Rust의 sqlx, Go의 pgx, C의 libpq는 PostgreSQL 통신 규약으로 서버와 대화해. ORM과 질의 작성기도 결국 이 드라이버 위에 서.

연결 문자열은 공통 언어야

postgresql://user:pass@host:5432/dbname?sslmode=require 형태는 psql, 여러 드라이버, pgAdmin에서 함께 써. 비밀값은 코드에 넣지 말고 환경 설정과 비밀 저장소로 관리해.

입력은 언제나 매개변수로

사용자 값을 SQL 문자열에 이어 붙이지 마. 드라이버의 자리표시자와 별도 값 배열을 쓰면 데이터가 문법으로 바뀌지 않아 SQL 주입을 막을 수 있어.

Code

Python의 psycopg·python
import psycopg
with psycopg.connect("postgresql://app:secret@localhost:5432/mydb") as conn:
    with conn.cursor() as cur:
        cur.execute(
            "INSERT INTO users (name, email) VALUES (%s, %s) RETURNING id",
            ("Alice", "alice@example.com"),
        )
        new_id = cur.fetchone()[0]
Node.js의 pg·javascript
import pg from 'pg';
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });

const { rows } = await pool.query(
  'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id',
  ['Alice', 'alice@example.com']
);
const newId = rows[0].id;
값을 문자열로 잇지 말고 매개변수로 전달해·python
# 위험 — SQL injection 시한폭탄
cur.execute(f"SELECT * FROM users WHERE email = '{email}'")

# 안전 — 드라이버가 정확히 escape
cur.execute("SELECT * FROM users WHERE email = %s", (email,))

External links

Exercise

원하는 언어로 약 20줄짜리 스크립트를 작성해 PostgreSQL에 연결하고 매개변수화 SELECT를 실행해 행을 출력해. 같은 질의를 문자열 연결로도 작성해 SQL 주입 결함을 얼마나 쉽게 만들 수 있는지 비교해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.