일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- nestjs typeorm
- python
- thymeleaf
- nestJS
- Spring
- 코딩테스트
- 프로그래머스
- 가상면접사례로배우는대규모시스템설계기초
- 알고리즘
- 컴포넌트스캔
- 구조체배열
- 해시
- @Component
- spring boot
- 시스템호출
- 파이썬
- 코테
- Nodejs
- TypeORM
- C언어
- 카카오 코테
- git
- nestjs auth
- 카카오
- C++
- @Autowired
- OpenCV
- 카카오 알고리즘
- 스프링
- Today
- Total
공부 기록장 💻
[Backend/Database] Database, DB Query, RDB(Relational DB)/NoSQL, ORM(Object-Relational Mapping) 본문
[Backend/Database] Database, DB Query, RDB(Relational DB)/NoSQL, ORM(Object-Relational Mapping)
dream_for 2021. 8. 4. 16:21스터디 주차 별 목표 >
스터디 주차 별 목표
1주차 : Database의 종류 및 특징 + 쿼리문 이해 ( 8 / 4 ~ 8 / 11 )
2주차 : 각 Database의 모델링 방법 및 쿼리 작성법 스터디 및 실습 ( 8 / 11 ~ 8 / 18 )
3주차 : 배포 방법 스터디 및 실습 ( 8 / 18 ~ 8 / 25 )
4주차 : Django Rest Framework 스터디 ( 8 / 25 ~ 9 / 1 )
1주차 스터디 키워드
- Database
- Database Query (select, insert, update, delete)
- NoSQL
- ORM
1주차 스터디 질문 리스트
질문1 : Database가 필요한 이유가 무엇일까요?
질문2 : RDB와 NoSQL의 개념과 특징을 설명해주세요
질문3 : 4개의 DB 쿼리문에 대해 설명해주세요 (select, insert, update, delete)
질문4 : ORM이 무엇인지 설명해주세요
1주차 목표
전체적인 데이터베이스의 개념과 쿼리 사용법을 익혀주세요
1. Database가 필요한 이유가 무엇일까요?
데이터베이스의 개념과 목적
데이터베이스(Database, DB)는 데이터를 구조화하여 저장하고,
이러한 구조화된 데이터들를 이용하기 쉽게 관리하도록 돕는 시스템이다. 한마디로, 데이터의 저장소라고도 할 수 있다.
그리고 다수의 사용자가 데이터베이스 내의 데이터를 접근할 수 있도록 하는 소프트웨어가 데이터베이스 관리 시스템(DBMS, DataBase Management System) 이다.
데이터 베이스 그리고 DBMS가 존재하기 전에는,
응용 프로그램을 이용해 데이터를 파일로써 관리하는 파일 시스템을 이용하여 데이터를 관리하였다.
쇼핑몰을 한 예로 들어보자면, 고객을 관리하는 프로그램, 상품과 주문을 관리하는 프로그램이
각각 존재하여 데이터를 파일로써 저장하여 관리해야 했던 것이다.
데이터를 파일 시스템을 통해 관리한다면, 데이터가 중복되거나 불일치 하는 경우 많은 문제가 발생한다.
(이 때, 데이터가 불일치 한다는 것은, 데이터를 파일로 저장한 후 파일을 수정하는 도중에 해당 파일을 불러오는 경우 수정 작업 중인 내용이 동기화되지 않아 데이터가 일치하지 않는 것을 의미한다. 다수의 사용자가 동시에 파일을 접근할 때의 동기화 문제도 발생한다.)
이 밖에도, SQL과 같은 쉬운 질의어가 제공되지 않으며, 보안 기능이 미흡하고, 데이터가 응용 프로그램으로부터 독립적이지 않아 유지 보수 비용이 매우 크다는 단점들이 존재한다.
이러한 파일 시스템의 단점과 복잡함을 보완하고 극복하기 위해 데이터베이스의 개념이 탄생했고,
이러한 데이터베이스를 관리하고 사용하게 하는 것이 데이터베이스 관리 시스템(DBMS)이라고 할 수 있다.
DBMS의 특징
DBMS의 특징과 장점은 곧 위에서 언급된 파일 시스템의 단점을 보완한 것이라고도 할 수 있다.
1. 데이터의 독립성 : 데이터와 응용 프로그램(OS)이 상호 의존적인 파일 시스템과 다르게 독립적이다.
- 물리적 독립성: 데이베이스의 크기가 변동되거나, 성능 향상을 위해 데이터 파일의 크기가 바뀌어도 관련된 응용 프로그램을 수정할 필요가 없다.
- 논리적 독립성: 다양한 응용 프로그램의 논리적 요구를 만족시켜줄 수 있다.
2. 데이터의 무결성
- 여러 경로를 통해 잘못된 데이터가 생기는 경우의 수를 방지하는 기능으로, 데이터의 유효성 검사를 한다. 예를 들어, 입력 조건에 맞지 않는 값은 저장할 수 없도록 한다.
3. 데이터의 보안성
- 허가된 사용자들만 DB 자원내에 접근할 수 있도록 계정 관리, 접근 권한 설정의 기능이 있다.
4. 데이터의 일관성
- 연관된 정보들을 논리적인 구조로 관리함으로써, 데이터의 불일치성을 배제할 수 있다.
5. 데이터의 중복 최소화
- DB는 데이터를 통합하여 관리하므로, 데이터의 중복 문제를 해결 할 수 있다.
DBMS 종류
시간이 지남에 따라 계속해서 새로운 데이터베이스 관리 시스템의 모델들이 제시되어 왔다.
간단하게 종류들을 살펴보면 다음과 같다.
- 계층형 (HDB, Hierarchial Database) - 부모-자식 간의 관계로 표현되는 트리 형태(1:N구성)의 구조인 데이터 간의 관계
- 네트워크형 (NDB, Network Database) - 데이터 간 N:N (다 대 다) 구성 가능
- 관계형 (RDB, Relatational Database) - 행과 열로 구성된 테이블에 키(key)와 값(value) 로 이루어진 데이터가 존재. SQL을 사용하여 데이터를 처리
- 객체 지향형 (OODB, Object-Oriented Database) - OOP에 기반하여 만든 DB 모델로, 데이터를 객체의 형태로 표현. 클래스와 상속의 개념이 포함되어 있으며, 비정형 데이터들을 DB화 할 수 있도록 만들어진 모델이다.
- 객체 관계형 (ORDB, Object-Relational Databse) - 관계형 DB에 객체 지향 개념을 도입
- NoSQL (Not only SQL) - SQL 뿐 아니라 다양한 특성을 지원한다는 의미로, 데이터 간에 관계를 정의하지 않으며 RDBMS의 복잡도와 용량의 한계를 극복하기 위한 목적으로 만들어졌다. 비정형 데이터 처리에 유리하다.
- NewSQL - RDBMS와 NoSQL의 장점을 결합
2. RDB와 NoSQL의 개념과 특징을 설명해주세요
DBMS 종류 중, RDB와 NoSQL 에 대해서 자세히 살펴보자!
먼저, 스키마(schema) 의 개념이란,
데이터베이스를 구성하는 데이터 개체(entity), 속성(attribute), 관계(relationship),
또는 데이터 조작 시 데이터 값들이 갖는 제약 조건 이라고 할 수 있다.
RDB (Relational DataBase - 관계형 데이터베이스)
관계형 데이터베이스는 열과 행이 있는 2차원의 테이블 형태의 집합으로 데이터를 표현한다.
정형화된 정보를 저장하는데 가장 효율적이고 유연한 데이터베이스 모델이라 할 수 있다.
정해진 스키마에 따라 데이터를 저장해야 하므로, 명확한 데이터 구조가 보장되지만,
이로 인해 데이터가 유연하지 못하며 나중에 스키마가 변경되는 경우 데이터 구조의 변경이 번거롭고 어렵다는 단점이 존재한다.
RDMBS는 하나의 테이블이 다른 테이블들과의 관계를 나타내기 위해 외래 키(foreign key)를 사용한다.
테이블 간의 관계가 복잡하며 시스템이 크게 확장되는 경우, 복잡한 쿼리가 만들어질 수도 있다.
NoSQL (비관계형 데이터베이스)
관계형 데이터 모델을 지양 하는 DB이다. (데이터 간의 관계를 정의하지 않는다.)
대량의 분산된 비관계형(비정형, 반정형) 데이터를 저장하고 조작하는데 특화된 데이터베이스 모델이다.
최근 빅데이터 분야가 부상하며 부각되고 있는 데이터베이스 모델이라고 한다.
관계형 DB와 다르게, 스키마 없이 또는 느슨한 스키마를 바탕으로 데이터를 저장하기 때문에
자유로운 데이터 구조를 가질 수 있다.
언제든 저장된 데이터를 조작하고, 새로운 필드를 추가할 수 있다.
하지만 명확한 데이터 구조를 보장하지 않기 때문에, 데이터 구조 결정이 어렵다는 단점이 있다.
결론적으로,
1. RDMBS는 데이터 구조가 분명하고, 명확한 스키마가 사용되며, 데이터 간의 관계를 정의하는 경우,
2. NoSQL은 정확한 데이터 구조를 알 수 없거나, 유연한 스키마 구조를 취하여 다양한 형태의 데이터를 저장하며 변경/확장이 될 수 있는 경우,
사용하는 것이 적합하다.
3. 4개의 DB 쿼리문에 대해 설명해주세요 (select, insert, update, delete)
Query문에 대해 설명하기 전에, Query와 SQL에 대해 간단히 짚어보자.
Query란 무엇인가?
쿼리는 데이터베이스로부터 데이터를 요청하는 방법을 의미한다.
DB Query 는 select query 또는 action query 로 나뉘는데,
select query는 데이터를 되찾는 쿼리이고
action query는 삭제(deletion), 추가(insertion), 수정(updating) 의 기능을 수행한다.
DB Query의 장점은?
쿼리를 통해 수많은 방대한 양의 데이터를 저장하고 있는 데이터베이스의 복잡한 작동/실행을 가능하게 한다.
또한 쿼리는 데이터에 대한 계산이나 복잡한 작업들을 자동화를 가능하게 할 수 있다.
쿼리를 통해 구체적인 기준을 바탕으로 데이터(필터링 검색)를 탐색 또는 요약할 수도 있다.
예를 들어, 행과 열로 이루어진 테이블 형태의 데이터를 관리하는 관계형 데이터베이스에서는,
SQL (Structured Query Language) 쿼리문의 SELECT문을 통해 데이터를 그룹핑 하거나 모을 수 있다. (데이터를 분석하거나 요약하는데 있어서 매우 유용하다.
SQL이란 무엇일까?
DBMS의 기능들을 다루기 위해서는 데이터베이스 언어를 사용해야 하는데,
그 중 하나가 SQL(Structured Query Language)이다.
SQL은 DB를 다루며 접근하기 위한 표준 데이터베이스 언어라고 할 수 있다.
SQL문 또는 SQL 쿼리문을 통해 DB에 대한 쿼리를 실행하여 DB의 데이터를 조회하고,
DB에 데이터를 삽입, 갱신, 삭제할 수 있으며, 새로운 DB 테이블을 생성하는 등 다양한 기능을 가능하게 한다.
SQL문의 종류
SQL 쿼리문에는 크게 3가지의 종류가 있다.
1. DDL (Data Definition Language) : 데이터를 정의하는 명령어
- 데이터베이스의 구조를 정의
- 쌍, 속성, 관계 인덱스 파일 위치 등 데이터베이스 고유의 특성을 포함
ex) CREATE, TRUNCATE
2. DML (Data Manipulation Language) : 데이터를 조작하는 명령어
- 데이터베이스 검색, 등록, 삭제, 갱신
ex) INSERT, DELETE, UPDATE
3. DCL (Data Control Language) : 데이터에 대한 권한 또는 시스템에 관한 명령어
- DB에 데이터에 대한 액세스를 제어
- 박탈, 연결, 권한 부여, 질의, 자료 삽입/갱신/삭제
ex) QRANNT, COMMIT
쿼리문 간단히 실습!
SELECT, INSERT, UPDATE, DELETE
우선적으로, 데이터베이스를 생성해야 한다.
create문을 이용하여 데이터베이스 테이블을 생성하고, 이를 사용하기 위한 명령어를 다음과 같이 작성한다.
create database mytable; // 데이터베이스 테이블명 'mytable'
use mytable;
1. SELECT : 테이블에 있는 데이터를 조회하는 명령어
-- mytable 로부터 모든 칼럼 조회
SELECT * FROM mytable
-- mytable의 Name, Age 칼럼 조회
SELECT Name, Age FROM mytable
2. INSERT : 테이블에 데이터를 삽입하는 명령어
--mytable에 Name, Age칼럼의 값들 삽입
INSERT INTO table(Name, Age) values ('Yebin', 21)
Update, Delete 문은 조심스럽게 다루어야 하므로, '트랜잭션' 안에서만 사용해야 한다.
'트랜잭션' 이란 하나의 처리를 여러 단계로 다루는 기능이다.
먼저, Select 문으로 데이터를 조회한 후에 트랜잭션 안에서 Update, Delete문을 실행해야 한다.
Commit 이라는 명령어를 수행하여 트랜잭션의 실행결과를 DB에 반영할 수 있으며,
반영하기 전으로 되돌리는 작업은 롤백(RollBack) 이다.
이러한 트랜잭션 작업을 통해, 마지막으로 한번 더 확인하여 안정적으로 데이터를 수정/삭제하도록 한다.
BEGIN TRAN --트랜잭션 시작
ROLLBACK TRAN --트랜잭션 이전 상태로 복귀
COMMIT TRAN --트랜잭션 완료
3. UPDATE : 데이터를 수정하는 명령어
--mytable에서 AGE 칼럼의 데이터 21를 22로 수정
SELECT * FROM mytable WHERE AGE='21' --mytable에서 AGE가 21인 데이터 조회
BEGIN TRAN
UPDATE mytable SET AGE = 21 WHERE CD_AGE = 22 AND NAME LIKE 'Yebin' --이름이 yebin인 조건
SELECT * FROM mytable WHERE AGE=22 AND NAME LIKE 'Yebin'
COMMIT TRAN
4. DELETE : 데이터를 삭제하는 명령어
WHERE: 조건문
LIKE: ~로 시작/포함/끝나는 단어
--mytable에서 Name 칼럼에서 'Ye'로 시작하는 데이터 삭제
SELECT * FROM mytable WHERE Name LIKE 'Ye%' --삭제할 데이터 조회
BEGIN TRAN --트랜잭션 시작
DELETE FROM mytable WHERE Name LIKE 'Ye%' --데이터 삭제
SELECT * FROM mytable WHERE Name LIKE 'Ye%' --삭제한 데이터 조회
COMMIT TRAN --트랜잭션 반영
4. ORM이 무엇인지 설명해주세요
ORM (Object-Relational Mapping, 객체-관계 매핑)
ORM은 Object Relational Mapping (객체-관계-매핑) 의 약자로, 프로그래밍 언어의 "객체" (Object 필드) 와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구이다.
ORM은 MVC (Model, View, Controller) 패턴에서 모델(Model)을 기수하는 도구로, 객체와 모델 사이의 관계를 기술하는 도구이기도 하다.
Python, Java 를 비롯한 객체 지향 프로그래밍은 '클래스'를 사용하고, 관계형 데이터 베이스는 '테이블'을 사용하여 데이터를 저장하고 표현한다.
관계형 DB 시스템을 이용하여 객체 지향 프로그래밍 작업을 할 때, 서로 다른 방식으로 표현한 데이터 간의 불일치가 존재하기 때문에 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 생성하여 불일치를 해결하여야 한다.
[참고자료]
https://noahlogs.tistory.com/36
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#nosql
https://www.oracle.com/kr/database/what-is-database/
https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://blog.naver.com/qbxlvnf11/221113681639
https://www.oracle.com/kr/database/what-is-database/
https://coding-factory.tistory.com/81
https://javabydeveloper.com/orm-object-relational-mapping/
https://gmlwjd9405.github.io/2019/02/01/orm.html
'# Tech Studies > Web' 카테고리의 다른 글
[Web/Backend/Auth] JWT란 무엇인가? (0) | 2022.08.23 |
---|---|
[Web Data Format] XML, JSON 포맷 파일이란? (0) | 2021.11.27 |
[Backend/Web Server/Django Deploy] 웹 서버와 WAS, Django 배포 (0) | 2021.08.21 |
[Backend/Database] 데이터베이스 모델링, RDB/NoSQL Modeling, MySQL 실습 (0) | 2021.08.13 |
[Web/API] API란? (0) | 2021.04.20 |