Javascript
-
socket.ioJavascript/Node.js 2020. 1. 28. 15:02
socket.io ws 모듈과 비슷하나 편의 기능들이 많이 추가되어 있어 많이 사용한다. socket.js connection 이벤트는 클라이언트가 접속했을 때 발생하고, 콜백으로 소켓 객체를 제공한다. socket.id로 소켓 고유의 아이디를 가져올 수 있다. disconnect, error는 기존에 존재하는 이벤트이며, reply와 news는 사용자가 직접 만든 이벤트이다. 클라이언트에서 reply라는 이벤트명으로 데이터를 보낼 때 서버에서 받으면 해당 이벤트 리스너를 호출한다. views/index.pug /socket.io/socket.io.js는 socket.io에서 클라이언트로 제공하는 스크립트이다. 스크립트가 제공하는 io 객체에 서버 주소를 적어 연결한다. ws 프로토콜이 아닌 http 프..
-
웹 소켓Javascript/Node.js 2020. 1. 28. 14:41
웹 소켓 HTML5에서 새로 추가된 스펙으로 실시간 양방향 데이터 전송을 위한 기술이다. HTTP와 다르게 WS라는 프로토콜을 사용한다. 이전에는 폴링이라는 방법(HTTP가 클라이언트에서 서버로 향하는 단방향 통신으므로 주기적으로 서버에 새로운 업데이트가 없는지 확인하는 요청을 보내, 있다면 새로운 내용을 가져오는 단순무식한 방법)을 사용했으나 브라우저와 웹 서버가 지속적으로 연결된 라인을 통해 실시간으로 데이터를 주고받을 수 있는 웹 소켓이 등장했다. 업데이트할 내용이 생겼다면 바로 클라이언트에게 알려준다. 그리고 HTTP 와 포트를 공유할 수 있어 다른 포트에 연결할 필요도 없다. socket.io는 웹 소켓을 편리하게 사용할 수 있는 라이브러리이다. ws 모듈 bin/www express 서버와 웹..
-
MochaJavascript/Node.js 2020. 1. 28. 10:43
mocha란? node.js에서 사용하는 테스트 프레임워크이다. 작성한 함수가 잘 동작하고 제대로된 값을 반환하는지 검증하는 과정을 도와준다. 설치방법 npm install 명령으로 설치하고, package.json의 script 항목에 명령을 설정한다. 사용방법 descript() 는 테스트 범위를 설정한다. it()는 단위 테스트를 설정한다. 인수로 사용한 done은 비동기 단위 테스트를 완료할 때 유용하다. it() 의 콜백 인수로 done을 사용하면 자동으로 비동기 테스트를 인식하고, 비동기 로직이 완료 후 done()을 실행하면 테스트가 완료된다. 비동기 테스트는 timeout으로 2초가 경과하면 자동으로 테스트 실패가 된다. mocha에서는 before(), after(), beforeEach..
-
middlewareJavascript/Node.js 2020. 1. 22. 11:58
미들웨어 요청과 응답 중간에 위치하여 미들웨어라고 부른다. 라우터와 에러 핸들러 또한 미들웨어의 일종이므로 미들웨어가 express 전부라고 해도 과언이 아니다. 미들웨어는 주로 app.use와 함께 사용한다. app.use의 인자로 들어있는 함수가 미들웨어이다. 제일 위의 logger('dev')부터 시작해 미들웨들을 순차적으로 거친 후 라우터에서 클라이언트로 응답을 보낸다. express 미들웨어 순서 logger -> logger(morgan) -> json, urlencoded -> cookieParser -> router -> 404 handler -> error handler -> response morgan 콘솔에 나오는 GET / 200 51.267 ms -1539 와 같은 로그들은 모두 ..
-
expressJavascript/Node.js 2020. 1. 22. 11:47
서버 제작 시, 불편함을 해소하고, 편의 기능을 추가한 웹 서버 프레임워크이다. 또한, http 모듈의 요청과 응답 객체에 추가 기능을 부여했다. 설치 방법 npm i -g express-generator 사용 방법 express [프로젝트 이름] 구조 app.js : 핵심적인 서버 역할을 한다. bin/www : 서버를 실행하는 스크립트 public : 외부에서 접근 가능한 파일들을 모아둔 디렉토리(image, javascript, css) views(view) : 템플릿 파일을 모아둔 디렉토리(ejs, pug, html) routes(controller) : 주소별 라우터들을 모아둔 디렉토리이다. 서버의 로직은 모두 routers 폴더 안에 있다. 데이터베이스 부분은 models(model) 폴더에 ..
-
RESTful APIJavascript/Node.js 2020. 1. 22. 11:00
REST API REpresentational State Transfer의 약어이다. 네트워크 구조의 한 형식으로 서버의 자원을 정의하고, 자원에 대한 주소를 지정하는 방법을 제시한다. 주소는 의미를 명확히 전달하기 위해 명사로 구성된다. (ex. /users, /sports ..) 주소 외에도 HTTP request method를 사용한다. GET, POST, PUT, DELETE, PATCH 다섯 가지 메서드를 사용한다. 이렇게 주소와 메소드만 보고 요청의 내용을 명확하게 알 수 있다는 장점이 있다. 또한, GET 메소드 같은 경우 브라우저에서 캐싱할 수도 있어서 같은 주소의 GET 요청을 할 때 서버가 아닌 캐시에서 가져올 수 있다. 그리고 HTTP 프로토콜을 사용한다면 클라이언트가 어떤 플랫폼이던..
-
npmJavascript/Node.js 2020. 1. 21. 17:55
npm Node Package Manager의 약자로, 이름 그대로 노드 패키지 매니저이다. package.json 수많은 패키지를 추가하다 보면 어딘가 기록해둘 필요성이 있다. 그래서 설치한 패키지의 버전을 관리하는 파일이 생겼는데 package.json이 그것이다. 프로젝트를 시작하기 전에 package.json부터 만들고 시작하라. npm init 명령어로 만들 수 있다. 패키지를 설치할 때, 개발 중에만 사용할 경우, --save-dev 옵션을 사용한다. -g 옵션을 사용할 경우, 전역으로 설치해 console에서도 사용할 수 있다.
-
cookie & sessionJavascript/Node.js 2020. 1. 21. 17:45
필요성 클라이언트에서 보내는 요청의 한 가지 큰 단점은 누가 요청을 보냈는지 모른다는 것이다. 이 문제는 쿠키와 세션으로 해결할 수 있다. 쿠키 서버로부터 쿠키가 오면 웹 브라우저는 쿠키를 저장해두었다가 요청할 때마다 쿠키를 동봉해서 보낸다. 서버는 쿠키를 읽어 사용자를 파악한다. 브라우저는 쿠키가 있다면 자동으로 동봉해서 보내주므로 따로 처리할 필요가 없다. 서버에서 브라우저로 쿠키를 보낼 때만 코드를 작성 해야한다. 개인정보 유출 방지를 위해 쿠키를 주기적으로 지우라는 말이 바로 이러한 이유 때문이다. 쿠키는 요청과 응답의 header에 저장된다. 쿠키는 보안성이 없고 조작될 위험성이 있어 개인정보를 쿠키에 넣어두는 것은 적절하지 못하다. 세션 쿠키와 동일하지만 어느정도 암호화를 시키기 때문에 서버에..