MongoDB vs MySQL vs SQLite3 뭘쓰지..

김준영·2021년 2월 10일
0

데이터베이스란?

데이터 베이스란 내가 활용할 데이터들을 모아놓은 곳입니다. 즉 관리 해야 하는 데이터들을 목적에 맞게 일부로 저장소에 넣어준다는 것입니다.

그럼 그냥 넣으면 되지 관계형 데이터베이스(RDB)는 뭐고 NoSQL은 뭐야?

관계형 데이터베이스

행과 열로 이루어진 데이터베이스 입니다. 마치 표 처럼 생겼다 하죠.

ID이름나이
0김준24
1김준영25
2준영김26

이런 식으로 코딩에 맞게 내가 데이터를 넣으면 ID는 3으로 들어가게 되고 데이터를 찾거나 삭제할땐 ID 나 이름 나이 로 찾으면 되겠죠? 아직까지도 가장 많이 쓰이는 데이터베이스이자 취업공고에 우대사항 혹은 기본사항으로 "MySQL 활용할 줄 아는자" 가 적혀 있는 경우도 많습니다.
관계형 데이터베이스는 Oracle, MySQL(Oracle) / MS-SQL(Microsoft) / DB2, Infomix(IBM) / Maria DB(Sun Microsystems) / Derby(Apache) / SQLite(Opensource) 이렇게 구분되어 있습니다.

NoSQL

출처: https://openclassrooms.com/

그림으로 보니 이해가 더 쉽게 되지 않나요?
관계형 데이터베이스와 달리 NoSQL은 그 안에도 종류가 있습니다. 간단하건 아무래도 key-value가 될 거 같습니다. 말 그대로 {'key':'value'} 입니다.

그래서 뭘 쓴다고?

우린 블로그를 만들고 있습니다. 사용자 회원가입 기능은 없고, 내가 만든 Post들은 모두에게 보여져야 합니다. 또, 각 Post 마다 Comment 가 있어야 합니다. 어떤 데이터베이스를 써야 할까요?

DocumentDB 를 쓰는 게 맞지 않을까요?

하지만 내가 구현하고자 하는 기능을 보면 각 Post는

이런식으로 구현이 되겠죠? 그럼 DocumentDB를 쓰는게 맞지 않을까요? 예시로 이전에 쓰던 DB를 가져와 보았습니다.
Firebase DB로 DocumentDB 인데요. 갈수록 하위 계층으로 가는 것 보이시나요?

MySQL 을 써보자.

DocumentDB 쓴다면서...

사실 이번 프로젝트는 실제로 블로그를 배포하는 목적도 있지만 내가 안써본 기술을 써보는 것이 목적이기도 하여 MySQL을 선택하게 되었습니다.

Django Setting 변경

Django는 기본적으로 SQLite3을 지원하고 있습니다. 관계형 데이터베이스 이긴 하나 작은 데이터베이스라고 생각하면 될 것 같습니다.

DATABASES  = {
    'default': {
        'ENGINE'   : 'django.db.backends.mysql',
        'NAME'     : '이름',
        'USER'     : '유저',
        'PASSWORD' : '패스워드',
        'HOST'     : '지금은 localhost일껄?', 
        'PORT'     :'3306', 
    }
}    

이제 난관입니다.

pip install mysqlclient

해보시면 되는 분도 있고 안되는 분도 많을 겁니다. mysqlclient 는 Django 환경에서 mysql을 연결시키는 모듈인데요. 윈도우에서 잘 안깔리는 경우가 많아서 수동으로 연결 시켜주어야 합니다.

안될시
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

pip install C:\Users\lenovo\Downloads\mysqlclient-1.4.6-cp38-cp38-win32.whl

MySQL Workbench 를 깔아보자

데이터 관리를 하려면 뭔가 보여지는게 있으면서 작업을 해야겠죠? 혹은 Vscode 에서 MYSQLclient for vscode 를 설치해도 되는데 그냥 workbench 사용하는게 나을것 같습니다.

MYSQL 설치

'https://dev.mysql.com/downloads/mysql/'
웹설치가 아닌, 설치파일 전부를 다운로드받아 설치하기 위해서 2번째 다운로드 버튼을 클릭합니다.
mysql workbench에서 root 사용자 계정으로 로그인 후 , create database 명령문을 통해 데이터베이스를 만들어 준다.

Schema(스키마,데이터베이스 )만들기

스키마는 사용자가 데이터베이스에 접근할 때 지도처럼 사용하는 개념이기 때문에 스키마와 데이터베이스는 동일한 개념이 아님. 지도에 따라 도시를 건설하는 느낌 스키마를 설계한다는 것은 데이터베이스를 설계한다는 의미.
가능하면 관련성 있는 데이터구조를 하나의 스키마에 모아서 관리하는 것이 좋음. 관련성 없는 여러개의 데이터 구조를 하나의 스키마에 포함시키면 나중에 이 데이터를 구분 짓기가 어려워서 데이터베이스 관리가 힘들어진다.
위에서 본 create database ~~; 가 스키마를 생성한 것.

Home 으로 돌아가서 Database 를 Connect 해준다.

스키마에 테이블(Table) 추가하기.

"Tables" 에는 테이블 정보가 들어있고 테이블은 데이터 구조를 정의한 명세서 같은것.
Tables 를 우클릭 후 "create Table"

테이블에 데이터 추가하기

테이블 우클릭 후 "Send to SQL Editer" -> "Insert Statement" 를 선택하면 테이블에 데이터를 추가 하기 위한 SQL 구문을 작성할 수 있음

테이블 검색

테이블 우클릭 후 "Select Rows - Limit 1000" OR SELECT * FROM test_sch.test_table

이제 Django migrate->start!
당연히 오류나겠죠?? makemigration조차 되지 않을겁니다. 왜냐면 django 에서는 Model에 맞는 필드가 있는지 없는지 혹은 sqlite3 데이터가 아직까지 남아있는지 봅니다.

django.db.utils.ProgrammingError: (1146, "Table '세팅에적혀있는디비이름.main_user' doesn't exist")

여기서 main_user에서 main은 장고 앱의 이름이고 user은 Model 클래스 이름입니다. 이해 되시나요? MySQL Workbench 에서 스키마를 생성하고 그 안에 Model클래스에 있는 field를 만들어 주는 겁니다.

이제

py manage.py migrate

MySQL 연동 끗

0개의 댓글