개발자들의 용어 정리 21 [SQL, NoSQL]
SQL
기본적으로 Server는 DBMS에 연결된 프로그램으로부터 각종 요청을 받는다.
이 요청 받은 데이터를 처리해야 하기 때문에 그 요청에 포함할 수 있는 텍스트를 사용해야 한다.
이 말이 무슨 말인고 하면
RDB 자체에는 텍스트로 작성된 명령어를 데이터를 처리하기 위한 SQL(구조화 질의 언어, Structured Query Language)을 제공한다 볼 수 있다.
SELECT Name, Birthday FROM Students WHERE Sex = '남';
ㄴ 학생(Students) 테이블에서 남학생들의 생일을 조회한다면 SQL로 이런 식으로 DBMS에 명령을 내리면 된다.
ㄴ Students 테이블(테이블, 일종의 저장소를 총칭한다.)에 'TABLE 영역'
성별이 '남'인 행들의 '행 영역'
'Name'과 'Birthday' 열(테이블의 속성 row data)을 선택해서 조회하라는 의미로 실행하면 다음과 같은 결과가 나온다.
'열 영역'
ㄴ 테이블은 RDB에서 데이터를 저장하기 위한 저장소란 의미다.
ㄴ 행은 가로줄(구분)을 의미하며 열은 세로줄(데이터)을 의미한다.
ㄴ SQL 엔 Primary key라는 고유의 번호를 설계하게끔 되어 있다.
Primary key는 아래 표엔 나와있지 않지만 예를 들어 1번, 2번, 3번 이런 식으로 학생 고유의 번호를 부여하여
테이블 설계 원칙 중 반드시 해야하는 기본 키 설정을 해줘야 한다.(기본 키 설정 = 데이터의 중복 방지, 유일성 획득)
Name | Birthday |
박준 | 4/25 |
강산에 | 5/22 |
ㄴ 요청에 의해 불러와진 정보
학생번호(Primary key) | Sex(Column) | Name(Column) | Birthday(Column) |
1번 | 남(row) | 박준(row) | 4/25(row) |
2번 | 남(row) | 강산에(row) | 5/22(row) |
ㄴ 위 표를 토대로 작성한 Student table 의 예
ㄴ row는 열로 Row data를 의미한다.
ㄴ Primary key는 구분을 위한 기본 키 설정이다.
ㄴ 'Sex', 'Name', 'Birthday'는 각각 Column인 행의 영역이다.('학생번호' 역시 Column에 해당하며 Primary key로서 역할을 할 뿐이다.)
INSERT INTO Teacher (Name, Class) VALUES('조짜장', 1);
ㄴ Teacher 테이블에 1반 담임 '조짜장'을 추가한다.
UPDATE Students SET Class = 1 WHERE Name = '김폭';
ㄴ Students 테이블에 이름이 '김폭'인 학생을 이동한다.
DELETE FROM Students WHERE Name = '잉위';
ㄴ Students 테이블에 이름이 '잉위'인 학생을 삭제한다.
위의 예시처럼 SQL 구문으로 필요한 모든 데이터를 RDBMS에 요청할 수 있다.
RDB 별 세부 문법과 기능은 다르지만 거의 유사한 형태를 가지고 있다.
공통 구문을 가지고 있는 것이 많기 때문에 공부시 1개만 잡고 해도 효과가 있다고 볼 수 있다.
NoSQL
관계형이 아닌 DB는 SQL을 사용하지 않는다는 의미로 NoSQL이라고 한다.
일반적으론 RDB가 가장 효율적인 방식(강력한 기능, 엄격한 제약 => 불필요한 비용으로 작용시)이나
서비스나 프로그램에 따라서 RDB가 적합치 않은 경우가 있다. 이 때 NoSQL을 사용한다.
1. 문서 데이터베이스
ㄴ RDB 처럼 행과 열을 가진게 아니라 정말 말그대로 문서 형태로 저장한다.
ㄴ XML, JSON 비슷하게 저장.
ㄴ 일관성 있는 데이터로는 적합치 않지만 유연성을 부여할 데이터엔 괜찮은 방식이다.
Ex> MongoDB, CouchDB 등
2. 키-값 DB
키와 값의 쌍만 저장하는 DB이다.
실행속도가 빠르며 용량 부족시 다른 서버와의 분담이 좋은 수평확장성을 갖고 있다.
세션 아이디(키)와 사용자 번호(값)을 메모리에 저장하는 용도로 사용된다.
Ex> 레디스, 아마존 다이나모 DB, 맵캐시드 등
세션ID(Key) | 사용자 번호(Value) |
p2342sF2C | 48423 |
jfdjfefn2234c | 156 |
이런 식이다.
3. 그래프 DB
가족 관계도 처럼 여러 노드(node)와 그들 간의 관계를 뜻하는 엣지(edge)로 구성된 자료구조를 말함.
Data에 각 노드의 정보인 프로퍼티(Property)(ex> is Friend of, Likes, Serves etc)를 더해 저장한다.
페북 친추 같은 관계를 구현하는 용도로 사용된다.
Ex> Neo4j, janusGraph 등
출처1 : https://www.bmc.com/blogs/neo4j-graph-database/