본문 바로가기
반응형

68

JQuery 엘리먼트 제어 엘리먼트 제어 jQuery는 엘리먼트를 제어하는 일관되고 풍부한 기능들을 제공한다. http://api.jquery.com/category/manipulation/ Manipulation | jQuery API Documentation Adds the specified class(es) to each element in the set of matched elements. Insert content, specified by the parameter, after each element in the set of matched elements. Insert content, specified by the parameter, to the end of each element in the set of api.jquer.. 2020. 12. 28.
Node.js - 출력정보에 대한 보안 출력정보에 대한 보안 페이지에서 사용자가 업데이트나 수정을 하였을때 폼 값 자체를 태그와 같은 것으로 버그를 유발하며 출력 정보를 조작할 수 있다. 아래의 예처럼 태그로 alert 경고창을 뜨게 하도록 할 수도 있다. 이러한 버그는 아주 기본적인 예시일 뿐이며 더 나아간다면 정보 탈취 등등 많은 심각한 보안 문제로 사건이 커질 수 있다. 이를 해결하기 위해서는 필터링 처리를 하는 일명 '소독'이 필요하다. 아래 사이트는 npm이라는 모듈의 정보를 서비스 제공하는 사이트이다. 여기서 HTML의 와 같은 태그들을 필터링하기 위한 모듈 서비스 중 하나인 "sanitize-html"의 모듈을 찾을 수 있다. 유의할 점은 npm 모듈을 모두 신뢰하면 안된다. 사이트에 들어가 다른 개발자 사용자들의 후기와 다운로드.. 2020. 12. 26.
Node.js - 입력정보에 대한 보안 입력정보에 대한 보안 입력정보와 관련해서 보안적으로 처리해야 할 이슈가 있다. 아래와 같이 ../password.js 을 입력해주어 파일을 접근 시도를 하여 보안이 없다면 쿼리데이터는 알려주지 말아야할 파일 목록들을 그대로 노출시키는 이슈가 발생할 수 있다. 그래서 아래와 같이 path라는 메소드를 통해 ../을 통한 상위 디렉토리로 접근할 수 있는 경로를 차단해주었다. var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var template = require('./data/muse.js'); var path = require('path'); //path라는.. 2020. 12. 26.
JQuery Event Event 시스템에서 일어나는 사건을 의미한다. javascript나 jQuery에게 이벤트란 브라우져에서 일어나는 사건을 의미한다. (클릭, 마우스 이동, 타이핑, 페이지 로딩등) 이벤트가 발생했을 때 작동할 로직을 시스템에게 알려두면 이벤트가 발생했을 때 시스템이 그 로직을 호출한다. jQuery의 이벤트 크로스브라우징의 문제를 해결해줌 on로 이벤트 핸들러를 설치하고, off로 제거 trigger로 이벤트 핸들러를 강제로 실행 (예제2) click, ready와 같이 다양한 이벤트 헬퍼(helper)를 제공함 예제 코드 2020. 12. 25.
JQuery Chain Chain jQuery의 메소드들은 반환값으로 자기 자신을 반환해야 한다는 규칙을 가지고 있다. 이를 이용하면 한번 선택한 대상에 대해서 연속적인 제어를 할 수 있다. chain의 장점 코드가 간결해진다. 인간의 언어와 유사해서 사고의 자연스러운 과정과 일치함. 예시 Jin seok kim 탐색(traversing) chain의 대상을 바꿔서 체인을 계속 연장시킬 수 있는 방법 너무 복잡한 chain은 코드의 가독성을 떨어 뜨릴 수 있다. 참고 사이트 http://api.jquery.com/category/traversing/ Traversing | jQuery API Documentation Create a new jQuery object with elements added to the set of m.. 2020. 12. 23.
JQuery 선택자 선택자란? jQuery wrapper에는 CSS 선택자가 위치할 수 있는데, 이를 통해서 제어하려는 엘리먼트를 빠르고 정확하게 지정할 수 있다. 예제 코드 - id 선택자 : #선택자 - class 선택자 : .선택자 - 엘리먼트 선택자: 엘리먼트 자체 - 다중 선택자 : #선택자, #선택자2 아래 코드에서 JQuery을 이용하여 선택자를 불러오는 것을 확인 할 수 있다. 아래 jQuery 사이트에서 더 다양한 선택자를 찾아볼 수 있다. 활용할 수 있는 이해만 하면 선택자를 다 외우지 못하도 활용할 수 있다. https://api.jquery.com/category/selectors/ Selectors | jQuery API Documentation Select all elements that are i.. 2020. 12. 22.
Javascript ES6+ Promise Promise Promise의 상태 unnsettled (미확정) 상태: pending. thenable하지 않다. settled (확정) 상태: resolved. thenable한 상태다. - fulfilled (성공) - rejected (실패) const promiseTest = param => new Promise((resolve, reject)=> { setTimeout(()=> { if(param) { resolve("해결") } else { reject(Eroor("실패")) } }, 1000) }) const testRun = param => promiseTest(param) .then(text => { console.log(text)}) //.then은 resolve 의미로 성공했을 때 .. 2020. 12. 22.
Javascript ES6+ Class Class ES5의 프로토타입 메소드 대신 ES6+에서 더 편히라게 쓸 수 있는 Class 가 생겨났다. class의 기본 쓰임 // 클래스 리터럴 class Person1 { } console.log(Person1.name) // 기명 클래스 표현식 const Person2 = class Person22 { } console.log(Person2.name) // 익명 클래스 표현식 let Person3 = class { } console.log(Person3.name) ES5 버전의 프로토타입 function Person1 (name) { this.name = name } Person1.prototype.getName = function () { //prototype 메소드이다. return this... 2020. 12. 21.
Node.js - 기본적인 CRUD APP 기능들 구현하기 기본적인 APP 기능들 구현하기 1. 글생성 UI 만들기 var http = require('http'); var fs = require('fs'); var url = require('url'); // templateHTML 이름의 함수를 만들어 이 함수 안에 문서 내용을 넣어두었다. function templateHTML(title, list, body){ return ` WEB ${list} // '/create'라는 페이지 링크를 하나 만들어주었다. create ${body} `; } function templateList(filelist){ var list = ''; var i = 0; while(i < filelist.length){ list = list + `${filelist[i]}`; i .. 2020. 12. 19.
JQuery 이란 JQuery 엘리먼트를 선택하는 강력한 방법이다. 선택된 엘리먼트들을 효율적으로 제어할 수 있는 다양한 수단을 제공한다. 자바스크립트 라이브러리라고 할 수 있다. 사용방법 http://jquery.org 에서 jquery 소스코드를 다운로드 한다. 위의 파일을 서버에 업로드 한 후 웹페이지 안에서 자바스크립트를 삽입한다. Javascript와 JQuery 비교 탭을 클릭했을 때 포커스를 색깔로 표시 변경하는 코드이다. 자바스크립트 본래의 코드보다 제이쿼리가 훨씬 간결해졌다. 2020. 12. 18.
Javascript ES6+ Iterator Iterator 반복을 위해 설계된 특별한 인터페이스를 가진 객체라고 할 수 있다. - 객체 내부에는 `next()` 메소드가 있는데, - 이 메소드는 `value`와 `done` 프로퍼티를 지닌 객체를 반환한다. - `done` 프로퍼티는 boolean값이다. Iterator 구현 예시 코드 객체 내의 프로퍼티를 iterable한 개체로 활성화 시켜주는 것을 확인 할 수 있다. const iter = { items : [10, 20, 30], count: 0, next () { const done = this.count >= this.items.length return{ done, value: !done ?this.items[this.count++]:undefined } } } console.log(i.. 2020. 12. 18.
Javascript ES6+ Iterable Iterable Iterable의 정의 내부 요소들을 공개적으로 탐색(반복)할 수 있는 데이터 구조. [Symbol.iterator] 메소드를 가지고 있다. 아래와 같은 코드들이 iterable한 예이다. const arr = ['a', 'b', 'c'] const set = new Set(['a', 'b', 'c']) const map = new Map([[false, 'no'], [true, 'yes'], ['well', 'soso']]) const str = '문자열도 이터러블하다' ※ Iterable의 의미는 내부 요소들을 공개적으로 반복 및 탐색할 수 있는 데이터 요소를 뜻한다. [Symbol.Iterable] 매소드를 가지고 있는 것이 특징이다. 개체 자신이 iterable한 경우 array,.. 2020. 12. 18.
Javascript ES6+ Map Map Map을 쓰는 이유 중 하나는 객체의 단점을 보안하기 위한 것이다. 객체의 단점 iterable하지 않다. (iterable의 의미는 순서대로 순환 및 반복한다는 흐름이다) 키를 문자열로 취급한다. 키값의 unique함을 완벽히 보장하지 못함. 프로퍼티 개수를 직접 파악할 수 없다. iterable하지 않다. const o = { a: 1, b: 2, c: 3 } for (let key in o) { console.log(key, o[key]) } /결과: // a 1 // b 2 // c 3 Object.prototype.method = function () { } for (let key in o) { console.log(key, o[key]) } //결과: //a 1 //b 2 //c 3 /.. 2020. 12. 16.
Javascript ES6+ Set set Array.prototype.pushUnique = value =>{ if(!this.include(value)){ this.push(value) } }return this const arr = [1, 2, 3] arr.pushUnique(5) arr.pushUnique(4) arr.pushUnique(3) console.log(arr) //결과: arr(5) {1, 2, 3, 5, 4} ///// const set = new Set([1,2,3]) set.add(5) set.add(4) set.add(3) console.log(set) //결과:Set(5) {1, 2, 3, 5, 4} set은 중복이 허용되지 않으며 순서를 보장하는, 값들로만 이루어진 리스트를 만드는 역할을 한다. 위의 결과를 .. 2020. 12. 16.
CSS+Javacript - 슬라이더 메뉴 구현하기 메뉴바가 메뉴 아이콘을 클릭하면 슬라이더 기능으로 튀어나오고 닫기 버튼을 누르면 다시 들어가는 슬라이드 메뉴를 간단하게 구성해보았다. HTML HOME Menu 2 Menu 3 Menu 4 Menu 5 Close 메뉴바를 구성하는 문서중 Close는 닫기 버튼이므로 onclick="closeLetfMenu();라는 함수를 일단 선언해 주었다. 추후 자바스크립트 부분에서 조정할 수 있다. 또한 메뉴바를 열기전 메뉴 클릭 버튼에는 onclick="showLeftMenu();라는 함수를 선언해주어 자바스크립트에서 조정하도록 해두었다. CSS CSS 부분은 메뉴가 움직이는 슬라이드 기능 구현을 담당하고 있다. CSS 부분은 컬러와 폰트에 신경을 조금 써서 비율과 시각에 대해 알맞게 디자인해보았다. transto.. 2020. 12. 15.
Javascript ES6+ 심볼(Symbol) 심볼(Symbol) primitive value => 유일무이하고 고유한 존재. 비공개 멤버에 대한 needs에서 탄생. 기본적인 열거대상에서 제외. 암묵적 형변환 불가. `Symbol([string])` : 문자열이 아닌 타입은 자동으로 toString 처리한다. const sb1 = Symbol() const sb2 = Symbol() console.log(sb1,sb2) console.log(sb1 === sb2) //결과: 오류 const sb1 = Symbol('symbol') const sb2 = Symbol('symbol') console.log(sb1, sb2) console.log(sb1 === sb2) //결과: //Symbol(symbol) Symbol(symbol) //false c.. 2020. 12. 15.
Javascript ES6+ Destructuring assignment Destructuring assignment 배열의 해체할당 var colors = ['red', 'white', 'orange'] var first = colors[0] var second = colors[1] var third = colors[2] console.log(first, second, third) //결과: red white orange const colors = ['red', 'white', 'orange'] const [first, second, third] = colors console.log(first, second, third) //결과: red white orange 위의 두 코드의 결과는 똑같다. ES6+부터는 변수 이름을 배열화할 수 있게 되었다. const colors = .. 2020. 12. 14.
Javascript ES6+ Function 함수 Function 함수 name property function a () { } console.log(a.name) //결과: // a 위 코드는 name 프로퍼티가 함수 a에 붙어 문자열로 'a'가 출력된다. 함수가 name 프로퍼티를 가지고 있기 때문에 가능한 일이다. const b = function () { } console.log(b.name) //결과: b const c = function cc () { } console.log(c.name) //결과: cc const d = () => {} console.log(d.name) //결과: d const e = { om1: function () {}, om2 () {}, om3: () => {} } console.log(e.om1.name, e.o.. 2020. 12. 14.
Node.js - Node.js에서 동기와 비동기 Nodejs에서 동기와 비동기 Node.js는 비동기적인 실행에 특화되어있다고 할 수 있다. 여기서 비동기와 동기를 설명하자면 동기는 차례대로 하나씩 하나씩 일을 처리해나가는 것이라면 비동기는 동시에 일을 처리해나가는 더 효율적인 방법이라고 말할 수 있다. 동기 var fs = require('fs') console.log('A'); var result = fs.readFileSync('fileB','utf8'); console.log(result); console.log('C'); 동기를 코드로 표현하였다. readFileSync 메소드는 file을 읽어오는 메소드이다. 여기서 불러올 fileB에는 텍스트 'B'가 저장되어 있다. 코드 결과를 보면 위에서부터 차례대로 결과가 쭉 나열되어 있는 것을 알 .. 2020. 12. 12.
Node.js - 파일 목록 알아내기 파일 목록 알아내기 파일을 한꺼번에 혹은 편리하게 관리하기 위해서는 컴퓨터에 파일 목록을 맡겨야한다. 즉 파일 목록을 알아내어 보내줘야 한다는 것이다. 아래 코드는 특정 폴더안에 있는 파일 리스트를 불러오는 코드이다. var testFolder = './data'; var fs = require('fs'); fs.readdir(testFolder, function(error, filelist){ console.log(filelist); }) data 폴더 안에 있는 파일 리스트들을 프롬프트 명령으로 불러온 것을 확인 할 수 있다. 응용 var http = require('http'); var fs = require('fs'); var url = require('url'); var app = http.cr.. 2020. 12. 12.
Javascript ES6+ Arrow Function Arrow Function var a = function () { return new Date() } var b = function (a) { return a * a } var c = function (a, b) { return a + b } var d = function (a, b) { console.log( a * b ) } const f = funtion () { a: 1, b: 2 } ↓ let a = () => new Date() let b = a => a * a let c = (a, b) => a + b let d = (a, b) => { console.log( a * b ) } const f = () => ({ a: 1, b: 2 }) 위와 같이 function()이라는 함수를 Arrow F.. 2020. 12. 11.
Javascript ES6+ 객체의 향상된 기능들 객체의 향상된 기능들 shorthand property var x = 10 var y = 20 var obj = { x: x, y: y const x = 10 const y = 20 const obj = { x, y 두 코드를 비교해보면 ES6+의 새로운 기능추가로 프로퍼티가 축약된 것을 확인 할 수있다. 또 프로퍼티의 key와 value에 할당할 변수명이 동일한 경우 value 생략 가능하다. const convertExtension = function (fullFileName) { const fullFileNameArr = fullFileName.split('.') const filename = fullFileNameArr[0] const ext = fullFileNameArr[1] && fullFi.. 2020. 12. 11.
Javascript - Drag and Drop 기본 구현하기 마우스로 클릭 후 드래그해서 다른 곳으로 드랍하는 기능을 간단한 자바스크립트 코드로 구현해보았다. HTML 이미지를 드래그와 드랍을 하기 위해서는 html 태그에 드랍할 장소의 태그에 ondrop="drop(event)"을 각각 붙여줘야한다. 그리고 드래그할 이미지 태그에 드래그를 시작하는 요소라는 의미로 ondragstart="drag(event)"을 붙여준다. 또 드랍할 위치 태그에 allowDrop(event)는 다른 이벤트가 발생하는 것을 방지 하기 위한 함수이며 이는 자바스크립트에서 제어한다. CSS 아주 간단한 드랍 드래그 위한 박스를 두 개 만들었다. Javascript 함수 allowDrop()의 안에 preventDefault() 메소드는 다른 이벤트가 발생하는 것을 방지해주는 역할을 한.. 2020. 12. 9.
Javascript ES6+ spread operator (펼치기 연산자) spread operator (펼치기 연산자) var birds = ['eagle', 'pigeon'] var mammals = ['rabbit', 'cat'] var animals = birds.concat('whale').concat(mammals) console.log(animals) const animals2 = [...birds, 'whale', ...mammals] console.log(animals2) //결과: //["eagle", "pigeon", "whale", "rabbit", "cat"] //["eagle", "pigeon", "whale", "rabbit", "cat"] 위와 같이 .concat이라는 메소드를 쓰지 않고도 더 효율적으로 배열을 만들어 낼 수 있다는 것을 볼 수 있다.. 2020. 12. 9.
Javascript ES6+ rest parameter (나머지 매개변수) rest parameter(나머지 매개변수) 구 버전인 ES5에서 썼던 배열을 만들어 주는 argumernt 대신 "...(매개변수)"을 쓴다면 더 쉽게 배열을 만들 수 있다. ...(매개변수) const f = function (x, y, ...rest) { console.log(rest) } f(1, 2, true, null, undefined, 10) //결과; //[true, null, undefined, 10] 위의 결과를 보면 rest 매개변수를 호출한 결과 ...rest만 해줘도 모든 정의된 값들이 배열로서 결과가 나온다는 것을 알 수 있다. const f = function (...rest) { console.log(rest) } f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .. 2020. 12. 9.
Javascript ES6+ default parameter (매개변수 기본값) default parameter (매개변수 기본값) 과거 버전인 ES5과 다르게 매개변수의 활용의 기능이 늘었다. //결과: //0 null //결과: //7 0 "" false null 6 위의 코드들의 결과를 보면 알 수 있듯이 함수의 매개변수로 들어가는 값들이 정의되지 않는다면 그 정의되지 않은 매개변수의 함수 인자들이 자신 스스로 변수로 선언하여 변수 값들을 실행하는 것을 볼 수 있다. 하지만 정의되어진 값들이 매개변수로 들어가면 자기 스스로 변수로 설정한 값들은 무시되며 정상적으로 함수 안에서 매개변수로서 활동한다. 값 주고 받기 const f = function (x = 1, y = 3 + x) { console.log(x, y) } f() //결과: //1 4 위와 같이 함수의 인자들은 매개.. 2020. 12. 9.
Javascript ES6+ forEach, map, reduce 메소드 forEach, map, reduce 메소드 forEach Array.prototype.forEach(callback[, thisArg]) callback : function (currentValue[, index[, originalArray]]) currentValue : 현재값 index : 현재 인덱스 originalArray : 원본 배열 thisArg : this에 할당할 대상. 생략시 global객체 for문을 돌리는 것이랑 같은 개념이다. const a = [ 1, 2, 3 ] a.forEach(function (v, i, arr) { console.log(v, i, arr, this) }, [ 10, 11, 12 ]) //결과: //1 0 [1, 2, 3] [10, 11, 12] //2 1.. 2020. 12. 8.
Javascript ES6+ block scoped variables block scoped variables let var달리 재선언이 불가능하지만 재할당은 가능하다. 블록 스코프로 적용되어 외부에서 접근할 수 없다. let a = 1 a = 2 console.log(a) let은 재할당이 가능하다. let 블록 범위 let a = 1 function f () { console.log(a, b, c) // TZD 존이므로 에러가 발생한다. let b = 2 console.log(a, b, c) // 이미 선언된 let b로 인해 b는 2가 호출되지만 a또한 내부에 있지 않지만 // 외부에 선언되어있어 호출된다. 하지만 c는 아직 선언조차 되지 않았다. if (true) { let c = 3 console.log(a, b, c)// a도 호출되고 let c로 인해 c 또한.. 2020. 12. 7.
Javascript ES6+ Block Scope Block Scope 함수 스코프는 함수의 인해서 생기는 범위, 변수의 유효범위를 뜻하지만 블록 스코프(Block Scope)는 블락 '{}' 에 인해서 생기는 유효범위라고 말할 수 있다. 즉 { }에 인해서 변수의 유효범위가 결정된다. {}의 범위 { let a = 10 { let a = 20 console.log(a) } console.log(a) } console.log(a) 위의 결과를 보면 첫 번째와 두 번째 a의 값은 정의되어있다는 것을 알 수 있다. 즉 첫 번째와 두 번째로 a를 호출한 범위가 {} 블록 안에서 있기 때문에 정의될 수 있다. 하지만 세 번째 a호출은 {}블락 범위 안에 있지 않고 외부에 있기 때문에 a가 정의되지 않아 에러가 발생한다. 이점이 ES5와 ES6+의 다른점이라고 .. 2020. 12. 7.
Node.js - 홈페이지 구현 홈페이지 구현 조건문을 활용해서 홈페이지를 표현하는 방법이 존재한다. 위의 웹의 본문의 WEB의 링크에는 아직 쿼리 스트링의 값이 정의가 되지 않아서 WEB 링크를 클릭하면 정의되지 않았다는 undefined가 변환되어버린다. 그래서 만약 쿼리 스트링 값이 정의되지 않으면 발동되는 조건문을 추가한다면 undefined 표시를 안뜨게 변환 할 수 있다. ↓ var http = require('http'); var fs = require('fs'); var url = require('url'); var app = http.createServer(function(request,response){ var _url = request.url; var queryData = url.parse(_url, true).qu.. 2020. 12. 5.
반응형