일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 웹개발
- 코로나19
- 대나무숲
- 풀스택
- 일상
- coursera
- 학생
- 디미고입학
- 디미고
- 해킹방어과
- 웹프로그래밍과
- 인공지능
- apollo
- 디지털컨텐츠과
- 머신러닝
- 등교개학
- Flutter
- 중3
- graphql
- 우분투
- TensorFlow
- 워게임
- 딥러닝
- pwnable.kr
- 특별전형
- 시스템해킹
- 디미고특별전형
- 이비즈니스과
- 플러터
- WebHacking
- Today
- Total
꿈이 너무 많은 한 대학생의 공간
관계형 데이터베이스(RDBMS) 란? 본문
관계형 데이터베이스(Relational Database Managaement System, RDBMS)는 현재 보편화되어있는
데이터베이스 모델 중 하나입니다. 관계형 데이터베이스는 데이터를 테이블 형태로 저장하며,
행과 열, 즉 가로 세로 축과 유사하게 저장됩니다.
행(Column) 이란, 주로 필드라고 불리며 항목의 속성을 나타냅니다.
예를 들어 유저 정보를 저장할 때, ID, Username, Password, Email 등이 있겠습니다.
열(Row) 란, 주로 레코드 라고 불리며 데이터 항목을 나타냅니다.
위와 같은 데이터 예시가 있다고 가정합시다.
여기서 ID, Username, Password, Email이 무엇이 될까요? 행이 되는 것입니다.
1, 2, 3, 4번째 유저의 ID, Username, Password, Email 등을 저장하니까요.
그럼 열은 무엇일까요? 1, 2, 3, 4번째 유저들의 데이터를 가리킵니다.
1번째 유저의 열은 a1, b1, 1234, a1@gmail.com 이 되겠네요.
이런 식으로 테이블 형태로 저장, 쉽게 얘기하면 엑셀과 같은 형태로 저장한다고 생각하시면 됩니다.
여기서 궁금증, 왜 구지 관계형 데이터베이스일까? 행렬형 데이터베이스 같은 이름이 왜 아닐까?
바로 관계형 데이터베이스는 다른 행과 행이 연결될 수 있기 때문입니다.
이런 식으로 SNS 형태를 가장한 모델을 만들어보겠습니다.
한 유저는 각각 ID, Username, Password, Email, Friend 의 행을 가지고 있습니다.
여기서 추가된 내용은 위의 테이블에서 Friend 행이 추가되었습니다.
Friend 행은 각각 한 유저의 친구 데이터를 나타내며, 그 친구의 ID 값을 저장합니다.
이렇게 되면 a1의 친구를 불러오게 된다면 a2, a3의 데이터를 가져오게 하 수 있습니다.
이런 식으로 데이터를 가져올 수 있는 것이죠.
위와 같은 형식을 일 대 다(1 : N) 관계라고 부릅니다.
하나의 행이 여러 개의 다른 행, 여러 개의 같은 행의 값을 저장해 데이터를 불러올 때의 편의성을 가지는 것입니다.
그 외, 하나의 행이 다른 하나의 행과 관계되는 일 대 일(1 : 1) 관계, 다 대 다(N : N) 관계도 있습니다.
일 대 다 관계와 다 대 다 관계는 유사하지만, 약간 다릅니다.
일 대 다는 A 행이 B 행과 관계된 후, 다른 행과는 관계되지 않습니다.
즉, B 행은 A 행과만 관계되는 것이죠. B 행은 다른 행과는 관계될 수 없지만, A 행은 또 다른 행과 관계될 수 있습니다.
예를 들어, 프로그래밍 팀에 웹 팀과 앱 팀이 있습니다.
웹 팀은 여러 팀원들이 배치되어 있고, 팀원들은 한 팀에만 소속될 수 있습니다.
이런 경우는 웹 팀이 A 행, 팀원들이 B 행이 되는 것입니다. 즉, 팀원들은 다른 팀에 소속될 수 없는 것이죠.
그에 반해 다 대 다 관계는 A 행과 B 행이 관계된 후, A 행이든 B 행이든 다른 행과 관계될 수 있는 것입니다.
예를 들면, 학생 A는 학교 내의 방송부와 농구부에 지원해 부원이 되었습니다.
이때 방송부와 학생 A 사이에서 관계가 성립하고, 농구부와 학생 A 사이에서도 관계가 성립되는 것이죠.
즉, 학생 A는 방송부와 농구부 모두 관계가 성립되는 것입니다. 그리고 방송부, 농구부 또한 다른 부원들과 관계될 수
있습니다. 이와 같은 형태를 다 대 다 관계라고 합니다.
이때, 위의 엑셀 예제에서 문제점이 하나 발생합니다. 만약 ID 값을 유저가 임의로 정할 수 있고, 어쩌다 보니 ID 값이 중복되게 된다면 어떻게 될까요?
다음과 같이, a2 라는 ID를 가진 유저가 추가되었지만 Username과 Password, Email 등의 값이 모두 다릅니다.
이때, a1이나 a4의 친구를 불러올려면 누구를 불러와야 할까요?
a1, Username b1의 친구는 a2, a3 입니다. 이때 a2라는 ID 값이 중복되는 경우가 있으니, 서버 상에서는 오류가 나게 됩니다.
이를 막기 위해 각각의 열(Row) 에는 모두 고유한 값을 가지고 있습니다. 이를 키(Key) 라고 합니다.
이 키는 열마다 중복될 수 없으며, 주로 이를 통해 그 열에 접근하는 방식으로 사용됩니다.
그러므로 다른 열과 중복되어 에러를 일으키는 경우도 없는 것입니다.
마지막으로, 관계형 데이터베이스 말고도 데이터베이스 관리 시스템이 효율적으로 운영되기 위해서
ACID 트랜잭션이란 것을 가지고 있습니다. ACID 트랜잭션이란,
Atomicity(원자성) : 하나의 작업을 수행하기 위해서는 작업을 모두 정상적으로 처리하거나 모두 처리하지 않아야 됨을 뜻합니다.
회원가입의 경우, username 값과 password 값을 받아 CREATE 명령을 실행하게 됩니다.
이때 username 값만 가져오고, password 값은 가져오지 않고 CREATE 명령을 실행하게 되면 정상적으로 회원가입이 되지 않겠죠? 즉, 중간에 오류가 날 경우 명령을 모두 실행하거나(회원가입을 정상적으로 처리하거나) 명령을 모두 실행하지 않아야 합니다(회원가입에 오류가 날 시 회원가입을 거부하고 에러창을 띄움).
Consistency(일관성) : 작업이 수행된 이후에 데이터베이스의 데이터는 모두 일관되어야 합니다.
즉, 작업이 수행된 이후에 데이터베이스는 특별한 명령(DELETE 명령) 같은 사용자의 명령이 아닐 경우 모든 데이터는 서로 일관되어야 합니다.
Isolation(격리성) : 작업이 수행될 때 다른 작업이 현재 작업을 간섭하면 안됩니다.
즉, 모든 작업이 모두 격리적으로 이루어저야함을 의미합니다.
Durability(지속성) : 작업이 성공적으로 이루어진 뒤 데이터는 특정한 경우가 아니면 영구적으로 보존되어야 합니다.
유저가 직접 자신의 데이터를 삭제하려고 하지 않는 이상 영구적으로 보존하여야함을 의미합니다.
'개발만담' 카테고리의 다른 글
OpenGL 정리본 1 - 윈도우 열기 (0) | 2020.12.06 |
---|---|
하루코딩 - 코로나19 디스코드 봇 (0) | 2020.06.13 |
사회공학이란? (0) | 2020.05.11 |
GraphQL을 Apollo 와 함께 써본 후기 (2) | 2020.04.20 |