세리프 따라잡기

MySQL 관계형 데이터베이스의 필요성, JOIN, 인터넷, 클라이언트, workbench 사용법, 끝으로.. 본문

MySQL

MySQL 관계형 데이터베이스의 필요성, JOIN, 인터넷, 클라이언트, workbench 사용법, 끝으로..

맑은 고딕 2021. 3. 15. 14:56

1. 관계형 데이터베이스(Realtional Database)의 필요성 [예시로 설명]

topic_backup 테이블
id title description author profile
1 MySQL MySQL is ... gothic developer
2 Oracle Oracle is ... gothic developer
3 MongoDB MongoDB is ... malgun database administrator
4 PostgreSQL PostgreSQL is ... serif data scientist, developer

- 데이터를 봤을 때 데이터가 중복되고 있다면 개선할 것이 있다는 뜻이다.

- 데이터의 수가 방대할 경우(ex.1억 개), gothic이라는 데이터를 수정하고 싶을 때 큰 어려움이 있다. gothic이라는 사람이 동일한 사람이 아닐 수도 있고, gothic이라는 값들이 다 같은 gothic이라는 값인지를 확신할 수 없기 때문이다.

- 만약 gothic이라는 author가 동명이인이 있을 때, 테이블을 분리시켜(author_id) 1, 2로 값을 지정해준다면 후에 볼 때 정보를 보다 확실하게 파악할 수 있으며 유지·보수하기가 훨씬 쉬워진다. [장점]

author 테이블
id name profile
1 gothic developer
2 malgun database administrator
3 serif data scientist, developer
topic 테이블
id title description author_id
1 MySQL MySQL is ... 1
2 Oracle Oracle is ... 1
3 MongoDB MongoDB is ... 2
4 PostgreSQL PostgreSQL is ... 3

- topic_backup은 테이블 안에 모든 정보가 담겨 있기 때문에, 직관적으로 데이터를 볼 수 있다. 반대로 author와 topic로 분리시켜 참조값만을 적게해놓은 topic2는 데이터를 볼 때 행에 해당되는 별도의 테이블을 비교하며 데이터를 읽어야하는 복잡성이 존재한다. [단점]

= 관계형 데이터베이스를 사용하면, 데이터를 별도의 테이블로 보관함으로서 중복을 발생시키지 않으면서 실제 데이터를 볼 때는 하나의 테이블로 합쳐진 결과를 볼 수 있다. [필요성]

 

2. 테이블 분리 및 JOIN [1번의 예시 이어서]

- join의 결합고리는 topic 테이블에서는 author_id 값이고, author 테이블에서는 id의 값이다.

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
: topic 테이블을 전체 출력해주고 author와 join해라. 기준(on)은 topic의 author_id와 author의 id 값이 같으니 이걸 참조해서 두 개의 테이블을 합성하라는 명령어.
SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
: 테이블을 위의 코드보다 깔끔하게 출력한 것. [이때 id 값을 명시해주지 않으면 ERROR 1052 (23000): Column 'id' in field list is ambiguous 라는 에러코드가 발생한다. topic.id 라고 명시해주자]

이때 id의 값이 사람이 보기에도 헷갈리니 명시적으로 구분하고 싶다면 아래와 같이 코드를 작성해서 실행하자.

SELECT topic.id AS topic_id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

- 즉 테이블을 분리한다는 것은 topic 테이블과 author 테이블 사이만 관계를 맺을 수 있는 것이 아니고, 모든 테이블이 author의 식별자인 id와 일치하는 식별자 값을 테이블에 포함하고 있다면 JOIN을 통해서 얼마든지 관계를 맺을 수 있다. [= 관계형 데이터베이스]

 

3. 인터넷과 데이터베이스

- 인터넷

인터넷이 동작하기 위해서 최소·대 2대의 컴퓨터가 필요하다.

인터넷의 의미는 각자 흩어진 컴퓨터들이 인터넷으로 연결되면서 컴퓨터들의 사회가 만들어진 것. = 한 대의 컴퓨터가 가지고 있는 한계를 초월하게 되었단 의미.

한 대의 컴퓨터는 정보를 다른 컴퓨터에게 요청하고 그 다른 컴퓨터는 요청한 정보에 응답해준다. [ex. WEB Browser]

 

- 데이터베이스 서버 (database server)

우리가 CLI를 통해 사용하는 것이 database server 인 것 같아보이지만, 실제로 우리는 database client를 사용하고 있는 것이다. 이를테면 우리는 MySQL을 CLI 환경이 아닌 GUI 환경에서도 다룰 수 있는데, 이게 MySQL을 설치할 때 같이 설치된 Workbench이다.

 

하나의 database server에서 client를 통해 정보를 요청·응답하는 것

4. MySQL Client (monitor & workbench)

MySQL 서버를 설치하면 monitor와 workbench가 같이 설치되며 monitor는 CLI인 명령어 기반의 프로그램이다. 때문에 어디서든 실행할 수 있다는 장점을 가지고 있다. 반면에 workbench는 GUI의 그래픽 기반의 프로그램이다. 클릭으로 모든 것을 해결할 수 있다. (하지만 기다림이 길며 CLI에 비해 일의 효율이 떨어진다)

 

- workbench 사용하기

☞ monitor에서의 접속

-uroot -p (-hlocalhost)
: 자신의 컴퓨터에 깔린 SQL서버로 접속한다. [이때 hlocalhost는 127.0.0.1을 가리키며, 이는 생략을 해도 된다]

- workbench에서 접속하기

이후 비밀번호를 치고 생성된 곳에 들어가면 된다.

 

스키마를 눌러 내 서버에 있는 테이블을 확인하고, 쿼리창에 위와 같이 입력하고 번개를 누르면 이렇게 뜬다.

 

- 스키마 생성하기

상단의 삼단 원형을 눌러 스키마를 생성한다.

이후 기본값으로 apply를 누르면 생성이 성공적으로 된다.

 

- 테이블 생성하기

상단에서 표를 눌러 테이블을 생성한다. 이후 생성하고 싶은 표를 작성하고 apply를 누른다.

 

만든 row를 확인하고 apply를 누른다.

 

- workbench의 insert문

스키마란의 workbench의 topic 테이블에 마우스를 갖다대면 insert문을 추가할 수 있는 표가 나온다. 그걸 눌러 입력란에 데이터값을 입력하고 apply를 누른다.

 

→ 모든 web application, app, client 등…은 결국 SQL 서버에 전송함으로서 데이터베이스 서버를 제어하게 된다.

 

5. 끝으로

- index 사람들이 많이 찾을 것 같은 키워드에 색인을 걸어두어 찾기 편리하게 하는 것
- modeling 테이블이 복잡할 때 참고할 수 있게 모델링한 것. [검색]
- backup은 데이터를 복제해서 보관한다. [mysqldump, binary log ...]
- cloud는 대기업(아마존, 구글, 네이버 등)들이 운영하고 있는 인프라 위에 있는 컴퓨터를 임대해서 사용하는 것이 클라우딩 컴퓨팅. 우리에게 있는 것이 아닌, 우리가 원격으로 제어하고 있는 것. 이렇게 했을 떄의 장점은 필요할 때 켰다 끄면, 더 이상의 과금이 되지 않는다는 것이다. [AWS RDS, Google Cloud SQL for MySQL, AZURE Database for MySQL ...]

Comments