6장 데이터베이스
데이터베이스 시스템에 대한 소개
데이터베이스 핵심 개념
SQL(Structured Query Language)
데이터베이스와 API 연결시키기
데이터베이스 시스템에 대한 소개
데이터베이스 시스템은 데이터를 저장 및 보존하는 시스템이다. 저장되어 있는 데이터를 읽어 들일 수 있고, 새로운 데이터를 저장할 수도 있고, 기존 데이터를 업데이트 할 수도 있다.
책에서 소개하는 DB 종류는 관계형 데이터베이스, RDB(Relational DataBase); 비관계형 데이터베이스, NoSQL(non-relational)이 있다.
관계형 데이터베이스
- 관계형 데이터 모델에 기초를 둔 데이터베이스를 말한다. 관계형 데이터들은 서로 상호관련성을 가진 형태로 표현한 데이터들이다.
- RDB에 모든 데이터들은 2차원 테이블(table)들로 표현된다.
- 대표적인 RDB 시스템으로는 MySQL, PostgresSQL 등이 있다.
- 학교나 자격증 시험에서 보는 여러 키, 테이블, 참조 등의 개념을 가지는 데이터베이스이다.
- RDB의 가장 두드러지는 특징, 기능은 정규화, 트랙잭션(ACID) 등이 있다.
*ACID - Atomicity, Consistency, Isolation, Durability의 줄임말, 이 성질들을 확보해야 트랙젹션 기능을 보장한다.
데이터베이스 핵심 개념
RDB vs NoSQL
RDB의 장점
- RDB는 데이터를 더 효율적이고 체계적으로 저장하고 관리 가능
- 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의함으로써 데이터의 완전성이 보장
- 트랜잭션(transaction) 기능을 제공
RDB의 단점
- 테이블을 미리 정의해야 하므로 구조 변화 등에 덜 유연함
- 확장이 쉽지 않다. 데이블 구조가 미리 정의되어야 하고 ACID를 보장해야 하다 보니 서버를 늘리는 것만으로 확장이 쉽지 않고, 성늘 자체도 높여야 한다.
- 서버를 늘려서 분산 저장하는 것도 쉽지 않다. 스케이 아웃(scale out, 서버 수 늘리기)보다 스케일 업(scale up, 성능을 높이는 것)으로 확장해야 한다.
NoSQL의 장점
- 데이터 구조를 미리 정의하지 않아도 되므로 저장하는 데이터의 구조 변화에 유연
- DBMS 시스템 확장하기가 비교적 쉽다. 스케일 아웃 가능.
- 확장이 쉽고, 구조가 유연하니 방대한 양의 데이터를 저장하는데 유리함
NoSQL의 단점
- 데이터의 완정성이 덜 보장됨
- 트랜잭션이 안 되거나 되더라도 비교적 불안정하다.
SQL(Structured Query Language)
SQL은 RDB에서 데이터를 읽거나 생성, 수정하기 위해 사용하는 언어이다.
기본적으로 CRUD라고 하여, 데이터를 Create(생성), Read(읽기), Update(수정), Delete(삭제)하는 기능을 제공하는 RDB 시스템 전용 언어다.
당연히 기본적인 구문으로는 SELECT, INSERT, UPDATE, DELETE, JOIN 등이 있다.
실습은 하지 않겠다. 개인적으로 쉽다고 생각되는 부분이고 리서치하면 정말 많은 내용이 나온다.
데이터베이스와 API 연결시키기
- MySql 설치
- 데이터 스키마 구현
- SQLAlchemy 사용해서 DB와 API 연동
SQLAlchemy는 ORM(Object Relational Mapper)이다. 하지만 책에서는 백엔드 입문 책이기 때문에 ORM 기능은 사용하지 않고 CORE 부분(데이터베이스와의 연결)만을 사용했고, 데이터 조작은 SQL 기능을 사용했다.
ORM - RDB 데이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것이다.
6장 요약
파이썬의 대표격 프레임워크인 Flask를 알아보고 Flask를 통해 기초 API를 만들어 봤습니다.
개인적으로는 ORM을 사용해봤으면 더 낫지 않았을까 한다. DB를 CLI로 하나하나 조작하다 보니 불편한 점이 많았다. 수정이 힘들고, 오입력시... (절레절레) 나중에 개인 프로젝트를 하게 된다면 ORM은 꼭 사용하고 싶다.
실습보다는 내용 위주로 적었다. 실습 코드가 보고싶다면 내 블로그보다 이미 자세하게 적은 블로그나 작가님의 깃헙을 참고하면 좋을듯 하다.