Docker network - 참조
Docker에서 네트워크를 구성하여 컨테이너 끼리 통신을 보다 쉽고 원할하게 할 수 있다.
docker network ls
기본적으로 3개의 네트워크가 존재하는데 기본값은 bridge에 묶이게 된다.(아마 보안때문에 서로 통신은 막혀있을 것)
네트워크 생성
docker network create group1
mysql 생성 시 네트워크를 연결해줄 추가 명령어를 작성한다.
docker run -it --rm -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=mysql \
-e MYSQL_DATABASE=lecture \
-e MYSQL_USER=scott -e MYSQL_PASSWORD=tiger \
--network group1 \
--name mysql8 \
-v dummySql:/var/lib/mysql mysql
ubuntu 생성 시 같은 네트워크에 연결하여 mysql 컨테이너와 통신
docker run -it --rm --network group1 61c4 /bin/bash
apt-get update
apt-get install iputils-ping
ping mysql8
정보확인 - 묶여있는 컨테이너들을 확인할 수 있다.
docker network inspect group1
Node.js
Express Generator
npx는 일시적으로 다운받고 치우는 것 해당 프로젝트에만 적용,
npm 이후 -g 옵션을 주면 글로벌 모드로 pc에 설치됨 글로벌 모드를 깔게 되면 이후 계속 업데이트를 해줘야함,
--view=ejs를 해줘야 ejs환경으로 프로젝트를 생성해줌 -e로도 가능.
npx express-generator --view=ejs .
npm i nodemon
npm i mysql
scripts 의 내용을 수정해서 nodemon으로 서버를 시작할 수 있도록 변경
"scripts": {
"start": "nodemon ./bin/www"
},
mysql DBCP (modules/mysql.js)
const mysql = require('mysql')
const pool = mysql.createPool({
connectionLimit : 10,
host: '192.168.99.100',
user: 'scott',
password: 'tiger',
database: 'mydb'
})
module.exports = pool;
routes/user.js
var express = require('express');
var router = express.Router();
var pool = require('../modules/mysql');
/* GET users listing. */
// 리스트
router.get('/', function(req, res, next) {
const sql = "select * from dept";
const query = pool.query(sql, (err,result,fields)=>{
console.log(result);
res.status(200).json(result);
});
/* const query = pool.query(sql);
query
.on("error", function(err){
console.log(err);
})
.on("result", function(row){
console.log(row);
})
.on("end", function() {
res.send('respond with a resource');
});
}); */
// 입력
router.post('/', (req,res)=>{
const deptno = req.body.deptno;
const dname = req.body.dname;
const loc = req.body.loc;
const sql = `insert into dept value (${deptno}, '${dname}', '${loc}')`;
pool.query(sql,(err)=>{
if(err) return res.status(500).end();
res.status(200).end();
});
});
// 상세보기
router.get('/:deptno', (req,res) => {
const deptno = req.params.deptno;
const sql =`select * from dept where deptno=${deptno}`;
const query = pool.query(sql);
query
.on("error", function(err){
console.log(err);
})
.on("result", function(row){
res.status(200).json(row);
})
.on("end", function() {
});
});
module.exports = router;
Express-Session 를 이용한 로그인 처리
npm install express-session
routes/users.js
var session = require('express-session');
router.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: {secure: true, maxAge : 60000} // secure를 true로 하면 쿠키가 보이지 않게됨
}))
// 가상 로그인 성공
router.get('/login', (req,res, next) =>{
req.session.login = 'admin';
res.status(200).end();
})
// 해당 파일의 모든 요청 로그인 여부 확인
// router.use('/',(req,res,nxt)=>{
// if(req.session.login){
// nxt();
// } else {
// res.status(403).end();
// }
// });
// 원하는 곳에만 login 함수를 매개변수로 주게되면 여부확인됨
var login = (req,res,nxt)=>{
if(req.session.login){
nxt();
} else {
res.status(403).end();
}
};
router.get('/', login, function(req, res, next) {
const sql = "select * from dept";
const query = pool.query(sql, (err,result,fields)=>{
console.log(result);
res.status(200).json(result);
});
});
참조
JavaScript ES6 문법 -Variables
let(변수), const(상수) - 기존의 var과 다르게 다른언어들의 변수처럼 작동이 된다.
Arrow function - 익명함수를 간단하게 표현
이름이 없는 함수를 호출할 때 줄여서 사용할 수 있다.
// 화살표 함수
var func2 = () =>{console.log('fun2 run...')};
func2();
var func3 = (msg) =>{console.log(msg)};
func3('func3 run...');
// arg가 하나일 경우에만 () 생략 가능
var func4 = msg =>{console.log(msg)};
func3('func4 run...');
// 익명함수를 바로 실행 할 때
(function(){ console.log('익명함수')})();
(()=>{console.log('익명함수')})();
// 리턴 - {} 쓰는 경우 return을 명시해야한다.
// var func5 = ()=>{return 6;};
var func5 = ()=> 6;
console.log(func5());
var func6 = msg => msg;
console.log(func6('abcd'));
// object를 return 할 경우 ()로 시작하여 return 값을 명시해줄 수 있다.
var func7 = () => {return {}};
var func7 = () => ({});
console.log(fun7())
// 화살표함수에서는 this를 쓸 수 없다
var f1 = function() {
console.log(this);
};
f1(); // global이 잡힘
var f2 = () =>{
console.log(this);
}
f2(); // 빈 obj 반환됨
var obj1 = {
name: 'test1',
// setName: function(a){this.name=a;} // 바뀜
// setName: a=>{this.name=a;} // 안바뀜
setName: a=>{obj1.name = a;} // 명시적으로 해야 바뀜
}
obj1.setName('aaaa');
console.log(obj1.name)
Object
// 기존 사용
var obj1 = new Object();
obj1.name = 'obj1';
console.log(obj1);
var obj2 = {'key1':'val1', 'key2':'val2'};
console.log(obj2);
// key값은 무조건 문자열이 되면서 '' 를 반드시 작성안해도되며
// 변수만 넣을 수 있도록 생략 가능해지게 되었다.
var obj3 = {obj1};
console.log(obj3);
var obj4 = {name:'tester', setName:function(a){this.name=a}};
obj4.setName('editer');
console.log(obj4);
var obj5 = {ename:'testet', setName(a){this.ename=a;}};
obj5.setName('Editer');
console.log(obj5);
// Object 객체를 이용한 값 추출
var obj1 = {key1:'val1', key2:'val2', key3:'val3'};
console.log(Object.keys(obj1));
console.log(Object.values(obj1));
console.log(Object.entries(obj1));
Array
var arr = ['item1', 'item2', 'item3', 'item4'];
for(i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
for(msg of arr){
console.log(msg);
}
arr.forEach((ele,idx)=>{
console.log(ele);
});
var result = arr.forEach(ele=>{console.log(ele)});
console.log(result); // undefined
// 가장 많이 사용됨
result = arr.map(ele=>console.log(ele));
console.log (result); // [undefined, undefined...]
result = arr.map(ele=>ele+"번");
console.log (result); // ['item1번','item2번',...]
// 삭제할 때 많이 사용됨
var result = arr.filter((ele, idx)=>{
console.log(ele, idx);
return idx%2==0;
});
console.log(arr, result) // [ 'item1', 'item2', 'item3', 'item4' ] [ 'item1', 'item3' ]
var result = arr.reduce((bef, curr, idx, target)=>{
console.log(bef, curr, idx, target);
return bef+","+curr;
});
console.log(arr, result);
>>
item1 item2 1 [ 'item1', 'item2', 'item3', 'item4' ]
item1,item2 item3 2 [ 'item1', 'item2', 'item3', 'item4' ]
item1,item2,item3 item4 3 [ 'item1', 'item2', 'item3', 'item4' ]
[ 'item1', 'item2', 'item3', 'item4' ] item1,item2,item3,item4
<<
var result = arr.find((ele, idx, target)=>{
return ele == 'item2';
});
var result2 = arr.findIndex((ele, idx, target)=>{
return ele == 'item2';
});
console.log(result, result2); // item2 1
var arr1 = ['item1', 'item2','item3'];
var arr2 = [...arr1, 'item5']; // 기존의 값을 복사하며 새로운 값 추가 하여 배열 생성
arr1[3] = 'item4';
console.log(arr1, arr2); // [ 'item1', 'item2', 'item3', 'item4' ] [ 'item1', 'item2', 'item3', 'item5' ]
var obj1 = {key1:'val1', key2:'val2'};
var obj2 = {...obj1, key1:'VAL1', key4:'val4', arr2}; // 새로운 오브젝트를 만들면서 값을 수정, 추가 가능
obj1.key3 = 'val3'
console.log(obj1, obj2);
>>
{ key1: 'val1', key2: 'val2', key3: 'val3' } {
key1: 'VAL1',
key2: 'val2',
key4: 'val4',
arr2: [ 'item1', 'item2', 'item3', 'item5' ]
}
<<
var [ele1,ele2,ele3] = arr1;
console.log(ele1, ele2, ele3); // item1 item2 item3
var [ele1, ...ele2] = arr1;
console.log(ele1, ele2); // item1 [ 'item2', 'item3', 'item4' ]
var {key1, key2} = obj1;
console.log(key1, key2); // val1 val2
class
class Cl01{
constructor(name, year){
this.name = name;
this.year = year;
}
func(){
console.log('Cl01 func run...');
}
}
let obj1 = new Cl01('user1', 2000);
function Cl02(a, b) { // 함수명을 대문자로하면 객체생성을 위한 함수
this.a = a;
this.b = b;
this.func = () => {
console.log('Cl02 func run...');
}
}
let obj2 = new Cl02('user2', 3000);
class Cl03 extends Cl01 {
constructor(name, year){
super(name, year);
}
}
let obj3 = new Cl03('user3', 1000);
console.log(obj1.name, obj1.year);
obj1.func();
console.log(obj2.a, obj2.b);
obj2.func();
console.log(obj3.name, obj3.year)
obj3.func();
>>
user1 2000
Cl01 func run...
user2 3000
Cl02 func run...
user3 1000
Cl01 func run...
<<
React
프로젝트 생성
npx create-react-app react01
react 실행 (only 테스트용 - 개발할때 사용)
npm start
빌드 (실제 배포할 파일들 절때 모듈 통째로 배포하는 것이 아님)
npm run build
빌드 파일을 통해 실행
npx serve -s build
src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
function Func1() {
return <div><h1>환영</h1> <p>환영메세지</p></div>;
}
class Func2 extends React.Component{
render() {
return <div><h1>환영</h1> <p>환영메세지</p></div>;
}
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
// <React.StrictMode>
// <App />
// </React.StrictMode>
// JSX - DOM을 쉽게 만들어주는 라이브러리
// <div>
// <h1>환영</h1>
// <p>환영메세지</p>
// </div>
// <Func1/>
<Func2/>
);
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2023.03.17 React 2 (xhr, fetch, axios, CRUD, JPA) (0) | 2023.03.17 |
---|---|
TIL 2023.03.16 React (기본문법 jsx, useState, react-router) (0) | 2023.03.16 |
TIL 2023.03.14 Node.js 2 (express Project, nodemon, mongoDB) (0) | 2023.03.14 |
TIL 2023.03.13 Node.js (NVM, module, express, ejs, mysql) (0) | 2023.03.13 |
TIL 2023.03.10 Spring framework 4, 5(file I/O, Boot, thymeleaf, mybatis) (0) | 2023.03.10 |