본문 바로가기
PHP/생활코딩

5/27(2) 생활코딩

by SKim입니다 2020. 5. 27.

* 오늘의 진도

 PHP

  데이터베이스

 

20. 데이터베이스 - 데이터베이스란?

 

 

 

정보는 DB에 저장할 수도 있지만 파일에 저장할 수도 있다. DB의 장점은

- DB가 정보 저장에 더 최적화되어 있는 SW이다.

 

- DB는 자체적으로 인증 체계를 갖고 있기 때문에

 그 DB 시스템이 설치되어 있는 컴퓨터의 인증이 뚫렸다고 해도,

 그 데이터에 대한 인증을 한번 더 해주기 때문에 보안/기밀성 유지에 더 유리하다.

 

- 대규모의 데이터 요청/추가가 발생했을 때 좀더 원활하게 처리할 수있는 다양한 메커니즘이 존재한다.

  → 데이터의 규모를 유지하는데 훨씬 더 유리하다.

 

- 파일에 데이터를 저장한다면, 데이터를 조회/정렬하는 것을 구현하는데 상당한 컴퓨팅 지식이 필요하다.

  그런데 DB 시스템은 그러한 정보관련 기능적인 요소들을 기본적으로 갖고 있기 때문에,

  간단한 api, 간단한 조작방법을 통해서 고도의 정보처리 기술을 사용할 수 있다.

 

엑셀은 DB의 한 종류이다.

 

메모장에도 정보를 저장할 수 있다.

엑셀을 사용할지, 메모장을 사용할지 선택하는 기준은 무엇일까?

structure(구조)이다.

어떠한 정보를 구조화했을 때, 그 정보를 더 잘 표현/전달할 수 있을 때,

우리는 번호/이름/나이/성별/주소와 같은 정보의 구조를 짜고,

그 구조에 정보를 추가하게 된다.

→ structured(구조화된) 정보

 

엑셀과 DB를 구분하는 가장 큰 차이는 SQL이다.

SQL은 표준화/규격화 되어있다.

관계형 DB로 분류되는 SW들은 모두 SQL이라는 언어를 갖고 있고,

그 언어들 간에는 서로 호환성이 있다.

 

 

20. 데이터베이스 - DB 접속 방법

 

우리가 MySQL 클라이언트 프로그램을 열고

클라이언트에 SQL문을 작성해서 엔터를 치면

이 SQL문이 MySQL 서버로 간다.

 

그럼 MySQL 서버는 그 SQL문을 통해서

우리의 요청을 해석해서 처리한 다음에

그 결과를 MySQL 클라이언트에 보내주면

우리는 그 클라이언트를 통해서 처리된 결과를 볼 수 있게 된다.

 

MySQL 서버를 동작시키는 방법은 OS마다 다르다.

 

 

20. 데이터베이스 - 윈도우에서 MySQL 서버에 접속하는 방법

C:\Bitnami\wampstack-7.4.6-1\mysql\bin\mysql.exe가 MySQL 클라이언트이다.

MySQL 클라이언트 중에 이것의 이름은 MySQL 모니터이다.

이것은 MySQL을 설치하면 기본적으로 제공되는 번들(무료 SW)이다.

 

우리는 이것을 이용해서 DB를 명령(SQL)으로 직접 제어할 수 있게 된다.

이 프로그램은 모든 MySQL 설치판에 설치되어 있다고 볼 수 있기 때문에

그 사용법은 기본 소양으로 알고 있어야 한다.

 

cmd에서 이 경로로 간다.

에러가 뜨면 정상적으로 잘 사용한 것이다.

C:\Bitnami\wampstack-7.4.6-1\mysql\bin\mysql.exe는 MySQL 클라이언트이고,

이 클라이언트를 이용해서 MySQL 서버에 접속하는 방법을 알아보자.

 

mysql -uroot -p비밀번호6자리 -hlocalhost 엔터

= MySQL 모니터를 실행함과 동시에 MySQL 서버에 접속한 것이다.

mysql - 지금부터 MySQL 클라이언트(mysql.exe)를 실행할 것이다.

 

u - username

 

p - password

 

h - host(네트워크에 연결되어 있는 컴퓨터 한 대 한 대를 식별할 수 있는 주소

 우리는 클라이언트와 서버가 하나의 컴퓨터 안에 설치되어 있기 때문에 localhost라고 쓴 것이다.

 만약 다른 컴퓨터에 설치되어 있다면 그 서버의 ip나 도메인을 써줘야 한다.

 

그런데 MySQL에 접속할 때마다 디렉토리 경로를 바꾸는 것이 귀찮을 수 있다.

 

→ 내 컴퓨터 우클릭 - 속성 - 고급 시스템 설정 - 고급 - 환경 변수 - 시스템 변수 - Path 더블클릭

- C:\Bitnami\wampstack-7.4.6-1\mysql\bin를 추가한다.

 

→ cmd를 종료하고 다시 연 후, 디렉토리 변경 없이

mysql -uroot -p비밀번호6자리 -hlocalhost 엔터를 쳐도 똑같이 실행된다.

 

∵ Path는 환경변수인데, 여기에 어떤 경로를 지정하게 되면,

 cmd에서 어떤 명령을 실행했을 때,

 그 명령에 해당되는 프로그램이 현재 디렉토리에 없다면

 OS가 자동으로 Path에 등록된 경로들을 살펴본다.

 

20. 데이터베이스 - Database, Table 제어

 

엑셀이라고 하는 앱에 해당되는 것이 DB에서는 DB 서버이다.

즉, 엑셀이라는 프로그램을 실행했다는 것은

DB 서버에 접속했다는 것과 비슷한 의미이다.

 

엑셀에서는 표에 데이터를 추가한다.

DB에서도 데이터를 표에 추가한다. table이라고 부른다.

 

표 하나가 엑셀 파일 하나라고 볼 수 있다.

표가 아주 많아지면 표들을 디렉토리 별로 분류하게 된다.

∴ 디렉토리의 역할은, 서로 연관되어 있는 표들을 그룹핑해줘서 관리의 편의성을 도모하는 것이다.

 

DB에서 같은 디렉토리의 역할을 하는 것이 DB이다.

이름이 헷갈릴 수 있는데, DB 서버는 서버이고, DB는 그냥 DB이다.

 

 

일반적으로 하나의 앱은 하나의 DB 안에 그 앱에게 필요한 테이블들을 담고 있다.

ex1) 제로보드 - zetx

그 안에 20~30개의 표들이 있다.

어떤 표는 댓글에 대한 표, 어떤 표는 글에 대한 표, 어떤 표는 필터링에 대한 표

이런 식으로 되어 있다.

 

ex2) 생활코딩 홈페이지 - opentutorials라는 DB가 있고

그 안에 표가 20~30개 있다.

 

텍스트큐브나 워드프레스도 다 마찬가지이다.

 

즉 여기에서 하나의 DB는 하나의 앱을 의미한다고 생각하면 된다.

 

 

행(row)은 서로 연관된 데이터이다. 하나의 데이터 세트(홍길동은 11살이고 주소는 ~이다.).

열(column)은 데이터의 형식(이름, 나이, 주소 등)을 의미한다.

 

 

DB 클라이언트를 통해서 DB의 서버에 접속하는 것까지 했다.

이제 DB를 선택해야 하는데, 생성해놓은 DB가 없으므로

지금 DB를 만들고 그 DB를 선택해보자.

 

create database

use + DB명

그 후에 우리가 어떤 명령을 내리면,

그것은 이 DB 안에 있는 테이블들을 대상으로 명령이 하달된다.

 

CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci; 엔터

- DB(디렉토리에 해당)를 만든다. (mkdir과 비슷) 그 이름은 opentutorials이다.

 뒤의 내용은 어떤 문자 코드를 사용할 것인지 지정하는 부분이다.

 한글이 포함된 DB 시스템을 만든다면 이대로 사용하면 된다.

 

use opentutorials;

- 해당 DB 안으로 들어간다. (cd 디렉토리와 비슷)

CREATE TABLE topic (
    id  int(11) NOT NULL AUTO_INCREMENT,
    title  varchar(255) NOT NULL ,
    description  text NULL ,
    created  datetime NOT NULL ,
    PRIMARY KEY (id)
);

 

 

- 테이블을 생성하기 위해 제일 먼저 이름, 나이, 주소, 성별에 해당되는 데이터의 구조를 잡는다.

 테이블을 생성할 것이고 그 테이블의 이름은 topic이다.

 

 id, title, description, created는 데이터의 형식을 의미하는 열이다.

 

 int는 integer이다. = id 열에 들어오는 행들의 값들은 반드시 정수이다.

 11은 출력될 때 11자리까지만 출력된다는 뜻이다.

 

 varchar는 variable character 즉, 변할 수 있는 문자라는 뜻이다.

 255는 최대 255자의 길이를 갖고 있다는 뜻이다.

 

 text는 길이 제한이 없는 아주 큰 텍스트가 들어올 수 있다는 뜻이다.

 

datetime은 시간의 형식을 따르고 있다. 시간의 값을 갖고 있다는 뜻이다.

 

이렇게 int, varchar, text, datetime 등을 지정해주는 것은 아주 중요하다.

이것은 DB가 우리에게 제공해주는 일종의 서비스이다.

ex) 첫 열의 id값으로 들어오는 데이터는 반드시 정수라는 것을 게런티해준다.

 

→ 그 안에 들어가 있는 데이터의 형식을 우리가 확신할 수 있고,

 나중에 이 DB 시스템을 이용해서 프로그래밍을 할 때,

 그 안에 들어있는 데이터가 정확하게 정수인지 문자인지 체크할 필요 없이 바로 사용할 수 있다.

 

NOT NULL은 id값으로 들어오는 값이 반드시 있어야 한다는 뜻이다.

NULL은 description(본문)의 내용은 값이 없을 수도 있다는 뜻이다.

 

AUTO INCREASEMENT는 나중에 데이터를 추가할 때,

행이 추가될 때마다 id값이 자동으로 1씩 증가한다는 뜻이다. (1 2 3 4 5..)

 

- 나중에 한 행을 삭제할 경우, 그 행을 식별할 수 있어야 한다.

그 식별자로 id를 사용할 것이기 때문에,

id값은 우리가 직접 입력하는 것이 아니라,

AUTO INCREASEMENT를 통해서 자동으로 1씩 증가되는 고유한 값을 갖게 된다.

 

배열에서 자동으로 식별자가 0, 1, 2..로 정해지는 것과 같은 컨셉이다.

 

PRIMARY KEY는 설명x

 

 

 

20. 데이터베이스 - Database 데이터의 추가, 변경, 조회, 수정

추가 insert

수정 update

삭제 delete

조회 select

 

INSERT INTO topic (title, description, created) VALUES('html', 'html이란 무엇인가', now());

(id는 제외)

now는 함수이다.

php의 함수가 아니라 DB의 함수이다.

DB가 created에 추가될 때 현재 시간을 알아서 넣어준다.

 

SELECT * FROM topic;

select는 소문자로 써도 되는데, 관습적으로 대문자로 쓴다.

그 장점은 문법적 구성과 실제 데이터를 구분할 수 있다는 점이다.

 

SELECT title, id, created FROM topic;

INSERT INTO topic (title, description, created) VALUES('css', 'html을 꾸며주는 언어', now());

SELECT * FROM topic;

SELECT * FROM topic WHERE id = 2;

SELECT * FROM topic WHERE id = 1 OR id = 2;

SELECT * FROM topic ORDER BY id DESC;

descendent (DESC) ↔ ascendent (ASC)

 

UPDATE topic SET title='cascading style sheet', description='아름다운 언어' WHERE id=2;

' ' or " "

id=2를 빼먹으면 모든 행에 적용되어버린다.

 

DELETE FROM topic WHERE id=2;

 

php를 통해서 DB에 접속하는 방법

- PDO

- MySQL 확장

 

이 때, php에게 접속이나 쿼리 등을 지시하는 함수에 여러가지 스타일이 있다.

- MySQL 확장, PDO, MySQLi

이 중에서  PDO를 다룰 것이다.

 

아직까지 PDO로 제작된 php 앱이 많지 않고

기존에 만들어져 있는 제로보드나 phpb?같은 것들이 MySQL 확장 방식으로 구현되어 있기 때문에

그 코드를 이해하기 위해서 MySQL 확장을 이해해야 한다.

'PHP > 생활코딩' 카테고리의 다른 글

5/29 생활코딩 * xdebug는 리눅스용이라 안봄 * * 뒷부분 안돼서 중단 *  (0) 2020.05.29
5/28 생활코딩  (0) 2020.05.28
5/27 생활코딩  (0) 2020.05.27
5/26 생활코딩  (0) 2020.05.27
5/25(3) 생활코딩  (0) 2020.05.25

댓글