분류 전체보기
[javascript] ES6 순회와 이터러블/이터레이터 프로토콜
[javascript] ES6 순회와 이터러블/이터레이터 프로토콜
2021.09.281. 이터러블과 함수형 프로그래밍 최근 javascript 함수형 프로그래밍 을 공부하면서 알게 된 ES6 순회와 이터러블/이터레이터 프로토콜의 관계에 대해 공부하게 되었습니다. 제 생각으로는 함수형 프로그래밍에서 이터러블/이터레이터 프로토콜은 핵심적인 개념이라고 생각합니다. 생각보다 간단한 원리에서 시작한 개념이 함수형 프로그래밍에서 아주 요긴하게 쓰입니다. 본 게시글은 타 블로그 및 MDN에서 참조한 내용으로 작성되었습니다. Iteration protocols - JavaScript | MDN ECMAScript 2015 (ES6)에는 새로운 문법이나 built-in 뿐만이 아니라, protocols(표현법들)도 추가되었습니다. 이 protocol 은 일정 규칙만 충족한다면 어떠한 객체에 의해서도 구..
[javascript] ES6 구조분해 할당 총 정리
[javascript] ES6 구조분해 할당 총 정리
2021.09.27구조분해 (Destructuring assignment) 최근 자바스크립트 함수형 프로그래밍을 공부를 하다 구조분해 및 iterator 개념이 조금 부족하여 따로 정리하여 작성합니다. 이번 게시글에서는 구조분해 만 다루고 다음 게시글에서 iterator 를 다뤄보도록 하겠습니다. 1. 문법 구조분해의 기본 문법은 아래와 같습니다. const [a, b] = [1, 2]; console.log(a); // 1 console.log(b); // 2 const [c, d, ...rest] = [1, 2, 3, 4, 5, 6, 7]; console.log(c); // 1 console.log(d); // 2 console.log(rest); // [3, 4, 5, 6, 7] const { e, f } = { e..
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
2021.09.18예제 모델 // 기존의 sequelize Profile 모델 class Profile extends Sequelize.Model { static init(sequelize, DataTypes) { super.init({ id: { type: DataTypes.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true, }, name: { type: DataTypes.STRING(200), allowNull: false }, email: { type: DataTypes.STRING(200), allowNull: false, }, profile_url: { type: DataTypes.TEXT, allowNull: true, } }); return a..
[javascript] 일반 함수와 화살표 함수의 차이 (feat. ES6)
[javascript] 일반 함수와 화살표 함수의 차이 (feat. ES6)
2021.09.05항상 일반 함수와 화살표 함수의 정확한 차이점을 지나쳐 왔습니다. 단순하게 화살표 함수(Arrow function)는 ES6에 새로 나온 문법인 것으로만 인식한 상태로 개발했지만 정확히 알고 적절하게 활용한다면 더욱 깔끔하고 디버깅이 편한 코드를 작성할 수 있을 것 같아서 따로 정리하게 되었습니다. Q . function 과 () => {} (화살표 함수)의 차이점이 무엇일까요? A : "바인딩되는 this가 다릅니다." 틀린 답변은 아니지만, 정확히 어떻게 this가 다를까요? 말 뜻대로 생각했을 때, 아래 코드처럼 생각할지도 모르겠습니다. // 서로 다른 값이 출력될 것? function normalFunc() { console.log(this); } const arrowFunc = () => { c..
[javascript] Primitive Type(원시 타입) vs Reference Type(참조 타입)
[javascript] Primitive Type(원시 타입) vs Reference Type(참조 타입)
2021.08.28자바스크립트의 자료형은 크게 원시 타입과 참조 타입으로 나뉩니다. 원시 타입 (Primitive Type) 원시 타입은 모두 하나의 값을 담고 있습니다. - 문자(string) - 숫자(number) - bigint - 불리언(boolean) - null - undefined - 심볼(symbol) => ES6부터 추가된 타입 총 일곱 가지 입니다. 원시 자료형은 값 자체에 대한 변경이 불가능(immutable) 하지만, 변수에 데이터를 재할당할 수 있습니다. 하나의 메모리에 하나의 데이터를 보관합니다. 변수를 재할당 해도 변수의 항당 값에 영향을 주지 않습니다. let myString = 'goodNews'; myString = 'badNews'; // 재할당 가능 myString[0] = 'B'; /..
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
2021.08.27콜 스택, 메모리 힙이란? 자바스크립트 엔진은 Memory Heap 과 Call Stack 으로 구성되어 있습니다. 가장 유명한 것이 구글의 V8 Engine입니다. 자바스크립트는 단일 스레드 (sigle thread) 프로그래밍 언어인데, 이 의미는 Call Stack이 하나 라는 이야기입니다. 즉 멀티가 되지 않고, 하나씩 하나씩 처리한다는 의미입니다. 콜 스택(Call Stack) 원시 타입(숫자 등) 데이터가 저장된다. 실행 콘텍스트(Execution Context)를 통해 1) 변수 식별자(이름) 저장, 2) 스코프 체인 및 this 관리, 3) 코드 실행 순서 관리 등을 수행. *실행 컨텍스트의 상세 구조 및 원리는 이 글의 범위를 넘어가므로 다루지 않습니다. 메모리 힙(Memory Heap)..
SQL Injection 이란? (SQL 삽입 공격)
SQL Injection 이란? (SQL 삽입 공격)
2021.08.25SQL Injection SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위를 말한다. 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격이다. 위의 만화에 대해 설명하자면, 저 학교에서 입력한 명령은 다음과 같을 것이다. INSERT INTO students (이름) VALUES ('학생 이름'); 여기서 Robert'); DROP TABLE students;-- 을 '학생 이름' 자리에 넣을 경우 다음과 같은 명령문이 된다. INSERT INTO students (이름) VALUES ('Rob..
[node.js] DI(의존성 주입) 구현하기
[node.js] DI(의존성 주입) 구현하기
2021.08.20DI (Dependency Injection) 의존성 주입(DI)는 잘 알려진 기술이다. IoC 컨테이너를 이용한 DI는 여러 모듈의 확장성과 독립성에 큰 도움을 준다. 특히 Spring에서 Java Bean을 이용하여 DI를 구현하는 것이 국내에서 가장 유명하다고 생각한다. 하지만 Node.js에서 DI는 그렇게 활발하게 쓰이고 있지 않는 것 같다. 왜냐하면 require로 모듈을 바로 불러오면 되기 때문에 굳이 필요성을 못 느끼기 때문이다. 하지만 이번에 공부를 하면서 node에서도 DI를 해야 하는 이유를 알게 되어서 예제 코드와 함께 설명하고자 한다. DI와 테스트 코드 의존성 주입은 하나의 패턴이다. 만약 의존되는 클래스를 매개변수로 전달해준다면, 모듈 안에서 클래스를 불러오거나 새로 만드는 것..
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
2021.08.09본 포스트는 Sam Quinn의 “Bulletproof node.js project architecture” 글을 번역한 것입니다. 혼자 보기 너무 아까운 글이기에 번역하여 공유합니다. Introduction Express.js는 node.js REST API를 만드는데 좋은 프레임워크지만, 어떻게 node.js 프로젝트 구조를 잡아야 할지 알려주지 않습니다. 우습게 들릴 수도 있지만, 이건 매우 큰 문제입니다. 올바른 node.js 프로젝트 구조는 코드의 중복을 피해 주고 안정성을 높여주며, 당신의 서비스를 확장하는데 도움이 될 것입니다. 이 포스트는 다년간의 부족했던 설계와 나쁜 패턴, 그리고 수없이 많은 코드 리팩터링 경험을 통해 쓰인 하나의 리서치입니다. 목차 폴더 구조 3 계층 설계 (3 Lay..
[회고] 리팩토링을 꼭 해야돼?
[회고] 리팩토링을 꼭 해야돼?
2021.08.09리팩터링을 꼭 해야 하나..? (개발자경수님의 인스타툰) 2021년 3월 졸업작품을 코딩하던 중 든 생각이었다. 어차피 백엔드는 나 혼자 개발할 코드이고 기획 말고 추가 기능을 넣을 것이 없기 때문에 이미 만들어 놓은 API는 바뀌지 않을 것 같았다. 즉 유지보수가 필요 없다고 생각했다. 그렇게 수많은 버그를 수정하고 이걸 고치면 저게 고장 나고 저걸 고치면 이게 고장 나는 과정을 수 없이 반복하여 졸업작품을 완성하게 되었다. 곧바로 졸업작품 발표와 이어지는 교수님들의 압박 질문들.. 5개월간의 준비는 무성하게 완성 이후는 순식간에 지나갔다. 하지만 어느 날 문득 든 생각이 내 머리를 내려쳤다. 바로 졸업작품의 의의를 잊고 있었다. 1. 현재 혼자 개발하지만, 내가 일하는 곳은 조직이기 때문에 유지보수가..
[express] 유효성 검사를 위한 express-validator 사용하기
[express] 유효성 검사를 위한 express-validator 사용하기
2021.07.16서론 Spring-boot를 공부하던 중 Bean Validation에서 제공하는 annotation을 사용해보니 코드가 너무 간결해지고 관리가 편하다는 것을 느꼈다. 그래서 node express에서도 요청 값을 validation 할 수 있는 라이브러리를 찾다가 알게 된 express-validator에 대한 설명글을 쓰고자 한다. 유효성 검사를 좀 더 간편하게! express-validator(npm) express-validator(getting-started) const { body, validationResult } = require('express-validator'); app.post( '/user', body('username').isEmail(), body('password').isLe..
[sequelize] timestamp 에 날짜, 시간에 대한 타임존(timezone) 처리 방법
[sequelize] timestamp 에 날짜, 시간에 대한 타임존(timezone) 처리 방법
2021.07.15문제 기존 Sequelize에서 날짜형(date, timestamp)을 저장시 -09:00 된 값으로 저장이 되었지만 mysql에서 값을 불러올 때에도 sequelize가 자동으로 +09:00 된 값으로 계산후 값을 반환했기 때문에 전혀 문제가 없었다. EX) sequelize "6월 4일 00:00" 저장 시 => 실제 mysql에 저장되는 값 "6월 3일 15:00" 하지만 최근 mysql에 저장되는 타임존을 UTC(국제표준시)에서 KST(한국표준시)로 변경한 것이 화근이었다. 한국 시간으로 값을 넣었는데 mysql timezone이 KST임에도 불구하고 sequelize가 -09:00 된 값으로 시간을 저장하게 되었버렸다. const Sequelize = require("sequelize"); //..