{"id":4051,"date":"2020-09-08T18:42:13","date_gmt":"2020-09-08T09:42:13","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=4051"},"modified":"2020-09-08T18:43:30","modified_gmt":"2020-09-08T09:43:30","slug":"open62541-browse","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/open62541-browse\/","title":{"rendered":"open62541 browse"},"content":{"rendered":"\n<p>open62541\uc774 OPC UA \uaddc\uaca9\uc5d0 \ub9de\ucdb0 browse \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud55c\ub2e4. OPC UA \ubb38\uc11c\uc5d0 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud558\ub294\uc9c0 \uc54c \uc218 \uc788\ub294\ub370, \uba64\ubc84\ub9cc \ubcfc \uc218 \uc788\ub2e4. \uc77c\ub2e8 \ub300\ucda9 \ud544\uc694\ud55c \uc2e4\ub9b0\ub354\ub97c \uad6c\uc131\ud588\ub2e4 \ud558\uc790. \uc0c1\uc6a9 PLC \uba54\uc774\ucee4\uac00 OPC UA \uae30\ub2a5\uc744 \uad6c\ud604\ud55c\ub2e4\uba74 \ub0b4\ubd80\uc5d0 server \uae30\ub2a5\uc73c\ub85c \ub123\uc744 \ub4ef \ud558\ub2e4. \uc9c0\uae08 \uad6c\ud560 \uc218 \uc5c6\uc73c\ub2c8, \ub300\ucda9 \ube44\uc2b7\ud558\uac8c \ub9cc\ub4e4\uace0 \uc2f6\ub2e4. \uc5ec\uae30\uc11c \ubb38\uc81c\ub97c \uc54c\uc558\ub2e4. \ud55c\ubc88 Variable\uc744 \ud560\ub2f9\ud558\uba74 \uc5b4\ub5bb\uac8c \ubc14\uafb8\uc9c0? callback\uc73c\ub85c \ubc14\uafc0 \uc218 \uc788\ub294\ub370, nodeId\ub97c \uc54c\uc544\uc57c \ud55c\ub2e4. nodeId\ub97c null\ub85c \uc124\uc815\ud558\uba74 server\uac00 \uc784\uc758\ub85c \ud560\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc544\ub798 \uadf8\ub9bc NodeID i=50235, Status Value\ub97c True\ub85c \ub9cc\ub4e4\uace0 \uc2f6\ub2e4. \uc5b4\ub5bb\uac8c??<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/09\/nodeId.png\" alt=\"\" class=\"wp-image-4054\" srcset=\"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/09\/nodeId.png 1600w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/09\/nodeId-768x432.png 768w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/09\/nodeId-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p>\uc774\ub7f4\ub54c browse\ub97c \uc0ac\uc6a9\ud55c\ub2e4.(\uc544\ub9c8\ub3c4..) sample\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\ub294\ub370, example \ub514\ub809\ud1a0\ub9ac tutorial_server_object.c\uc5d0 \uc788\ub2e4. \uac00\uc7a5 \uac04\ub2e8\ud55c \ubc29\ubc95\uc774 \uc544\ub798\uc640 \uac19\ub2e4. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#define TEST\n#ifdef TEST\n\n\t\/\/\ud14c\uc2a4\ud2b8\n\t\/\/\uac01 \uc124\ube44\uac12\uc744 \uc124\uc815\ud558\ub294 \ubd80\ubd84\n\tUA_Variant tmp_value;\n\tbool bitoff = 0;\n\tUA_Variant_setScalar(&amp;tmp_value, &amp;bitoff, &amp;UA_TYPES[UA_TYPES_BOOLEAN]);\n\tUA_NodeId tmpNodeId = UA_NODEID_STRING(1, \"Status\");\n\tUA_Server_writeValue(server, tmpNodeId, tmp_value);\n\n    \/* Find the NodeId of the status child variable *\/\n    UA_RelativePathElement rpe;\n    UA_RelativePathElement_init(&amp;rpe);\n    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);\n    rpe.isInverse = false;\n    rpe.includeSubtypes = true;\n    \/\/rpe.targetName = UA_QUALIFIEDNAME(1, \"Status\");\n\trpe.targetName = UA_QUALIFIEDNAME(1, \"latch\");\n\t\/\/rpe.targetName = UA_QUALIFIEDNAME(1, \"variable\");\n\n\n    UA_BrowsePath bp;\n    UA_BrowsePath_init(&amp;bp);\n\tUA_NodeId *nodeId  = UA_NodeId_new();\n\t*nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);\n\t\/\/UA_NodeId tmp = {0, UA_NODEIDTYPE_NUMERIC, {50238}};\n\t\/\/printf(\"\\nNode id is %d\\n\", tmp);\n\t\/\/UA_NodeId *nodeId = &tmp;\n    bp.startingNode = *nodeId;\n    bp.relativePath.elementsSize = 1;\n    bp.relativePath.elements = &rpe;\n\n    UA_BrowsePathResult bpr =\n        UA_Server_translateBrowsePathToNodeIds(server, &amp;bp);\n    if(bpr.statusCode != UA_STATUSCODE_GOOD ||\n       bpr.targetsSize &lt; 1)\n        return bpr.statusCode;\n\n\tUA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, \"found target is %d\", bpr.targets->targetId.nodeId.identifier.numeric);\n\t\/\/print\ub85c structure\ub97c \ucd9c\ub825\ud560 \uc218 \uc5c6\uc74c.\n\t\/\/printf(\"\\nnode id is %d\\n\", (UA_NodeId)bpr.targets->targetId.nodeId);\n    \/\/* Set the status value *\/\n    UA_Boolean status = true;\n    UA_Variant value;\n    UA_Variant_setScalar(&amp;value, &amp;status, &amp;UA_TYPES[UA_TYPES_BOOLEAN]);\n    UA_Server_writeValue(server, bpr.targets->targetId.nodeId, value);\n\t\/\/UA_Server_writeValue(server, tmp, value);\n    UA_BrowsePathResult_clear(&amp;bpr);\n#endif<\/pre>\n\n\n\n<p>\uc5ec\uae30\ub97c gdb\ub85c \ubcf4\uba74 \uc2dc\uc791 \uc704\uce58\ub97c \uc124\uc815, \uc54c\uace0 \uc788\ub294 \uc815\ubcf4\ub97c \uc785\ub825, \ub450 \uad6c\uc870\uccb4\ub97c \ube44\uad50\ud558\uc5ec \ucc3e\ub294\ub2e4. \ucc3e\uc73c\uba74 0\uc744 \ubc18\ud658\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">450\t    UA_RelativePathElement_init(&amp;rpe);\n(gdb) \n451\t    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);\n(gdb) \n452\t    rpe.isInverse = false;\n(gdb) \n453\t    rpe.includeSubtypes = true;\n(gdb) \n455\t\trpe.targetName = UA_QUALIFIEDNAME(1, \"latch\");\n(gdb) \n460\t    UA_BrowsePath_init(&amp;bp);\n(gdb) \n461\t\tUA_NodeId *nodeId  = UA_NodeId_new();\n(gdb) \n462\t\t*nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);\n(gdb) \n466\t    bp.startingNode = *nodeId;\n(gdb) \n467\t    bp.relativePath.elementsSize = 1;\n(gdb) \n468\t    bp.relativePath.elements = &rpe;\n(gdb) \n471\t        UA_Server_translateBrowsePathToNodeIds(server, &amp;bp);\n(gdb) \n472\t    if(bpr.statusCode != UA_STATUSCODE_GOOD ||\n(gdb) display rpe\n1: rpe = {referenceTypeId = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 47, string = {length = 47, \n        data = 0x136b4 &lt;main+692> \"b?K\\342\\003\"}, guid = {data1 = 47, data2 = 14004, data3 = 1, data4 = \"\\257\\362\\377\\276l\\362\\377\\276\"}, byteString = {\n        length = 47, data = 0x136b4 &lt;main+692> \"b?K\\342\\003\"}}}, isInverse = false, includeSubtypes = true, targetName = {namespaceIndex = 1, name = {\n      length = 5, data = 0x13bbc \"latch\"}}}\n(gdb) display bp\n2: bp = {startingNode = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 85, string = {length = 85, data = 0x52a48 \"\"}, \n      guid = {data1 = 85, data2 = 10824, data3 = 5, data4 = \"\\024\\361\\377\\276\\234\\016\\001\"}, byteString = {length = 85, data = 0x52a48 \"\"}}}, \n  relativePath = {elementsSize = 1, elements = 0xbefff26c}}\n(gdb) display bpr\n3: bpr = {statusCode = 0, targetsSize = 1, targets = 0x2c9c8}\n(gdb) display *bpr.targets\n4: *bpr.targets = {targetId = {nodeId = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 50234, string = {\n          length = 50234, data = 0x0}, guid = {data1 = 50234, data2 = 0, data3 = 0, data4 = \"\\000\\000\\000\\000\\000\\000\\000\"}, byteString = {length = 50234, \n          data = 0x0}}}, namespaceUri = {length = 0, data = 0x0}, serverIndex = 0}, remainingPathIndex = 4294967295}\n(gdb) n\n473\t       bpr.targetsSize &lt; 1)\n1: rpe = {referenceTypeId = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 47, string = {length = 47, \n        data = 0x136b4 &lt;main+692> \"b?K\\342\\003\"}, guid = {data1 = 47, data2 = 14004, data3 = 1, data4 = \"\\257\\362\\377\\276l\\362\\377\\276\"}, byteString = {\n        length = 47, data = 0x136b4 &lt;main+692> \"b?K\\342\\003\"}}}, isInverse = false, includeSubtypes = true, targetName = {namespaceIndex = 1, name = {\n      length = 5, data = 0x13bbc \"latch\"}}}\n2: bp = {startingNode = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 85, string = {length = 85, data = 0x52a48 \"\"}, \n      guid = {data1 = 85, data2 = 10824, data3 = 5, data4 = \"\\024\\361\\377\\276\\234\\016\\001\"}, byteString = {length = 85, data = 0x52a48 \"\"}}}, \n  relativePath = {elementsSize = 1, elements = 0xbefff26c}}\n3: bpr = {statusCode = 0, targetsSize = 1, targets = 0x2c9c8}\n4: *bpr.targets = {targetId = {nodeId = {namespaceIndex = 0, identifierType = UA_NODEIDTYPE_NUMERIC, identifier = {numeric = 50234, string = {\n          length = 50234, data = 0x0}, guid = {data1 = 50234, data2 = 0, data3 = 0, data4 = \"\\000\\000\\000\\000\\000\\000\\000\"}, byteString = {length = 50234, \n          data = 0x0}}}, namespaceUri = {length = 0, data = 0x0}, serverIndex = 0}, remainingPathIndex = 4294967295}\n<\/pre>\n\n\n\n<p>\uc5b4\ub514\uc5d0\uc11c \uc2dc\uc791\ud560 \uc9c0 \uc815\ud574\uc918\uc57c \ud55c\ub2e4. \uac00\uc7a5 \uc0c1\uc704\uc778 Object\uc5d0\uc11c \uc2dc\uc791\ud588\ub2e4. NodeId i=84\ub2e4. \uc774 \ubc88\ud638\ub3c4 \uc815\ud588\uc744 \uac83 \uac19\ub2e4. \ubb38\uc81c\ub294 \uc774 \uc124\uc815\uc774 \uc5b4\ub5bb\uac8c \ub418\uc5b4 \uc788\ub294\uc9c0 Objects \ubc14\ub85c \uc544\ub798 \ud56d\ubaa9\ub9cc \ucc3e\ub294\ub2e4. \uc704 \ubc29\uc2dd\uc73c\ub85c NodeId i=50234\uae4c\uc9c0\ub294 \ucc3e\uc558\ub2e4. \uadf8\ub7ec\ub098 Varible\uc774 \uc5c6\uc5b4 write\ub97c \ud558\ub354\ub77c\ub3c4 \ud6a8\uacfc \uc5c6\ub2e4. \ud558\uc704 \ud56d\ubaa9\uc778 1:Status, NodeId i=50235\ub97c \ucc3e\uc544\uc57c \ud588\ub2e4. \ud3b8\ubc95\uc73c\ub85c \uc2dc\uc791\uc810\uc744 50243\uc73c\ub85c \ub123\uc5b4 \uc92c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#define TEST\n#ifdef TEST\n\n\t\/\/\ud14c\uc2a4\ud2b8\n\t\/\/\uac01 \uc124\ube44\uac12\uc744 \uc124\uc815\ud558\ub294 \ubd80\ubd84\n\tUA_Variant tmp_value;\n\tbool bitoff = 0;\n\tUA_Variant_setScalar(&amp;tmp_value, &amp;bitoff, &amp;UA_TYPES[UA_TYPES_BOOLEAN]);\n\tUA_NodeId tmpNodeId = UA_NODEID_STRING(1, \"Status\");\n\tUA_Server_writeValue(server, tmpNodeId, tmp_value);\n\n    \/* Find the NodeId of the status child variable *\/\n    UA_RelativePathElement rpe;\n    UA_RelativePathElement_init(&amp;rpe);\n    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);\n    rpe.isInverse = false;\n    rpe.includeSubtypes = true;\n    \/\/rpe.targetName = UA_QUALIFIEDNAME(1, \"Status\");\n\trpe.targetName = UA_QUALIFIEDNAME(1, \"latch\");\n\t\/\/rpe.targetName = UA_QUALIFIEDNAME(1, \"variable\");\n\n\n    UA_BrowsePath bp;\n    UA_BrowsePath_init(&amp;bp);\n\tUA_NodeId *nodeId  = UA_NodeId_new();\n\t*nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);\n\t\/\/UA_NodeId tmp = {0, UA_NODEIDTYPE_NUMERIC, {50238}};\n\t\/\/printf(\"\\nNode id is %d\\n\", tmp);\n\t\/\/UA_NodeId *nodeId = &tmp;\n    bp.startingNode = *nodeId;\n    bp.relativePath.elementsSize = 1;\n    bp.relativePath.elements = &rpe;\n\n    UA_BrowsePathResult bpr =\n        UA_Server_translateBrowsePathToNodeIds(server, &amp;bp);\n    if(bpr.statusCode != UA_STATUSCODE_GOOD ||\n       bpr.targetsSize &lt; 1)\n        return bpr.statusCode;\n\n\tUA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, \"found target is %d\", bpr.targets->targetId.nodeId.identifier.numeric);\n\t\/\/print\ub85c structure\ub97c \ucd9c\ub825\ud560 \uc218 \uc5c6\uc74c.\n\t\/\/printf(\"\\nnode id is %d\\n\", (UA_NodeId)bpr.targets->targetId.nodeId);\n    \/\/* Set the status value *\/\n    UA_Boolean status = true;\n    UA_Variant value;\n    UA_Variant_setScalar(&amp;value, &amp;status, &amp;UA_TYPES[UA_TYPES_BOOLEAN]);\n    UA_Server_writeValue(server, bpr.targets->targetId.nodeId, value);\n\t\/\/UA_Server_writeValue(server, tmp, value);\n\n\t\/\/\ub2e4\uc2dc \uc544\ub798\ub85c \ub0b4\ub9bc.\n\tbp.startingNode = bpr.targets->targetId.nodeId;\n\trpe.targetName = UA_QUALIFIEDNAME(1, \"Status\");\n    UA_BrowsePathResult bpr2 =\n        UA_Server_translateBrowsePathToNodeIds(server, &amp;bp);\n    if(bpr2.statusCode != UA_STATUSCODE_GOOD ||\n       bpr2.targetsSize &lt; 1)\n        return bpr.statusCode;\n\n\tUA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, \"found target is %d\", bpr2.targets->targetId.nodeId.identifier.numeric);\n\tUA_Server_writeValue(server, bpr2.targets->targetId.nodeId, value);\n    UA_BrowsePathResult_clear(&amp;bpr);\n#endif\n<\/pre>\n\n\n\n<p>Variable\uc744 \uc81c\ub300\ub85c \uc218\uc815\ud55c\ub2e4. \uc774\uc81c rucursive browse\ub97c \uc5b4\ub5bb\uac8c \ud574\uc57c \ud558\ub294\uc9c0 \uc54c\uc544\uc57c\uaca0\ub2e4. \uc0bd\uc9c8\ud574\ub3c4 \ubcf4\ub78c\ucc28\ub2e4.\u3160\u3160<\/p>\n","protected":false},"excerpt":{"rendered":"<p>open62541\uc774 OPC UA \uaddc\uaca9\uc5d0 \ub9de\ucdb0 browse \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud55c\ub2e4. OPC UA \ubb38\uc11c\uc5d0 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud558\ub294\uc9c0 \uc54c \uc218 \uc788\ub294\ub370, \uba64\ubc84\ub9cc \ubcfc \uc218 \uc788\ub2e4. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[807,808,745,798],"class_list":["post-4051","post","type-post","status-publish","format-standard","hentry","category-12","tag-opcua","tag-open62541","tag-plc","tag-raspberry"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=4051"}],"version-history":[{"count":5,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4051\/revisions"}],"predecessor-version":[{"id":4057,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4051\/revisions\/4057"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=4051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=4051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=4051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}