티스토리 뷰

[MySQL] 2일차-end
: SELECT, UPDATE, DELETE, JOIN, sql client, workbench,
+수업을 마치며

만든 날짜: 2019-01-23 오후 3:28


 본 글은 에버노트에서 작성되었습니다.

 해당 글은 생활코딩에 올려진 DB강의를 토대로 학습하며 작성되었습니다. 따라서 원본 강의를 확인하고 싶다면 생활코딩을 방문하시기 바랍니다.



SQL의 SELECT 구문

 데이터의 읽기를 해보자. google : mysql select syntax


SELECT의 뒤에는 컬럼의 목록이 나온다.

WHERE문을 통해서 특정 행을 검색 할 수 있다.

ORDER BY를 사용하여 정렬 순서를 정하여 출력할 수 있다.

만약에 10억개의 데이터가 있을 때 모든 행을 검색한다면 치명적일 것이다. 따라서

LIMIT 키워드를 사용하여 출력에 제한을 둘 수있다.

 sql은 기본은 쉽지만 깊게 들어가면 복잡해지기 때문에 연습이 많이 필요하다.

 SELECT를 id로 했을때 출력은 iidd로 하고싶을 경우? 혹시나 해서 AS를 써봤더니 되는 것을 확인..

 또 다른 여러가지 경우는 검색이나 질문을 통해서 알 수 있을 것이다.

 SELECT를 통해서 CRUD 중에서 READ를 살펴보았다.


SQL의 UPDATE 구문

 수정은 어떻게 하는지 알아보자. Google : sql update mysql

 업데이트를 간단하게 사용해 보았다.

 아주 중요한 점 WHERE문을 사용하지 않을 경우 큰 문제가 발생할 수 있다.. 모든 행이 바뀌는 경우가 발생할 수 있다.


SQL의 DELETE 구문

 삭제하는 방법을 알아보자. Google : SQL delete in mysql

여기서도 WHERE문이 중요하다.. 생략시 모든 행이 삭제될 수 있다.

 DELETE를 잘못하게되면 인생이 바뀔 수도 있으니.. 주의하도록 하자.


수업의 정상

 하산을 할지. 결정할 수 있는 좋은 지점이다. 기술의 본질과 혁신을 원심분리하려고 노력하면 여러가지 판단을 하는데 도움이 된다. 우리가 배우는 것은 지금 RDB이다. 본질은 "데이터 베이스" 이다. 본질은 "CRUD" 생성 읽기 수정 삭제. DB를 관통하는 공통점을 우리는 알아본 것이다. 교양으로 공부를 한다면 경제적인 공부는 여기까지다. 직업이나 호기심이 많은 경우 더 학습을 이어가라.

 이제 관계형DB는 다른 것과 어떻게 구분되는가? 알아보자.


관계형 데이터베이스의 필요성

 왜 관계형DB가 필요한 것인가? 엑셀을 보면서 알아보자.

 위표를 보면 데이터가 중복되는 부분이 있다. 바로 profile부분이 그렇다. 데이터가 중복되고 있다는 것은 개선할 것이 있다라는 강력한 증거가된다. 데이터가 5건 밖에 없지만 만약에 1억 건이라면.. 중복이 천만건이라면.. 여러 문제가 발생된다. 예를 들어 적은 데이터가 아니라 굉장히 복잡하고 큰 데이터가 중복된다면 경제적으로 손해다. 천만개가 등장한다면 데이터의 수정이 필요할 때 엄청나게 어려운 수정이 될 것이다.

 저자들의 정보만을 따로 표로 빼보도록 하자. 또 topic의 정보만을 가진 테이블만을 만들자.

 위와 같이 만들면, 중복은 사라지며 id값으로 대체가 가능하다. author 테이블과 topic테이블을 대조해가며 확인할 수 있다. 만약에 작가 이름을 한글이름으로 바꾸어도 topic과 author는 각각의 테이블로 존재하기 때문에 더 효율적인 수정도 가능하다. 즉 유지보수하기가 훨신 더 편해진다.

 또 name과 profile이 완전히 같은 두 명의 사람이 있을 때도 위와 같이 테이블을 사용한다면 id를 통해 어떤 사람이 작성한건지 알 수 있다.


 하지만 장점만 있는 것은아니다. (trade off : 장점이 생기면 단점이 생긴다) 기존(테이블 1개) 장점은 author와 profile이 하나의 테이블에 다 드러나기 때문에 직관적으로 확인할 수 있다. 하나의 테이블만 보면 다 확인이 가능하기 때문에.


 테이블을 별도로 쪼개서 나누어 놓는다면, 데이터를 볼 때 데이터에 해당하는 별도의 테이블을 또 비교해서 봐야하는 불편함이 있다.


 그래서 우리는 무엇을 바랄까? 별도의 테이블을 사용하며 중복을 발생하지 않으면서도.. 실제로는 하나의 테이블로 확인이 가능한 것을 바랄 수 있다. mysql에서 이러한 것이 가능하다. 저장은 분산. 출력할 때는 합산해서!

 LEFT 키워드를 사용하여 읽어올 때 같은 테이블 처럼 읽어올 수 있다.


테이블 분리하기


RENAME TABLE topic TO topic_backup;

테이블을 분리해서 작성하기.



관계형 데이터베이스의 꽃 JOIN


 두 테이블을 합친다는 개념은 데이터가 중복이 되었을 때 굉장히 유용하다.

mysql> SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

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

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

 이로써 중복을 제거하고 사용자가 원하는대로 데이터를 뽑아서 확인할 수 있는 방법을 알아보았다!

 위와 같은 테이블이 있고, comment라는 덧글 테이블이 추가되어있을 때. 아래 부분과 같이 author_id부분을 따로 분리해놓을 경우 author를 변경할 경우 topic, comment테이블에서 동일한 효과를 볼 수 있다! 즉 모든 테이블이 author와 일치하는 식별자를 포함하고 있다면 얼마든지 join을 통해서 관계를 맺을 수 있다!


 SELECT comment.id,description, name, profile FROM comment LEFT JOIN author ON comment.author_id = author.id;


 원하는 테이블을 실시간으로 만들 수 있게 되는 것이다. 하나를 바꾸면 전체가 바꿔지는 효과를 볼 수 있다!


 JOIN은 관계형DB를 관계형DB답게 해주는 녀석이다. 그리고 깊게 들어가면 아주 복잡해질 수 있다.


인터넷과 데이터베이스

인터넷과 데이베이스의 관계.


 mySQL은 인터넷을 사용할 수 있는 기능이 있다. DatabaseServer에서 Server의 의미를 본격적으로 알아보도록 하자.


 정보의 바다인 internet부터 얘기해보자. Q. 인터넷을 사용하기 위해서는 컴퓨터가 최소 몇대가 필요한가? A. 2대 이다.(최소)


 인터넷의 의미 : 각자 흩어져 있는 컴퓨터 들이 인터넷으로 연결되면서 컴퓨터들 간의 사회가 만들어지는것. 한 대의 컴퓨터가 갖고있는 능력을 초월하게 되는 것이다.


 한대의 컴퓨터는 정보를 다른 컴퓨터에 요청하며 또 다른 컴퓨터는 요청에 대해서 응답한다.


 인터넷 위에서 동작하는 컴퓨터들은 요청/응답 하는 부분으로 나뉘게 된다. 인터넷을 만든사람은 이런 역할분담을 설명하기위해서 쉬운 말을 찾게된다. Server(응답자)와 Client(요청자)이다. 


 인터넷이라는 것은 갑과 을이라는 관계가 서로 응답과 요청하면서 이루어진다. 클라이언트 컴퓨터는 서버컴퓨터에게 정보를 요청하는데 이 관계가 웹이라면 요청하는 곳은 웹 브라우저(클라이언트) 응답하는 서버 컴퓨터에 설치된 웹을 위한 프로그램을 Web Server라고 한다.


 MySQL을 설치하면 Database Client, Database Server를 동시에 설치해준다. DB server에는 실제로 DB가 저장되고 Client를 통해 접속할 수 있다. 우리가 여태 직접 DB server를 다룬 것처럼 느껴졌지만 DB server는 DB client를 사용해야한다. 무엇 이냐면 우리는 mysql을 사용한 것이다. mysql monitor. mysql의 클라이언트 중 하나. 기본적인 번들로 제공하는 것이 mysql모니터이다. mysql모니터는 명령어를 통해서 DB server를 제어한다.

 DB클라이언트 중 하나인 mysql workbench를 사용해 볼 것이다. GUI환경에서 엑셀을 다루듯이 DB를 다룰 수 있다. DB클라이언트를 하나만 쓰면 그것이 전체인것 처럼 보이지만, 2개를 써보면 우리는 더 분명하게 DB를 다룰 수 있게될 것이다.

 폰 노이만에게 어떻게 수학을 그렇게 잘하냐고 묻자. 수학은 이해하는 것이 아니고 익숙해 지는 것. 이라는 말을 했다고한다.

 우리의 목표는 이해가 아니라고 생각한다. 공부의 목표는 이해가 아니라 익숙해지는 것이다. 익숙해지는 것을 위한 여러 방법중 하나가 이해이고 암기라고 생각한다. 웹브라우저.. 매일같이 하다보니 웹 브라우저가 물질이라고 구체적으로 느끼게 되었다. DB또한 굉장히 추상적인 것임에도 불구하고 계속 다뤄보면 물질인 것처럼 느껴지게 될 것이다. -by egoing

 전 세계의 수만은 사람들이 하나의 DB server를 이용해서 정보를 주고받고 관리하게 할 수 있다! 엄청난 가능성이 생기는 것이다.


MySQL Client


 많은 MySQL클라이언트가 있다. 


 MySQL monitor. 는 Mysql설치하면 MySQl 모니터가 있다. CLI(Command line interface)환경이다. 많은 서버 컴퓨터들이 컴퓨터의 자원을 최대한 일에 부여하기위해서 GUI환경을 제공하지 않는 경우가 많다. 단점은 명령어를 통해 제어해야 하기 때문에 명령어를 기억해야하는 것이다.


 GUI 시스템의 경우에는 클릭 제어 를 할 수 있기에 편리하다. 하지만 어떻게 보면 많은 노력이 필요함.


 장단점을 잘살려서 서로를 번갈아 가며 이용하는 것이 중요하다.


 Google : mysql client


MySQL Workbench


google : mysql workbench

-hlocalhost : -h(host) 호스트 + 해당주소. 생략하고 쓰면 기본적으로 로컬호스트로 연결된다.

 선택한 스키마에 있는 테이블을 확인할 수 있다. 쿼리문 실행시 선택한 스키마에 해당되는 명령을 실행한다.


새로운 스키마 생성가능

새 테이블 생성

생성후 apply시

 아래와 같은 쿼리문이 뜬다. 즉 mySQL모니터를 쓰건 workbench를 쓰건 모든 클라이언트 들은 결국엔 SQL을 mySQL Server에 전송함으로써 데이터 베이스 서버를 제어하게 된다. 이후 프로그래밍 언어를 통해서 개발을 할 때 중요하다. SQL문을 생성해서 서버에 전달하면 된다.

데이터 추가시

SQL문 실행.

Dashboard

Instance


GUI 방식으로 데이터베이스를 사용하는 방법을 간단하게 알아보았다.

 MySQL 클라이언트가 따로 있기 때문에 복잡하지만 다양한 클라이언트 생태계가 존재할 수 있다. mySQL서버를 사용하고 있는 모든 앱과 데이터 분석하는 시스템들은 본질적으로는 모두가 mysql클라이언트이다. 


수업을 마치며

1. 지금까지 배운것을 사용하여 현실의 문제를 해결

2. 혁신 적인 것을들 더 배워보는 것

 DB의 데이터가 많아지면 원하는 데이터를 가져오는 것이 어려워진다. 데이터가 많아지면, 1억번을 다 뒤져야할 수도 있다. 이런 상황에서 구원같은 존재가 index기능이다. 사용자가 검색을 자주하는 컬럼에 색인을 걸어두면 데이터가 들어올 때 데이터가 그 컬럼을 잘 정리한다. 이후에 누가 검색을 한다면 더 빨리 데이터를 줄 수 있다. 성능상 문제가 생기면 index 키워드를 찾아서 적용시키자.

 테이블을 어떻게 하면 효율적으로 설계할 것인가? 정규화 비정규화 역정규화 등. 나중에 데이터들이 많아짐에 따라서 테이블을 어떻게 만들어야 할지 고민된다면 modeling 키워드로 검색을 해보자.

 가장 중요한 것은 백업이다. 데이터를 백업하는 것은 아주 중요하다. 예측할 수 없는 것은 언제 기기가 고장나는지 이지만 예측 가능한 것은 반드시 고장난다는 것이다. 엔지니어로써의 자격. 백업의 기본적인 방법은 복제해서 보관하는 것. 그럴 경우 동시에 잃을 가능성을 현저히 낮아진다. 서로 다른 위치 대륙 행성 등. (mysqldump, binarylog 키워드로 검색)


 큰 회사들이 가진 컴퓨터를 임대해서 사용하는 방법. 최근 클라우드 컴퓨팅시스템이 고도화 되면서 mySQL같은 서비스를 구축해서 제공하고 있다. DB Server의 고유주소를 입력해서 사용이 가능하다. 필요할 때만 켜서 쓰면된다. 우리는 더 중요한 부분에 시간을 투자할 수 있게된다. 백업적인 측면의 문제를 해당 업체에 전부 위임가능. (AWS RDS, Google CLOUD SQL for MySQL, AZURE Database for MySQL 등.)

 데이터베이스를 부품으로 사용하여 완제품을 만들 수 있다. 프로그래밍 언어로 DB Server로 sql을 던져 줄 수 있다. (Python, PHP, Java mysql api)


 여기까지 학습을 마칩니다.


댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함