안녕하세요.
Hynn 입니다.
동료들과 소규모프로젝트를 진행한다고 업데이트가 늦었습니다.
이번 포스팅에서는 2개의 포스팅에 걸쳐서, DataBase 에 대해서 기초적인 학습이후, 이번에 진행한 소규모프로젝트인 Mini Web-Site (회원제 게시판) 형태에 대해서 리뷰도 같이 진행하고자 합니다.
먼저 이를 위해서는 DB에 대한 이해가 필요하여, 이 내용에 대해서 먼저 학습 후 Preview 를 같이 진행할 예정입니다.
==========
1. DBMS는 무엇인가요?
2. DBMS의 종류
3. RDBMS (SQL)
4. DBMS (NoSQL)
==========
1. DBMS는 무엇인가요?
DBMS 란 DataBase Management System 의 약자입니다.
하지만 일반적으로는 "DB" 라는 이름의 약어를 많이 접하셨을 것이라고 생각합니다.
이는 좁은개념에서는, 말 그대로 "데이터"를 담고있는 Directory, 즉, Data가 담겨있는 폴더라면 그 자체가 DB라고 이해할 수 있으리 만큼, 잘 알고 계시는 개념일 것이라고 생각됩니다.
여기서 "MS" , 즉 "Management System" 기능이 구현된 것을 DBMS 라고 부르며, 이는 여러가지 종류가 존재합니다.
쉬운 예로, 개인용 PC에서 사용하기도 하고, 컴퓨터활용능력 1급 시험을 준비하신 분들에게는 한 번쯤 들어보셨을 Microsoft 의 "Access" 역시 개인용 DBMS 라고 불리울 만큼, 많은 종류의 DBMS가 존재합니다.
2. DBMS의 종류
DBMS 는 크게 RDBMS, DBMS 두가지의 종류로 구분이 가능합니다.
여기서의 차이는 "R", 즉 "Relational" 의 의미가 포함되어있는지, 포함되지 않았는지에 따라 나뉘어 지는 영역입니다.
대표적인 프로그램 종류는 아래와 같이 나뉘어 있습니다.
대표적인 예시로 몇가지만을 기재했지만, RDBMS 가 일반적인 DBMS 에 비해 보다 효율적인 사용이 가능한데요.
대표적으로 데이터 구성, 저장, 관리가 가능한 이점이 존재합니다. 하지만 그렇다고 하여 RDBMS 가 DBMS 에 비해서 장점만 존재한다면, RDBMS가 아닌, 일반 DBMS 는 시장에서 사장되었을 것입니다.
반대로 RDBMS 가 갖지 못하는 장점을 No SQL 이라고도 불리우는 DBMS 에도 장점이 존재합니다.
보통 RDBMS, DBMS 를 부르는 단어를, SQL, NOSQL 이라고도 많이들 부릅니다.
이 SQL 은 "프로그램"을 지칭하는 것이 아니라, "프로그래밍 언어" 를 뜻합니다.
즉, SQL ( Structured Query Language) 라고 불리우는 이 언어는, 관계형 데이터베이스에 저장된 데이터를 관리,조작하는 프로그래밍 언어입니다. SQL 이라고 불리우는 RDBMS 는 일반적으로 구조화된 접근 방식에 기반합니다.
즉, 데이터는 항상 행과 열의 방식으로 저장되기 때문에, SQL 기반의 데이터베이스는 항상 데이터베이스의 구조를 "정의" 해야합니다. 이것을 고정 스키마를 사용한다고도 합니다.
이는 일반적으로 구조화된 데이터를 처리할때 장점을 가지고 있습니다.
반면에 NoSQL 이라고 부르는 데이터베이스는 구조화되지 않은 데이터를 처리하거나, 반 구조화된 데이터를 처리하도록 설계되었는데, 이는 SQL에 비해 비교적 유연할 뿐 아니라, 높은 읽기/쓰기 작업을 처리할 수 있습니다.
즉, 이 두가지의 사용 중 무엇이 더 "적합"한지에 대해서는 사용자가 필요한 데이터베이스의 "구조화" 여부에 따라 갈리므로, 두가지 모두 기본적인 지식은 가지고 있어야 합니다.
3. RDBMS (SQL)
RDBMS 는 "Relational DataBase Managment System" 의 약자입니다.
이는 관계형 모델을 기반으로 하는 데이터베이스 시스템입니다. 즉, 하나의 데이터 베이스안에는 여러개의 "테이블" 이라고 불리우는 데이터베이스가 존재하며, 이 각각의 데이터베이스는 관계셩을 가지고 있기도 합니다.
가령 예를 들면, 아래의 그림과 같이 표현할 수 있습니다.
위의 그림과 같은 RDBMS 와 같은 구조화 된 데이터가 있다고 가정해본다면 아래와 같이 데이터의 구조화가 결정될 것입니다.
먼저 User Table, 즉 회원리스트에는 아래의 구조화 된 행이 가장 상단에 위치해야 합니다.
- ID
- Password
- 이름
- 이메일
위의 정보는 대표적으로 "회원가입" 시에, 요구하는 정보들입니다. 물론 생년월일이나, 성별등의 추가적인 정보를 요구할 수 있게 됩니다.
이를 통해 아래의 두가지 작업을 필요로 합니다.
- 회원가입
- 로그인
회원가입을 함으로서, 가입한 정보를 User Table 에 구조화된 양식으로 데이터가 추가가 되고, "로그인" 시에는 구조화된 User Table 과 데이터를 비교하여, 일치여부를 확인할 수 있습니다. 이렇게 로그인이 되면, 1차적으로 DB와 웹 사이트가 연동된 것입니다.
하지만 게시판의 DB는 관계형에 보다 알맞는 예시가 될 수 있습니다.
먼저 Main 이라고 가정을 두고, "Board Table" 에는 아래의 구조화된 행이 존재할 것입니다.
- 게시물 번호
- 작성자
- 게시물 제목
- 게시물 내용
- 조회수
여기에서, 댓글이나 좋아요 기능이 최근에는 게시물에 많이들 구현되 있기 때문에, 그를 데이터베이스 구조에 반영한다면 2가지를 사전에 추가해야 합니다.
그렇게 되면, 이제 댓글과, 좋아요 데이터베이스는 위의 2개의 데이터베이스와 관계형이 되어야 올바른 데이터를 가질 수 있습니다.
먼저 댓글을 예시로 들어보도록 하겠습니다.
- 작성자 ID or Name ( User Table)
- 게시물 번호 (Board Table)
- 댓글 내용
위의 정보를 본다면, 이미 2개의 데이터베이스와 관계를 가지고 데이터를 사용하는 중입니다. 이것이 관계형 데이터베이스의 간단한 예시가 될 수 있습니다.
바로 관계형 데이터베이스의 핵심은 ACID 라고 불리우는 이러한 특성을 가지게 됩니다.
- A: Atomicity - 트랜잭션은 완전히 실행되거나, 완전히 실행되지 않습니다.
- C : Consistency - 트랜잭션은 시스템의 상태를 유효한 상태로 유지합니다.
- I : Isolation - 트랜잭션이 실행중일 때, 다른 트랜잭션 작업은 그 트랜잭션의 영향을 받지 않습니다.
- D : Durability - 트랜잭션이 성공적으로 완료되면, 결과는 영구적으로 저장됩니다.
즉 이 ACID는 데이터베이스의 정확성, 안정성을 보장하기 위해 사용되는 개념입니다.
이것이 RDBMS 의 가장 기초적인 구조라고 생각하시면 좋을 것입니다.
4. DBMS (NoSQL)
반면에 NoSQL 이라고 하는 DataBase 의 경우, 이런 구조화된 데이터가 아닌 경우에 장점을 가지고 있습니다.
아마도 이 글을 읽는 모든 사용자들이 한번쯤은 이 NoSQL 이라는 데이터베이스를 사용해본 경험이 있을 것입니다.
대표적으로 Apple 의 iCloud, Google Cloud 과 같은 서비스일 것입니다. 이 서비스에서 여러분들은 단순히 데이터를 백업하고자, 사진이나 문서, 파일들을 데이터베이스에 "백업"하는 용도로 사용을 했을 것입니다.
바로 여기서 NoSQL 데이터베이스의 장점이 표현됩니다.
이 NoSQL 데이터베이스는, ACID 를 제공하지는 않지만, 확장성, 성능을 중시하는, 비관계형,분산 데이터베이스들이 이에 해당합니다.
이 데이터베이스들은 아래의 특징을 가집니다.
- 테이블간의 "Join" 기능이 존재하지 않습니다.
- 직접 프로그래밍을 사용하며, 비 SQL 인터페이스를 사용한 데이터 액세스합니다.
- 여러대의 데이터베이스 서버를 묶어서 하나의 데이터베이스를 구성합니다. (Clustring)
- 데이터의 중단 없는 서비스와 자동 복구 기능 지원
- 확장성, 높은 성능
물론, SQL 처럼 ACID 를 지원하지 않는다고 하여, 정확도나 안정성이 떨어지는 것은 아닙니다.
하지만 단순히 포털 웹 사이트에서 "검색"을 한다거나, 이베이나 옥션 같이 대규모 쇼핑몰에서 사용자가 "상품"을 검색하거나, Google 이나 Apple 의 Cloud 에 나의 데이터를 업로드 혹은 다운로드 한다고 했을 때, 이러한 NoSQL 방식의 DBMS 가 갖는 장점 역시 존재합니다.
================================
가장 간단한 예시를 들어, DBMS 의 대한 개념을 정리해보았습니다.
다음 포스팅과, 실제 구현에 사용될 예정인 SQL 에 대해서 다음 포스팅에서 기초적인 사항을 다룰 예정입니다.
다음 포스팅에서 뵙겠습니다.
감사합니다.
'개발공부일지 > DataBase' 카테고리의 다른 글
ORM - DBDiagram 작성해보기 (1) | 2023.01.16 |
---|---|
ORM - Sequelize 기본 사용하기 (0) | 2023.01.12 |
ORM - ORM 기본 이해하기 (0) | 2023.01.10 |
DataBase - MVC Patten 이해하기 (0) | 2023.01.04 |
DataBase - MySQL 기본 사용 및 용어 정의 (0) | 2023.01.04 |
댓글