뉴렉처님의 Servlet/JSP 강의를 50강까지 듣다가
이후 강좌는 DB에 대한 개념이 필요하다고 하여
먼저 오라클 강의를 완강하려고 한다.
총 46강으로 구성되어져 있으며
복습 및 정리 겸 블로그에 기록한다.
DB(Database)
컴퓨터는 네트워크가 연결되지 않은 상태에서 파일을 개별적으로 관리
중간에 상이한 데이터와 데이터 결함이 발생했다.
따라서 효과적으로
데이터를 각자 갖는 것보다는 한곳에서 모아서 데이터를 관리-> database
그러나
중복을 없애기 위해서 table들이 찢어져 있어서 다시 이어 붙이고 참조하는 과정이 필요
참조하는 방법은 아래와 같은데
그 중에서 우리는 Relatioan DBMS에 대해서 배운다.
그렇다면 RDBMS가 뭔가? NoSQL은 뭔가?
✔️RDBMS(Relational DataBase Management System)
관계형 데이터베이스 관리 시스템
대표적으로 오라클, MySQL, Access, MsSql 등이 있다.
위의 예시처럼 데이터를 테이블 형태('스키마'라고 부른다)로 관리한다.
각 테이블끼리는 ERD 방식을 통해 관계를 형성할 수 있다.
장점: 단순하고 이해하기 쉬운 구조를 띈다.
( 각각의 테이블들이 담고 있는 정보는 명확하다 - 예를 들어, 위의 예시는 특정 학교의 학생들의 개인정보라고 이해할 수 있을 것이다.)
✔️ NoSQL(Non-Relational SQL)
비관계형 데이터베이스 관리 시스템
cf) SQL(Structured Query Language) = 데이터베이스에 접근할 수 있는 데이터베이스의 하부 언어
대표적으로 아파치 카산드라, 하둡, 몽고DB 등이 있다.
장점: 대규모의 데이터를 유연하게 처리할 수 있으며, 설계가 단순하고 수평 확장에 용이하다.
앞으로 배울 내용은 RDBMS이며 후에 몽고DB를 통해서 NoSQL에 대해서 배워보자.
이렇게 참조하게 되면 3가지 문제가 발생한다.
-> 관리자를 하나 두자 , 관리자를 통해서 쓰자
이 관리시스템을 만드는 전문으로 하는 회사 : 오라클 등
직접 데이터를 쓰는 것이라 아니라 관리자에게 부탁해서 해보자 그 명령어를 우리는 쿼리라고 부른다.
제일 먼저 할 것은
어떤 데이터를 쓸것인지 밝히기-> DDL
데이터를 입력하고 -> DML
권한에 대하여 부여하는 일이다.-> DCL
원격에 있는 서버
우리가 저걸 써야한다
직접 사용할 수 있도록 하는 사용자 인터페이스가 없다
따라서 클라이언트 프로그램이 있어야한다
오라클이 제공하는 2개의 유틸리티 Sqlplus와 sql developer가 있다.
클라이언트 프로그램은
1. 인증
2. 실행
3. 결과학인의 역할을 한다.
오라클 서버의 데이터베이스가 2종류
운영체제에 가상 컴퓨터
윈도우즈 안에 윈도우즈
호스트의 자원을 같이 쓴다.
가상화 !
원래 옛날에는 DB가 하나
언제가부터 가상화된 DB가 등장
큰 DB안에 자원을 공유하면서 독립된 작은 가상화된 DB가 등장
Pluggable database
저희가 지난 시간은 그 밖을 관할하는 CDB에 접속
그 안에 있는 pluggable db에 접속할 수도 있다.
추가적으로 pluggable 을 설치할 수 있고
C처음에 들어가면
SEED DB가 있다 이는 가상의 데이터 베이스를 만들기 위한 템플릿이라고 볼 수 있는데
그 이유는 이 아이를 복사해서 생성해 나가기 때문이다.
오라클 처음 설치하면 연습용 PDB가 있다.
그 이름은 XEPDB1이 있다.
PDB$SEED 원본
앞으로 만들어진 녀석들의 원본
실제로 존재하는 pdb는 XEPDB! 하나의 가상 데이터베이스
지난 시간에 접속한 CDB와 완전 별개의 가상의 독립된 DB
✔️ XEPDB1에 접속하는 방법
각각 다른 데이터 베이스이다.
계정이 데이터베이스 설치하자마자 2개의 계정이 있다.
DB : 데이터를 여러 파일에 저장
물리적으로 여러 파일을 가지고 있음-> 논리적으로 하나의 범주 내에 있는 데이터베이스에 저장
개념단위의 데이터베이스 구조 = 테이블
다루고자 하는 개념상의 데이터들을 테이블에 사상시켜서 관리
학생테이블의 데이터가 여러 개의 파일에 여러 개 나눠져 있음 => 그러나 어디에 저장되어 있는지는 우리가 알 필요없음
테이블스페이스 안에는 여러 개의 테이블 인텍스이 존재
이런 오브젝트들로 이뤄진 데이터베이스의 구조를 => 스키마
이런 구조의 dB를 준비해놓고
어떤 사용자에게 이 DB를 제공
앞에서 배웠다시피
두가지 종류의 DB 서버를 가지고 있다 PDB, CDB
전제척인 흐름 정리
사용자 계정만들기 & 테이블 스페이스 만들기 -> 우리는 PDB를 이용-> 지난 시간 만들어 놓은 서버에 접속해서 -> PDB 시스템 계정에 접속-> 여기에 테이블을 저장 -> 이 저장된 테이블은 물리적 저장소인 테이블 스페이스에 저장 & 논리적 저장소인 DB에 저장
자 먼저 테이블 스페이스를 만들자
물리적 저장소인데 어떻게 저장되는지 우리가 알 필요는 없으니
만드는 방법만 알자!!
어디에 이 파일을 저정할 것인지 경로도 설정
자 이제는 사용자 계정을 만들자.
이제 서버를 통해서 DB에 접속해보자
위에 가서 지금 사용자 계정 추가했다
새로운 계정을 가지고 새로운 데이터 베이스를 접속해보고 싶다.
※ 호스트 이름 -> IP ( localhost는 개인의 IP를 뜻함. ) , 외부에 있는 곳에 접속할 경우 외부 컴퓨터의 IP 주소를 써주면 된다.
※ 포트 번호 ->PC 내에서 고유하게 사용하는 로컬 주소
※ SID -> 원본 데이터의 이름 ( CDB는 XE 라는 이름으로 지정 되어 있다 ) , 돈 내고 설치하면, CDB의 이름을 지정할 수 있다
※ 서비스 이름 -> 복사한 데이터베이스 들의 별칭.
일단 내 궁금증에 하나의 DB에 다수의 서버를 만드는 이유
알아냈다 일단 우리는 오라클에서 만들어놓은 연습용 pdb를 이용하는데 여기에 데이터 베이스를 만들 수 있으며 우리는 각 사용자 계정에 맞는 서버를 가지고 있으며 하나의 DB에 여러 개의 서버를 만드는 이유는 다양한 권한을 가진 사용자들에게 각 서버를 제공하기 위함. 즉 권한 분할을 위해서 하나의 PCB에 여러 개의 서버를 만드는 것이다.
DML을 통해서 자료형과 칼럼명(속성명) 등을 설정한다.
-Char : 고정 길이
-Varchar : 가변길이 , 500개 다 쓰는게 아니다 2개만 쓰면 498개를 반환
모든 자료형 varchar로 하면 될거 아닌가?
사실 반환하는게 아니라 구분자를 넣는다. 12,0000000000
4번째 데이터 11,2222,4444444,55555 : 따라서 검색할 때 가변길이의 구분자를 계속 새면서 가야한다 -> 검색이 느리다.
-NCHAR과 NVARCHAR은 무엇인가?
한글(유니코드)를 저정하기 위해서 CHAR과 VARCHAR을 이용할 경우 2배 자릿수를 준비해야한다.
EX ) 3글자 한글 CHAR(6) VARCHAR(6)
그러나 NCAHR,NVARCHAR은 글자수로 지정 따라서 더 단순하고 명확하게 데이터 입력
EX ) 3글자 한글 NCHAR(3) NVARCHAR(3)
바람직하지 않은 방식 2문자를 받겠다는
NCHAR(2) 공간이 훨씬 더 절약된다.
2가지 방법이 있다.