개요

데이터베이스를 외부에(AWS나 NCP, 혹은 다른 PC나 가상환경 등등) 두고 그 곳에 접속하는 환경을 만들 때 고려해야 할 것들을 정리했다.

고려해야할 4가지 그림

1. 접속 가능 포트 설정

먼저 외부 서비스에 접속하기 위해서 Mysql로 접속하기 위한 포트를 포트포워딩 해주어야 한다. NCP에서는 ACG 규칙에 추가해주는 것으로 설정이 가능하다.

2. Mysql에 접속 가능한 IP주소

Mysql에 접속가능한 IP주소는 default로 localhost로 지정되어 있다. 이를 수정하기위해 다음과 같은 경로에 있는 파일을 열어서 bind-address를 localhost에서 0.0.0.0(전역) 으로 수정해주거나 접근가능하게 하고싶은 IP주소를 입력해서 외부에서 접속 가능하게 할 수 있다.

/etc/mysql/mysql.conf.d/mysqld.cnf

  • 위 사진 맨 아래의 bind-address의 값이 초기에 127.0.0.1로 되어있다. 이 것을 원하는대로 바꾸면 된다.

3. user에 접속가능한 IP주소 설정

위 그림을 예로 들면 userA에 접근가능한 IP주소는 127.0.0.1인데 2.2.2.2인 IP에서 접근을 시도해서 user에 로그인 할 수 없다. 로그인 하고싶은 IP에 접속 가능하도록 추가해준다.

CREATE USER ‘userA’@’%’ IDENTIFIED BY ‘user_password’;

4. 접근 가능한 database인지 확인

user가 접근하고자 하는 database의 접근권한이 없으면 접근할 수 없다. 아래와 같은 명령어를 통해 접근 권한을 부여하자.

grant all privileges on 'DB 이름'.'Table 이름' to ‘root’@‘%’ identified by ‘root의 패스워드’

'웹 프로그래밍' 카테고리의 다른 글

데이터베이스 MYSQL 실습  (0) 2017.12.28
데이터베이스 MYSQL 이론  (0) 2017.12.23
PHP 실습  (0) 2017.12.22
JavaScript 실습  (0) 2017.12.21
JavaScript 실습  (0) 2017.12.20
데이터베이스 MYSQL



데이터베이스 : 정보를 관리하는 전문 에플리케이션

File과 DATABASE



File 
 가장 기본적이고 원시적인 형태의 데이터 관리 수단
 어느 시스템에서나 쓸 수 있고 무언가를 설치할 필요도 없는 매우 심플하다.

DATABASE
  공부해야, 여러가지를 설치해야 쓸 수 있다.
  궁극적으로 웹에플리케이션을 만들기 위해서는 DATABASE가 필수적이다. 
  가장 큰 장점 : 안전하다. 
  또 장점 : 빠르다(index) 정보를 잘 정리해둬서 빠르게 찾을 수 있다. 
  프로그래밍적으로 제어가능하다 (SQL 이용)
  



데이터베이스 분류

현재 가장 성공적인 데이터베이스 : 관계형 데이터베이스 




MYSQL : opensource

웹과 매우 깊게 얽혀있다.

MySQL의 주인 변천사

MySQL AB -> SUN -> 'Oracle'



Database를 이해하는데 가장 핵심적인 키워드

"Structured"

데이터베이스 MYSQL


글로된 정보를 표로 정리할 수 있다. 

왼쪽 정보보다 오른쪽 정보가 더 정돈된 느낌이다 => 구조화 되었다.

표 = > table

=> 대표적인 프로그램 EXCEL

장점 => 나이순으로, 성별로 등등 정렬이 용이하다. 

EXCEL도 일종의 데이터베이스

but 진짜 데이터베이스와의 가장 중요한 차이점

=> SQL

Structured Query Language

Structured : 표와 같은 정보들로 여기서 해석하면 됌

Query : 질의하다. 질문하다 

컴퓨터에게 구조화된 정보를 질의하는 프로그래밍 언어 => SQL




Client 컴퓨터에서 Server 컴퓨터에게 

명령을 하면 전달이 된다. 이 전달할 때 사용하는 언어 => SQL

Server컴퓨터는 그 응답으로 Client 컴퓨터에게 표로 된 정보를 전달한다. 



한번 더 복습



MySQL 사용법

MySQL에서 가장 핵심적인 기술 => 서버쪽 기술

이번 수업에서 쓸 프로그램

MySQL Client 쪽 => MySQL monitor



MySQL monitor

MySQL 을 설치하면 자동으로 설치되어 있다.

단점. 명령어를 줘서 작동하는 방식으로 조금 어려울 수도 있다. 

장점. 작동하는 과정을 투명하게 보여줘서 교육적인 가치가 높다. 



Window에서 MySQL monitor 실행

Window키 + R => cmd실행

MySQL monitor의 위치 ==> C, bitnami, wamp, mysql, bin, mysql.exe

cd C:\Bitnami\wampstack-7.1.12-0\mysql\bin 입력
mysql -hlocalhost -uroot -p 입력

Enter password: 에 bitnami설치할 때 입력했던 비밀번호 입력



mysql -hlocalhost -uroot -p 의 의미

mysql => mysql monitor라는 프로그램을 실행시키겠다는 의미

-hlocalhost => -h 뒤에적은 주소에 접속한다. => 여기서는 mySQL이 설치되어있는 그 폴더에 접속한다. 

-uroot => -u 뒤에따라오는 것이 비밀번호라는 것이다. => localhost에 접속할 수 있는 비밀번호가 root라는 뜻

-p => 비밀번호를 입력받아라 라는 뜻 => -p 뒤에 바로 password를 입력할 수 있지만 그러면 해킹의 위험이 크기 때문에 권장되지 않는 방식




DATABASE => Table들을 묶어주는 일종의 디렉토리

하나의 서버 => 여러개의 데이터베이스

하나의 데이터베이스 => 여러개의 테이블



mySQL 사용

데이터베이스가 존재하고 있는지 확인
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
이런식으로 나온다. 지금은 데이터베이스가 4개 있다는 것을 확인할 수 있다.

지금있는데 데이터베이스는 MySQL이 필요해서 만든 것. 건들면 안된다.

새로운데이터베이스 만들기

tip. 문법적인 것은 대문자로, 아닌것은 소문자로 적어서 헛갈림을 방지한다. 

CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci;

=> Query OK, 1 row affected (0.46 sec) 이렇게 나오면 성공

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| opentutorials      |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

생성되었다. 

데이터베이스 사용하기

use opentutorials

=> Database changed 이렇게 나오면 성공

데이터베이스에 테이블 만들기


이런 엑셀에서 표를 꾸미는 것과 같은 것을 데이터베이스에서 해보자

MySQL monitor에서는 SQL로 데이블을 작성한다.

` 그레이브 엑센트 <- 물결표시 밑에 있는 기호 => 약속되어 있는 문법적인 요소의 이름을 사용하고 싶을때
CREATE TABLE `create` ( (여기서 엔터를 치면)
-> 이런 화살표 기호가 나오는데 이것은 더 작성할 게 남았다는 뜻이다.

-> `id` int(11) NOT NULL AUTO_INCREMENT,      => col의 이름, id에는 숫자가 와야한다는 것을 강조 not null 은 반드시 id 값이 입력되어야 한다는 것이고 
auto_increment는 행을 추가할 때 자동으로 1씩 증가하라는 뜻

-> `title` varchar(100) NOT NULL,=> title에 들어가는 정보가 100보다 작은 정보라는 뜻

-> `description` text NOT NULL,=> description 에 들어오는 정보는 긴 텍스트를 받을 수 있어야 한다라는 뜻

-> `author` varchar(30) NOT NULL,     

-> `created` datetime NOT NULL, 시간과 날짜를 의미하는 데이터 형식

-> PRIMARY KET(id) => 성능을 위해 사용하는 옵션

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
=> 세미콜론 : 이렇게 작성하고 enter을 치면 작성한 명령들이 데이터베이스 서버에 전송되서 명령을 실행한다.

Query OK, 0 rows affected (0.08 sec) 이렇게 나오면 성공

테이블 만든것을 확인

show tables

+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic                   |
+-------------------------+
1 row in set (0.00 sec)

성공






엑셀은 아무거나 집어넣어도 아무말을 안한다.

but database는 잘못 입력하면 작동 안한다. (엄격함)

약간 불편하게 사용하지만 큰 신뢰를 가지고 사용할 수 있는 커다란 장점

행이 추가되는 것 => 정보의 추가

열이 추가되는 것 => 구조를 추가

INSERT INTO `topic` (title, description, author, created)  VALUES('about javascript', 'javascript is ~', 'egoing', '2015-4-10 12:20:5');

정보를 테이블에 추가한다. 어디 테이블에 추가할 것이냐면 토픽에 => id를 제외한 네가지에 정보를 추가한다.

VALUES 안에 값 입력. 순서대로 입력

INSERT INTO `topic` (title, description, author, created)  VALUES('about javascript', 'javascript is ~', 'egoing', '2015-4-10 12:20:5');
Query OK, 1 row affected (0.03 sec) 이렇게 나오면 성공



데이터베이스에서 데이터 가져오기

SELECT * FROM topic; => topic에서 데이터를 가져오겠다. 

mysql> SELECT * FROM topic;
+----+------------------+-----------------+--------+---------------------+
| id | title            | description     | author | created             |
+----+------------------+-----------------+--------+---------------------+
|  1 | about javascript | javascript is ~ | egoing | 2015-04-10 12:20:05 |
+----+------------------+-----------------+--------+---------------------+
1 row in set (0.00 sec)

이렇게 나오면 성공

만약 알고 싶은 정보가 title과 author 만이라면

SELECT title, author FROM topic;

데이터를 하나 더 추가

INSERT INTO `topic` (title, description, author, created)  VALUES('about variable and constant', 'variable is ~', 'pkiop', '2015-4-10 12:30:50');

mysql> SELECT * FROM topic
    -> ;
+----+-----------------------------+-----------------+--------+---------------------+
| id | title                       | description     | author | created             |
+----+-----------------------------+-----------------+--------+---------------------+
|  1 | about javascript            | javascript is ~ | egoing | 2015-04-10 12:20:05 |
|  2 | about variable and constant | variable is ~   | pkiop  | 2015-04-10 12:30:50 |
+----+-----------------------------+-----------------+--------+---------------------+
2 rows in set (0.00 sec) 성공

id값은 자동으로 증가하는 것을 알 수 있다. 

행 삭제 => 여러 정보들 중 하나를 이용하면 되는데 가장 명확한 것이 id

select id,title,author,created from topic WHERE id=2;

+----+-----------------------------+--------+---------------------+
| id | title                       | author | created             |
+----+-----------------------------+--------+---------------------+
|  2 | about variable and constant | pkiop  | 2015-04-10 12:30:50 |
+----+-----------------------------+--------+---------------------+
1 row in set (0.00 sec)

id가 2인 행을 가져온다는 뜻

select id,title,author,created FROM topic ORDER BY id DESC;

id값을 내림차순으로 정렬시킨다. 

'웹 프로그래밍' 카테고리의 다른 글

외부에서 Mysql 접속을 위해 고려해야 할 것들  (0) 2020.09.15
데이터베이스 MYSQL 실습  (0) 2017.12.28
PHP 실습  (0) 2017.12.22
JavaScript 실습  (0) 2017.12.21
JavaScript 실습  (0) 2017.12.20

+ Recent posts