본문 바로가기

개발

(11)
테스트 주도 개발 (TDD와 BDD) 필자는 지금까지 테스트 코드를 한번도 작성해 본 적이 없는 테린이였지만 (진행중) 최근 입사한 회사에서는 BDD를 적극적으로 적용하고 있기 때문에 신입 과제를 수행하며 테스트 코드에 대한 느낀 점과 함께 테스트 코드를 바라보는 다양한 관점에 대해 개인적인 생각을 짧게 적어보려 한다. TDD TDD는 "Test Driven Development"의 약자로서, 말 그대로 테스트 주도 개발이다. TDD란 말이 나온지는 굉장히 오래되었다. 필자도 이전부터 TDD에 대한 이야기를 자주 접했지만 많은 회사와 개발자에게 공통적으로 "TDD가 좋은거 알겠는데 생산성이 너무 떨어져" 또는 "굳이 도입할 필요성을 못 느끼겠어" 라는 말을 자주 들을 수 있었다. 특히 스타트업의 경우 제한된 리소스로 빠른 성장을 가져가야 하..
[Javascript] Async와 Promise 최근 ES8부터 적용된 Async의 MDN 문서를 읽다가 예제로 첨부되어 있는 Promise와의 비교 코드가 정말 잘 작성되어 있는 것 같다고 생각했다. 이미 많은 사람들이 읽어 본 문서겠지만 아직 Async와 Promise가 어려운 사람들 (사실 본인)도 쉽게 이해할 수 있도록 해당 문서의 코드를 조금 수정하여 Async와 Promise의 차이, 그리고 서로 동일한 동작을 위해서는 어떻게 할 수 있는지 적어보려 한다. 1. Async Async Function은 AsyncFunction 객체를 반환하는 비동기 함수이다. NodeJS와 마찬가지로 JS 역시 이벤트 루프를 통해 비동기 함수를 동작시키며, Async Function은 반드시 Promise를 반환한다. 먼저 Async를 사용해봤다면 Await..
[Javascript] const와 Object.freeze()를 이용하여 Immutable한 Object 만들기 프로그래밍을 하다보면 개발자의 실력과는 별개로 언제나 "Human Error"가 발생할 수 있다. 특히 개발자의 실수로 인해 의도치 않게 전역 공간이나 외부 스코프의 값이나 상태가 변경되는 “Human Error”는 언제든지 일어날 수 있으며, 추적이 어렵고, 프로그램에 치명적이다. 그래서 오늘은 Javascript에서 const와 Object.freeze를 사용하며 객체를 Immutable하게 만듦으로서 객체를 "Human Error'로 부터 보호하는 방법을 소개한다. const 자바스크립트는 ES6(ECMA 2015)부터 let과 const 키워드를 제공한다. 이 중 const 키워드를 사용하면 상수 변수 선언을 할 수 있다. 그리고 const는 상수로 취급되기 때문에 다음과 같이 값을 변경하려고 시..
[Node.js] await은 정말 Non-Blocking일까? 최근 개인적으로 바쁜 일도 끝나고 해서 퇴근 후 스터디를 할까 고민하던 중 Node.js 스터디를 하기로 결심했다. 마침 지인 분께서도 함께 하고 싶다는 말씀을 해주셔서 페이스북 그룹을 통해 스터디원을 모집했고, 저번 주부터 스터디를 시작했다. 그리고 스터디 첫 날을 위해 책을 읽던 중 과연 await은 Non-Blocking일까? 라는 궁금증이 들었다. Non-Blocking과 Asynchronous Node.js가 싱글 스레드 기반의 Non-Blocking/Asynchronous 라는 것은 Node.js를 사용해 본 사람이라면 누구나 들어봤을 것이다. 하지만 실제로 Node.js가 구동되는 방식을 보면 Node.js는 과연 싱글 스레드가 맞는가? 라는 의문도 든다. 실제로 스터디를 진행하면서 한 분이..
[MySQL] AWS RDS 데이터 Dump 하기 (Import/Export) 최근 운영하던 서비스에 테스트 서버를 구축하던 중 테스트 서버용 데이터베이스를 (이하 DB) 어떻게 운영할지 고민하게 되었다. 사실 테스트 서버 운영은 서비스 배포를 시작할 때 이미 고민했던 부분이였지만 당장은 배포 환경을 분기할 정도의 필요성은 없다고 판단했기 때문에 구축하지 않았었다. 현재 테스트 서버를 구축하려는 목적이 서비스의 규모가 커졌기 때문은 아니지만 최근 서비스를 운영하면서 DB 설계에 대한 고민과 배포 단계를 위한 브랜치 전략(Git flow)의 필요성을 느끼게 되었고, 운영 DB와 테스트 DB를 분리함으로써 스키마의 추가 및 변경, Push 기능 등과 같은 운영 서버에서 할 수 없는 테스트를 안정적으로 하기 위해 구축을 결정하게 되었다. 그리고 기존 운영중인 DB 데이터를 기반으로 테스..
[Javascript] var, let, const의 차이점 Javascript에서 변수는 var, let, const 세 가지 키워드를 통해 선언할 수 있다. 지금부터 var, let, const 세 가지 키워드의 차이점을 알아보자. var var는 ES6 이전에 주로 사용되던 변수 선언 키워드로서 Function Scope로 동작한다는 특징을 가지고 있다. 먼저 Function Scope가 무엇인지 다음 두 코드를 비교해보자. // Code 1 var name = "Yorr"; function setName() { var name = "John"; console.log(`My name is ${name}`); } setName(); // My name is John console.log(`My name is ${name}`); // My name is Yorr..
[ES6] computed property name 최근 Vuex를 공부하다 Mutation 부분에서 다음과 같은 코드를 보게 되었다. const SOME_MUTATION = 'SOME_MUTATION'; export default { [SOME_MUTATION]() { ... } } 대문자와 대괄호라니 어딘가 이상해보인다. 먼저 상수로 선언된 Mutation 이름이 대문자인 이유부터 알아보자. Vuex 공식 문서를 확인해보니 일반적으로 Flux 패턴에서 Mutation의 이름을 상수로 표현한다고 한다. Mutation과 Action이 많아질 경우 전체적인 흐름을 파악하기 힘들어 진다. 이 때 상수로 정의된 Mutation을 별도의 파일에 모두 분리할 수 있다면 Import 하는 방식을 통해 Mutation의 흐름을 한 눈에 파악할 수 있다. 또한 오타로..
Express.js와 Vue.js로 만드는 SPA(Single Page Application) Part 2. 이전 Part 1에서 우리는 Express와 Vue를 연동한 개발 환경을 구축했다. Part 2에서는 Express와 MongoDB를 이용해 REST API 서버를 구축하는 과정을 다룬다. Mongoose 설치 Mongoose란 MongoDB ODM(Object Document Mapping) 중 하나이다. Mongoose를 이용하면 Object와 Document를 매칭할 수 있다. 즉, Mongoose는 Document를 DB에서 조회할 때 자바스크립트 객체로 바꿔주는 역할을 한다. 다음 명령어를 이용해 backend에 mongoose를 설치하자. $ npm i mongoose --s MVC 구축 Node.js를 사용하면 Ruby On Rails나 Django와 달리 원하는 형태의 디자인 패턴을 구축하..