๐ .env ํ์ผ ?-?
" ํ๊ฒฝ ๋ณ์ ํ์ผ " ์ ์๋ฏธํ๋ค.
์ด ํ์ผ์, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ ๋๊ธฐ๊ณ ์ถ์ ํน์ ๊ฐ์ ๋ด๊ณ ์๋ ๋ณ์๊ฐ ๊ธฐ๋ก๋์ด ์๋ค.
๋ฏธ๋ฆฌ ์ ์๋ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฉํ๊ณ ์ถ์ ๋ ์ด .env ํ์ผ์ ํ์ฉํ๋ค.
๐ .env
// .env ํ์ผ
// DB์ ์ ์ํ๊ธฐ ์ํด ํ์ํ username๊ณผ password์ dbname์ ๋ณ์์ ์ฐจ๋ก์ฐจ๋ก ๋ด์์คฌ๋ค.
DATABASE_USERNAME='lee'
DATABASE_PASSWORD=1234
DATABASE_NAME='learnsql'
// .env ํ์ผ
// local URI ์ test server๋ฅผ ์ํ URI, id์ ๋น๋ฐ๋ฒํธ ๋ฑ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ด์๋ ์ ์๋ค.
REACT_APP_LOCAL_URI=http://localhost:8080/
REACT_APP_TEST_SERVER=http://test.com:9090/
clientId=client-test1111
clientServer=server-test1111
์์์ ์ค์ ํ ๋ณ์๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์๋ ํ์ฉํ ์ ์๊ณ , ์นํฉ์ผ๋ก ๋น๋ํ ๋๋ ์ฌ์ฉํ ์ ์๋ค.
๐ .env ํ์ฉ ๋ชจ๋ - dotenv ?
๐ dotenv
nodeJS ์ ๋ชจ๋๋ก, npm ์ ์ฌ์ฉํด ์ค์นํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
dotenv ๋ฅผ ์ฌ์ฉํด ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์์นํ .env ํ์ผ๋ก๋ถํฐ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ์ด๋ผ ์ ์๋ค.
// npm install dotenv (node.js์ dotenv ์ค์นํ์๊ตฌ์)
// ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋๋ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ jsํ์ผ์ ์ต์๋จ์์ config() ํจ์๋ฅผ ํธ์ถํด์ฃผ๋ฉด
// .envํ์ผ์ ์ ์ฅ๋ ํ๊ฒฝ ๋ณ์๋ฅผ process.env ๋ชจ๋์ ํตํด ๋ถ๋ฌ์ฌ ์ ์๋ค.
require("dotenv").config();
console.log("DATABASE_USERNAME: ", process.env.DATABASE_USERNAME);
console.log("DATABASE_PASSWORD: ", process.env.DATABASE_PASSWORD);
console.log("DATABASE_NAME: ", process.env.DATABASE_NAME);
// DATABASE_USERNAME: lee
// DATABASE_PASSWORD: 1234
// DATABASE_NAME: learnsql
// ๋ง์ฝ์ .env๊ฐ ์๋๋ผ ๋ค๋ฅธ ๊ฒฝ๋ก์ ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ฅํด๋๋ค๋ฉด
// config ํจ์์ pathํค์ ๊ฒฝ๋ก๋ฅผ ๋ด์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํด์ ํธ์ถํ๋ฉด๋๋ค.
require("dotenv").config({path: "/path/.env.example"});
๐ ํ๊ฒฝ ๋ณ์ ํ์ฉํด์ DB ๋ NodeJS ์ฐ๊ฒฐํ๊ธฐ - mysql ?
๐ mysql
.env ์ ๋ค์ด์๋ ํ๊ฒฝ ๋ณ์๋ค์ nodeJS ์์ ์ ๋ถ๋ฌ์๋ค๋ฉด, ์ด์ ๋ถํด DB๋ฅผ ์ฐ๊ฒฐํด๋ณด์ !!
mysql ์ nodeJS ์ ๋ชจ๋๋ก, npm ์ ์ฌ์ฉํด ์ค์นํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ nodeJS ๋ฅผ ์ฐ๊ฒฐํ ๋ ํ์ํ๋ค :)
// npm install mysql (node.js์ mysql ์ค์นํ์๊ตฌ์)
const dotenv = require("dotenv");
const mysql = require("mysql");
dotenv.config();
const connection = mysql.createConnection({
host : 'localhost',
user : process.env.DATABASE_USERNAME || 'root',
password : process.env.DATABASE_PASSWORD || '',
database : process.env.DATABASE_NAME || 'learnsql'
});
connection.connect();
// query๋ฌธ ์ฒ๋ฆฌํ ํ
connection.end();
mysql ๋ชจ๋์์ createConnection ์ด๋ ๋ชจ๋์ ์ฐฉ์ฐฉ key์ value๋ฅผ ๋ง์ถฐ ๋ฃ์ด์ฃผ๋ฉด ์ํ๋ DB์ ์ฐ๊ฒฐํ ์ ์๋ค *!*
// connect ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์ ๋ฃ์ด์ DB์ NodeJS์ ์ฐ๊ฒฐ ์ฌ๋ถ ํ์ธํ๊ธฐ
connection.connect(function(err){
if(err) throw err;
console.log("Connected!");
})
์ด๋ฐ์์ผ๋ก ํจ์๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ์ฐ๊ฒฐ์ด ์ ๋์๋ ์ง ์๋์๋ ์ง ํ์ธํ ์๋ ์๊ณ
// query ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์ ๋ฃ์ด์ ์ํ๋ SQL ๊ฒฐ๊ณผ ๋ค๊ณ ์ค๊ธฐ
const sql = `SELECT * FROM table` // ์์ SQL๋ฌธ
connection.connect(function(){
connection.query(sql, function(err, result){
if(err) throw err;
console.log("Result: ", result);
});
});
// connect ์๊ณผ ๋ฐ ๋ชจ๋ query ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
connection.query(sql, function(err, result){
if(err) throw err;
console.log("Result: ", result);
});
query ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ DB์์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค๊ณ ์ฌ ์๋ ์๋ค >_>
๐ ์ฝ์งํ๋ค ์๊ฒ ๋ ๋ช ๋ น์ด - source ?
์ด๋ฏธ DB ์ NodeJS ์ ์ฐ๊ฒฐ์ ๊ตฌํ์ด ๋์ด์์๋๋ฐ ๋ ๊ทธ๊ฑธ ๊นจ๋ซ์ง ๋ชปํ๊ณ ์ฌ์ผ์ฌํ ์ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค๋ ๋ค.
๊ทธ๋ฌ๋ค source ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์๊ฒ ๋์๋ค !
mysql์ ์คํ์ํค๊ณ ๋ด๊ฐ ์ํ๋ sql ํ์ผ์ ์คํ์ํจ ํ ๋๋์ด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด์ ๋๋ฌด ๊ธฐ๋ถ์ด ์ข์๋๋ฐ ใ ...
ํ ์คํธ ์ผ์ด์ค๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ ์๋์๋ฐ ;;;
โ source ๋ช ๋ น์ด
mysql ์์ source [ ํ์ผ ๊ฒฝ๋ก ] ๋ช ๋ น์ ์ ๋ ฅํ๋ฉด ์ธ๋ถ sql ํ์ผ์ ์คํ์ํฌ ์ ์๋ค.
mysql > source [ ํ์ผ ๊ฒฝ๋ก ]
mysql ์์ schema.sql ์ SQL๋ฌธ์ ์คํํจ์ผ๋ก์จ learnmysql DB ๊ฐ ์ถ๊ฐ๋ ๊ฑธ ํ์ธํ ์ ์๋ค. ^____^
์ ๋ ๊ฒ ์ ์ถ๊ฐ๊ฐ ๋์์ผ๋ ํ ์คํธ ์ผ์ด์ค๋ ํ๋จํ์ง ๋ชปํ๋ค ...
๐ NodeJS ์ DB ๊ฐ ์ฐ๊ฒฐ์ด ์๋ ๋
mysql ์์ ์ํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฃ์ด์ ๋ค์ ๋ช ๋ น์ ์คํ์์ผ์ค๋ค.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '[๋น๋ฐ๋ฒํธ]';
FLUSH PRIVILEGES
mysql ์ด ์ค๋๋ mysql_native_password ๋ฅผ ์ฌ์ฉํด์ ์ค๋ฅ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์
์๋ก์ด ๋น๋ฐ๋ฒํธ๋ก ๊ฐฑ์ ํ ์ ๋ฐ์ดํธ ์์ผ์ค๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค :)
๐ ์ถ๊ฐ๋ก ๊ณต๋ถํ ๊ฒ
โ ์๋ฐ์คํฌ๋ฆฝํธ class ๋ฌธ๋ฒ ๋ค์ ๊ณต๋ถํ ๊ฒ class / static / constructor / super
// class ์ ์ฐ๊ณ ์ถ๋ค !!!!!
class SingletonBase {
static instance;
constructor() {
if (!SingletonBase.instance) {
SingletonBase.instance = this;
} else {
console.log(' already has instance.');
console.log(' return existing instance.');
}
return SingletonBase.instance;
}
}
module.exports = class DatabaseConnector extends SingletonBase {
constructor() {
super();
this.config = {
host: 'localhost',
user: process.env.DATABASE_USERNAME || 'root',
password: process.env.DATABASE_PASSWORD || '',
database: process.env.DATABASE_NAME || 'learnmysql'
};
return this;
}
}
๋๊ธ