데이터베이스(2)

2021. 7. 18. 13:48벡엔드 개발 공부

NoSql과 Sql의 차이는 무엇일까?

웹이나 앱 어플리케이션을 개발할때 많은 결정들을 내리게 된다. 그리고 가장 중요하고 신중하게 결정하게 될 데이터베이스가 그 중 하나다. 데이터 베이스는 두가지 종류가 있다. 관계형데이터베이스와 비관계형 데이터베이스가 존재한다. 관계형 데이터 베이스에서는 sql문이 쓰인다. 반면 비관계형 데이터베이스는 nosql을 사용한다. 쉽게 생각해보면 sql은 한국음식이고 noSql은 한국음식이 아닌다른 음식들이다. 그래서 noSql에도 다양한 종류가 있다.

 

관계형 데이터베이스

이름에서 알 수 있듯이 여러개의 테이블들이 서로 관계를 맺고 데이터는 엄격한 스키마에 따라 구성된다. 

그래서 그런지 조금더 엄격하고 구조화되어 있다. 

 

 

 

비관계형 데이터베이스

여기는 Key-value데이터 베이스, Document 데이터 베이스, Graph 데이터베이스등 다양한 종류가 있다.

 

Key-value데이터 베이스

key와 value가 쌍인 배열로 이루어져 있다.

 

Document 데이터베이스

문서처럼 정리한 데이터 베이스다. 가장 흔한 예가 MongoDB이다. 관계형 데이터베이스의 경우 테이블이 있고 row와 column이 있어 깔끔하게 정리된 형태라면 이 데이터베이스는 row와 column을 그저 문서에 적어놓은형태이다.

Graph데이터베이스

주로 노드간의 관계를 나타낼때 많이 사용한다. 소셜 네트워크에서 주로 사용된다. 

 

몽고DB에 파이썬을 연결해보자!

일단 몽고db를 로컬에서도 사용할 수도 있겠지만 우리는 cloud database의 종류인 Atlas를 사용해보자!

일단, https://www.mongodb.com/ko-kr/cloud/atlas링크로 들어가서 로그인이나 회원가입을 한다. 

그러면, 아래와 비슷한 화면이 나올것이다. 여기서 오른쪽 위에 있는 create button을 눌러보자.

이후에 이렇게 새개의 옵션이 뜰것이다. 각 cluster마다 다르겠지만 우리는 공짜인 shared cluster을 사용해보자.

cloud provider & region은 각각 aws 와 우리와 가장 가까운 지역인 Singapore을 선택했다. 그 후 밑에 있는 초록색create cluster을 눌러주자. 

 

그 후 중간에 있는 connect 버튼을 눌러주고 1.add your connection ip address 에 초록색 add your current ip address를 누른 후 add ip address를 클릭해준다. 그리고 데이터베이스 username과 password를 정해준 후 create database user을 눌러준다.

다음으론 connection method를 설정해준다. 우리는 connect your application을 선택한다.

마지막으로 우리가 사용할 언어와 mogo DB의 버전을 선택해준다. 필자는 파이썬과 mongoDB의 가장 최신버전을 선택해주었다. 그리고 아래에 보이는 mongodb+srv://~~을 복사해준다. 그리고 close한다.

.

파이썬 파일을 열어서 아래와 같이 cluster = 옆에 붙여넣는다. <password>부분은 본인이 정한 password로 바꿔준다.

다시 database만들던 곳으로 돌아가 browse collection을 눌러준다.

여기서 add my own data를 눌러서 database name과 collection name을 정해준후 create해준다.

파이썬에서 데이터베이스랑 소통을 해줄 드라이버가 필요한다. 다른 드라이버도 있지만 우리는 pymongo를 사용해보자. 그래서 우리는 pymongo를 다운받아주자. pip install pymongo dnspython명령어를 사용해주었다.

로컬 몽고를 사용 하는경우 dnspython명령어를 입력하지 않아도 된다.

from pymongo import MongoClient
client = MongoClient(cluster)

print(client.list_database_names())

db = client.test

print(db.list_collection_names())

를 통해 DB와 제대로 연동이 되었는지 확인해보자. 제대로 연동이 되었다면 database의 이름들과 collection의 이름들이 출력될것이다.

제대로 연동이 되후

todo1 ={"names": "Patrick","text":"Testing!","status":"open"}

todos = db.todos
result = todos.insert_one(todo1)

위 처럼 insert_one을 통해 데이터를 넣어주면 

이렇게 데이터가 입력된것을 확인할 수 있다.

'벡엔드 개발 공부' 카테고리의 다른 글

프레임워크의 구성요소  (0) 2021.09.19
SW의 재사용 방안  (0) 2021.09.19
OOP 객체지향 프로그래밍(Object Oriented Programming)  (0) 2021.09.13
ORM에 관해서  (0) 2021.07.25
프레임워크와 라이브러리  (0) 2021.06.15