더북(TheBook)

구매 관리 비즈니스 로직에서 구매 등록 API를 호출하면 기존에는 아무런 검증 없이 바로 데이터베이스에 저장했기에 삭제한 상품도 구매할 수 있었습니다. 상품 관리 비즈니스 로직에서 Redis에 저장한 정보를 이용해 유효한 상품인지 검증한 후 구매할 수 있도록 코드를 수정하겠습니다.

코드 11-3 구매 관리 Redis 연동

예제 파일 : purchases.js

const mysql = require('mysql');
const conn = {
    host: 'localhost',
    user: 'micro',
    password: 'service',
    database: 'monolithic'
};

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

redis.on("error", function(err) {                     // ➋ edis 에러 처리
    console.log("Redis Error " + err); });

......

function register(method, pathname, params, cb) {
    var response = {
        key: params.key,
        errorcode: 0,
        errormessage: "success"
    };

    if (params.userid == null || params.goodsid == null) {
        response.errorcode = 1;
        response.errormessage = "Invalid Parameters";
        cb(response);
    } else {
        redis.get(params.goodsid, (err, result) => {  // ➌ edis에 상품 정보 조회 
            if (err || result == null) {
                 response.errorcode = 1;
                 response.errormessage = "Redis failure";
                 cb(response);
            return;
        }

            var connection = mysql.createConnection(conn);
            connection.connect();
            connection.query("insert into purchases(userid, goodsid) values(? ,? )"
                , [params.userid, params.goodsid]
                , (error, results, fields) => {
                    if (error) {
                        response.errorcode = 1;
                        response.errormessage = error;
                    }
                    cb(response);
                });
            connection.end();
        });
    }
}

......

상품 관리와 유사한 패턴으로 redis 모듈을 로드하고 인스턴스를 생성()한 후 에러 처리를 합니다(). 상품 구매 정보를 데이터베이스에 저장하기 전 Redis에 상품 정보가 있는지 확인하고 상품 정보가 없으면 에러를 리턴합니다().

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