[쉽길] 로컬 서버 초기 설정 가이드
쉽길 프로젝트 팀원을 위한 Python 가상환경, 환경 변수(.env), DB 마이그레이션 등 로컬 개발 환경 초기 설정 가이드입니다.
쉽길 프로젝트를 기준으로, 로컬 서버에서 개발 환경을 초기화하는 과정이다.
매번 자리 바꿀 때마다 찾아보기 어려워서 정리해봤다.
1. 가상환경 실행
1
2
3
4
5
6
# 가상환경 생성
$ python -m venv venv
# 가상환경 활성화
$ source venv/Scripts/activate
# 라이브러리 설치
$ pip install -r requirements.txt
2. 환경변수(.env) 설정
.env.example 파일을 복제해서 .env 파일을 만든다.
그리고 우리팀 Secrets 에서 각종 ID와 비밀번호, API KEY 등 노출되면 안 되는 환경변수들을 가져와 .env 파일에 입력한다.
.env 파일은 .gitignore에 쓰여 있어서 외부로 공유되지 않는다!
3. DB migrate
migrations 파일은 만들어져 있는 상태이기 때문에, makemigrations 과정은 생략하고 로컬 서버에 데이터베이스를 입력하는 과정(migrate + load_csv)만 진행하면 된다.
쉽길 프로젝트의 경우, csv 파일에 데이터를 저장해두고 업로드하는 방식을 사용하고 있다.
배포용 서버에서는 DB 서버로 MySQL을 사용하고 yml 파일에서 load_csv하는 과정이 자동화되어 있지만,
로컬 서버의 경우 사용자가 직접 load_csv 과정을 거쳐 SQLite에 데이터베이스를 올려야 한다.
1
2
3
4
5
6
7
8
9
10
11
# migrate
$ python manage.py migrate --settings=config.settings.local
# load_csv
python manage.py load_csv --file station.csv --settings=config.settings.local
python manage.py load_csv --file line.csv --settings=config.settings.local
python manage.py load_csv --file stationline.csv --settings=config.settings.local
python manage.py load_csv --file node.csv --settings=config.settings.local
python manage.py load_csv --file edge.csv --settings=config.settings.local
python manage.py load_csv --file FastGate.csv --settings=config.settings.local
python manage.py load_csv --file lines.csv --settings=config.settings.local
이때 데이터를 올리는 순서에 주의해야 한다! 의존성이 없는 마스터 데이터부터 로드해야 한다.
데이터 간 관계에 따라 다른 테이블을 참조하는 관계(외래키 등)라면, 해당 테이블이 비어있는 경우 아래와 같은 에러 화면을 만날 수 있다.
여기서 load_csv 과정은 csv에 있는 데이터를 DB에 적재하는 과정이다. 위 명령어를 통해 journeys 앱 내부에 management/commands/load_csv.py가 실행되고, 각 파일에서 데이터를 한줄한줄 읽어오면서 DB에 입력되는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apps/
├── accounts/
├── common/
├── journeys/
│ ├── __pycache__/
│ ├── management/
│ │ └── commands/
│ │ ├── __pycache__/
│ │ ├── build_graph.py
│ │ └── load_csv.py
│ ├── migrations/
│ ├── services/
│ ├── templates/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── stations/
4. (구글 로그인) SocialApp 등록
구글 로그인을 위한 SocialApp을 등록하는 과정이 필요하다.
shell을 실행해서 사이트를 연결하는 과정은 처음에 한번만 진행하면 된다.
1
2
3
4
5
6
7
8
9
10
11
# shell 실행 (처음 한 번만 진행)
python manage.py shell --settings=config.settings.local
from django.contrib.sites.models import Site
s = Site.objects.get(id=1) # SITE_ID 확인해서 맞는 걸로 수정
s.domain = "localhost:8000" # 스킴 없이, 포트 포함
s.name = "Local"
s.save()
# socialapp 등록
$ python manage.py apply_socialapp --settings=config.settings.local
5. git 브랜치 최신화
매 작업 전에 로컬 git을 최신화해주는 작업이 필수!!!
먼저, 로컬 dev를 최신화해준다.
1
2
3
4
5
6
# 원격 저장소(origin) 최신 내역 가져오기
git fetch origin
# dev 브랜치로 이동
git checkout dev
# 로컬 dev 최신화
git pull --ff-only origin dev
로컬 feat 브랜치도 최신화해준다.
1
2
3
4
5
6
# 내 작업 브랜치로 이동 (이미 feat/...에 있을 경우 생략)
git checkout feat/...
# 2. 최신 dev 가져와서 리베이스
git fetch origin
git rebase origin/dev
이때 작업 브랜치를 새로 생성해야 한다면,
1
2
# 작업 브랜치 생성
git switch -c feat/작업명


