{"id":1603,"date":"2013-02-14T09:22:09","date_gmt":"2013-02-14T00:22:09","guid":{"rendered":"http:\/\/apollo89.com\/wordpress\/?p=1603"},"modified":"2013-07-11T17:50:48","modified_gmt":"2013-07-11T08:50:48","slug":"%ec%9b%b9%eb%a1%9c%ea%b7%b8%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ed%8e%98%ec%9d%b4%ec%a7%80-%ec%97%b0%ea%b4%80%eb%b6%84%ec%84%9d","status":"publish","type":"post","link":"https:\/\/apollo89.com\/wordpress\/?p=1603","title":{"rendered":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d<\/p>\n<p>0. \uac1c\uc694<br \/>\n\uc6f9\ub85c\uadf8\uc758 referer \uc815\ubcf4\ub97c \uc774\uc6a9\ud558\uc5ec \ud398\uc774\uc9c0\uac04\uc758 \uc5f0\uacb0\uad6c\uc870\ub97c \ud30c\uc545\ud558\uba74,<br \/>\n\ub808\uc774\uc9c0 \ub9c1\ud06c\ub97c \ub530\ub77c\uc6c0\uc9c1\uc774\uc9c0 \uc54a\uace0 \uc9c1\uc811 URL\uc5d0 \uc811\uadfc \ub610\ub294 \uc784\uc2dc \ud398\uc774\uc9c0 \ubc0f \ucde8\uc57d\ud55c \ud398\uc774\uc9c0\ub97c \ucc3e\uc744\uc218 \uc788\ub2e4 \ub294 \uac00\uc124\uc744 \uc138\uc6b0\uace0 \uc811\uadfc<\/p>\n<p>1. \uc6f9\ub85c\uadf8<br \/>\n\ub300\uc0c1 referer \uac00 \uc874\uc7ac\ud558\ub294 \uc6f9\ub85c\uadf8<\/p>\n<p>2. map reduce<br \/>\n\uc6f9\ub85c\uadf8\uc5d0\uc11c \ud544\uc694\ud55c \uc815\ubcf4\ub9cc \ucd9c\ub825<br \/>\n&#8211; \uc815\uc801\uc778 \ud398\uc774\uc9c0 \uc81c\uc678(.gif, .jpg, .png, .swf, .css, .js, .dwr, .htc, .flv, .xml)<br \/>\n&#8211; \uc678\ubd80 referer \ub294 \uc81c\uc678<br \/>\n&#8211; output \uc740 \uc544\ub798\uc640 \uac19\uc740 format<br \/>\nreferer|requesturi^status\tcnt<\/p>\n<p>input weblog<\/p>\n<pre class=\"lang:default decode:true \" >xxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/btn_byline.gif HTTP\/1.1\"\t200\t2931\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t410\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/pop_close.jpg HTTP\/1.1\"\t200\t1633\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t680\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/ico_arrow.gif HTTP\/1.1\"\t200\t57\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t450\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/include\/common\/calendar.jsp HTTP\/1.1\"\t200\t7584\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t4670\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/js\/counter\/counter.js HTTP\/1.1\"\t200\t6121\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t720\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/calendar\/calendar.js HTTP\/1.1\"\t200\t2073\t\"http:\/\/domain.com\/include\/common\/calendar.jsp\"\t\t\tHTTP\/1.1\t1350\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"POST \/info.do HTTP\/1.1\"\t200\t299\t\"http:\/\/domain.com\/info.do?cmd=main&amp;mid=84\"\t\t\tHTTP\/1.1\t97320\r\nxxx.xxx.xxx.xxx\t-\t-\t[01\/Feb\/2013:00:00:51 +0900]\t\"GET \/include\/common\/tags.js HTTP\/1.1\"\t404\t881\t\"http:\/\/domain.com\/include\/common\/calendar.jsp\"\t\t\tHTTP\/1.1\t3360<\/pre>\n<p>output<\/p>\n<pre class=\"lang:default decode:true \" >\/|\/index.jsp^200\t1150\r\n\/|\/index.jsp^500\t1\r\n\/|\/info.do^200\t4\r\n.\/index.jsp|\/combi.do^200\t2\r\n.\/index.jsp|\/notice.do^200\t1\r\n.\/info.do|\/notice.do^200\t1\r\n<\/pre>\n<p>3. python<br \/>\nmap reduce\uc758 \uacb0\uacfc output\uc744 d3\uc5d0\uc11c \uc0ac\uc6a9\ud560\uc218 \uc788\ub294 json \uc73c\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 \ud504\ub85c\uadf8\ub7a8<\/p>\n<pre class=\"lang:python decode:true \" >]$ cat page_link.py\r\n#!\/usr\/bin\/python\r\n\r\nimport sys, glob\r\nimport commands\r\nimport time\r\nfrom datetime import timedelta, date\r\nfrom os.path import *\r\n\r\n\r\ndef getYesterday():\r\n        d=date.today()\r\n        td=timedelta(days=-1)\r\n        yd=d+td\r\n        return yd.strftime(\"%Y%m%d\")\r\n\r\ndef writeLog(data) :\r\n        log_date = stxDate\r\n        log_file = \"\/page_link\/\" + log_date + \".log\"\r\n        fp = file(log_file, 'a+')\r\n        now = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime(time.time()))\r\n        comment = \"[\"+str(now)+\"] \"+str(data)+\"\\n\"\r\n        fp.write(comment)\r\n        fp.close()\r\n\r\ndef faile_check(fail):\r\n    if fail:\r\n        writeLog(\"Failed =&gt;\" + str(fail))\r\n        sys.exit(1)\r\n\r\ndef command(cmd):\r\n        writeLog(cmd)\r\n        fail, res = commands.getstatusoutput(cmd)\r\n        faile_check(fail)\r\n        return res\r\n\r\n\r\nstxDate = getYesterday()\r\ninputfile = sys.argv[1]\r\noutputfile = sys.argv[2]\r\n\r\n\r\n# hadoop file down\r\nif exists(\"\/page_link\/\"+stxDate):\r\n        cmd=\"rm -rf \/page_link\/\"+stxDate\r\n        command(cmd)\r\n        cmd=\"\/home\/hadoop\/hadoop\/bin\/hadoop fs -get \"+inputfile+\" \/page_link\/\"+stxDate\r\n        command(cmd)\r\nelse :\r\n        cmd=\"\/home\/hadoop\/hadoop\/bin\/hadoop fs -get \"+inputfile+\" \/page_link\/\"+stxDate\r\n        command(cmd)\r\n\r\n\r\n# get all file count\r\ncmd=\"wc -l \/page_link\/\"+stxDate+\" |awk '{print $1}'\"\r\ncnt = command(cmd)\r\ni = int(cnt)\r\n\r\n# log line process\r\nnodes = [];\r\nlinks = [];\r\nfo = open(\"\/page_link\/\"+stxDate,\"r\")\r\nwhile i &gt; 0 :\r\n        line = fo.readline().rstrip('\\n')\r\n        cols = line.split('\\t')\r\n        # cols : refer | request ^ status \\t 1\r\n        node = cols[0].split('|')\r\n        nodes.append(str(node[1]))\r\n        links.append(dict(source=str(node[0]), target=str(node[1])))\r\n        i-= 1\r\nfo.close();\r\n\r\n# unique node info\r\nnodes = list(set(nodes))\r\n\r\n\r\n#make node json format\r\nnodes2 = [];\r\njson = \"{ \\\"nodes\\\": [\";\r\nfor node in nodes :\r\n        if node.rfind(\"^\", 1) &gt; 0 :\r\n                url = node.rsplit(\"^\",1)[0].replace(\"\\\\\",\"\")\r\n                status = node.rsplit(\"^\",1)[1]\r\n                nodes2.append(url)\r\n                json = json + \"{\\\"name\\\":\\\"\"+ url +\"\\\", \\\"count\\\":3, \\\"group\\\":\\\"\"+status+\"\\\"},\"\r\n        else :\r\n                json = json + \"{\\\"name\\\":\\\"\"+ node +\"\\\", \\\"count\\\":3, \\\"group\\\":\\\"ref\\\"},\"\r\n\r\njson = json.rstrip(\",\") + \" ],\\n\\\"links\\\": [\";\r\n\r\n\r\n#make link json format\r\nfor link in links :\r\n        idx_target = nodes.index(link[\"target\"])\r\n        try :\r\n                idx_source = nodes2.index(link[\"source\"])\r\n        except :\r\n                idx_source = 0\r\n\r\n        json = json + \"{\\\"source\\\":\"+ str(idx_source) +\", \\\"target\\\":\"+str(idx_target)+\"},\"\r\n\r\njson = json.rstrip(\",\") + \" ] }\";\r\n\r\n#print(\"\/\/=================================\")\r\n#print(json)\r\n#print(\"\/\/=================================\")\r\n\r\n#make json file\r\njson_file = \"\/page_link\/\"+outputfile+\".json\"\r\nfp = file(json_file, 'w')\r\nfp.write(json)\r\nfp.close()\r\n<\/pre>\n<p>4. d3<br \/>\n\uc2dc\uac01\ud654 \ub3c4\uad6c\ub85c d3\ub97c \uc120\ud0dd\ud588\ub2e4. <a href=\"http:\/\/d3js.org\/\" title=\"http:\/\/d3js.org\/\" target=\"_blank\">http:\/\/d3js.org\/<\/a><br \/>\n<a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Gallery\" title=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Gallery\" target=\"_blank\">https:\/\/github.com\/mbostock\/d3\/wiki\/Gallery<\/a> \uc5ec\uae30\uc5d0 \uac00\uba74 \ub9ce\uc740 d3 \uc608\uc81c\uac00 \uc788\ub294\ub370,<br \/>\n\ub098\ub294 \ud2b9\ubcc4\ud788 Fisheye Distortion (<a href=\"http:\/\/bost.ocks.org\/mike\/fisheye\/\" title=\"http:\/\/bost.ocks.org\/mike\/fisheye\/\" target=\"_blank\">http:\/\/bost.ocks.org\/mike\/fisheye\/<\/a>) \ub97c \uc0ac\uc6a9\ud588\ub2e4.<br \/>\n\uc5ec\uae30\uc11c \uc5f0\uacb0 \uad6c\uc870\ub9cc \uc0ac\uc6a9\ud558\uace0 \uc2e4\uc81c \uc0d8\ud50c\uc758 Fisheye Distortion \uae30\ub2a5\uc740 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\ub2e4.<\/p>\n<p>Fisheye Distortion \uc608\uc81c\ub97c \uae30\ucd08\ub85c \uc218\uc815\ud55c \uc18c\uc2a4<\/p>\n<pre class=\"lang:js decode:true \" >&lt;!DOCTYPE html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"utf-8\"&gt;\r\n&lt;style&gt;\r\ntext {\r\n  font: 10px sans-serif;\r\n}\r\n\r\n.node {\r\n  stroke: #fff;\r\n  stroke-width: 1.5px;\r\n}\r\n\r\n.link {\r\n  stroke: #999;\r\n  stroke-opacity: .6;\r\n}\r\n\r\n.background {\r\n  fill: none;\r\n  pointer-events: all;\r\n}\r\n\r\n#chart1 {\r\n  width: 1000px;\r\n  height: 500px;\r\n  border: solid 1px #ccc;\r\n}\r\n\r\n#chart1 .node {\r\n  stroke: #fff;\r\n  stroke-width: 1.5px;\r\n}\r\n\r\n#chart1 .link {\r\n  stroke: #999;\r\n  stroke-opacity: .6;\r\n  stroke-width: 1.5px;\r\n}\r\n\r\n#chart1 .status {\r\n  stroke: #999;\r\n  stroke-opacity: .6;\r\n  stroke-width: 1.5px;\r\n}\r\n\r\ncircle.node.200{\r\n    fill:black;\r\n} \r\n\r\n&lt;\/style&gt;\r\n&lt;script src=\"\/lib\/d3.v2.min.js?2.9.4\"&gt;&lt;\/script&gt;\r\n&lt;script src=\"\/lib\/jquery-1.9.0.min.js\"&gt;&lt;\/script&gt;\r\n&lt;\/head&gt;\r\n\r\n&lt;body&gt;\r\n&lt;select id=\"date\"&gt;\r\n\t&lt;option value=\"20130131\"&gt;20130131&lt;\/option&gt;\r\n\t&lt;option value=\"20130201\"&gt;20130201&lt;\/option&gt;\r\n&lt;\/select&gt;\r\n&lt;select id=\"domain\"&gt;\r\n\t&lt;option value=\"www.aaa.com\"&gt;www.aaa.com&lt;\/option&gt;\r\n\t&lt;option value=\"www.bbb.co.kr\"&gt;www.bbb.co.kr&lt;\/option&gt;\r\n    &lt;option value=\"www.ccc.com\"&gt;www.ccc.com&lt;\/option&gt;\r\n&lt;\/select&gt;\r\n\r\n&lt;input type=\"button\" id=\"search\" name=\"search\" value=\"search\"\/&gt;\r\n&lt;div id=\"msg\"&gt;&lt;\/div&gt;\r\n\r\n&lt;p id=\"chart1\"&gt;&lt;\/p&gt;\r\n\r\n&lt;script&gt;\r\nvar width = 1000,\r\nheight = 500;\r\n\r\nvar color = d3.scale.category20();\r\n\r\nvar force = d3.layout.force()\r\n.charge(-20)\r\n.linkDistance(20)\r\n.size([width, height]);\r\n\r\n\r\nvar svg = d3.select(\"#chart1\").append(\"svg\")\r\n.attr(\"width\", width)\r\n.attr(\"height\", height);\r\n\r\nsvg.append(\"rect\")\r\n.attr(\"class\", \"background\")\r\n.attr(\"width\", width)\r\n.attr(\"height\", height);\r\n\r\n$(\"#msg\").text('select date and domain and search!');\r\n\r\nfunction draw(data) {\r\n    var n = data.nodes.length;\r\n\r\n    var domain=[];\r\n    data.nodes.forEach(function(d){\r\n           domain.push(d.group);\r\n    });\r\n    domain = domain.sort()\r\n    color.domain(domain); \r\n    var lengend_height = 22 * domain.unique().length;\r\n    var legend = d3.select(\"#chart1\").append(\"svg\").attr(\"class\", \"legend\").attr(\"width\", 100).attr(\"height\",lengend_height).attr(\"x\", width).attr(\"y\", height)\r\n    .selectAll(\"g\").data(color.domain()).enter().append(\"g\").attr(\"transform\", function(d, i) {\r\n        return \"translate(0,\" + i * 20 + \")\";\r\n    });\r\n    \r\n    legend.append(\"rect\").attr(\"width\", 18).attr(\"height\", 18).style(\"fill\", color);\r\n    \r\n    legend.append(\"text\").attr(\"x\", 24).attr(\"y\", 9).attr(\"dy\", \".35em\").text(function(d) {\r\n        return d;\r\n    });\r\n    \r\n    \r\n    force.nodes(data.nodes).links(data.links);\r\n\r\n    \/\/ Initialize the positions deterministically, for better results.\r\n    data.nodes.forEach(function(d, i) { d.x = d.y = width \/ n * i; });\r\n\r\n    \/\/ Run the layout a fixed number of times.\r\n    \/\/ The ideal number of times scales with graph complexity.\r\n    \/\/ Of course, don't run too long?you'll hang the page!\r\n    force.start();\r\n    for (var i = n; i &gt; 0; --i) force.tick();\r\n    force.stop();\r\n\r\n    \/\/ Center the nodes in the middle.\r\n    var ox = 0, oy = 0;\r\n    data.nodes.forEach(function(d) { ox += d.x, oy += d.y; });\r\n    ox = ox \/ n - width \/ 2, oy = oy \/ n - height \/ 2;\r\n    data.nodes.forEach(function(d) { d.x -= ox, d.y -= oy; });\r\n    \r\n    var link = svg.selectAll(\".link\")\r\n        .data(data.links)\r\n      .enter().append(\"line\")\r\n        .attr(\"class\", \"link\")\r\n        .attr(\"x1\", function(d) { return d.source.x; })\r\n        .attr(\"y1\", function(d) { return d.source.y; })\r\n        .attr(\"x2\", function(d) { return d.target.x; })\r\n        .attr(\"y2\", function(d) { return d.target.y; })\r\n        .style(\"stroke-width\", function(d) { return Math.sqrt(d.value); });\r\n\r\n    var node = svg.selectAll(\".node\")\r\n        .data(data.nodes)\r\n        .enter().append(\"circle\")\r\n        .attr(\"class\", \"node\")\r\n        .attr(\"cx\", function(d) { return d.x; })\r\n        .attr(\"cy\", function(d) { return d.y; })\r\n        .attr(\"r\", 3)\r\n        .style(\"fill\", function(d) {  return color(d.group); })\r\n        .call(force.drag);\r\n\r\n    node.append(\"title\")\r\n    .text(function(d) { return d.name; });\r\n}\r\n\r\n$(\"#search\").click(function(){\r\n    file = \"\/resource\/\"+$(\"#domain\").val() +\"_\"+$(\"#date\").val()+\".json\"\r\n    $(\"#msg\").text('');\r\n    \/\/alert(file);\r\n    d3.selectAll('.legend').remove();\r\n    d3.selectAll('.node').remove();\r\n    d3.selectAll('.link').remove();\r\n    \r\n    d3.json(file, draw);\r\n});\r\n\r\nArray.prototype.unique=function() {\r\n    var newArray=[], len=this.length;\r\n    label:for(var i=0; i&lt;len; i++) {\r\n      for(var j=0; j&lt;newArray.length; j++)\r\n        if(newArray[j]==this[i]) continue label;\r\n      newArray[newArray.length] = this[i];\r\n    }\r\n    return newArray;\r\n  }\r\n\r\n&lt;\/script&gt;\r\n\r\n&lt;\/body&gt;\r\n<\/pre>\n<p>\ub370\uc774\ud130\uc758 \ud3ec\ub9f7..<\/p>\n<pre class=\"lang:default decode:true \" >{\r\n    \"links\": [\r\n        {\r\n            \"source\": 0, \r\n            \"target\": 1\r\n        }, \r\n        {\r\n            \"source\": 0, \r\n            \"target\": 2\r\n        }, \r\n        {\r\n            \"source\": 1, \r\n            \"target\": 3\r\n        }, \r\n        {\r\n            \"source\": 1, \r\n            \"target\": 4\r\n        }, \r\n        {\r\n            \"source\": 1, \r\n            \"target\": 5\r\n        }, \r\n        {\r\n            \"source\": 2, \r\n            \"target\": 6\r\n        }, \r\n        {\r\n            \"source\": 2, \r\n            \"target\": 7\r\n        }\r\n    ], \r\n    \"nodes\": [\r\n        {\r\n            \"name\": \"\/\",\r\n            \"count\": 30\r\n        }, \r\n        {\r\n            \"name\": \"\/a.html\",\r\n            \"count\": 20\r\n        }, \r\n        {\r\n            \"name\": \"\/b.html\",\r\n            \"count\": 10\r\n        }, \r\n        {\r\n            \"name\": \"\/a\/a1.html\",\r\n            \"count\": 7\r\n        }, \r\n        {\r\n            \"name\": \"\/a\/a2.html\",\r\n            \"count\": 10\r\n        }, \r\n        {\r\n            \"name\": \"\/a\/a3.html\",\r\n            \"count\": 3\r\n        }, \r\n        {\r\n            \"name\": \"\/b\/b1.html\",\r\n            \"count\": 7\r\n        }, \r\n        {\r\n            \"name\": \"\/b\/b2.html\",\r\n            \"count\": 3\r\n        }\r\n    ]\r\n}<\/pre>\n<p>\uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\uc740 \ud615\ud0dc\ub85c \ub098\uc628\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d1.png\" alt=\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d1\" width=\"440\" height=\"334\" class=\"alignnone size-full wp-image-1604\" srcset=\"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d1.png 440w, https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d1-300x227.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d2.png\" alt=\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d2\" width=\"553\" height=\"461\" class=\"alignnone size-full wp-image-1605\" srcset=\"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d2.png 553w, https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d2-300x250.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d3.png\" alt=\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d3\" width=\"449\" height=\"424\" class=\"alignnone size-full wp-image-1606\" srcset=\"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d3.png 449w, https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d3-300x283.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d4.png\" alt=\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d4\" width=\"1258\" height=\"898\" class=\"alignnone size-full wp-image-1607\" srcset=\"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d4.png 1258w, https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d4-300x214.png 300w, https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/02\/\uc6f9\ub85c\uadf8\ub97c-\uc774\uc6a9\ud55c-\ud398\uc774\uc9c0-\uc5f0\uad00\ubd84\uc11d4-1024x730.png 1024w\" sizes=\"auto, (max-width: 1258px) 100vw, 1258px\" \/><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; \uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d 0. \uac1c\uc694 \uc6f9\ub85c\uadf8\uc758 referer \uc815\ubcf4\ub97c \uc774\uc6a9\ud558\uc5ec \ud398\uc774\uc9c0\uac04\uc758 \uc5f0\uacb0\uad6c\uc870\ub97c \ud30c\uc545\ud558\uba74, \ub808\uc774\uc9c0 \ub9c1\ud06c\ub97c \ub530\ub77c\uc6c0\uc9c1\uc774\uc9c0 \uc54a\uace0 \uc9c1\uc811 URL\uc5d0 \uc811\uadfc \ub610\ub294 \uc784\uc2dc \ud398\uc774\uc9c0 \ubc0f \ucde8\uc57d\ud55c \ud398\uc774\uc9c0\ub97c \ucc3e\uc744\uc218 \uc788\ub2e4 \ub294 \uac00\uc124\uc744 \uc138\uc6b0\uace0 \uc811\uadfc 1. \uc6f9\ub85c\uadf8 \ub300\uc0c1 referer \uac00 \uc874\uc7ac\ud558\ub294 \uc6f9\ub85c\uadf8 &hellip; <a href=\"https:\/\/apollo89.com\/wordpress\/?p=1603\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[660,600,663],"tags":[987,915,986,140,988,585],"class_list":["post-1603","post","type-post","status-publish","format-standard","hentry","category-bigdata-hadoop","category-javascript-html","category-python-","tag-d3","tag-mapreduce","tag-986","tag-python","tag-988","tag-hadoop"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/apollo89.com\/wordpress\/?p=1603\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com\" \/>\n<meta property=\"og:description\" content=\"&nbsp; \uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d 0. \uac1c\uc694 \uc6f9\ub85c\uadf8\uc758 referer \uc815\ubcf4\ub97c \uc774\uc6a9\ud558\uc5ec \ud398\uc774\uc9c0\uac04\uc758 \uc5f0\uacb0\uad6c\uc870\ub97c \ud30c\uc545\ud558\uba74, \ub808\uc774\uc9c0 \ub9c1\ud06c\ub97c \ub530\ub77c\uc6c0\uc9c1\uc774\uc9c0 \uc54a\uace0 \uc9c1\uc811 URL\uc5d0 \uc811\uadfc \ub610\ub294 \uc784\uc2dc \ud398\uc774\uc9c0 \ubc0f \ucde8\uc57d\ud55c \ud398\uc774\uc9c0\ub97c \ucc3e\uc744\uc218 \uc788\ub2e4 \ub294 \uac00\uc124\uc744 \uc138\uc6b0\uace0 \uc811\uadfc 1. \uc6f9\ub85c\uadf8 \ub300\uc0c1 referer \uac00 \uc874\uc7ac\ud558\ub294 \uc6f9\ub85c\uadf8 &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/apollo89.com\/wordpress\/?p=1603\" \/>\n<meta property=\"og:site_name\" content=\"Apollo89.com\" \/>\n<meta property=\"article:published_time\" content=\"2013-02-14T00:22:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-07-11T08:50:48+00:00\" \/>\n<meta name=\"author\" content=\"apollo89\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"apollo89\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603\"},\"author\":{\"name\":\"apollo89\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\"},\"headline\":\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d\",\"datePublished\":\"2013-02-14T00:22:09+00:00\",\"dateModified\":\"2013-07-11T08:50:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603\"},\"wordCount\":62,\"commentCount\":0,\"keywords\":[\"d3\",\"map\\\/reduce\",\"\uc6f9\ub85c\uadf8\",\"\ud30c\uc774\uc36c\",\"\ud398\uc774\uc9c0\uc5f0\uad00\ubd84\uc11d\",\"\ud558\ub461\"],\"articleSection\":[\"Bigdata\\\/Hadoop\",\"Javascript\\\/Html\",\"Python\\\/Ruby\\\/Perl\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603\",\"name\":\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#website\"},\"datePublished\":\"2013-02-14T00:22:09+00:00\",\"dateModified\":\"2013-07-11T08:50:48+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=1603#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\\\/\\\/apollo89.com\\\/wordpress\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/\",\"name\":\"Apollo89.com\",\"description\":\"\uc544\ud3f4\ub85c\uc528\uc758 \uc7a1\ub2e4\ud55c \uacbd\ud5d8\ub4e4..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\",\"name\":\"apollo89\",\"description\":\"\uc544\ud3f4\ub85c89 \uc785\ub2c8\ub2e4.\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/apollo89.com\/wordpress\/?p=1603","og_locale":"ko_KR","og_type":"article","og_title":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com","og_description":"&nbsp; \uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d 0. \uac1c\uc694 \uc6f9\ub85c\uadf8\uc758 referer \uc815\ubcf4\ub97c \uc774\uc6a9\ud558\uc5ec \ud398\uc774\uc9c0\uac04\uc758 \uc5f0\uacb0\uad6c\uc870\ub97c \ud30c\uc545\ud558\uba74, \ub808\uc774\uc9c0 \ub9c1\ud06c\ub97c \ub530\ub77c\uc6c0\uc9c1\uc774\uc9c0 \uc54a\uace0 \uc9c1\uc811 URL\uc5d0 \uc811\uadfc \ub610\ub294 \uc784\uc2dc \ud398\uc774\uc9c0 \ubc0f \ucde8\uc57d\ud55c \ud398\uc774\uc9c0\ub97c \ucc3e\uc744\uc218 \uc788\ub2e4 \ub294 \uac00\uc124\uc744 \uc138\uc6b0\uace0 \uc811\uadfc 1. \uc6f9\ub85c\uadf8 \ub300\uc0c1 referer \uac00 \uc874\uc7ac\ud558\ub294 \uc6f9\ub85c\uadf8 &hellip; Continue reading &rarr;","og_url":"https:\/\/apollo89.com\/wordpress\/?p=1603","og_site_name":"Apollo89.com","article_published_time":"2013-02-14T00:22:09+00:00","article_modified_time":"2013-07-11T08:50:48+00:00","author":"apollo89","twitter_card":"summary_large_image","twitter_misc":{"\uae00\uc4f4\uc774":"apollo89","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/apollo89.com\/wordpress\/?p=1603#article","isPartOf":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=1603"},"author":{"name":"apollo89","@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82"},"headline":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d","datePublished":"2013-02-14T00:22:09+00:00","dateModified":"2013-07-11T08:50:48+00:00","mainEntityOfPage":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=1603"},"wordCount":62,"commentCount":0,"keywords":["d3","map\/reduce","\uc6f9\ub85c\uadf8","\ud30c\uc774\uc36c","\ud398\uc774\uc9c0\uc5f0\uad00\ubd84\uc11d","\ud558\ub461"],"articleSection":["Bigdata\/Hadoop","Javascript\/Html","Python\/Ruby\/Perl"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/apollo89.com\/wordpress\/?p=1603#respond"]}]},{"@type":"WebPage","@id":"https:\/\/apollo89.com\/wordpress\/?p=1603","url":"https:\/\/apollo89.com\/wordpress\/?p=1603","name":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d - Apollo89.com","isPartOf":{"@id":"https:\/\/apollo89.com\/wordpress\/#website"},"datePublished":"2013-02-14T00:22:09+00:00","dateModified":"2013-07-11T08:50:48+00:00","author":{"@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82"},"breadcrumb":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=1603#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/apollo89.com\/wordpress\/?p=1603"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/apollo89.com\/wordpress\/?p=1603#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/apollo89.com\/wordpress"},{"@type":"ListItem","position":2,"name":"\uc6f9\ub85c\uadf8\ub97c \uc774\uc6a9\ud55c \ud398\uc774\uc9c0 \uc5f0\uad00\ubd84\uc11d"}]},{"@type":"WebSite","@id":"https:\/\/apollo89.com\/wordpress\/#website","url":"https:\/\/apollo89.com\/wordpress\/","name":"Apollo89.com","description":"\uc544\ud3f4\ub85c\uc528\uc758 \uc7a1\ub2e4\ud55c \uacbd\ud5d8\ub4e4..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/apollo89.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Person","@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82","name":"apollo89","description":"\uc544\ud3f4\ub85c89 \uc785\ub2c8\ub2e4.","url":"https:\/\/apollo89.com\/wordpress\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1603"}],"version-history":[{"count":0,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1603\/revisions"}],"wp:attachment":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}