부제: 비동기 호출 시 stacktrace가 유실되는 문제. javascript async stacktrace has lost Node.js는 single-thread 기반 비동기 방식이다. 그래서 나는 Node.js로 서버 애플리케이션을 개발할 때 Javascript가 ES6 이후로 지원하는 promise, async, await를 많이 사용한다. 나처럼 개발하는 사람들은 한 번쯤 직면 했을 문제에 대해 다뤄보려고 한다. 그건 바로.. 비동기 호출 시 Error의 stacktrace가 사라지는 현상 나는 서론을 쓰는데 재능이 없으니 바로 예제를 보여주겠다. 1. stacktrace가 없어지는 상황async function functionOne() { throw new Error('Error here p..
부제: 프로토타입 체이닝. JavaScript 객체지향 패턴. 이번 포스팅은 JavaScript의 prototype에 대해 다루는 글이다. 이미 이전 포스팅들에서 prototype에 대해 어느정도 다루었다. 프로토타입에는 두가지 의미가 있으며, 이를 명확하게 숙지하는 것이 중요하므로 다시 한 번 짚고 넘어가려고 한다. 1. JavaScript의 모든 객체는 '__proto__' 라는 숨겨진 프로퍼티를 갖고 있다. __proto__는 자신의 부모인 프로토타입 객체를 가리킨다. 이러한 링크를 'prototype Link'라고 부른다. 2. JavaScript의 모든 함수는 'prototype' 라는 숨겨진 프로퍼티를 갖고 있다. prototype은 자신에 new 키워드를 붙여 생성한 객체의 부모를 가리킨다...
부제: NOSQL 모듈화 경험기. 나는 다룰줄 아는 언어가 JAVA 밖에 없다. 그래서 요즘 JavaScript를 열심히 보고 있다 ㅎㅎ. 내 생각에는 JAVA와 JavaScript는 완전히 다른 언어이다. 그리고 굉장히 매력적인 언어라고 생각한다. 내가 프로그래밍 언어를 JavaScript로 접했으면 좋았겠다는 생각도 한다. 금요일에 휴가도 썼겠다.. 3일간에 뭘 만들어볼까 고민을 해봤는데, 야구선수 데이터를 활용한 간단한 선수 추천 앱같은 것을 만들어보고 싶었다. 그런데 문제는.. KBO는 OPEN API를 제공하지 않는다.... 나는 phantom.js와 같은 고오급 기술은 사용하지 않았다. request, cheerio 모듈을 활용했다. 닭잡는데 소잡는 칼이 나설 필요는 없으니까! ㅎㅎㅎㅎ 다음 ..
JavaScript의 this는 다른 언어의 this와는 조금 다르게 동작한다. this의 값은 함수를 호출하는 방법에 따라 바뀐다. 좋은 JavaScript 개발자로 거듭나기 위해서는 꼭 이해해야하는 개념이라고 하니, 이번 포스팅에서 다루도록 하겠다. JavaScript에서 함수(Function)을 호출할 때는 암묵적으로 arguments 객체 및 this 변수가 함수 내부로 전달된다. 그리고 방금 언급했듯 함수를 호출하는 방법에 따라 this에 할당되는 값은 달라진다. 지금부터 하나씩 알아보자. 1. 함수를 호출할 때 this 일반적인 함수를 호출할 때, 해당 함수 내부에서 사용된 this는 전역객체(브라우저의 경우 window객체, Node.js의 경우 global 객체)에 바인딩 된다. var n..
지난 포스팅에서 배열(Array)가 객체(Object)로 취급된다는 것을 확인했다. 그리고 JavaScript에서는 함수(Function)도 객체다. 본격적인 이야기를 시작하기 전에, 1급객체(First-Class Citizens)에 대해 짚고 넘어가려고 한다. JavaScript의 함수를 1급 객체라고 표현하기도 한다. 1급 객체는 CS분야에서 자주 쓰이는 용어로, 아래와 같은 특징을 갖는다. ⊙ 변수나 데이터 구조안에 담을 수 있다. ⊙ 파라미터로 전달 할 수 있다. ⊙ 반환값(return value)으로 사용할 수 있다. ⊙ 동적으로 프로퍼티 할당이 가능하다. JavaScript의 함수는 위의 조건을 모두 만족한다. JavaScript의 함수는 입력값을 받아 결과를 반환하는 구조로, JAVA와 같은..
JavaScript에서 배열(Array)은 객체(Object)의 일종이다. 조금 특별한 형태의 객체라고 할 수 있겠다. 다른 프로그래밍 언어의 배열과 유사한 동작을 한다. 이번 포스팅에서는 JavaScript의 배열에 대해 다뤄보려고 한다. 1. 배열 생성 배열을 생성할 때는 대괄호([])를 활용한 표기법인 배열 리터럴을 사용하거나, Array()라는 생성자 함수를 사용한다. var foodArr = ['sushi', 'kimchi', 'apple-pie'] console.log(foodArr[0]); // sushi 출력 foodArr[0] = 200; // 배열의 첫번째 요소가 200으로 바뀜 foodArr[5] = 'pizza'; // 배열의 6번째 요소에 pizza 삽입 첫번째 줄에서 요소가 3개..
JavaScript는 객체기반의 스크립트 언어이다. 즉, JavaScript는 기본 타입(Primitive Type. 숫자, 문자열, boolean, null, undefined 등.)을 제외하고 모든 것이 객체로 이루어져있다. 그래서 JavaScript를 잘 다루려면 'Object'에 대해 이해하는 것이 가장 중요하다. 1. JavaScript의 객체 JavaScript에서 객체는 Key-Value 형태의 프로퍼티(Property)들을 저장하는 컨테이너이다. 즉, 객체는 프로퍼티로 구성되어있다. 이러한 프로퍼티의 Value에는 기본타입의 값이 들어가거나, 다른 객체가 들어가기도 한다. 심지어 함수가 포함되기도 한다. (이러한 함수를 '메서드'라고 부른다.) 2. 객체 생성 ⊙ Object() 생성자 방..
부제: Node.js Nosql 연동법. Node.js의 mongodb모듈을 활용하여 mongodb를 연동하는 도중 라는 오류를 마주쳤다. 한참을 헤맨 끝에 간단히 해결되었지만, 나같은 고민을 하는 사람들이 더 쉽게 고민을 해결했으면 하는 마음에 삽질로그를 남긴다. 먼저, 내가 간단하게 만들어본 프로그램은 화면에서 id와 password를 입력받아 DB에 존재하는지 검증하고, 로그인 성공여부를 보여주는 기능을 한다. db연동은 아래와 같이 했다. 먼저 DB연결하는 function이다. // // 기본 모듈 선언 및 미들웨어 선언 생략 var MongoClient = require('mongodb').MongoClient; var db; // 연결 받아올 변수(중요) function connectDB() ..