{"id":2741,"date":"2026-10-24T09:46:41","date_gmt":"2026-10-24T09:46:41","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2741"},"modified":"2026-10-24T09:46:41","modified_gmt":"2026-10-24T09:46:41","slug":"react-native-%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ec%97%b0%eb%8f%99-%ec%83%81%ed%83%9c-%ea%b4%80%eb%a6%ac-%ec%9d%b8%ec%a6%9d-%ec%8b%a4%ec%8b%9c%ea%b0%84-%ed%86%b5%ec%8b%a0","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2741","title":{"rendered":"React Native \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\ub3d9 #\uc0c1\ud0dc \uad00\ub9ac, \uc778\uc99d, \uc2e4\uc2dc\uac04 \ud1b5\uc2e0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">React Native\ub294 JavaScript \ub610\ub294 TypeScript\ub97c \uc0ac\uc6a9\ud574 Android\uc640 iOS \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub2e4. React\uc758 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub378\uacfc Hooks\ub97c \uae30\ubc18\uc73c\ub85c \ud558\uba70, HTTP API\uc640 WebSocket\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc640 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc31\uc5d4\ub4dc\uc640 \uc5f0\ub3d9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ub2e8\uc21c\ud788 API\ub97c \ud638\ucd9c\ud558\ub294 \uac83\ub9cc\uc73c\ub85c \ucda9\ubd84\ud558\uc9c0 \uc54a\ub2e4. \uc778\uc99d \ud1a0\ud070\uc744 \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud558\uace0, \ub124\ud2b8\uc6cc\ud06c \ub2e8\uc808 \uc774\ud6c4 \uc5f0\uacb0\uc744 \ubcf5\uad6c\ud558\uba70, \uc11c\ubc84\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc0c1\ud0dc\ub97c \uc77c\uce58\uc2dc\ucf1c\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uc2e4\uc2dc\uac04 \uac8c\uc784 \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc694\uc18c\uac00 \uc911\uc694\ud558\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ucef4\ud3ec\ub10c\ud2b8\uc640 Hooks\ub97c \ud65c\uc6a9\ud55c \uc0c1\ud0dc \uad00\ub9ac<\/li>\n\n\n\n<li>HTTP API\ub97c \ud1b5\ud55c \ub370\uc774\ud130 \uc870\ud68c \ubc0f \ubcc0\uacbd<\/li>\n\n\n\n<li>JWT\uc640 Refresh Token\uc744 \uc774\uc6a9\ud55c \uc778\uc99d \uc720\uc9c0<\/li>\n\n\n\n<li>WebSocket \uae30\ubc18 \uc2e4\uc2dc\uac04 \ud1b5\uc2e0<\/li>\n\n\n\n<li>\ub124\ud2b8\uc6cc\ud06c \uc624\ub958\uc640 \ud0c0\uc784\uc544\uc6c3 \ucc98\ub9ac<\/li>\n\n\n\n<li>\uc5f0\uacb0 \ubcf5\uad6c \ubc0f \uc11c\ubc84 \uc0c1\ud0dc \ub3d9\uae30\ud654<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uae00\uc5d0\uc11c\ub294 React Native \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc5d0 \uc548\uc815\uc801\uc73c\ub85c \uc5f0\uacb0\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \uac1c\ub150\uacfc \uc124\uacc4 \ubc29\ubc95\uc744 \uc815\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">React \uae30\ubcf8<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ucef4\ud3ec\ub10c\ud2b8 \uad6c\uc870<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">React\ub294 UI\ub97c \ub3c5\ub9bd\uc801\uc778 \ucef4\ud3ec\ub10c\ud2b8\ub85c \ubd84\ub9ac\ud574 \uad6c\uc131\ud55c\ub2e4. \uac01 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud654\uba74\uc758 \ud2b9\uc815 \ubd80\ubd84\uc744 \ub2f4\ub2f9\ud558\uba70, \ud544\uc694\ud55c \ub370\uc774\ud130\uc640 \uc774\ubca4\ud2b8\ub97c \uc804\ub2ec\ubc1b\uc544 UI\ub97c \uad6c\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">React Native\uc5d0\uc11c\ub294 \uc6f9\uc758 HTML \uc694\uc18c \ub300\uc2e0 <code>View<\/code>, <code>Text<\/code>, <code>TextInput<\/code>, <code>Pressable<\/code> \ub4f1\uc758 \ub124\uc774\ud2f0\ube0c UI \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { View, Text, Pressable } from 'react-native';\n\ntype ProfileProps = {\n  nickname: string;\n  onLogout: () =&gt; void;\n};\n\nexport function ProfileScreen({\n  nickname,\n  onLogout,\n}: ProfileProps) {\n  return (\n    &lt;View&gt;\n      &lt;Text&gt;{nickname}&lt;\/Text&gt;\n\n      &lt;Pressable onPress={onLogout}&gt;\n        &lt;Text&gt;\ub85c\uadf8\uc544\uc6c3&lt;\/Text&gt;\n      &lt;\/Pressable&gt;\n    &lt;\/View&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc124\uacc4\ud560 \ub54c\ub294 \ud654\uba74 \ud45c\ud604\uacfc \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ubd84\ub9ac\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\ud654\uba74 \ucef4\ud3ec\ub10c\ud2b8:<\/strong> UI \ub80c\ub354\ub9c1\uacfc \uc0ac\uc6a9\uc790 \uc785\ub825 \ucc98\ub9ac<\/li>\n\n\n\n<li><strong>\ucee4\uc2a4\ud140 Hook:<\/strong> \uc778\uc99d \uc0c1\ud0dc, \uc5f0\uacb0 \uc0c1\ud0dc \ub4f1\uc758 \uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ub85c\uc9c1<\/li>\n\n\n\n<li><strong>API \ubaa8\ub4c8:<\/strong> HTTP \uc694\uccad\uacfc \uc751\ub2f5 \ucc98\ub9ac<\/li>\n\n\n\n<li><strong>\uc11c\ube44\uc2a4 \ubaa8\ub4c8:<\/strong> \uc778\uc99d \ubc0f WebSocket \uc5f0\uacb0 \uad00\ub9ac<\/li>\n\n\n\n<li><strong>\uc0c1\ud0dc \uc800\uc7a5\uc18c:<\/strong> \uc5ec\ub7ec \ud654\uba74\uc5d0\uc11c \uacf5\uc720\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc0c1\ud0dc \uad00\ub9ac<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud504\ub85c\ud544 \ud654\uba74\uc774 \uc9c1\uc811 \ud1a0\ud070 \uac31\uc2e0\uc774\ub098 WebSocket \uc7ac\uc5f0\uacb0\uc744 \ucc98\ub9ac\ud558\uba74 \ud654\uba74 \ucf54\ub4dc\uc640 \ud1b5\uc2e0 \ub85c\uc9c1\uc774 \uac15\ud558\uac8c \uacb0\ud569\ub41c\ub2e4. \uc774\ub7ec\ud55c \ub85c\uc9c1\uc744 \ubcc4\ub3c4 \ubaa8\ub4c8\ub85c \ubd84\ub9ac\ud558\uba74 \ud14c\uc2a4\ud2b8\uc640 \uc720\uc9c0\ubcf4\uc218\uac00 \uc26c\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hooks<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hooks\ub294 \ud568\uc218\ud615 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0c1\ud0dc\uc640 \uc0dd\uba85\uc8fc\uae30 \uad00\ub828 \ub3d9\uc791\uc744 \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\uc694 Hooks\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>useState<\/code>: \ucef4\ud3ec\ub10c\ud2b8 \ub0b4\ubd80 \uc0c1\ud0dc \uad00\ub9ac<\/li>\n\n\n\n<li><code>useEffect<\/code>: \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc\uc758 \ub3d9\uae30\ud654 \ubc0f \ubd80\uc218 \ud6a8\uacfc \ucc98\ub9ac<\/li>\n\n\n\n<li><code>useCallback<\/code>: \ud568\uc218 \ucc38\uc870\ub97c \uba54\ubaa8\uc774\uc81c\uc774\uc158<\/li>\n\n\n\n<li><code>useMemo<\/code>: \uacc4\uc0b0 \uacb0\uacfc\ub97c \uba54\ubaa8\uc774\uc81c\uc774\uc158<\/li>\n\n\n\n<li><code>useRef<\/code>: \ub80c\ub354\ub9c1 \uc0ac\uc774\uc5d0 \uc720\uc9c0\ub418\ub294 \uac12\uc744 \uc800\uc7a5<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Hooks\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub610\ub294 \ucee4\uc2a4\ud140 Hook\uc758 \ucd5c\uc0c1\uc704\uc5d0\uc11c \ud638\ucd9c\ud574\uc57c \ud55c\ub2e4. \uc870\uac74\ubb38\uc774\ub098 \ubc18\ubcf5\ubb38 \uc548\uc5d0\uc11c \ud638\ucd9c\ud558\uba74 Hooks\uc758 \ud638\ucd9c \uc21c\uc11c\uac00 \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">useState\uc640 useEffect<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>useState<\/code>\ub294 UI\uc5d0 \uc601\ud5a5\uc744 \uc8fc\ub294 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud55c\ub2e4. \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uba74 React\ub294 \ud544\uc694\ud55c \ud654\uba74\uc744 \ub2e4\uc2dc \ub80c\ub354\ub9c1\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { useState } from 'react';\nimport { Text, Pressable } from 'react-native';\n\nexport function Counter() {\n  const &#91;count, setCount] = useState(0);\n\n  return (\n    &lt;Pressable onPress={() =&gt; setCount(value =&gt; value + 1)}&gt;\n      &lt;Text&gt;Count: {count}&lt;\/Text&gt;\n    &lt;\/Pressable&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>useEffect<\/code>\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc640 \uc678\ubd80 \uc2dc\uc2a4\ud15c\uc744 \ub3d9\uae30\ud654\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4. \ub300\ud45c\uc801\uc778 \uc608\ub85c \uc774\ubca4\ud2b8 \uad6c\ub3c5, \ud0c0\uc774\uba38, \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0, \uc571 \uc0c1\ud0dc \ubcc0\uacbd \uac10\uc9c0 \ub4f1\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { useEffect } from 'react';\n\nuseEffect(() =&gt; {\n  const subscription = subscribeToMessages(message =&gt; {\n    console.log(message);\n  });\n\n  return () =&gt; {\n    subscription.unsubscribe();\n  };\n}, &#91;]);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Effect\uac00 \uc2e4\ud589\ub420 \ub54c \uba54\uc2dc\uc9c0 \uad6c\ub3c5\uc744 \uc2dc\uc791\ud558\uace0, \uc815\ub9ac \ub2e8\uacc4\uc5d0\uc11c \uad6c\ub3c5\uc744 \ud574\uc81c\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c WebSocket \uc5f0\uacb0\uc744 \uad6c\ud604\ud560 \ub54c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \ub2e4\uc2dc \ub80c\ub354\ub9c1\ub420 \ub54c\ub9c8\ub2e4 \ubd88\ud544\uc694\ud558\uac8c \uc5f0\uacb0\uc744 \uc0dd\uc131\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc8fc\uc758\ud574\uc57c \ud55c\ub2e4. \uc5f0\uacb0 \uc0dd\uc131\uacfc \uc885\ub8cc\ub294 Effect\uc758 \uc0dd\uba85\uc8fc\uae30\uc5d0 \ub9de\ucd94\uace0, \uc5f0\uacb0 \uc790\uccb4\ub97c \uad00\ub9ac\ud558\ub294 \ucc45\uc784\uc740 \ubcc4\ub3c4\uc758 \uc11c\ube44\uc2a4\ub85c \ubd84\ub9ac\ud558\ub294 \ud3b8\uc774 \uc801\uc808\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ub3d9\uae30 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \ub54c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc0ac\ub77c\uc9c4 \ub4a4\uc5d0\ub3c4 \uc791\uc5c5\uc774 \uc9c4\ud589\ub418\ub294 \uc0c1\ud669\uc744 \uace0\ub824\ud574\uc57c \ud55c\ub2e4. <code>AbortController<\/code>\ub098 \uad6c\ub3c5 \ud574\uc81c \ub4f1\uc758 \ubc29\ubc95\uc73c\ub85c \ubd88\ud544\uc694\ud55c \uc791\uc5c5\uc744 \ucde8\uc18c\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">useCallback\uacfc useMemo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>useCallback<\/code>\uc740 \ud568\uc218 \ucc38\uc870\ub97c \uc720\uc9c0\ud558\uace0, <code>useMemo<\/code>\ub294 \uacc4\uc0b0 \uacb0\uacfc\ub97c \uc7ac\uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const handleRefresh = useCallback(() =&gt; {\n  refreshProfile();\n}, &#91;refreshProfile]);\n\nconst sortedItems = useMemo(() =&gt; {\n  return &#91;...items].sort((a, b) =&gt; a.name.localeCompare(b.name));\n}, &#91;items]);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uae30\ub2a5\ub4e4\uc740 \ubaa8\ub4e0 \ud568\uc218\uc640 \uacc4\uc0b0\uc5d0 \ubb34\uc870\uac74 \uc801\uc6a9\ud574\uc57c \ud558\ub294 \ucd5c\uc801\ud654 \ub3c4\uad6c\uac00 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubd88\ud544\uc694\ud558\uac8c \uc0ac\uc6a9\ud558\uba74 \ucf54\ub4dc \ubcf5\uc7a1\ub3c4\uc640 \uc758\uc874\uc131 \uad00\ub9ac \ube44\uc6a9\uc774 \uc99d\uac00\ud55c\ub2e4. \uc2e4\uc81c\ub85c \uc790\uc2dd \ucef4\ud3ec\ub10c\ud2b8\uc758 \ubd88\ud544\uc694\ud55c \ub80c\ub354\ub9c1\uc774 \ubc1c\uc0dd\ud558\uac70\ub098 \uacc4\uc0b0 \ube44\uc6a9\uc774 \ud070 \uacbd\uc6b0\uc5d0 \uc801\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ubc31\uc5d4\ub4dc \ud1b5\uc2e0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP API \ud638\ucd9c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">React Native \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 HTTP API\ub97c \ud1b5\ud574 \ub85c\uadf8\uc778, \ud504\ub85c\ud544 \uc870\ud68c, \uac8c\uc784 \uae30\ub85d \uc800\uc7a5, \ub9e4\uce6d \uc694\uccad \ub4f1\uc758 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>fetch<\/code>\ub97c \uc0ac\uc6a9\ud558\uba74 \ubcc4\ub3c4\uc758 HTTP \ud074\ub77c\uc774\uc5b8\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc5c6\uc774 \uc694\uccad\uc744 \ubcf4\ub0bc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function getProfile(accessToken: string) {\n  const response = await fetch(\n    'https:\/\/api.example.com\/profile',\n    {\n      method: 'GET',\n      headers: {\n        Authorization: `Bearer ${accessToken}`,\n        Accept: 'application\/json',\n      },\n    },\n  );\n\n  if (!response.ok) {\n    throw new Error(`HTTP error: ${response.status}`);\n  }\n\n  return response.json();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP \uc751\ub2f5\uc774 <code>404<\/code>\ub098 <code>500<\/code> \ub4f1\uc758 \uc0c1\ud0dc \ucf54\ub4dc\ub97c \ubc18\ud658\ud558\ub354\ub77c\ub3c4 <code>fetch<\/code>\uac00 \uc790\ub3d9\uc73c\ub85c \uc608\uc678\ub97c \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \ub530\ub77c\uc11c <code>response.ok<\/code> \ub610\ub294 <code>response.status<\/code>\ub97c \uc9c1\uc811 \uac80\uc0ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\ud56d\ub3c4 \ucc98\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0 \uc2e4\ud328<\/li>\n\n\n\n<li>\uc694\uccad \ud0c0\uc784\uc544\uc6c3<\/li>\n\n\n\n<li>\uc778\uc99d \ub9cc\ub8cc<\/li>\n\n\n\n<li>\uc11c\ubc84 \uc624\ub958<\/li>\n\n\n\n<li>\uc751\ub2f5 \ub370\uc774\ud130 \uac80\uc99d<\/li>\n\n\n\n<li>\uc694\uccad \ucde8\uc18c<\/li>\n\n\n\n<li>\uc911\ubcf5 \uc694\uccad \ubc29\uc9c0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uacb0\uc81c, \ud3ec\uc778\ud2b8 \uc815\uc0b0, \uacbd\uae30 \uacb0\uacfc \uc800\uc7a5\ucc98\ub7fc \uc911\ubcf5 \uc2e4\ud589 \uc2dc \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\ub294 \uc791\uc5c5\uc740 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc7ac\uc2dc\ub3c4\ub9cc\uc73c\ub85c \ud574\uacb0\ud560 \uc218 \uc5c6\ub2e4. \uc11c\ubc84\uc5d0\uc11c \uba71\ub4f1\uc131 \ud0a4\ub098 \ud2b8\ub79c\uc7ad\uc158 \ub4f1\uc758 \ubc29\ubc95\uc73c\ub85c \uc911\ubcf5 \ucc98\ub9ac\ub97c \ubc29\uc9c0\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JWT \uc804\ub2ec \ubc0f \uac31\uc2e0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">JWT\ub294 \uc11c\ubc84\uac00 \ubc1c\uae09\ud558\ub294 \ud1a0\ud070 \ud615\uc2dd\uc73c\ub85c, \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc778\uc99d\ub41c \uc694\uccad\uc744 \ubcf4\ub0bc \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \uc778\uc99d \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc0ac\uc6a9\uc790\uac00 \ub85c\uadf8\uc778 \uc815\ubcf4\ub97c \uc804\uc1a1\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ubc84\uac00 Access Token\uacfc Refresh Token\uc744 \ubc1c\uae09\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 Access Token\uc744 API \uc694\uccad\uc5d0 \ud3ec\ud568\ud55c\ub2e4.<\/li>\n\n\n\n<li>Access Token\uc774 \ub9cc\ub8cc\ub418\uba74 Refresh Token\uc73c\ub85c \uac31\uc2e0\uc744 \uc694\uccad\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ubc84\uac00 \ud1a0\ud070\uc744 \uac80\uc99d\ud558\uace0 \uc0c8\ub85c\uc6b4 \ud1a0\ud070\uc744 \ubc1c\uae09\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Access Token\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \uc9e7\uc740 \ub9cc\ub8cc \uc2dc\uac04\uc744 \uc124\uc815\ud558\uace0, Refresh Token\uc740 \uc0c8\ub85c\uc6b4 Access Token\uc744 \ubc1c\uae09\ubc1b\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud1a0\ud070 \uac31\uc2e0 \uacfc\uc815\uc5d0\uc11c\ub294 \uc5ec\ub7ec API \uc694\uccad\uc774 \ub3d9\uc2dc\uc5d0 \uc778\uc99d \ub9cc\ub8cc \uc624\ub958\ub97c \ubc18\ud658\ud558\ub294 \uc0c1\ud669\uc744 \uace0\ub824\ud574\uc57c \ud55c\ub2e4. \uac01 \uc694\uccad\uc774 \uac1c\ubcc4\uc801\uc73c\ub85c \ud1a0\ud070 \uac31\uc2e0\uc744 \uc2dc\uc791\ud558\uba74 Refresh Token\uc774 \uc911\ubcf5 \uc0ac\uc6a9\ub418\uac70\ub098 \uac31\uc2e0 \uc694\uccad\uc774 \ucda9\ub3cc\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c \ubc29\uc9c0\ud558\ub824\uba74 \ud1a0\ud070 \uac31\uc2e0 \uc791\uc5c5\uc744 \ud558\ub098\ub85c \ud1b5\ud569\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let refreshPromise: Promise&lt;string&gt; | null = null;\n\nasync function getRefreshedToken(): Promise&lt;string&gt; {\n  if (!refreshPromise) {\n    refreshPromise = refreshAccessToken()\n      .finally(() =&gt; {\n        refreshPromise = null;\n      });\n  }\n\n  return refreshPromise;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \uc694\uccad\uc774 \ub3d9\uc2dc\uc5d0 \ud1a0\ud070 \uac31\uc2e0\uc744 \uc694\uad6c\ud558\ub354\ub77c\ub3c4 \uac19\uc740 Promise\ub97c \uae30\ub2e4\ub9ac\uac8c \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uad6c\ud604\uc5d0\uc11c\ub294 \uac31\uc2e0\ub41c \ud1a0\ud070\uc744 \uc548\uc804\ud558\uac8c \uc800\uc7a5\ud558\uace0, \uc2e4\ud328\ud55c \uc694\uccad\uc744 \uc81c\ud55c\uc801\uc73c\ub85c \uc7ac\uc2dc\ub3c4\ud558\uba70, Refresh Token\uae4c\uc9c0 \ub9cc\ub8cc\ub418\uac70\ub098 \ud3d0\uae30\ub41c \uacbd\uc6b0 \ub85c\uadf8\uc544\uc6c3 \uc0c1\ud0dc\ub85c \uc804\ud658\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \ubaa8\ub4e0 <code>401 Unauthorized<\/code> \uc751\ub2f5\uc774 Access Token \ub9cc\ub8cc\ub97c \uc758\ubbf8\ud558\uc9c0\ub294 \uc54a\ub294\ub2e4. \uc11c\ubc84\uac00 \uc815\uc758\ud55c \uc624\ub958 \ucf54\ub4dc\uc640 \uc778\uc99d \uc815\ucc45\uc744 \uae30\uc900\uc73c\ub85c \uac31\uc2e0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Refresh Token \uc548\uc804\ud55c \uc800\uc7a5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">React Native\uc5d0\uc11c\ub294 \uc6f9 \ube0c\ub77c\uc6b0\uc800\uc758 <code>localStorage<\/code>\ub97c \ub124\uc774\ud2f0\ube0c \ubcf4\uc548 \uc800\uc7a5\uc18c\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\uace0 \uac00\uc815\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh Token\uc740 \uacf5\uaca9\uc790\uac00 \ud68d\ub4dd\ud558\uba74 \uacc4\uc815 \ud0c8\ucde8\ub85c \uc774\uc5b4\uc9c8 \uc218 \uc788\ub294 \ubbfc\uac10\ud55c \uc815\ubcf4\ub2e4. \ub530\ub77c\uc11c \uc77c\ubc18\uc801\uc778 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uc815\uac12\uacfc \ub2e4\ub974\uac8c \ucde8\uae09\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad8c\uc7a5\ub418\ub294 \uc811\uadfc \ubc29\uc2dd\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>iOS:<\/strong> Keychain \uae30\ubc18 \ubcf4\uc548 \uc800\uc7a5\uc18c \uc0ac\uc6a9<\/li>\n\n\n\n<li><strong>Android:<\/strong> Android Keystore\ub97c \ud65c\uc6a9\ud558\ub294 \ubcf4\uc548 \uc800\uc7a5\uc18c \uc0ac\uc6a9<\/li>\n\n\n\n<li><strong>\uc77c\ubc18 \uc124\uc815\uac12:<\/strong> \ubbfc\uac10\ud558\uc9c0 \uc54a\uc740 \ub370\uc774\ud130\uc5d0 \ud55c\ud574 AsyncStorage \uc0ac\uc6a9<\/li>\n\n\n\n<li><strong>\ub85c\uadf8:<\/strong> Access Token\uacfc Refresh Token\uc744 \uae30\ub85d\ud558\uc9c0 \uc54a\uc74c<\/li>\n\n\n\n<li><strong>\ub85c\uadf8\uc544\uc6c3:<\/strong> \uc800\uc7a5\ub41c \ud1a0\ud070 \uc0ad\uc81c \ubc0f \uc11c\ubc84 \uce21 \ud1a0\ud070 \ud3d0\uae30 \uc815\ucc45 \uc801\uc6a9<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">React Native\uc5d0\uc11c\ub294 Expo SecureStore\ub098 \uc801\uc808\ud55c \ub124\uc774\ud2f0\ube0c \ubcf4\uc548 \uc800\uc7a5\uc18c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc2e4\uc81c \ubcf4\uc548 \uc218\uc900\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uad6c\ud604, \uc6b4\uc601\uccb4\uc81c \uc124\uc815, \ubc31\uc5c5 \uc815\ucc45 \ubc0f \uae30\uae30 \ubcf4\uc548 \uc0c1\ud0dc\uc5d0 \uc601\ud5a5\uc744 \ubc1b\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Access Token\ub3c4 \ubbfc\uac10\ud55c \uc778\uc99d \uc815\ubcf4\uc774\ubbc0\ub85c \ubd88\ud544\uc694\ud558\uac8c \ub178\ucd9c\ud558\uc9c0 \uc54a\ub294 \uac83\uc774 \uc88b\ub2e4. \uc571\uc774 \uc2e4\ud589 \uc911\uc77c \ub54c \uba54\ubaa8\ub9ac\uc5d0 \ubcf4\uad00\ud558\ub294 \ubc29\uc2dd\uc740 \ud1a0\ud070\uc744 \ud3c9\ubb38\uc73c\ub85c \uc7a5\uae30\uac04 \uc800\uc7a5\ud558\ub294 \ubc29\uc2dd\ubcf4\ub2e4 \uc801\uc808\ud560 \uc218 \uc788\uc9c0\ub9cc, \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub9cc\uc73c\ub85c \ud1a0\ud070 \ud0c8\ucde8 \uc704\ud5d8\uc774 \uc644\uc804\ud788 \uc0ac\ub77c\uc9c0\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh Token Rotation\uc744 \uc801\uc6a9\ud558\uba74 \uac31\uc2e0\ud560 \ub54c\ub9c8\ub2e4 \uc0c8\ub85c\uc6b4 Refresh Token\uc744 \ubc1c\uae09\ud558\uace0 \uc774\uc804 \ud1a0\ud070\uc744 \ud3d0\uae30\ud560 \uc218 \uc788\ub2e4. \uc774 \uacbd\uc6b0 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc0c8 \ud1a0\ud070\uc744 \uc548\uc804\ud558\uac8c \uc800\uc7a5\ud574\uc57c \ud558\uba70, \uac31\uc2e0 \ub3c4\uc911 \uc571\uc774 \uc885\ub8cc\ub418\uac70\ub098 \uc694\uccad\uc774 \uc911\ubcf5 \uc2e4\ud589\ub418\ub294 \uc0c1\ud669\ub3c4 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WebSocket \uc5f0\uacb0 \ubc0f \uc7ac\uc5f0\uacb0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WebSocket\uc740 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84\uac00 \uc9c0\uc18d\uc801\uc778 \uc5f0\uacb0\uc744 \uc720\uc9c0\ud558\uba74\uc11c \uc591\ubc29\ud5a5\uc73c\ub85c \uba54\uc2dc\uc9c0\ub97c \uc8fc\uace0\ubc1b\ub294 \ud1b5\uc2e0 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uac8c\uc784 \uc11c\ubc84\uc5d0\uc11c\ub294 \ub9e4\uce6d \uc0c1\ud0dc, \ubc29 \ucc38\uac00, \uac8c\uc784 \uc774\ubca4\ud2b8, \ucc44\ud305, \ud50c\ub808\uc774\uc5b4 \uc0c1\ud0dc \ubcc0\uacbd \ub4f1\uc758 \uae30\ub2a5\uc5d0 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const socket = new WebSocket(\n  'wss:\/\/api.example.com\/realtime',\n);\n\nsocket.onopen = () =&gt; {\n  console.log('WebSocket connected');\n};\n\nsocket.onmessage = event =&gt; {\n  const message = JSON.parse(event.data);\n  console.log(message);\n};\n\nsocket.onerror = error =&gt; {\n  console.error('WebSocket error', error);\n};\n\nsocket.onclose = () =&gt; {\n  console.log('WebSocket disconnected');\n};<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ucf54\ub4dc\ub294 \uae30\ubcf8\uc801\uc778 \uc774\ubca4\ud2b8 \ucc98\ub9ac\ub97c \ubcf4\uc5ec\uc8fc\ub294 \uc608\uc81c\ub2e4. \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c\ub294 \uc5f0\uacb0 \uc0dd\uc131\ubfd0 \uc544\ub2c8\ub77c \uc778\uc99d, \uba54\uc2dc\uc9c0 \uac80\uc99d, \uc7ac\uc5f0\uacb0, \uc5f0\uacb0 \uc885\ub8cc, \ud0c0\uc784\uc544\uc6c3 \ub4f1\uc744 \ud568\uaed8 \uc124\uacc4\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WebSocket \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c0\ub294 \uc6d0\uc778\uc740 \ub2e4\uc591\ud558\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc0ac\uc6a9\uc790\uc758 \ub124\ud2b8\uc6cc\ud06c \uc804\ud658<\/li>\n\n\n\n<li>Wi-Fi \ub610\ub294 \ubaa8\ubc14\uc77c \ub370\uc774\ud130 \uc5f0\uacb0 \ub2e8\uc808<\/li>\n\n\n\n<li>\uc11c\ubc84 \ubc30\ud3ec \ubc0f \uc7ac\uc2dc\uc791<\/li>\n\n\n\n<li>\ub85c\ub4dc \ubc38\ub7f0\uc11c\uc758 \uc720\ud734 \uc5f0\uacb0 \uc81c\ud55c<\/li>\n\n\n\n<li>\uc778\uc99d \ub9cc\ub8cc<\/li>\n\n\n\n<li>\ubaa8\ubc14\uc77c \uc571\uc758 \ubc31\uadf8\ub77c\uc6b4\ub4dc \uc804\ud658<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc7ac\uc5f0\uacb0\uc5d0\ub294 \uc9c0\uc218 \ubc31\uc624\ud504\uc640 \ubb34\uc791\uc704 \uc9c0\uc5f0\uc744 \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc5f0\uacb0\uc774 \ubc18\ubcf5\ud574\uc11c \uc2e4\ud328\ud560\uc218\ub85d \ub300\uae30 \uc2dc\uac04\uc744 \ub298\ub9ac\uace0, \ubb34\uc791\uc704 \uc9c0\uc5f0\uc744 \ucd94\uac00\ud574 \ub2e4\uc218\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ub3d9\uc2dc\uc5d0 \uc11c\ubc84\uc5d0 \uc7ac\uc811\uc18d\ud558\ub294 \ud604\uc0c1\uc744 \uc644\ud654\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function getReconnectDelay(attempt: number) {\n  const baseDelay = 1000;\n  const maxDelay = 30000;\n\n  const exponentialDelay = Math.min(\n    maxDelay,\n    baseDelay * 2 ** attempt,\n  );\n\n  return Math.random() * exponentialDelay;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc5f0\uacb0 \uad00\ub9ac \ucf54\ub4dc\uc5d0\uc11c\ub294 \ucd5c\ub300 \uc7ac\uc2dc\ub3c4 \ud69f\uc218, \uc5f0\uacb0 \uc131\uacf5 \uc2dc \uc2dc\ub3c4 \ud69f\uc218 \ucd08\uae30\ud654, \uc571\uc758 \ud65c\uc131 \uc0c1\ud0dc, \uc778\uc99d \uac31\uc2e0 \uc5ec\ubd80, \uc0ac\uc6a9\uc790 \ub85c\uadf8\uc544\uc6c3 \uc5ec\ubd80\ub97c \ud568\uaed8 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \uc5f0\uacb0\uc774 \ub04a\uacbc\ub2e4\uace0 \ud574\uc11c \uc11c\ubc84\uc758 \uc138\uc158\uc774\ub098 \uac8c\uc784 \uc0c1\ud0dc\uac00 \uc790\ub3d9\uc73c\ub85c \ubcf5\uad6c\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uc7ac\uc5f0\uacb0\uc740 \uc804\uc1a1 \uacbd\ub85c\ub97c \ubcf5\uad6c\ud558\ub294 \uacfc\uc815\uc774\uba70, \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc0c1\ud0dc\uc758 \ubcf5\uad6c\ub294 \ubcc4\ub3c4\ub85c \ucc98\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc11c\ubc84 \uba54\uc2dc\uc9c0 \ucc98\ub9ac<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WebSocket \uba54\uc2dc\uc9c0\ub294 \ubb38\uc790\uc5f4\uc774\ub098 \ubc14\uc774\ub108\ub9ac \ub370\uc774\ud130\ub85c \uc804\ub2ec\ub420 \uc218 \uc788\ub2e4. JSON\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uba54\uc2dc\uc9c0 \uc885\ub958\ub97c \uad6c\ubd84\ud558\ub294 \ud504\ub85c\ud1a0\ucf5c\uc744 \uc815\uc758\ud558\uba74 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84 \uc0ac\uc774\uc758 \ud1b5\uc2e0\uc744 \uba85\ud655\ud558\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"type\": \"MATCH_FOUND\",\n  \"payload\": {\n    \"roomId\": \"room-example\"\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 <code>type<\/code>\uc5d0 \ub530\ub77c \uc801\uc808\ud55c \ucc98\ub9ac \ub85c\uc9c1\uc744 \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type ServerMessage =\n  | {\n      type: 'MATCH_FOUND';\n      payload: { roomId: string };\n    }\n  | {\n      type: 'MATCH_CANCELLED';\n      payload: { reason: string };\n    };\n\nfunction handleServerMessage(message: ServerMessage) {\n  switch (message.type) {\n    case 'MATCH_FOUND':\n      console.log(message.payload.roomId);\n      break;\n\n    case 'MATCH_CANCELLED':\n      console.log(message.payload.reason);\n      break;\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704 \ucf54\ub4dc\ub294 TypeScript\uc758 \uc815\uc801 \ud0c0\uc785\uc744 \ud65c\uc6a9\ud55c \uc608\uc81c\ub2e4. \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \uc804\ub2ec\ub41c JSON\uc774 \uc2e4\uc81c\ub85c \uc774 \ud0c0\uc785\uc744 \ub9cc\uc871\ud55c\ub2e4\uace0 \ubcf4\uc7a5\ub418\uc9c0\ub294 \uc54a\ub294\ub2e4. \ub530\ub77c\uc11c \uba54\uc2dc\uc9c0\ub97c \ud30c\uc2f1\ud55c \ub4a4 \ub7f0\ud0c0\uc784 \uc2a4\ud0a4\ub9c8 \uac80\uc99d\uc744 \uc218\ud589\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uba54\uc2dc\uc9c0 \ud504\ub85c\ud1a0\ucf5c\uc5d0\ub294 \ub2e4\uc74c \uc694\uc18c\ub97c \ud3ec\ud568\ud558\ub294 \uac83\uc774 \uc720\uc6a9\ud558\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>type<\/code>: \uba54\uc2dc\uc9c0 \uc885\ub958<\/li>\n\n\n\n<li><code>payload<\/code>: \uc2e4\uc81c \ub370\uc774\ud130<\/li>\n\n\n\n<li><code>requestId<\/code>: \uc694\uccad\uacfc \uc751\ub2f5\uc758 \uc5f0\uacb0<\/li>\n\n\n\n<li><code>sequence<\/code>: \uc21c\uc11c\uac00 \uc911\uc694\ud55c \uc774\ubca4\ud2b8\uc758 \uc21c\ubc88<\/li>\n\n\n\n<li><code>timestamp<\/code>: \uc774\ubca4\ud2b8 \ubc1c\uc0dd \uc2dc\uac01<\/li>\n\n\n\n<li><code>version<\/code>: \ud504\ub85c\ud1a0\ucf5c \ubc84\uc804<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ubaa8\ub4e0 \uba54\uc2dc\uc9c0\uc5d0 \uc774 \ud544\ub4dc\uac00 \ud544\uc694\ud55c \uac83\uc740 \uc544\ub2c8\ub2e4. \uba54\uc2dc\uc9c0\uc758 \uc131\uaca9\uc5d0 \ub530\ub77c \ud544\uc694\ud55c \uc815\ubcf4\ub97c \uc120\ud0dd\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uc2e4\uc2dc\uac04 \uac8c\uc784\uc5d0\uc11c\ub294 \uba54\uc2dc\uc9c0 \uc21c\uc11c\uac00 \ub4a4\ubc14\ub00c\uac70\ub098 \uc911\ubcf5 \uc804\ub2ec\ub420 \uac00\ub2a5\uc131\uc744 \uace0\ub824\ud574\uc57c \ud55c\ub2e4. \uc21c\uc11c\uac00 \uc911\uc694\ud55c \uc0c1\ud0dc \ubcc0\uacbd\uc5d0\ub294 \uc2dc\ud000\uc2a4 \ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uace0, \uc7ac\uc811\uc18d \uc774\ud6c4\uc5d0\ub294 \uc11c\ubc84\uac00 \uc81c\uacf5\ud558\ub294 \ucd5c\uc2e0 \uc0c1\ud0dc\ub97c \uae30\uc900\uc73c\ub85c \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0c1\ud0dc\ub97c \ub2e4\uc2dc \uad6c\uc131\ud558\ub294 \ubc29\uc2dd\uc774 \ud6a8\uacfc\uc801\uc774\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ub124\ud2b8\uc6cc\ud06c \uc624\ub958 \ubc0f \uc5f0\uacb0 \ubcf5\uad6c<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ub124\ud2b8\uc6cc\ud06c \uc624\ub958 \ubc0f \ud0c0\uc784\uc544\uc6c3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ubaa8\ubc14\uc77c \ud658\uacbd\uc5d0\uc11c\ub294 \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0\uc774 \ud56d\uc0c1 \uc548\uc815\uc801\uc774\uc9c0 \uc54a\ub2e4. Wi-Fi\uc5d0\uc11c \ubaa8\ubc14\uc77c \ub370\uc774\ud130\ub85c \uc804\ud658\ub418\uac70\ub098 \uc2e0\ud638\uac00 \uc57d\ud55c \uc7a5\uc18c\uc5d0 \uc9c4\uc785\ud558\uba74 \uc694\uccad\uc774 \uc9c0\uc5f0\ub418\uac70\ub098 \uc2e4\ud328\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ubaa8\ub4e0 \uc694\uccad\uc774 \uc131\uacf5\ud55c\ub2e4\ub294 \uac00\uc815\uc744 \ubc84\ub9ac\uace0 \uc624\ub958 \uc720\ud615\uc5d0 \ub530\ub77c \ub300\uc751\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc5f0\uacb0 \uc2e4\ud328: \ub124\ud2b8\uc6cc\ud06c \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uace0 \uc7ac\uc2dc\ub3c4 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud0c0\uc784\uc544\uc6c3: \uc77c\uc815 \uc2dc\uac04 \uc548\uc5d0 \uc751\ub2f5\uc774 \uc5c6\uc73c\uba74 \uc694\uccad\uc744 \uc911\ub2e8\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc778\uc99d \uc624\ub958: \ud1a0\ud070 \uac31\uc2e0 \uac00\ub2a5 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ubc84 \uc624\ub958: \uc7ac\uc2dc\ub3c4 \uac00\ub2a5\uc131\uacfc \uc0ac\uc6a9\uc790 \uc548\ub0b4\ub97c \uad6c\ubd84\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc798\ubabb\ub41c \uc694\uccad: \ub3d9\uc77c\ud55c \uc694\uccad\uc744 \ubc18\ubcf5\ud558\uc9c0 \uc54a\uace0 \uc785\ub825\uc744 \uc218\uc815\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code>fetch<\/code>\uc5d0\ub294 \uae30\ubcf8\uc801\uc778 \uc694\uccad \ud0c0\uc784\uc544\uc6c3 \uc635\uc158\uc774 \uc5c6\uc73c\ubbc0\ub85c <code>AbortController<\/code>\ub97c \uc774\uc6a9\ud574 \uc694\uccad\uc744 \ucde8\uc18c\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function fetchWithTimeout(\n  url: string,\n  timeoutMs: number,\n) {\n  const controller = new AbortController();\n\n  const timeoutId = setTimeout(() =&gt; {\n    controller.abort();\n  }, timeoutMs);\n\n  try {\n    return await fetch(url, {\n      signal: controller.signal,\n    });\n  } finally {\n    clearTimeout(timeoutId);\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud568\uc218\ub294 \uc694\uccad\uc774 \uc9c0\uc815\ub41c \uc2dc\uac04 \uc548\uc5d0 \uc644\ub8cc\ub418\uc9c0 \uc54a\uc73c\uba74 \uc911\ub2e8 \uc2e0\ud638\ub97c \uc804\ub2ec\ud55c\ub2e4. \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c\ub294 \ud0c0\uc784\uc544\uc6c3\uc73c\ub85c \ubc1c\uc0dd\ud55c <code>AbortError<\/code>\uc640 \ub2e4\ub978 \ub124\ud2b8\uc6cc\ud06c \uc624\ub958\ub97c \uad6c\ubd84\ud574 \ucc98\ub9ac\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\uc758\ud560 \uc810\uc740 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc694\uccad\uc744 \ucde8\uc18c\ud574\ub3c4 \uc11c\ubc84\uac00 \uc774\ubbf8 \uc791\uc5c5\uc744 \uc218\ud589\ud588\uc744 \uc218 \uc788\ub2e4\ub294 \uac83\uc774\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ud3ec\uc778\ud2b8 \uc9c0\uae09 \uc694\uccad\uc758 \uc751\ub2f5\uc744 \ubc1b\uc9c0 \ubabb\ud588\ub2e4\uace0 \ud574\uc11c \uc11c\ubc84\uc5d0\uc11c \ud3ec\uc778\ud2b8\uac00 \uc9c0\uae09\ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \ub2e8\uc815\ud560 \uc218 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \uc911\uc694\ud55c \ubcc0\uacbd \uc791\uc5c5\uc740 \uba71\ub4f1\uc131 \ud0a4, \uc791\uc5c5 \uc0c1\ud0dc \uc870\ud68c API, \ud2b8\ub79c\uc7ad\uc158 \ub4f1\uc758 \uc11c\ubc84 \uce21 \uc124\uacc4\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc5f0\uacb0 \ubcf5\uad6c\uc640 \uc0c1\ud0dc \ub3d9\uae30\ud654<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub124\ud2b8\uc6cc\ud06c\uac00 \ubcf5\uad6c\ub418\uc5b4\ub3c4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84\uc758 \uc0c1\ud0dc\uac00 \uc790\ub3d9\uc73c\ub85c \uc77c\uce58\ud558\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 WebSocket \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c4 \ub3d9\uc548 \uc11c\ubc84\uc5d0\uc11c\ub294 \ub9e4\uce6d\uc774 \uc644\ub8cc\ub418\uac70\ub098 \ubc29 \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub420 \uc218 \uc788\ub2e4. \uc5f0\uacb0\uc774 \ubcf5\uad6c\ub41c \ub4a4 \uc774\uc804 \ud654\uba74 \uc0c1\ud0dc\ub97c \uadf8\ub300\ub85c \uc720\uc9c0\ud558\uba74 \uc2e4\uc81c \uc11c\ubc84 \uc0c1\ud0dc\uc640 \ucc28\uc774\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c \ud574\uacb0\ud558\ub824\uba74 \uc5f0\uacb0 \ubcf5\uad6c\uc640 \uc0c1\ud0dc \ub3d9\uae30\ud654\ub97c \ubcc4\uac1c\uc758 \uacfc\uc815\uc73c\ub85c \uc124\uacc4\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \ubcf5\uad6c \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0 \uc0c1\ud0dc\ub97c \uac10\uc9c0\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uae30\uc874 \uc5f0\uacb0\uc758 \uc720\ud6a8\uc131\uc744 \ud655\uc778\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud544\uc694\ud55c \uacbd\uc6b0 \uc778\uc99d \ud1a0\ud070\uc744 \uac31\uc2e0\ud55c\ub2e4.<\/li>\n\n\n\n<li>WebSocket \uc5f0\uacb0\uc744 \uc7ac\uc218\ub9bd\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ubc84\uc5d0 \uc138\uc158 \ubcf5\uad6c \ub610\ub294 \uc0c1\ud0dc \uc870\ud68c\ub97c \uc694\uccad\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ubc84\uc758 \ucd5c\uc2e0 \uc0c1\ud0dc\ub97c \uae30\uc900\uc73c\ub85c \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0c1\ud0dc\ub97c \uac31\uc2e0\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc774\ud6c4 \uc2e4\uc2dc\uac04 \uc774\ubca4\ud2b8 \uc218\uc2e0\uc744 \uc7ac\uac1c\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84\ub294 \uc7ac\uc811\uc18d\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud604\uc7ac \uc0c1\ud0dc\ub97c \ubcf5\uad6c\ud560 \uc218 \uc788\ub3c4\ub85d \uc138\uc158 \uc2dd\ubcc4\uc790, \uc7ac\uc811\uc18d \ud1a0\ud070, \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ucc98\ub9ac\ud55c \uc774\ubca4\ud2b8 \uc21c\ubc88 \ub4f1\uc758 \uc815\ubcf4\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc804\ub2ec\ud55c \uc138\uc158 \uc815\ubcf4\ub098 \uc7ac\uc811\uc18d \uc815\ubcf4\ub97c \ubb34\uc870\uac74 \uc2e0\ub8b0\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4. \uc11c\ubc84\ub294 \uc0ac\uc6a9\uc790\uc758 \uc778\uc99d \ubc0f \uad8c\ud55c\uc744 \uac80\uc99d\ud558\uace0 \ud574\ub2f9 \uc138\uc158\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubca4\ud2b8 \uc21c\ubc88\uc744 \ud65c\uc6a9\ud558\uba74 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ucc98\ub9ac\ud55c \uc774\ubca4\ud2b8 \uc774\ud6c4\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc804\ub2ec\ud558\ub294 \ubc29\uc2dd\ub3c4 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. \ub2e4\ub9cc \uc11c\ubc84\uac00 \ud574\ub2f9 \uc774\ubca4\ud2b8 \uae30\ub85d\uc744 \ubcf4\uad00\ud558\uace0 \uc788\uc5b4\uc57c \ud558\uba70, \uae30\ub85d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uac70\ub098 \ubcf5\uad6c\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc804\uccb4 \uc0c1\ud0dc\ub97c \ub2e4\uc2dc \uc870\ud68c\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc2dc\uac04 \uac8c\uc784 \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \uac8c\uc784 \uc0c1\ud0dc\ub97c \ubb34\uc870\uac74 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \ubcf5\uc6d0\ud558\uae30\ubcf4\ub2e4 \uc11c\ubc84\ub97c \uae30\uc900 \uc0c1\ud0dc\ub85c \uc0bc\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4. \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ud654\uba74 \ud45c\uc2dc\uc640 \uc0ac\uc6a9\uc790 \uc785\ub825\uc744 \ub2f4\ub2f9\ud558\uace0, \uac8c\uc784 \uacb0\uacfc\ub098 \ub9e4\uce6d \uc0c1\ud0dc\ucc98\ub7fc \uc2e0\ub8b0\uc131\uc774 \uc911\uc694\ud55c \uc815\ubcf4\ub294 \uc11c\ubc84\uac00 \uac80\uc99d\ud558\uace0 \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc2e4\ubb34 \uc801\uc6a9 \uc2dc \uace0\ub824\ud560 \uc0ac\ud56d<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\uc778\uc99d\uacfc \uc5f0\uacb0 \uad00\ub9ac \ubd84\ub9ac<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc778\uc99d \uc11c\ube44\uc2a4, HTTP API \ud074\ub77c\uc774\uc5b8\ud2b8, WebSocket \uc5f0\uacb0 \uad00\ub9ac\uc790\ub97c \ubd84\ub9ac\ud55c\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ud1a0\ud070 \uac31\uc2e0 \uc815\ucc45\uc774 \ubcc0\uacbd\ub418\ub354\ub77c\ub3c4 \ud654\uba74 \ucf54\ub4dc\uc640 \uc2e4\uc2dc\uac04 \ud1b5\uc2e0 \ub85c\uc9c1\uc744 \ud06c\uac8c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc0c1\ud0dc\uc758 \uae30\uc900\uc744 \uba85\ud655\ud558\uac8c \uc124\uc815<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">UI \uc0c1\ud0dc, \uc778\uc99d \uc0c1\ud0dc, \ub124\ud2b8\uc6cc\ud06c \uc0c1\ud0dc, \uc11c\ubc84 \uc0c1\ud0dc\ub97c \uad6c\ubd84\ud55c\ub2e4. \ud2b9\ud788 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc784\uc2dc\ub85c \ubcf4\uad00\ud558\ub294 \ub370\uc774\ud130\uc640 \uc11c\ubc84\uac00 \ud655\uc815\ud55c \ub370\uc774\ud130\ub97c \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc7ac\uc2dc\ub3c4 \uc815\ucc45\uc744 \uc791\uc5c5\ubcc4\ub85c \uad6c\ubd84<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc870\ud68c \uc694\uccad\uacfc \uc0c1\ud0dc \ubcc0\uacbd \uc694\uccad\uc740 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc7ac\uc2dc\ub3c4\ud558\uba74 \uc548 \ub41c\ub2e4. \uc870\ud68c\ub294 \ube44\uad50\uc801 \uc548\uc804\ud558\uac8c \uc7ac\uc2dc\ub3c4\ud560 \uc218 \uc788\uc9c0\ub9cc, \ud3ec\uc778\ud2b8 \uc9c0\uae09\uc774\ub098 \uacb0\uc81c \uac19\uc740 \uc791\uc5c5\uc740 \uc911\ubcf5 \uc2e4\ud589 \ubc29\uc9c0 \uc124\uacc4\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ubcf4\uc548 \uc815\ubcf4\uc758 \ub178\ucd9c \ubc29\uc9c0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud1a0\ud070\uacfc \ubbfc\uac10\ud55c \uc0ac\uc6a9\uc790 \uc815\ubcf4\uac00 \ub85c\uadf8\uc5d0 \uae30\ub85d\ub418\uc9c0 \uc54a\ub3c4\ub85d \ud55c\ub2e4. \uc11c\ubc84\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \ubaa8\ub450 \uc778\uc99d\uacfc \uad8c\ud55c \uac80\uc99d\uc744 \uc218\ud589\ud558\uace0, \ud544\uc694\ud55c \ub370\uc774\ud130\ub9cc \uc804\uc1a1\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ubaa8\ubc14\uc77c \uc0dd\uba85\uc8fc\uae30 \uace0\ub824<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc571\uc774 \ud65c\uc131\ud654\ub418\uac70\ub098 \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc804\ud658\ub420 \ub54c WebSocket\uacfc \ud0c0\uc774\uba38 \ub4f1\uc758 \ub3d9\uc791\uc744 \uc801\uc808\ud558\uac8c \uc870\uc815\ud55c\ub2e4. \uc571\uc774 \ub2e4\uc2dc \ud65c\uc131\ud654\ub418\uc5c8\ub2e4\uba74 \uae30\uc874 \uc5f0\uacb0\uc774 \uc720\ud6a8\ud55c\uc9c0 \ud655\uc778\ud558\uace0 \ud544\uc694\ud55c \uacbd\uc6b0 \uc0c1\ud0dc\ub97c \ub3d9\uae30\ud654\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc7a5\uc560 \uc0c1\ud669\uc744 \ud14c\uc2a4\ud2b8<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc815\uc0c1\uc801\uc778 \ub124\ud2b8\uc6cc\ud06c \ud658\uacbd\ubfd0 \uc544\ub2c8\ub77c \uc5f0\uacb0 \ub2e8\uc808, \ud1a0\ud070 \ub9cc\ub8cc, \uc11c\ubc84 \uc7ac\uc2dc\uc791, \uc571 \ubc31\uadf8\ub77c\uc6b4\ub4dc \uc804\ud658, \uc911\ubcf5 \uc694\uccad \ub4f1\uc758 \uc0c1\ud669\uc744 \ud14c\uc2a4\ud2b8\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>React Native\ub294 JavaScript \ub610\ub294 TypeScript\ub97c \uc0ac\uc6a9\ud574 Android\uc640 iOS \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub2e4. React\uc758 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub378\uacfc Hooks\ub97c \uae30\ubc18\uc73c\ub85c \ud558\uba70, HTTP API\uc640 WebSocket\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc640 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub2e4. \ubc31\uc5d4\ub4dc\uc640 \uc5f0\ub3d9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ub2e8\uc21c\ud788 API\ub97c \ud638\ucd9c\ud558\ub294 \uac83\ub9cc\uc73c\ub85c \ucda9\ubd84\ud558\uc9c0 \uc54a\ub2e4. \uc778\uc99d \ud1a0\ud070\uc744 \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud558\uace0, \ub124\ud2b8\uc6cc\ud06c \ub2e8\uc808 \uc774\ud6c4 \uc5f0\uacb0\uc744 \ubcf5\uad6c\ud558\uba70, \uc11c\ubc84\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc0c1\ud0dc\ub97c \uc77c\uce58\uc2dc\ucf1c\uc57c \ud55c\ub2e4. \ud2b9\ud788 \uc2e4\uc2dc\uac04 \uac8c\uc784 \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2741","post","type-post","status-publish","format-standard","hentry","category-dev-logs"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2741"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2741\/revisions"}],"predecessor-version":[{"id":2742,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2741\/revisions\/2742"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}