[파이썬] PostgreSQL 데이터베이스 연결과 사용자 인증

PostgreSQL은 강력하고 안정적인 오픈 소스 관계형 데이터베이스 시스템입니다. 이 글에서는 Python에서 PostgreSQL 데이터베이스에 연결하고 사용자 인증을 수행하는 방법을 다루겠습니다.

psycopg2 모듈 설치

Python에서 PostgreSQL 데이터베이스에 연결하기 위해서는 psycopg2 모듈이 필요합니다. 이 모듈은 PostgreSQL에 대한 인터페이스를 제공하며, 데이터베이스 연결, 쿼리 실행, 결과 가져오기 등의 작업을 수행할 수 있습니다.

psycopg2 모듈을 설치하기 위해 다음 명령을 실행합니다:

pip install psycopg2

데이터베이스 연결

import psycopg2

# PostgreSQL 데이터베이스에 연결
conn = psycopg2.connect(
    database="mydb",
    user="myuser",
    password="mypassword",
    host="localhost",
    port="5432"
)

# 커서 생성
cur = conn.cursor()

# 쿼리 실행 예제
cur.execute("SELECT * FROM mytable")

# 결과 가져오기
rows = cur.fetchall()
for row in rows:
    print(row)

# 연결 종료
cur.close()
conn.close()

위의 예제에서는 psycopg2 모듈을 사용하여 PostgreSQL 데이터베이스에 연결합니다. connect 함수에는 데이터베이스 정보와 사용자 인증 정보가 필요합니다. 연결 후에는 cursor를 생성하여 쿼리를 실행하고 결과를 가져올 수 있습니다.

사용자 인증

import psycopg2
from psycopg2 import sql

def authenticate_user(username, password):
    conn = psycopg2.connect(database="mydb", user="myuser", password="mypassword", host="localhost", port="5432")
    cur = conn.cursor()

    # SQL 쿼리 조합을 위해 psycopg2.sql 모듈 사용
    query = sql.SQL("SELECT * FROM users WHERE username = {} AND password = {}").format(
        sql.Identifier(username),
        sql.Identifier(password)
    )

    cur.execute(query)
    row = cur.fetchone()

    if row:
        print("인증 성공")
    else:
        print("인증 실패")

    cur.close()
    conn.close()

위의 예제는 사용자 인증을 수행하는 authenticate_user 함수를 보여줍니다. 사용자가 제공한 사용자 이름과 비밀번호를 사용하여 users 테이블에서 매칭되는 레코드를 찾습니다. 인증이 성공하면 “인증 성공” 메시지를 출력하고, 실패하면 “인증 실패” 메시지를 출력합니다.

psycopg2 모듈과 psycopg2.sql 모듈을 함께 사용하여 SQL 쿼리를 조합할 때 주의할 점은 SQL 인젝션 공격을 방지하기 위해 sql.Identifier 메소드를 사용하여 사용자 입력을 안전하게 이스케이프 해주어야 합니다.

결론

Python을 사용하여 PostgreSQL 데이터베이스에 연결하고 사용자 인증을 수행하는 방법을 알아보았습니다. psycopg2 모듈을 사용하여 데이터베이스 연결과 쿼리 실행을 쉽게 수행할 수 있으며, psycopg2.sql 모듈을 사용하여 SQL 쿼리를 안전하게 조합할 수 있습니다. PostgreSQL을 사용하여 안전한 데이터베이스 인증 기능을 개발할 수 있습니다.