{"id":16844,"date":"2026-05-20T10:49:51","date_gmt":"2026-05-20T01:49:51","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=16844"},"modified":"2026-05-20T11:43:19","modified_gmt":"2026-05-20T02:43:19","slug":"deep-javascript","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=16844","title":{"rendered":"Deep JavaScript"},"content":{"rendered":"<h3>WeakRef\uc640 FinalizationRegistry (\uba54\ubaa8\ub9ac \uad00\ub9ac)<\/h3>\n<p>GC\uc5d0 \uc758\ud574 \uc218\uac70\ub418\ub294 \ub9ac\uc18c\uc2a4\uc5d0 \ub300\ud574 \uac1c\ubc1c\uc790\uac00 \ucc98\ub9ac\ud574\uc57c\ud560 \ub54c \uc54c\uc544\ub450\uba74 \uc88b\uc740 \ucf54\ub4dc\uc774\ub2e4. \ubc14\ub85c WeakRef\uc640 FinalizationRegistry\uc778\ub370 \uad00\ub828\ub41c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n\/\/ \ubb34\uac70\uc6b4 \ub370\uc774\ud130 \uac1d\uccb4\r\nlet bigData = { payload: new Array(1000000) };\r\n\r\n\/\/ \uc57d\ud55c \ucc38\uc870 \uc0dd\uc131\r\n\/\/ WeakRef: \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub418, \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc758 \ub300\uc0c1\uc774 \ub418\ub294 \uac83\uc744 \ub9c9\uc9c0 \uc54a\ub294 '\uc57d\ud55c \ucc38\uc870'\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \r\n\/\/ \uac1d\uccb4\uac00 \uba54\ubaa8\ub9ac\uc5d0\uc11c \ud574\uc81c\ub418\uba74 \ucc38\uc870\ub3c4 \uc790\ub3d9\uc73c\ub85c \ub04a\uae41\ub2c8\ub2e4.\r\nconst ref = new WeakRef(bigData);\r\n\r\n\/\/ \uc0ac\uc6a9\ucc98\uc5d0\uc11c \uaebc\ub0b4 \uc4f0\uae30\r\nconst derefData = ref.deref();\r\nif (derefData) {\r\n  console.log(\"\uc544\uc9c1 \uba54\ubaa8\ub9ac\uc5d0 \ub0a8\uc544\uc788\uc74c:\", derefData.payload);\r\n}\r\n\r\n\/\/ \ud2b9\uc815 \uac1d\uccb4\uac00 \uba54\ubaa8\ub9ac\uc5d0\uc11c \ud574\uc81c\ub420 \ub54c \uc815\ub9ac \uc791\uc5c5\uc744 \ud574\uc8fc\ub294 \ub808\uc9c0\uc2a4\ud2b8\ub9ac\r\n\/\/ FinalizationRegistry: \uac1d\uccb4\uac00 \uac00\ube44\uc9c0 \uceec\ub809\ud130\uc5d0 \uc758\ud574 \uba54\ubaa8\ub9ac\uc5d0\uc11c \uc644\uc804\ud788 \uc9c0\uc6cc\uc9c0\ub294 \uc2dc\uc810\uc5d0 \ud2b9\uc815 \ucf5c\ubc31 \ud568\uc218\ub97c \uc2e4\ud589\ud558\ub3c4\ub85d \ub4f1\ub85d\ud569\ub2c8\ub2e4.\r\nconst registry = new FinalizationRegistry((heldValue) => {\r\n  console.log(`${heldValue} \uac1d\uccb4\uac00 \uac00\ube44\uc9c0 \uceec\ub809\uc158\ub418\uc5c8\uc2b5\ub2c8\ub2e4.`);\r\n});\r\nregistry.register(bigData, \"\ubb34\uac70\uc6b4 \ub370\uc774\ud130\");\r\n\r\n\/\/ \ucc38\uc870\ub97c \ub04a\uc73c\uba74 \uac00\ube44\uc9c0 \uceec\ub809\ud130\uac00 \uc218\uac70\ud574\uac10\r\nbigData = null;\r\n<\/pre>\n<h3>\ucf54\ub4dc \uc2e4\ud589\uc744 \uc77c\uc815 \uc2dc\uac04 \ube14\ub85c\ud0b9\uc2dc\ud0a4\ub294 \ud568\uc218<\/h3>\n<p>Node \ud658\uacbd\uacfc \uc6f9\ube0c\ub77c\uc6b0\uc800 \ud658\uacbd\uc5d0 \ub530\ub77c \ub2e4\ub974\uae34 \ud55c\ub370 Node\uc5d0\uc11c\ub294 \ub2e4\uc74c \ubc29\ubc95\uc744 \ucd94\ucc9c\ud55c\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nfunction sleep(ms) {\r\n  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);\r\n}\r\n\r\nconsole.log(\"\uc2dc\uc791 - 1\");\r\nsleep(2000); \/\/ 2\ucd08 \ube14\ub85c\ud0b9\r\nconsole.log(\"2\ucd08 \ud6c4 - 1\");\r\n<\/pre>\n<p>\uc6f9 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \ub2e4\uc74c \ubc29\ubc95\uc744 \ucd94\ucc9c\ud558\uba70 Node\uc5d0\uc11c\ub3c4 \uac00\ub2a5\ud568.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nfunction sleepWebBrowser(ms) {\r\n  return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\nconsole.log(\"\uc2dc\uc791 - 2\");\r\nawait sleepWebBrowser(2000);\r\nconsole.log(\"2\ucd08 \ud6c4 - 2\");\r\n<\/pre>\n<h3>Object.groupBy() (\ub370\uc774\ud130 \uadf8\ub8f9\ud654 \uacf5\uc2dd \uc9c0\uc6d0)<\/h3>\n<p>\ubc30\uc5f4\uc758 \ub370\uc774\ud130\ub97c \ud2b9\uc815 \uae30\uc900\uc5d0 \ub530\ub77c \uac1d\uccb4\ub85c \ubb36\uc5b4\uc8fc\ub294 \uae30\ub2a5\uc785\ub2c8\ub2e4. \uacfc\uac70\uc5d0\ub294 reduce\ub97c \ubcf5\uc7a1\ud558\uac8c \uc4f0\uac70\ub098 \uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac(lodash \ub4f1)\ub97c \uc37c\uc5b4\uc57c \ud588\ub294\ub370, \uc774\uc81c \ub124\uc774\ud2f0\ube0c \ubb38\ubc95\uc73c\ub85c \uc9c0\uc6d0.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nconst inventory = [\r\n  { name: \"asparagus\", type: \"vegetables\", quantity: 5 },\r\n  { name: \"bananas\", type: \"fruit\", quantity: 0 },\r\n  { name: \"goat\", type: \"meat\", quantity: 23 },\r\n  { name: \"cherries\", type: \"fruit\", quantity: 5 },\r\n];\r\n\r\n\/\/ 'type' \uc18d\uc131\uc744 \uae30\uc900\uc73c\ub85c \uadf8\ub8f9\ud654\r\nconst result = Object.groupBy(inventory, ({ type }) => type);\r\n\r\n\/*\r\n\uacb0\uacfc:\r\n{\r\n  vegetables: [ \r\n    { name: \"asparagus\", type: \"vegetables\", ... } \r\n  ],\r\n  fruit: [ \r\n    { name: \"bananas\", ... }, \r\n    { name: \"cherries\", ... } \r\n  ],\r\n  meat: [ \r\n    { name: \"goat\", ... } \r\n  ]\r\n}\r\n*\/\r\n<\/pre>\n<h3>Proxy\uc640 Reflect (\uba54\ud0c0 \ud504\ub85c\uadf8\ub798\ubc0d)<\/h3>\n<p>\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\uc758 \uae30\ubcf8 \ub3d9\uc791(\uac1d\uccb4\uc758 \uc18d\uc131 \uc870\ud68c, \ud560\ub2f9, \uc5f4\uac70 \ub4f1)\uc744 \uac00\ub85c\ucc44\uc11c(Intercept) \uc0ac\uc6a9\uc790 \uc815\uc758 \ub3d9\uc791\uc744 \uc8fc\uc785\ud558\ub294 \uac15\ub825\ud55c \uae30\ub2a5\uc784. Vue 3 \uac19\uc740 \ubaa8\ub358 \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc0c1\ud0dc \ubcc0\ud654 \uac10\uc9c0(Reactivity) \uc2dc\uc2a4\ud15c\uc774 \ubc14\ub85c \uc774 Proxy\ub97c \uae30\ubc18\uc73c\ub85c \ub3d9\uc791\ud568.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nconst target = { message: \"hello\" };\r\n\r\nconst handler = {\r\n  \/\/ \uac1d\uccb4\uc758 \uc18d\uc131\uc744 \uc77d\uc73c\ub824\uace0 \ud560 \ub54c(get) \uac00\ub85c\ucc54\r\n  get(target, prop, receiver) {\r\n    console.log(`[\ub85c\uadf8] ${prop} \uc18d\uc131\uc5d0 \uc77d\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4.`);\r\n    return Reflect.get(...arguments); \/\/ \uc6d0\ub798 \ub3d9\uc791 \uc218\ud589\r\n  },\r\n  \/\/ \uac1d\uccb4\uc758 \uc18d\uc131\uc744 \ubc14\uafc0 \ub54c(set) \uac00\ub85c\ucc54\r\n  set(target, prop, value, receiver) {\r\n    console.log(`[\ub85c\uadf8] ${prop} \uc18d\uc131\uc5d0 \uc4f0\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4.`);\r\n\r\n    if (prop === 'age' && value < 0) {\r\n      throw new Error(\"\ub098\uc774\ub294 \uc74c\uc218\uac00 \ub420 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\");\r\n    }\r\n    return Reflect.set(...arguments);\r\n  }\r\n};\r\n\r\nconst proxy = new Proxy(target, handler);\r\nconsole.log(proxy.message); \/\/ [\ub85c\uadf8] message \uc18d\uc131\uc5d0 \uc77d\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4. -> \"hello\"\r\nproxy.message = \"\uc548\ub155\ud558\uc138\uc694.\" \/\/ [\ub85c\uadf8] message \uc18d\uc131\uc5d0 \uc4f0\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4. \r\nproxy.age = 10; \/\/ [\ub85c\uadf8] age \uc18d\uc131\uc5d0 \uc4f0\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4.\r\nproxy.age = -10; \/\/ [\ub85c\uadf8] age \uc18d\uc131\uc5d0 \uc4f0\uae30\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4. (Error: \ub098\uc774\ub294 \uc74c\uc218\uac00 \ub420 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.)\r\n<\/pre>\n<h3>\uad6c\uc870\uc801 \ubcf5\uc81c (Structured Clone)<\/h3>\n<p>\uac1d\uccb4\uc758 \uae4a\uc740 \ubcf5\uc0ac(Deep Copy)\ub97c \uc218\ud589\ud558\ub294 \ub0b4\uc7a5 API\uc784. \uacfc\uac70\uc5d0\ub294 JSON.parse(JSON.stringify(obj))\ub77c\ub294 \ud3b8\ubc95\uc744 \uc37c\uc9c0\ub9cc, \uc774 \ubc29\uc2dd\uc740 Date, RegExp, Map, Set \uac19\uc740 \ud2b9\uc218 \uac1d\uccb4\ub098 \uc21c\ud658 \ucc38\uc870\uac00 \uc788\uc73c\uba74 \uae68\uc9c0\ub294 \uce58\uba85\uc801\uc778 \ubb38\uc81c\uac00 \uc788\uc74c. structuredClone\uc740 \uc774\ub97c \uc644\ubcbd\ud558\uac8c \ubcf5\uc0ac\ud574 \uc90c.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nconst original = {\r\n  date: new Date(),\r\n  set: new Set([1, 2, 3]),\r\n  nested: { inner: \"value\" }\r\n};\r\n\r\n\/\/ \uc644\ubcbd\ud55c \uae4a\uc740 \ubcf5\uc0ac\r\nconst clone = structuredClone(original);\r\n\r\nconsole.log(clone.date instanceof Date); \/\/ true\r\nconsole.log(clone.nested === original.nested); \/\/ false (\ucc38\uc870\uac00 \ubd84\ub9ac\ub428, \uae4a\uc740 \ubcf5\uc0ac\ub85c \uac1d\uccb4\uc5d0 \ub300\ud55c \uc8fc\uc18c\uac12\uc774 \ub2e4\ub984)\r\n<\/pre>\n<h3>\uc0dd\uc131\uae30 (Generators)\uc640 \uc774\ud130\ub808\uc774\ud130<\/h3>\n<p>\ud568\uc218\uc758 \uc2e4\ud589\uc744 \uc911\uac04\uc5d0 \uba48\ucdc4\ub2e4\uac00(yield), \uc6d0\ud558\ub294 \uc2dc\uc810\uc5d0 \ub2e4\uc2dc \uc7ac\uac1c(next)\ud560 \uc218 \uc788\ub294 \ud2b9\uc218 \ud568\uc218. \ube44\ub3d9\uae30 \uc2a4\ud2b8\ub9bc\uc744 \uc81c\uc5b4\ud558\uac70\ub098, \uba54\ubaa8\ub9ac\ub97c \uc544\ub07c\uba74\uc11c \ub300\uc6a9\ub7c9\uc758 \ubb34\ud55c\ud55c \ub370\uc774\ud130\ub97c \uc21c\ucc28\uc801\uc73c\ub85c \ucc98\ub9ac\ud560 \ub54c \ub9e4\uc6b0 \uc720\uc6a9\ud558\uba70 \ud544\uc790\ub294 \uba54\uc778 \uc2a4\ub808\ub4dc\ub97c \uc5bc\ub9ac\uc9c0 \uc54a\uace0 \ub300\ub7c9\uc758 \ub370\uc774\ud130\ub97c \uc21c\ucc28\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\ub294 \uae30\ub2a5\uc5d0 \uc801\uc6a9\ud558\uae30\ub3c4 \ud568.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nfunction* idGenerator() {\r\n  let id = 1;\r\n  while (true) {\r\n    yield id++; \/\/ \uc5ec\uae30\uc11c \uc2e4\ud589\uc744 \uba48\ucd94\uace0 \uac12\uc744 \ubc18\ud658\r\n  }\r\n}\r\n\r\nconst gen = idGenerator();\r\nconsole.log(gen.next().value); \/\/ 1\r\nconsole.log(gen.next().value); \/\/ 2\r\nconsole.log(gen.next().value); \/\/ 3 (\ud544\uc694\ud560 \ub54c\ub9cc \uac12\uc744 \ubb34\ud55c\ud788 \uc0dd\uc131)\r\n<\/pre>\n<h3>\uba85\uc2dc\uc801 \uc790\uc6d0 \uad00\ub9ac (Explicit Resource Management &#8211; using)<\/h3>\n<p>\ucd5c\uadfc ECMAScript \uc2a4\ud399\uc5d0 \ucd94\uac00\ub418\uace0 \uc788\ub294 \ub9e4\uc6b0 \ud68d\uae30\uc801\uc778 \uae30\ub2a5. \ud30c\uc77c \ud578\ub4e4\ub7ec, \ub124\ud2b8\uc6cc\ud06c \uc18c\ucf13, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucee4\ub125\uc158, \ud639\uc740 \uadf8\ub798\ud53d \ucee8\ud14d\uc2a4\ud2b8\ucc98\ub7fc \uc0ac\uc6a9 \ud6c4 \ubc18\ub4dc\uc2dc \ub2eb\uc544\uc8fc\uc5b4\uc57c(close\/dispose) \ud558\ub294 \uc790\uc6d0\uc744 \ub2e4\ub8f0 \ub54c \uc500. try&#8230;finally\ub85c \uc77c\uc77c\uc774 \ub2eb\uc9c0 \uc54a\uc544\ub3c4, \ube14\ub85d\uc744 \ubc97\uc5b4\ub098\uba74 \uc790\ub3d9\uc73c\ub85c \uc790\uc6d0\uc774 \ud574\uc81c\ub428.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n\/\/ \uc790\uc6d0 \uc815\uc758 (Symbol.dispose \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574\uc57c \ud568)\r\nconst disposableResource = {\r\n  [Symbol.dispose]() {\r\n    console.log(\"\uc790\uc6d0\uc774 \uc790\ub3d9\uc73c\ub85c \ud574\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.\");\r\n  },\r\n  action() {\r\n    console.log(\"\uc791\uc5c5 \uc218\ud589 \uc911...\");\r\n  }\r\n};\r\n\r\n{\r\n  \/\/ using \ud0a4\uc6cc\ub4dc\ub85c \uc120\uc5b8\r\n  using res = disposableResource;\r\n  res.action();\r\n} \/\/ \uc774 \ube14\ub85d\uc744 \ub098\uac00\ub294 \uc21c\uac04 Symbol.dispose()\uac00 \uc790\ub3d9\uc73c\ub85c \ud638\ucd9c\ub428!\r\n<\/pre>\n<p>using\uc740 \ucd5c\uadfc\uc5d0 \ub3c4\uc785\ub41c \uc544\uc9c1\uc740 \uc2dc\ud5d8 \uc911\uc73c\ub85c \uc2e4\ud589\uc2dc \ub2e4\uc74c \uc635\uc158\uc774 \ud544\uc694\ud568. <code>node --js-explicit-resource-management <js-file><\/code><\/p>\n<h3>ArrayBuffer.prototype.resize() &#038; SharedArrayBuffer.prototype.grow()<\/h3>\n<p>\uba54\ubaa8\ub9ac \ubc84\ud37c\uc758 \ud06c\uae30\ub97c \uac00\ubcc0\uc801\uc73c\ub85c \uc870\uc808\ud560 \uc218 \uc788\ub294 \uae30\ub2a5. WebGL\/WebGPU\ub97c \ub2e4\ub8e8\uac70\ub098 \ud070 \ubc14\uc774\ub108\ub9ac \ub370\uc774\ud130\ub97c \uccad\ud06c(Chunk) \ub2e8\uc704\ub85c \uc77d\uc5b4 \ub4e4\uc77c \ub54c, \uc774\uc804\uc5d0\ub294 \ubc84\ud37c \ud06c\uae30\uac00 \ubaa8\uc790\ub77c\uba74 \ub354 \ud070 \ubc84\ud37c\ub97c \uc0c8\ub85c \ub9cc\ub4e4\uace0 \uae30\uc874 \ub370\uc774\ud130\ub97c \ud558\ub098\ud558\ub098 \ubcf5\uc0ac(ArrayBuffer.transfer)\ud574\uc57c \ud588\uc74c. \uc774\uc81c\ub294 \ub0b4\ubd80 \uba54\ubaa8\ub9ac \uc8fc\uc18c\ub97c \uc720\uc9c0\ud55c \ucc44\ub85c \ucd5c\ub300 \ud06c\uae30(maxByteLength) \ubc94\uc704 \ub0b4\uc5d0\uc11c \ubc84\ud37c\ub97c \ub3d9\uc801\uc73c\ub85c \ub298\ub9ac\uace0 \uc904\uc77c \uc218 \uc788\uc74c.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n\/\/ \ucd08\uae30 1MB, \ucd5c\ub300 10MB\uae4c\uc9c0 \ucee4\uc9c8 \uc218 \uc788\ub294 \ubc84\ud37c \uc120\uc5b8\r\nconst buffer = new ArrayBuffer(1024 * 1024, { maxByteLength: 10 * 1024 * 1024 });\r\n\r\nconsole.log(buffer.byteLength); \/\/ 1MB\r\n\r\n\/\/ \ubcf5\uc0ac \uc791\uc5c5 \uc5c6\uc774 \uc778\ub77c\uc778\uc73c\ub85c \uc989\uc2dc 2MB\ub85c \ud655\uc7a5\r\nbuffer.resize(2 * 1024 * 1024);\r\nconsole.log(buffer.byteLength); \/\/ 2MB\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>WeakRef\uc640 FinalizationRegistry (\uba54\ubaa8\ub9ac \uad00\ub9ac) GC\uc5d0 \uc758\ud574 \uc218\uac70\ub418\ub294 \ub9ac\uc18c\uc2a4\uc5d0 \ub300\ud574 \uac1c\ubc1c\uc790\uac00 \ucc98\ub9ac\ud574\uc57c\ud560 \ub54c \uc54c\uc544\ub450\uba74 \uc88b\uc740 \ucf54\ub4dc\uc774\ub2e4. \ubc14\ub85c WeakRef\uc640 FinalizationRegistry\uc778\ub370 \uad00\ub828\ub41c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. \/\/ \ubb34\uac70\uc6b4 \ub370\uc774\ud130 \uac1d\uccb4 let bigData = { payload: new Array(1000000) }; \/\/ \uc57d\ud55c \ucc38\uc870 \uc0dd\uc131 \/\/ WeakRef: \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub418, \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc758 \ub300\uc0c1\uc774 \ub418\ub294 \uac83\uc744 \ub9c9\uc9c0 \uc54a\ub294 &#8216;\uc57d\ud55c \ucc38\uc870&#8217;\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \/\/ \uac1d\uccb4\uac00 \uba54\ubaa8\ub9ac\uc5d0\uc11c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=16844\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep JavaScript&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[88,1],"tags":[],"class_list":["post-16844","post","type-post","status-publish","format-standard","hentry","category-javascript","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/16844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16844"}],"version-history":[{"count":4,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/16844\/revisions"}],"predecessor-version":[{"id":16850,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/16844\/revisions\/16850"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16844"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}