반응형
반응형

Node.Js에서 사용할 Mysql ODM을 찾던 중, Sequelize라는 솔루션을 발견하여, 잘 써먹고 있던 도중

.fn('NOW') 함수를 이용하여, datetime 형태의 data를 insert할 경우 UTC 시간으로 입력이 되는 이슈를 발견하였다.


참고 : sequelize link 클릭 시 새창 (http://docs.sequelizejs.com/en/v3/)


이런 경우 sequelize의 constructor를 호출하는 과정에서 아래와 같이 timezone 옵션을 넣어, 한국 시간 (UTC+09:00) 으로 변경을 할 수 있다.


자체적으로 connection pooling 기능도 제공을 하는데, 그것도 constructor의 옵션 중 pool이라는 옵션으로 넣어주면 된다.

 var sequelize = new Sequelize('DB명', '계정', '비밀번호', {
    host: '127.0.0.1',
    dialect: 'mysql',
    timezone: '+09:00',
    pool: {
        max: 20,   // 최대 유지 connection 수
        min: 5,    // 최소 유지 connection 수
        idle: 60000 // connection을 몇ms까지 대기시킬 것인가 (이후엔 버려짐)
    }
});


반응형
,
반응형

윈도우에선 잘 되던 npm start가 linux로 옮기니 아래와 같은 에러가 발생하였다.

sh: 1: concurrent: Permission denied

npm ERR! Linux 3.13.0-32-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "start"
npm ERR! node v6.9.2
npm ERR! npm  v3.10.9
npm ERR! code ELIFECYCLE


권한이 없어서 발생하는 문제로 node_modules/.bin 폴더의 permission을 755로 바꿔주면 해결된다.


$ chmod 755 node_modules/.bin


반응형
,
반응형

맨날 Jquery + Freemarker만 하다가 Angular2를 시도해보던 중..

특정 ID로 값을 가져오는 방법에 대해 고민을 했었는데, 고민할 거 없이 그냥 JQuery를 사용하면 되는 거였다.


아래와 같이 $ 만 선언해주고, typescript구문에서 사용을 하면 됨..

당연한 이야기지만, html 페이지에 jquery는 사전에 import가 되어 있어야 한다.


declare var $ : any;

var aaa = function() {
    var id = $('#ID').val();     // javascript와 완전히 동일함.
    return id;
}
반응형
,

[Angular2] @Input

개발/Front-End 2016. 12. 19. 14:07
반응형

Angular2에는 @Input이라는게 있는데 외부에서 Parameter(HTML기준으로는 attribute)를 넘겨 받아, 값으로 활용할 때 사용한다.


아래 예를 한 번 보자.

import { Component, Input } from '@angular/core';

@Component({
    selector: 'input-div',
    template: `

{{title}}


` }) export class InputDivComponent { @Input() title: string; // title변수는 외부로 부터 받아서 활용한다. // (이름이 너무 긴 경우 @Input('a')와 같이 argument로 alias name을 넘겨서 활용할 수도 있다.) } // 위에 있는 컴포넌트를 아래 추가할 두개의 컴포넌트에서 동일하게 활용할 것이므로, 변수로 선언함. var inputDivParentTemplate = ``; @Component({ selector: 'input-div-a', template: inputDivParentTemplate }) export class InputDivAComponent { title: string = "A"; } @Component({ selector: 'input-div-b', template: inputDivParentTemplate }) export class InputDivBComponent { title: string = "B"; }


View에서는 아래와 같이 태그만 가져다가 쓰면, Component에 명시한 Template대로 태그가 그려진다.

    loading...
    loading..


Angular2를 처음 접해본 입장에서는 왜 굳이 한 번만 사용할 Component를 두개나 추가로 만들어서 사용하는 지 의문이 들거고..

InputDivComponent 하나만 작성하고, 아래와 같이 html을 작성할 수도 있다.

    loading...
    loading..


실제로 위와 같이 만들어서 돌려보면 loading...만 나올 것이다.

Angular2가 동작하는 매커니즘 상, 최초 초기화시에는 Component를 미리 선언하여 그대로 활용만 하는 것 같고,

HTML단에서 Component에 명시한 selector를 직접 활용하는 것은 별도의 설정 없이는 불가능하거나 Angular2 매커니즘상 허용하지 않는 것 같다.

반응형
,
반응형

Express의 경우 기본적으로 html view engine을 지원하지 않기 때문에,

html파일 로딩을 위해서는 file loading 후에 Content-Type을 변경하여 rendering해주어야 한다.

var fs = require('fs');
var path = require('path');
var express = require('express');
var app = express();

// npm으로 jquery나 angular등을 설치한 경우 node_modules에 들어있는 필요한 js, css 파일 등을 접근해야 하므로
// 아래 구문을 추가하여 direct로 접근할 수 있게끔 설정해준다.
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules'))); 

app.get('/get_html', function(req, res) {
    fs.readFile('static/test.html', function(err, data) {
        if(err) {
            console.log(err);
        } else {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(data);
        }
    });
});

반응형
,
반응형

Express설치는 매우 간단하기 때문에, 아래 링크를 참조해서 잘 깔면된다.

https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm


Express가 설치되었다는 가정하에, 아래 코드 몇 줄이면 application/json 으로 통신이 가능한 웹 서버를 띄울 수가 있다.

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.json());     // 이 부분이 Json Protocol을 지원하겠다는 의미

// POST API 등록
app.post('/test_json_api', function(req, res) {
    req.accepts('application/json');
    jsonBody = req.body;     // json parsing
    console.log(jsonBody);
});

// 8081 포트로 서버를 띄운다.
app.listen(8081, function() {
    console.log('server listening on port %s.', 8081);
});


반응형
,
반응형

간단한 서버에 DB연동 등을 하다보니, js파일이 무한정 길어지게 되어.. 지저분해서 찾아보게되었는데

module.exports라는 명령어를 사용하여, module형태로 만들어서 분리를 할 수가 있었다.


DB연동하는 부분이 길어졌으니, model.js라는 파일로 분리해서, 모듈을 만들어보았다.

아래처럼 module.exports.{함수명} 형태로 만들어주면 되며, 단순히 변수값을 return하는 경우에도 함수로 만들어줘야 하는 것 같다. (확실치 않음;;)

module.exports.Model1 = function() {
    var model = null;
    ...
    ...
    return model;
};


모듈을 만들었으니 사용법에 대해 알아보자.

방금 만들어준 파일을 require 구분으로 가져다 쓸 파일에 import 해준 뒤에, 함수를 호출해주면 된다.

require시에는 같은 경로에 파일이 있더라도 ./ 을 항상 넣어주는 것이 삽질을 줄일 수 있었던 것 같다.

var model = require(./model.js');
var model1 = model.Model1();
console.log(model1);


반응형
,

[PHP5] error logging

개발/PHP 2016. 12. 7. 10:13
반응형

기본적으로 php는 에러가 나도 브라우저나 console에 print를 하기 전까지는 제대로 리포팅을 안해주는것 같은데,

아래와 같은 명령어를 상단에 작성해놓으면, 확인이 가능하다.

    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    // mysqli 사용 시
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);


몇 라인에서 에러가 나고, 뭐때문에 에러가 났는지 알려주기 때문에, header파일로 만들어서 항상 include해두는 게 좋을 것 같다.


에러 범위라던지, 레벨에 대해서 detail하게 조절이 가능할 것 같긴한데..

간단한거 만들때만 php쓸거라서 굳이 거기까지는 알아보지 않는 것으로 마무리

반응형

'개발 > PHP' 카테고리의 다른 글

[PHP] mail function 호출 시 unable to qualify my own domain name  (0) 2016.11.28
[PHP5] ipv6 to number  (0) 2016.06.21
,
반응형

php로 mail전송 시 기본적으로 os에 설정되어 있는 /usr/sbin/sendmail 스크립트를 이용하여 호출한다.


전송이 잘 안되는 경우 해당 스크립트가 어떤 심볼릭 링크를 들고 있는지 1차로 확인한다.

php.ini에서 /usr/sbin/sendmail가 아닌 다른 스크립트를 사용하도록 조정 가능함.

$ ls -l /usr/sbin/sendmail


apt-get 으로 sendmail을 설치한 경우 /etc/alternatives/sendmail을 바라볼 것인데,

이 경우에도 전송이 안되는 경우 /var/log/mail.log, /var/log/mail.err를 참조한다.


에러 로그에 unable to qualify my own domain name 라는 에러가 발생하면서 로그 전송이 안되는 경우 /etc/hosts에 full domain 설정을 해주면 해결이 된다. (포맷만 맞추면 되는듯)


# /etc/hosts
127.0.0.1 domain.domain.net domain
127.0.0.1 localhost
반응형

'개발 > PHP' 카테고리의 다른 글

[PHP5] error logging  (0) 2016.12.07
[PHP5] ipv6 to number  (0) 2016.06.21
,
반응형

vagrant 특성상 기본적으로 VagrantFile이 위치한 디렉토리를 생성될 VM의 /vagrant 폴더로 Link 시키는 작업을 하는데,

Guest Addition이 제대로 설치되지 않은 image box의 경우는 공유폴더 설정하는 부분에서 에러가 발생하기 때문에,

vm을 생성하는 데 시간이 지연되게 된다.


이런 경우 기본적으로 Link 시키지 않도록 VagrantFile에서 아래와 같이 disable 처리를 해주면 된다.


Vagrant.configure(2) do |config|
    config.vm.synced_folder '.', '/vagrant', disabled: true
...
반응형
,
반응형