|
| 1 | +# 데이터 베이스(DOCKER) |
| 2 | +## 등장 배경 |
| 3 | +서버는 사실 하나의 컴퓨터와 같다. 서비스를 담는 서버는<br>하나의 컴퓨터로 생각할 수 있다. 하지만 우리가 평소에 코딩을 하면서<br>썼던 변수들은 모두 메모리로서, 한 마디로 주기억장치이다.<br>하지만 커뮤니티 하나만하더라도 용량이 1TeraByte를 넘어가는데<br>우리가 쓰는 컴퓨터만 하더라도 램이 32GB ~ 16GB 사이가 보통이다.<br>때문에 쓰는 것이 데이터 베이스이다. |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## 개념 |
| 8 | +데이터베이스는 일반적으로 컴퓨터 시스템에 전자적으로 저장되는<br>구조화된 정보 또는 데이터의 조직화된 모음입니다.<br>메모리와 달리 영속성을 가지고 대용량성을 가진것. |
| 9 | + |
| 10 | +여기서 구조화된 정보들을 이미지(image)라고 부른다. |
| 11 | + |
| 12 | +##### (데이터 베이스의 구조 그림) |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## 종류 |
| 19 | +우리가 주로 사용하는 DB의 종류로는 MYSQL<br>해외에서 많이 사용하는 DB는 PostSQL<br>기업체에서 많이 쓰는 것은 Oracle이라는 DB이다.<br>위 DB는 모두 <span style="color:yellow">관계형데이터베이스(RelationDataBase)</span>이다. |
| 20 | + |
| 21 | +--- |
| 22 | + |
| 23 | +백 엔드는 보통 데이터 베이스에서 아래 CRUD 4가지 과정의 일을 처리한다. |
| 24 | +## Create, Read, Update, Delete |
| 25 | ++ Create : 생성 |
| 26 | ++ Read : 읽기 |
| 27 | ++ Update : 수정 |
| 28 | ++ Delete : 삭제 |
| 29 | + |
| 30 | +위 4가지 과정을 프로세싱 하기 위해 쓰는 언어가 SQL이다. |
| 31 | + |
| 32 | +--- |
| 33 | + |
| 34 | +Structured Query Language : SQL은 데이터를 쿼리, 조작 및 정의하고<br>액세스 제어를 제공하기 위해 거의 모든 관계형 데이터베이스에서<br>사용되는 프로그래밍 언어. |
| 35 | + |
| 36 | +SQL또한 3가지 갈래로 나뉜다. |
| 37 | ++ DDL : Data Definition Language로 데이터 정의어이다. |
| 38 | ++ DML : Data Manipulation Language로서 데이터를 조작하는 언어<br>(백 엔드가 주로 사용하는 언어) |
| 39 | ++ DCL : Data Control Language로 데이터 제어어이다. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## DML |
| 44 | +그중 우리가 주로 사용할 DML에 대해 알아보자.<br>DML은 앞서말한 CRUD과정에 해당하는 명령어가 따로 있다. |
| 45 | ++ INSERT -> Create |
| 46 | ++ SELECT -> Read |
| 47 | ++ UPDATE -> Update |
| 48 | ++ DELETE -> Delete |
| 49 | + |
| 50 | +위 와 같이 insert, select, update, delete 4가지 명령어가 있다. |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +명령어를 배우기 전에 docker 실행을 해야 명령어를 사용할 수 있기 때문에<br>docker를 실행 시켜보자. 먼저 cmd창을 킨다.<br>그 다음 아래 명령어로 MySQL Docker 이미지를 다운로드한다. |
| 55 | +``` |
| 56 | +docker pull mysql |
| 57 | +``` |
| 58 | +위와 같이 다운로드 하게 되면 자동으로 최신버전으로 다운받게 된다.<br>따라서 버전을 지정해 주고 싶으면 아래 명령어를 사용한다. |
| 59 | +``` |
| 60 | +docker pull mysql:버전 |
| 61 | +``` |
| 62 | +이미지를 다 다운받았으면 생성 및 실행을 해보자 |
| 63 | +``` |
| 64 | +docker run --사용자가 사용할 이름 mysql-container -e MYSQL_ROOT_PASSWORD=사용자가 사용할 비번 -d -p 3306:3306 mysql:latest |
| 65 | +``` |
| 66 | +다음은 컨테이나 시작과 중지하는 법이다. |
| 67 | ++ 시작 명령어 |
| 68 | +``` |
| 69 | +docker start mysql-container |
| 70 | +``` |
| 71 | ++ 중지 명령어 |
| 72 | +``` |
| 73 | +docker stop mysql-container |
| 74 | +``` |
| 75 | ++ 재시작 명령어 |
| 76 | +``` |
| 77 | +docker restart mysql-container |
| 78 | +``` |
| 79 | + |
| 80 | +--- |
| 81 | + |
| 82 | +그 다음은 컨테이너에 접속하는 명령어이다. |
| 83 | +``` |
| 84 | +docker exec -it mysql-container bash |
| 85 | +``` |
| 86 | +를쳐주면 아래 상태가 된다. |
| 87 | +``` |
| 88 | +docker exec -it mysql-container bash |
| 89 | +root@dc557b92f573: |
| 90 | +``` |
| 91 | +다음과 같이 쳐준다. |
| 92 | +``` |
| 93 | +docker exec -it mysql-container bash |
| 94 | +root@dc557b92f573:/# mysql -u root -p |
| 95 | +``` |
| 96 | +그럼 또 다음과 같은 상태가 된다. |
| 97 | +``` |
| 98 | +docker exec -it mysql-container bash |
| 99 | +root@dc557b92f573:/# mysql -u root -p |
| 100 | +Enter password: |
| 101 | +``` |
| 102 | +이때 생성 및 실행 단계에서 설정했던 비밀번호를 쳐주면 된다.<br>그럼 다음과 같이 준비가 완료된다. |
| 103 | +``` |
| 104 | +docker exec -it mysql-container bash |
| 105 | +root@dc557b92f573:/# mysql -u root -p |
| 106 | +Enter password: |
| 107 | +Welcome to the MySQL monitor. Commands end with ; or \g. |
| 108 | +Your MySQL connection id is 9 |
| 109 | +Server version: 8.0.22 MySQL Community Server - GPL |
| 110 | +
|
| 111 | +Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. |
| 112 | +
|
| 113 | +Oracle is a registered trademark of Oracle Corporation and/or its |
| 114 | +affiliates. Other names may be trademarks of their respective |
| 115 | +owners. |
| 116 | +
|
| 117 | +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. |
| 118 | +``` |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## INSERT 명령어 |
| 123 | +``` |
| 124 | +INSERT INTO 테이블 (컬럼A, 컬럼B) VALUES(컬럼A에 넣을 데이터, 컬럼B에 넣을 데이터); |
| 125 | +``` |
| 126 | +여기서 <span style="color:yellow">컬럼(column)</span>이란?<br>테이블에 각 열을 말한다. 같은 의미로는 속성(attribute)이 있다. |
| 127 | + |
| 128 | +여기서 한가지 의문점이 또 생긴다. 그렇다면 <span style="color:yellow">테이블</span>이란 또 무엇일까?<br>테이블에 구조에 대해 알아보자. 사람A와 B가 있다고 가정을 했을때<br>다음과 같은 정보를 DB에 담게된다. |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | +이때 행 즉 <span style="color:orange">가로축</span>을 <span style="color:orange">튜플</span>이라 부르고, <span style="color:#34FF56">세로축</span>을 <span style="color:#34FF56">속성이</span>라 부른다.<br>즉 특정 객체의 인스턴스값의 모임이다. ex):A에 대한 인스턴스 = A, 남자, 17<br>속성은 성별이나 나이등 인스턴스값만의 모임이다. ex)성별의 도메인 = 남자, 여자 |
| 133 | + |
| 134 | +.png) |
| 135 | + |
| 136 | +##### (튜플 = row) |
| 137 | + |
| 138 | +--- |
| 139 | + |
| 140 | +## SELECT 명령어 |
| 141 | +select는 CRUD중 read에 해당하는 명령어로 |
| 142 | +``` |
| 143 | +SELECCT 추출할컬럼 FROM 테이블 WHERE 조건문 |
| 144 | +``` |
| 145 | +의 형태로 구성되어 있다. 여기서 조건문은 어떤것을 얘기하냐면 DB에 저장할때<br>보통 튜플 하나당 아이디(ID) 하나가 할당 되어있는데 (id >= 90)라는 조건문을 쓰면<br>해당테이블에 90보다 큰 아이디값을 가진 컬럼을 추출한다. |
| 146 | + |
| 147 | +--- |
| 148 | + |
| 149 | +## UPDATE 명령어 |
| 150 | +update는 컬럼을 수정하는 명령문이다. |
| 151 | +``` |
| 152 | +UPDATE 테이블 SET 컬럼A='컬럼A에 수정할 데이터' WHERE 조건식 |
| 153 | +``` |
| 154 | +으로 구성되어있다. 조건식에 참이되는 모든 컬럼A를 ''안에 들어간 값으로 바꾼다. |
| 155 | + |
| 156 | +--- |
| 157 | + |
| 158 | +## DELETE 명령어 |
| 159 | +delete는 특정 데이터나 아니면 테이블에 있는 데이터를 삭제할 수 있다. |
| 160 | +``` |
| 161 | +DELETE FROM 테이블 WHERE 조건문 |
| 162 | +``` |
| 163 | +이렇게 쓰면 조건문에 참이되는 테이블의 데이터는 삭제된다. |
| 164 | + |
| 165 | +※여기서 주의 할 점※<br>조건문을 쓰지 않으면<span style="color:red">테이블의 모든 데이터가 삭제된다</span>. |
| 166 | + |
| 167 | +--- |
| 168 | + |
| 169 | +우린 지금까지 table란걸 계속 적었는데 우린 아직 table을 만드는 법을 모른다.<br>따라서 테이블을 만드는 명령어에 대해 알아보자. |
| 170 | + |
| 171 | +## 테이블 생성 |
| 172 | +먼저 쿼리는 아래 구조로 이루어져 있다. |
| 173 | +``` |
| 174 | +CREATE TABLE `테이블이름` { |
| 175 | + `컬럼명1` DATATYPE , |
| 176 | + `컬럼명2` DATATYPE , |
| 177 | + `컬럼명3` DATATYPE |
| 178 | +}; |
| 179 | +``` |
| 180 | +주의할 점이 있는데 |
| 181 | +1. 테이블을 생성할 때 대/소문자를 구분하지 않는다. |
| 182 | +2. 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시해야 한다. |
| 183 | +3. SQL은 자료형이 따로있으니 참고 바람(나중에 정리해서 올릴예정) |
| 184 | +###### (특히 세미 콜론 찍는거 잊지말자) |
| 185 | + |
| 186 | +--- |
0 commit comments