목차
1. 데이터베이스
- 데이터베이스 정의
- 데이터베이스 특징
- 데이터베이스 시스템, 구성요소
- SQL(DDL, DML, DCL)
- 테이블 구성요소
2. DB 설치(MySQL로 설치 진행)
- 서버별 역할 분배
- MySQL 서버 설치
- MySQL 클라이언트 설치
- 원격 접속
- DB 명령어
- DB 조건문
3. PHP 설치방법
4. PHP 파일을 통해 DB에 저장
- 설정 방법
- 테스트
데이터베이스
데이터베이스 정의
- 특정 조직의 업무를 수행하는데 필요한 상호 관련된 데이터들의 모임
- 통합된 데이터 : 자료의 중복을 배제한 데이터의 모임
- 저장된 데이터 : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
- 운영 데이터 : 조직의 고유 업무를 수행하는데 반드시 필요한 자료
- 공용 데이터 : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료
데이터베이스 특징
- 실시간 접근성 : 수시적이고 비정형적인 조회에 대해 실시간 처리에 의한 응답이 가능
- 계속적인 변화 : DB의 상태는 동적이므로, 새로운 데이터의 삽입, 삭제, 갱신으로
항상 최신의 데이터를 유지
- 동시공용 : DB는 서로 다른 목적을 가진 여러 사용자들을 위한 것이므로
다수의 사용자가 동시에 같은 내용의 데이터를 이용가능해야함
- 내용에 의한 참조 : DB에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에
의해서가 아닌 사용자가 요구하는 데이터 내용으로 데이터를 검색
데이터베이스 시스템
- DB를 이용하여 자료를 저장, 관리하여 정보를 얻어내는데 필요한 컴퓨터 중심 시스템
데이터베이스 시스템 구성요소
- 데이터베이스 : 물리적인 기억 장치에 저장된 데이터의 집합체
- 스키마 : DB내의 데이터의 구조, 관계, 제약조건에 대한 명세
- 속성이라고 생각하자!
- DB 관리 시스템(DBMS) : 사용자가 DB를 생성하여 안정적이고 효율적으로
운영하는데 필요한 모든 기능들을 제공하는 SW
- DB Language : 널리 사용되는 관계형 DB에서는 SQL이 모든 기능을 담당
- DDL, DML, DCL 포함
- 사용자 : 데이터베이스 관리자(DBA), 응용프로그래머, 최종사용자
- H/W : DB가 저장되는 기억장치
SQL(Structured Query Language)
- 구조적 질의 언어
- 해당 질의 언어를 통해 DB를 제어, 관리
- DDL(Data Definition Language) : 데이터 정의어
- DB를 정의하는 언어
- Data를 생성, 수정, 삭제
- 데이터의 전체의 골격을 결정하는 역할
- DB 관리자, 설계가자 주로 사용
- 스키마, Domain, Table, INDEX 등을 정의하거나 변경, 삭제할 때 사용
종류 | 역할 |
CREATE | 데이터베이스, 테이블 등을 생성 |
ALTER | 테이블 수정 |
DROP | 데이터베이스 테이블을 삭제 |
TRUNCATE | 테이블을 초기화 |
- DML(Data Manipulation Language) : 데이터 조작어
- 정의된 DB에 입력된 레코드를 조회하거나 수정, 삭제
- DB 사용자가 질의어를 통해 저장된 데이터를 실직적으로 처리하는데 사용되는 언어
- DB 사용자와 DBMS 간 인터페이스 제공
종류 | 역할 |
SELECT | 데이터를 조회 |
INSERT | 데이터를 삽입 |
UPDATE | 데이터를 수정 |
DELETE | 데이터를 삭제 |
- DCL(Data Control Language) : 데이터 제어어
- DB에 접근하거나 객체에 권한 부여시 사용
- 데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의
종류 | 역할 |
GRANT | 특정 DB 사용자에게 특정 작업에 대한 수행권한 부여 |
REVOKE | 특정 DB 사용자에게 특정 작업에 대한 수행권한 박탈 |
COMMIT | 트랜잭션의 작업을 원래대로 처리 |
ROLLBACK | 트랜잭션의 작업을 취소 및 원래대로 복구 |
테이블 구성요소
- 릴레이션(= 테이블) : 관계형 DB에서 정보를 저장하는 기본단위(행과열, 고유 이름)
- Excel의 Sheet 생각하자!
- 속성(Attribute) : 하나의 열은 여러개의 속성 정보 표시
- 동일 이름의 속성 존재 불가
- 차수(Degree) : 하나의 릴레이션에 들어있는 속성의 수
- 튜플(Tuple, 레코드) : 엔티티의 특정 인스턴스에 관한 값들의 모임
- 카디날리티 : 릴레이션의 튜플의 갯수
- 도메인 : 속성들이 가질 수 있는 값
- 슈퍼키 : 특정튜플식별을 하는 유일성을 만족
- 후보키 : 각 행을 유일하게 식별할 수 있는 최소한의 속성 집합
- 기본키의 후보들
- 최소성 만족
- 기본키 : 후보키들 중 하나를 선택한 키
- 최소성, 유일성 모두 만족
- NULL값을 절대 못가지며, 중복값 x
- 대체키 : 기본키로 지정하고 남은 후보키
DB 설치
- MySQL, MariaDB 중 MySQL로 설치 진행
MySQL 서버 설치
- 설정 이후, 문제 없이 설치되는 것을 확인
- 비밀번호를 필히 변경해야하는데 초기 비밀번호가 로그파일에 존재하므로, 확인이 필수다
- 초기 비밀번호를 찾아 들어온 후, 처음 작성하는 비밀번호는 비밀번호 강도 체크이며
그 다음 작성하는 비밀번호가 MySQL의 비밀번호가 된다
- anonymous 사용자 삭제나, 원격에서 루트 로그인 불허 등을 묻는다
- anonymous 사용자 삭제를 하게 되면 로그인시 -u 옵션이 필요
- test DB 생성, 변경 권한을 테이블에 적용에 대한 질문
- p옵션 뒤에 바로 '비밀번호'로 접속이 가능하지만, 보안상 좋지 않다
MySQL 클라이언트 설치
- Reposiotry 구성 이후, gpgcheck 해제 후 설치 진행
MYSQL 원격접속
- db이름.테이블 이름 순으로 설정
- DB에서는 %가 모든 원격지를 뜻한다
- MySQL의 포트는 3306 포트이다
DB 명령어
- mysql DB에 접속하여 user 테이블을 조회하는 것과 똑같은 결과값을 도출
- *은 모든 칼럼을 조회하는 것이지만, 원하는 칼럼만 입력하여 조회도 가능
- no, name, id, pass 총 4가지의 칼럼을 추가
- not null은 빈칸을 허용하지 않는다는 의미
- insert를 사용하여 각각 칼럼에 맞게 레코드를 추가한다
DB 조건문
- 원래의 select * from testtb라면 삽입된 모든 값을 불러오나, where 조건문을 통해
원하는 레코드만 불러오게 되는 것이다
- ;을 뒤에 빼먹었다면 다음줄로 넘어가서 작성할 수도 있다
- 현재 레코드에는 1, 4번 둘다 존재하므로 2개가 다 조회된다
- between A and B를 사용하여 조회 가능
- where in 조건절을 사용하여 조회 가능
- where 원하는 컬럼 in 조건
- like는 특정문자나 문자열을 포함하고 있는 값을 검색하고 싶을 때 사용
- k%는 k로 시작하는 모든 문자열을 검색
- limit을 통해 검색하는 구문의 갯수를 제한할 수 있다
- 레코드 값은 0부터 시작한다
- 즉, no=1의 LEE 칼럼의 레코드 값은 0이다
- union을 통해 조회할 때 중복되는 값은 1개만 표시해준다
- 뒤의 칼럼 내용을 잘 모를 때 쓰기 좋은 방법이다
- testtb는 7까지만 존재, uniontb와 합쳐지면서 uniontb의 값이 조회
- 즉, 칼럼은 유효하나 testtb에선 만족하는게 없어 uniontb에서만 나온다
- SQL Injection : 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고
실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위
- 1=1은 true이므로, no=8이 testtb에 없는데도 불구하고 모든 레코드가 조회 가능
- ID에는 test1을 넣고 1=1을 password에 넣게 되는 것
- 원래라면 값을 가져와서 비교를 해야하는데 1=1을 사용함으로써 논리식으로 만든 것
- 연산자라 어떻게 되는 참이되므로 다 출력되게 되는 것이다
PHP 설치방법
- 사전 설정 없이 그냥 설치하게 되면 5.4버전이 설치되어 MySQL과 호환이
안되는 문제가 발생할 수 있으므로 꼭 5.7버전으로 설치하는 것을 추천
- epel-release : 저장소
- yum-utils : yum-config manager 관리툴이 들어가 있다
- CLI 방식 설치 및 MySQL과 연동을 위한 php-mysql 설치
- 설치 완료 후, 7.3버전이 설치되었는지 꼭 확인
PHP 파일을 통해 DB에 저장
설정 방법
- index.php, person1.php, insert1.php, table1.php을 통해 테스트
- DB의 이름이 member로 설정되어 있으므로, member라는 이름의 DB 생성 필수
테스트
- 해당 값들 입력 후, 회원가입 클릭
- 테이블 조회를 통해 table1.php로 이동