왜 가상 환경이 필요할까?
나도 궁금해서 찾아봤는데 독립하기 위해 이용한다고 한다. 즉, 프로젝트마다 요구하는 파이썬이나 DRF, Django, sql 버전이 다 다르고 이를 효율적으로 관리하기 위해 가상환경을 사용한다.
좀 더 나아가서 패키지 종속성을 확인할 수 있는 requirements.txt
를 통해 알 수 있다면 팀원들과의 버전 충돌은 방지할 수 있을 것이다.
어쨌든 파이참에서는 프로젝트 생성할 때 virtual env를 지정할 수 있고, 터미널을 통해서도 진입할 수 있다.
아주 간단하다. 'New environment using' 칸에 Virtualenv
를 선택하자!
a. Virtual env 설치
pip install virtualenv
b. 가상 환경 생성
virtualenv venv
venv라는 이름의 가상환경을 만드는 것이다.
c. 가상환경 구동하기
Mac은 다음과 같고,$ source venv/bin/activate
Windows는 다음과 같다. (오류 생길 수도 있음)
venv\Scripts\activate
다음 사진과 같이 맨 앞 괄호 사이에 가상환경 이름이 들어가면 성공적으로 된 것이다!
Django나 DRF나 여러 패키지를 설치하고 requirements.txt
에 담는 것이다.
이 단계에서는 설치할 필요 없으나 그래도 혹시 몰라 기입하겠다.
a. 파일 생성하기
pip freeze > requirements.txt
b.
requirements.txt
대로 버전 일괄 설치하기pip install -r requirements.txt
프로젝트 긁어왔을 때 requirements.txt가 존재한다면 패키지들을 일괄 설치할 수 있다.
pip install django
pip install djangorestframework
pip
을 통해 장고와 drf를 설치한다.
django-admin startproject firstProject .
python manage.py startapp firstApp
firstProject
라는 이름의 장고 프로젝트를 생성하고, 그 프로젝트 안에 firstApp
이라는 앱을 생성한다.
한 프로젝트 안에 여러 개의 app이 존재하며 기능 별로 app을 분리하는 것이라 생각하면 된다.
이렇게 생성된 첫 번째 app 디렉터리 안에 파일 여러 개가 생성되는데 다음과 같다.
firstApp/
__init__.py
admin.py
apps.py
migrations/
models.py
tests.py
views.py
이후에 진행해보면 알겠지만, 장고는 도메인형 구조를 가지고 있다.
나는 스프링을 계층형 구조(service, controller, dto 등을 폴더로 해서 다 때려박음)로 했는데, 서비스마다 구분하는 도메인형 구조로 구조로 시작하니 매우 흥미로웠다. 개인취향 호호
처음에 만들어둔 firstProject 안에 settings.py
를 설정할 차례다.
상단에 위치한 INSTALLED_APPS에 필요한 패키지, 앱, api를 추가할 수 있다. 따라서 DRF와 우리가 만든 앱을 등록할 것이다.
INSTALLED_APPES = [
# 중략
'rest_framework',
'firstApp',
]
서비스가 커지면 추가할 패키지, 앱, api가 많아져서 마구잡이로 추가하면 관리하기 힘들어진다.
따라서 내가 보는 강의에선 api -> package -> app 순으로 나열해서 추가하였다.
그리고 여담인데, 추가할 때 마지막 항목에도 ,를 붙이는 걸 추천하는 듯!
(자세히는 잘 모르겠는데 ,을 안붙이면 에러 뜨는 것 같음)
settings.py
의 중반부를 보면 알겠지만, 장고 프로젝트는 sqlite3이 기본적으로 설정되어있다.
하지만 나는 PostgreSQL을 사용할 예정이므로 파이썬과 Postgres를 연결해주는 psycopg2
를 설치하고 해당 부분을 수정할 것이다. (Postgres 설정하는 방법은 다른 블로그에서 보세용)
pip install psycopg2
# 기본적으로 설정되어 있는 sqlite3
# 변경 전
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 변경 후
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'project',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
파이썬은 터미널에서 migrate를 해줘야 실제 DB와 동기화가 된다!
python manage.py migrate
여담으로 더 진행되면 앱 내에 model을 생성하거나 변경하는 일이 있을텐데, 이는 migrate 전에 makemigrations을 해줘야 한다.
python manage.py makemigrations firstApp
즉 정리하면,
makemigrations
: app내의 model 파일에 변경이 생기면 이를 기록하는 역할
migrate
: 실제 db에 적용하는 역할
하지만 지금은 model 파일 건들지도 않았으므로 할 일이 없음^^
...
이제 기본적인 세팅은 끝!