JavaScript & TypeScript

    [node.js] TDD / Jest(관련링크)

    1. TDD TDD는 Test Driven Development의 약자로 '테스트 주도 개발', 개발하는 방식을 이야기 합니다. 쉽게 말해서 예상하거나, 원하는대로 코드가 동작하는지 확인 및 점검을하는 것 입니다. 수학문제를 풀 때 주로 하는 검산과 같은 맥락입니다. 이 검산을 자동으로 계속해서 반복하여 확인을 해주는 것 입니다. 만약 TDD를 구현하지 않으면 코드가 제대로 동작을 하는지 확인하기 위해서는, 모든 동작을 하나하나 일일이 눌러봐야하고, 시간이 굉장히 오래 걸립니다. 추가적으로 기능을 변경하거나 리팩터링을 하면서 결과값이 바뀌거나 버그가 생길 수 있습니다. 하지만 TDD를 작성한다면 이러한 문제점들을 신경쓰지 않고 쉽게 바로잡으면서, 시간절약과 동시에 빠르게 개발을 진행 할 수 있습니다. 또..

    [Node.js] TDD를 위한 Dependency Injection

    재사용성을 높여줍니다. 테스트에 용이. 코드 단순화. 종속적이던 코드의 수를 줄임. 코드의 가독성이 높아짐. 종속성이 감소. 구성 요소의 종속성이 감소하면, 변경에 민감하지 않습니다. 결합도(coupling)는 낮추면서 유연성과 확장성은 향상. 객체간의 의존관계를 설정 가능. 객체간의 의존관계를 없애거나 줄임. Dependency Injection은 의존성 주입으로써 위와 같은 장점을 가집니다. 의존성은 A객체에서 B객체의 기능을 필요로 하는 경우 우리는 A객체는 B객체를 ‘의존한다’ 라고 표현할 수 있습니다. 왜냐하면 A객체를 온전히 사용하기 위해선 B객체가 필요합니다. 즉, 의존대상 B객체가 변하게 되면, 그것이 A에 영향을 미치는 것입니다. 그래서 강한 결합으로써 커플링이라 부르기도 합니다. 주입은..

    [Node.js] Sequelize ondelete

    ondelete 속성은 데이터를 삭제하는데 있어서 관련된 데이터를 삭제하는데 용이합니다. 1:N의 관계의 테이블에서 1의 데이터를 지우면 관련된 N을 지우게 됩니다. 예를들어 한 유저가 여러 게시물을 썼는데 그 유저가 회원 탈퇴를 하게 되면 그 유저가 쓴 게시물이 모두 사라지는 방식입니다. ondelete에 대해 쓰는 이유는 수없이 찾아보고 stackoverflow를 찾아 봤지만 동작이 되지 않았는데 결국 해결 방법을 찾았습니다. 아래는 user : photo = 1 : N 관계로 설정한 내용 입니다. 1(hasMany) : N(belogsTo) Model model - user.js (1) static associate(models) { user.hasMany(models.photo, { foreign..

    [JS] CommonJS와 ES6

    JS 모듈화 역사 require는 NodeJS에서 사용되고 있는 CommonJS 키워드이고, import는 ES6(ES2015)에서 새롭게 도입된 키워드입니다. 일반적으로 import ES6(ES2015)는 사용자가 필요한 모듈 부분만 선택하고 로드 할 수 있기 때문에 더 선호됩니다. 최근 ES6(ES2015) 모듈 시스템인 import가 많이 사용되고 있지만, 그러나 아직까지는 import 키워드가 100% 대체되어 사용될 수 없습니다. 태그를 사용하는 브라우저 환경과, NodeJS에서도 CommonJS를 기본 모듈 시스템으로 채택하고 있기 때문에, Babel과 같은 ES6 코드를 변환(transpile)해주는 도구를 사용할 수 없는 경우에는 require 키워드를 사용해야 합니다. node.js프로젝..

    [JS] 반복문에 promise

    1. promise promise는 비동기적 실행을 동기적으로 실행하기 위해 사용한다고 생각합니다. 정확히는 비동기적 실행에 대한 결과 값에 대한 완료 또는 실패에 의한 결과 값입니다. (기본적인 내용은 유튜브 엘리님 설명이 좋습니다.) 양치를 하는 행위는 비동기와 비슷하다고 생각합니다. 그래서 양치를 하면서 책을 읽을 수 있고, 폰을 볼 수도 있습니다. 하지만 양치를 하면서 치아의 상태를 제대로 확인 할 수는 없습니다. 거품 때문에 양치를 마치고 난 뒤에야 치아 확인을 제대로 할 수 있죠. 양치라는 행위를 완료하고 치아를 확인하게 만들어 주는 것이 promise라고 생각합니다. 2. 반복문에서 비동기 처리를 동기적으로 처리 promise를 반복문에 사용하려 했는데, 블로그에 많은 글들이 있었지만 오히려..

    [Node.js] express-validator (유효성 검사)

    유효성 검사는 클라이언트에서 서버로 요청을 보낼 때, 정확한 데이터를 보내고 있는 것인지 확인하는 것입니다. 서버에서 유효성검사를 최대한 빨리하는 것이 좋습니다. 왜냐하면 서버에서 데이터를 읽는 것도 비용이기 때문에 필수적입니다. 그렇기 때문에 서버에서 라우터-컨트롤러로 진행이 되기에 유효성검사는 라우터 부분에서 하는 것이 좋고, 또한 컨트롤러는 기능수행의 역할을 하기에 유효성검사를 같이 하기엔 적합하지 않다고 생각합니다. 보통 유효성 검사를 하게 되면 조건문을 사용하여 유효성 검사를 하게되는데 validator 라이브러리를 사용하면 좀 더 쉽고 보기 좋게 유효성 검사를 할 수 있습니다. npm install --save express-validator 공식문서에서는 아래의 코드처럼 간단하게 설명하고 있..

    [Node.js] Console 종류

    Console.log만 알고 있었는데 정말 많은 종류의 console이 있는 것을 알았습니다. 개발 함에 있어 유용한 콘솔들이라 생각이 듭니다. error, assert, table 등등.. 참 신기한게 많았기에 신선한 충격이었습니다. console.clear() // 콘솔로그 클리어 console.log('log') // 개발 console.info('info') // 정보 console.warn('warn') // 경보 console.error('error') // 에러, 사용자에러, 시스템 에러 // assert console.assert(2 === 3, 'not same'); //특정 조건일 때 출력 console.assert(2 === 2, 'same') // 같으면 same, 다르면 not s..

    [Node.js] 특징

    배우면 좋은점 브라우저는 자바스크립트, 서버는 자바로 구현을하는 경우가 많고, 우리나라 대기업도 백엔드는 자바로 많이 사용하고 있습니다. 노드 js로 서버를 구현하면 두가지의 언어를 사용하지 않고, 햇갈리지 않고 생산성을 높일 수 있습니다. (물론 자바만의 장점이 있기에 대기업에서 아직 많이 쓰고 있는 것으로 알고 있습니다.) 자바스크립트로 구현하는 기업 중 많은 예시를 드는 것이 넷플릭스 우버,이베이, AWS 등등 node.js를 사용하고, 우리나라 대기업도 부분적으로 사용하고 있습니다. 그리고 많은 스타트업이 노드js를 많이 사용하고 있습니다. 이렇게 많이 사용하는 이유는 쉽고, 높은생산성을 이유로 들고 있습니다. Node.js 특징 1. Javascript runtime node.js 는 런타임 환..

    [JS] method 정리

    math method Method 설명 Math.ceil() 올림 Math.floor() 내림 x.toFixed(y) x의 수를 소숫점 y자리 까지 반올림 Math.pow(x, y) x y제곱 (x ** y) Math.round(x) 가장 가까운 정수 값을 반올림 Math.abs() 절대값 Math.max() 주어진 값 중에서 최댓값 Math.min() 주어진 값 중에서 최솟값 Math.sqrt(x) x에 루트를 씌웁니다. (음수면 NaN 반환) parseFloat() 실수반환, 처음숫자 뒤에만 있는 문자열 무시 parseInt() 정수반환, 처음숫자 뒤에만 있는 문자열 무시 String method Method 설명 str.length 길이 출력 str.indexOf(찾고자하는 값) 위치 출력 str...

    [JS] 비동기, Node.js 모듈, fetch API

    하나의 작업이 끝날 때까지, 이어지는 작업을 "막는 것" blocking 이라 하고 이와 같은 경우에 예시를 들자면, 박해커는 김코딩이 주문한 커피가 나오고 나서야 커피를 주문할 수 있다고 할 때에. 김코딩의 커피 주문 완료 시점과 박해커의 커피 주문 시작 시점이 같습니다. 이렇게 시작 시점과 완료 시점이 같은 상황을 "동기적(synchronous)"이다 라고 합니다. 하지만 보통 커피숍은 이렇게 운영하지 않습니다. 굉장히 비효율 적이기 때문입니다. 보통 커피숍은 커피 주문이 blocking 되지 않고, 언제든지 주문을 받을 수 있습니다. 커피가 완성되는 즉시 커피를 제공합니다. 김코딩의 주문 완료 시점과 박해커의 주문 시작 시점이 같을 필요가 없습니다. Node.js를 만든 개발자도 위 대안이 합리적이..