안녕하세요! 오늘은 들어는 봤지만 이해하기 힘들었던 데이터베이스 관련 용어들과 친해지는
시간입니다. 복잡한 개념인 만큼 이해를 돕기 위해 어려운 용어나 세부적인 내용은 생략했으니
참고하시기 바랍니다.
목차
- 데이터베이스(Database, DB)
- 데이터베이스 관리 시스템(DBMS)
- 관계형 데이터베이스 관리 시스템(RDBMS)
- SQL(Structured Query Language)
- ORM(Object Relational Mapping)
데이터베이스(Database, DB)
컴퓨터 시스템에 전자적으로 저장되는 구조화된 정보 혹은 데이터의 조직화된 모음
쉽게 말해, ‘데이터들의 집합’이라고 생각하시면 됩니다.
데이터베이스 관리 시스템(DBMS)
데이터베이스는 ‘데이터들의 집합’이라고 말씀드렸습니다. 이러한 데이터베이스에 쉽게 접근하고 관리하기 위해 만들어진 소프트웨어가 DBMS입니다.
문서 작업을 편하게 하기 위해 워드(Word)나 엑셀(Excel) 같은 소프트웨어를 사용하는 것과 같은 맥락입니다.
DBMS에는 여러 종류가 있습니다. 계층형(Hierarchical), 망형(Network), 관계형(Relational) 등 많은 DBMS가 있지만 가장 많이 쓰이는 관계형 데이터베이스 관리 시스템(RDBMS)에 대해 알아보겠습니다.
관계형 데이터베이스 관리 시스템(RDBMS)
RDBMS는 이름 그대로 관계형 데이터베이스를 관리하는 시스템입니다.
관계형 데이터베이스의 가장 큰 특징은 2차원의 테이블(Table)이라는 최소 단위로 구성되며,
테이블 간에 Foreign Key를 이용해 JOIN이 가능하다는 점입니다.
테이블은 하나 이상의 열(Column)과 행(Row)으로 이루어져 있고, 열(Column) = 속성(Attribute)에 따라 데이터가 분류됩니다.
기본키(Primary Key)를 이용해 각각의 행(Row)을 유일하게 식별할 수 있습니다.
또한 외래 키(Foreign Key)를 이용해 다른 테이블에 접근할 수 있습니다.
사진만으로는 이해가 힘들기 때문에 테이블과 테이블을 연결하는 JOIN에 관한 자세한 내용은 MySQL 연습문제 포스팅 링크를 참고해주세요.
[SQL] 프로그래머스 코딩테스트 MySQL 연습문제 (2) NULL처리, INNER JOIN과 LEFT JOIN, LIKE 연산자, REGEXP
- Primary Key와 Foreign Key 비교
Primary Key | Foreign Key |
특정 Cloumn내에 데이터가 유일하도록 보장해준다. | 두 테이블 사이에 데이터를 연결해준다. |
관계형 데이터베이스 테이블 내에 기록을 유일하게 식별한다. | 다른 테이블의 Primary Key를 참조 할 수 있다. |
테이블 내에 하나의 Primary Key만 허락된다. | 테이블 내에 한개 이상의 Foreign Key가 허락된다. |
Null 값이 허락되지 않는다. | Null 값이 허락된다. |
상위 테이블에서 해당 값을 삭제 할 수 없다. | 상위 테이블에서 해당 값을 삭제 할 수 있다. |
- STUDENTS 테이블
NUMBER (Primary Key) | NAME | ID | CLASS_ID (Foreign Key) |
1 | David | Stone | 1-1 |
2 | John | Water | 1-2 |
3 | Lexy | Tree | 1-3 |
- CLASS 테이블
CLASS_ID (Primary Key) | TEACHER | FLOOR |
1-1 | Kate | 3 |
1-2 | Taylor | 3 |
1-3 | Jane | 5 |
STUDENT 테이블의 CLASS_ID라는 Foreign Key를 통해 CLASS 테이블과 연결할 수 있습니다.
SQL(Structured Query Language)
여기서 Query란 데이터베이스에게 “특정 데이터를 보여줘!”라고 사용자가 요청하는 것을 말합니다. 쉽게 말해 SQL은 데이터베이스와 소통하기 위해 특별히 만들어진 언어입니다. 지금까지 설명했던 DBMS에서 사용하는 언어가 바로 이 SQL입니다.
- STUDENTS 테이블
ID (Primary Key) | NAME | AGE | |
1 | Brown | brown2@gmail.com | 36 |
2 | Kate | kate3@naver.com | 21 |
3 | Lexy | lexy5@naver.com | 27 |
4 | John | john1@gmail.com | 15 |
5 | Lynn | Lynn4@naver.com | 18 |
STUDENTS 테이블에서 23살보다 많은 학생의 이메일만 가져오고 싶다면 이와 같은 SQL 명령어로 가져올 수 있습니다.
SELECT EMAIL
FROM STUDENTS
WHERE AGE > 23;
ID가 2인 학생을 지우고 싶다면 이와 같은 SQL 명령어로 삭제할 수 있습니다.
DELETE FROM STUDENTS
WHERE ID = 2;
SQL은 프로그래밍 언어가 아니라 쿼리용 언어이고 영어단어 그대로의 의미와 유사하기 때문에 이해하기 쉽습니다. 하지만 적지 않은 개발자들이 SQL을 사용하지 않고 있는데 왜 그런 걸까요? 바로 ORM이라는 편리한 도구가 존재하기 때문입니다.
ORM(Object Relational Mapping)
ORM이란 우리가 만든 모델 클래스(객체)와 DB에 생성된 테이블을 자동으로 연관 지어 주는 도구입니다.
예를 들어, Django ORM의 경우 DB를 직접 조작할 필요 없이 모델 클래스의 Python 문법을 통해서 DB를 조작할 수 있습니다. 따로 SQL 구문을 공부하지 않고 Python 문법만으로 DB를 관리할 수 있기 때문에 많은 개발자들이 ORM을 선호합니다.
저 또한 Django ORM을 사용하고 있는데요. 다음 명령어를 통해 Post 모델의 객체를 모두 조회해보았습니다.
# board.views.py
print(Post.objects.all())
제가 제목을 Return 하도록 Post 모델을 설계했기 때문에 QuerySet에 게시글의 제목들이 출력되는 것을 볼 수 있습니다. 그 외에 객체를 생성, 수정, 삭제도 가능합니다.
이처럼 ORM은 SQL 구문을 직접 작성하지 않아도 되기 때문에 개발 시간은 단축되지만 프로젝트가 무거워질 경우에는 속도 저하라는 치명적인 단점이 존재합니다. 결국 상황에 따라 적절히 섞어서 사용해야 하기 때문에 우리는 ORM과 SQL 모두 알고 있어야 합니다.
오늘은 데이터베이스 관련 용어들에 대해 알아보았습니다. 다음 포스팅에서는 프로그래머스 MySQL 코딩 테스트 문제를 통해 직접 SQL 구문을 사용해보는 시간을 가져보겠습니다.
긴 글 읽어주셔서 감사합니다.
Reference