전체 글에 해당하는 글 292

  1. HTTP? 2021.07.18

    HTTP가 무엇인가? (HyperText Transfer Protocol) 참고링크 클라이언트(=웹에서는 웹 브라우저)와 서버(=웹 서버)가 있다. 클라이언트는 가게에서 물건을 사려는 손님, 서버는 그 가게의 점원이라고 생각해보자. 클라이언트가 서버에게 HTML이라는 물건을 달라고 한다면 그것이 Request, 그리고 클라이언트가 원하는 물건을 서버가 건네주는 것이 Response라고 할 수 있다. 이 때 HTML, CSS, JavaScript, 이미지와 같은 파일들은 서로가 주고 받는 컨텐츠라면, 그 컨텐츠를 주고 받기 위해서는 클라이언트와 서버가 서로 알아들을 수 있는 공통의 약속인 Message가 필요하다. 그 Message가 HTTP 이고, HTTP는 크게 request를 위한 메시지와 respo..


  2. [Express] 보안과 express generator 2021.07.17

    보안 관리 참고 1. 최신 버전의 Express를 유지할 것 2. TLS를 사용할 것 = https → 웹브라우저와 웹서버가 서로 통신을 할 때 상호간의 암호화가 체결이 되기 때문에 중간에 누가 데이터를 가로채가도 그 데이터의 실제 내용이 무엇인지 알 수 없게 할 수 있다. 인증서를 통해 웹사이트의 도메인과 같은 것을 변주해서 피싱하려 할 때 경고도 띄워준다. 3. 헬멧을 사용할 것 → 헬멧 = 보안과 관련해서 일어날 수 있는 여러 가지 보안 이슈들을 자동으로 해결해 주는 모듈들을 모아 놓은 것 4. 쿠키를 올바르게 사용할 것 → 어떤 웹사이트에 사용자들이 방문할 때 누가 방문했는지 확인하기 위해 방문자 하나하나를 식별할 필요가 있다. 이 때 사용되는 주요한 매커니즘, 인증에서 핵심적인 역할을 하는 것 ..


  3. [Express] 라우터 - 파일로 분리 2021.07.17

    소프트웨어가 커짐에 따라 그 복잡도를 잘 정리정돈/관리하지 않으면 소프트웨어의 확장에 한계가 있다. https://expressjs.com/ko/guide/routing.html 넘 어렵다... const express = require("express"); const app = express(); const port = 3000; var fs = require("fs"); var template = require("./lib/template.js"); var path = require("path"); var sanitizeHtml = require("sanitize-html"); var qs = require("querystring"); var bodyParser = require("body-parse..


  4. [Express] 에러 처리하기 2021.07.17

    가장 흔한 에러는 존재하지 않는 페이지를 찾았을 때 발생하는 에러. http상에서는 404 Not Found라는 에러를 보내주기로 약속되어 있음. 참고 링크 : https://expressjs.com/ko/starter/faq.html app.use(function(req, res, next) { res.status(404).send('Sorry cant find that!'); }); 끝에다가 위 코드를 추가하면 된다. 근데 왜 끝에다 해야할까? → 미들웨어는 순차적으로 실행되기 때문에 더 이상 실행할 수 있는 상황이 없을 때 끝까지 도착하게 되고, 그 때 에러 처리를 하는 것이다. 링크 양식에는 맞지만 작성한 글 리스트에 없는 글 제목을 불러오려고 했을 때도 에러로 처리해 보자. 45, 46번째 줄의..


  5. [Express] 미들웨어의 실행순서 2021.07.16

    http://expressjs.com/en/guide/using-middleware.html 미들웨어는 여러가지 타입이 있다. 지금까지 사용했던 것은 application-level middleware이다. app. 은 객체가 담겨있고 use, get, post 등의 방식을 통해 미들웨어를 등록할 수 있는데, 그런 식으로 등록된 미들웨어를 의미한다. app.use(function (req, res, next){ console.log('Time:', Date.now()) next() }) → app.use에다가 함수를 등록하게 되면 그 함수는 미들웨어로서 등록된다. 미들웨어의 핵심은 request와 response 객체를 받아서 변형할 수 있다는 것임 +next 호출을 통해 그 다음에 실행되어야 할 미들웨..


  6. [Express] 미들웨어 만들기 2021.07.16

    http://expressjs.com/en/guide/writing-middleware.html 미들웨어는 아래와 같이 만들 수 있다. var express = require('express') var app = express() var myLogger = function (req, res, next) { var myLogger =console.log('LOGGED') var myLogger =next() var myLogger =} → app.use의 변수가 되는 함수는 첫 번째 인자는 request 객체, 두 번째 인자는 response 객체, 세 번째는 next라는 값을 가지고 있는 함수이다. request response를 받아서 그것을 변형할 수 있다. next호출을 통해 그 다음에 실행해야 할..


  7. 보안 2021.06.24

    오염된 정보가 들어올 때 생길 수 있는 문제 어떻게 위험한가? 예를들어 주소 뒤에 /?id=../password.js 등을 치면? → .. = 현재 디렉토리, data 디렉토리의 부모 디렉토리의 데이터를 가져올 수 있다. ..을 더 많이 치면 보다 상위 디렉토리의 데이터를 가져올 수 있게 된다. 어떻게 막을 수 있을까? 참고 링크 path.parse()를 이용해서 디렉토리, 확장자, 파일 이름 등을 알 수 있다. path.parse().base 를 이용하면 경로를 탐색해나갈 수 있는 정보를 세탁할 수 있다. 오염된 정보, 문제의 소지가 있는 정보를 걸러내는것 = filter 오염된 정보가 나갈 때 생길 수 있는 문제 만약 이런 글을 게시하면... 이런 글이 뜨게 된다. 스크립트 태그 내부에 locatio..


  8. 모듈 2021.06.24

    코드를 작성하는 과정에서 코드가 늘어나면 정리하는 과정이 필요하다. (ex. 객체, 배열, 함수 등..) 이러한 정리수단인 객체가 늘어나면 더 큰 틀의 정리 수단이 필요하다. → 모듈(Module) 모듈 : 특정한 기능을 하는 함수나 변수들의 집합 모듈은 파일로 쪼개서 밖으로 내보낼 수 있음 = 모듈로 만들면 여러 프로그램에서 재사용 가능 코드가 길다 싶으면 파일로 잘게 쪼개서 관리하기 쉽게 만들 수 있다는 것~ var M = { v: "v", f: function() { console.log(this.v); }, }; //아래 명령어는 약속이다. module.exports = M; //기능들 중에서 M이 가리키는 객체를 모듈 밖에서 사용할 수 있도록 내보내겠다. → 다른 파일에서 쓰고 싶은 변수들을 m..


  9. 객체 지향 프로그래밍 2021.06.23

    Object Oriented Programming, OOP 객체 지향 프로그래밍. 프로그래밍을 한다 = 데이터 + 데이터를 처리하는 것 데이터를 사용하기 좋게 정리하는 도구 - array, object javascript에서 처리하는 코드가 많아지면 서로 연관되는 것들을 구분하여 그룹핑하기 위해서 각종 내장함수를 사용한다. 함수는 처리해야할 일에 대한 어떠한 정보를 담고 있는 일종의 구문(statement)이자 값이다. 함수를 변수에 넣을 수 있다 = 값이다. var j = function f1() { console.log(1 + 1); console.log(1 + 2); } var i = if(true){ console.log(1); } var k = while(true){ console.log(10)..


  10. JavaScript 객체 2021.06.23

    객체(Object)는... 추상적이고 철학적인 개념이긴 하지만 기능 중심으로 생각하면 쉽다~ Object vs Array 배열은 객체와 함께 정보를 정리정돈하는 수납수단이다. 정보를 정리정돈할 때 순서에 따라서이고 배열의 리터럴은 대괄호([]). 배열에서 각각의 정보들은 고유한 식별자가 있고 그 식별자는 숫자이다. → Array 순서가 없이 정보를 저장하는 최적의 수납수단, 리터럴은 중괄호({}). 숫자로 식별자를 주지 않고 이름으로 줄 수 있다. → Object var members = ["rouie", "effy", "doodoo", "moro"]; console.log(members[2]); //doodoo 출력 var roles = { bird: "rouie", cat: "effy", human:..