본문 바로가기

JAVASCRIPT

(18)
호이스팅(Hoisting) JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 이동시키는 과정을 말합니다. 변수 스코프 (var는 블록문에 제한되지 않는다) if (true) { var x = 5; } console.log(x); // 5 if (true) { let y = 5; } console.log(y); // ReferenceError: y is not defined 변수 호이스팅 (Hoisting) 나중에 선언된 변수를 참조할수 있다.즉 JavaScript 변수가 어떤 의미에서 함수나 문의 최상단으로 끌어올려지는 것을 말합니다. 하지만, 끌어올려진 변수는 undefined 값을 반환합니다. 그래서 심지어 이 변수를 사용 혹은 참조..
Shallow Copy & Deep Copy Shallow Copy(얕은 복사) 얕은 복사는 주로 최상위 레벨의 속성만을 복사하고, 그 하위 객체는 참조로 복사하는 방식 이것은 원본 객체와 복사본이 최상위 레벨 속성을 공유하지만 중첩된 객체는 공유하지 않는 방법입니다. const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original }; //또는 Object.assign({}, original); original.b.c = 3; console.log(shallowCopy.b.c); // 출력: 3 (변경 반영) shallowCopy는 original의 최상위 레벨 속성 a와 b를 복사합니다. a는 원시 값이므로 복사된 객체에서 독립적입니다. 그러나 b는 객체이고, 얕은 복사로 인해..
Map() 코테 문제를 풀다가 MAP을 만났다. 해시 문제.... Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있습니다. const map1 = new Map(); map1.set('a', 1); map1.set('b', 2); map1.set('c', 3); console.log(map1.get('a')); // Expected output: 1 map1.set('a', 97); console.log(map1.get('a')); // Expected output: 97 console.log(map1.size); // Expected output: 3 map1.delete('b'); console.log(map1.size); // Ex..
node schedule DREAM 프로젝트에서 입찰를 기간을 걸어두고 그 기간이 지난다면 유찰로 바꿔주는 작업을 하고 싶었다. 이번 프로젝트를 진행하면서 중요한 포인트중 하나라고 생각했기때문이다. 우선 npm을 다운 받아야한다. npm install node-schedule node-schedule A cron-like and not-cron-like job scheduler for Node.. Latest version: 2.1.1, last published: 4 months ago. Start using node-schedule in your project by running `npm i node-schedule`. There are 1561 other projects in the npm registry using no..
(unic5n)프젝 중 리팩토링 - 제품나열 DAO Ver2 (class) 마지막 update (23.06.12) ver1에서 하던걸 계속 이어서 하는 중 const getProductList = async (mainCategory, subCategory, pricefilter, start, limit, isnew) => { try { let conditionMain = ''; let conditionSub = ''; let order = 'ORDER BY p.id'; let conditionIsNew = ''; let condition = ''; if (mainCategory) conditionMain = `main_category.id = ${mainCategory}`; if (subCategory) conditionSub = `sub_category.id = ${subCa..
(unic5n)프젝 중 잠깐 리팩토링 - 제품나열DAO Ver1 가격으로 정렬하는 필터를 주는데 한줄을 덧뭍이는 것때문에 쿼리문을 한번더 써주니까 효율적이지 않다고 생각을 하게되었다. 그래서 여러 방법을 찾으면서 클래스를 사용하여 문제를 해결하고 싶었지만 프로젝트는 제출기한에는 제출해야니까 우선 다른 방법으로 기능을 만들어 놓고 이후 공부를 해서 클래스를 사용하기로 타엽했다. 카테고리별로 데이터를 받아오고 앞의 코드랑 같이 보면서 받는 데이터가 같지만 조건들때문에 세번이나 써주고 마지막 코드를 보면서 이런 코드는 하나로 합쳐줄 수 있을 것같다고 생각을 했습니다. 세개의 sql문을 조건으로 한개의 sql문으로 만들어줬습니다. 리팩토링이 잘이루어졌는지는 모르겠지만 간결해졌습니다. 이 코드의 문제는 새로운 조건을 추가했을 때 생기는 경우의 수에 대해서 고려를 하고 코드를 ..
회원가입 및 포스팅 후기 하나의 app.js에서 layered pattern을 적용해서 레이어 계층을 구조화해서 정리를 해보았다. 처음 해보는 계층화라서 서툴렀지만 진행할수록 깔끔해지며 가독성이 높아져 재미가 있었다. 에러를 찾는데도 더 쉬워졌음. 이후 암호화를 배우며 인증인가하는 로직을 추가해주었다. bcrypt와 JWT Token을 실제 로그인할 때 적용해보니 학부때 배웠었던 단방향 암호화와 양방향, 해시 함수등 배웠었던 기억이나면서 직접 코드 진행을 하니 좀더 확실하게 이해할 수 있었다. 그리고 DB구조를 설계할 때 주어야할 조건들을 잘 정리하는게 중요하다는걸 로그인과정중 sql을 사용해 조건(email unique)을 추가하고 변경해주면서 ERD초기 설계의 중요성에 대해 생각해 볼수 있는 계기가 되었음 코드를 짜는 연습도..
Bcrypt - 단방향 암호화 단방향 암호화는 암호화만 되는 것을 말하며 암호를 푸는 복호화는 할 수 없음을 말한다. 단방향 암호화에 사용되는 해시 알고리즘은 동일한 평문에 대해서 항상 동일한 해시 값을 갖습니다. 따라서 특정 해시 알고리즘에 대해서 어떠한 평문이 어떠한 해시값을 갖는지 알 수 있습니다. 해시 함수는 빠르게 데이터를 검색하기 위해 생겼습니다. 따라서 공격자가 공격타겟을 빠른 속도로 임의의 문자열의 해시값과 해킹할 대상의 해시값을 비교하여 찾을 수 있습니다. =========================== 이러한 문제를 보안하기위해 Salting 과 Key stretching을 적용 시킵니다. 1. Salting(솔팅) 단반향 해시 함수를 통해 암호화를 진행할 때 암호화하려는 데이터에 랜덤으로 데이터를 더하여 암호화를..