왜 가상 환경이 필요할까?
나도 궁금해서 찾아봤는데 독립하기 위해 이용한다고 한다. 즉, 프로젝트마다 요구하는 파이썬이나 DRF, Django, sql 버전이 다 다르고 이를 효율적으로 관리하기 위해 가상환경을 사용한다.
좀 더 나아가서 패키지 종속성을 확인할 수 있는 requirements.txt를 통해 알 수 있다면 팀원들과의 버전 충돌은 방지할 수 있을 것이다.
어쨌든 파이참에서는 프로젝트 생성할 때 virtual env를 지정할 수 있고, 터미널을 통해서도 진입할 수 있다.
아주 간단하다. 'New environment using' 칸에 Virtualenv를 선택하자!

a. Virtual env 설치
pip install virtualenv
b. 가상 환경 생성
virtualenv venvvenv라는 이름의 가상환경을 만드는 것이다.
c. 가상환경 구동하기
Mac은 다음과 같고,$ source venv/bin/activateWindows는 다음과 같다. (오류 생길 수도 있음)
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 파일 건들지도 않았으므로 할 일이 없음^^
...
이제 기본적인 세팅은 끝!