데이터베이스는 왜 공부해야하죠?
제가 오늘 올리브영 온라인 몰 사이트에서 마침 쇼핑을 했습니다.
'오늘 스킨도 사야하는데, 뭘 사야할 지 고민인데? 요즘 판매량이랑 인기순을 알고 싶다' 했습니다.
정말 감사하게도 올리브영 사이트는 아래와 같이 볼 수 있습니다.
인기순도 있고, 최근 등록 순 등등 이렇게 총 5가지로 제가 보고 싶은 목록으로 볼수 있게 되어 있습니다. 그리고 총 스킨케어 카테고리에 몇개까지 있는지도 알수 있죠?
사용자의 요청에 의해서 데이터베이스에 저장되어 있는 데이터를 읽어서 불러온 것입니다.
그런데, 데이터베이스 시스템을 사용하지 않았을 시 데이터들은 서버가 멈추거나 재실행할때마다 데이터들이 다 날라갈 수 있습니다. 왜냐하면 데이터를 저장하지 않았기 때문이죠.
이처럼 다수의 사용자가 사용하는 데이터들의 공유와 운영을 위해서 저장해 놓은 공간을 데이터 베이스라고 합니다.
이후에 데이터를 갖고 고객들에게 데이터를 적절하게 볼 수 있도록 위의 그림처럼 해줄 수 있습니다.
그리고 또, 기업에서는 이런 데이터를 기준으로 마케팅에 이용될 수 있고, 국가에서는 정책을 만들 수도 있습니다.
즉, 데이터를 저장, 가공, 처리를 할 때 판단의 기준을 잘 잡기 위해서는 데이터베이스를 배워야 합니다.
데이터 베이스 시스템에서는 크게 2가지의 종류가 있습니다. 관계형 데이터 베이스 시스템(RDBMS: Relational Database Management)와 비관계형(Non- relational) 데이터 베이스가 있습니다.
관계형 데이터란, 데이터들이 서로 상호관련성을 가진 형태로 표현한 데이터입니다.
그렇다면, 관계형 데이터베이스란 무슨 뜻일까요?
관계형 데이터베이스란?
관계형 데이터 모델에 기초를 둔 베이스 시스템
대표적인 관계형 데이터베이스 시스템 : MySQL, PostgreSQL
특징
i) 모든 데이터를 2차원 테이블로 표현
ii) 각각의 테이블은 칼럼(column:행)과 로우(row:열)로 구성
칼럼 : 테이블의 각 항목
로우 : 각 항목들의 실제 값, 각 로우는 고유키(primary key) 존재
장점
i) 관계형 데이터베이스는 데이터를 더 효율적이고 체계적으로 저장하고 관리할 수 있다.
ii) 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의함으로써 데이터의 완전성이 보장
iii) 트랜잭션 기능 제공
단점
i) 테이블을 미리 정의해야 하므로 테이블 구조 변화 등에 덜 유연
ii) 확장이 쉽지 않다. 테이블 구조가 미리 정의되어야 하고 ACID를 보장해야 하다 보니 단순히 서버를 늘리는 것만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다.
iii) 서버를 늘려도 분산 저장하는 것도 쉽지 않다. 주로 서버 수를 늘려서 확장하는 것(스케일 아웃)보다는 서버의 성능을 높이는 것(스케일 업)으로 확장해야한다.
테이블들 간 상호 관련성 종류
one to one 관계
: 테이블 A 로우의 1과 테이블 B의 2로우 연결 관계, 일대일 관계
EX. 대한민국의 결혼제도는 일부일처제, 즉 한 사람의 여자와 한 사람의 남자가 결혼하는 제도
one to many 관계
: 테이블 A 로우의 1이 테이블 B의 1,2 로우(여러)와 연결, 일대다 관계
EX. 하나의 고객은 00은행에 여러 계좌
many to many 관계
: 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결, 다대다 관계
EX. 인스타에서 한 사용자를 여러 사용자가 팔로우 할 수 있고, 해당 사용자 또한 여러 사용자가 팔로우 할 수 있다.
관계형 데이터베이스의 테이블을 설계하는 방법 - 전체흐름:
업무파악 -> 개념적 데이터 모델링 -> 논리적 데이터 모델링 -> 물리적 데이터 모델링
비관계형 데이터베이스란?
NoSQL 데이터베이스라고도 불린느 비관계형 데이터베이스 시스템은 이름 그대로 비관계형 타입의 데이터를 저장 할 때 주로 사용되는 데이터베이스 시스템입니다.
대표적인 관계형 데이터베이스 시스템 : MongoDB, Redis, Cassandra
특징
i) 관계형 데이터베이스처럼 스키마와 테이블들의 관계를 정의할 필요 없다.
데이터가 들어오는 그대로 저장하면 된다.
ii) 테이블(table)을 컬렉션(Collection)으로, 레코드(record)를 문서(documents)로 부른다.
장점
i) 데이터 구조를 미리 정의하지 않아도 되므로 데이터의 구조 변화에 유연
ii) 데이터베이스 시스템 확장하기가 비교적 쉽다. 스케일 아웃 즉, 서버 수를 늘리는 방식으로 시스템 확장이 가능
iii) 확장하기가 쉽고 데이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는 데 유리
단점
i) 데이터의 완전성이 덜 보장된다.
ii) 트랜잭션이 안 되거나 되더라도 비교적 불안정
참고 사항 : https://www.oracle.com/kr/database/what-is-a-relational-database/
참고 서적 : [깔끔한 파이썬 탄탄한 백엔드], 송은우
*관계형 데이터 베이스와 비관계형 데이터 베이스의 장단점을 i)를 제외한 내용은 아직 충분히 경험한 바가 없어 참고 서적을 통해 이해를 바탕으로 작성하였습니다.
다음은 정규화와 트랜잭션에 대해 공부할 예정입니다.