djagno 5 - django에 DB 연동하기
[카카오 클라우드 스쿨] djagno 5 - django에 DB 연동하기
django에 DB 연동하기
5-1. DB를 연동하기 위한 기본 개념
백엔드의 핵심, DB와 서버 연동하기
1 . 3-Tier application
- DB를 구성할 때, 보통 웹서버랑 다른 컴퓨터에 설치하는 것이 일반적
- 즉, 웹서버는 서버이자 DB 클라이언트가 됨
- (3-Tier app)
- (3-Tier app)
2 . Database에 연동하기 위한 django 설정
- django는 기본적으로 기본 DB를 쓰도록 설정되어 있음
- 따라서 하단 예시와 같이 settings.py에서 사용할 DB를 바꾸어야 함
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[DB 이름]',
'USER': '[DB 접속 ID]',
'PASSWORD': '[DB 접속 PW]',
'HOST': '[DB 서버 IP주소]',
'PORT': '[DB 서버 포트번호]',
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'
}
}
}
- 위 코드를 보면 DB와 연결하는 데에는 4가지 정보가 필요하다
- DB 서버의 IP (HOST)
- DB 프로그램의 port (PORT)
- 사용하고자 하는 DB의 이름 (NAME)
- DB에 접근할 수 있는 인증 정보 (USER, PASSWORD)
- 그 외 알아서 CRUD를 수행하도록 할 수 있는 기능 등 (OPTIONS)
3 . ORM 수행
- settings.py의 Database 부분을 구성했다면, ORM을 수행한다
- ORM이란?
- 객체와 관계형 데이터베이스를 매핑한다
- 즉, django의 객체를 RDB에 차곡 차곡 저장해 준다
- 다음을 입력하면 ORM이 수행된다(이제 django에서 객체를 만들면 DB에서 테이블이 알아서 생성된다)
- 참고로 django는 MVT 중, M(MODEL)이 ORM을 수행한다
python manage.py migrate
5-2. MariaDB 설치
maria DB를 django와 연동해 볼 것임
- 원래는 컴퓨터 두 대로 운영하는 것이 맞지만, 지금 컴퓨터가 한 대라서 VM을 사용해서 구성해 보자
두 가지 가상화 기술
VM: 비휘발적임, Hypervisor 기반
컨테이너: VM보다 가벼움, 빨리 생성할 수 있지만, 반대로 쉽게 삭제될 수 있음
가상 머신에서 MariaDB를 설치한다
- 계정 및 UTF8 설정
- UTF8: 한국어 호환용(이진수)
- 비밀번호: 기본 계정 roor의 PW 설정
- root 사용자: 원격에서 루트계정 접근 가능(평소에는 위험하니까 쓰면 안됨)
- 서비스 및 포트 설정
- DB 프로그램은 터미널에서 실행해야 되는데, 이는 리눅스에서는 데몬, 윈도우에서 service라고 한다
- maria와 mysql의 포트는 기본 3306
- 그리고 버퍼 사이즈 세팅
- 서비스 및 포트 확인해 보기
- netstat -ano를 통해 3306포트가 열려있는지 알 수 있음
- 가상 머신의 DB 세팅 끝
5-3. MariaDB 접속테스트
- 다음은 원격에서 접속을 테스트 해 보자
- 원격(내 경우에는 VM이 아닌 오리지널)PC에서 HeidiSQL을 실행한다
- 신규 버튼 클릭
- 아까 세팅한 4가지 정보 입력
- 가상 머신의 IP주소
- ID, PW
- port number
- DB name
- 혹여나 연결이 되지 않는다면 VM의 NAT를 지웠다가 다시 만들어 보자
- 쿼리문을 통해서 DB를 생성한다
RDBMS: 어떻게든 제약을 걸어서(스키마) 데이터를 정돈된 상태로 유지하겠다는 굳은 의지가 보임
5-4. mariaDB와 django 연결하기
5-1에서 본 것처럼, 몇가지 세팅이 필요하다
1 . 이제 장고가 클라이언트로써 DB에 접속을 해야 함
2 . 서버는 잠시 끄고, mysqlclient 설치(mariaDB와 호환됨)
pip install mysqlclient
3 . settings.py 파일에서 DB 부분을 다음과 같이 DB에 맞게 수정한다. 설명은 5-1 참고
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'web',
'USER': 'root',
'PASSWORD': 'qwer1234',
'HOST': '192.168.17.17',
'PORT': '3306',
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'
}
}
}
4 . 터미널에서 다음을 실행한다
- ORM이 수행된다
- 참고로 ORM은 settings.py에 있는 installed app 중 관련된 프로그램에 의해 실행이 된다
- 최종적으로 DB와 연결되게 될 것이다
python manage.py migrate
5 . HeidiSQL (접속 클라이언트)에서 새로고침 하면 web 내부에 데이터가 생성된 걸 확인 가능