디지털오션의 12일 (2일 차) – 파이썬으로 PostgreSQL 데이터베이스에 연결하기

2일차에 오신 것을 환영합니다! 디지털오션의 12일! 어제, 우리는 생일 알림 서비스를 구축하기 시작했습니다. 이 앱은 다가오는 생일에 대한 SMS 알림을 보내는 간단한 앱입니다. 🎉 우리는 연락처 정보를 저장하기 위해 디지털오션에 PostgreSQL 데이터베이스를 설정했습니다.

오늘은 Python을 사용하여 해당 데이터베이스에 연결하고 민감한 자격 증명을 안전하게 유지하기 위해 프로젝트를 설정할 것입니다.

이 게시글이 끝날 무렵, 여러분은 데이터베이스에서 안전하게 데이터를 가져오는 Python 스크립트를 갖게 되며, 디지털오션에 호스팅할 때 확장할 준비가 되어 있습니다.

✨ 왜 이 단계인가요?

데이터베이스를 설정하는 것은 시작에 불과했습니다. 의미 있는 앱을 구축하기 위해서는 그 데이터와 프로그래밍적으로 상호작용할 수 있는 방법이 필요합니다. Python은 PostgreSQL 데이터베이스에 쉽게 연결할 수 있게 해주며, pg8000과 같은 라이브러리의 도움으로 몇 줄의 코드로 PostgreSQL 데이터베이스를 다룰 수 있습니다.

안전을 유지하기 위해 데이터베이스 자격 증명을 .env 파일에 저장하고 python-dotenv를 사용하여 스크립트에 로드할 것입니다. 이렇게 하면 자격 증명이 스크립트에 하드 코딩되지 않아 앱을 공유하고 배포하는 것이 더 안전해집니다.

🚀 배울 내용

오늘의 계획은 다음과 같습니다:

  1. 민감한 자격 증명을 .env 파일에 저장합니다.
  2. python-dotenv를 사용하여 해당 자격 증명을 스크립트에 로드합니다.
  3. Python 스크립트를 작성하여 pg8000을 사용하여 PostgreSQL 데이터베이스에 안전하게 연결합니다.
  4. contacts 테이블에서 데이터를 가져와 표시합니다.

이 과정을 마치면 앱의 논리를 구축하기 위한 확고한 기초를 갖추게 됩니다.

🛠 필요한 것

시작하기 전에 필요한 것은 다음과 같습니다:

🧑‍🍳 2일차 레시피: Python으로 PostgreSQL에 연결하기

1단계: 필수 라이브러리 설치 📦

Python을 PostgreSQL에 연결하고 우리의 자격증명을 안전하게 유지하기 위해 두 가지 주요 라이브러리를 사용할 것입니다:

  • pg8000: PostgreSQL 데이터베이스에 연결하고 상호작용할 수 있게 해주는 순수 Python 라이브러리입니다.
  • python-dotenv: 데이터베이스 사용자 이름 및 비밀번호와 같은 민감한 자격증명을 .env 파일에서 로드하는 유틸리티로, 스크립트에 하드코딩할 필요가 없습니다.

이제 설치해 보겠습니다. 터미널에서 이 명령어를 실행하세요:

pip install pg8000 python-dotenv

전문가 팁: 가상 환경을 사용하고 있다면 (항상 좋은 생각입니다!), 위 명령어를 실행하기 전에 가상 환경을 활성화하여 종속성을 정리하세요.

2단계: .env 파일 만들기 📂

프로젝트 디렉토리에서 .env라는 이름의 파일을 만듭니다. 여기에서 데이터베이스 자격 증명을 저장할 것입니다. 다음 내용을 추가하세요:

DB_HOST=<your-hostname>
DB_NAME=<your-database-name>
DB_USER=<your-username>
DB_PASSWORD=<your-password>

자리 표시자 값을 1일차의 자격 증명으로 바꾸세요.

전문가 팁: 자격 증명이 우발적으로 버전 관리에 푸시되지 않도록 .gitignore 파일에 .env를 추가하세요.

3단계: Python 스크립트 만들기 🐍

connect_to_db.py라는 새 파일을 만들고, python-dotenv를 사용하여 .env에서 자격 증명을 로드하고 데이터베이스에 연결하는 스크립트를 설정하세요.

시작하기 위한 코드는 다음과 같습니다:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# .env 파일에서 환경 변수 로드
load_dotenv()

# 데이터베이스 연결 세부정보
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # 데이터베이스에 연결
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")
except Exception as e:
    print("An error occurred while connecting to the database:", e)
finally:
    if connection:
        connection.close()

이 스크립트는 몇 가지 중요한 작업을 수행합니다:

  • 자격 증명을 안전하게 .env 파일에서 로드합니다.
  • 데이터베이스에 pg8000.connect()를 사용하여 연결을 설정합니다.
  • 결과에 따라 성공 또는 오류 메시지를 출력합니다.

4단계: 연결 테스트 ✅

이제 모든 것이 작동하는지 확인해 봅시다. 스크립트를 실행하세요:

python connect_to_db.py

모든 것이 올바르게 설정되었다면, 다음과 같은 메시지가 표시됩니다:

Connection successful!

오류가 발생한 경우:

  • .env 파일의 값을 다시 확인하세요.
  • IP 주소가 데이터베이스의 신뢰할 수 있는 소스에 추가되었는지 확인하세요(1일차 6단계 참고).

5단계: 데이터베이스에서 데이터 가져오기 🔍

이제 스크립트를 확장하여 데이터를 가져오도록 하겠습니다. connect_to_db.py 스크립트를 다음과 같이 업데이트하세요:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# .env 파일에서 환경 변수 로드
load_dotenv()

# 데이터베이스 연결 세부 정보
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # 데이터베이스에 연결
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")

    # 데이터베이스 쿼리
    cursor = connection.cursor()
    query = "SELECT * FROM contacts;"
    cursor.execute(query)
    records = cursor.fetchall()

    # 결과 출력
    print("Contacts:")
    for record in records:
        print(record)

    # 커서와 연결 닫기
    cursor.close()
    connection.close()

except Exception as e:
    print("An error occurred:", e)

이 스크립트는 이제:

  • 연락처 테이블에서 모든 레코드를 가져오는 쿼리를 실행합니다.
  • 각 레코드를 콘솔에 출력합니다.

참고: 테이블이 비어 있어도 걱정하지 마세요! 스크립트가 오류 없이 실행되는지 확인할 수 있습니다. 테스트를 위해 psql(또는 선호하는 도구)를 사용하여 데이터베이스를 열고 이 SQL 명령을 실행하여 샘플 연락처를 빠르게 추가할 수 있습니다:

INSERT INTO contacts (first_name, last_name, birthday) 
VALUES ('Test', 'User', '1990-01-01');

psql 사용 방법을 복습하거나 pgAdmin 또는 TablePlus와 같은 UI 도구를 탐색하고 싶다면 1일차의 지침을 확인하세요.

🎁 마무리

오늘 당신이 이룬 성과는 다음과 같습니다:

✅ 필요한 Python 라이브러리를 설치했습니다.
✅ Python을 사용하여 DigitalOcean PostgreSQL 데이터베이스에 연결했습니다.
✅ 간단한 쿼리를 사용하여 contacts 테이블에서 데이터를 가져왔습니다.

다음 단계: 내일은 다가오는 생일을 찾고 Twilio를 사용하여 SMS 알림을 보내는 로직을 추가할 것입니다. 이제 앱이 살아나는 순간입니다—기대해 주세요! 🚀

Source:
https://www.digitalocean.com/community/tutorials/connecting-to-postgresql-database-with-python