개발자와 커뮤니케이션

개발자들의 용어 정리 21 [SQL, NoSQL]

프로테크 2022. 12. 30. 14:43

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 neo4j

출처1 : https://www.bmc.com/blogs/neo4j-graph-database/