관계형 데이터베이스 (1일차)

Tyun_Record·2023년 8월 21일
0

Database

  • 여러 응용 시스템을 통해 접근 가능한 공유된 형태의 통합 데이터 집합
  • 데이터베이스 특징
    • 실시간 접근성
    • 지속적인 변화
    • 동시 공유
    • 내용에 대한 참조
    • 데이터의 논리적 독립성
  • 데이터베이스 장점
    • 데이터 중복의 최소화
    • 데이터 공유
    • 일관성, 무결성, 보안성 유지
    • 최신 데이터 유지
    • 데이터의 표준화
    • 데이터의 논리적, 물리적 독립성
    • 용이한 데이터 접근
    • 데이터 저장 공간의 절약
  • 데이터베이스 단점
    • 데이터베이스 전문가 필요
    • 많은 비용 소요
    • 데이터 백업과 복구의 어려움
    • 시스템 복잡
    • 대용량 디스크로 액세스 집중될 경우 과부하 발생
  • 데이터베이스 모델 종류
    • 계층형 데이터베이스
      • 데이터의 관계를 트리 구조로 정의하고 부모 자식의 형태를 갖는 구조 ( 요즘 안쓰임 )
    • 네트워크형 데이터베이스
      • 네트워크상의 노드 형태로 논리적으로 표현한 데이터 모델
      • 각 엔티티들을 서로 대등한 관계로 구성
      • 복잡하고 구조 변경이 어려움
    • 관계형 데이터베이스
      • 집합론과 논리 분야의 개념을 사용한 구조
      • 기존 파일 시스템의 동시성 제한 및 데이터 불일치성 문제 해결
      • 정규화와 테이블 모델링을 통한 ANOMALY 현상 ( 정보의 이상 현상으로 삽입, 갱신, 삭제 이상을 뜻함 ) 과 데이터 중복성을 제거
      • 동시성 관리, 병행 제어를 통해 다수의 사용자가 동시 데이터를 공유하고 조작 가능
      • 메타 데이터를 통해 데이터를 체계화 하고 표준화하여 데이터의 품질을 확보할 수 있음
      • 인증된 사용자만이 참조할 수 이쓴 보안기능 제공
      • 제약 조건을 사용하여 데이터의 무결성 보장
      • 데이터를 복구하는 기능 제공

DBMS

  • 다수의 컴퓨터 사용자들이 데이터베이스 내의 데이터를 기록하거나 접근할 수 있도록 해주는 프로그램
  • DBMS 특징
    • 데이터의 독립성
      • 물리적 독립성
        • 데이터베이스의 크기를 늘리거나 성능 향상을 위해 데이터 파일을 늘리거나 새로 추가하더라도 관련된 응용 프로그램을 변경할 필요가 없음
      • 논리적 독립성
        • 데이터 베이스는 논리적인 구조로 다양한 응용 프로그램의 논리적인 요구를 만족시킬 수 있음
    • 데이터의 무결성
      • 여러 경로를 통해 잘못된 데이터가 발생하는 경우의 수를 방지하는 기능
      • 데이터의 유효성 검사를 통해 데이터의 무결성을 구현
    • 데이터의 보안성
    • 데이터의 일관성
    • 데이터 중복의 최소화

RDBMS

  • 데이터베이스는 최소한의 의미를 가지는 테이블로 구성, 그 테이블들을 컬럼으로 연결한 것
  • 상위 정보를 저장하는 테이블의 Primary Key와 하위 정보를 저장하는 테이블의 Foreign Key를 이용하여 서로 다른 테이블 상에서 연관된 정보를 얻을 수 있도록 해야함

SQL ( Structured Query Language )

  • 테이블내의 데이터를 검색하거나 조작하는데 있어서 사용되는 언어
  • 결과 중심적인 언어
  • ANSI SQL
    • 미군 표준 협회에서 정립한 표준 SQl 문
  • SQL 구문 종류
    • 데이터 정의 언어 ( DDL )
    • 데이터 조작 언어 ( DML )
    • 데이터 제어 언어 ( DCL )
    • 트랜젝션 제어 언어 ( TCL )

관계에 대한 정의

  • 관계형 데이터베이스의 관계
    • 업무적인 연관성
  • 관계의 유형
    • 존재의 유형
      • ex) 부서와 사원
    • 행위의 유형
      • ex) 고객과 주문

Ubuntu mysql 설치

  • sudo

    • 관리자(root) 권한으로 실행하겠다는 뜻
  • mysql 서버 패키지 검색

  • mysql 서버 패키지 설치

  • ifcifg 파일 설정을 위해 net-toos 설치

  • mysql 환경설정 ( 모든 ip에서 접속 가능하게 설정 )

    • sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
  • mysql 사용자 추가

    • CREATE USER [IF NOT EXISTS] user IDENTIFIED [WITH auth-plugin] BY 'auth-string';
      • mysql> CREATE USER student IDENTIFIED BY'1234';
  • mysql 사용자 권한 부여

    • GRANT priv_type ON object_type TO user_or_role[WITH GRANT OPTION]
      • mysql> GRANT all privileges ON study.* TO student;
  • mysql 데이터베이스 생성

  • windows CMD에서 생성한 DB 접근

  • mysql 사용자 권한 해제

    • REVOKE priv_type ON object_type FROM user_or_role
      • mysql> REVOKE all privileges ON study.+ FROM student
  • 관리자 계정 생성 ( 계정 생성 후 모든 권한을 주는 것 )

  • Workbench 에서 windows mysql에 연결

  • Workbench 에서 linux mysql에 연결


    • Workbench에서도 sql 작업이 가능!
  • 비밀번호 변경

    • ALTER USER [IF EXISTS] user IDENTIFIED [WITH auth-plugin] BY 'new_password'
      • mysql> ALTER USER student IDENTIFIED BY '1234';
  • 일반 계정이 자신의 비밀번호 변경

    • SET PASSWORD = 'new_password'
  • 관리자 계정이 student 계정의 비밀번호 변경

    • SET PASSWORD FOR student = 'new_password'
  • root 계정의 비밀번호 관리

    • ubuntu 시스템의 mysql 관리자 계정은 인증 플러그인이 auth_socket으로 되어있음
    • auth_socket 플러그인은 unix socket을 사용한 접속 만을 허용하며 현재 시스템 권한으로 접속을 허용
    • 즉, root 계정의 plugin이 auth_socket 이라면 시스템의 root 권한을 사용하여 접속해야함
  • ROLE의 생성

    • ROLE을 사용하면 보다 쉽게 사용자 권한을 관리할 수 있음
    • 한 계정에 여러 ROLE 부여가능, 계정은 선택해서 ROLE 활성화 가능
    • mysql 8.0의 ROLE은 user 테이블에 생성됨
    • CREATE ROLE [IF NOT EXISTS] roe[, role]...
    • mysql> CREATE ROLE 'admin'
  • ROLE에 권한 부여

  • student 계정에 권한 설정된 ROLE 부여

  • ROLE 활성화를 위해 student 계정 접속

  • ROLE 활성화 후 connect으로 재접속

    • SET DEFAULT ROLE 'role' [TO accout];
  • ROLE 활성화된 모습

socket이란?

  • 프로그램이 네트워크에서 데이터를 주고 받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부
  • 일반적으로 TCP/IP 프로토콜 사용
    • TCP/IP 4계층에서 전송 계층 위에 놓임
    • 전송 계층 위에서 전송계층의 프로토콜 제어를 위한 코드 제공
    • 소켓은 엔드포인트!! 통신의 양 끝단에서 입구와 출구 역할 수행

소켓이 하는 일

  • 소프트웨어와 소프트웨어를 연결
    • IP와 서비스 포트를 통해 찾음
  • 소프트웨어간 데이터 통신
    • 인터넷에서 소켓을 찾아 연결하고 데이터를 송수신

소켓 API 실행 흐름 ( Client, Server )

  • 클라이언트

    • 소켓 생성, 연결 요청, 데이터 송수신, 소켓 닫기
  • 서버

    • 소켓 생성, 결합, 주시, 받아들이기, 데이터 송수신, 소켓 닫기

클라이언트 흐름

  1. 클라이언트 소켓 생성
  • 연결 대상에 대한 정보가 들어있지 않은 Socket ( 껍데기 소켓 )을 생성
  • 소켓의 종류를 선택, TCP 소켓 = stream, UDP 소켓 = 데이터그램 타입

  1. 연결 요청 ( Connection )
  • 연결 대상한테 요청을 보냄. IP 주소와 서비스 포트 번호 ( ex, 000.000.000.000 : 0000 )로 연결하고 싶은 타겟대상 특정
  • 요청에 대한 결과가 돌아오면 Connect의 실행이 끝남

  1. 데이터 송수신 ( Send, Recieve )
  • 송신할 땡;는 데이터를 언제, 얼마나 보낼것인지 알 수 있지만, 수신할 때에는 상대방이 언제, 얼만큼의 데이터를 보낼 것인지 알수가 없다는 차이점이 있음
  • 때문에, 수신하는 API는 별도의 Thread에서 진행

  1. 소켓 닫기
  • 더 이상의 데이터 송수신이 없다고 판단되면 소켓을 닫음

서버의 흐름

  1. 서버 소켓 생성
  • 클라이언트 소켓과 마찬가지로 연결 대상에 대한 정보가 들어있지 않은 껍데기 소켓 생성

  1. 바인딩( bind )
  • 서버 소켓이 받은 데이터를 클라이언트에게 다시 보내줘야할 때 프로세스들의 포트 번호가 동일하면 혼란이 생김
  • 즉, 서버 소켓이 고유한 포트 번호를 만들 수 있도록 소켓과 포트번호를 결합해주는 작업이 필요

  • 위 그림처럼 소켓 포트 번호가 중복되면 10000 포트로 데이터 수신될 때 어떤 소켓이 처리를 해야하는지 결정할 수 없는 문제 발생
  • 이러한 이유로 운영체제에서는 소켓들이 중복된 포트 번호를 사용하지 않도록 내부적으로 포트 번호와 소켓 연결 정보를 관리
  • 하나의 프로세스는 동일한 포트 번호를 가진 여러 개의 소켓을 결합할 수 있음!!

  1. 클라이언트 연결 요청 대기
  • 서버 소켓에서 포트번호와 바인딩 작업을 마치고 나면 클라이언트가 연결 요청을 할 때까지 기다리다가 요청이 오면 대기 상태를 종료하고 리턴

  1. 클라이언트 연결 수립
  • 연결 요청을 받아들임과 동시에 새로운 소켓 생성
  • 새로운 소켓과 클라이언트 소켓을 맵핑하여 넘겨줌

  1. 데이터 송수신

  2. 소켓 닫기

  • 클라이언트와 동일. 자신이 생성한 소켓들도 관리해야함

참고자료

링크텍스트
링크텍스트
링크텍스트
링크텍스트
링크텍스트

0개의 댓글