├── .gitignore ├── LICENSE ├── README.md ├── docker └── README.md ├── flutter └── README.md ├── mongodb ├── BasicOperations.md ├── README.md ├── mongo-python.ipynb └── photo-test.json ├── mysql ├── HowToMakeDB.md └── README.md ├── python └── README.md └── vue └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 EDDI-WebAppAcademy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Documents 2 | 소프트웨어 설치와 관련한 기본적인 설정 문서들 3 | -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | # Windows 에 Docker 설치하기 2 | 3 | ```make 4 | 1. https://docs.docker.com/desktop/windows/ 이동 5 | 2. https://docs.docker.com/desktop/windows/install/ 이동 6 | 3. Docker Desktop for Windows 다운로드 7 | 4. 제어판 -> 프로그램 설치 및 제거 -> Windows 기능 켜기/끄기 -> Hyper-V 체크 8 | 5. 체크 완료 이후 리부팅 (체크 되어 있었다면 리부팅 필요없음) 9 | 6. 리부팅 이후 설치 진행 10 | 7. 전부 체크 11 | 8. Docker 설치 완료 이후 다시 재부팅 12 | 9. 나타나는 창에 동의 클릭 13 | 10. https://docs.microsoft.com/ko-kr/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package 패치 14 | 11. x64 WSL 업데이트 패치 설치 15 | 12. PowerShell 에서 wsl --set-default-version 2 입력 16 | 13. 아래 링크의 절차를 따라서 리눅스를 설치합니다. 17 | https://learn.microsoft.com/ko-kr/windows/wsl/install-manual#step-6---install-your-linux-distribution-of-choice 18 | Docker라서 버전이 상관 없지만 20.04가 가장 무난할 것으로 파악됨. 19 | 모든 설치가 완료되면 OK! 20 | ``` 21 | -------------------------------------------------------------------------------- /flutter/README.md: -------------------------------------------------------------------------------- 1 | ## Flutter 설치 2 | 3 | 1. Android Studio 설치 4 | 2. SDK 위치로 이동 -> Flutter SDK 설치(OS에 맞게 다운로드) 5 | https://docs.flutter.dev/development/tools/sdk/releases?tab=windows 6 | 되도록이면 각종 side effect 를 피하기 위해 2.10.3 버전으로 통일한다. 7 | https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_2.10.3-stable.zip 8 | 4. 설치시 설치 경로를 c 혹은 d 드라이브에 flutter 로 배치하도록 한다. 9 | 5. 자동 등록이 안된다면 윈도우 환경 변수 등록 10 | 6. 터미널에서 flutter --version 을 통해 버전이 나오는지 확인한다. 11 | 12 | ## 가장 무난한 방법 13 | 14 | 1. Android Studio 설치 15 | 2. 안드로이드 스튜디오 실행 후 Ctrl + Alt + S 누름 16 | 3. Plugins 에서 Flutter 찾아서 설치 17 | 4. 설치 완료후 Android Studio 재실행 18 | 5. File -> New Flutter Project 로 플러터 프로젝트 생성 19 | 20 | * 만약 이때 Flutter 를 못 찾는다는 메시지가 나타난다면 아래 위치에서 flutter 를 직접 다운로드 받도록 한다. 21 | 22 | SDK 위치로 이동 -> Flutter SDK 설치(OS에 맞게 다운로드) 23 | https://docs.flutter.dev/development/tools/sdk/releases?tab=windows 24 | 되도록이면 각종 side effect 를 피하기 위해 2.10.3 버전으로 통일한다. 25 | https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_2.10.3-stable.zip 26 | 27 | 추가적으로 압축을 풀어다 C 드라이브에 배치한다. 28 | 그리고 환경 설정에 해당 경로를 배차하여 터미널에서 flutter --version 정보가 나오도록 설정한다. 29 | 30 | MaC 혹은 Linux 의 경우엔 아래와 같은 스크립트를 배치해야 한다. 31 | vi ~/.bash_profile 에 export PATH=$PATH:/home/계정/flutter/bin 32 | 이후 source ~/.bash_profile 하면 적용 완료 33 | 실제 Android Studio 터미널에서 구동 안될 경우 .zshrc 에 위의 작업을 동일하게 해줌 34 | 35 | 7. Flutter App 선택하고 Next 신공 36 | 8. 프로젝트 생성 이후 Android Stduio 자체 터미널에서 flutter doctor 입력 37 | 9. Android Toolchain 문제가 거론된다면 flutter doctor --android-licenses 38 | 10. 클래스를 못찾는다고 말한다면 SDK Manager -> SDK Tools -> Android SDK Command-line Tools 체크 후 설치 39 | -------------------------------------------------------------------------------- /mongodb/BasicOperations.md: -------------------------------------------------------------------------------- 1 | # DB 생성 2 | 3 | ```make 4 | use sensor 5 | show dbs 6 | db.sensor.insert({"mpu6050": 14.2}) 7 | show dbs 8 | ``` 9 | 10 | # root 유저 생성 11 | 12 | ```make 13 | use admin 14 | db.createUser({user: "root", pwd: "456123", roles: ["userAdminAnyDatabase"], mechanisms: ["SCRAM-SHA-1"]}) 15 | ``` 16 | 17 | # 일반 사용자 생성 18 | 19 | ```make 20 | use sensor 21 | db.createUser({user: "eddi", pwd: "eddi@123", roles: ["readWrite"], mechanisms: ["SCRAM-SHA-1"]}) 22 | ``` 23 | 24 | # 유저 리스트 보기 25 | 26 | ```make 27 | db.getUsers() 28 | ``` 29 | 30 | # 유저 삭제 31 | 32 | ```make 33 | db.dropUser("name") 34 | ``` 35 | 36 | -------------------------------------------------------------------------------- /mongodb/README.md: -------------------------------------------------------------------------------- 1 | # Linux (Ubuntu 20.04) 2 | 3 | ```make 4 | sudo apt-get install gnupg 5 | wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - 6 | 7 | echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list 8 | 9 | sudo apt-get update 10 | 11 | sudo apt-get install -y mongodb-org 12 | 13 | ps --no-headers -o comm 1 // 초기화 14 | 15 | sudo systemctl start mongod 16 | sudo systemctl daemon-reload 17 | 18 | sudo systemctl status mongod 19 | 20 | sudo systemctl stop mongod 21 | 22 | sudo systemctl restart mongod 23 | 24 | mongosh 25 | ``` 26 | 27 | # Mac 28 | 29 | 하단 링크 참고 30 | https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-os-x/ 31 | 32 | # Windows 33 | 34 | https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/ 35 | -------------------------------------------------------------------------------- /mongodb/mongo-python.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Collecting pymongo\n", 13 | " Downloading pymongo-4.2.0-cp37-cp37m-manylinux2014_x86_64.whl (489 kB)\n", 14 | "\u001b[K |████████████████████████████████| 489 kB 6.9 MB/s eta 0:00:01\n", 15 | "\u001b[?25hInstalling collected packages: pymongo\n", 16 | "Successfully installed pymongo-4.2.0\n" 17 | ] 18 | } 19 | ], 20 | "source": [ 21 | "!pip install pymongo" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "# Linux\n", 31 | "# service mongod status\n", 32 | "# service mongod start\n", 33 | "# service mongod status" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 3, 39 | "metadata": {}, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "['admin', 'config', 'local', 'sensor']\n" 46 | ] 47 | } 48 | ], 49 | "source": [ 50 | "from pymongo import MongoClient\n", 51 | "\n", 52 | "client = MongoClient(host='localhost', port=27017)\n", 53 | "\n", 54 | "print(client.list_database_names())" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 17, 60 | "metadata": {}, 61 | "outputs": [ 62 | { 63 | "name": "stdout", 64 | "output_type": "stream", 65 | "text": [ 66 | "MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, authsource='admin')\n" 67 | ] 68 | } 69 | ], 70 | "source": [ 71 | "import urllib\n", 72 | "\n", 73 | "MONGO_HOST = \"localhost\"\n", 74 | "MONGO_PORT = \"27017\"\n", 75 | "MONGO_DB = \"sensor\"\n", 76 | "MONGO_USER = \"eddi\"\n", 77 | "MONGO_PASS = urllib.parse.quote_plus(\"eddi@123\")\n", 78 | "\n", 79 | "uri = \"mongodb://{}:{}@{}:{}/{}?authSource=admin\".format(MONGO_USER, MONGO_PASS, MONGO_HOST, MONGO_PORT, MONGO_DB)\n", 80 | "client = MongoClient(uri)\n", 81 | "\n", 82 | "print(client)" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 40, 88 | "metadata": {}, 89 | "outputs": [ 90 | { 91 | "name": "stdout", 92 | "output_type": "stream", 93 | "text": [ 94 | "['admin', 'config', 'local', 'sensor', 'test-db']\n", 95 | "['customers']\n" 96 | ] 97 | } 98 | ], 99 | "source": [ 100 | "client = MongoClient(host='localhost', port=27017)\n", 101 | "\n", 102 | "db = client[\"test-db\"]\n", 103 | "mycol = db[\"customers\"]\n", 104 | "\n", 105 | "mydict = { \"name\": \"John\", \"address\": \"Highway 37\" }\n", 106 | "\n", 107 | "x = mycol.insert_one(mydict)\n", 108 | "\n", 109 | "print(client.list_database_names())\n", 110 | "print(db.list_collection_names())" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 41, 116 | "metadata": {}, 117 | "outputs": [ 118 | { 119 | "name": "stdout", 120 | "output_type": "stream", 121 | "text": [ 122 | "6322922257071ce3ba4c0c57\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "mydict = { \"name\": \"Peter\", \"address\": \"Lowstreet 27\" }\n", 128 | "\n", 129 | "x = mycol.insert_one(mydict)\n", 130 | "\n", 131 | "print(x.inserted_id)" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 42, 137 | "metadata": {}, 138 | "outputs": [ 139 | { 140 | "name": "stdout", 141 | "output_type": "stream", 142 | "text": [ 143 | "[ObjectId('6322925057071ce3ba4c0c58'), ObjectId('6322925057071ce3ba4c0c59'), ObjectId('6322925057071ce3ba4c0c5a'), ObjectId('6322925057071ce3ba4c0c5b'), ObjectId('6322925057071ce3ba4c0c5c'), ObjectId('6322925057071ce3ba4c0c5d'), ObjectId('6322925057071ce3ba4c0c5e'), ObjectId('6322925057071ce3ba4c0c5f'), ObjectId('6322925057071ce3ba4c0c60'), ObjectId('6322925057071ce3ba4c0c61'), ObjectId('6322925057071ce3ba4c0c62'), ObjectId('6322925057071ce3ba4c0c63')]\n" 144 | ] 145 | } 146 | ], 147 | "source": [ 148 | "mylist = [\n", 149 | " { \"name\": \"Amy\", \"address\": \"Apple st 652\"},\n", 150 | " { \"name\": \"Hannah\", \"address\": \"Mountain 21\"},\n", 151 | " { \"name\": \"Michael\", \"address\": \"Valley 345\"},\n", 152 | " { \"name\": \"Sandy\", \"address\": \"Ocean blvd 2\"},\n", 153 | " { \"name\": \"Betty\", \"address\": \"Green Grass 1\"},\n", 154 | " { \"name\": \"Richard\", \"address\": \"Sky st 331\"},\n", 155 | " { \"name\": \"Susan\", \"address\": \"One way 98\"},\n", 156 | " { \"name\": \"Vicky\", \"address\": \"Yellow Garden 2\"},\n", 157 | " { \"name\": \"Ben\", \"address\": \"Park Lane 38\"},\n", 158 | " { \"name\": \"William\", \"address\": \"Central st 954\"},\n", 159 | " { \"name\": \"Chuck\", \"address\": \"Main Road 989\"},\n", 160 | " { \"name\": \"Viola\", \"address\": \"Sideway 1633\"}\n", 161 | "]\n", 162 | "\n", 163 | "x = mycol.insert_many(mylist)\n", 164 | "\n", 165 | "#print list of the _id values of the inserted documents:\n", 166 | "print(x.inserted_ids)" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 43, 172 | "metadata": {}, 173 | "outputs": [ 174 | { 175 | "name": "stdout", 176 | "output_type": "stream", 177 | "text": [ 178 | "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\n" 179 | ] 180 | } 181 | ], 182 | "source": [ 183 | "otherlist = [\n", 184 | " { \"_id\": 1, \"name\": \"John\", \"address\": \"Highway 37\"},\n", 185 | " { \"_id\": 2, \"name\": \"Peter\", \"address\": \"Lowstreet 27\"},\n", 186 | " { \"_id\": 3, \"name\": \"Amy\", \"address\": \"Apple st 652\"},\n", 187 | " { \"_id\": 4, \"name\": \"Hannah\", \"address\": \"Mountain 21\"},\n", 188 | " { \"_id\": 5, \"name\": \"Michael\", \"address\": \"Valley 345\"},\n", 189 | " { \"_id\": 6, \"name\": \"Sandy\", \"address\": \"Ocean blvd 2\"},\n", 190 | " { \"_id\": 7, \"name\": \"Betty\", \"address\": \"Green Grass 1\"},\n", 191 | " { \"_id\": 8, \"name\": \"Richard\", \"address\": \"Sky st 331\"},\n", 192 | " { \"_id\": 9, \"name\": \"Susan\", \"address\": \"One way 98\"},\n", 193 | " { \"_id\": 10, \"name\": \"Vicky\", \"address\": \"Yellow Garden 2\"},\n", 194 | " { \"_id\": 11, \"name\": \"Ben\", \"address\": \"Park Lane 38\"},\n", 195 | " { \"_id\": 12, \"name\": \"William\", \"address\": \"Central st 954\"},\n", 196 | " { \"_id\": 13, \"name\": \"Chuck\", \"address\": \"Main Road 989\"},\n", 197 | " { \"_id\": 14, \"name\": \"Viola\", \"address\": \"Sideway 1633\"}\n", 198 | "]\n", 199 | "\n", 200 | "x = mycol.insert_many(otherlist)\n", 201 | "\n", 202 | "#print list of the _id values of the inserted documents:\n", 203 | "print(x.inserted_ids)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 44, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "name": "stdout", 213 | "output_type": "stream", 214 | "text": [ 215 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n" 216 | ] 217 | } 218 | ], 219 | "source": [ 220 | "x = mycol.find_one()\n", 221 | "\n", 222 | "print(x)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 45, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "name": "stdout", 232 | "output_type": "stream", 233 | "text": [ 234 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n", 235 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John', 'address': 'Highway 37'}\n", 236 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John', 'address': 'Highway 37'}\n", 237 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 238 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy', 'address': 'Apple st 652'}\n", 239 | "{'_id': ObjectId('6322925057071ce3ba4c0c59'), 'name': 'Hannah', 'address': 'Mountain 21'}\n", 240 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael', 'address': 'Valley 345'}\n", 241 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 242 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty', 'address': 'Green Grass 1'}\n", 243 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard', 'address': 'Sky st 331'}\n", 244 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan', 'address': 'One way 98'}\n", 245 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 246 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben', 'address': 'Park Lane 38'}\n", 247 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William', 'address': 'Central st 954'}\n", 248 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck', 'address': 'Main Road 989'}\n", 249 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola', 'address': 'Sideway 1633'}\n", 250 | "{'_id': 1, 'name': 'John', 'address': 'Highway 37'}\n", 251 | "{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 252 | "{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}\n", 253 | "{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}\n", 254 | "{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}\n", 255 | "{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 256 | "{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}\n", 257 | "{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}\n", 258 | "{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}\n", 259 | "{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 260 | "{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}\n", 261 | "{'_id': 12, 'name': 'William', 'address': 'Central st 954'}\n", 262 | "{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}\n", 263 | "{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633'}\n" 264 | ] 265 | } 266 | ], 267 | "source": [ 268 | "for x in mycol.find():\n", 269 | " print(x)" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": 46, 275 | "metadata": {}, 276 | "outputs": [ 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "{'name': 'John', 'address': 'Highway 37'}\n", 282 | "{'name': 'John', 'address': 'Highway 37'}\n", 283 | "{'name': 'John', 'address': 'Highway 37'}\n", 284 | "{'name': 'Peter', 'address': 'Lowstreet 27'}\n", 285 | "{'name': 'Amy', 'address': 'Apple st 652'}\n", 286 | "{'name': 'Hannah', 'address': 'Mountain 21'}\n", 287 | "{'name': 'Michael', 'address': 'Valley 345'}\n", 288 | "{'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 289 | "{'name': 'Betty', 'address': 'Green Grass 1'}\n", 290 | "{'name': 'Richard', 'address': 'Sky st 331'}\n", 291 | "{'name': 'Susan', 'address': 'One way 98'}\n", 292 | "{'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 293 | "{'name': 'Ben', 'address': 'Park Lane 38'}\n", 294 | "{'name': 'William', 'address': 'Central st 954'}\n", 295 | "{'name': 'Chuck', 'address': 'Main Road 989'}\n", 296 | "{'name': 'Viola', 'address': 'Sideway 1633'}\n", 297 | "{'name': 'John', 'address': 'Highway 37'}\n", 298 | "{'name': 'Peter', 'address': 'Lowstreet 27'}\n", 299 | "{'name': 'Amy', 'address': 'Apple st 652'}\n", 300 | "{'name': 'Hannah', 'address': 'Mountain 21'}\n", 301 | "{'name': 'Michael', 'address': 'Valley 345'}\n", 302 | "{'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 303 | "{'name': 'Betty', 'address': 'Green Grass 1'}\n", 304 | "{'name': 'Richard', 'address': 'Sky st 331'}\n", 305 | "{'name': 'Susan', 'address': 'One way 98'}\n", 306 | "{'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 307 | "{'name': 'Ben', 'address': 'Park Lane 38'}\n", 308 | "{'name': 'William', 'address': 'Central st 954'}\n", 309 | "{'name': 'Chuck', 'address': 'Main Road 989'}\n", 310 | "{'name': 'Viola', 'address': 'Sideway 1633'}\n" 311 | ] 312 | } 313 | ], 314 | "source": [ 315 | "for x in mycol.find({},{ \"_id\": 0, \"name\": 1, \"address\": 1 }):\n", 316 | " print(x)" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 47, 322 | "metadata": {}, 323 | "outputs": [ 324 | { 325 | "name": "stdout", 326 | "output_type": "stream", 327 | "text": [ 328 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John'}\n", 329 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John'}\n", 330 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John'}\n", 331 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter'}\n", 332 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy'}\n", 333 | "{'_id': ObjectId('6322925057071ce3ba4c0c59'), 'name': 'Hannah'}\n", 334 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael'}\n", 335 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy'}\n", 336 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty'}\n", 337 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard'}\n", 338 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan'}\n", 339 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky'}\n", 340 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben'}\n", 341 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William'}\n", 342 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck'}\n", 343 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola'}\n", 344 | "{'_id': 1, 'name': 'John'}\n", 345 | "{'_id': 2, 'name': 'Peter'}\n", 346 | "{'_id': 3, 'name': 'Amy'}\n", 347 | "{'_id': 4, 'name': 'Hannah'}\n", 348 | "{'_id': 5, 'name': 'Michael'}\n", 349 | "{'_id': 6, 'name': 'Sandy'}\n", 350 | "{'_id': 7, 'name': 'Betty'}\n", 351 | "{'_id': 8, 'name': 'Richard'}\n", 352 | "{'_id': 9, 'name': 'Susan'}\n", 353 | "{'_id': 10, 'name': 'Vicky'}\n", 354 | "{'_id': 11, 'name': 'Ben'}\n", 355 | "{'_id': 12, 'name': 'William'}\n", 356 | "{'_id': 13, 'name': 'Chuck'}\n", 357 | "{'_id': 14, 'name': 'Viola'}\n" 358 | ] 359 | } 360 | ], 361 | "source": [ 362 | "for x in mycol.find({},{ \"address\": 0 }):\n", 363 | " print(x)" 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 48, 369 | "metadata": {}, 370 | "outputs": [ 371 | { 372 | "name": "stdout", 373 | "output_type": "stream", 374 | "text": [ 375 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy', 'address': 'Apple st 652'}\n", 376 | "{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}\n", 377 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben', 'address': 'Park Lane 38'}\n", 378 | "{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}\n", 379 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty', 'address': 'Green Grass 1'}\n", 380 | "{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}\n", 381 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck', 'address': 'Main Road 989'}\n", 382 | "{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}\n", 383 | "{'_id': ObjectId('6322925057071ce3ba4c0c59'), 'name': 'Hannah', 'address': 'Mountain 21'}\n", 384 | "{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}\n", 385 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n", 386 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John', 'address': 'Highway 37'}\n", 387 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John', 'address': 'Highway 37'}\n", 388 | "{'_id': 1, 'name': 'John', 'address': 'Highway 37'}\n", 389 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael', 'address': 'Valley 345'}\n", 390 | "{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}\n", 391 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 392 | "{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 393 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard', 'address': 'Sky st 331'}\n", 394 | "{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}\n", 395 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 396 | "{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 397 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan', 'address': 'One way 98'}\n", 398 | "{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}\n", 399 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 400 | "{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 401 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola', 'address': 'Sideway 1633'}\n", 402 | "{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633'}\n", 403 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William', 'address': 'Central st 954'}\n", 404 | "{'_id': 12, 'name': 'William', 'address': 'Central st 954'}\n" 405 | ] 406 | } 407 | ], 408 | "source": [ 409 | "mydoc = mycol.find().sort(\"name\")\n", 410 | "\n", 411 | "for x in mydoc:\n", 412 | " print(x)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": 49, 418 | "metadata": {}, 419 | "outputs": [ 420 | { 421 | "name": "stdout", 422 | "output_type": "stream", 423 | "text": [ 424 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William', 'address': 'Central st 954'}\n", 425 | "{'_id': 12, 'name': 'William', 'address': 'Central st 954'}\n", 426 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola', 'address': 'Sideway 1633'}\n", 427 | "{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633'}\n", 428 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 429 | "{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 430 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan', 'address': 'One way 98'}\n", 431 | "{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}\n", 432 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 433 | "{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 434 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard', 'address': 'Sky st 331'}\n", 435 | "{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}\n", 436 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 437 | "{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 438 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael', 'address': 'Valley 345'}\n", 439 | "{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}\n", 440 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n", 441 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John', 'address': 'Highway 37'}\n", 442 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John', 'address': 'Highway 37'}\n", 443 | "{'_id': 1, 'name': 'John', 'address': 'Highway 37'}\n", 444 | "{'_id': ObjectId('6322925057071ce3ba4c0c59'), 'name': 'Hannah', 'address': 'Mountain 21'}\n", 445 | "{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}\n", 446 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck', 'address': 'Main Road 989'}\n", 447 | "{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}\n", 448 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty', 'address': 'Green Grass 1'}\n", 449 | "{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}\n", 450 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben', 'address': 'Park Lane 38'}\n", 451 | "{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}\n", 452 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy', 'address': 'Apple st 652'}\n", 453 | "{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}\n" 454 | ] 455 | } 456 | ], 457 | "source": [ 458 | "mydoc = mycol.find().sort(\"name\", -1)\n", 459 | "\n", 460 | "for x in mydoc:\n", 461 | " print(x)" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": 50, 467 | "metadata": {}, 468 | "outputs": [ 469 | { 470 | "name": "stdout", 471 | "output_type": "stream", 472 | "text": [ 473 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n", 474 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John', 'address': 'Highway 37'}\n", 475 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John', 'address': 'Highway 37'}\n", 476 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 477 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy', 'address': 'Apple st 652'}\n", 478 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael', 'address': 'Valley 345'}\n", 479 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 480 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty', 'address': 'Green Grass 1'}\n", 481 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard', 'address': 'Sky st 331'}\n", 482 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan', 'address': 'One way 98'}\n", 483 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 484 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben', 'address': 'Park Lane 38'}\n", 485 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William', 'address': 'Central st 954'}\n", 486 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck', 'address': 'Main Road 989'}\n", 487 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola', 'address': 'Sideway 1633'}\n", 488 | "{'_id': 1, 'name': 'John', 'address': 'Highway 37'}\n", 489 | "{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 490 | "{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}\n", 491 | "{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}\n", 492 | "{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}\n", 493 | "{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 494 | "{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}\n", 495 | "{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}\n", 496 | "{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}\n", 497 | "{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 498 | "{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}\n", 499 | "{'_id': 12, 'name': 'William', 'address': 'Central st 954'}\n", 500 | "{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}\n", 501 | "{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633'}\n" 502 | ] 503 | } 504 | ], 505 | "source": [ 506 | "myquery = { \"address\": \"Mountain 21\" }\n", 507 | "\n", 508 | "mycol.delete_one(myquery)\n", 509 | "\n", 510 | "for x in mycol.find():\n", 511 | " print(x)" 512 | ] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "execution_count": 51, 517 | "metadata": {}, 518 | "outputs": [ 519 | { 520 | "name": "stdout", 521 | "output_type": "stream", 522 | "text": [ 523 | "{'_id': ObjectId('6322907457071ce3ba4c0c50'), 'name': 'John', 'address': 'Highway 37'}\n", 524 | "{'_id': ObjectId('6322908257071ce3ba4c0c52'), 'name': 'John', 'address': 'Highway 37'}\n", 525 | "{'_id': ObjectId('632290a957071ce3ba4c0c56'), 'name': 'John', 'address': 'Highway 37'}\n", 526 | "{'_id': ObjectId('6322922257071ce3ba4c0c57'), 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 527 | "{'_id': ObjectId('6322925057071ce3ba4c0c58'), 'name': 'Amy', 'address': 'Apple st 652'}\n", 528 | "{'_id': ObjectId('6322925057071ce3ba4c0c5a'), 'name': 'Michael', 'address': 'Canyon 123'}\n", 529 | "{'_id': ObjectId('6322925057071ce3ba4c0c5b'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 530 | "{'_id': ObjectId('6322925057071ce3ba4c0c5c'), 'name': 'Betty', 'address': 'Green Grass 1'}\n", 531 | "{'_id': ObjectId('6322925057071ce3ba4c0c5d'), 'name': 'Richard', 'address': 'Sky st 331'}\n", 532 | "{'_id': ObjectId('6322925057071ce3ba4c0c5e'), 'name': 'Susan', 'address': 'One way 98'}\n", 533 | "{'_id': ObjectId('6322925057071ce3ba4c0c5f'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 534 | "{'_id': ObjectId('6322925057071ce3ba4c0c60'), 'name': 'Ben', 'address': 'Park Lane 38'}\n", 535 | "{'_id': ObjectId('6322925057071ce3ba4c0c61'), 'name': 'William', 'address': 'Central st 954'}\n", 536 | "{'_id': ObjectId('6322925057071ce3ba4c0c62'), 'name': 'Chuck', 'address': 'Main Road 989'}\n", 537 | "{'_id': ObjectId('6322925057071ce3ba4c0c63'), 'name': 'Viola', 'address': 'Sideway 1633'}\n", 538 | "{'_id': 1, 'name': 'John', 'address': 'Highway 37'}\n", 539 | "{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}\n", 540 | "{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}\n", 541 | "{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}\n", 542 | "{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}\n", 543 | "{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}\n", 544 | "{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}\n", 545 | "{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}\n", 546 | "{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}\n", 547 | "{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}\n", 548 | "{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}\n", 549 | "{'_id': 12, 'name': 'William', 'address': 'Central st 954'}\n", 550 | "{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}\n", 551 | "{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633'}\n" 552 | ] 553 | } 554 | ], 555 | "source": [ 556 | "myquery = { \"address\": \"Valley 345\" }\n", 557 | "newvalues = { \"$set\": { \"address\": \"Canyon 123\" } }\n", 558 | "\n", 559 | "mycol.update_one(myquery, newvalues)\n", 560 | "\n", 561 | "#print \"customers\" after the update:\n", 562 | "for x in mycol.find():\n", 563 | " print(x)" 564 | ] 565 | }, 566 | { 567 | "cell_type": "code", 568 | "execution_count": null, 569 | "metadata": {}, 570 | "outputs": [], 571 | "source": [] 572 | } 573 | ], 574 | "metadata": { 575 | "kernelspec": { 576 | "display_name": "Python 3", 577 | "language": "python", 578 | "name": "python3" 579 | }, 580 | "language_info": { 581 | "codemirror_mode": { 582 | "name": "ipython", 583 | "version": 3 584 | }, 585 | "file_extension": ".py", 586 | "mimetype": "text/x-python", 587 | "name": "python", 588 | "nbconvert_exporter": "python", 589 | "pygments_lexer": "ipython3", 590 | "version": "3.7.6" 591 | } 592 | }, 593 | "nbformat": 4, 594 | "nbformat_minor": 4 595 | } 596 | -------------------------------------------------------------------------------- /mysql/HowToMakeDB.md: -------------------------------------------------------------------------------- 1 | # MySQL DB Control 2 | 3 | ## How to Control DB ? 4 | 5 | 1. 먼저 DB 계정으로 로그인한다. 6 | 2. 이후 아래 명령을 입력하여 새로운 스키마를 작성한다. 7 | 8 | ```make 9 | create schema `non_jpa_db` default character set utf8mb4; 10 | ``` 11 | 12 | 3. 이제 다시 아래의 명령을 입력하여 새로운 스키마 작성을 확인한다. 13 | 14 | ```make 15 | show databases; 16 | ``` 17 | 18 | 4. 현재 문자열 셋을 보기 위해 아래 명령을 통해 utf8이 박혀있는지 확인한다. 19 | 20 | ```make 21 | status; 22 | ``` 23 | 24 | * 사용자 계정 생성시 보안 문제 발생하는 경우 (MAC에서 발생하는 문제임) 25 | 26 | ```make 27 | 비밀번호 정책 다운 그레이드 28 | 현재 정책값 보기 29 | show variables like 'validate_password%'; 30 | 낮추기 31 | set global validate_password.policy=LOW; 32 | ``` 33 | 34 | 5. 이제 사용자 계정을 생성한다. 35 | root 계정 사용하면 컴퓨터 털어가세요란 뜻이라 절대로 하면 안됨 36 | 37 | ```make 38 | create user eddi@localhost identified by 'eddi@123'; 39 | ``` 40 | 41 | 6. 사용자 계정이 DB를 활용할 수 있도록 권한을 위임한다. 42 | 43 | ```make 44 | grant all privileges on non_jpa_db.* to eddi@localhost; 45 | ``` 46 | 47 | 7. 현재 상태 저장 48 | 49 | ```make 50 | flush privileges; 51 | ``` 52 | 53 | 8. 권한이 잘 설정되었는지 체크한다. 54 | 55 | ```make 56 | show grants for 'eddi'@'localhost'; 57 | ``` 58 | 59 | 9. 이제 실제 테이블을 만들어보자! 60 | 61 | ```make 62 | use non_jpa_db; 63 | create table board( 64 | board_no int not null auto_increment, 65 | title varchar(200) not null, 66 | content text null, 67 | writer varchar(50) not null, 68 | reg_date timestamp not null default now(), 69 | primary key(board_no) 70 | ); 71 | 72 | use를 통해 어떤 DB(스키마)를 사용할지 지정함[앞서 만든게 non_jpa_db임 73 | create table을 통해 테이블을 생성할 수 있음 74 | 현재 table 이름은 board 에 해당함 75 | 테이블 내부에는 column(열)이 구성됨 76 | 첫 번째 열로 board_no라는 이름이 왔고 77 | int not null auto_increment로 0이 되어선 안되며 숫자값이고 자동으로 1씩 증가함을 의미함 78 | 두 번째 열로 title이라는 이름이 왔고 79 | varchar(200)으로 문자 200개를 받으며 not null을 통해 null이 되면 안된다고 한다. 80 | 세 번째 열로 content는 text로 상당히 많은 수의 문자열을 커버할 수 있고 null 이어도 된다고 한다. 81 | 네 번째는 writer 로 varchar(50)에 not null 이다. 82 | 다섯 번째는 reg_date이며 timestamp로 시간을 표현한다. 83 | default 를 통해 기본값을 지정하는데 now() 이므로 현재 시간을 뜻한다. 84 | primary key(board_no)를 통해 이 테이블의 고유한 정보를 board_no가 관리함을 명시해준다. 85 | ``` 86 | -------------------------------------------------------------------------------- /mysql/README.md: -------------------------------------------------------------------------------- 1 | # MySQL 설정법 2 | 3 | ## Prerequisite(전제 조건) 4 | 5 | ```make 6 | 기존 Vue 설치시 작업했던 node.js 설정에서 설치했던 7 | C/C++ Native 라이브러리와 python 등등의 설치가 올바르게 되어 있어야함 8 | 9 | 만약 nodejs 설치시 C/C++ Native 설정을 하지 못한 경우 10 | 포맷하지 않는 이상 다시 설정할 수 없을 수도 있다. 11 | 혹은 레지스트리 설정을 다 까뒤집어야해서 포맷이 차라리 속 편할 수 있는데 12 | 우선 아래 사이트에서 호환 라이브러리를 다운받아 설치한다. 13 | ``` 14 | 15 | https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0 16 | 17 | ```make 18 | 임시방편일 뿐이므로 향후 다른 문제가 발생할 수 있고 19 | 시간이 있을때 미리 포맷하고 다시 설정을 해두는 것이 좋을 수 있다. 20 | 추가적으로 Python 3.9 버전도 수동으로 설치하도록 한다. 21 | 이 부분도 nodejs 설치시 자동으로 설치하므로 22 | 만약 포맷하고 다시 하는 사람이라면 수동으로 할 필요는 없다. 23 | ``` 24 | 25 | ## 용량이 부족한 경우 26 | 27 | ```make 28 | 아래 링크를 참고합니다. 29 | 30 | https://dang-dang12.tistory.com/7 31 | ``` 32 | 33 | ## brew 가 없는 경우 (MAC 한정) 34 | 35 | ```make 36 | https://brew.sh/index_ko 37 | ``` 38 | 39 | ## MySQL Shell 설치 안될 경우 (Windows 한정) 40 | 41 | ```make 42 | https://dev.mysql.com/downloads/shell/ 43 | ``` 44 | 45 | ## How to install MySQL on Windows 46 | 47 | ```make 48 | 1. Google에서 MySQL을 검색한다. 49 | 2. 공식 사이트에 진입한다. 50 | 3. 다운로드를 누른다. 51 | https://www.mysql.com/downloads/ 52 | 4. https://dev.mysql.com/downloads/mysql/ 페이지로 이동하자! 53 | 5. Windows (x86, 64-bit), ZIP Archive가 아닌 MSI를 다운로드한다. 54 | 6. No thanks, just start my download. <<<<<< 누르면 오라클 회원가입 필요없음 55 | 7. 다운로드가 꽤 길기 때문에 티타임을 가지도록 합니다. 56 | 8. 다운이 완료되면 클릭하여 설치하도록 한다. 57 | 9. 설치 준비를 한다고 하면서 뭔가 좀 오랫동안 작업을 한다. 58 | 59 | 1) Developer Default 선택 60 | 2) VS를 위한 MySQL 설정이 있는데 건드리지 않고 Next 61 | 3) 뭔가 비어 있는것이 있어 설치가 제대로 되지 않을수도 있다고 하지만 일단 yes하고 설치한다. 62 | 4) 서버가 들어있는지 확인하고 Execute를 누르도록 한다. 63 | 5) 또 한참 설치한다 ... 커피를 가져오라 ... 64 | 6) 모두 Complete가 되었다면 Next로 진행한다. 65 | 여기서 중요한 부분은 Server, Shell, ODBC, C++, J, Python 에 해당한다. 66 | 7) 이후 Next 67 | 8) Config Type: Development Computer 68 | TCP/IP Port: 3306 <<<--- MySQL이 사용하는 Port임 69 | 확인후 Next 70 | 9) Use Legacy Authentication Method (Retain MySQL 5.x Compatibility) 선택 71 | 10) 비밀번호를 학원 맞춤형으로 khWeb@123 72 | 11) 시스템 구동시 MySQL 서버 시작 체크하고 Next 73 | 12) 어떤 내용들이 진행되는지 간략한 요약을 보여주는데 Execute를 누른다. 74 | 13) 설치가 완료되면 Finish를 누른다. 75 | 14) Next를 누른다. 76 | 15) Bootstrap 부분에 문제가 생기므로 차후 수동 설정으로 진행 -> Finish 클릭 77 | 16) Next 78 | 17) root 계정 비밀번호 넣으란 자리에 설정한 비번 설정해서 79 | Connection Succeeded가 나와야 함 80 | 나오면 Next 81 | 18) Execute 클릭 82 | 19) Finish 83 | 20) Next 84 | 21) Finish 85 | 22) Workbench와 Shell 올라오면 성공! 86 | 23) \quit 으로 mysqldsh를 종료하고 workbench도 끈다. 87 | 24) 시작에서 MySQL 8.0 Command Line Client - Unicode를 사용하도록 한다. 88 | 25) 설정한 비밀번호를 입력하면 mysql> 쉘이 뜬다. 89 | 26) 내부에서 show databases; 90 | 27) select version(); 등이 잘 동작하면 모든것이 clear한 상태! 91 | ``` 92 | 93 | ## MySQL 비밀번호를 잘못 입력했을 경우 94 | 95 | ```make 96 | https://jjeongil.tistory.com/1484 97 | ``` 98 | 99 | ## How to install MySQL on Linux & Unix(MAC) 100 | 101 | ```make 102 | sudo apt-get install mysql 103 | ``` 104 | 105 | 아래와 같은 에러 발생시! 106 | 107 | ```make 108 | ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 109 | ``` 110 | 111 | mysql_secure_installation <<< 112 | 113 | ## How to install MySQL on Unix(MAC) 114 | 115 | ```make 116 | https://devyurim.github.io/data%20base/mysql/2018/08/13/mysql-1.html 117 | ``` 118 | -------------------------------------------------------------------------------- /python/README.md: -------------------------------------------------------------------------------- 1 | ## How to Install Python 2 | 3 | ``` 4 | 1. https://www.anaconda.com/products/individual 접속 5 | 6 | 해당 사이트에서 다운로드 받아 설치하도록 한다. 7 | 파이썬 버전은 3.x 버전으로 다운 받아야 한다. 8 | 설치 시간이 좀 걸릴 수 있습니다. 9 | 10 | 2. 실행 11 | 3. Next 12 | 4. 동의 13 | 5. 중간쯤에 Just me (recommended) 14 | 6. 경로 배치하는것은 C:\anaconda3 혹은 D:\anaconda3 등으로 배치 15 | 7. Register Anaconda3 as my default Python 16 | 8. 설치 완료 이후 MaC 혹은 Linux 는 배치할 경로에 가서 jupyter notebook 만 치면 끝 17 | 윈도우의 경우엔 Anaconda Prompt 에서 배치할 경로로 이동해서 jupyter notebook 입력 18 | ``` 19 | -------------------------------------------------------------------------------- /vue/README.md: -------------------------------------------------------------------------------- 1 | ## vue 환경 구성 2 | 3 | 일단 Vue나 React나 Svelte 같은 최신 기능들은 대부분 ECMA 6 스펙을 따름 4 | 구닥다리로 쓰지 말고 최신형으로 씁시다. 5 | 6 | ### nodejs 설치 7 | 8 | ```make 9 | 중간에 뭐가 나올때 그냥 대충 휙휙 넘기거나 끄면 안됩니다. 10 | 컴퓨터 포맷해야 하는 최악의 사태가 발생할 수 있습니다. 11 | 12 | 작업 진행중 중간에 나타나는 에러 메시지를 잘 확인해야 합니다. 13 | 에러 메시지에 보면 Packages requiring reboot: <<<---- 14 | 패키지가 재부팅을 요구합니다 <<< 라는 뜻 ㄷㄷㄷ 15 | 16 | https://www.microsoft.com/ko-kr/download/details.aspx?id=48145 17 | 18 | 1. https://nodejs.org/ko/download/ 에서 자신의 운영체제에 맞게 다운로드한다. 19 | 2. 실행 20 | 3. Next 21 | 4. 라이센스 동의 후 Next 22 | 5. Next 23 | 6. Next 24 | 7. Next 25 | 8. nodejs 일부 패키지에 C/C++ 기능이 필요한 것들이 있음 26 | 묻지도 따지지도 말고 그냥 필요하면 다 설치하라고 체크하고 Next 27 | 9. Install 28 | 10. 설치가 꽤 오래 걸릴 수도 있으니 커피나 한 잔 하면 좋다. 29 | 11. node -v 로 nodejs 설치 여부를 체크한다. 30 | 12. npm --version 으로 npm 설치 여부를 체크한다. 31 | ``` 32 | 33 | ### Vue.js 설치 34 | 35 | ```make 36 | 1. npm install -g @vue/cli 37 | 2. 오류나면 npm audit fix 38 | 3. MAC에선 권한(permission) 없다고 하면 관리자 모드로 sudo 줘서 실행한다. 39 | ``` 40 | 41 | ### vue 프로젝트 생성 42 | 43 | ```make 44 | 1. 적당한 위치를 잡는다(HTML/CSS, JavaScript에선 javascript 폴더로 잡음) 45 | 2. vue create frontend 46 | frontend라는 이름으로 프로젝트가 만들어짐 47 | 3. 옵션 설정을 해야함 48 | 49 | ? Please pick a preset: 50 | Default ([Vue 2] babel, eslint) 51 | Default (Vue 3) ([Vue 3] babel, eslint) 52 | > Manually select features 53 | 54 | ? Check the features needed for your project: 55 | (*) Choose Vue version 56 | (*) Babel 57 | ( ) TypeScript 58 | ( ) Progressive Web App (PWA) Support 59 | (*) Router 60 | >(*) Vuex 61 | ( ) CSS Pre-processors 62 | (*) Linter / Formatter 63 | ( ) Unit Testing 64 | ( ) E2E Testing 65 | 66 | ? Choose a version of Vue.js that you want to start the project with 2.x 67 | 68 | ? Use history mode for router? (Requires proper server setup for index fallback in production) Yes 69 | 70 | ? Pick a linter / formatter config: (Use arrow keys) 71 | > ESLint with error prevention only 72 | ESLint + Airbnb config 73 | ESLint + Standard config 74 | ESLint + Prettier 75 | 76 | ? Pick additional lint features: (Press to select, to toggle all, to invert selection) 77 | >(*) Lint on save 78 | ( ) Lint and fix on commit 79 | 80 | ? Where do you prefer placing config for Babel, ESLint, etc.? 81 | In dedicated config files 82 | > In package.json 83 | 84 | ? 다음 질문엔 그냥 앤터치면 된다. 85 | 86 | 그럼 뭔가 프로젝트 설정하기 위해 많은 작업이 일어난다. 87 | ``` 88 | 89 | ### vue 프로젝트 구동 90 | 91 | ```make 92 | cd frontend 93 | npm run serve 94 | ``` 95 | 96 | ## materialize 설정 97 | 98 | ```make 99 | npm install materialize-css@next --save-dev 100 | npm install material-design-icons --save-dev 101 | ``` 102 | 103 | ## Vuetify 104 | 105 | ```make 106 | vue add vuetify 107 | ``` 108 | 109 | ## CoverFlow 110 | 111 | ```make 112 | npm add vue-coverflow 113 | ``` 114 | 115 | ## Vue Awesome Swiper 116 | 117 | ```make 118 | npm install vue-awesome-swiper --save-dev 119 | 120 | // 버그나는 경우(버전을 낮춰서 활용) 121 | npm install swiper@5.3.7 --save-dev 122 | ``` 123 | 124 | ## Vue Img LightBox 125 | 126 | ```make 127 | npm install @morioh/v-lightbox --save-dev 128 | ``` 129 | 130 | ## 부속 라이브러리 131 | 132 | ```make 133 | npm install axios --save-dev 134 | 135 | npm install materialize-css@next --save-dev 136 | npm install material-design-icons --save-dev 137 | 138 | vue add vuetify 139 | 140 | <------------------ Vuetify 설치도중 메시지 시작 ---------------------> 141 | WARN There are uncommitted changes in the current repository, it's recommended to commit or stash them first. 142 | ? Still proceed? Yes 143 | 144 | 📦 Installing vue-cli-plugin-vuetify... 145 | 146 | + vue-cli-plugin-vuetify@2.4.7 147 | updated 1 package and audited 1343 packages in 5.869s 148 | 149 | 94 packages are looking for funding 150 | run `npm fund` for details 151 | 152 | found 17 vulnerabilities (2 low, 11 moderate, 4 high) 153 | run `npm audit fix` to fix them, or `npm audit` for details 154 | ✔ Successfully installed plugin: vue-cli-plugin-vuetify 155 | 156 | ? Choose a preset: Default (recommended) 157 | 158 | 🚀 Invoking generator for vue-cli-plugin-vuetify... 159 | 📦 Installing additional dependencies... 160 | 161 | added 14 packages from 9 contributors and audited 1357 packages in 6.511s 162 | 163 | 98 packages are looking for funding 164 | run `npm fund` for details 165 | 166 | found 17 vulnerabilities (2 low, 11 moderate, 4 high) 167 | run `npm audit fix` to fix them, or `npm audit` for details 168 | ⚓ Running completion hooks... 169 | 170 | ✔ Successfully invoked generator for plugin: vue-cli-plugin-vuetify 171 | vuetify Discord community: https://community.vuetifyjs.com 172 | vuetify Github: https://github.com/vuetifyjs/vuetify 173 | vuetify Support Vuetify: https://github.com/sponsors/johnleider 174 | <------------------ Vuetify 설치도중 메시지 종료 ---------------------> 175 | 176 | npm add vue-coverflow 177 | npm install vue-awesome-swiper --save-dev 178 | npm install swiper@5.3.7 --save-dev 179 | 180 | npm install @mdi/font --save-dev 181 | 182 | npm install --save vue-cookies --save-dev 183 | ``` 184 | --------------------------------------------------------------------------------