{
    "componentChunkName": "component---src-templates-index-jsx",
    "path": "/index/projects/BackEnd/10plusServer/",
    "result": {"data":{"directorys":{"nodes":[{"id":"25a7ea47-9810-57c2-aed3-170559f514a4","name":"posts"},{"id":"f5729257-7c38-58ab-830f-1d18809687ec","name":"develop"},{"id":"70c762b1-287c-5a42-b45b-c7f7fb8095dc","name":"projects"}]},"markdown":{"html":"<h2 id=\"목차\" style=\"position:relative;\"><a href=\"#%EB%AA%A9%EC%B0%A8\" aria-label=\"목차 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>목차</h2>\n<blockquote>\n<ul>\n<li><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\">개요</a></li>\n<li><a href=\"#%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B5%AC%EC%84%B1%EB%8F%84\">시스템구성도</a></li>\n<li><a href=\"#%EC%A4%91%EA%B3%84%EC%84%9C%EB%B2%84\">중계서버</a></li>\n<li><a href=\"#%EC%82%AC%EC%9A%A9%EA%B8%B0%EC%88%A0\">사용기술</a></li>\n<li><a href=\"#%EC%A3%BC%EC%9A%94%EA%B8%B0%EB%8A%A5\">주요기능</a></li>\n<li><a href=\"#API-Document\">API Document</a></li>\n</ul>\n</blockquote>\n<h2 id=\"프로젝트-개요\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\" aria-label=\"프로젝트 개요 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>프로젝트 개요</h2>\n<p>본 프로젝트는 웹 통신을 이용한 IOT 스마트홈 구축 이란 주제로 잔행된 <strong>2021 캡스톤디자인 프로젝트 중 서브프로젝트</strong> 입니다.<br>\n프로젝트의 <strong>목표는 기존 거주지의 스마트홈화</strong> 이며 이러한 목표에 맞게 사용자가 이용하는 IOT 기기, 웹사이트, 가정에 설치되는 인터폰 형식의 스마트 디바이스를 제작하였습니다.<br>\n본 글에서 설명하는 프로젝트는 사용자의 집에 설치되는 <strong>스마트 디바이스인 동시에 중계서버</strong> 역할을 수행하는 프로그램입니다. 개발 기간은 2개월이 소요되었으며 1인 개발로 진행하였습니다.</p>\n<p>코드는 <a href=\"https://github.com/je0ngyun/10PlusServer/tree/master/APIserver\"><strong>GitHub 에서</strong></a> 보실 수 있습니다.</p>\n<h2 id=\"시스템구성도\" style=\"position:relative;\"><a href=\"#%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B5%AC%EC%84%B1%EB%8F%84\" aria-label=\"시스템구성도 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>시스템구성도</h2>\n<p>시스템 구성도는 다음 사진과 같습니다.</p>\n<img width=\"80%\" alt=\"system\" src=\"https://user-images.githubusercontent.com/33706043/144782710-fb8491a1-9a0e-46a9-9c84-13010e34b395.png\">\n<p>프론트엔드와 백엔드 부분으로 나누어 서비스 페이지와 백엔드 서버를 구성하였습니다.<br>\n클라이언트로부터 기기관련 요청을 받았을때 해당 중계서버로 백엔드 서버에서 요청을 보냅니다.<br>\n요청을 받은 중계서버는 각 IoT 기기와 MQTT 프로토콜로 통신합니다.</p>\n<h2 id=\"중계서버\" style=\"position:relative;\"><a href=\"#%EC%A4%91%EA%B3%84%EC%84%9C%EB%B2%84\" aria-label=\"중계서버 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>중계서버</h2>\n<p>웹 통신 특성상 외부에서 <strong>하나의 호스트 주소로 여러 기기를 운용할 수 없다</strong> 판단되어 중계서버를 도입하였습니다.<br>\n외부에서 각 IoT 기기를 작동시키기 위해 모두 포트포워딩하여 관리하는 방법은 비효율적이라고 생각하였습니다.<br>\n대신 가정집에 인터폰 형식의 중계서버를 배치하고 중계서버가 IoT 기기들과 내부망에서 통신을 하는 형식으로 결정하였습니다.</p>\n<h2 id=\"사용기술\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%EA%B8%B0%EC%88%A0\" aria-label=\"사용기술 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>사용기술</h2>\n<span>\n<img alt=\"Express\" src=\"https://img.shields.io/badge/Express-001039.svg?&amp;style=for-the-badge&amp;logo=Express&amp;logoColor=white\">\n</span>\n<span>\n<img alt=\"MySQL\" src=\"https://img.shields.io/badge/MySQL-4479a1.svg?&amp;style=for-the-badge&amp;logo=MySQL&amp;logoColor=white\">\n</span>\n<span>\n<img alt=\"JWT\" src=\"https://img.shields.io/badge/JWT-291345.svg?&amp;style=for-the-badge&amp;logo=JsonWebTokens&amp;logoColor=white\">\n</span>\n<span>\n<img alt=\"MQTT\" src=\"https://img.shields.io/badge/MQTT-3c5280.svg?&amp;style=for-the-badge&amp;logo=EclipseMosquitto&amp;logoColor=white\">\n</span>\n<span>\n<img alt=\"Knex\" src=\"https://img.shields.io/badge/Knex-566179.svg?&amp;style=for-the-badge&amp;logo=Known&amp;logoColor=white\">\n</span>\n<span>\n<img alt=\"SocketIO\" src=\"https://img.shields.io/badge/Socket.io-189472.svg?&amp;style=for-the-badge&amp;logo=Socket.io&amp;logoColor=white\">\n</span>\n<p><strong>Express - v4.16.1</strong></p>\n<ul>\n<li>Express 프레임워크를 이용하여 Node 환경에서 서버를 구성하였습니다.</li>\n</ul>\n<p><strong>MySQL - v5.7.32</strong></p>\n<ul>\n<li>기기관련 정보를 저장하기 위해 MySQL DB를 사용하였습니다.</li>\n</ul>\n<p><strong>JWT - v8.5.1</strong></p>\n<ul>\n<li>사용자 인증을위해 토큰인증방식을 채택하였습니다.</li>\n</ul>\n<p><strong>MQTT(Ades-broker) -v0.46.0</strong></p>\n<ul>\n<li>각 IOT기기와의 통신을 위해 MQTT 프로토콜을 사용하였습니다.</li>\n<li>브로커로 Ades 브로커를 사용하였습니다.</li>\n<li>중계서버가 하나의 브로커 역할을 수행하도록 개발하였습니다.</li>\n</ul>\n<p><strong>Knex(QueryBuilder) -v0.95.4</strong></p>\n<ul>\n<li>DB쿼리를 실행하기위해 Knex 쿼리빌더를 사용하였습니다.</li>\n</ul>\n<p><strong>Socket-io -v4.0.1</strong></p>\n<ul>\n<li>연결된 웹에 이벤트(인증코드 표출)를 발생시키기 위해 웹소켓을 사용하였습니다.</li>\n</ul>\n<h2 id=\"주요기능\" style=\"position:relative;\"><a href=\"#%EC%A3%BC%EC%9A%94%EA%B8%B0%EB%8A%A5\" aria-label=\"주요기능 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>주요기능</h2>\n<h3 id=\"기기등록\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EA%B8%B0%EB%93%B1%EB%A1%9D\" aria-label=\"기기등록 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>기기등록</strong></h3>\n<p>기기등록은 다음과 같은 단계를 거칩니다.</p>\n<ol>\n<li>초기에 IOT기기 전원작동시 내부망으로 UDP 메시지를 브로드캐스팅합니다.</li>\n<li>중계서버가 브로드캐스팅된 메시지를 받으면 중계서버의 Host주소를 메시지에 담아 응답합니다.</li>\n<li>IOT기기가 중계서버의 Host 주소로 각 MQTT 토픽 구독과 발행을 진행합니다.</li>\n<li>IOT기기가 발행한 정보에 따라 중계서버의 DB에 기기정보를 저장합니다.</li>\n</ol>\n<p>기기등록기능과 관련된 MQTT</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">topic-name : registTopic\naction : subscribe\nmessage : 기기호스트,기기이름,기기전원갯수(구)</code></pre></div>\n<h3 id=\"기기동작요청\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EA%B8%B0%EB%8F%99%EC%9E%91%EC%9A%94%EC%B2%AD\" aria-label=\"기기동작요청 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>기기동작요청</strong></h3>\n<p>기기동작은 다음과 같은 단계를 거칩니다.</p>\n<ol>\n<li>중계서버가 특정 기기작동 웹 요청을 받았을때 MQTT 기기동작 토픽을 발행합니다.</li>\n<li>IOT기기가 중계서버가 발행한 토픽에 대한 정보로 스위치를 작동시킵니다.</li>\n<li>IOT기기가 현재 기기의 상태의 정보를 담아 토픽을 발행합니다.</li>\n<li>중계서버가 IOT기기의 현재 상태를 JSON형식으로 웹 요청에 대해 응답합니다.</li>\n</ol>\n<p>기기동작기능과 관련된 MQTT</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">중계서버 -> IOT기기\n\ntopic-name : \"기기호스트주소\"/action\naction : publish\nmessage : 스위치번호</code></pre></div>\n<p>기기동작기능과 관련된 HTTP</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">웹서버 -> 중계서버\n\nmethod : GET\nurl : device/action\nrequest-header : x-access-token(token)\nrequest-query : host,switch\nresponse-body : success(boolean),device(object)</code></pre></div>\n<h3 id=\"기기로그관리\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EA%B8%B0%EB%A1%9C%EA%B7%B8%EA%B4%80%EB%A6%AC\" aria-label=\"기기로그관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>기기로그관리</strong></h3>\n<p>중계서버는 각 <strong>기기상태가 변화할때마다</strong> 다음과 같은 DB테이블에 상태를 저장합니다.</p>\n<img src=\"https://user-images.githubusercontent.com/33706043/154886608-0c8de80d-381b-424c-9c31-e69c6911648b.png\" width=\"80%\">\n<p>DB 쿼리실행을 위해 쿼리빌더(Knex 라이브러리)를 이용하였습니다.</p>\n<h3 id=\"사용자인증\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%B8%EC%A6%9D\" aria-label=\"사용자인증 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>사용자인증</strong></h3>\n<p>사용자 인증방식은 <strong>토큰기반 인증방식</strong> 을 채택하였습니다.<br>\n사용자 토큰 발급 은 다음과 같은 단계를 거칩니다.</p>\n<ol>\n<li>사용자가 스마트 디바이스 메인화면에 표출된 중계서버의 외부주소를 입력하여 해당주소로 장소등록을 요청합니다.</li>\n<li>요청을 받은 중계서버는 인증번호를 생성하고 연결된 웹에 인증코드 표출 이벤트를 보냅니다.</li>\n<li>사용자가 인증번호를 확인하고 입력하여 중계서버에 확인 요청을 보냅니다.</li>\n<li>인증코드가 정상적으로 확인될 경우 중계서버는 토큰을 담아 응답합니다.</li>\n</ol>\n<p>위와같은 인증 절차를 사용한 이유는 <strong>사용자가 집에 설치된 스마트디바이스</strong> 만으로도 <strong>로그인 없이</strong>\n연결된 각 IOT기기들을 사용할 수 있게 하기 위해 육안으로 인증번호를 확인하여 입력하는 방식을 채택하였습니다.<br>\n이로써 사용자가 각 IoT기기들을 작동시킬수 있는 방법으로 두 가지 방법을 제공하게 되었습니다.</p>\n<ol>\n<li><strong>웹 페이지에 접속해 로그인을 한 후 각 IoT 기기동작요청</strong></li>\n<li><strong>집에 설치된 스마트디바이스(라즈베리파이) 로 각 IoT 기기동작요청</strong></li>\n</ol>\n<p>아래의 이미지는 위의 단계를 나타낸 것 입니다.</br></p>\n<img src=\"https://user-images.githubusercontent.com/33706043/154886681-271914a4-dc28-420b-8654-f867507f81f5.png\" width=\"80%\">\n<h2 id=\"api-document\" style=\"position:relative;\"><a href=\"#api-document\" aria-label=\"api document permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>API Document</h2>\n<img src=\"https://user-images.githubusercontent.com/33706043/144789602-1f93dd3d-53b3-4d5e-9c02-920fa32e3d41.png\" width=\"80%\">","id":"8f730f89-ecc3-5367-8602-f6d7d97b45b5","excerpt":"목차 개요 시스템구성도 중계서버 사용기술 주요기능 API Document 프로젝트 개요 본 프로젝트는 웹 통신을 이용한 IOT 스마트홈 구축 이란 주제로 잔행된 202…","tableOfContents":"<ul>\n<li>\n<p><a href=\"#%EB%AA%A9%EC%B0%A8\">목차</a></p>\n</li>\n<li>\n<p><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\">프로젝트 개요</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B5%AC%EC%84%B1%EB%8F%84\">시스템구성도</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%A4%91%EA%B3%84%EC%84%9C%EB%B2%84\">중계서버</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%82%AC%EC%9A%A9%EA%B8%B0%EC%88%A0\">사용기술</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%A3%BC%EC%9A%94%EA%B8%B0%EB%8A%A5\">주요기능</a></p>\n<ul>\n<li><a href=\"#%EA%B8%B0%EA%B8%B0%EB%93%B1%EB%A1%9D\"><strong>기기등록</strong></a></li>\n<li><a href=\"#%EA%B8%B0%EA%B8%B0%EB%8F%99%EC%9E%91%EC%9A%94%EC%B2%AD\"><strong>기기동작요청</strong></a></li>\n<li><a href=\"#%EA%B8%B0%EA%B8%B0%EB%A1%9C%EA%B7%B8%EA%B4%80%EB%A6%AC\"><strong>기기로그관리</strong></a></li>\n<li><a href=\"#%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%B8%EC%A6%9D\"><strong>사용자인증</strong></a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#api-document\">API Document</a></p>\n</li>\n</ul>","fields":{"slug":"/projects/BackEnd/10plusServer/"},"frontmatter":{"title":"10Plus-Server","date":"July 22 , 2021","tags":"스마트홈 중계서버"}}},"pageContext":{"slug":"/projects/BackEnd/10plusServer/","curSrcInsName":"index","previous":{"title":"CardMe","slug":"/projects/BackEnd/Cardme/","sourceInstanceName":"index"},"next":{"title":"10Plus-Kiosk","slug":"/projects/FrontEnd/10plusKiosk/","sourceInstanceName":"index"}}},
    "staticQueryHashes": ["1603766897","3484302218","993254799"]}