본문 바로가기

Back-End/데이터베이스

[DB]데이터베이스 기본 이론 및 설치

~ 목차 ~

데이터베이스

 

데이터베이스를 사용하는 이유

 

우리가 웹을 개발할 때 데이터베이스를 사용해서 입력된 정보들을 저장하게 되는데, 
파일이 아닌 데이터베이스를 주로 사용하는 이유를 알아보자.

 

[ 파일에 데이터를 보관하는 문제점 ]

  • 같은 내용의 데이터가 중복 저장
    • 저장공간의 낭비, 일관성과 무결성을 유지하기 어려움
  • 응용프로그램이 데이터파일에 종속적
    • 원래는 없던 컬럼을 추가하기 위해 파일시스템을 수정하면 응용프로그램도 수정해야함
  • 데이터파일의 공유, 보안, 회복 기능이 약함

 

DBMS는 위 문제를 해결하기 위해 등장한 데이터를 통합하여 저장하고 관리하는 시스템이다.

별도의 파일로 관리되던 데이터를 하나로 통합하여 관리하면서 응용프로그램을 대신해서 데이터를 검색, 삽입, 수정할 수 있는 기능을 하게되었다.

응용프로그램들은 DB를 공유해서 사용할 수 있게 되었다.

 


 

 

데이터베이스 장단점

 

장점

  • 데이터 종속성이 최소화된다.
  • 데이터 중복성이 감소한다.
  • 데이터 동시 공유가 가능하다. (동시성 제어 concurrency control)
  • 데이터 일관성 유지가 쉽다.
  • 데이터 무결성 유지가 쉽다.
  • 데이터 보안이 향상된다.
  • 표준화된 데이터 접근이 가능하다.
  • 데이터 가용성이 향상된다.
  • 응용 프로그램의 개발 비용이 감소한다.

단점

  • 시스템 운영비용이 증가한다.
  • 시스템 관리 부담이 높아진다.
  • 시스템 취약성이 증가한다.

 

데이터베이스 기본 이론

 

  • 데이터베이스 : 관리하는 데이터의 집합
  • 데이터베이스의 특징
    - 실시간 접근성
    - 생성, 수정, 삭제를 통한 최신 데이터 유지
    - 사용자들 간의 동시 공유
    - 사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조 가능
    - 데이터 논리적 독립성

  • DBMS(Database Management System) : 데이터베이스 관리 시스템,
    데이터베이스 생성, 조회, 수정, 삭제와 같은 환경과 각종 응용프로그램이 데이터베이스에 접근할 수 있는 인터페이스를 제공하며 복구, 권한 관리와 같은 보안성 기능도 제공

  • 데이터베이스 모델
    • 계층형
      데이터 간의 관계가 트리 형태의 구조. 부모-자식 관계로 표현되며, 1:N으로 구성될 수 있음
      구조가 간단하고 구현, 수정 , 검색이 쉽지만 N:N 관계 처리가 불가능하고 구조변경이 어려움
      ex) IMS(IBM의 Information Management System)
    • 네트워크형
      계층형 데이터베이스의 단점을 보완하여 N:N 구성이 가능한 망 형태의 모델
      유연성과 접근성이 높지만 구조가 복잡해 유지 보수가 어려움
      ex) IDMS ( Integrated Data Store ) 
    • 관계형
      키(Key)와 값(Value)으로 이루어진 데이터들을 행(Row), 열(Column)로 구성된 테이블 구조로 단순화시킨 모델
      SQL(Structured Query Language)를 사용하여 데이터 관리
      데이터 모델링이 간단하지만 비정형 데이트들을 다루거나 실시간 분석에는 적합하지 않음
      ex) MySQL, Oracle, MariaDB
    • 객체지향형
      객체지향 프로그래밍 개념에 기반하여 만든 데이터 모델
      비정형 데이터들을 데이터베이스화 하기 위해 만들어진 모델
      검색이나 대규모 트랜잭션 처리에서 성능이 떨어지는 단점이 있어 몇몇 특수 전문분야에서만 사용
      ex) O2, ONTOS
    • 객체 관계형
      관계형 데이터베이스에 객체 지향 개념을 도입하여 만든 데이터베이스 모델
      객체지향 개념을 지원하는 표준 SQL을 사용할 수 있고, 데이터 타입도 다양하게 추가되었음
      ex) UniSQL, Object Store
    • NoSQL
      Not only SQL의 줄임말로 SQL 특성뿐만 아니라 다양한 특성을 지원
      데이터 간의 관계를 정의하지 않는 데이터베이스 모델
      RDBMS의 복잡도와 용량의 한계를 극복하기 위한 목적으로 만들어짐
      비정형 데이터 처리에 유리하지만 스키마 변경에 추가적인 작업이 필요
      ex) MongoDB, DynamoDB, redis
    • NewSQL
      RDBMS의 SQL과 NoSQL의 장점을 결합하여 관계형 모델, 트랜잭션 지원 및 확장성과 고 가용성을 모두 만족시키려는 목적에서 만들어진 데이터베이스 모델
      ex) VoltDB
  • RDBMS(Relationship Database Management System ) : 관계형 데이터베이스 관리 시스템

  • DB Server : DB(DBMS or RDBMS 같은 의미로 사용됨)가 구축된 시스템을 의미함

  • DB SW(RDBMS) 
    - Oracle : 전세계적으로 가장 많이 사용, 오라클사, 최적화 OS는 리눅스( 다만 모든 OS에 다 안정화되어 있음 )
    - MySQL : 오라클사 , 최적화 OS는 리눅스( 다만 모든 OS에 다 안정화되어 있음 )
    - MS-SQL : 마이크로소프트사, 최적화 OS는 윈도우(보안이 약함)
    - MariaDB : 오픈소스기반 DB , 최적화 OS는 리눅스( 다만 모든 OS에 다 안정화되어 있음 )

 

데이터베이스 시스템

 

[데이터 시스템 요소]

  • 스키마 : 데이터베이스에 저장되는 데이터 구조제약조건을 정의한 것
  • 인스턴스 : 스키마에 따라 데이터베이스에 실제로 저장된 값
  • 메타데이터 : 데이터에 대한 데이터

 

[데이터 언어]

  설명 주요 명령어
DDL
(Data Definition Language)
데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어 CREATE, ALTER, DROP, TRUNCATE
DML
(Data Manipulation Language)
데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어(CRUD) INSERT, UPDATE, DELETE, SELECT
DCL
(Data Control Language)
데이터베이스에 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어 GRANT, REVOKE, COMMIT, ROLLBACK

 

 

[데이터 모델링]

개체와 개체간의 관계를 이용해서 현실 세계를 개념적 구조로 표현
이것을 다이어그램 그림으로 그린것이 ERD이다.

  • 개체 (entity)
    - 저장할 가치가 있어야 하며 다른 개체와 구별되는 이름과 고유한 특성을 가지고 있어야 한다.
    - 하나의 테이블과 대응됨
  • 속성 (attribute)
    - 개체나 관계가 가지고 있는 고유의 특성
    - 의미있는 데이터의 가장 작은 논리적 단위
    - 테이블의 한 컬럼과 대응됨
  • 인스턴스 (instance)
    - 개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체
    - 테이블에서 하나 이상의 과 대응

 

[관계 모델링]

관계데이터 모델은 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델이다.

 

릴레이션 : 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것(테이블)

  • 속성(atrribute): relation의 열
  • 튜플: relation의 행
  • 도메인: 하나의 속성이 가질 수 있는 모든 값의 집합
  • 카디널리티: 하나의 릴레이션에서 튜플의 전체 개수
  • 릴레이션의 스키마 : 릴레이션의 논리적구조, ex.고객(id, name, age, job)
  • 릴레이션의 인스턴스 : 한 시점의 릴레이션에 존재하는 튜플의 집합
  • 릴레이션특성
    • 튜플의 유일성 : 동일한 튜플은 존재할 수 없다
    • 무순서 : 튜플 사이 순서나 속성 사이 순서는 아무 의미가 없다
    • 속성의 원자성 : 속성은 더이상 쪼갤 수 없는 원자 값을 넣어줘야 한다.

: 릴레이션에서 튜플들을 구별하는 하나 또는 그 이상의 속성

 

키 특성

  • 유일성 : 하나의 릴레이션에서 모든 튜플은 서로 다른 키를 가져야 한다
  • 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성해야한다.

키 종류

  • 슈퍼키 : 유일성을 만족하는 속성 또는 속성집합
  • 후보키 : 유일성과 최소성을 만족하는 속성 또는 속성집합
  • 기본키 : 후보키 중 기본적으로 사용하기 위해 선택한 키
  • 대체키 : 후보키 중 기본키로 선택되지 못한 키
  • 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성집합
  • 복합키 : 한 테이블에 PK가 두 개 이상인 키

 

[데이터 타입]

  • char = 고정형 문자열 데이터타입(무조건 정해진 사이즈 만큼 들어감)
     ex) char(10) : 00000000ab
  • varchar = 가변형 문자 데이터타입(문자 길이에 따라 사이즈가 변함)
    ex) varchar(10) : ab

 

[데이터베이스 정규화]

데이터베이스 정규화(Normalization)는 데이터 중복을 줄이기 위해
데이터베이스를 구성하고 구조화하는 프로세스이다.

  • 제 1 정규화( 1NF ) : 도메인 원자값 분리
  • 제 2 정규화( 2NF ) : 부분적 함수 종속 제거
  • 제 3 정규화( 3NF ) : 이행적 함수 종속 제거 
  • BCNF : 결정자이면서 후보키가 아닌 것 제거 
  • 4정규화( 4NF ) : 다치 종속 제거 
  • 5정규화( 5NF ) : 조인 종속성 이용 

자세한 설명은 >> 정규화 (제1 정규화 ~ 제3 정규화) :: DanStory (tistory.com)


 

 

데이터베이스 설치

 

  • MariaDB 설치(서버설치 : 요청응답)
     - Download URL : http://mariadb.org
     - Download클릭 >> Maria DB Server 10.11.6 다운 (alpha는 개발단계, RC는 테스트단계)
     - 최초 선택권자 : 비밀번호 설정하게되어있음
     - 포트번호 : 3306 (커넥트시 사용할 번호)

  • DB Client Tool(클라이언트 툴 : 고객요청)
     - HeidiSQL 사용

  • MariaDB or MySQL 절대 권한 계정 및 패스워드
     - 계정 : root
     - 패스워드 : 설치 시 입력한 비번
     - 사용하는 port : 3306
                      (웹 서버 포트 : 8로시작 ex.java : 8080, python : 8000 )
     - 기본 IP : 127.0.0.1
                      (private ip: 내부에서만 존재하는 ip, 다른사람이 접근못함)
     - 기본 Host : localhost 
                         (도메인 이름 : www.도메인 이름.)
     - 도메인 이름을 해당 ip로 mapping해주는 DNS(Domain name system)이 자동으로 실행됨
        ( DNS :  도메인을 IP 네트워크에서 찾아갈 수 있는 IP로 변환 )
     - mysql : 데이터베이스를 관리하는 시스템
     - mysql에서 사용자들한테 권한을 줄수 있음 
                                         >> user (사용자계정, 패스워드, 사용자 권한 관리하는 곳)
                                         >> db (테이블 저장공간)

  •  DB 사용 방법
     - 아래는 절대권한(root)으로 접속해서 생성해야 함
     - user 생성 : 계정 및 패스워드 생성
     - Database 생성 : 사용자가 사용할 공간 만들기 (테이블:행과 열로 이루어짐) 
         ---> Oracle은 제외, Oracle은 사용자생성하면 자동으로 DB생성

     - 권한 부여 : 사용자가 접속하고, DB를 사용할 수 있는 권한 부여

  • HeidiSQL
    - 주석 부여 : -- 한 줄주석(마이너스마이너스 한칸 뛰고)  //    /* 문장주석*/
    - 쿼리 전체 실행 단축키 : F9
    - 커서 위치한 문장 쿼리 실행(콜론 안에!) : Ctrl+shift+F9
    - 쿼리닫기 : 쿼리 탭 더블클릭
    - IDENTIFIED BY : 패스워드를 설정하는 명령어
-- db 테이블 조회해 보기
SELECT * FROM db;
SELECT * FROM USER;

-- 사용할 DB 지정하기
USE mysql;

-- 사용 문자형태
set names utf8;

-- 사용자 계정 및 패스워드 생성하기
-- ->내부 사용자
CREATE USER gjuser@localhost
	IDENTIFIED BY 'dbdb';
	
-- ->외부 사용자
CREATE USER 'gjuser'@'%'
	IDENTIFIED BY 'dbdb';
	
-- 사용자 삭제하기	
-- DROP USER gjuser@localhost;

-- 데이터베이스 생성하기
CREATE DATABASE gjdb;

-- 데이터베이스 삭제하기
-- DROP DATABASE gjdb;

-- 사용자 권한 부여하기
GRANT ALL privileges ON gjdb.* TO 'gjuser'@'localhost';

-- 사용자 권한 해제하기
-- REVOKE ALL privileges ON gjdb.* FROM gjuser@'localhost';

-- 사용자 또는 DB 또는 권한 처리 후에는 마지막 한번 아래 실행
-- (실제 메모리에 저장하겠다= 모든 형태를 반영하겠다)
FLUSH PRIVILEGES;

 

 

 

  • 사용자, DB, 권한부여 후 할 일
     - 사용자로 접속
     - Table(테이블)설계 (DB설계라고 칭합니다.)
        => 테이블을 어떻게 만들지 모델링
        => 데이터를 저장할 수 있는 공간 : 테이블
        => 테이블 내에 데이터를 저장하는 원소값 : 컬럼(열)
        => 테이블 하나를 만들기 위해서는 컬럼(열)이 하나 이상 존재해야 합니다.
        => 컬럼은 타입(또는 길이와 함께)으로 정의됩니다. 
     - Table 이용해서 입력, 수정, 삭제, 조회 -> (CRUD)를 수행함

  • 데이터베이스 생성시 작성해야 할 것(필수!!!)
      ①테이블 스키마
          - logical(논리):한글로 알아보기 쉽게
          - physical(물리):영어로 실제 컬럼명과 형식

      ② ERD 
          - 관계 1:N으로 연결되어있음
          -  짝대기 1개 : 부모테이블
          -  짝대기 3개 : 자식테이블
          -  부모쪽 테이블에는 PK존재해야함(기본키, 고유한 값) 
               ※ PK규칙 : 중복X
          -  자식쪽 테이블에는 FK존재(외래키, 해당 컬럼을 참조하는 값) 
               ※ FK규칙 : 여러값 들어올 수 있음
          -  부모가 없는 자식테이블은 없다!!!

     

테이블 설계(스키마)
ERD

 

 

 


 

 

 

출처

 

[Database] 데이터베이스란? :: 코딩 공부 일지 (tistory.com)

 

[Database] 데이터베이스란?

🚀 데이터베이스란? 데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합입니다. 즉, 자료 파일들을 조직적으로 통합하여 항목의 중복을 없애고 자

cocoon1787.tistory.com

데이터베이스 이론 정리 (velog.io)

 

데이터베이스 이론 정리

 

velog.io

 

728x90