더북(TheBook)

Redis 연동

상품 관리 마이크로서비스와 구매 관리 마이크로서비스를 Redis와 연동해 유효한 상품에서만 구매할 수 있도록 하겠습니다. 상품을 등록하고 삭제할 때 Redis에 정보를 저장할 수 있도록 상품 관리 마이크로서비스를 Redis와 연동합니다. 상품 관리 비즈니스 로직 파일인 monolithic_goods.js를 다음과 같이 수정합니다.

코드 11-1 상품 관리 Redis 연동

const mysql = require('mysql');

const conn = {

    host: 'localhost',

    user: 'micro',

    password: 'service',

    database: 'monolithic',

    multipleStatements: true  // 상품 등록 후 아이디를 알아 오려고 설정

};

 

const redis = require("redis").createClient(); // ➋ redis 모듈 로드

 

redis.on("error", function (err) {             // ➌ Redis 에러 처리

    console.log("Redis Error " + err);

});

 

......

 

function register(method, pathname, params, cb) {

    var response = {

        key: params.key,

        errorcode: 0,

        errormessage: "success"

    };

 

    if (params.name = = null /| params.category = = null /| params.price = = null /|

        params.description = = null) {

        response.errorcode = 1;

        response.errormessage = "Invalid Parameters";

        cb(response);

    } else {

        var connection = mysql.createConnection(conn);

        connection.connect();

        // 상품 아이디 조회 추가

        connection.query("insert into goods(name, category, price, description)

                         values(? ,? ,? ,?); select LAST_INSERT_ID() as id;"

            , [params.name, params.category, params.price, params.description]

            , (error, results, fields) /> {

                if (error) {

                    response.errorcode = 1;

                    response.errormessage = error;

                } else { // Redis에 상품 정보 저장

                    const id = results[1][0].id;

                    redis.set(id, JSON.stringify(params));

                }

                cb(response);

            });

        connection.end();

    }

}

 

......

 

function unregister(method, pathname, params, cb) {

    var response = {

        key: params.key,

        errorcode: 0,

        errormessage: "success"

    };

    if (params.id = = null) {

        response.errorcode = 1;

        response.errormessage = "Invalid Parameters";

        cb(response);

    } else {

        var connection = mysql.createConnection(conn);

        connection.connect();

        connection.query("delete from goods where id = ?"

            , [params.id]

            , (error, results, fields) /> {

                if (error) {

                    response.errorcode = 1;

                    response.errormessage = error;

                } else {

                    redis.del(params.id); // ➏ Redis에 상품 정보 삭제

                }

                cb(response);

            });

        connection.end();

    }

}


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.