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']
- 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)
- .env 파일 사용하기
- 환경변수를 별도의 .env 파일에 정의하고, 이 파일을 로드하여 사용 가능
- 주로 개발 환경에서 사용되며, 버전 관리에서 제외해야 함
- python-dotenv 라이브러리(
pip install python-dotenv 필요)
- .env 파일을 쉽게 로드할 수 있도록 도와주는 라이브러리
{
"DB_HOST": "localhost",
"DB_USER": "user",
"DB_PASSWORD": "password",
"API_KEY": "your_api_key_here"
}
import 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}")
import os
import 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}")
- secret.json 사용하기
- secret.json 파일은 JSON 형식으로 중요한 환경변수나 설정값을 저장하는 파일
- 이 파일은 주로 API 키, 데이터베이스 설정, 인증 정보 등 민감한 데이터를 관리하기 위해 사용
- 장점
- 구조화된 데이터
- JSON 형식을 사용하여 데이터를 구조화 가능
- 여러 환경변수를 하나의 파일로 깔끔하게 관리 가능
- 유연성
- 파일 내용을 쉽게 수정 및 확장 가능
- 새로운 환경변수나 설정값을 쉽게 추가 가능
환경변수 관리 도구
- direnv(
brew install direnv 필요)
- 디렉토리별로 환경변수를 자동으로 로드하고 언로드할 수 있게 도와주는 도구
- 프로젝트 디렉토리에서 .envrc파일을 만들고 여기에 환경변수를 정의
- .envrc 파일을 허용
- Docker 환경변수 관리
- Docker 컨테이너에서 환경변수를 설정하는 방법
- -e 플래그
- .env 파일 사용
- Docker Compose에서 .env 파일을 사용하는 것도 가능
docker run -e DB_HOST=localhost my-container
주의
- 민감한 정보는
.env secret.json 파일에 저장
- 환경변수 파일(.env secret.json 등)
.gitignore 에 등록하여 원격 레포지토리에 업로드 되지 않도록 함
- 환경변수의 이름은 일관성있게 정하기
- 환경변수의 기본값을 설정하여 예상치 못한 오류 방지하기
- 필요하지 않은 환경변수는 삭제하여 환경을 깨끗하게 유지하기
gitignore
gitignore.io
- 사용방법
- 프로젝트 루트 위치에
.gitignore 파일을 생성
- 위의 사이트에 들어가서 본인이 사용하고 있는 프레임워크 또는 환경을 입력 후, 생성을 누름
- git에 올라가지 않을 항목들이 나옴
- 복사해서
.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 기준) = 터미널 껏다 켜기도 가능

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

핵심기능
| 기능 | 명령 | 설명 |
|---|
| Python 설치 | pyenv install | 특정 버전 설치 |
| 가상환경 생성 | pyenv virtualenv | Pyenv 버전 기반 venv 생성 |
| 폴더 적용 | pyenv local | .python-version 파일 생성 → 해당 폴더 진입 시 자동 적용 |
- pyenv virtualenv 3.12.2 venv_A / pyenv virtualenv 3.12.2 venv_B
- 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 응답 만들어보기

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 활용해보기

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

Django Template 설정 및 문법

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

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

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

도서 페이지 만들기


구구단 만들기

- forloop.counter : 1부터 시작해서 반복 횟수를 세어주는 Django 템플릿 변수
어려운 내용(추가 학습 필요)
- 강의에서는 특정 폴더에서만 버전을 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