All Articles

관계형 DB 알아보자

DB 안쓰면 안돼? 응 안돼

- ### **저장 공간 왜 필요할까?**
  • application 종료시 휘발하는 데이터를 영구 보존하기 위해서 저장을 해야한다.
  • 일반 서식 file (hwp, img, avi ) 물리적인(HDD, SDD, USB, CD ) 저장 방식
  • 그럼 왜 굳이? DB

    1. 접근성 (협업성)
    2. 파일은 data 모델링이 힘들다
    3. 보안성 - DB 유저별 권한 관리가 가능하다.
    4. 공간 효율성 - 중복을 줄여 낭비를 막는다.
    5. 데이터의 탐색 / 업데이트 어려움
    6. 확장성
  • DB 는 API server와 개념적으로 동일하다

    • 앤드포인트가 하나인 api
    • SQL (Stcuctured Query Language) DB를 조작하는 언어
    • mySQL - 프로토콜 ( 주고받는 규약, http처럼 다른 관계형 postGre, mariaDB 등도 프로토콜이다.)
    • DB 주소 알아야 접근할 수 있다. (통상 쓰는 port 가 있다.)
    • FE <-> BE <-> DB
  • DB는 어떻게 구성 되는가?

    • Table

    • column 데이터 정보 구획
    • row 데이터를 채우는 자료들
  • 관계형 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대로 늘린다.
    • 궁극적으로 관계형만은 사용할 수 없다.