구매 관리 비즈니스 로직에서 구매 등록 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에 상품 정보가 있는지 확인하고 상품 정보가 없으면 에러를 리턴합니다().

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