DB 안쓰면 안돼? 응 안돼
- ### **저장 공간 왜 필요할까?**- application 종료시 휘발하는 데이터를 영구 보존하기 위해서 저장을 해야한다.
- 일반 서식 file (hwp, img, avi ) 물리적인(HDD, SDD, USB, CD ) 저장 방식
-
그럼 왜 굳이? DB
- 접근성 (협업성)
- 파일은 data 모델링이 힘들다
- 보안성 - DB 유저별 권한 관리가 가능하다.
- 공간 효율성 - 중복을 줄여 낭비를 막는다.
- 데이터의 탐색 / 업데이트 어려움
- 확장성
-
DB 는 API server와 개념적으로 동일하다
- 앤드포인트가 하나인 api
- SQL (Stcuctured Query Language) DB를 조작하는 언어
- mySQL - 프로토콜 ( 주고받는 규약, http처럼 다른 관계형 postGre, mariaDB 등도 프로토콜이다.)
- DB 주소 알아야 접근할 수 있다. (통상 쓰는 port 가 있다.)
- FE <-> BE <-> DB
-
DB는 어떻게 구성 되는가?
-
관계형 DB
- 데이터의 완전성
- 정해진 데이터만 들어갈 수 있도록 한다.
- foreign key 외부에 걸린키 외부 테이블에 있는 데이터만 들어간다.
- 대량 변동 가능성을 줄여준다.
- 중복을 줄여준다.
- 디스크의 효율성
- ID를 쓰는 이유
- ID는 변동이 안생긴다.
- ID의 값은 변동 가능하다
- context 프리, 의미가 없는 값이기 때문에 다른 데이터의 영향을 안받고 독립해 있다.
- 소프트 딜릿, 하드딜릿
- 하드딜릿 DB에서 실제 삭제
- 소프트딜릿 삭제한것처럼 db에 체크
- 대부분은 소프트로, 하드딜릿 하면 문제가 생김(관계가 맺어져 있기때문이다. )
- 법적으로 정해진 사항이 아니면 대부분 소프트 딜릿을 한다.
- Table 간의 관계 표현
- 1 to 1 - 하나의 로우에 다른 테이블의 로우가 1:1로 매칭된다.
- 1 to many 하나의 로우에 다른테이블의 여러로우가 매칭된다.
-
many to many
- 여러개의 로우가 여러개의 로우들과 관계를 맺고 있다.
- 주어진 테이블 만으로는 관계 표현이 불가능하다.
- join 테이블이 필요하다.
- 트랜잭션
- 여러개의 오퍼레이션을 하나의 과정으로 묶는다.
- 하나라도 실패하면 실패,
- 성공하거나, 실행하기전 상태로 돌아간다. ( commit or rollback)
-
example
- user - user profile
- delete & insert 할경우 , delete 만 하고
-
비관계형 DB
- 저장이 유연하다.
- 완전성이 떨어진다.
- 데이터 정의(데이터 스키마) 하기 어려운경우에 쓰인다. - 로우데이타, 로그
- 스케일링업 하기 좋다.
- 대부분은 정형 데이터이기 때문에 관계형을 많이 쓴다.
- DB의 확장
-
관계형 - 스케일 업
- 서버 성능 강화 - cpu 성능강화 - 서버를 멈추고 장비를 강화하고 다시 켜야한다.
- 훨씬 어렵다.
-
비관계형 - 스케일 아웃
- 서버 수 10대에서 100대로 늘린다.
- 궁극적으로 관계형만은 사용할 수 없다.