티스토리 뷰

do/term

DB, SQL, ORM

dooo.park 2019. 4. 18. 14:26

데이터베이스(DB, Database)

기업이나 조직 또는 개인이 필요에 의해(부가가치를 생성) 데이터를 일정한 형태로 저장해 놓은것

관리하는 데이터의 양이 많아지고 여러 사람이 데이터에 접근하면서 파일 구조의 형태로 관리하기에 문제점들이 발생하였다.

네트워크 환경에서 여러 사용자가 데이터를 보다 효율적으로 관리하기 위해 관계형 데이터베이스(RDB)가 대두되었다.


데이터베이스는 크게 RDB와 NoSQL의 두종류로 나뉜다.


NoSQL(Not Only SQL)

SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하는 단어

관계형 데이터베이스를 사용하지 않는다는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 것이다.

 

- 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
- 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
- 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less)
- 데이터베이스의 중단 없는 서비스와 자동 복구 기능지원
- 다수가 Open Source로 제공
- 확장성, 가용성, 높은 성능 

 

NoSQL의 종류
저장되는 데이터의 구조에(Data Model) 따라 아래와 같이 나뉜다.


① Key Value DB
Key와 Value의 쌍으로 데이터가 저장되는 가장 단순한 형태의 솔루션으로 Amazon의 Dynamo Paper에서 유래되었다

Riak, Vodemort, Tokyo 등


② Wide Columnar Store
Big Table DB라고도 하며, Google의 BigTable Paper에서 유래되었다. 

Key Value 에서 발전된 형태의 Column Family 데이터 모델을 사용한다.

HBase, Cassandra, ScyllaDB 등


③ Document DB
Lotus Notes에서 유래되었으며, JSON, XML과 같은 Collection 데이터 모델 구조를 채택하고 있다. 

MongoDB, CoughDB

 

④ Graph DB
Euler & Graph Theory에서 유래한 DB

Nodes, Relationship, Key-Value 데이터 모델을 채용하고 있다. 

Neo4J, OreientDB 등

 

관계형 데이터베이스(RDB, Relational Database)

관계형 데이터베이스는 키(key)와 값(value)들의 관계를 테이블화 시킨 데이터베이스이다. 


테이블(Table) 
관계형 데이터베이스의 기본 단위의 형태는 테이블이다. 모든 자료는 테이블에 등록되고, 테이블로부터 자료를 얻어온다. 

 

테이블은 세로 방향을 컬럼(Column), 가로 방향을 행(Row)로 하는 2차원 구조로 나타내며, 각 Cell을 필드(Field)라한다. 

테이블은 반드시 하나 이상의 컬럼을 가져야 한다.

필드는 테이블의 한 열을 나타내며, 모든 레코드들의 특정한 값을 저장한다.

레코드(Record)는 테이블의 한 행을 뜻하며, 테이블에 입력된 각각의 데이터 개체를 말한다. 

 

테이블(table) : Relation 또는 Entity에 대응되며 Attribute(속성)과 Tuple(튜플)로 구성된다.
컬럼(Column) :  속성(Attribute), 데이터 set의 각각의 데이터에 대한 속성 또는 Head
행(Row) : 튜플(Tuple), 데이터를 저장할 때 각 컬럼 attribute의 집합

 

각 행을 구분하는 한 개 이상의 컬럼을 기본키(Primary Key)라 하며, 

테이블간의 관계를 연결하는 컬럼을 외부키(Foreign Key)라고 한다. 

 

식별자 :  UID( Unique IDentifier )  
  하나, 혹은 하나 이상의 Attribute 로 구성. 
  최소한의 Attribute로 구성하는 것이 좋다. 
  반드시 하나 이상의 UID를 가져야한다.  

  Table에서 Select할 경우 식별자 하나로서 검색이 가능한 Attribute로 구성. 

 

데이터베이스 관리 시스템(DBMS, DataBase Management System)

방대한 양의 데이터를 편리하게 저장하고 효율적으로 관리하고 검색할 수 있는 환경을 제공 해 주는 시스템 소프트웨어

 

DBMS의 종류
① RDB 
    MySQL 

    가장 많이 사용하는 무료 DBMS

    오라클이 썬을 인수하면서 MySQL을 소유하게 되었다. 

    오라클이 오픈소스에 호의적이지 않기 때문에 사용자들 사이에서 불안감이 커졌고 대체재로 등장한 것이 바로 MariaDB다. 

 

    MariaDB 

    MySQL을 기반으로 한 오픈 소스 DBMS

    MySQL을 기반으로 만들었기 때문에 거의 완벽하게 호환이 된다. 


    Oracle 

    가장 유명한 유료 DBMS로 오라클에서 만든 데이터베이스 관리 시스템

    PostgreSQL(ORDBMS)

    다양한 기능을 제공하는 오픈소스 DBMS. 

    엔터프라이즈급이나 차세대 DBMS에서 제공하는 기능들을 많이 제공한다. 

② NoSQL 

    MongoDB 

    가장 많이 쓰이는 NoSQL. 

    다양한 인덱싱을 지원하기 때문에 RDB에 익숙한 사람이 다루기 편하다. 

   

    Couchbase

    membase + CouchDB. 

    In-memory DB인 memcached에 persistence를 붙여 DB로 만든것이 membase이고 

    여기에 CouchDB를 결합하여 persistence layer를 CouchDB로 대체시킨 것이 Couchbase이다.

   

    Cassandra와 HBase 

    빅데이터 처리에 적합

    HBase는 HDFS(HaDoop File System)을 기반으로 만들어졌다.

 

③ In-memory DB 

    memcached 

    memcached는 레디스와 다르게 순수한 메모리 DB다. 

 

    Redis(REmote DIctionary System
    NoSQL로도 분류된다. 

    레디스는 memcached와 다르게 데이터를 디스크에 저장할 수 있다. 

    memcached와는 다르게 데이터 스트럭처를 제공한다.

④ SQLite 
    sqlite는 로컬에서 사용하는 경량 데이터베이스. 

    원격 Connection이 발생하지 않기 때문에 데이터 접근이 매우 빠르다.

 

관계형 데이터베이스 관리 시스템(RDBMS , relational database management system)

관계형 모델을 기반으로 하는 데이터베이스 관리 시스템. 

RDMBS는 관계형 데이터베이스를 생성, 갱신, 관리하기 위한 시스템이다. 레코드 단위로 데이터 읽기/쓰기가 이루어진다.

 

RDBMS는 일반적으로 클라이언트가 요청을 보내면 서버가 처리해주는 C/S 구조로 되어있다.

클라이언트가 요청을 보낼 때에 주로 사용하는 언어가 SQL 이다.

데이터를 조회하고 싶을 때에 SQL 문으로 작성한 요청을 RDBMS에 보내면 RDMBS는 요청된 데이터를 반환한다.


SQL(Structured Query Language)

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 

관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 

 

SQL은 Oracle, MSSQL, MySQL, MongoDB 등과 같은 DBMS(DataBase Management System)에서 사용되는 구조 질의어이다.

 

데이터 정의 언어 (Data Definition Language)

데이터베이스 스키마와 설명을 처리하는 정의하는 언어이다.

데이터베이스나 테이블 생성/변경/삭제 등의 작업이 여기에 포함된다.

 

데이터 조작 언어 (Data Manipulation Language)

데이터 검색, 삽입, 변경, 삭제를 수행하여 조작하는 언어이다. 실질적으로 저장된 데이터에 처리할 때 사용한다.

 

데이터 제어 언어 (Data Control Language)

데이터에 접근할 수 있는 권한을 관리하는 언어이다.권한 부여(GRANT)와 박탈(REVOKE), 연결(CONNECT), 질의(SELECT), 자료 삽입(INSERT), 갱신(UPDATE), 삭제(DELETE) 등이 있다.

TCL

트랜잭션을 다루는 언어이다.

 

SQL문장 종류

 명령어 분류

 명령어

 설명

 DQL

 Data Query Language

 (질의어)

 SELECT

 데이터 검색시 사용한다.

 DML

 Data Manipulation Language 

 (데이터 조작어)

 INSERT

 데이터 입력시 사용한다.

 UPDATE

 데이터 입력시 사용한다.

 DELETE

 데이터 입력시 사용한다.

 DDL

 Data Definition Language 

 (데이터 정의어)

 CREATE

 데이터베이스 객체 생성한다.

 ALTER

 데이터베이스 객체 변경한다.

 DROP

 데이터베이스 객체 삭제한다.

 RENAME

 데이터베이스 객체 이름 변경한다.

 TRUNCATE

 데이터베이스 객체의 저장 공간 삭제한다.

 TCL

 Transaction Control Language 

 (트랜잭션 처리어) 

 COMMIT

 트랜젝션의 정상적인 종료 처리한다.

 ROLLBACK

 트랜잭션 취소한다.

 SAVEPOINT

 트랜잭션내에 임시 저장점 설정한다.

 DCL

 Data Control Language 

 (데이터 제어어)

 GRANT

 데이터베이스에 대한 일련의 권한 부여한다.

 REVOKE

 데이터베이스에 대한 일련의 권한 취소한다.

 

데이터 타입

문법

최대 크기

설명

VARCHAR(size) 255자 255자의 문자를 저장한다. 문자열의 길이는 가변적이다.
INT(m)

표준 integer 값.

-2147483648 ~ 2147483647.

m은 정수의 크기가 아닌 자릿수 개수이다.
BIGINT(m) 큰 integer 값. -9223372036854775808 ~ 9223372036854775807 m은 정수의 크기가 아닌 자릿수 개수이다.
FLOAT(m,d) 단일 정밀 부동 소수점 숫자 m은 정수 자릿수, d는 소수점 아래 자릿수 개수이다.
DATE ‘1000-01-01’ ~ ‘9999-12-31’ ‘YYYY-MM-DD’로 표기된다.
TIME ‘-838:59:59’ ~ ‘838:59:59’ ‘HH:MM:SS’로 표기된다.

 

SQL 문
데이터베이스에 행해질 대부분의 명령은 SQL 문으로 실행된다. 

아래의 SQL 문은 Customers 테이블의 모든 레코드를 선택한다.

SELECT * FROM Customers; 

 SQL 문은 대소문자 구분을 하지 않는다. 

select 는 SELECT 와 같은 명령이다.

각각의 SQL 문 끝에 ; 를 붙여서 서로를 구분한다.


중요한 SQL 명령어


SELECT - 데이터베이스에서 데이터 추출
INSERT INTO - 데이터베이스에 새로운 데이터 삽입
UPDATE - 데이터베이스의 데이터 갱신
DELETE - 데이터 삭제
CREATE DATABASE- 새로운 데이터베이스 생성
ALTER DATABASE - 데이터베이스 변경
CREATE TABLE - 테이블 생성
ALTER TABLE - 테이블 변경
DROP TABLE - 테이블 삭제
CREATE INDEX- 인덱스 생성
DROP INDEX - 인덱스 삭제


ORM(Object Relation Mapping)

ORM은 데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.

객체 관계 매핑이라고도 한다. 객체 지향 언어에서 사용할 수 있는 '가상' 객체 데이터베이스를 구축하는 방법이다.

 

객체 지향적 사고방식과 DataModel을 정형화하여 관리하려는 RDB 사이를 연결할 계층의 역할로 제시된 패러다임으로 

RDB의 모델을 OOP(Object Oriented Programming)에 Entity 형태로 투영시키는 방식을 사용한다.  

 

객체지향 표현 방식 중 하나인 클래스로 스키마를 매핑하고, 메소드로 쿼리하여 객체로 이루어진 리스트를 얻어온다.

객체 단위로 쿼리를 생성하고, ORM 라이브러리는 이를 raw string SQL로 변환하여 실제로 쿼리를 수행한다. 

 

 

ORM의 장점

① DB의 schema를 그대로 class로 매핑하고, 별도의 SQL문을 사용하지 않고 schema를 디자인할 수 있다.

    ORM은 독립적으로 작성되어있어 해당 객체들을 재활용 할 수 있다. 

    매핑정보가 명확하여 ERD를 보는 것에 대한 의존도를 낮출 수 있다. 

    ※ ERD(Entity-Relationship Diagram) : 데이터 모델링 분야에서 개체-관계 모델이란 구조화된 데이터에 대한 일련의 표현

 

② query를 안써도 DB의 데이터를 추가/수정/삭제가 가능하다. 

    선언문, 할당, 종료 같은 부수적인 코드가 없거나 줄어든다. 

    SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다. 

 

③ DBMS에 대한 종속성이 줄어든다. 

    특정 DB에 한정 되지 않기 때문에 나중에 어떤 DB로든 쉽게 migration 가능하다.


ORM의 단점

① ORM을 사용하면 자동으로 생성되는 query를 사용하는데, 속도에 문제가 생기면 그 부분만 sql을 사용한다.

    하지만 시스템이 복잡해질 수록 sql이 많아질것이고, 쿼리마다 몇개의 field(column)만 가져오고 싶어도 

    쉽게 구현하기 힘들고 기본값은 모든 값을 가져오게 되어 performance에 영향을 준다.

    

② 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다. 
    이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생 할 수 있다. 

 


참고사이트

https://jins-dev.tistory.com/entry/ORMObject-Relational-Mapping%EC%9D%B4%EB%9E%80-ORM-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84%EC%9D%98-%EA%B0%9C%EB%85%90

http://www.incodom.kr/ORM

https://nachwon.github.io/sql-1-intro/

https://jtoday.tistory.com/12

https://blog.yena.io/studynote/2018/10/02/DBMS-SQL.html

https://www.samsungsds.com/global/ko/support/insights/1195843_2284.html

 

 

 

 

'do > term' 카테고리의 다른 글

type assertion  (0) 2019.04.14
REST API  (0) 2019.04.04
서버 기반 인증, 토큰 기반 인증 (Session, Cookie / JSON Web Token)  (3) 2019.04.02
Boilerplate  (0) 2019.04.01
Singleton pattern, Scaffolding  (0) 2019.03.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함