Node Js는 I/O 작업을 Non-Blocking 형태로 처리한다. 때문에 순차적 코드 작성에 익숙한 프로그래머들이 Node Js의 I/O 처리에서 어려움을 겪는 경우가 흔하게 발생한다. 이번 포스팅에서는 Non-Blocking을 다루면서 실수하기 쉬운 포인트들을 정리해보자. 코드의 순서와 일치하지 않는 결과 다음과 같은 코드를 보자 printNum 함수는 delaySec 초 뒤에 number를 console에 출력하는 간단한 함수이다. logPrintNum은 printNum 함수를 실행하기 전 후에 logging을 추가적으로 출력하는 함수이다. 위 코드를 실행한 결과는 아래와 같다. 출력결과는 코드의 실행순서와 일치하지 않는다. 이 부분이 Non-Blocking I/O가 어렵게 느껴지는 가장 근본적인 이유이다. 왜 그런지 간략히 살펴보자. 위 코드의 대략적인 흐름은 다음과 같다. logPrintNum의 첫번째 **console.lo
위와 같이 input tag를 통해서 date와 time을 함께 입력받는 기능을 개발중에 많은 삽질을 했다. 이번 포스팅에서는 해당 이슈와 삽질에 대해 정리 해보고자 한다. 우선 만난 이슈는 다음과 같다. 데이터가 저장될 MySQL의 타임존과 실제 클라이언트의 타임존이 다르다. datetime-local은 이름에서도 알 수 있듯이 클라이언트 타임존을 기준으로 동작한다. datetime-local의 value 형식은 2020-03-26T10:11와 같이 YYYY-MM-DDThh:mm 형태이다. 위와 같은 이슈 외에도 서버에서 Date 객체를 통으로 넘겨줘서 input tag value에 Wed Mar 25 2020 01:20:00 GMT+090와 같은 toString 형태로 들어가서
Seqeuilize는 Association을 맺은 오브젝트에대해 자동으로 getter와 setter를 생성해준다. 생성된 getter/setter는 Association 이름이 함수명으로 포함된다. 먼저 시나리오를 살펴보자 Vessel(선박), VesselTypeCode(선박종류), Country(선박 국적) 총 3개의 엔티티가 존재한다. 엔티티의 연관관계는 다음과 같다. Vessel이 VesselTypeCode와 Country를 하나씩 들고있는 구조이다. 해당 연관관계를 코드로 표현하면 다음과 같다. 연관관계에따라 Vessel 인스턴스는 getVesselTypeCode, setVesselTypeCode, getCountry, setCountry 메소드가 자동으로 생성된다. > 생성된 메소드에
해당 자료는 seqeulize 5의 공식문서를 번역한 자료입니다. Model Instances Model instances는 DAO(Data Access Object)이다. 이번 가이드는 아래와 같은 setup을 가정으로 진행된다. Createing an instance Model은 클래스임에도 new 키워드를 통해서 직접 인스턴스를 만들지 않는다. 대신 build 메소드를 사용한다. 위 코드는 데이터베이스와 커뮤니케이션하지 않는다.(심지어 asynchronus조차 없다) build 메소드는 데이터베이스의 매핑된 데이터 오브젝트를 생성하는 역할만한다. 데이터베이스에 저장하기 위해서는 save 메소드를 사용한다. save 메소드 앞에 await 키워드가 있는 것에 주목하자. 즉 save 는 asynchronus(비동기) 메소드이
해당 자료는 seqeulize 5의 공식문서를 번역한 자료입니다. Model Basics 이번 튜토리에서 Seuqelize의 모델이 무엇이고 어떻게 사용하는지 배워보자 Concept Models은 Sequelize의 본질이다. Model은 데이터베이스의 테이블를 추상화하여 나타낸 것이다. Sequelize에서는 Model을 확장한 클래스로 나타난다. Model은 Sequlize에게 테이블의 이름이나 컬럼, 데이터 타입등과 같은 정보를 전달한다. Model은 이름을 가지고 있는데, 이 이름이 반드시 데이터베이스 테이블이름과 같을 필요는 없다. 일반적으로 테이블 이름이 복수형(Users와 같은)으로 나타나는 반면 Model은 단수형 이름(User와 같은)을 가진다. 물론 이는 configurable하다. Model Definition Model은 동등한
어제 만난 웨일 확장앱을 개발하면서 만난 이슈는 다음과 같다. Class 내부의 콜백함수에서 클래스 내부 메소드를 호출하는데 this가 바인딩되지 않아 함수 호출이 이루어지지 않았다. fetch API를 통해 blob url로 요청하니 CORS 이슈가 발생했다. 두가지 모두 구글의 도움으로 해결 할 수 있었으나, 아직 자바스크립트가 많이 부족함을 느꼈다. 앞으로 웨일 확장앱 개발을 진행하면서 만난 이슈의 기본 개념에 대해 포스팅을 작성하기로 결심했다. 우선 오늘은 첫번째 이슈였던 바인딩에 관해 알아보자 > ES6의 화살표 함수는 this를 자체적으로 바인딩 하지 않는다. 때문에 화살표 함수를 사용하면 별도로 binding을 해주지 않고도 사용가능하다. 아래 예제에는 화살표 함수가 사용되어 포스팅 설명과 틀린 부분이 있을 수 있다. 양해 바란다. 바인딩이란? 바인딩(Binding)이란 함수 호출과 실제 함수를 연결하는 방법이다. 즉 함수를 호출하는 부분에 함수가 위치