본문 바로가기

Node

[Node] sequelize Sequelize는 SQL을 작업을 쉽게 할수있게 도와주는 node의 라이브러리다 - Spring에서 Mybatis와 마찬가지로 ORM(Object Relational Mapping)에 속하며 객체와 데이터를 1:1 매핑해준다 - 사용되는 RDB로는 (MariaDB,Postgre,SQLite,MSSQL,MySql)등이 있다. - 자바스크립트 문법으로 데이터베이스를 조작하는것이 가능하다. 사용하기 위해서는 반드시 npm i sequelize sequlize-cli를 사용하고 예제연습은 mysql과 연결되므로 mysql2(Node.js와 MySQL)을 연결해주는 라이브러리들을 설치해서 사용했다. 라이브러리 설치가 완료되면 npm sequelize init을 통해 시퀼라이즈 구조를 생성해준다. 모델 옵션들 시.. 더보기
[Node] express -3 Router 객체 사용하여 라우터들 분리하기 app.js 파일을 하나만 사용하다보면 코드가 복잡해지는것을 막을수가없다. 그리하여 Router들을 uri에 맞춰 구분해주기로 한다. (Spring 사용시 Controller들을 페이지종류별로 분류하여 사용하듯) routes/index.js const express = require('express'); const router = express.Router(); //get / 라우터 router.get('/', (req,res) => { res.send('Hello express'); }); module.exports = router; routes/user.js const express = require('express'); const router = expr.. 더보기
[Node] express -2 express-session : 세션 관리용 미들웨어 app.use(session({ resave:false, saveUninittialized: false, secret:process.env.COOKIE_SECRET, cookie:{ httpOnly:true, secure:false, }, name:'session-cookie', })); req.session.name = 'kimbarbie'; //세션등록 req.sessionID; //세션 아이디확인 req.session.destroy();//세션 모두 제거 세션 쿠키에 대한 설정 (secret: 쿠키 암호화, cookie: 세션 쿠키 옵션) 세션 쿠키는 앞에 s%3A가 붙은 후 암호화 되어 프런트에 전송 속성설명 resave : 요청이 왔을때 세.. 더보기
[Node] express -1 서버 계층 구조 app.js : 핵심 서버 스크립트 public : 외부에서 접근 가능한 파일들을 모아둠 views : 템플릿 파일들 routes: 서버의 라우터와 로직들 models: 데이터 베이스 (스키마) //app.js app.set('port',포트); // 서버가 실행될 포트번호 지정 app.get('주소',라우터);// get요청이 올때 어떤 동작을 할지 지정 app.listen('포트',콜백함수); // 몇번 포트에서 서브를 실행할지 지정 const express = require('express'); const app = express(); app.set('port',process.env.PORT || 3000); // 포트번호 3000으로 설정 app.get('/', (req,res) .. 더보기
npm 각각의 프로그램이나 언어별로 패키지 관리자가 존재한다. - Node의 패키지 관리자는 npm이다. - 다른 사람들이 만든 소스 코드들을 모아둔 저장소 - 남의 코드를 사용하여 프로그래밍 가능 - 이미 있는 기능을 다시 구현할 필요가 없어 효율적이다. - 오픈 소스 생태계 구성 - 패키지 : npm에 업로드된 노드 모듈을 의미한다. 이렇게 다운받은 패키지들에 대한 정보를 담은 파일 = package.json = Spring의 porm.xml과 비슷한 역할을 수행한다. 마찬가지로 해당 패키지들의 버전관리는 엄청나게 중요하다. package.json 파일은 npm init으로 생성한다 ( 직접 package.json 을 만들어도됨) > 단 해당파일은 프로젝트 시작전에 package.json 파일을 만들고 시작.. 더보기
Cookie , Session 쿠키의 필요성 요청의 한가지 단점 - 누가 요청을 보냈는지 모름( IP주소와 브라우저 정보 정도만 알수있다.) - 로그인을 구현하면 됨 - 쿠키와 세션이 필요하다 쿠키 : 키=값의 쌍 - name=namsu - 매 요청마다 서버에 동봉해서 보낸다 - 서버는 쿠키를 읽어서 누구인지 파악한다. - 쿠키에 만료를 안넣으면 세션쿠키가 되어 브라우저를 끄면 사라진다. ( 유효기간만 잘 설정하면 브라우저가 알아서 판단하여 유효기간이 만료되지 않은 쿠키들을 재 전송해준다) 쿠키 서버 만들기 favicon.ico : 크롬에서 html문서에 존재하는 아이콘을 의미한다. >> 브라우저에서 자동으로 보내줌 - writeHead : 요청 헤더에 입력하는 메서드 - Set-Cookie : 브라우저에게 쿠키를 설정하라고 명령 c.. 더보기
9.널 병합/ 옵셔널 체이닝 ES2020에서 추가된 널 병합 연산자(??)와 , 옵셔널 체이닝(?.) 연산자이다. 널 병합 연산자는 주로 || 연산자 대용으로 사용되며 falsy 값 ( 0, '', false, NaN , Null, undefined ) 중 null과 undefined만 따로 구분한다. 널 병합 연산자가 나온것은 falsy값중 (0 , ' ') 가장 말썽을 많이 일으키기 떄문인데 let count = 0; //0이 찍혀야겠지만 falsy라서 뒤로 넘어가서 태그 안의 내용이 찍힌다. count || 123 const c = 0; const d = c ?? 3; console.log(d); //0; let count = 0; //?? 연산자를 통해서 null, undefined인 경우에만 뒤로 넘어가기때문에 0이 찍힌다.. 더보기
8. Map/Set Map/Set은 Object Literal {} , Array Literal [] 과 차이점이 있다. map은 'key':'value'를 저장하는 자료구조라고 볼수있다. ( 1:1 매칭 관계 ) key와 value는 객체 자체로 넣을수도있다. m.set( { a:'b' } , { c: 'd' } ) key : { a: 'b' } value : { c: 'd' } 출력 map은 객체를 가질수있지만 참조 값은 같은 참조값을 가져야지만 같은 값을 가질수 있다. const obj = { key: 'key' } m.set(obj, 123) m.get(obj) //123 출력 m.size; // size로 속성 갯수 조회가 가능하다. console.log(m.size); for (const [k,v] of m ) .. 더보기