db - 1

1.수업소개

데이터가 중요한이유는 다양한 일을 할 수 있기 때문이다.
인터넷에 웹과 앱을 통해 소식과 지식을 전달할 수 있기 때문이다.
첫번째 수단은 file이다. 운영체제마다 지원해서 어디에서든 사용할 수 있다.

하지만 만능은아니다. 성능 보안에 편의성에 한계가 있다.
이 한계를 극복하기 위해 고안된게 database이다.

세상에는 다양한 database이 있다.
준비물 : 상상력 데이터를 복잡한것을 다루는 것이다. 데이터베이스를 처음접하면 복잡하고 어렵고 뜬구름잡는 것 같다.
상상력으로 예제를 크고 복잡하게 위험하게 생각해야 디비의 복잡성을 이해할 수 있다.

2. 데이터베이스의 본질

방대한 기능을 가지고 있는 정보 도구이다. 관련해서 일어날수있는게 매우 많기때문이다.
수많은 기능들을 각개격파하면서 배워야하나? 좋은방법은 아니다. 중심에 자립한것은 복잡하지 않기때문이다.
어떤것을 만나던 데이터베이스의 데이터르 어떻게 입력출력하는지를 아는게 중요하다.
데이터를 create update delete read 하느게 가장 종요한 기능이다.
이 외 복잡한 기능들은 이것을 읽은 기능일뿐이다.

3. file vs database

crud가 핵심적인 작업이다.
공통적으로 사용하는 예제, 파일이 어떻게 데이터베이스화 되어가는지

작가라한다면 데이터베이스를 설명한다고 햇을때 어떻게 할까
파일을 하나씩 생성하면서 하나씩 설명을 할것이다.

하고자하는일이 무엇이느냐에 따라 복잡해질것이다. 만약 1억개의 파일이 있다면? 매우 힘들다.
egoing만이 작성한것을 보려면? 노이즈가 생길수도 있다. 날짜의 순서에따라 정렬하고싶다면? 하나씩열어봐야한다.

그래서 어떤 프로그램으로 가나 스프레드시트로 가게 된다.
이런걸 이용하면 문제를 해결할 수 있다.
정리정돈해서 중요한 효과들을 얻을 수있다.
행이 1억개라면? 스프레드시트는 원하는 데이터로 필터링할 수 있다.

파일에 직접 저장하는 것보다 데이터를 잘 정리정돈되면 '구조적'으로 되면 데이터 가공이 훨씬 쉬워진다.
스프레드시트는 파일에서 데이터베이스로 가는 길목에 있다.
넓게보면 데이터베이스 특성을 가지고 있다.

스프레드시트와 데이터베이스차이는 컴퓨터 언어를 이용해서 데이터를 추가 삭제 수정하고 읽을 수 있다는것이 차이점이 있다.
중요한 장점은 자동화할 수 있다. 전문적인 데이터베이스들이 가지고 있는 중대한 장점이다.

4. 수업을 마치며

어떤 db를 선택할 것인가 어떤 것을 배울것인가?
직장, 동료의 것을 사용 운명임. 아직안정해졋다면?
통계를 기반으로 공부하자.

어떤형식인지 정해져있다. 절대강자는 관계형 데이터베이스이다.
관계형끼리는 서로 배우면 서로 잘해질 수 있음.
mongodb는 성장중임. 관계형이 아닌데 관계형을 배우고 아닌 것을 알아보는것도 좋을 듯하다.
두개의 db에 공통적이있고 이것이 본질적임 다른부분은 꼭이래야하는 것은 아니구나를 알수 잇게된다.

오라클은 절대강자 오랜시간동안 일햇다. 관공서 큰 기업에서 사용하느데 비싸다. 컨설튼트의 컨설턴트의 비용이 비싸다.
개인적사용 작은회사면 추천하지 않음

mysql은 무료 오픈소스이다. 이용하고 싶은데 작은회사다. 데이터 신뢰성낮은데서 사용해도된다.
초심자는 이게 좋음.

mongodb는 관계형이 아님 2010년부터 관계형이 아닌게 쏟아져나온다. 관계형은 1970년대부터 햇는데 여러 장점이 잇엇다.
개발자 입장에선 어떤회사에서 사용하니 괜찮았다.
그런데 변화들이 등장햇다. sns등 수많은 데이터들이 나옴. 다양한 데이터들이 나옴
관계형은 매우 훌륭하지만 모든 db가 낑겨들어가면 잘맞지않으면 관계가 억압이 될 수 있다.
nosql이흐름이 나타낫다. 다양한 db가 만들어지고 시작했다. 흐름만 알아두자

db - 2

1. MySQL강의 소개

처음에는 파일을 사용햇다. 편해서 아직도 사용할 것이다.
우리가 배우는 db조차도 파일에 저장을 한다.
정보가 폭발적으로 정리하면서 효과적으로 파일만으로하기는 힘들어졋다.

누구나 데이터를 정리정돈할 수 있는 프로그램을 만들었고 db가 나타낫다.
1970년 ibm에서 관계형데이터베이스라는 새로운 데이터를 고안하기 시작했다.
지금까지도 절대강자로 군림하고 있다. 프레임형태로 정리정돈하고 정렬검색을 빠르고 편리 안전하게 할 수잇다.

하나를 배우면 나머지를 거의 알게된다.
웹이 폭발적 성장을하면서 웹 정보를 무료면서 저장할 데이터베이스를 찾게 되었다.
웹을 만들면서 몇천만인 오라클을 쓰기에느 부담스러웠다.

2. 데이터베이스의 목적

무엇이고 왜사용하느냐
스프레드시트와 데이터베이스의 차이점
관계형 데이터베이스의 특징은 스프레드시트와 마찬가지로 표의 형태로 표현한다.
공통점에 걸맞게 기능이 비슷하다.
가장중요한 차이점은 데이터베이스는 컴퓨터 언어를 통해서 제어할 수 있다는 것이다.
데이터베이스야 테이블로부터 데이터를 가져오는데 데이터중에 값이 무엇인거만 가져와라
스프레드시트는 클릭클릭으로 해야한다.
db는 말로써 프로그램에 명령을 하게 된다.

데이터베이스르 구축하면 특성을 이용해서 웹 등을 통해서 데이터를 공유할 수있다.
데이터베이스를 부품으로 사용하는 것 중 수많은 사례중 하나가 웹사이트의 정보를 담는 것이다.
글을쓰면 db를 직접제어하지 않아도 결과적으로는 외부 데이터베이스에 저장이 되고 있다.

3. MySQL설치

mysql community edition 커뮤니티 서버
온라인서비스 이용하면 설치안해도되긴함.

bitnami wamp 윈도우에서 mysql php동시다운시켜줌.
programdata - programs - mysql찾으면 잇다.

4. MySQL의 구조

데이터를 저장하는 최종인곳은 표이다.
웹사이트를 운용하는데 이것들을 저장하면 표들이 많아진다. 표가 늘어나면 나눠진 표들을 잘 정리정돈해야한다.
서로 연관된 표들을 그루핑해서 연관되지않은 표들과 분리하는게 있는데 이것을 스키마(데이터베이스)라고 한다.
표들을 그루핑할때 사용하는 일종의 폴더이다.

다른스키마들이 있다.
스키마들이 많아지면 이것들이 데이터베이스 서버에 저장이 된다.

MYSQL을 설치한것은 데이터베이스 서버를 설치한것이고 이 기능성을 이용해서 여러가지 작업을 하는 것이다.

5. MYSQL서버접속

DB를 사용할때 첫번째로 얻을 수 잇는 효용이 보안이다. 좀 더 안전하게 데이터를 보관할 수 있다.
권한기능이 잇어서 여러사람을 등록할 수 있다. 모든 스키마에 대해 읽기 수정할수이는사람
한사람은 테이블중하나만 어떤사람은 읽기만 가능하게 만들 수 있다.
이런것들이 효용중 하나인것이다.

root기본권한 관리자 실제로 이걸로 다루는것은 위험하다 별도 를 만들어서 중요한거잇을때만 root로가는게 중요하다.
서버의 담장을 넘엇다. db를 만나야한다.

6. 스키마의 사용

https://dev.mysql.com/doc/refman/8.0/en/creating-database.html
검색해서 하나씩해보자.
CREATE DATABASE opentutorials;
꼭 세미콜론을 해야한다.
drop databse db이름; 하면 없어짐
중요한것은 명령어하나하나를 기억할 필요없고 필요한것들을 하나씩 검색하면된다.
how to show database list in mysql
SHOW DATABASES하면 데이터베이스가 보인다.

USE opentutorials하면 이 스키마를 대상으로 표를 만들수 있게 해준다.

7. sql과 테이블의 구조

엄청많은 데이터를 다뤄야하니 매우 복잡한것이다.
기본적으로 알고잇으면 유리한것들을 알아보자
sql은 Structured Query Language의 약자이다.
데이터를 파일처럼 정리하는 것을 구조화되었다고 하는 것이다.
그리고 요청한다 는 의미해서 쿼리라고 한다. 그리고 이 언어 공통의 약속 언어이다.

1.SQL은 어떤 언어보다도 쉽다.
2.중요하다.
관계형데이터베이스에서 속하는 공통적으로 제어하는 언어이다. 압도적인 다수가 SQL로 동작한다.
쉽고 중요하다. 이 SQL을 본격적으로 배울 것이다.
테이블은 x축과 y축으로 이루어져잇다.
X축은 row, record, 행이라고 한다. y축을 보면 column, 열이라고 한다.
보통데이터베이스에서 컬럼을 말하면 데이터의 타입이라고 생각하면된다.
행은 데이터 그자체를 의미한다. 테이블의 구조와 관련된 용어를 알아봣다.

8. 테이블의 생성

6개컬럼으로 된 테이블을 만들어보자
id title description created author profile

그런데 보통 표를 만드는 작업으로 sql을 짜는일이 많지는 않다.
코드가 복잡해서 힘들게 느껴진다. 데이터가 1억개라면 스프레드시트에 저장하면 힘들수잇는걸 쉽게해주는게 db이니 긍정적으로 보자.

mysql cheat sheet를 찾아보자. 자주사용하는 명령문들을 모아두었다.
https://devhints.io/mysql

;이등장될때까지 실행되지않는다.
db는 분위기가 삼업하다. 다른 타입이 오면 아무것도 못온다.
http://www.incodom.kr/DB_-_%EB%8D%B0%EC%9D%B4%ED%84%B0_%ED%83%80%EC%9E%85/MYSQL
데이터 타입
CREATE TABLE 테이블이름(
컬럼이름 데이터형식 NOT NULL
INT(11) 11자리만 표기하겟다는 뜻임
반드시 잇어야하면 NOT NULL
AUTO_INCREMENT하면 자동으로 증가되게 할 수 있다.
식별해야하는 데이터라면 이런걸 사용해보자.
VARCHAR가변길이 문자.
TEXT 65000글자 LONGTEXT 4기가 컴퓨터는 물리적인 기계
컴퓨터에 미리 확보하는 것이라 효율적이지 않다.
그래서 저장하고자하는 데이터의 크기에 가까운 사이즈의 데이터 타입을 사용하는게 좋다.
적을때는 괜찮은데 많을때 문제가 된다.

topic 테이블을 생성해보았다.

CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(15) NULL,
PRIMARY KEY(id));

9. crud

create read update delete
어떤 db이건 이 4가지 기능을 반드시 가지고 있다.
이중에서도 중요한것은 create read이다.

10. sql의 insert구문

오라클과 같다.
INSERT INTO 테이블이름 (컬럼들) VALUES(값들);

INSERT INTO topic (title,description,created,author,profile) 
VALUES('MySQL', 'MySQL is...', NOW(), 'egoing','developer');

INSERT INTO topic (title,description,created,author,profile) 
VALUES('ORACLE', 'ORACLE is...', NOW(), 'egoing','developer');

INSERT INTO topic (title,description,created,author,profile) 
VALUES('SQL Server', 'SQL Server is...', NOW(), 'duru','database administrator');

INSERT INTO topic (title,description,created,author,profile) 
VALUES('PostgreSQL', 'PostgreSQL is...', NOW(), 'taeho','data scientist, developer')

INSERT INTO topic (title,description,created,author,profile) 
VALUES('MongoDB', 'MongoDB is...', NOW(), 'egoing','developer')

SELECT문 많이 사용할 것임. INSERT해야 SELECT의미없으니 많이본다.

11. SELECT 구문

역시나 오라클과 같다.
읽기 READ부분이다.
아주 복잡해질수 있으나 기본적으로는 간단하다.
모든 것을 보고싶다면 SELECT * FROM 테이블이름
스프레드 시트에서 하는 것처럼 몇개 컬럼들만 보고싶다.
* 부분에 볼 것만 적어주면된다.

https://dev.mysql.com/doc/refman/8.0/en/select.html

select뒤에는 컬럼의 형식
from뒤에는 테이블이름 from생략가능하다.

특정 조건만 보고싶다? from다음 where문을 사용하면된다.
SELECT id,title,created,author FROM topic WHERE author = "egoing";

정렬을 하고싶다면 Where절 뒤에 ORDER BY 절을 넣으면된다.
DESC : 내림차순 그냥 혹은 ASC : 오름차순
SELECT id,title,created,author FROM topic WHERE author = "egoing" ORDER BY id DESC;

스프레드시트는 6만5천개정도 데이터만 가능하다. mysql은 1억건 10억건이상 가능하다.
그래서 SELECT * 해버리면 너무많아서 컴퓨터가 멈춰버릴 것이다.
그래서 제약을 걸어줘야한다.
데이터를 2건만 보고싶다?
LIMIT OFFSET을 넣으면 된다.
SELECT id,title,created,author FROM topic WHERE author = "egoing" ORDER BY id DESC LIMIT 2;
2건만 보이게 된다.

DB를 잘한다의 기준은 SELECT문을 필요에따라 잘 사용하는 것을 의미한다. 수련이 많이 필요하다.
기본이 쉽고 깊게 들어갈때 복잡해지는 것이다.
좀더 복잡한 검색은 궁금증으로 일어나서 알아서 찾아보도록 하는게 좋다.

12. UPDATE 구문

수정하는 방법을 알아보자.
UPDATE 테이블이름 SET 컬럼이름과 값
WHERE로 조건을 붙이지 않으면 테이블의 모든 값이 변해버리니 주의하자.
WHERE을 빠뜨리면 재앙이 올수 있다!!!!!

UPDATE topic SET description='Oracle is ...', title='Oracle' WHERE id = 2;

13. DELETE 구문

CRUD의 마지막 부분의 DELETE이다.
DELETE FROM 테이블이름 WHERE
WHERE로 조건을 붙이지 않으면 모든 데이터를 날려버린다.
주의하자!!!
마지막줄을 삭제해보자

DELETE FROM topic WHERE id = 5;

DELETE문은 쉽지만 잘 못 사용하면 데이터를 모두 날려버리면 인생이 바뀐다. 주의해서 사용해라!!

14. 수업의 정상

수업의 꼭대기에 도착했다. 하산할지 헬기를 탈지 정해야한다.
기술을 만날때 혁신 본질을 나는다
본질은 Database이고 혁신은 Relatonal이다.
관계형 데이터베이스 본질은 CRUD특성이다. 데이터베이스의 공통점이다.
다른 데이터베이스들과 왜 구분되는가를 알아보도록 하자.

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

왜 관계형데이터베이스가 필요한가?를 알아야 이해하기 쉽다.
표를 잘 들여다보면 데이터가 중복되고 있다.
데이터가 중복되고 있다면 개선할 필요가 있다라는 증거이다.

행이 1억개라면? 데이터가 천만개가 중첩된다고 생각하면? 여러가지 문제가 발생된다.
굉장히 복잡한게 천만번 등장하면? 기술적으로 경제적으로 손해이다.
수정이 필요하면 천만번을 수정해야한다.
각각 데이터가 용량이 크면 동일하다고 확신하기 힘들다.

우선 저자들의 정보를 author라는 부분을 테이블로 뺀다.
author테이블
id | name | profile
topic테이블
title description created author_id를하면
표가 복잡해지지만 중복데이터들이 사라지고 각 데이터에 식별자인 id값으로 넣을 수 있게 된다.

author테이블의 내용을 바꾸면 이것을 참조하는 모든 테이블에서 바뀌었다고 할 수 있는것이다.
또한 동명이인일 경우 확신할 수 없지만 autor테이블의 id를 보면 다른 사람이라는 것을 확신할 수 있게 된다.

장점이 생기지만 단점도 생긴다. 기존의 topic으로 나눈상황에서
기존의 장점은 굉장히 직관적으로 데이터를 볼 수 있다.
테이블을 별도로 쪼개 참조값만 적으면 해당되는 별도의 표를 보고 비교해야한다.
-> 그러면 데이터를 별도로 보관해서 중복을 발생시키지 않고 실제로 볼때는 하나로 합쳐진 결과를 보면 되지 않을까?
그런 방법을 mysql이 지원하고 잇다. 분산되서 저장되고 보여줄땐 합쳐지는 것이다.
join하면된다. 마치 결합된 것 처럼 볼 수 있게 되는 것이다.

16. 테이블분리하기

일단 하나의 테이블을 쪼개보자.

author테이블

CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `profile` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

토픽테이블

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

17. JOIN : 관계형 데이터베이스의 꽃

!!중요!!
조인은 관계형 데이터베이스의 꽃이다.
분리된 테이블을 읽을때 마치 하나의 테이블로 저장된 것 같이 보는 것이다.
테이블과 테이블이 조인하기위해서는 말로써 뭘할지를 알아야한다.
topic테이블의 author_id행이고 이 값과 같은 것을 가지고있는 author에 붙여라라고 하는 것이다.
SELECT * FROM topic LEFT JOIN author;
막연하게 하라하면 mysql은 기준을 몰라서 에러를 낸다.
ON으로 조건을 줘야한다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;



이러면 중복되서 보이니 이쁘지가 않다.
SELECT topic.id,title,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
으로 원하는 테이블만 나타나게 할 수도 있다.
테이블 이름에 원하는 별명을 붙일 수도 있다.
SELECT topic.id AS topic_id,title,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

정말많은 기술들이 중복을 제거하는 것은 정말중요하고 아주 많은 기술들이 이것을 위해 존재한다.

즉 분리한다는 것은 식별자 값을 가지고 있는 join을 통해서 얼마든지 관계를 맺을 수 있다는것이다.
원하는 형태의 데이터를 만들 수 있게 되는 것이다.

하나를 바꾸면 전체가 바뀌게 된다.
join도 복잡성이 높다. 나중에 필요할때 알아보라..?

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

수업마지막 관문 정보의 바다인 인터넷에서 데이터베이스가 동작하면 굉장히 파워풀한 일을 할 수 있다.
database server
인터넷 자체에 대한 이야기로 시작해야한다.
인터넷을 사용하려면 2대가 필요하다. 같아 흩어진 것이 인터넷으로 연결되는 사회를 말한다.
컴퓨터들간 사이를 얻은것은 1개의 역할을 초월한 것을 말한다.
다른컴퓨터에 정보를 요청 응답하는 역할을 한다.
웹브라우저가 도메인을 찾아 들어감. 도메인에서 데이터를 쏴줌
요청하는 쪽을 클라이언트 받는쪽을 서비스를 제공하는 server이다.
ct는 웹 브라우저를 통해 웹클라이언트를 통해 웹 서버에게 요청한다.
mysql을 다운받으면 databse client와 database server를 설치한다.
직접 다루는 것처럼 보이지만 반드시 databseclient를 사용해야한다.

MySQL 8.0 Command Line Client 가 mysql을 다루는 기본 클라이언트인것임.

인터넷을 통해 db서버에 저장하고 전세계의 수많은 클라이언트들이 데이터를 가지고 꺼내고 사용하는 것이 가능하게 되었다.
그래서 엄청난 가능성이 생겨나게 되는 것이다.

19. MySQL 클라이언트

장점 mysql다운받으면 무조건 잇어서 어디서든 사용할 수있다.
명령어 기반의 프로그램이다. 많은 서버 컴퓨터들이 일에 투자하기 위해 gui를 지원하지 않는 경우가 많다.
단점은 명령어만이니 명령어를 기억해야하는 단점이 있다.

gui는 클릭도 할 수 있다.서로 장단점을 가지고 있다. 맥락적으로 하는일에 따라 일하는 것이 좋다.

20. MySQL Workbench

https://youtu.be/JWB6sUd1R-Q
자주 볼듯해서 링크를 첨부한다.
MySQL에서 공식적으로 GUI기반의 클라이언트이다.
mysql클라이언트와 서버가 같은 컴퓨터에 위치하고 있다. 자신을 가리키는 약속된 특수한 도메인이 localhost이다.
이것과 동일한 ip주소는 127.0.0.1이다.

스키마를 추가하고 싶다면 +원통모양 create a new schema클릭해서
create new table하면 gui안에서 만들 수도 있다.
어떤 sql을 쓰던 결국 mysql서버에 전송함으로써 db를 제어하게 되는 것이다.
이것을 이해하는 것이 중요하다.

이부분을 개념적으로 넘지 못하는 사람이 많다.

21. 수업을 마치며

두개의 큰갈림길
1.현실문제 해결
2.배운것으로 한계를 극복못하니 혁신적인것들을 배우기

SQL을 잘하는 사람이란
SQL을 잘이해하는 사람 SELECT원하는 정보를 가장 좋은 성능으로 오는 것을 끊임없이 수행해야한다.

1.index
정보가 많아서 생기는 현실의 지옥 index가 필요하다.
db색인기능 사용해서 자주 검색하는것을 색인을 걸어두면 데이터가 들어올때 잘 정리한다.
굉장히 빠른 속도로 데이터를 볼 수 있게 해준다.
index키워드로 찾아서 성능을 올려보자.

2.modeling
데이터가 많아지고 복잡해지면 구조를 잘 설계해야한다.
어떻게 효율적으로 설계할것인지를 알아보자.
테이블을 어떻게 만들지 고민되면 모델링을 검색해보자.

3.backup
데이터가 아무리 많아도 날려버리면 안된다. 백업하는 것은 매우 중요하다.
예측할 수 없는 것을 언제 고장날지 모른다. 백업은 복제해서 보관하는 것이다.
동시에 열어볼일은 적다. 독립된 건물이라면 훨씬더 좋다.
다른 국가라면 훨씬더 안전하다.

4.cloud
큰회사들을 인프라를 임대해서 사용하는 것

5.programming
db를 부품으로 이것을 기반으로 완제품으로서 완성이 디는 것이다.
수많은 결과들에 db가 들어가잇을 확률이 매우 크다.
웹사이트 분석을 하고 싶다면 서버에 sql에 던지는 방법을 알아보라.
java mysql api등등

2023.03.06 후기

생활코딩 egoing님은 많은 것을 알려주시지는 않는다. 하지만 왜 무엇을 어떻게 배워야하는 지에 대해서는 많은 도움을 주는 것 같다.
스스로 공부해나가는 방법을 다시 넣어주는 것 같다.
https://chunpinge.tistory.com/130 내가햇던거 초반 참조. 초반만잇엇어서 다시 하는중이다.
오라클 강의 한번더 봐야할 것 같다 하나의 관계형 db를 배우면 다른것에도 도움이 된다고 한다.
오라클 강의를 mysql로 작성하며 익숙해지고자 한다. 오라클은 많이 사용해봣지만 조금 다른 문법을 스스로 찾아가며 공부하는 것도 좋은 결과를 낳을 것 같다.

'기초단계 > DB&JDBC' 카테고리의 다른 글

2023.03.08 DB  (0) 2023.03.08
2023.03.07 DB  (0) 2023.03.07
2023.01.25-2 JDBC  (0) 2023.01.25
2023.01.24-2 JDBC  (0) 2023.01.24
2023.01.11 DB  (1) 2023.01.11

+ Recent posts