RDBMS
https://db-engines.com/en/ranking
DB-Engines Ranking
Popularity ranking of database management systems.
db-engines.com
DBMS 전체 순위 중 1~4등 까지가 RDBMS 인 것을 볼 수 있다.
RDBMS란?
Relational DataBase Management System
관계형 데이터베이스 관리 시스템의 약자.
DBMS 의 종류 중 하나이다.
RDBMS는 '관계형 데이터베이스 관리 시스템', 데이터를 테이블로 정리해서 관리하는 시스템이다.
주로 SQL을 사용하여 관리하는데, SQL은 데이터베이스의 데이터를 저장하고 조작하고 검색하는 표준 언어다.
데이터를 정리하는 테이블은 정보가 담기는 행과 열로 이루어진 구조로 되어있고, 체계적으로 정리되게 되어있다.
이 데이터의 구조는 스키마 라는 것을 통해 관리 되는데,
데이터베이스의 구조를 정의한 설계도 같은 역할을 하며 데이터 간의 관계를 규정한다.
RDBMS 는 SQL을 사용하여 데이터를 관리하는 시스템의 한 종류이지만
NoSQL 데이터 베이스 시스템에서도 SQL이라는 프로그래밍 언어를 사용할 수있다.
그러나 주로 사용하는 것은 RDBMS 라는 것이다.
트랜잭션이란 여러개의 작업을 하나로 묶은 실행 유닛이다.
데이터베이스 트랜잭션은 ACID라는 특성을 가진다.
Atomicity (원자성)
데이터의 업데이트가 일어났지만, 언제 업데이트를 했는지 모르거나
날짜가 누락되는 데이터의 “오염” 을 막아주는 것이다
1번과 2번의 작업이 서로 연결이 되어있는 하나의 단위라면
둘 다 성공을 하는 것이 아니면, 모든 작업이 실패하게 만들어서
기존의 데이터를 보호하는 것이다 → rollback
Consistency (일관성)
제약과 규칙이 있다면 항상 그 것이 유지되어야 한다는 것이다.
모든 고객에게 이름이 있어야 한다. 라는 규칙이 있다면
이름 없는 고객을 추가하는 쿼리나 기존 고객의 이름을 삭제하는 쿼리가 발생할 수 없다.
Isolation (격리성, 고립성)
동시에 작업이 이루어져도, 각각 격리되어져 있어 연속으로 실행된 것과 동일한 결과를 나타는 것인데
이것은 각 작업이 다른 작업과 정확히 격리 되어져 결과가 나와야 하는 것이다.
계좌에 5천원이 있는 상태에서 3천원을 A,B 계좌에 동시에 송금하는 경우 계좌가 마이너스가 되는 것이 아니라 둘 중 첫째 작업을 수행하고 둘째작업에 문제가 발생할 수 있게 처리하는 것이다.
Durability (지속성)
작업의 결과는 영구적으로 기록되어야 하는 것이다.
로그가 남아 시스템에 오류가 발생하더라도, 완료된 작업은 손실되지 않고 그 상태가 유지된다.
계좌 이체가 완료된 후 시스템에 오류가 발생해도 이체 내역은 데이터베이스에 남아 있어야 하며,
오류가 발생하기 전까지의 모든 이체는 유효하다.
NoSQL
NoSQL이 무엇의 약자인지 엇갈리는 의견이 많다고 하지만
거의 다수를 차지하는 것은 "Not Only SQL" 라고 보는 것이다.
기존 RDBMS가 갖는 특성만이 아니라 다른 부분들도 지원한다는 것으로 해석할 수 있다.
NoSQL은 전통적인 관계형 데이터베이스의 한계를 해결하기 위해 나오게 되었는데
대규모의 비규격화 데이터를 처리하기 위해 Key-Value 저장방식으로 키라는 식별자와 벨류라는 데이터 값의 한 쌍으로 구성 된 것으로 저장하는데, 이를 활용하여 복잡한 쿼리나 조인 없이 빠른 데이터 접근을 가능하게 하는 방식을 가지고 있다.
이 시스템은 관계형 데이터베이스의 데이터 처리 완결성 원칙에 엄격하게 얽매이지 않고 확장성과 가용성과 높은 성능을 가지게 되어 대규모 데이터 처리에 효과적이다.
키-벨류 저장 방식은 데이터를 '키'라는 식별자와 '벨류'라는 데이터 값으로 구성된 쌍으로 저장한다. 키는 고유하며, 데이터를 찾거나 접근할 때 사용된다. 벨류는 키에 연결된 실제 데이터로, 문자열, 숫자, 리스트 등 다양한 형태가 될 수 있다. 이 구조는 단순 검색에 최적화되어 있으며, 복잡한 쿼리나 조인 없이 빠른 데이터 접근을 가능하게 한다. 키를 알고 있다면 해당 벨류는 바로 검색되므로, 대규모 데이터 처리에 효과적이다.
프로젝트 기획.
계속해서
어떻게 값을 받아올지...
어떤 포인트로 기획을 만들어 낼 지 고민했고
enum으로 몇가지 정보만 취합하기로 했다.
키, 체형, MBTI, 나이는 필수로 하고
상대방이 원하는 2가지 정도만 공개되어진 후
대화를 통해 만남이 이뤄지는 블라인드 미팅 프로그램이다.
아직은 고민중에 있지만,
일단은 아래 처럼
비매너 유저에 대한 제재를 생각하며
시나리오를 작성하고 있다.
🚨Report
유저들의 안전하고 신뢰있는 미팅을 위하여서
메시지 자체를 우클릭 해서 신고할 수 있도록.
report_count, report_point 를 통해서
죄의 경중 까지도 파악할 수 있게 기획 중 입니다.
Report *후속 패널티
- 메시지 자체를 우클릭하여 신고합니다. (메시지는 기록에 남습니다.)
- 메시지를 입력한 유저의 id를 파악합니다.
- 유저의 report count가 증가하고, 동시에 enum 값으로 받아온 죄의 경중을 토대로 report point 도 증가합니다.
- count / point = 값 의 크기를 일정 카운팅 갯수에 맞춰 제재가 있게 됩니다.
- 계산 된 값이 기준 치를 초과하면 강력한 제재를 받습니다.
Report *현장 조치
- 해당하는 유저 우클릭 하여 채팅 금지 신청 등을 합니다.
- 해당 유저가 현장에서 공개적으로 투표가 진행됩니다.
- 과반수 이상이 동의하면 관리자 권한으로 강제퇴장, 채팅금지처리 됩니다.
본인인증을 확실하게 하기 때문에 패널티를 받은 유저의 활동이 줄어들 수 밖에 없고
메시지 자체를 저장하여 패널티를 부과하고 있어서 요청 시 이의 신청도 가능하다.
아직 부족한 부분들이 많지만
뭔가 부랴부랴 과제를 해치울 때와는 좀 다르게
진지하게 고민을 해보면서 뭔가 열심히 하게 되어서
기분도 좋다....
내일 오전에는 ERD를 꼭 마무리 하고 Socket.IO 를 공부를 할 계획이다.