RDBMS와 NoSQL
데이터베이스 시스템의 구성
데이터베이스 언어
SQL
- 데이터 정의어(DDL, Data Definition Language) / CREATE, ALTER, DROP 등
- 데이터 조작어(DML, Data Manipulation Language) / SELECT, INSERT, DELETE, UPDATE 등
- 데이터 제어어(DCL, Data Control Language) / GRANT, REVOKE 등
- CREATE(생성) : 데이터베이스나 테이블을 만들 때 사용
- ALTER(변경) : 이미 존재하는 데이터베이스, 테이블 등을 변경할 때 사용
- DROP(제거) : 데이터베이스, 테이블 등을 삭제할 때 사용
- SELECT(검색) : 데이터베이스에서 정보를 검색할 때 사용
- INSERT(삽입) : 데이터베이스에 새로운 레코드를 추가할 때 사용
- UPDATE(갱신) : 이미 존재하는 데이터를 업데이트하거나 수정할 때 사용
- DELETE(삭제) : 데이터베이스에서 특정 레코드나 행을 삭제할 때 사용
- GRANT : 데이터베이스 사용자에게 특정 작업을 수행할 권한을 주는 명령어
- REVOKE : 이미 부여된 권한을 취소하는 명령어
데이터베이스 사용자
일반 사용자
- 은행의 창구 혹은 관공서의 민원 접수처 등에서 데이터를 다루는 업무를 하는 사람
- 프로그래머가 개발한 프로그램을 이용하여 데이터베이스에 접근 일반인
응용 프로그래머
- 일반 사용자가 사용할 수 있도록 프로그램을 만드는 사람
- 자바, C, JSP 등의 프로그래밍 언어와 SQL을 사용하여 일반 사용자를 위한 사용자 인터페이스와 데이터를 관리 하는 응용 로직을 개발
SQL 사용자
- SQL을 사용하여 업무를 처리하는 IT 부서의 담당자
- 응용 프로그램으로 구현되어 있지 않은 업무를 SQL을 사용하여 처리
데이터베이스 관리자(DBA, Database Administrator)
- 데이터베이스 운영 조직의 데이터베이스 시스템을 총괄하는 사람
- 데이터 설계, 구현, 유지보수의 전 과정을 담당
- 데이터베이스 사용자 통제, 보안, 성능 모니터링, 데이터 전체 파악 및 관리, 데이터 이동 및 복사 등 제반 업무를 함
DBMS
- DBMS는 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해 주는 소프트웨어
RDBMS
- R은(Relational)의 약자로 RDBMS는 관계형 데이터베이스 관리 시스템을 의미
- RDBMS는 RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스
- 아래와 같이 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해.
- 관계형 데이터베이스(RDMBS)에서는 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용. 이러한 테이블간의 관계에서 외래 키를 이용한 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징.
NoSQL
- Not Only SQL의 약자로 말 그대로 위에서 설명한 RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미. 또한 NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않음. 데이터 테이블은 그냥 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 Join도 불가능.
- NoSQL은 점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해서는 장비가 좋아야 하는 Scale-Up의 특징인 비용을 기하급수적으로 증가시키기 때문에 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장
RDBMS와 NoSQL의 장단점
RDBMS 장점
- 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장
RDBMS 단점
- 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있음
- 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원. 이로 인한 과도한 비용 발생 가능
- 스키마로 인해 데이터가 유연하지 못함. 나중에 스키마가 변경 될 경우 번거롭고 어려움
NoSQL 장점
- NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있음. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있음
- 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능
NoSQL 단점
- 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 함.
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있음.
RDBMS와 NoSQL의 사용
RDBMS
- RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합.
NoSQL
- NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 됨. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합.
테이블, 레코드, 필드
필드 Fields
- 열 column에 해당하는 가장 작은 단위의 데이터. 엔티티의 속성을 표현
- 각 열은 고객의 정보(ID, 이름, 나이, 클래스)를 나타냄. 첫번째 행에서 'Lee'라는 값은 NAME 속성을 표현
레코드 Record (튜플 Tuple)
- 논리적으로 연관된 필드의 집합을 의미. 행 row에 해당. 여러 필드가 모여 한 레코드를 이루는 것.
- 고객의 ID, 이름, 나이, 등급 데이터가 모여 하나의 레코드를 구성하며, 한 고객 레코드는 4개의 필드(CUSTOMER_ID, NAME, AGE, CLASS)로 이루어져 있음.
테이블 Table (파일 Files)
- 서로 연관된 레코드의 집합을 테이블 또는 파일이라고 한다.
엔티티 Entity
- 현실 세계에 존재하는 것을 데이터베이스 상에서 표현하기 위해 사용하는 추상적인 개념. 일종의 비유
- 위의 예제에서 ID, 나이, 클래스 라는 정보들을 통해 '고객'이라는 엔티티(객체)를 표현할 수 있고, 동시에 구분할 수 있음. 1행의 고객과 2행의 고객을 구분하기 위해 해당 고객의 이름이나 ID를 비교할 수 있음. 현실 세계에서 사람들(엔티티)을 구분하기 위해 이름, 주민등록번호, 출신지, 성별 등의 특성을 이용하는 것과 마찬가지 .
리눅스 실습
리눅스 접속
- 리눅스 부팅 후 로그인
- 가상 터미널(Virtual terminal) 사용
- telnet, SSH, zterm, puTTY
- 윈도우용 접속 프로그램
- X Manager, X Ming, Exceed
Login과 Password
리눅스 사용자 접속 과정
- 시스템 관리자가 제공하는 사용자 등록명 (login ID)
- 일종의 비밀번호인 패스워드(password)
- 접속 후 자신의 홈(home) 디렉토리에서 파일 생성/편집/저장 가능
Login ID 규칙
- 영문 소문자와 숫자의 조합으로 8자 이내의 단어
Password 규칙
- 8자 내외의 문자, 숫자, 특수문자로 구성
- 2자 문자와 1자 숫자 또는 특수문자가 포함
- 적어도 3자의 문자는 상이해야 함
- password 는 Login ID 나 User name 과 상이해야 함
프롬프트
셸(Shell)
- 명령어 해석 프로그램
- 다음 명령을 입력할 준비가 될 때, 프롬프트(prompt) 출력
셸 프롬프트
- “%”, “$” 등의 기호 사용
- Bourne Shell 이나 Korn Shell 은 “%”, C Shell 은 “$” 사용
- 사용자의 목적에 따라 프롬프트 변경 가능⇒ Password 규칙
- [linux@seps home]$
- linux : 로그인한 사용자 계정
- seps : 현재 접속하고 있는 호스트 이름
- home : 작업하고 있는 현재 디렉토리의 위치
명령어 입력
명령어 라인 (Command Line)
- 명령어를 입력한 전체 줄
- 반드시 Enter 키를 눌러야 명령어 실행됨
- 여러 명령어 실행을 위해 각 명령어는 “;” 로 구분
오타 교정
- 삭제(erase) 문자
- 백스페이스 (Ctrl-h 키), 또는 delete 키
- 라인킬(linekill) 문자
- Ctrl-u 사용
- stty 를 이용한 변경(stty : 터미널의 설정을 보여주거나 설정내용을 변경하는 명령어)
- stty erase [Ctrl-h]
stty -a # 현재 설정된 상태 확인
stty erase ^? # delete 버튼으로 한글자 지우고 싶을 때 (Ctrl + ?)
stty erase ^h # 백스페이스 버튼으로 한글자 지우고 싶을 때
stty kill ^k # 이렇게 해두면 한 줄 지울 때 Ctrl키를 누르고 k를 누름
stty kill ^u # 이렇게 해두면 한 줄 지울 때 Ctrl키를 누르고 u를 누름
명령어
명령어의 구조
명령어 종류
- 비 대화식(NonInteractive) 명령어
- 해당 명령어만 입력하여 사용자가 원하는 결과를 표시
- 매우 간단하며 사용도 편리
- 대화식(Interactive) 명령어
- 명령어들이 실행하는 동안에 어떤 것을 질문하 고 사용자가 대답하고 하는 일련의 과정이 끝나 면 결과를 보여줌.
디렉토리 파일 보기 (ls)
파일 종류 표시
file 파일명
파일 종류
파일 복사(cp)
파일의 삭제(rm)
파일 이름 변경과 옮기기(mv)
디렉토리 생성 (mkdir)
디렉토리 삭제(rmdir)
소유권과 보호
파일 접근을 위해 각 파일에 대해 사용권한 설정
- 파일/디렉토리에 대한 사용자 범위 제한 및 발생 가능한 사용자 실수로부터의 보호
사용권한
소유권한
- Unix에서 제공되는 모든 파일들은 3가지 권한의 조합으로 표시
사용권한 조합
파일 사용권한 변경(chmod)
- 기호 모드
# Test.c 라는 파일에 그룹 권한으로 rw를 준다.
chmod g+rw Test.c
절대 모드
# 소유자에 rwx, 그룹에 w, 다른 사용자에 rx 권한을 준다.
chmod 725 Test.c
파일 소유자 변경(chown)
파일의 소유권을 변경할 때 변경 전후 계정에 대한 권한을 갖고 있어야 하므로 루트 계정으로 명령 실행하는 것이 일반적임
파일 그룹명 변경(chgrp)
파일의 소유자나 루트만 실행 가능 명령
파일 연결관계(Link) 만들기(ln)
Unix/Linux 파일시스템에서 매우 긴 파일이름을 참조하거나, 다른 디렉토리 경로로 연결하여 쉽게 접근할 필요가 있을 때 사용
# Test.txt 실행 시 catTest.txt가 실행됨
ln -s catTest.txt Test.txt
하드링크
- 하나의 파일에 둘 이상의 다른 이름 사용 (디렉토리는 불가)
- 파일의 한 이름으로 수정 시 다른 이름으로도 수정 반영
- ls –al로 하드 링크 수 확인
- 동일 파일 확인 (같은 inode 번호 가짐)
- ls –i 파일
- 한 이름 삭제(rm) 시 다른 이름 존재
- 하드 링크 수 1 감소
- rm 명령어는 무조건 파일 삭제가 아닌 하드 링크 수 1감소 후, 0이면 삭제
심볼릭 링크
- 파일 및 디렉토리 둘 다 가능
- 윈도우의 바로가기 아이콘에 해당
- 하드 링크 수 1 (이름 추가 아님)
- 파일 이름 뒤에 원본 파일 이름 표시됨
- inode 번호가 다른 별개의 파일임
- 원본 파일 삭제 시 심볼릭 링크 사용 불가
복사 (cp)와 링크(ln)의 차이는?
파일 검색 (find)
지정된 디렉토리부터 서브 디렉토리를 탐색하여 특정 파일을 찾음
탐색 조건 | 설명 |
-name 파일명 | 찾고자 하는 파일의 이름을 정한다. 와일드 카드도 가능하다. |
-perm 모드 | 파일 권한(permission)이 일치되는 것을 찾는다. |
-type ? | 형태가 같은 파일을 찾는다. 물음표(?) 부분에 디렉토리(d), 파이프(p), 심볼릭 링크(l), 소켓(s), 블록 파일(b), 일반 파일(f) 사용 |
-links ? | 특정 개수의 링크를 가진 파일을 찾는다. 물음표 부분에 링크 숫자 |
-size [+|-]n | 파일의 크기가 일치하는 것을 탐색. +n 블록보다 크거나, -n 블록보다 작거나, 정확히 크기가 n블록인 파일 검색, 블록 단위(512 bytes) -> n*512 bytes |
-user 사용자 | 파일 사용자의 ID에 따라서 검색한다. |
-atime [+|-]n | 최근 며칠 내에 엑세스한 파일을 검색한다. 날짜수는 n에 명시한다. |
-exec 명령 | 원하는 탐색 조건에 맞는 파일을 찾으면 명령을 실행. 명령 끝은 \; |
-newer 파일 | 어떤 파일보다 최근에 갱신된 모든 파일을 검색한다. |
기능
- 표현식에는 특정 파일의 이름이나 복수개의 파일을 지정하는 패턴 또는 파일의 속성(크기, 수정시간) 그리고 여러 가지 속성을 조합한 논리식이 지정될 수 있음
- 표현식과 일치하는 파일들에 대해 파일의 이름을 출력할 수도 있고 특정한 명령을 실행시킬 수도 있음
- 현재의 경로 이름을 지정하기 위하여 "{}"를 사용
검색조건을 결합할 때 사용하는 논리연산자
경로 설정
현재 작업중인 디렉토리 확인(pwd)
절대경로와 상대경로
절대 경로 : 모든 경로명을 루트 디렉토리인 "/" 로 시작하여 특정한 파일이나 디렉토리를 표시
상대 경로 : 현재 작업 디렉토리부터 시작하여 상대적인 경로 이름 표시
디렉토리 변경(cd)
프로세스 삭제(kill)
soft kill : 15759 프로세스에게 SIGTERM 시그널을 보낸다. 프로세스는 하던 작업을 마무리하고 종료됨. 정상 종료
kill 15759
sure kill : 15759 프로세스에게 SIGKILL 시그널을 보낸다. SIGKILL을 받으면 프로세스가 즉시 종료된다. 어떤 시그널도 무시하는 프로세스를 종료시킬 때 유용하다. 비정상 종료
보통 뭐하다 안되면 kill -9 로 종료시킴
kill -9 15759
파일 만들기(touch)
지정한 파일이 존재하지 않으면 생성, 존재하면 현재 시간 또는 지정한 시간으로 시간 변경
옵션 -t
- [[CC]YY]MMDDhhmm[.ss]
옵션 -r
- 시간을 파일(re_file)에서 읽음. 즉, 특정 파일의 접근, 수정 시각으로 수정
파일 만들기(cat)
파일의 내용보기(cat)
파일 탐색 (grep : get regular expression print)
- 파일 내에서 특정 문자열을 검색하기 위해 사용
- 문자열이 발경되면 해당 행을 표시
# 특정 파일에서 'error' 문자열 찾기
grep 'error' 파일명
# 여러 개의 파일에서 'error' 문자열 찾기
grep 'error' 파일명1 파일명2
# 현재 디렉토리 내에 있는 모든 파일에서 'error' 문자열 찾기
grep 'error' *
# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
grep 'error' *.log
- grep명령어를 사용하시면 특정 파일에서 내가 원하는 문자열이 있는 라인을 찾을 수 있습니다
- 파일은 여러개 지정도 가능합니다. 위와 같이 사용한다면 'error'라는 문자열을 mylog.log라는 파일에서 찾을 수 있겠습니다.
실시간 로그 보기(tail + grep)
tail -f mylog.log | grep 192.168.15.86
- grep은 다른 명령어와 조합해서 사용. 실시간 로크 체크할 때 tail과 grep 명령어 조합으로 로그 파일에서 자신이 원하는 키워드만 추출. mylog 파일을 실시간으로 엑세스하고 IP 주소가 192.168.49.16인 행만 추출 가능
특정 파일에서 여러 개 문자열 찾기
cat mylog.txt | grep 'Apple' | grep 'Banana'
- 파이프(|)를 사용하면 grep 명령어를 여러 개 사용하여 특정 파일에서 여러 개의 문자열을 찾을 수 있다. mylog.txt 파일에서 Apple, Banana가 있는 문자열들을 찾을 수 있다.
최대 검색 결과 제한하기
grep -m 100 'Apple' mylog.txt
- grep한 결과를 100개까지만 출력할 때 -m 옵션을 사용. mylog.txt의 Apple 문자열을 100개까지만 찾음
grep한 결과값 txt 파일로 저장
grep -n 'Apple' mylog.txt > result.txt
- grep한 결과가 길면 txt 파일로 저장하여 확인. mylog.txt 파일에서 Apple이 있는 문자열을 result.txt 파일에 저장
문자 및 문자열 개수(wc: word count)
파일 안에 있는 라인 수, 단어 수, 문자 수를 세어서 표시
디스크의 남은 용량 확인 (df – disk free)
디렉토리나 파일의 사용 용량 확인 (du – disk used)
프로세스 상태 확인 (ps – process status)
PID, 터미널, CPU 시간, 명령어 등의 정보 제공
- -ef : PID, PPID와 같은 간단한 정보 제공
- aux : 좀 더 자세한 정보 제
프로세스 상태 확인 (top)
htop을 설치해서 사용하는게 더 좋음
ps : ps 명령어가 실행된 순간의 상태 정보 제공
top : 동적인 시스템 정보 제공
리눅스 소프트웨어 패키지 파일
레드햇 계열 : -rpm 파일(확장자가 .rpm)
데비안/우분투 계열 -deb 파일(확장자가 .deb)
소프트웨어 패키지 관리 (rpm/yum/dpkg/apt-get)
일반 형식 | rpm/yum/dpkg/apt-get [옵션] 패키지 | |
rpm, yum | dpkg, apt-get | 설명 |
rpm -ivh 패키지 파일 yum install 패키지 |
dpkg -i 패키지 파일 yum install 패키지 |
패키지를 파일 또는 원격 배포판 서버로부터 설치한다. |
rpm -Uvh 패키지 파일 yum update |
dpkg --update-avail 패키지 파일 apt-get install 파일 apt-get upgrade |
일부 또는 전체 패키지를 업그레이드 |
rpm -e 패키지 | dpkg -r 패키지 apt-get remove 패키지 |
패키지를 제거한다. |
rpm -qi 패키지 | dpkg -p 패키지 | 패키지 정보를 출력한다. |
rpm -qa | dpkg -l | 설치된 패키지의 목록을 출력한다. |
rpm -ql 패키지 | dpkg -L 패키지 | 패키지의 설치 파일 목록을 출력한다. |
rpm -qa 패키지 | dpkg -I 패키지 | 패키지를 찾는다. |
'배운 내용 > 클라우드 교육' 카테고리의 다른 글
10월12일(목) Database (0) | 2023.10.12 |
---|---|
10월11일(수) Storage (0) | 2023.10.11 |
10월10일(화) Compute&Network (2) | 2023.10.11 |
10월5일(목) 클라우드를 위한 기초 이론 (1) (1) | 2023.10.05 |
10월4일(수) 클라우드 교육 overview (1) | 2023.10.05 |