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