2025/11/07 Django - 1

김기훈·2025년 11월 7일

TIL

목록 보기
48/191

2025/11/03 ~ 2025/11/06 예비군 참여로 인한 TIL 진행X

오늘 학습

환경변수(Environment Variables)

  • 운영체제에서 전역적으로 설정할 수 있는 변수
    • 시스템 설정, 사용자 정보, 실행 경로 등의 중요한 정보를 저장하고,
      • 이를 필요로 하는 프로그램이 쉽게 접근할 수 있도록 도와줌
  • 예시
    • 데이터베이스 접속 정보 (예: DB_HOST, DB_USER, DB_PASSWORD)
    • API 키 및 시크릿 (예: API_KEY, SECRET_KEY)
    • 프로젝트의 실행 환경 (예: DEVELOPMENT, PRODUCTION)
    • 파일 경로 및 시스템 설정

장점

  • 보안성:
    • 중요한 정보(예: 비밀번호, API 키)를 코드에 직접 저장하지 않음으로써 보안 위험 감소
  • 유연성:
    • 코드 변경 없이 다양한 환경(로컬, 스테이징, 프로덕션)에서 다른 설정을 적용 가능
  • 협업 용이성:
    • 여러 개발자가 같은 코드를 사용하더라도, 각자의 환경에 맞게 설정할 수 있어 협업이 수월

파이썬에서 환경변수를 다루는 방법

import os

# 설정
os.environ['DB_HOST'] = 'localhost'

# 읽기
db_host = os.getenv('DB_HOST')
print(db_host)

# 삭제
del os.environ['DB_HOST']
    1. os 모듈 사용하기
    • 환경변수 설정: os.environ 을 사용하여 시스템 환경변수를 설정 가능
    • 환경변수 읽기: os.getenv() 또는 os.environ.get() 을 사용하여 환경변수를 읽기 가능
    • 환경변수 삭제: del os.environ['VARIABLE_NAME'] 을 사용하여 환경변수를 삭제 가능

from dotenv import load_dotenv
import os

load_dotenv()

db_host = os.getenv('DB_HOST')
print(db_host)
    1. .env 파일 사용하기
    • 환경변수를 별도의 .env 파일에 정의하고, 이 파일을 로드하여 사용 가능
      • 주로 개발 환경에서 사용되며, 버전 관리에서 제외해야 함
    • python-dotenv 라이브러리(pip install python-dotenv 필요)
      • .env 파일을 쉽게 로드할 수 있도록 도와주는 라이브러리

### 1. secret.json  파일 생성하기 

{
    "DB_HOST": "localhost",
    "DB_USER": "user",
    "DB_PASSWORD": "password",
    "API_KEY": "your_api_key_here"
}

### 2. 파이썬에서 secret.json 파일 읽기

import json

# secret.json 파일 경로
with open('path/to/secret.json') as f:
    secrets = json.load(f)

# 환경변수 사용 예시
db_host = secrets.get('DB_HOST')
api_key = secrets.get('API_KEY')

print(f"DB Host: {db_host}")
print(f"API Key: {api_key}")

### 3. os.environ에 설정하여 시스템 환경변수처럼 사용하기

import os
import json

# secret.json 파일 경로
with open('path/to/secret.json') as f:
    secrets = json.load(f)

# 환경변수로 설정
os.environ['DB_HOST'] = secrets.get('DB_HOST')
os.environ['API_KEY'] = secrets.get('API_KEY')

# 환경변수 사용
db_host = os.getenv('DB_HOST')
api_key = os.getenv('API_KEY')

print(f"DB Host: {db_host}")
print(f"API Key: {api_key}")
    1. secret.json 사용하기
    • secret.json 파일은 JSON 형식으로 중요한 환경변수나 설정값을 저장하는 파일
      • 이 파일은 주로 API 키, 데이터베이스 설정, 인증 정보 등 민감한 데이터를 관리하기 위해 사용
    • 장점
      • 구조화된 데이터
        • JSON 형식을 사용하여 데이터를 구조화 가능
        • 여러 환경변수를 하나의 파일로 깔끔하게 관리 가능
      • 유연성
        • 파일 내용을 쉽게 수정 및 확장 가능
        • 새로운 환경변수나 설정값을 쉽게 추가 가능

환경변수 관리 도구

    1. direnv(brew install direnv 필요)
    • 디렉토리별로 환경변수를 자동으로 로드하고 언로드할 수 있게 도와주는 도구
      • 프로젝트 디렉토리에서 .envrc파일을 만들고 여기에 환경변수를 정의
        • export DB_HOST=localhost
      • .envrc 파일을 허용
        • direnv allow
    1. Docker 환경변수 관리
    • Docker 컨테이너에서 환경변수를 설정하는 방법
        1. -e 플래그
        1. .env 파일 사용
        1. Docker Compose에서 .env 파일을 사용하는 것도 가능
docker run -e DB_HOST=localhost my-container

주의

  • 민감한 정보는 .env secret.json 파일에 저장
  • 환경변수 파일(.env secret.json 등)
    • .gitignore 에 등록하여 원격 레포지토리에 업로드 되지 않도록 함
  • 환경변수의 이름은 일관성있게 정하기
  • 환경변수의 기본값을 설정하여 예상치 못한 오류 방지하기
  • 필요하지 않은 환경변수는 삭제하여 환경을 깨끗하게 유지하기

gitignore

gitignore.io

  • 사용방법
      1. 프로젝트 루트 위치에 .gitignore 파일을 생성
      1. 위의 사이트에 들어가서 본인이 사용하고 있는 프레임워크 또는 환경을 입력 후, 생성을 누름
      1. git에 올라가지 않을 항목들이 나옴
      1. 복사해서 .gitignore에 붙여넣기 함

Django - 1

pyenv

  • brew install pyenv
  • brew install pyenv-virtualenv
  • pyenv-virtualenv
    • which $SHELL : 내가 사용하는 Shell을 확인(/bin/zsh = zsh)
    • 가상환경 자동화 설정(zsh 기준)
      • echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
    • Shell 다시 실행(zsh 기준) = 터미널 껏다 켜기도 가능
      • source ~/.zshrc

추가

  • eval "$(pyenv init -)"
    • PATH 건들지 말기
  • eval "$(pyenv virtualenv-init -)"
    • alias 넣지 말기
  • pyenv virtualenv-delete pyenv-test
    • 가상환경 지우기

사용법

  • pyenv virtualenv는 폴더 기준으로 관리되기 때문에 최상위 경로에서 작업 X (폴더를 하나 만들 것)
  • pyenv install --list 또는 pyenv install 원하는 버전 명령어로 설치 가능한 버전 확인

핵심기능

기능명령설명
Python 설치pyenv install특정 버전 설치
가상환경 생성pyenv virtualenvPyenv 버전 기반 venv 생성
폴더 적용pyenv local.python-version 파일 생성 → 해당 폴더 진입 시 자동 적용
  • pyenv virtualenv 3.12.2 venv_A / pyenv virtualenv 3.12.2 venv_B
    • 가상환경 2개 생성
  • pyenv local venv_A /pyenv local venv_B
    • 각각의 가상환경을 다른 폴더에 적용

  • 같은 버전을 사용하지만 각각 폴더를 들어가기만 해도 다른 설정을 사용 가능

시작

  • Users > 로그인하는 유저 > .pyenv > versions > pycharm_study > bin > python

장고 설정

  • pip install django 로 Django를 설치
  • django-admin startproject mysite . 로 Django를 실행
    • mysite는 앞으로 만들게 될 프로젝트 이름

장고 이론

Django의 기능

  • ORM 제공 → DB 구조/쿼리 처리 가능함
  • 인증/권한 기능 기본 제공
  • 관리자 페이지 자동 생성
  • 국제화/다국어 지원
  • URL 기반 라우팅 지원
  • 템플릿 엔진 제공

MVT 구조

  • Model: DB 관련 처리 담당
  • View: 핵심 로직 담당
  • Template: 사용자 화면 표시

장점

  • 기본 기능 많아서 개발 속도 빠름
  • 코드 재사용 쉬움 → 모듈화 편함
  • 기본 보안 제공 → 안전함

단점

  • 익숙해지려면 시간 필요
  • Django 특유 문법 학습 필요
  • 개념 많아서 복잡함

Django를 사용하는 이유

  • Flask, FastAPI는 패키지 설치 많이 필요한데 Django는 기본 제공 많음
  • 관리자 페이지 자동 제공 → 개발 시간 절약
  • 구조 정형화 → 가독성 좋음
  • 모듈화 쉬워 유지보수 편함
  • 사용 가능한 패키지/라이브러리 풍부
  • 커뮤니티 커서 자료 구하기 쉬움

Django 프로젝트 설치 및 시작

	config : 기초적인 설정 파일이 들어간 폴더
	├── 	__init__.py : Python 패키지를 만들어주는 파일
	├──	 asgi.py, wsgi.py : 웹 서버와 Django가 통신할 때 연결해주는 역할
	├──	 settings.py : 각종 설정 파일들
	└──	 urls.py : url 설정들. 기본적으로 admin만 설정되어있다.
	manage.py : Django를 실행시키는 명령어를 입력하는 파일


간단한 HTTP 응답 만들어보기

http://127.0.0.1:8000/ (기본 페이지)

127.0.0.1:8000/book_list/

127.0.0.1:8000/book_list/<int:num>

127.0.0.1:8000/language/<str:lang>/


가짜 DB 활용해보기

http://127.0.0.1:8000/movie/ or movie/<int:index>

영화 제목을 클릭하면 해당 영화의 상세페이지로 이동하는 기능 구현


Django Template 설정 및 문법

  • 아직 movies.html에 아무것도 추가하지 않아서 텅텅

  • 파이프(|) 이용해서 forloop.counter 에 연산하기

Django Template을 이용한 페이지 만들기

도서 페이지 만들기


구구단 만들기

  • forloop.counter : 1부터 시작해서 반복 횟수를 세어주는 Django 템플릿 변수

어려운 내용(추가 학습 필요)

  1. 강의에서는 특정 폴더에서만 버전을 3.12.2로 가져감
  • pyenv 버전 우선순위
    • shell > local > global > system
    • local: pyenv-test (3.12.2) — 폴더에서 지정
    • global: 3.12.2 (너무 넓게 먹고 있음)
      • 이래서 cd .. 을 해도 3.12.2 만 나옴
  • 해결방법
    • 전역(global)을 system 으로 돌리기: pyenv global system
    • 원하는 폴더만 pyenv-test 사용하도록 설정
      • cd ~/desktop/pyenv-test
      • pyenv local pyenv-test

오늘 발생한 문제(발생 했다면)

  • pyenv를 설치하면서 가상환경 설정을 했는데 분명 3.12.2로 설정했는데
    • pyenv virtualenv 3.12.2 pyenv-test
      - 내가 따로 Python 3.12.2를 설치하지 않아도 자동으로 설치 + 가상환경 생성
  • 특정 폴더에서만 3.12.2를 사용하고 싶은데 어디로 옮겨도 똑같음
    • 원인
      • /Users/admin/.pyenv/shims/python3
        • pyenv shim 이 앞으로 잡혀 있기 때문 → PATH 순서 수정 필요
        • ~/.pyenv/shims 가 가장 앞에 위치해서 어디서든 pyenv 버전인 상태
        • 그래서 global 을 system 으로 돌려도 shims 가 우선되어 python 호출이 pyenv를 탐
    • 해결
      • .zshrc 열기 : nano ~/.zshrc
      • 맨 아래에 두줄 추가
        • alias python3="/usr/bin/python3"
        • alias python="/usr/bin/python3"
      • 적용 : source ~/.zshrc
profile
안녕하세요.

0개의 댓글