JavaScript에서 함수는 구문(statement)이면서 동시에 값(value)이기도 하다. 이런 특성을 이용하면 서로 연관된 데이터(변수)와 처리(함수)를 그룹핑해서 정리 정돈할 수 있다.

함수를 배열과 객체(value)에 담을 수 있다.
JavaScript에서는 함수의 오버 로딩을 허용하지 않으므로 같은 이름의 함수가 정의되어도 에러가 발생하지 않고 마지막 함수만 유효하다. 따라서 하나의 함수로 여러 매개변수에 대응할 수 있는 분기를 설계해야 한다.
*함수 내부에서 넘겨받은 arguments 개수나 type으로 구분하여 다른 동작을 취하도록
같은 맥락에서 객체의 프로퍼티로써 함수를 정의하면 함수가 오버라이팅 되는 위험을 줄일 수 있다. (복잡성↓)
객체 안에서 데이터와 데이터를 처리하는 함수가 그룹핑되어있기 때문이다.

객체 내에서는 프로퍼티 키를 통해 값을 참조할 수 있다.
전역 변수를 사용하는 함수처럼 보인다.
Module
객체를 정리하는 도구
모듈화를 통해 정보 은닉과 코드 재사용이 용이하게 한다.

module.exports = 외부에서 사용을 허용할 객체;
*일종의 public 객체화

require(module path);
./ : 현재 코드가 실행되는 디렉토리
Security
INPUT : 오염된 정보가 들어올 때
사용자로부터 받아온 데이터(예를 들어 query string)를 그대로 받아 파일을 탐색하는 처리를 하면 약간의 조작만으로 서버의 상위 디렉터리의 데이터마저 탐색할 수 있다.
/?id=password => /?id=../password => /?id=.../password
따라서 사용자로부터 받은 데이터를 가공하여 사용할 필요가 있다.
var path = require('path');

parce를 통해 필요한 부분만 추출하여 개발자가 원하는 장소에서만 사용자의 접근을 한정한다.
OUTPUT : 오염된 정보가 나갈 때
공격자가 서버로 보내는 데이터에 JavaScript 코드를 심어서 다른 사용자에게도 해당 코드의 결과가 반영되는 문제
ex. <script> ... </script> //웹 브라우저가 JavaScript 코드로 인식한다.

JavaScript 파일 속 Entity Name은 웹 브라우저가 Result 문자로 출력한다.
npm을 통해 자동 필터링 모듈을 다운로드한다.
npm init //npm 초기화
npm install -s sanitize-html
*-g or --global : 컴퓨터 전역에서 사용할 수 있는 독립된 프로그램 설치
*-s : 현재 프로젝트에서만 사용할 프로그램 설치

dependencies는 사용하고 있는 외부 소프트웨어를 나타낸다.

해당 모듈의 document를 참고하여 데이터를 필터링한다.
