< 스타벅스 코리아 음료 DB에 저장하기 >
conda create -n starbucks python=3.8
(참고) n은 'name'을 의미
conda activate starbucks
(참고) 나는 vim .zshrc에 단축키를 지정했다.
alias ca = conda activate
이렇게 하면 매번 길게 타이핑 하지 않고 빠르게 실행시킬 수 있다.
$ ca starbucks
conda env list
위 명령어를 통해 현재 활성화 되어 있는 가상환경 정보를 확인할 수 있다.
*
표시된 starbucks (가상환경)
base /Users/khh180cm/miniconda3
auth /Users/khh180cm/miniconda3/envs/auth
helloworld /Users/khh180cm/miniconda3/envs/helloworld
helloworld_project /Users/khh180cm/miniconda3/envs/helloworld_project
proj /Users/khh180cm/miniconda3/envs/proj
scraping /Users/khh180cm/miniconda3/envs/scraping
stagram /Users/khh180cm/miniconda3/envs/stagram
starbucks * /Users/khh180cm/miniconda3/envs/starbucks
tutorial
가상환경 생성후 위의 명령어를 통해 (base) -> (starbucks)로
가상환경 상태로 진입한다.
의무사항은 아니지만, 파이썬의 pip env 방식의 가상환경 구축이 아니기 때문에 이렇게 진행한다. 미니콘다로 가상환경을 구축하는 것이기에 진행할 장고 기반 웹 프로젝트의 디렉토리 명
과 동일하게 했다.
앞으로 무수히 만들 가상환경과 프로젝트들을 헷갈리지 않기 위해서 이렇게 하였다.
mkdir starbucks && cd starbucks
스타벅스 디렉토리 생성 후 해당 폴더로 이동
pip install django
(참고) 장고가 웹 프레임워크이기에 (base)에 설치를 하는 사람을 종종 봤다.
개발하는 프로젝트마다 장고 버전이 다를 수 있다. 그러니 (base)는 신성히 여기고, 가상환경에다가 설치하도록 하자!
pip install beautifulsoup4
로컬서버를 구축하기 위해 크롤링 기술을 사용해야 한다.
pip install beautiful 이라고 할 경우 아래와 같이 에러 메시지가 뜬다.
에러 메시지를 읽어보면,
python 버전 3 미만에서 작동하는 old 버전의 beautifulsoup라고 한다.
따라서, 최신버전인 beautifulsoup4 로 입력해야 한다.
$ pip install beautifulsoup4
pip install requests
requests 라이브러리도 다운받는다.
pip install lxml
lxml 이란 구문 분석기(parser)도 다운받는다.
pip install -U selenium
크롤링에 필요한 selenium 패키지 또한 다운받는다.
selenium 공식 홈페이지에 다운받는 명령어를 찾을 수 있다.
그냥 pip install selenium
만 하려다가 그래도 공식문서에서
제공하는 방식대로 진행했다.(정석) -U 는 selenium이 설치되어 있다면 최신버전으로 업그레이드 한다는 의미다.
brew install mysql
혹시나 장고 기본 제공 개발용 DB(sqlite)를 계속 사용할 것이 아니라면 설치한다.
(우린 배포까지 할 예정이므로 설치하자)
협업을 진행하며 deploy까지 진행하는 프로젝트라면
경량 웹(디폴트 : sqlite3)보다는 실제 양산시 사용될 DB로 (개발 + production) 초기부터 셋팅을 하라고 하고있다. (장고 튜토리얼)
출처 : https://docs.djangoproject.com/ko/3.0/intro/tutorial02/
mysql.server start
서버를 실행시킨다.
mysql_secure_installation
위의 명령어를 통해 사용할 서버의 기본설정을 입력한다.
입력하면 아래와 같은 문구가 나온다.
(1) 비밀번호를 어렵게 설정할지 묻는다.(비밀번호 복잡도 설정)
비밀번호 몇자 이상 등 복잡하게 설정하고 싶지 않아서 no로 하였다.
-> n 입력(no)
(2) Enter password for user root:
-> 서버(user root)의 패스워드를 입력했다.
(3) Remove anonymous users?
-> y 입력 (yes)
mysql의 디폴트로 제공하는 테스트용 익명의 사용자를 삭제했다.
(4) Disallow root login remotely?
-> y 입력 (yes)
로컬 호스트(local host)로만 접속이 가능하게 하고 싶다.
즉, 원격으로 서버에 접속하는 것을 허용하지 않을 것이다.
이번 프로젝트는 로컬에서만 개발할 것이기 때문이다.
질문이 disallow 할것이냐고 묻고있으므로 y로 입력을 했다.
(5) Remove test database and access to it?
-> n 입력 (no)
(6) Reload privilege tables now?
-> y 입력 (yes)
6가지 입력 완료!
혹시나 나중에 설정을 변경하고 싶다면
다시 아래의 동일 명령어를 통해 진행할 수가 있다.
mysql_secure_installation
또한, 추가적으로 mysql server가 재부팅과 상관없이 켜져있을 수 있도록 brew services를 이용하여 서버를 켜두겠다.
brew services start mysql
Django 3.0 MySQL 연결하기
파이썬에서
mysqlclient
라는 라이브러리를 통해
MySQL과 DB를 연동하게 해준다.
$ pip install mysqlclient
pip list
위의 명령어를 통해 현재의 (가상)환경에 설치된 패키지들의 정보를 알 수 있다.
필요한 패키지는 모두 다운받았다.
이제 장고(Django)로 프로젝트를 생성 및 시작 해보자.
django-admin startproject starbucks .
그리고 tree
command를 이용해 디렉토리들의 계층구조를 살펴보자.
(tree 역시 설치되어 있지 않으신 분은 설치가 필요하다.)
manage.py 모듈과 starbucks 디렉토리가 동일 디렉토리에 있다.
이 곳이 프로젝트의 최상단 모듈이다.
이제 프로젝트 시작하기 전에 추가로 해야할 작업들이 몇가지 있다.
깃허브 등에 소스코드를 공유하기 위해 업로드하고 싶은 것과 그렇지 않은것, 업로드해서는 안되는 것(SECRET KEY, 데이터베이스 등 보안이 필요한 파일)들이 존재한다.
이를 구분하기 위해 깃이 설치된 디렉토리에 .gitignore파일을 생성해서 관리해야 한다.
macOS, python, django, vim을 클릭하면 파일을 만들어준다.
만약 협업을 진행하는 백엔드 팀원이 pycharm 혹은 Visual Studio Code 그리고 리눅스(우분투)를 사용한다면 이 파일 또한 추가하자.
따라서, 아래와 같이 진행해야 한다.
cd '프로젝트 폴더명'
touch .gitignore
vi .gitignore
https://www.toptal.com/developers/gitignore
해당 사이트에 접속하여 내 프로젝트에 알맞는 .gitignore파일을 만들 수 있다.
$ vi .gitignore
여기에*.csv
db_uploader.py
my_settings.py 도 추가해야 한다.
'생성'
버튼을 누르면 아래와 같은 페이지가 나온다.
해당 내용을 복사해서 이전에 생성해뒀던 .gitignore파일에 붙여넣는다.
장고 프로젝트에서 사용하지 않을 앱 주석처리하기
settings.py모듈을 연다.
똑같이 주석처리하였다.
corsheaders 관련 플러그인을 다운받는다.
과거의 서버 (2세대)의 인증은 CSRF를 대비해야했는데,
이는 서버에서 페이지를 제공했기 때문이다.
API 서버 제작시 CROSS DOMAIN은 기본적으로 웹브라우저에서 허용하지 않는다. 하지만 개발자들의 요구 등으로 인하여 cors에 대한 허용을 공식적으로 지원해주고 있다. 개발자들이 우회경로 및 버그 등을 활용하여 사용하는 것보다 이러한 policy가 더 안전하다.
관련 플러그인인 django-cors-headers를 설치한다.
pip install django-cors-headers
해당 플러그인을 내가 진행할 장고 프로젝트가 인식할 수 있도록
좀전에 사용했던 settings.py의 INSTALLED_APPS에 입력해야 한다.
또한, settings.py 하단에 다음과 같이 허용할 값을 입력한다.
settings.py를 수정하는 김에 시간셋팅도 변경시켜주자.
디폴트로 아래와 같이 작성되어 있을 것이다.
이것을 한국(서울)시간으로 맞춰준다.
그리고 협업을 진행하고 있고, 다른 사람이 동일한 환경에서 프로젝트를 진행할 수 있도록 텍스트파일을 생성한다.
pip freeze > requirements.txt
(참고) 이 기능은 굉장히 유용하다.
예를 들어, 프로젝트가 이제 막 시작됐다고 하자.
한 팀원이 github에 프로젝트 기본셋팅이 완료된 패키지를 push한다.
나머지 팀원들은 그 패키지를 다운받고,
필요한 모듈들을 하나하나 찾을 필요가 없다.
위의 requirements.txt를 바로 활용하면 되기 때문이다.
$ pip install -r requirements.txt
이 명령어 하나면 텍스트 파일에 명시된 패키지들을 한 번에 다운받게 해준다.
매우매우 강력하고 유용한 Tip이다.
마지막으로 보안을 위한 설정을 해야한다.
settings.py에 존재하는 내용 중 SECRET_KEY,
DATABASE 의 비밀번호 등은 공유되어서는 절대 아니다!
보안과 관련된 파일이니 이미지를 첨부하지 못하였다.
가이드는 아래와 같다.
그리고 my_settings.py 설정 관련 참조한 사이트 링크는 아래와 같다.
https://myjamong.tistory.com/102
https://velog.io/@devmin/Django-MySQL-Connect
python manage.py starbucks
를 입력하면
에러가 발생할 수도 있다.
settings.py 모듈에서 admin을 주석처리했는데, urls.py에서
admin 관련 코드가 있기 때문이다.
이 이외의 에러 역시 발생했지만,
모듈 import 관련내용 및 INSTALLED_APPS 에 앱이 중복되어있다는 등의 사소한 문제이니 쉽게 해결할 수 있다.
추가로, 아래와 같은 문제는
mysql에 starbucks_mysql
이란 데이터베이스 이름이 없다고 하는 것이다. 서버를 설치만 했지, 데이터베이스를 생성한 것이 아니기에 발생한 문제이니 데이터베이스를 설치해줘야 한다.
mysql.server start
mysql 서버를 시작하고
mysql -u root -p
접속한다.
(비밀번호 입력필요)
입력하면 mysql 터미널로 전환이 되고 아래와 같이 입력한다.
CREATE DATABASE 데이터베이스이름 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
starbucks_mysql
이란 이름으로 mysql에 데이터베이스를 생성한다.
python manage.py makemigrations
결과
: No changes detected
(참고로, makemigrations란
우리가 modes.py에 정의한 모델(필드 등)의 변경점을 추적하는 것이다.
중요한 점은 아직 데이터베이스에 모델이 반영된 것은 아니다.
단지, 생성한 앱의 모델 변경사항을 기록해두는 것이다.