전체 글 썸네일형 리스트형 [JS] 배열을 객체로 바꾸는 방법 속도 비교 (forEach VS. reduce) 0. 참고 https://leanylabs.com/blog/js-forEach-map-reduce-vs-for-for_of/ Performance of JavaScript .forEach, .map and .reduce vs for and for..of Declarative programming is better 95% of the time. However, when performance matters, imperative style is the go-to solution. leanylabs.com 요지 - JS에서 iterable obejct를 변환하는 다양한 방법들이 있다. - 가독성 측면에서는 선언형 프로그램이 나을 수 있으나 성능 측면에서는 명령형 프로그래밍이 나음 - Array 객체의 메서드 보.. 더보기 [Mongo] find / limit query의 중요성 (feat. Array.slice()) 가설 및 검증 가설 db에서 모든 데이터를 가져온 후 router에서 slice를 하는 것보다 limit을 활용해 db에서 일부만 가져오는 것이 더 빠를 것이다. 테스트 코드 1. 백엔드로 api 요청을 보난 후 프론트로 데이터가 넘어오는 시간을 확인함 2. 50초 동안 1초 간격으로 시간을 측정한 후 그 평균 값을 측정 3. 총 5번 반복 let timeAcc = 0 timeTest(); async function timeTest() { console.log("start"); let count = 0 let interval = setInterval(() => { getProductList($homeProductListNew, 'new') count += 1 console.log("count:", cou.. 더보기 [Express] request 객체에 object 담기 1. 핵심 - express.urlencoded의 속성과 qs 라이브러리를 활용해야한다. - 참고 자료: https://velog.io/@hyunju-song/body-parser%EC%9D%98-urlencoded%EB%8A%94-%EB%8F%84%EB%8C%80%EC%B2%B4-%EC%96%B4%EB%96%A4-%EC%97%AD%ED%95%A0%EC%9D%84-%ED%95%98%EB%8A%94-%EA%B1%B8%EA%B9%8C import express from 'express'; const app = express(); app.use(express.urlencoded({ extended: true })); // 기본 설정은 false. true로 바꿔야 함 2. 이해하기 기본적으로 자바스크립트는 데.. 더보기 [Mongo] 검색 엔진 없이 효과적으로 검색해보기 (Feat. $text, $search, $regex, aggregate) 문제 상황 검색어 사이에 다른 문자열(특히 공백)이 존재하는 경우, 원하는 document를 효과적으로 얻기 어려웠음. 특히 사용자가 특정 상품을 검색할 때 공백을 입력할 경우가 많을 거라 생각하고 이에 적극적으로 대비하고 싶었음. 아래는 기존 코드와 검색 결과이다. findBySearch(filter) { const product = await Product.find({ name: { $regex: `${filter}`} }); return product; } { name: '여름 반팔 니트' } // '검색어' => '검색 결과' // '여름 반팔' => O // '반팔 니트' => O // '여름 니트' => X // '여름반팔' => X $text, $search 장점 1. 공백이 포함된 검색어의.. 더보기 [Express] request.body 빈 필드 validate하는 코드 스타일 고민 스택 1. node.js / express.js 2. mongoDB / mongoose 상황 1. 프론트에서 request body로 update할 input 값을 넘겨줌 2. 스키마에 넣기 전, 입력된 input 값이 없는 필드를 지우고 update 객체에 담고자 함 mongoose의 경우 input 값이 없는 필드가 입력되었을 때 기존의 값 대신 빈 값을 넣어버리기 때문. 방식 1. 나머지 변수 + 단축 평가 const { field1, field2, ..., fieldLast } = req.body const toUpdate = { ...( field1 && { field1 }), ...( field2 && { field2 }), ..., ...( fieldLast && { fieldLast }),.. 더보기 [Algorithm] 그리디 알고리즘 이해하기 그리디 알고리즘이 최적해를 구할 수 있는 조건 1. greedy choice property: 현재 선택이 이후의 선택에 영향을 주지 않아야 한다. 영향을 준다는 것은 현재 선택 이전에는 사용 가능했던 후보가 현재 선택 이후 사용 불가능해진 경우 ex) 10, 30, 40, 50의 조합으로 70을 만들기 50을 고르면 30, 40을 고를 수 없게됨. 2. optimal substructure: 매 순간 최적의 해가 문제 전체에 대한 최적의 해여야 함. 즉, 매 순간의 선택이 최적의 선택으로 가는 길이어야한다. * 추가 공부 필요 두 조건의 차이: https://stackoverflow.com/questions/26439973/optimal-substructure-and-greedy-choice Optim.. 더보기 MVC 패턴 Service의 존재 가치 구조 차이 Model - Controller - View Model - Service - Controller - View 기능 차이 데이터를 다루는 비즈니스 로직은 Service 브라우저의 요청을 다루어 view로 데이터를 전송하는 기능은 Controller. 즉 req, res 등 http 요청과 관련된 변수를 service로 넘겨선 안 됨. 분리의 장점 모듈화로 비즈니스 로직의 재사용성 증가 더보기 [Express] mySQL ?와 SET query 목표: MySql에서 date type을 boolean으로 받는 테이블에 express.js와 form을 활용하여 POST 요청 A. boolean 값을 다룰 수 있는 input type으로 checkbox를 활용하였다. 이름: 나이: 희망 역할: Frontend Backend B. router.post에서 `req.body` 와 `?`, `SET` 구문을 활용하여 전송 router.post("/", (req, res) => { get_PoolConnect((connection) => { const user = { name: req.body.name, age: Number(req.body.age), frontend: req.body.frontend === 'on' ? 1 : 0, backend: req... 더보기 이전 1 2 3 4 5 다음