-->
본문 바로가기

IT/toy project

[자산관리 day-4.4] Docker에 있는 PostgreSQL을 Django (맥, PyCharm)에서 연결하는 방법

chat gpt가 생기면서 참으로 편리해진 부분 중 하나인데 검색을 하면 왠만한건 다 뚝!딱!해서 나온다는 것이다. 

내가 주식 탭 화면을 만들기 앞서 코스피,코스닥,원유,금 등 한국거래소에서 가져오는 API를 저장할 DB 를 어떤걸 쓸까하고 고민한 끝에 

chat gpt에게 또 질문을 하였다..


✅ 금융 데이터 저장에 적합한 데이터베이스 선택

Django에서 금융 데이터를 저장할 때 PostgreSQL을 추천하지만, 프로젝트의 규모와 요구사항에 따라 다른 선택지도 고려할 수 있습니다.


1️⃣ PostgreSQL (추천 ✅)

금융 데이터 저장에 가장 적합한 데이터베이스
JSON, 시계열 데이터, 트랜잭션 관리, 확장성 우수
대량의 주식 데이터, 실시간 분석, 복잡한 쿼리 가능

💡 왜 금융 데이터에 PostgreSQL이 좋을까?

  • 정확한 실수 연산 지원: DECIMAL 타입 지원 → 주가, 거래량 등 정밀한 숫자 연산 가능
  • JSONB 지원: API에서 받은 JSON 데이터를 직접 저장 가능
  • 시계열 데이터 처리 가능: 주식 가격, 환율 같은 데이터를 효율적으로 관리
  • 트랜잭션 처리 강력: 금융 데이터의 일관성을 유지하는 데 필수
  • 확장성 좋음: 읽기 부하를 분산시키거나, 여러 서버로 확장 가능

💡 PostgreSQL 테이블 예시

from django.db import models

class Stock(models.Model):
    symbol = models.CharField(max_length=10, unique=True)  # 종목 코드
    name = models.CharField(max_length=100)  # 종목명
    price = models.DecimalField(max_digits=12, decimal_places=2)  # 현재 가격
    volume = models.BigIntegerField()  # 거래량
    last_updated = models.DateTimeField(auto_now=True)  # 마지막 업데이트 시간

💡 PostgreSQL 설치 및 설정

# PostgreSQL 설치 (Ubuntu 기준)
sudo apt update && sudo apt install postgresql postgresql-contrib

# Django 프로젝트에 PostgreSQL 연결
pip install psycopg2

Django settings.py 설정:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

2️⃣ TimescaleDB (PostgreSQL 기반 시계열 DB)

PostgreSQL을 기반으로 한 시계열 데이터베이스
주식 가격, 환율, 실시간 데이터 분석에 최적
PostgreSQL 확장 기능이라 쉽게 연동 가능

📌 PostgreSQL을 이미 사용하고 있다면 TimescaleDB를 추가하면 강력한 시계열 데이터 분석이 가능

# TimescaleDB 설치
sudo apt install timescaledb-postgresql-14

Django 모델에서 시계열 데이터 저장:

class StockPrice(models.Model):
    symbol = models.CharField(max_length=10)
    timestamp = models.DateTimeField()
    price = models.DecimalField(max_digits=12, decimal_places=2)
    
    class Meta:
        indexes = [
            models.Index(fields=['symbol', 'timestamp']),  # 시계열 쿼리 최적화
        ]

3️⃣ MySQL (대안으로 가능)

속도가 빠르고, 트랜잭션 관리 가능
PostgreSQL보다 간단한 설정
🚫 시계열 데이터 처리 기능 부족
🚫 JSONB 지원 미흡

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

🚀 추천: PostgreSQL + TimescaleDB
대량의 주식 데이터를 관리해야 한다면 PostgreSQL 또는 TimescaleDB가 가장 적합합니다.
MySQL은 단순 CRUD만 필요할 때 사용 가능하지만, 금융 데이터에는 PostgreSQL이 더 강력한 기능을 제공합니다! 💡


chat gpt는 🚀 추천: PostgreSQL + TimescaleDB를 추천 하였다.

 

우선 PostgreSQL에 대용량 DB저장 하기에도 유용하고 특히 주식같은 실시간 자료들 시계열처리 및 복잡한 쿼리 작성에도 유용하다고 하니 해당 기술을 써보도록 한다. 

 

어차피 저번에 장고강의 들을때 도커로 postgreSQL을 사용 했었기에 이 경로에 사용하는게 적합할듯 싶어 해당 경로로 연결 하게 됨 

그런데 이마저도...gpt에게 물어보니 상세하게 답변을 해준다;;;


명령어가 생각이안나..다시 질문을 하였다..


🚀 Django에서 requirements.txt 실행하는 방법 (맥 기준)


1. requirements.txt 파일이 뭔가요?

  • Django 프로젝트에서 필요한 Python 패키지를 저장하는 파일
  • 프로젝트 실행할 때 필요한 모든 패키지를 한 번에 설치 가능
  • 협업할 때 동일한 환경을 쉽게 만들 수 있음

📌 파일 예시 (requirements.txt)

Django==4.2
psycopg2==2.9.9
djangorestframework==3.14.0
numpy==1.26.0
pandas==2.1.1

2. requirements.txt 실행 명령어

📌 가상환경을 실행한 상태에서 아래 명령어 입력

pip install -r requirements.txt

📌 설치된 패키지 확인

pip list

📌 설치 오류가 나올 경우 (해결 방법)

pip install --upgrade pip  # pip 업그레이드
pip install --no-cache-dir -r requirements.txt  # 캐시 없이 강제 설치

3. requirements.txt 파일 생성 방법

현재 가상환경에서 설치된 패키지를 requirements.txt로 저장하려면:

pip freeze > requirements.txt

이렇게 하면 현재 설치된 모든 패키지가 requirements.txt에 저장됨.


4. requirements.txt 업데이트

만약 새 패키지를 추가한 후 requirements.txt를 업데이트하려면:

pip freeze > requirements.txt

이후 다시 설치할 때:

pip install -r requirements.txt

5. requirements.txt 실행 관련 주요 명령어 정리

# 1. 가상환경 실행 (맥)
source venv/bin/activate  

# 2. 패키지 설치
pip install -r requirements.txt  

# 3. 설치된 패키지 목록 확인
pip list  

# 4. 현재 설치된 패키지 저장
pip freeze > requirements.txt  

# 5. pip 업그레이드 후 다시 설치
pip install --upgrade pip  
pip install --no-cache-dir -r requirements.txt  

이제 requirements.txt를 잘 활용하면 Django 프로젝트 환경을 쉽게 관리할 수 있어! 🚀


gpt의 친절한 답변  덕분에 나는 아래 캡쳐화면과 같은 결과를 이루게 되었다.