전체 코드는 다음과 같습니다.
코드 11-4 Redis와 연동한 구매 관리 비즈니스 로직 전체 코드
예제 파일 : purchases.js
const mysql = require('mysql'); const conn = { host: 'localhost', user: 'micro', password: 'service', database: 'monolithic' }; const redis = require("redis").createClient(); // redis 모듈 로드 redis.on("error", function(err) { console.log("Redis Error " + err); }); /* * 구매 관리의 각 기능별로 분기 */ exports.onRequest = function(res, method, pathname, params, cb) { switch (method) { case "POST": return register(method, pathname, params, (response) => { process. nextTick(cb, res, response); }); case "GET": return inquiry(method, pathname, params, (response) => { process. nextTick(cb, res, response); }); default: return process.nextTick(cb, res, null); } } /** * 구매 기능 * @param method 메서드 * @param pathname URI * @param params 입력 파라미터 * @param cb 콜백 */ 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) => { // Redis에 상품 정보 조회 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(); }); } } /** * 구매 내역 조회 기능 * @param method 메서드 * @param pathname URI * @param params 입력 파라미터 * @param cb 콜백 */ function inquiry(method, pathname, params, cb) { var response = { key: params.key, errorcode: 0, errormessage: "success" }; if (params.userid == null) { response.errorcode = 1; response.errormessage = "Invalid Parameters"; cb(response); } else { var connection = mysql.createConnection(conn); connection.connect(); connection.query("select id, goodsid, date from purchases where userid = ?" , [params.userid] , (error, results, fields) => { if (error) { response.errorcode = 1; response.errormessage = error; } else { response.results = results; } cb(response); }); connection.end(); } }
이 장에서는 마이크로서비스의 공유 자원 이슈와 Redis를 활용해 공유 자원을 처리하는 방법을 알아보았습니다.