Database
- 여러 응용 시스템을 통해 접근 가능한 공유된 형태의 통합 데이터 집합
- 데이터베이스 특징
- 실시간 접근성
- 지속적인 변화
- 동시 공유
- 내용에 대한 참조
- 데이터의 논리적 독립성
- 데이터베이스 장점
- 데이터 중복의 최소화
- 데이터 공유
- 일관성, 무결성, 보안성 유지
- 최신 데이터 유지
- 데이터의 표준화
- 데이터의 논리적, 물리적 독립성
- 용이한 데이터 접근
- 데이터 저장 공간의 절약
- 데이터베이스 단점
- 데이터베이스 전문가 필요
- 많은 비용 소요
- 데이터 백업과 복구의 어려움
- 시스템 복잡
- 대용량 디스크로 액세스 집중될 경우 과부하 발생
- 데이터베이스 모델 종류
- 계층형 데이터베이스
- 데이터의 관계를 트리 구조로 정의하고 부모 자식의 형태를 갖는 구조 ( 요즘 안쓰임 )
- 네트워크형 데이터베이스
- 네트워크상의 노드 형태로 논리적으로 표현한 데이터 모델
- 각 엔티티들을 서로 대등한 관계로 구성
- 복잡하고 구조 변경이 어려움
- 관계형 데이터베이스
- 집합론과 논리 분야의 개념을 사용한 구조
- 기존 파일 시스템의 동시성 제한 및 데이터 불일치성 문제 해결
- 정규화와 테이블 모델링을 통한 ANOMALY 현상 ( 정보의 이상 현상으로 삽입, 갱신, 삭제 이상을 뜻함 ) 과 데이터 중복성을 제거
- 동시성 관리, 병행 제어를 통해 다수의 사용자가 동시 데이터를 공유하고 조작 가능
- 메타 데이터를 통해 데이터를 체계화 하고 표준화하여 데이터의 품질을 확보할 수 있음
- 인증된 사용자만이 참조할 수 이쓴 보안기능 제공
- 제약 조건을 사용하여 데이터의 무결성 보장
- 데이터를 복구하는 기능 제공
DBMS
- 다수의 컴퓨터 사용자들이 데이터베이스 내의 데이터를 기록하거나 접근할 수 있도록 해주는 프로그램
- DBMS 특징
- 데이터의 독립성
- 물리적 독립성
- 데이터베이스의 크기를 늘리거나 성능 향상을 위해 데이터 파일을 늘리거나 새로 추가하더라도 관련된 응용 프로그램을 변경할 필요가 없음
- 논리적 독립성
- 데이터 베이스는 논리적인 구조로 다양한 응용 프로그램의 논리적인 요구를 만족시킬 수 있음
- 데이터의 무결성
- 여러 경로를 통해 잘못된 데이터가 발생하는 경우의 수를 방지하는 기능
- 데이터의 유효성 검사를 통해 데이터의 무결성을 구현
- 데이터의 보안성
- 데이터의 일관성
- 데이터 중복의 최소화
RDBMS
- 데이터베이스는 최소한의 의미를 가지는 테이블로 구성, 그 테이블들을 컬럼으로 연결한 것
- 상위 정보를 저장하는 테이블의 Primary Key와 하위 정보를 저장하는 테이블의 Foreign Key를 이용하여 서로 다른 테이블 상에서 연관된 정보를 얻을 수 있도록 해야함
SQL ( Structured Query Language )
- 테이블내의 데이터를 검색하거나 조작하는데 있어서 사용되는 언어
- 결과 중심적인 언어
- ANSI SQL
- SQL 구문 종류
- 데이터 정의 언어 ( DDL )
- 데이터 조작 언어 ( DML )
- 데이터 제어 언어 ( DCL )
- 트랜젝션 제어 언어 ( TCL )
관계에 대한 정의
Ubuntu mysql 설치
-
sudo
-
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계층에서 전송 계층 위에 놓임
- 전송 계층 위에서 전송계층의 프로토콜 제어를 위한 코드 제공
- 소켓은 엔드포인트!! 통신의 양 끝단에서 입구와 출구 역할 수행
소켓이 하는 일
- 소프트웨어와 소프트웨어를 연결
- 소프트웨어간 데이터 통신
- 인터넷에서 소켓을 찾아 연결하고 데이터를 송수신
소켓 API 실행 흐름 ( Client, Server )
-
클라이언트
- 소켓 생성, 연결 요청, 데이터 송수신, 소켓 닫기
-
서버
- 소켓 생성, 결합, 주시, 받아들이기, 데이터 송수신, 소켓 닫기
클라이언트 흐름
- 클라이언트 소켓 생성
- 연결 대상에 대한 정보가 들어있지 않은 Socket ( 껍데기 소켓 )을 생성
- 소켓의 종류를 선택, TCP 소켓 = stream, UDP 소켓 = 데이터그램 타입
- 연결 요청 ( Connection )
- 연결 대상한테 요청을 보냄. IP 주소와 서비스 포트 번호 ( ex, 000.000.000.000 : 0000 )로 연결하고 싶은 타겟대상 특정
- 요청에 대한 결과가 돌아오면 Connect의 실행이 끝남
- 데이터 송수신 ( Send, Recieve )
- 송신할 땡;는 데이터를 언제, 얼마나 보낼것인지 알 수 있지만, 수신할 때에는 상대방이 언제, 얼만큼의 데이터를 보낼 것인지 알수가 없다는 차이점이 있음
- 때문에, 수신하는 API는 별도의 Thread에서 진행
- 소켓 닫기
- 더 이상의 데이터 송수신이 없다고 판단되면 소켓을 닫음
서버의 흐름
- 서버 소켓 생성
- 클라이언트 소켓과 마찬가지로 연결 대상에 대한 정보가 들어있지 않은 껍데기 소켓 생성
- 바인딩( bind )
- 서버 소켓이 받은 데이터를 클라이언트에게 다시 보내줘야할 때 프로세스들의 포트 번호가 동일하면 혼란이 생김
- 즉, 서버 소켓이 고유한 포트 번호를 만들 수 있도록 소켓과 포트번호를 결합해주는 작업이 필요
- 위 그림처럼 소켓 포트 번호가 중복되면 10000 포트로 데이터 수신될 때 어떤 소켓이 처리를 해야하는지 결정할 수 없는 문제 발생
- 이러한 이유로 운영체제에서는 소켓들이 중복된 포트 번호를 사용하지 않도록 내부적으로 포트 번호와 소켓 연결 정보를 관리
- 하나의 프로세스는 동일한 포트 번호를 가진 여러 개의 소켓을 결합할 수 있음!!
- 클라이언트 연결 요청 대기
- 서버 소켓에서 포트번호와 바인딩 작업을 마치고 나면 클라이언트가 연결 요청을 할 때까지 기다리다가 요청이 오면 대기 상태를 종료하고 리턴
- 클라이언트 연결 수립
- 연결 요청을 받아들임과 동시에 새로운 소켓 생성
- 새로운 소켓과 클라이언트 소켓을 맵핑하여 넘겨줌
-
데이터 송수신
-
소켓 닫기
- 클라이언트와 동일. 자신이 생성한 소켓들도 관리해야함
참고자료
링크텍스트
링크텍스트
링크텍스트
링크텍스트
링크텍스트