Database

Database ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ Database๋ผ๊ณ  ํ•œ๋‹ค. Database ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ DBMS(DataBase Management System) ์„ ์‚ฌ์šฉํ•œ๋‹ค. Database๋Š” ํ˜•ํƒœ์— ๋”ฐ๋ผ ํฌ๊ฒŒ Relational Database (๊ด€๊ณ„ํ˜• DB), Non-Relational Database(๋น„๊ด€๊ณ„ํ˜• DB) ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. Relational Database : ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ Non-Relational Database : key-value ์„ธํŠธ๋กœ ๊ตฌ์„ฑ๋œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ(ex: json format) RDBMS (Relational Database Management System) Relational Database ์กฐ์ž‘์„ ์œ„ํ•œ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค. Codds ์—์„œ ์ •์˜ํ•œ 12๊ฐ€์ง€ ์ •์˜์— ๋”ฐ๋ฅด๋„๋ก ์„ค๊ณ„๋œ๋‹ค. (๋ณดํ†ต์€ ์„ ๋‘์˜ 2๊ฐ€์ง€ ๊ทœ์น™๋งŒ ํ•„์ˆ˜๋กœ ๋”ฐ๋ฅธ๋‹ค.) SQL (Structured Query Language) ์ด๋ผ๋Š” ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Database๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. SQL (Structured Query Language) RDBMS์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์งˆ์˜, ์ˆ˜์ • ๋“ฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์–ธ์–ด๋กœ, ๋‹ค์Œ ์„ธ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์–ธ์–ด๋ฅผ ํฌํ•จํ•œ๋‹ค. DDL (Data Definition Language) : ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ DML (Data Manipulation Language) : ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์กฐํšŒ/์ €์žฅ/์ˆ˜์ •/์‚ญ์ œ ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ DCL(Data Control Language) : ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด NoSQL Non-Relational Database ๋ฅผ ์œ„ํ•œ ์–ธ์–ด๋กœ, Non-Relational DBMS ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. SQL๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณต์žกํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋‹จ์ˆœ ๊ฒ€์ƒ‰ ๋ฐ ์ถ”๊ฐ€ ๊ฒ€์ƒ‰ ์ž‘์—…์„ ์œ„ํ•ด ๋งค์šฐ ์ตœ์ ํ™”๋˜์—ˆ๊ณ , ์ €์žฅ๊ณต๊ฐ„์ด ํฌ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. key-value ์กฐํ•ฉ์œผ๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ์— ๋ฌธ๋ฒ•์ด ๋”ฐ๋กœ ์—†๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์ ์ด๋‹ค. MongoDB, Redis, CouchDB ๋“ฑ์ด ํ•ด๋‹น๋œ๋‹ค. MongoDB : Json ํ˜•ํƒœ๋กœ ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ Redis : ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ DBMS๋กœ ์†๋„๊ฐ€ ๋นจ๋ผ ์ž„์‹œ๋ฐ์ดํ„ฐ ์บ์‹ฑ ์šฉ๋„๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ CouchDB : ์ด๋Š” ์›น ๊ธฐ๋ฐ˜์˜ DBMS๋กœ, REST API ํ˜•์‹์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ• MongoDB ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ...

<span title='2025-03-20 22:03:29 +0900 KST'>March 20, 2025</span>&nbsp;ยท&nbsp;3 min&nbsp;ยท&nbsp;AswinBlue

Firebase_react

Firebase with React react์—์„œ firebase๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• firebase SDK๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์›น์ƒ์—์„œ ์„ค์น˜์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ firebase ๊ธฐ๋ณธ์„ ์ฐธ์กฐ ์ธ์ฆ (Auth) firebase ๋กœ ๊ณ„์ • ์ƒ์„ฑ ๋ฐ ๋กœ๊ทธ์ธ firebase API๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉ <AppFirebase.js> import firebase from "firebase/compat/app"; import "firebase/compat/auth"; const firebaseConfig = { apiKey: process.env.REACT_APP_API_KEY, authDomain: process.env.REACT_APP_AUTHDOMAIN, projectId: process.env.REACT_APP_PROJECTID, storageBucket: process.env.REACT_APP_STORAGEBUCKET, messagingSenderId: process.env.REACT_APP_MESSAGINGSENDERID, appId: process.env.REACT_APP_APPID }; export default firebase.initializeApp(firebaseConfig); export const authService = firebase.auth(); AppFirebase.js ๋ฅผ ํ™œ์šฉํ•˜์—ฌ business logic์— ํ•„์š”ํ•œ ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ <Auth.js> import { authService } from "../components/AppFirebase"; const data = await authService.createUserWithEmailAndPassword(email, password) // email, passwd๋กœ ๊ณ„์ • ์ƒ์„ฑ const data = await authService.signInWithEmailAndPassword(email, password) // email, passwd๋กœ ๋กœ๊ทธ์ธ createUserWithEmailAndPassword / signInWithEmailAndPassword ์‹คํ–‰ ์ดํ›„ authService.currentUser๋ฅผ ์ฐธ์กฐํ•˜๋ฉด user ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, authService.currentUser ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š”๋ฐ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. firebase API์—์„œ๋Š” observer๋ฅผ ๋“ฑ๋กํ•˜์—ฌ currentUser์˜ ๋ณ€๊ฒฝ ์‹œ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. currentUser ๋ณ€๊ฒฝ์‹œ์ ์— ํŠน์ •ํ•จ์ˆ˜ ๋™์ž‘ user ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋œ ์‹œ์ ์— ํŠน์ • ๋™์ž‘์„ ์›ํ•œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด onAuthStateChanged ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. authService.onAuthStateChanged((user) => { /* something to do */ }}); ๋กœ๊ทธ์•„์›ƒ authService.signOut() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋กœ๊ทธ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ ํฌ๋กฌ ์›น ๋””๋ฒ„๊น… ํ™”๋ฉด์—์„œ โ€˜Applicationโ€™ํƒญ์— ๋“ค์–ด๊ฐ€์„œ IndexedDB -> firebaseLocalDb ์•ˆ์˜ ๋‚ด์šฉ์„ ๐Ÿšซ๋ฒ„ํŠผ์œผ๋กœ ์‚ญ์ œํ•ด ์ฃผ๋ฉด ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์—๋Ÿฌ authService์˜ ํ•จ์ˆ˜(createUserWithEmailAndPassword, signInWithEmailAndPassword, โ€ฆ) ์‚ฌ์šฉ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, try, catch๋ฌธ์œผ๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. try { let data data = await authService.createUserWithEmailAndPassword(email, password) } catch(error) { console.log(error.code) // ์—๋Ÿฌ์˜ ์›์ธ์ด ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. console.log(error.message) // ์—๋Ÿฌ์˜ ์›์ธ์ด ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. } ref) ์˜ค๋ฅ˜๋ฐœ์ƒ ์›์ธ ...

<span title='2022-02-12 19:32:34 +0900 KST'>February 12, 2022</span>&nbsp;ยท&nbsp;2 min&nbsp;ยท&nbsp;AswinBlue

Firebase

firebase firebase๋Š” ์‹ค์‹œ๊ฐ„ db๋กœ ์œ ๋ช…ํ•˜๋ฉฐ, google์— ์ธ์ˆ˜๋˜๊ณ  ํญ์ด ๋„“์–ด์กŒ๋‹ค. Amazon์˜ Amplify๊ฐ€ firebase์™€ ์œ ์‚ฌํ•˜๋‹ค. ์ผ์ • ์‚ฌ์šฉ๋Ÿ‰ ๊นŒ์ง€๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ดํ›„์—๋Š” ์š”๊ธˆ์ด ๋ถ€๊ฐ€๋œ๋‹ค. ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ์˜จ๋ผ์ธ์œผ๋กœ ์ฝ˜์†”์— ์ ‘์†ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑ ๋ฐ ์„ค์ •ํ•˜๊ณ , firebase sdk๋ฅผ ๋กœ์ปฌ์— ๋‹ค์šด๋ฐ›์•„ ์ฝ”๋“œ์— ์ ์šฉํ•œ๋‹ค. firebase๋Š” ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์— ์„ค์น˜ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅด๋ฉด ๋œ๋‹ค. (์›น์—์„œ๋Š” ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  url๋กœ ์ฐธ์กฐํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.) ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ์— ๋”ฐ๋ผ ์ฐธ์กฐ๋ฐฉ๋ฒ•, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ ์‚ฌ์šฉ๋ฒ•์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋‹ˆ ํ•ญ์ƒ docs๋ฅผ ์ž˜ ์‚ดํŽด๋ณด์ž ...

<span title='2022-01-19 21:02:46 +0900 KST'>January 19, 2022</span>&nbsp;ยท&nbsp;2 min&nbsp;ยท&nbsp;AswinBlue

Mysql

mysql ๋ช…๋ น์–ด ๋ฌธ๋ฒ• ์ฐธ์กฐ : http://tcpschool.com/mysql/mysql_basic_syntax ๋ช…๋ น์–ด์—์„œ ๋Œ€์†Œ๋ฌธ์ž๋Š” ์ƒ๊ด€์—†๋‹ค. mysql์—์„œ ์ฃผ์„์€ #์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•œ์ค„ ์ฃผ์†์€ -- ์„ ์‚ฌ์šฉํ•œ๋‹ค. -- ๋’ค์— ๊ณต๋ฐฑ ์—†์ด ๋ฐ”๋กœ ๋ฌธ์ž๋‚˜ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ์˜ฌ ๊ฒฝ์šฐ, SQL ์—”์ง„์— ๋”ฐ๋ผ ์ฃผ์„์œผ๋กœ ์ธ์‹๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์–ด์„œ, ์ผ๋ฐ˜์ ์œผ๋กœ -- (๋„์–ด์“ฐ๊ธฐ ํฌํ•จ) ๋˜๋Š” -- - ๊ฐ™์ด ๊ณต๋ฐฑ์ด๋‚˜ ์˜๋ฏธ ์—†๋Š” ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ฃผ์„์ž„์„ ๋ช…ํ™•ํžˆ ํ•ด์ค€๋‹ค. ์ด๊ฑด DBMS์— ๋”ฐ๋ผ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ, ์ผ๋ถ€ ์—”์ง„(MySQL ๋“ฑ)์€ -- ๋’ค์— ๊ณต๋ฐฑ์ด ์žˆ์–ด์•ผ ์ฃผ์„์œผ๋กœ ์ธ์‹ํ•œ๋‹ค. ์‹คํ–‰ ๋ฐ ๋กœ๊ทธ์ธ mysql mysql ์‹คํ–‰, ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ user๋กœ ๋กœ๊ทธ์ธ๋จ mysql -u ์•„์ด๋”” -p -u: ํŠน์ • ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ -p: ๋กœ๊ทธ์ธ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅํ•˜๋„๋ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ DB ์ƒ์„ฑ UTF8 ๋กœ ๋ฌธ์ž์—ด ์ €์žฅํ•˜๊ธฐ CREATE DATABASE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค_์ด๋ฆ„ default CHARACTER SET UTF8 DB ๋ชฉ๋กํ™•์ธ show databases DB ์„ ํƒ use DB_NAME ์ข…๋ฃŒ EXIT ๋กœ๊ทธ์ธ & ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ $ mysql -p DB_NAME -u USER_NAME ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ USER_NAME์œผ๋กœ DB_NAME ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹คํ–‰ USER_NAME์ด ๋น„์–ด์žˆ์œผ๋ฉด ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ๊ณ„์ •๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋กœ๊ทธ์ธ ์‹œ๋„ -u DB_NAME ์˜ต์…˜์€ ๋กœ๊ทธ์ธ ํ›„ $use DB_NAME ๊ณผ ๊ฐ™์€ ํšจ๊ณผ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ (DDL) TABLE_NAME ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ ํ™•์ธ desc TABLE_NAME ...

<span title='2020-07-02 20:29:29 +0900 KST'>July 2, 2020</span>&nbsp;ยท&nbsp;6 min&nbsp;ยท&nbsp;AswinBlue