{"componentChunkName":"component---node-modules-stvad-gatsby-theme-garden-src-templates-roam-page-js","path":"/SaaS","result":{"data":{"roamPage":{"title":"SaaS","childMdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"saas\"\n  }, \"SaaS\"), mdx(Block, {\n    id: \"fesKAsUu0\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"Software-\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/as-a-Service\",\n      \"title\": \"as-a-Service\",\n      \"className\": \" internal-link\"\n    }, \"as-a-Service\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","outboundReferences":[{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"as-a-service\"\n  }, \"as-a-Service\"));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamPage","id":"b7a59916-b897-5e2c-8ef1-f974bb3eddac","title":"as-a-Service","fields":{"slug":"/as-a-Service"}}}],"inboundReferences":[{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"zlYFmJyN5\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\\uBB38\\uC11C-\\uACC4\\uCE35\\uD615 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/37e1e\",\n      \"title\": \"데이터베이스\",\n      \"className\": \" internal-link\"\n    }, \"\\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4\"), \"\\uC774\\uC790 \\uD574\\uB2F9 \\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4\\uB97C \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/0546d\",\n      \"title\": \"서버리스\",\n      \"className\": \" internal-link\"\n    }, \"\\uC11C\\uBC84\\uB9AC\\uC2A4\"), \" \\uD615\\uD0DC\\uB85C \\uC81C\\uACF5\\uD558\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"90474f22-a7a8-5fe9-bf60-bd9a47a65547","string":"문서-계층형 [[데이터베이스]]이자 해당 데이터베이스를 [[서버리스]] 형태로 제공하는 [[SaaS]]","fields":{"parentPage":{"title":"Fauna","fields":{"slug":"/Fauna"}},"slug":"/zlYFmJyN5"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"YLhUXQ4Fe\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \" \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/89fc6\",\n      \"title\": \"이슈 트래커\",\n      \"className\": \" internal-link\"\n    }, \"\\uC774\\uC288 \\uD2B8\\uB798\\uCEE4\"), \" \\uC11C\\uBE44\\uC2A4\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"a42d9394-7451-5e6c-9edb-bb253a8018b3","string":"[[SaaS]] [[이슈 트래커]] 서비스","fields":{"parentPage":{"title":"Linear","fields":{"slug":"/Linear"}},"slug":"/YLhUXQ4Fe"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"3ejMuNFxp\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/Vitess\",\n      \"title\": \"Vitess\",\n      \"className\": \" internal-link\"\n    }, \"Vitess\"), \"\\uB97C \\uAE30\\uBC18\\uC73C\\uB85C \\uD558\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/MySQL\",\n      \"title\": \"MySQL\",\n      \"className\": \" internal-link\"\n    }, \"MySQL\"), \" \\uD638\\uD658 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/0546d\",\n      \"title\": \"서버리스\",\n      \"className\": \" internal-link\"\n    }, \"\\uC11C\\uBC84\\uB9AC\\uC2A4\"), \" \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/37e1e\",\n      \"title\": \"데이터베이스\",\n      \"className\": \" internal-link\"\n    }, \"\\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4\"), \" \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"7422b20e-33ff-580a-99fb-5d2ef1650d13","string":"[[Vitess]]를 기반으로 하는 [[MySQL]] 호환 [[서버리스]] [[데이터베이스]] [[SaaS]]","fields":{"parentPage":{"title":"Planetscale","fields":{"slug":"/Planetscale"}},"slug":"/3ejMuNFxp"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"BdyGQuwsG\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\\uAC00\\uB9CC \\uB0C5\\uB450\\uBA74 \\uAE4C\\uBA39\\uC73C\\uB2C8\\uAE4C \\uC544\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \" \\uAE30\\uC5B5\\uB0A0 \\uB54C\\uB9C8\\uB2E4 \\uC801\\uC5B4\\uB450\\uC790\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"6531deda-dde5-562e-a93d-5cefe5c78094","string":"가만 냅두면 까먹으니까 아는 [[SaaS]] 기억날 때마다 적어두자","fields":{"parentPage":{"title":"June 14th, 2022","fields":{"slug":"/June-14th-2022"}},"slug":"/BdyGQuwsG"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"BTNJ9T8lK\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/Browserless\",\n      \"title\": \"Browserless\",\n      \"className\": \" internal-link\"\n    }, \"Browserless\"), \"\\uB77C\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \" \\uC11C\\uBE44\\uC2A4\\uB97C \\uC54C\\uAC8C \\uB428\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"9756131b-18ae-5173-95be-b96a759a7205","string":"[[Browserless]]라는 [[SaaS]] 서비스를 알게 됨","fields":{"parentPage":{"title":"July 3rd, 2022","fields":{"slug":"/July-3rd-2022"}},"slug":"/BTNJ9T8lK"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"DmCHV8KCd\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\\uBC31\\uC624\\uD53C\\uC2A4\\uB77C \\uBD88\\uB9AC\\uB294 \\uB0B4\\uBD80 \\uAD00\\uB9AC \\uB3C4\\uAD6C\\uB97C \\uBE60\\uB974\\uAC8C \\uB9CC\\uB4E4\\uAC8C \\uB3C4\\uC640\\uC8FC\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"24b0fd81-78f8-5e70-a901-a4de39332d0e","string":"백오피스라 불리는 내부 관리 도구를 빠르게 만들게 도와주는 [[SaaS]]","fields":{"parentPage":{"title":"Retool","fields":{"slug":"/Retool"}},"slug":"/DmCHV8KCd"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"5hJrZuULA\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/24fda\",\n      \"title\": \"실시간\",\n      \"className\": \" internal-link\"\n    }, \"\\uC2E4\\uC2DC\\uAC04\"), \" \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/9f451\",\n      \"title\": \"웹\",\n      \"className\": \" internal-link\"\n    }, \"\\uC6F9\"), \" \\uC560\\uD50C\\uB9AC\\uCF00\\uC774\\uC158 \\uAC1C\\uBC1C\\uC744 \\uC704\\uD55C \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"f59264e5-540b-553e-b697-5cf64e642a7c","string":"[[실시간]] [[웹]] 애플리케이션 개발을 위한 [[SaaS]]","fields":{"parentPage":{"title":"Replicache","fields":{"slug":"/Replicache"}},"slug":"/5hJrZuULA"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"IOWm0GBdF\",\n    content: mdx(React.Fragment, null, mdx(\"h1\", {\n      \"id\": \"내부-서비스를-바탕으로-만들어진-서비스-hashtag_saas\"\n    }, \"\\uB0B4\\uBD80 \\uC11C\\uBE44\\uC2A4\\uB97C \\uBC14\\uD0D5\\uC73C\\uB85C \\uB9CC\\uB4E4\\uC5B4\\uC9C4 \\uC11C\\uBE44\\uC2A4 \", mdx(\"a\", {\n      parentName: \"h1\",\n      \"href\": \"/SaaS\",\n      \"title\": \"hashtag_SaaS\",\n      \"className\": \"hashtag internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }, mdx(Block, {\n    id: \"pe66GGEX3\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://twitter.com/dylayed/status/1538672989796855808\"\n    }, \"https://twitter.com/dylayed/status/1538672989796855808\"))),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"qqCFZPsre\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://www.golinks.io/\"\n    }, \"golinks\"))),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"HdnR5yh2S\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://about.sourcegraph.com/\"\n    }, \"Sourcegraph\"))),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"4ROCIRo3d\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/CockroachDB\",\n      \"title\": \"CockroachDB\",\n      \"className\": \" internal-link\"\n    }, \"CockroachDB\"), \"\")),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"gnzJp_FgC\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://lightstep.com/\"\n    }, \"Lightstep\"), \" - \\uBD84\\uC0B0\\uD615 tracing\")),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"zQnya9VQC\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://www.engflow.com/\"\n    }, \"Engflow\"), \" - Bazel \\uBE44\\uC9C0\\uB2C8\\uC2A4\")),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"_4VhYEmh5\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://graphite.dev/\"\n    }, \"Graphite\"), \" - Google Critique/\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/Facebook\",\n      \"title\": \"Facebook\",\n      \"className\": \" internal-link\"\n    }, \"Facebook\"), \" Phabricator \\uAC19\\uC740 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/cbac2\",\n      \"title\": \"코드 리뷰\",\n      \"className\": \" internal-link\"\n    }, \"\\uCF54\\uB4DC \\uB9AC\\uBDF0\"), \" \\uD50C\\uB7AB\\uD3FC\")),\n    mdxType: \"Block\"\n  }), mdx(Block, {\n    id: \"Lf1GYZeV9\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"https://authzed.com/\"\n    }, \"Authzed\"), \" - Google \")),\n    mdxType: \"Block\"\n  })));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"8610091f-7cc3-565c-b218-c47631f1b72a","string":"내부 서비스를 바탕으로 만들어진 서비스 #SaaS","fields":{"parentPage":{"title":"Google","fields":{"slug":"/Google"}},"slug":"/IOWm0GBdF"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"G8XmlIhyP\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \" \\uC635\\uC158 \\uC81C\\uACF5 - 5GiB \\uBB34\\uB8CC!\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"b348e020-03e7-5a10-8d54-f9a3a95e82f4","string":"[[SaaS]] 옵션 제공 - 5GiB 무료!","fields":{"parentPage":{"title":"CockroachDB","fields":{"slug":"/CockroachDB"}},"slug":"/G8XmlIhyP"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"9y06Hr0oy\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\\uD5E4\\uB4DC\\uB9AC\\uC2A4 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/53faa\",\n      \"title\": \"브라우저\",\n      \"className\": \" internal-link\"\n    }, \"\\uBE0C\\uB77C\\uC6B0\\uC800\"), \"\\uB97C \\uC81C\\uACF5\\uD558\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"4c3ad4a3-7e7e-5348-b531-93c6a19a352a","string":"헤드리스 [[브라우저]]를 제공하는 [[SaaS]]","fields":{"parentPage":{"title":"Browserless","fields":{"slug":"/Browserless"}},"slug":"/9y06Hr0oy"}}},{"__typename":"Mdx","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Block = makeShortcode(\"Block\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    id: \"62FyJV-q-\",\n    content: mdx(React.Fragment, null, mdx(\"p\", null, \"\", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/0546d\",\n      \"title\": \"서버리스\",\n      \"className\": \" internal-link\"\n    }, \"\\uC11C\\uBC84\\uB9AC\\uC2A4\"), \" \\uD615\\uD0DC\\uC758 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/Redis\",\n      \"title\": \"Redis\",\n      \"className\": \" internal-link\"\n    }, \"Redis\"), \" \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/37e1e\",\n      \"title\": \"데이터베이스\",\n      \"className\": \" internal-link\"\n    }, \"\\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4\"), \"\\uB97C \\uC81C\\uACF5\\uD558\\uB294 \", mdx(\"a\", {\n      parentName: \"p\",\n      \"href\": \"/SaaS\",\n      \"title\": \"SaaS\",\n      \"className\": \" internal-link\"\n    }, \"SaaS\"), \"\")),\n    mdxType: \"Block\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"RoamBlock","id":"6ba0a372-1aaa-5873-907c-da98caee11b2","string":"[[서버리스]] 형태의 [[Redis]] [[데이터베이스]]를 제공하는 [[SaaS]]","fields":{"parentPage":{"title":"Upstash","fields":{"slug":"/Upstash"}},"slug":"/62FyJV-q"}}}]},"fields":{"slug":"/SaaS"}}},"pageContext":{"id":"b7aa6505-0e98-5d59-9bbc-f242023673c7"}},"staticQueryHashes":["2131059104","2221750479","2468095761"]}