<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발일지</title>
    <link>https://devserver.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 23:19:48 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sorrypark1127</managingEditor>
    <item>
      <title>CSS 기초</title>
      <link>https://devserver.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;CSS3 : Cascading Style Sheets Level 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML 구조 위에 시각적 표현을 정의하고, 우선순위 규칙(cascade)과 모듈화된 기능들로 동적,반응형 UI를 구현하는 스타일 언어 규격&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-우선순위: !important &amp;gt; 인라인 스타일 &amp;gt; ID &amp;gt; 클래스/속성/의사클래스 &amp;gt; 태그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-소스순서 : 나중에 선언된 규칙이 우선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;h1 { color : red; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택자 {스타일속성 : 스타일값;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택자의 종류:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 선택자 - HTML 페이지 내부의 태그를 모두 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;283&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2Fihp/dJMcaiXQK0z/xszCgGpdopHwlD1zjriOK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2Fihp/dJMcaiXQK0z/xszCgGpdopHwlD1zjriOK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2Fihp/dJMcaiXQK0z/xszCgGpdopHwlD1zjriOK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2Fihp%2FdJMcaiXQK0z%2FxszCgGpdopHwlD1zjriOK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;109&quot; data-origin-width=&quot;283&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태그 선택자 - HTML 페이지 내부의 특정 태그를 모두 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lpjdt/dJMcadoHfxb/VubNHKDstKyzIkMV0uZ8xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lpjdt/dJMcadoHfxb/VubNHKDstKyzIkMV0uZ8xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lpjdt/dJMcadoHfxb/VubNHKDstKyzIkMV0uZ8xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flpjdt%2FdJMcadoHfxb%2FVubNHKDstKyzIkMV0uZ8xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;261&quot; height=&quot;111&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디 선택자 -특정 id 속성이 있는 태그 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RaWb5/dJMcahLtneO/NMhlfWlGzUWAKeozS9u4MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RaWb5/dJMcahLtneO/NMhlfWlGzUWAKeozS9u4MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RaWb5/dJMcahLtneO/NMhlfWlGzUWAKeozS9u4MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRaWb5%2FdJMcahLtneO%2FNMhlfWlGzUWAKeozS9u4MK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;90&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 선택자 - 특정 클래스가 있는 태그 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/62YjM/dJMcagsfRtC/KfJxdzh0XHqkx7TJrCnZW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/62YjM/dJMcagsfRtC/KfJxdzh0XHqkx7TJrCnZW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/62YjM/dJMcagsfRtC/KfJxdzh0XHqkx7TJrCnZW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F62YjM%2FdJMcagsfRtC%2FKfJxdzh0XHqkx7TJrCnZW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;234&quot; height=&quot;90&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsRiS7/dJMcaaMkQnX/DppTTwCPjb2YSBego4BJA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsRiS7/dJMcaaMkQnX/DppTTwCPjb2YSBego4BJA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsRiS7/dJMcaaMkQnX/DppTTwCPjb2YSBego4BJA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsRiS7%2FdJMcaaMkQnX%2FDppTTwCPjb2YSBego4BJA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;313&quot; height=&quot;97&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후손 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ByHfY/dJMcaalffTY/ZLfPyS9sl1hC7AClumrh2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ByHfY/dJMcaalffTY/ZLfPyS9sl1hC7AClumrh2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ByHfY/dJMcaalffTY/ZLfPyS9sl1hC7AClumrh2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FByHfY%2FdJMcaalffTY%2FZLfPyS9sl1hC7AClumrh2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;247&quot; height=&quot;102&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자손 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOURAF/dJMcagltpZr/NVIgnTgLK3eqMLWI02MB40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOURAF/dJMcagltpZr/NVIgnTgLK3eqMLWI02MB40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOURAF/dJMcagltpZr/NVIgnTgLK3eqMLWI02MB40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOURAF%2FdJMcagltpZr%2FNVIgnTgLK3eqMLWI02MB40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;252&quot; height=&quot;112&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반응 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTjGPY/dJMcaalffVk/lkjy73Ak5ntNTWkEnBySNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTjGPY/dJMcaalffVk/lkjy73Ak5ntNTWkEnBySNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTjGPY/dJMcaalffVk/lkjy73Ak5ntNTWkEnBySNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTjGPY%2FdJMcaalffVk%2Flkjy73Ak5ntNTWkEnBySNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;117&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPxlTE/dJMcada9NRn/fmXrjwzvE9Kc7WgECjkwW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPxlTE/dJMcada9NRn/fmXrjwzvE9Kc7WgECjkwW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPxlTE/dJMcada9NRn/fmXrjwzvE9Kc7WgECjkwW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPxlTE%2FdJMcada9NRn%2FfmXrjwzvE9Kc7WgECjkwW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;114&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조 선택자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KG3Df/dJMcabkeus2/pyhZNQE7RP8u3yzHMKT1u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KG3Df/dJMcabkeus2/pyhZNQE7RP8u3yzHMKT1u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KG3Df/dJMcabkeus2/pyhZNQE7RP8u3yzHMKT1u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKG3Df%2FdJMcabkeus2%2FpyhZNQE7RP8u3yzHMKT1u1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;379&quot; height=&quot;313&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;first-child : 가장 위에 위치한 자식&lt;/li&gt;
&lt;li&gt;last-child : 가장 마지막에 위치한 자식&lt;/li&gt;
&lt;li&gt;선택자: nth-child(2n) : 짝수번째에 위치한 자식/ 해당 자식이 선택자와 일치할 경우만 적용&lt;/li&gt;
&lt;li&gt;nth-last-child(2n+1): 마지막 위치를 기준으로 마지막위치의 자식을 제외한 홀수번째에 위치한 자식&lt;/li&gt;
&lt;li&gt;선택자:nth-of-type(2n) :선택자와 일치한 자식중 짝수번째에 위치한 자식&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIwyq/dJMcahksn2o/HWKNiSLVDxk1VKIs9EbMcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIwyq/dJMcahksn2o/HWKNiSLVDxk1VKIs9EbMcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIwyq/dJMcahksn2o/HWKNiSLVDxk1VKIs9EbMcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIwyq%2FdJMcahksn2o%2FHWKNiSLVDxk1VKIs9EbMcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;271&quot; height=&quot;97&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dejSaN/dJMcahSccD4/DfPGCtWA5sV5ynRR1LK0QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dejSaN/dJMcahSccD4/DfPGCtWA5sV5ynRR1LK0QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dejSaN/dJMcahSccD4/DfPGCtWA5sV5ynRR1LK0QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdejSaN%2FdJMcahSccD4%2FDfPGCtWA5sV5ynRR1LK0QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;187&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byVZY9/dJMcaiwQv7B/QStKTSnnN91SmtQWdYYQWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byVZY9/dJMcaiwQv7B/QStKTSnnN91SmtQWdYYQWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byVZY9/dJMcaiwQv7B/QStKTSnnN91SmtQWdYYQWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyVZY9%2FdJMcaiwQv7B%2FQStKTSnnN91SmtQWdYYQWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;432&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignLeft&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;동위 선택자:&amp;nbsp;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택자A + 선택자B : 선택자 A바로 뒤에 위치하는 선택자 B를 선택&lt;/li&gt;
&lt;li&gt;선택자A ~ 선택자B : 선택자 A 뒤에 위치하는 모든 선택자 B를 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크기단위: %, em(배수), cm, mm, inch, px&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;색상단위:&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;background-color: red;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;background-color: rgba(255,255,255,0.5);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;background-color: #00FF00&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;background-color: hsl(360, 100%, 50%); - 색상,채도,명도 / 색상 0~360&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;url단위:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;background-image: url('경로');&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;margin : 바깥쪽 여백&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;padding : 안쪽 여백&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;border : 테두리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;width, height ; 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;margin 20px : 모든 방향&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;margin 20px 10px : 위 아래 20px, 좌우 10px;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;margin 1px 2px 3px&amp;nbsp; : 위 1px, 좌우 2px, 아래 3px;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;margin 1px 2px 3px 4px : 상우하좌 순서대로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;박스테두리:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;border-width&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;border-style&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;border-color&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가시속성:\&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;display: none - 안보임/ block - 블록/ inline - 인라인 / inline-block - 둘다 합친거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경속성:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-image 이미지삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-size ; 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-repeat :반복여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-attachment : 부착형태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-position : 위치/ top left면 상단좌측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글자속성:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;font-size 폰트크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;font-family 글꼴, 'A','B'형식이면 A글꼴없으면 B로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글꼴종류:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;serif : 끝에 장식이 있는 전통적인 인쇄체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sans-serif : 장식없는 현대적인 글꼴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;monospace : 고정폭 글꼴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cursive : 필기체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fantasy : 장식적, 창의적인 글꼴, 판타지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글자 정렬:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;text-align&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요소 위치:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;position, /absolute relative 절대위치/상대위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;top,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bottom, left, right 등..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;z-index 깊이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hidden 영역 벗어나면 숨김&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scroll 벗어나면 스크롤&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;overflow-y : scroll 위와 동일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;float : left / 왼쪽에 요소 붙힘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림자:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;text-shadow: 1px 2px 3px black / 오른쪽 아래 흐림도 색상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그레이디언트: -moz-linear-gradient(top, 색상 0%, 색상 50%, 색상 ~ 100% . . .)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부정선택자:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;not&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹개발</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/11</guid>
      <comments>https://devserver.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 9 Jun 2026 10:00:34 +0900</pubDate>
    </item>
    <item>
      <title>MySQL +Java 연동</title>
      <link>https://devserver.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;만들어야할 테이블:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LorDY/dJMcaaew9RM/1XfX1UDPrOKQsq8zLQ53w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LorDY/dJMcaaew9RM/1XfX1UDPrOKQsq8zLQ53w0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LorDY/dJMcaaew9RM/1XfX1UDPrOKQsq8zLQ53w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLorDY%2FdJMcaaew9RM%2F1XfX1UDPrOKQsq8zLQ53w0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;284&quot; height=&quot;45&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼: ID, Title, Publisher, desc&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFdfTc/dJMcac4roFe/hyh1DAm0PTmVUCcKgizOKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFdfTc/dJMcac4roFe/hyh1DAm0PTmVUCcKgizOKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFdfTc/dJMcac4roFe/hyh1DAm0PTmVUCcKgizOKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFdfTc%2FdJMcac4roFe%2Fhyh1DAm0PTmVUCcKgizOKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;157&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br7W9E/dJMcahLtd31/L1YSFOb7cpBbQhOOx5AMU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br7W9E/dJMcahLtd31/L1YSFOb7cpBbQhOOx5AMU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br7W9E/dJMcahLtd31/L1YSFOb7cpBbQhOOx5AMU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr7W9E%2FdJMcahLtd31%2FL1YSFOb7cpBbQhOOx5AMU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;167&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8uOuZ/dJMcabdmqcB/khFxZKTKA6ToNffY7rf0dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8uOuZ/dJMcabdmqcB/khFxZKTKA6ToNffY7rf0dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8uOuZ/dJMcabdmqcB/khFxZKTKA6ToNffY7rf0dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8uOuZ%2FdJMcabdmqcB%2FkhFxZKTKA6ToNffY7rf0dK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;185&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB세팅 끝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ll7SU/dJMcabYO2gA/Zo4qCQ6Ughuyk6mnokYKZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ll7SU/dJMcabYO2gA/Zo4qCQ6Ughuyk6mnokYKZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ll7SU/dJMcabYO2gA/Zo4qCQ6Ughuyk6mnokYKZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fll7SU%2FdJMcabYO2gA%2FZo4qCQ6Ughuyk6mnokYKZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;471&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 클래스로 생성한 DTO, 원래 외부클래스로 만드는 것을 추천하는데&amp;nbsp; 학습용이라 귀찮아서 패스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 객체를 DB에서 가져오는 메서드를 따로 담당하는 클래스는 DAO로 관리하는게 정석이지만 이것도 귀찮으니 패스&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvzQlz/dJMcadCb8X3/ZzqmkZhF2E7hRpFmcTECl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvzQlz/dJMcadCb8X3/ZzqmkZhF2E7hRpFmcTECl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvzQlz/dJMcadCb8X3/ZzqmkZhF2E7hRpFmcTECl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvzQlz%2FdJMcadCb8X3%2FZzqmkZhF2E7hRpFmcTECl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;637&quot; height=&quot;449&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Refresh버튼과 연결&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yveH4/dJMcadWAbVm/a0VU1gtkspeV704TrJu7hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yveH4/dJMcadWAbVm/a0VU1gtkspeV704TrJu7hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yveH4/dJMcadWAbVm/a0VU1gtkspeV704TrJu7hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyveH4%2FdJMcadWAbVm%2Fa0VU1gtkspeV704TrJu7hk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;52&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 값 넣고 테스트&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cU2oEK/dJMcajblYyy/JwNZIUKlXCETKV2uEXz8K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cU2oEK/dJMcajblYyy/JwNZIUKlXCETKV2uEXz8K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cU2oEK/dJMcajblYyy/JwNZIUKlXCETKV2uEXz8K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcU2oEK%2FdJMcajblYyy%2FJwNZIUKlXCETKV2uEXz8K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1018&quot; height=&quot;47&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deN8OU/dJMcajoTdkL/T0v7NmZZyRm6k5Yvi44akK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deN8OU/dJMcajoTdkL/T0v7NmZZyRm6k5Yvi44akK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deN8OU/dJMcajoTdkL/T0v7NmZZyRm6k5Yvi44akK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeN8OU%2FdJMcajoTdkL%2FT0v7NmZZyRm6k5Yvi44akK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;131&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biXLwR/dJMcaf09uPI/P87VT7ATkfwpZwZvHjzOgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biXLwR/dJMcaf09uPI/P87VT7ATkfwpZwZvHjzOgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biXLwR/dJMcaf09uPI/P87VT7ATkfwpZwZvHjzOgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiXLwR%2FdJMcaf09uPI%2FP87VT7ATkfwpZwZvHjzOgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;579&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;getBooks() 메서드를 생성자의 마지막에 같이 넣어서, 프로그램을 실행하면 자동으로 가져오도록 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yLPSP/dJMcahkseo2/OHdvcYsAVuz86h4muaSNO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yLPSP/dJMcahkseo2/OHdvcYsAVuz86h4muaSNO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yLPSP/dJMcahkseo2/OHdvcYsAVuz86h4muaSNO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyLPSP%2FdJMcahkseo2%2FOHdvcYsAVuz86h4muaSNO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;153&quot; height=&quot;45&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 생성전에 이 메서드를 생성하면 오류 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 방식대로 삽입 메서드도 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhh5vw/dJMcaf09uYa/cb3Da2iir5xuGq2Sr7oTo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhh5vw/dJMcaf09uYa/cb3Da2iir5xuGq2Sr7oTo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhh5vw/dJMcaf09uYa/cb3Da2iir5xuGq2Sr7oTo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbhh5vw%2FdJMcaf09uYa%2Fcb3Da2iir5xuGq2Sr7oTo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;270&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회는 executeQuery() -&amp;gt; ResultSet 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입,제거,수정은 executeUpdate() -&amp;gt;&amp;nbsp; int 반환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cH85ze/dJMb99UbUOG/KXwZ3pGixDo8KKAzOvL0eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cH85ze/dJMb99UbUOG/KXwZ3pGixDo8KKAzOvL0eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH85ze/dJMb99UbUOG/KXwZ3pGixDo8KKAzOvL0eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH85ze%2FdJMb99UbUOG%2FKXwZ3pGixDo8KKAzOvL0eK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;539&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MY20U/dJMcagZ3a4w/UJ1HL71kiQCVFkxr8LDJm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MY20U/dJMcagZ3a4w/UJ1HL71kiQCVFkxr8LDJm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MY20U/dJMcagZ3a4w/UJ1HL71kiQCVFkxr8LDJm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMY20U%2FdJMcagZ3a4w%2FUJ1HL71kiQCVFkxr8LDJm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;411&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciWI2Q/dJMcaiQ7Vo4/SfO70qrO7LBdxpLOIYKbPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciWI2Q/dJMcaiQ7Vo4/SfO70qrO7LBdxpLOIYKbPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciWI2Q/dJMcaiQ7Vo4/SfO70qrO7LBdxpLOIYKbPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciWI2Q%2FdJMcaiQ7Vo4%2FSfO70qrO7LBdxpLOIYKbPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;590&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/delgqH/dJMcabkeliJ/CFucaTffqvJ5QK9CfDY5dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/delgqH/dJMcabkeliJ/CFucaTffqvJ5QK9CfDY5dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/delgqH/dJMcabkeliJ/CFucaTffqvJ5QK9CfDY5dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdelgqH%2FdJMcabkeliJ%2FCFucaTffqvJ5QK9CfDY5dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;293&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/10</guid>
      <comments>https://devserver.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 8 Jun 2026 23:28:43 +0900</pubDate>
    </item>
    <item>
      <title>도서관리프로그램 레이아웃</title>
      <link>https://devserver.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj43Y3/dJMcab5ykIb/ow0wlGEX1IFbRMLFV5eoLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj43Y3/dJMcab5ykIb/ow0wlGEX1IFbRMLFV5eoLK/img.png&quot; data-alt=&quot;AI를 사용해 기본 디자인 불러오기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj43Y3/dJMcab5ykIb/ow0wlGEX1IFbRMLFV5eoLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj43Y3%2FdJMcab5ykIb%2Fow0wlGEX1IFbRMLFV5eoLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;343&quot; height=&quot;501&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI를 사용해 기본 디자인 불러오기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMenuBar : File, Edit, View, Help&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPanel : 이건 뭐 넣어야할지 모르겠음/걍 장식용 빈칸&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JToolBar : Add New Book, Refresh, Search, Delete&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSplitPane: Categories, JTable&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPanel(좌측 카테고리) : JList&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zSEO7/dJMcabxGMD4/ikJo892EmT478JPTVSSeCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zSEO7/dJMcabxGMD4/ikJo892EmT478JPTVSSeCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zSEO7/dJMcabxGMD4/ikJo892EmT478JPTVSSeCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzSEO7%2FdJMcabxGMD4%2FikJo892EmT478JPTVSSeCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;225&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본구성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB47xC/dJMcagZ270A/5RBgiMEb73rjQ88gap6vh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB47xC/dJMcagZ270A/5RBgiMEb73rjQ88gap6vh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB47xC/dJMcagZ270A/5RBgiMEb73rjQ88gap6vh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB47xC%2FdJMcagZ270A%2F5RBgiMEb73rjQ88gap6vh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;591&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴바 구성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OtgnM/dJMcabqX6Wo/TKPBNgNBTPvB6KAzJeznF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OtgnM/dJMcabqX6Wo/TKPBNgNBTPvB6KAzJeznF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OtgnM/dJMcabqX6Wo/TKPBNgNBTPvB6KAzJeznF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOtgnM%2FdJMcabqX6Wo%2FTKPBNgNBTPvB6KAzJeznF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;92&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzLS9r/dJMcadCb6xy/YdwNdkBNwBxt0yrWInNR9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzLS9r/dJMcadCb6xy/YdwNdkBNwBxt0yrWInNR9k/img.png&quot; data-alt=&quot;상단에 배치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzLS9r/dJMcadCb6xy/YdwNdkBNwBxt0yrWInNR9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzLS9r%2FdJMcadCb6xy%2FYdwNdkBNwBxt0yrWInNR9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;387&quot; height=&quot;211&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상단에 배치 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XGlJZ/dJMcabqX7A9/eW2pxZ4A7mWPd5WrnX1K8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XGlJZ/dJMcabqX7A9/eW2pxZ4A7mWPd5WrnX1K8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XGlJZ/dJMcabqX7A9/eW2pxZ4A7mWPd5WrnX1K8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXGlJZ%2FdJMcabqX7A9%2FeW2pxZ4A7mWPd5WrnX1K8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;194&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인컨텐츠는 패널 따로 생성해서 CENTER에 둠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAVKbZ/dJMcajblWDz/ya5KpJnfRVTDLgbtGWMcJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAVKbZ/dJMcajblWDz/ya5KpJnfRVTDLgbtGWMcJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAVKbZ/dJMcajblWDz/ya5KpJnfRVTDLgbtGWMcJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAVKbZ%2FdJMcajblWDz%2Fya5KpJnfRVTDLgbtGWMcJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;589&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외관만 따지만 JToolBar를 사용하는것보다 버튼만 배치하는게 이쁘겠지만, 학습이 목표이기 때문에 최대한 다양하게 써본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3aWZy/dJMcahYY2hy/NvnRPEX6zkZWWXI0mlv5jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3aWZy/dJMcahYY2hy/NvnRPEX6zkZWWXI0mlv5jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3aWZy/dJMcahYY2hy/NvnRPEX6zkZWWXI0mlv5jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3aWZy%2FdJMcahYY2hy%2FNvnRPEX6zkZWWXI0mlv5jK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;295&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8RDwS/dJMcaiDBXwW/E7GkKKl0048KU335z9MKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8RDwS/dJMcaiDBXwW/E7GkKKl0048KU335z9MKkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8RDwS/dJMcaiDBXwW/E7GkKKl0048KU335z9MKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8RDwS%2FdJMcaiDBXwW%2FE7GkKKl0048KU335z9MKkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;268&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카테고리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnK2y0/dJMcabRYyLo/TGcRihmLgoRv66nT3bGVm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnK2y0/dJMcabRYyLo/TGcRihmLgoRv66nT3bGVm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnK2y0/dJMcabRYyLo/TGcRihmLgoRv66nT3bGVm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnK2y0%2FdJMcabRYyLo%2FTGcRihmLgoRv66nT3bGVm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;363&quot; height=&quot;339&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sl1sp/dJMb99UbSXY/V8kYan8WVGvCMOXAJ4ckNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sl1sp/dJMb99UbSXY/V8kYan8WVGvCMOXAJ4ckNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sl1sp/dJMb99UbSXY/V8kYan8WVGvCMOXAJ4ckNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsl1sp%2FdJMb99UbSXY%2FV8kYan8WVGvCMOXAJ4ckNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;153&quot; height=&quot;323&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9pBX6/dJMcahdEiQg/pkwC4aNCG6TFGL6BAQdkPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9pBX6/dJMcahdEiQg/pkwC4aNCG6TFGL6BAQdkPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9pBX6/dJMcahdEiQg/pkwC4aNCG6TFGL6BAQdkPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9pBX6%2FdJMcahdEiQg%2FpkwC4aNCG6TFGL6BAQdkPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;393&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjgTp/dJMb99UbTqD/pyCpLh0iKyd4PPNizScep0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjgTp/dJMb99UbTqD/pyCpLh0iKyd4PPNizScep0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjgTp/dJMb99UbTqD/pyCpLh0iKyd4PPNizScep0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjgTp%2FdJMb99UbTqD%2FpyCpLh0iKyd4PPNizScep0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;589&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 DB를 추가해볼 예정&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/9</guid>
      <comments>https://devserver.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 8 Jun 2026 22:08:53 +0900</pubDate>
    </item>
    <item>
      <title>GridBag 레이아웃</title>
      <link>https://devserver.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;GridBag레이아웃은 모든 격자의 크기가 동일하게 고정되어있는 Grid 레이아웃보다 더 자유롭다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWMzZV/dJMcadWz6UP/jIu0rs9wukM3PPvsSLkOYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWMzZV/dJMcadWz6UP/jIu0rs9wukM3PPvsSLkOYK/img.png&quot; data-alt=&quot;레이아웃 미적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWMzZV/dJMcadWz6UP/jIu0rs9wukM3PPvsSLkOYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWMzZV%2FdJMcadWz6UP%2FjIu0rs9wukM3PPvsSLkOYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;149&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레이아웃 미적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5brV7/dJMcaaS7vqf/bmcfqBMfqkdV3LMXoKAf10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5brV7/dJMcaaS7vqf/bmcfqBMfqkdV3LMXoKAf10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5brV7/dJMcaaS7vqf/bmcfqBMfqkdV3LMXoKAf10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5brV7%2FdJMcaaS7vqf%2FbmcfqBMfqkdV3LMXoKAf10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;476&quot; height=&quot;79&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 2행 2열로 만들어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DzEJm/dJMcac4rkcf/UNIRJOM0dBkDFItx5QM1l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DzEJm/dJMcac4rkcf/UNIRJOM0dBkDFItx5QM1l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DzEJm/dJMcac4rkcf/UNIRJOM0dBkDFItx5QM1l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDzEJm%2FdJMcac4rkcf%2FUNIRJOM0dBkDFItx5QM1l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;44&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 JFrame의 레이아웃을 GridBagLayout으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고GridBagConstraints 객체 생성.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 객체는 재사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNIDNq/dJMcaf09rbk/5dpbjK6Zj2z3EI6bcHTYq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNIDNq/dJMcaf09rbk/5dpbjK6Zj2z3EI6bcHTYq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNIDNq/dJMcaf09rbk/5dpbjK6Zj2z3EI6bcHTYq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNIDNq%2FdJMcaf09rbk%2F5dpbjK6Zj2z3EI6bcHTYq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;373&quot; height=&quot;294&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴포넌트를 add()할때, 뒤에 필요한 gbc객체를 넣어주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GL5yR/dJMcacKcXTe/UOm5jnE37y0RS04OUVEgO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GL5yR/dJMcacKcXTe/UOm5jnE37y0RS04OUVEgO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GL5yR/dJMcacKcXTe/UOm5jnE37y0RS04OUVEgO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGL5yR%2FdJMcacKcXTe%2FUOm5jnE37y0RS04OUVEgO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;361&quot; height=&quot;124&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여백을 추가해보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;25&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxtG2H/dJMcabLjUwT/5T3XPJZYKUAvnvGBnuYj30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxtG2H/dJMcabLjUwT/5T3XPJZYKUAvnvGBnuYj30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxtG2H/dJMcabLjUwT/5T3XPJZYKUAvnvGBnuYj30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxtG2H%2FdJMcabLjUwT%2F5T3XPJZYKUAvnvGBnuYj30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;260&quot; height=&quot;25&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;25&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7rYKw/dJMcaiQ7Pt8/UbGWK9ipKnMnDhVu8qpxS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7rYKw/dJMcaiQ7Pt8/UbGWK9ipKnMnDhVu8qpxS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7rYKw/dJMcaiQ7Pt8/UbGWK9ipKnMnDhVu8qpxS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7rYKw%2FdJMcaiQ7Pt8%2FUbGWK9ipKnMnDhVu8qpxS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;361&quot; height=&quot;121&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inserts파라미터는 첫번째부터 위,왼,아래, 오른쪽을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8MJfL/dJMcagFQgRy/5MTQlPb9tu6mXMctOlF8OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8MJfL/dJMcagFQgRy/5MTQlPb9tu6mXMctOlF8OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8MJfL/dJMcagFQgRy/5MTQlPb9tu6mXMctOlF8OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8MJfL%2FdJMcagFQgRy%2F5MTQlPb9tu6mXMctOlF8OK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;492&quot; height=&quot;482&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 라벨 부분에 weightx를1 주고, 텍스트필드에 0을 주는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXLOJu/dJMcada9BEg/kcUVnnoYQwWDHPlDKCXNUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXLOJu/dJMcada9BEg/kcUVnnoYQwWDHPlDKCXNUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXLOJu/dJMcada9BEg/kcUVnnoYQwWDHPlDKCXNUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXLOJu%2FdJMcada9BEg%2FkcUVnnoYQwWDHPlDKCXNUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;478&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 라벨에 0, 필드에 1&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1GvCa/dJMcaar4i9x/dZLB8AqiXysyWZr5YKQOW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1GvCa/dJMcaar4i9x/dZLB8AqiXysyWZr5YKQOW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1GvCa/dJMcaar4i9x/dZLB8AqiXysyWZr5YKQOW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1GvCa%2FdJMcaar4i9x%2FdZLB8AqiXysyWZr5YKQOW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;472&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.3 0.7&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLw3Jl/dJMcaaFCZev/PVleTBDUGh6Kt6buwGlWdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLw3Jl/dJMcaaFCZev/PVleTBDUGh6Kt6buwGlWdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLw3Jl/dJMcaaFCZev/PVleTBDUGh6Kt6buwGlWdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLw3Jl%2FdJMcaaFCZev%2FPVleTBDUGh6Kt6buwGlWdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;478&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여백 채우기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AsUI6/dJMcafNH0Vz/vAeYounkpza03NludGi8Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AsUI6/dJMcafNH0Vz/vAeYounkpza03NludGi8Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AsUI6/dJMcafNH0Vz/vAeYounkpza03NludGi8Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAsUI6%2FdJMcafNH0Vz%2FvAeYounkpza03NludGi8Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;27&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w9c6r/dJMcaaZRLoO/voy2k0ODnqKA2LxGxdZFmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w9c6r/dJMcaaZRLoO/voy2k0ODnqKA2LxGxdZFmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w9c6r/dJMcaaZRLoO/voy2k0ODnqKA2LxGxdZFmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw9c6r%2FdJMcaaZRLoO%2Fvoy2k0ODnqKA2LxGxdZFmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;98&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정 위치 바꾸기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;gbc&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;anchor&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = GridBagConstraints.&lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;EAST&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Pm37/dJMcacpS4qQ/QMjnURnMBSV8HtfzsH6Y0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Pm37/dJMcacpS4qQ/QMjnURnMBSV8HtfzsH6Y0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Pm37/dJMcacpS4qQ/QMjnURnMBSV8HtfzsH6Y0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Pm37%2FdJMcacpS4qQ%2FQMjnURnMBSV8HtfzsH6Y0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;110&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/8</guid>
      <comments>https://devserver.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 8 Jun 2026 20:17:25 +0900</pubDate>
    </item>
    <item>
      <title>기본 센서등 간단정리</title>
      <link>https://devserver.tistory.com/7</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdAvM/dJMcabxFE5o/rEfV89oFBZExjAexqP5ubK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdAvM/dJMcabxFE5o/rEfV89oFBZExjAexqP5ubK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdAvM/dJMcabxFE5o/rEfV89oFBZExjAexqP5ubK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsdAvM%2FdJMcabxFE5o%2FrEfV89oFBZExjAexqP5ubK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;153&quot; height=&quot;156&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버저(buzzer)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-단순한 소리내는 장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법: tone()함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tone(핀번호, 주파수, 소리길이/밀리초)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VdzCM/dJMcageHVkN/nzbTkj9FUKkJcrKQKhLQak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VdzCM/dJMcageHVkN/nzbTkj9FUKkJcrKQKhLQak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VdzCM/dJMcageHVkN/nzbTkj9FUKkJcrKQKhLQak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVdzCM%2FdJMcageHVkN%2FnzbTkj9FUKkJcrKQKhLQak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;158&quot; height=&quot;148&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모션감지센서(PIR센서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-적외선 인체감지 센서라고도 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법: pinMode()함수에 핀번호, INPUT으로 초기화한 다음 digitalRead(핀번호)로 정수값 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3oeYK/dJMcabEr5AG/wA6OeQJU88IFUsf1OqjOFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3oeYK/dJMcabEr5AG/wA6OeQJU88IFUsf1OqjOFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3oeYK/dJMcabEr5AG/wA6OeQJU88IFUsf1OqjOFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3oeYK%2FdJMcabEr5AG%2FwA6OeQJU88IFUsf1OqjOFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;261&quot; height=&quot;163&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초음파센서(ultrasonic 센서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-초음파를 Trig로 내보내서 Echo로 받아옴&lt;br /&gt;사용법: pinMode()함수를 사용해서 Trig핀을 OUTPUT, Echo핀을 INPUT으로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;초음파를 10us 정도 발사하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;digitalWrite(Trig핀, HIGH);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delayMicroseconds(10);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;digitalWrite(Trig핀, LOW);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 초음파의 거리를 받아오려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int duration = pulseIn(Echo핀, HIGH);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초음파의 속도는 340 m/s -&amp;gt; 34,000 cm/s 이고, 1초는 1000밀리초 -&amp;gt; 1,000,000마이크로초 이므로&lt;br /&gt;1마이크로초 동안 초음파는 34000/1000000 = 0.034cm/us 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Trig핀으로 발사된 초음파는 물체에 반사되어 Echo핀으로 돌아오는 것이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왕복거리까지 고려하여 계산한다면 0.034/2 = 0.017 cm/us고, duration에 0.017을 곱한값이 물체와 초음파센서의 거리(cm)다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거리 = 속력x시간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 = 거리/속력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 시간 t = 1cm/0.034us = 29.4... 이므로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초음파는 29.4 us마다 1cm 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;int&lt;/span&gt; &lt;span&gt;microsecondsToCentimeters&lt;/span&gt;&lt;span&gt;(&lt;span&gt;int&lt;/span&gt; microseconds)&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;microseconds &lt;/span&gt;&lt;span&gt;/ &lt;/span&gt;&lt;span&gt;&lt;span&gt;29&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/ &lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ap3wG/dJMcahSaWZX/ZQXJ6kTYyRNl0C1YJPhMCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ap3wG/dJMcahSaWZX/ZQXJ6kTYyRNl0C1YJPhMCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ap3wG/dJMcahSaWZX/ZQXJ6kTYyRNl0C1YJPhMCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAp3wG%2FdJMcahSaWZX%2FZQXJ6kTYyRNl0C1YJPhMCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;266&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&lt;span&gt;조이스틱&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;손가락 움직임을 두개의 가변저항으로 측정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-얘는 아날로그다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;사용법:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;조이스틱버튼은 pinMode()의 INPUT_PULLUP으로 초기화하고,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;이 버튼은 digitalRead를 통해 정수값으로 반환됨, HIGH일시 미클릭/ 아닐시 클릭&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;조이스틱은 각각 analogRead()를 통해 vertical, horizontal를 정수형으로 반환&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;vertical(x축)과 horizontal(y축)의 범위는 0~1023이다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cau4bX/dJMcahrbrCa/l1Fq1w3U6W5XH6D3eYUdZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cau4bX/dJMcahrbrCa/l1Fq1w3U6W5XH6D3eYUdZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cau4bX/dJMcahrbrCa/l1Fq1w3U6W5XH6D3eYUdZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcau4bX%2FdJMcahrbrCa%2Fl1Fq1w3U6W5XH6D3eYUdZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;243&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;가스센서&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-공기 중 이산화탄소 측정함&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &quot;MQ135.h&quot; 라이브러리 불러오고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MQ135 gasSensor = MQ135(아날로그핀)으로 객체생성,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;float ppm = gasSensor.getPPM(); 으로 농도측정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XZ3JB/dJMcag6PB3M/utsU6DCai0EIAxLouopUnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XZ3JB/dJMcag6PB3M/utsU6DCai0EIAxLouopUnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XZ3JB/dJMcag6PB3M/utsU6DCai0EIAxLouopUnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXZ3JB%2FdJMcag6PB3M%2FutsU6DCai0EIAxLouopUnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;216&quot; height=&quot;159&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RGB LED&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-그냥 LED 빨강,초록,파랑 섞어놓은거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포텐셔미터(가변저항기)로 읽는예제&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHu5tc/dJMcaiwO4vz/Zmhu7z7fjeK9vRvw7RKNR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHu5tc/dJMcaiwO4vz/Zmhu7z7fjeK9vRvw7RKNR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHu5tc/dJMcaiwO4vz/Zmhu7z7fjeK9vRvw7RKNR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHu5tc%2FdJMcaiwO4vz%2FZmhu7z7fjeK9vRvw7RKNR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;298&quot; height=&quot;360&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;165&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3MOjA/dJMcaci1BJt/M12fjkJO7ExKHiohcYK1Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3MOjA/dJMcaci1BJt/M12fjkJO7ExKHiohcYK1Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3MOjA/dJMcaci1BJt/M12fjkJO7ExKHiohcYK1Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3MOjA%2FdJMcaci1BJt%2FM12fjkJO7ExKHiohcYK1Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;165&quot; height=&quot;197&quot; data-origin-width=&quot;165&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서보모터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(모터의 종류는 DC모터,서보모터, 스텝모터가 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-아날로그 출력기능으로 PWM신호 0~180도 자유조작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;Servo.h&amp;gt; 라이브러리 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Servo servo; 객체선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;servo.attach(서보핀) 으로 서보 객체에 서보핀 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;servo.write(각도) 로 회전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 포텐셔미터로 각도를 조절하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;analogRead(포텐셔미터 핀)으로 정수값 0~1023을 받아오고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int angle = map(포텐셔미터값, 0, 1023, 0, 180); 으로 회전값 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map()함수는 특정값x를 a~z 에서 가-하 로 맵핑해서 선형적으로 변환함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OKwi9/dJMcadvqLIR/mpotKdXiGvlYOS74lxcwLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OKwi9/dJMcadvqLIR/mpotKdXiGvlYOS74lxcwLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OKwi9/dJMcadvqLIR/mpotKdXiGvlYOS74lxcwLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOKwi9%2FdJMcadvqLIR%2FmpotKdXiGvlYOS74lxcwLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;234&quot; height=&quot;268&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온습도 센서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-말그대로 온도와 습도를 확인하는 센서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;DHT.h&amp;gt; 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DHT dht(핀,DHT11);&amp;nbsp; //객체생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dht.begin()으로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dth.readTemperature() 이나 dth.readHumidity()로 온습도 float값으로 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 분명히&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include&amp;nbsp; &amp;lt;Wire.h&amp;gt; 라이브러리랑&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;DHT11.h&amp;gt; 불러오고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DHT11 dth; 객체 생성한다음에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int값으로 readTemperatureHumidity() 로 한번에 불러오는 방식이 있던것같은데 잊어먹음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt48it/dJMcaip3aGd/aRCvvDWI3ghfEJuV2IYaAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt48it/dJMcaip3aGd/aRCvvDWI3ghfEJuV2IYaAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt48it/dJMcaip3aGd/aRCvvDWI3ghfEJuV2IYaAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt48it%2FdJMcaip3aGd%2FaRCvvDWI3ghfEJuV2IYaAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;173&quot; height=&quot;106&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적외선 센서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pinMode()로 INPUT(입력모드)로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;digitalRead(핀)으로 정수값 반환하고, LOW면 탐지됨/HIGH면 탐지안된상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vP6Nh/dJMcajia5zi/oeFs1zwJ3QaNh7eJ8OyVfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vP6Nh/dJMcajia5zi/oeFs1zwJ3QaNh7eJ8OyVfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vP6Nh/dJMcajia5zi/oeFs1zwJ3QaNh7eJ8OyVfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvP6Nh%2FdJMcajia5zi%2FoeFs1zwJ3QaNh7eJ8OyVfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;133&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LCD(Liquid Crystal Display 액정 디스플레이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말그대로 액정을 사용한 디스플레이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;LiquidCrystal_I2C.h&amp;gt; 라이브러리 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiquidCrystal_I2C lcd(0x27, 16, 2); 객체생성, 0x27은 주소로 모듈마다 0x3F인 것도 있음/ 16열, 2행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lcd.init()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lcd.backlight()로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lcd.print()나 lcd.write()로 문자열출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lcd.setCursor(0,1); 으로 개행가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lcd.clear()로 다 지우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct14qs/dJMcafmBdPW/dMG2gMKOuW7gIQ3LVOitWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct14qs/dJMcafmBdPW/dMG2gMKOuW7gIQ3LVOitWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct14qs/dJMcafmBdPW/dMG2gMKOuW7gIQ3LVOitWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct14qs%2FdJMcafmBdPW%2FdMG2gMKOuW7gIQ3LVOitWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;349&quot; height=&quot;261&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LED matrix&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-상점 간판의 LED 디스플레이와 유사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-8x8 = 64개의 LED&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-세로(Column) 0~7, 가로(Row) 0~7&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-세로/가로번호로 LED on/off가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R7FGZ/dJMcahxVDkI/DTFkKTnk7GshZH3Y5KlL21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R7FGZ/dJMcahxVDkI/DTFkKTnk7GshZH3Y5KlL21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R7FGZ/dJMcahxVDkI/DTFkKTnk7GshZH3Y5KlL21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR7FGZ%2FdJMcahxVDkI%2FDTFkKTnk7GshZH3Y5KlL21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;239&quot; height=&quot;148&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;블루투스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial BTSerial(2,3);으로 TX,RX핀 초기화 -&amp;gt; 0,1번핀은 작동안됨, 우노보드에서 이미 USB시리얼통신에 사용되기때문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BTSerial.begin(9600);으로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BTSerial.available()이나 read(), write()가능 / Serial과 유사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블루투스 기기이름 바꾸려면 시리얼모니터에 AT -&amp;gt; OK뜨면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AT+NAMExxxx : xxxx로 이름변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AT+VERSION : 버전확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AT+PINxxxx : 페어링 비밀번호 xxxx로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Serial(UART)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hardware Serial&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-아두이노 시리얼 통신이 대표적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 통신 라인이 크로스 되어 연결됨 (RX, TX)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비동기식 : Clock 라인 없이 양측이 미리 합의된 클럭 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 두 장치의 클럭 간격을 미리 맞춰줘야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클럭 동기화 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 두 장치가 사용하는 클럭 생성기(crystal)의 주파수가 틀린 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 문제 방지를 위해 start/stop 비트 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Baudrate(통신속도 BPS), Start/Stop bit, Parity bit, Data chunk 9600 8N1 -&amp;gt; 9600 bps, 8bit data, No parity, 1 stop bit&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB5pRb/dJMcaaMjrst/mQOqUnXtkTfF2T2kqmfAXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB5pRb/dJMcaaMjrst/mQOqUnXtkTfF2T2kqmfAXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB5pRb/dJMcaaMjrst/mQOqUnXtkTfF2T2kqmfAXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB5pRb%2FdJMcaaMjrst%2FmQOqUnXtkTfF2T2kqmfAXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;139&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통신간 1:1연결만 지원함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start/stop 비트 때문에 오버헤드 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 구성이 복잡해짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Software Serial&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 UART포트가 부족할때 일반 디지털 핀을 이용해 가상의 시리얼 통신을 만드는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 예를들어 블루투스 모듈과 같은 장치를 추가로 연결하려는데 시리얼 통신이 필요함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; UNO보드는 UART가 1개뿐이기 때문에 SoftwareSerial 라이브러리가 디지털핀을 RX/TX처럼 소프트웨어ㄹ ㅗ동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftwareSerial s(2,3); = 2번 핀 -&amp;gt; 수신(RX), 3번핀 -&amp;gt; 송신(TX)으로 가상의 시리얼포트 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU가 직접 타이밍을 계산하여 처리, 인터럽트를 사용하고 CPU 부하 증가됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ef4WRe/dJMcaaZQE4o/o2ZjlNEL0dfk30xKAlljQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ef4WRe/dJMcaaZQE4o/o2ZjlNEL0dfk30xKAlljQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ef4WRe/dJMcaaZQE4o/o2ZjlNEL0dfk30xKAlljQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fef4WRe%2FdJMcaaZQE4o%2Fo2ZjlNEL0dfk30xKAlljQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;370&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I2C는 대표적인 동기식 시리얼통신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클럭 핀과 데이터핀이 서로 연결됨 (SCL,SDA)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시리얼통신과는 다르게&lt;span style=&quot;color: #ee2323;&quot;&gt; 1:N통신(Master-Slave&lt;/span&gt; 구조, 제한적 N:N)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결이 간단하고 데이터1라인으로 양방향통신하므로 상대적으로 느림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p59gF/dJMcad3iqsF/1QYR3Reky42JkHr89NiUtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p59gF/dJMcad3iqsF/1QYR3Reky42JkHr89NiUtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p59gF/dJMcad3iqsF/1QYR3Reky42JkHr89NiUtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp59gF%2FdJMcad3iqsF%2F1QYR3Reky42JkHr89NiUtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;260&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Master는 아두이노, 다른기기가 Slave&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Slave기기들은 고유 식별 ID(address)를 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCL(Serial Clock, 클럭 시그널), SDA (Serial Data, 데이터 전송)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-UNO 보드 계열 :A4(SDA), A5(SCL)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-Wire.h 라이브러리로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I2C 통신구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-메시지 기본구조 : 주소 프레임과 데이터 프레임 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-통신 시작 조건 : SCL(HIGH) -&amp;gt; SDA(HIGH to LOW)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-주소 프레임 : 통신 시작시 주소 프레임부터 전송, 수신할 slave 주소 표현, 1bit로 read/write, 마지막 1bit로 NACK/ACK표현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccimLz/dJMcag6PCU2/KHafHZhDAJ2U1hRhOo5w5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccimLz/dJMcag6PCU2/KHafHZhDAJ2U1hRhOo5w5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccimLz/dJMcag6PCU2/KHafHZhDAJ2U1hRhOo5w5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccimLz%2FdJMcag6PCU2%2FKHafHZhDAJ2U1hRhOo5w5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;481&quot; height=&quot;140&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>아두이노</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/7</guid>
      <comments>https://devserver.tistory.com/7#entry7comment</comments>
      <pubDate>Sun, 7 Jun 2026 00:25:50 +0900</pubDate>
    </item>
    <item>
      <title>게임용 매크로 프로그램</title>
      <link>https://devserver.tistory.com/6</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pudrJ/dJMcahLpKb5/8iFtxJ3K4rpy9xidgYg7Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pudrJ/dJMcahLpKb5/8iFtxJ3K4rpy9xidgYg7Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pudrJ/dJMcahLpKb5/8iFtxJ3K4rpy9xidgYg7Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpudrJ%2FdJMcahLpKb5%2F8iFtxJ3K4rpy9xidgYg7Y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;324&quot; height=&quot;352&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grok으로 1분 딸깍해서 만든 게임용 매크로 프로그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 존재하던 일부 게임들은 키입력 매크로가 채팅창을 제외한 부분에서 씹혀서 이를 해결하기 위해 만들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXwC1/dJMcaaMgQUP/Xm5d6ILWBD1Gn1UmDndJg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXwC1/dJMcaaMgQUP/Xm5d6ILWBD1Gn1UmDndJg1/img.png&quot; data-alt=&quot;정상적으로 작동됨, 단일 클릭은 키 유지를 해제/ 계속 움직이게 만들고싶으면 키 유지 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXwC1/dJMcaaMgQUP/Xm5d6ILWBD1Gn1UmDndJg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXwC1%2FdJMcaaMgQUP%2FXm5d6ILWBD1Gn1UmDndJg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;876&quot; height=&quot;695&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정상적으로 작동됨, 단일 클릭은 키 유지를 해제/ 계속 움직이게 만들고싶으면 키 유지 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드는 아래 사이트에서 하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sorrypgames.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sorrypgames.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780471719668&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SorryP &amp;mdash; Downloads&quot; data-og-description=&quot;Developer contact Questions, bugs, or feature requests &amp;mdash; reach out anytime.&quot; data-og-host=&quot;sorrypgames.netlify.app&quot; data-og-source-url=&quot;https://sorrypgames.netlify.app/&quot; data-og-url=&quot;https://sorrypgames.netlify.app/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://sorrypgames.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sorrypgames.netlify.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SorryP &amp;mdash; Downloads&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Developer contact Questions, bugs, or feature requests &amp;mdash; reach out anytime.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sorrypgames.netlify.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvulkQ/dJMcadWwn7S/cECHMamqhhBVjLtBq5vWr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvulkQ/dJMcadWwn7S/cECHMamqhhBVjLtBq5vWr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvulkQ/dJMcadWwn7S/cECHMamqhhBVjLtBq5vWr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvulkQ%2FdJMcadWwn7S%2FcECHMamqhhBVjLtBq5vWr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1257&quot; height=&quot;754&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발중인거</category>
      <category>Key macro</category>
      <category>macro</category>
      <category>macro program</category>
      <category>roblox</category>
      <category>로블록스</category>
      <category>로블록스 매크로</category>
      <category>로블록스.</category>
      <category>매크로</category>
      <category>키매크로</category>
      <category>키입력 매크로</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/6</guid>
      <comments>https://devserver.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 3 Jun 2026 16:30:38 +0900</pubDate>
    </item>
    <item>
      <title>[Mirror] #3 유니티로 데이터파일 직렬화/역직렬화</title>
      <link>https://devserver.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 웹서버 -&amp;gt; 유니티로 데이터를 JSON파일로 받아옴&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTLQzL/dJMcafsBEJH/E5lRlLaDxMSrXF1tQfRKv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTLQzL/dJMcafsBEJH/E5lRlLaDxMSrXF1tQfRKv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTLQzL/dJMcafsBEJH/E5lRlLaDxMSrXF1tQfRKv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTLQzL%2FdJMcafsBEJH%2FE5lRlLaDxMSrXF1tQfRKv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1022&quot; height=&quot;84&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON의 기본문법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &quot;키&quot; : 값 형태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체는 { }, 리스트는 [ ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 뭔가 더 있었던 것 같지만 일단 생략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 JSON파일 구조 분석:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 리스트타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 정수형 roomId, 문자열 roomName,문자열 hostAddress, 정수형 currentUserCount&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 JSON파일을 유니티의 클래스 형태로 반환하려면 역직렬화를 해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt;[Serializable]

public class Room{
    public int roomId;
    public string roomName;
    public string hostAddress;
    public int currentUserCount;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 위에 System.Serializable이 붙으면 직렬화/역직렬화 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON파일의 구조와 똑같이 구성하면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 {&quot;roomId&quot;:3,&quot;roomName&quot;:&quot;name&quot; . . . .} 형태로 작성될텐데, 우리가 받아온 JSON은 리스트에 담겨있었음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ {&quot;roomId&quot;:3, &quot;roomName&quot;:&quot;name&quot; . . . } , {&quot;roomId&quot;:4,&quot;roomName&quot;:&quot;name&quot; . . .} ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;php&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt;    [Serializable]
    public class RoomList
    {
        public List&amp;lt;Room&amp;gt; rooms = new List&amp;lt;Room&amp;gt;();

    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 받아온 JSON 파일을 역직렬화하기&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt;  RoomList roomList = JsonUtility.FromJson&amp;lt;RoomList&amp;gt;(json);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로, 직렬화는 ToJson()&amp;nbsp; (JSON 파일로)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버에서 데이터파일을 JSON형태로 받아왔는데, 그렇다고 유니티에서 웹서버로 데이터를 전송할때 이같은 직렬화 방식 외에도&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폼 데이터를 &quot;요청&quot;하는 방식을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt;private string baseUrl = &quot;http://localhost:8080/MarioGameServer&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt;IEnumerator CreateRoom()
{
    WWWForm form = new WWWForm();
    form.AddField(&quot;roomName&quot;, roomNameInputField.text);
    form.AddField(&quot;hostAddr&quot;, GetHostIP());
    using (UnityWebRequest www = UnityWebRequest.Post(baseUrl + &quot;/createRoom&quot;, form)) {
        yield return www.SendWebRequest();
        if (www.result != UnityWebRequest.Result.Success) {
            Debug.LogError(&quot;Error: &quot; + www.error);
        } else {
            Debug.Log(&quot;Room created successfully&quot;);
            Mirror.NetworkManager.singleton.StartHost();
            MyRoom.roomName = roomNameInputField.text;
            MyRoom.hostAddress = GetHostIP();
            SceneManager.LoadScene(&quot;Room&quot;);
                
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치 HTML의 &amp;lt;form&amp;gt; 태그안에 정보를 넣어서 전송하는 것과 같은 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿은 위 데이터를 파라미터 형태로 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미러 네트워크로 방장인 경우 StartHost(), 클라이언트인 경우 StartClient()로 방에 참여할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000;&quot;&gt;&lt;code&gt; public string hostAddr;
 public void JoinRoomBtnPressed()
 {
     if (string.IsNullOrEmpty(hostAddr)) return;
     Mirror.NetworkManager.singleton.networkAddress = hostAddr;
     Mirror.NetworkManager.singleton.StartClient();
     SceneManager.LoadScene(&quot;Room&quot;);
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEOyyj/dJMcaadMUTJ/iDiArF47CgNKLK4r3pAgF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEOyyj/dJMcaadMUTJ/iDiArF47CgNKLK4r3pAgF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEOyyj/dJMcaadMUTJ/iDiArF47CgNKLK4r3pAgF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEOyyj%2FdJMcaadMUTJ%2FiDiArF47CgNKLK4r3pAgF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;944&quot; height=&quot;503&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스트맨으로 방을 여러번 추가한 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTQm52/dJMcadhgdKo/XcyQbEUx2P7Ig49Ewlz2TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTQm52/dJMcadhgdKo/XcyQbEUx2P7Ig49Ewlz2TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTQm52/dJMcadhgdKo/XcyQbEUx2P7Ig49Ewlz2TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTQm52%2FdJMcadhgdKo%2FXcyQbEUx2P7Ig49Ewlz2TK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;333&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Qr3F/dJMcaf0qGmk/hPmCheBsCSqozJ7o8W1B5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Qr3F/dJMcaf0qGmk/hPmCheBsCSqozJ7o8W1B5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Qr3F/dJMcaf0qGmk/hPmCheBsCSqozJ7o8W1B5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Qr3F%2FdJMcaf0qGmk%2FhPmCheBsCSqozJ7o8W1B5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;880&quot; height=&quot;525&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;525&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test방 생성한 결과:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kVYi8/dJMcaaLCnCm/ICEh66gzYaBuQEk1xS51R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kVYi8/dJMcaaLCnCm/ICEh66gzYaBuQEk1xS51R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVYi8/dJMcaaLCnCm/ICEh66gzYaBuQEk1xS51R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkVYi8%2FdJMcaaLCnCm%2FICEh66gzYaBuQEk1xS51R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;508&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>유니티 네트워크</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/5</guid>
      <comments>https://devserver.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 7 Apr 2026 09:37:22 +0900</pubDate>
    </item>
    <item>
      <title>[Mirror] #2 유니티 + 웹서버로 DB연동</title>
      <link>https://devserver.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;학습목표 : 유니티에서 웹서버로 요청(request) 보내기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 내용: 방 목록, 플레이어 정보 등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버 역할: DB에서 방 목록, 플레이어 정보등을 DB에서 가져와서 유니티로 응답함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버를 사용하는 이유:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 데이터 저장,관리에 용이함.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 만들어두면 미러(Mirror)에서 로비, 방리스트, 계정 로그인 및 저장등을 간단하게 구현할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 나중에 게임홈페이지도 외부에 만들어서 연동할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. JSP공부겸 병행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS(오라클)에서 방 테이블 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;ROOMS&amp;nbsp;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ROOM_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NUMBER GENERATED AS IDENTITY PRIMARY KEY,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ROOM_NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VARCHAR2(100)&amp;nbsp;NOT&amp;nbsp;NULL, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HOST_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VARCHAR2(100) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PLAYERS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NUMBER(2)&amp;nbsp;DEFAULT&amp;nbsp;1, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LAST_UPDATE&amp;nbsp;&amp;nbsp;DATE&amp;nbsp;DEFAULT&amp;nbsp;SYSDATE &lt;br /&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방 테이블 : 방ID(기본키), 방이름, 방장 아이피, 플레이어 수, 방 생존신고 요청(?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방장 아이피랑, 생존신고를 설명하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 단일 서버 아이피주소로 모든 플레이어가 한 서버로 접속하도록 구현할 수 도 있지만(포톤 네트워크처럼)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 모든 네트워크 로직을 서버가 부담하게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 ngrok으로 무료 서버 도메인을 생성할건데, 클라이언트(플레이어) 수가 많을수록 부담이 갈까봐,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방장을 독립적은 서버로 설정하여 부담을 줄이려고함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, 방장이 나가면 방이 터짐)&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSErHz/dJMcaipkC8B/6CFdcxe9d2Pr8V5JFSamrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSErHz/dJMcaipkC8B/6CFdcxe9d2Pr8V5JFSamrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSErHz/dJMcaipkC8B/6CFdcxe9d2Pr8V5JFSamrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSErHz%2FdJMcaipkC8B%2F6CFdcxe9d2Pr8V5JFSamrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;190&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생존신고 기능이란 유령방을 제거하기 위해 만든 기능으로, 살아있는 방은 주기적으로 LAST_UPDATE를&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 시각으로 업데이트하여, 이후에 코드에서 업데이트 주기가 몇분 이내로 이루어지지않는 방은 자동으로 삭제하도록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바 DTO로 이동&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4fubt/dJMcabqdNZy/YfnGI7xnGDbY93luBJKOWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4fubt/dJMcabqdNZy/YfnGI7xnGDbY93luBJKOWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4fubt/dJMcabqdNZy/YfnGI7xnGDbY93luBJKOWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4fubt%2FdJMcabqdNZy%2FYfnGI7xnGDbY93luBJKOWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;850&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DTO는 DB의 테이블 구조와 똑같음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 속성과 getter, setter로만 이루어져있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DTO의 목적:말 그대로 DB의 테이블구조를 자바로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가져와서 사용하겠다는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-DAO 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DAO는 DBMS에서 사용하던 DML (조회, 수정, 삽입, 삭제)을 자바에서 처리하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rFGIP/dJMcab4No7L/ElI5W30zFiQkvj615EKVLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rFGIP/dJMcab4No7L/ElI5W30zFiQkvj615EKVLK/img.png&quot; data-alt=&quot;싱글톤&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rFGIP/dJMcab4No7L/ElI5W30zFiQkvj615EKVLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrFGIP%2FdJMcab4No7L%2FElI5W30zFiQkvj615EKVLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;635&quot; height=&quot;62&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;싱글톤&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 서블릿에서 이 DAO의 기능을 사용할때, 매번 DAO myDAO = new DAO () ... 이런식으로 사용하면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비효율적이니 싱글톤으로 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TH2jW/dJMcadBtbyS/DKTzFQOyfBx1lS1wKEiJzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TH2jW/dJMcadBtbyS/DKTzFQOyfBx1lS1wKEiJzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TH2jW/dJMcadBtbyS/DKTzFQOyfBx1lS1wKEiJzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTH2jW%2FdJMcadBtbyS%2FDKTzFQOyfBx1lS1wKEiJzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;314&quot; height=&quot;33&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KAYhM/dJMb996ZkZo/7R2kmeritsox6Q7H4pkhJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KAYhM/dJMb996ZkZo/7R2kmeritsox6Q7H4pkhJK/img.png&quot; data-alt=&quot;DAO의 생성자와, DataSource&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KAYhM/dJMb996ZkZo/7R2kmeritsox6Q7H4pkhJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKAYhM%2FdJMb996ZkZo%2F7R2kmeritsox6Q7H4pkhJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;193&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAO의 생성자와, DataSource&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Context는 src/main/webapp/META-INF의 context.xml파일에서 참조할때 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 애플리케이션의 설정과 자원을 관리함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TtxT4/dJMcajn9EOD/qljxlq6K87NBHPTFkukMMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TtxT4/dJMcajn9EOD/qljxlq6K87NBHPTFkukMMK/img.png&quot; data-alt=&quot;context.xml&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TtxT4/dJMcajn9EOD/qljxlq6K87NBHPTFkukMMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTtxT4%2FdJMcajn9EOD%2Fqljxlq6K87NBHPTFkukMMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;385&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;context.xml&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Resource /&amp;gt; 자원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;name 리소스이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auth 인증주체 (톰캣 = 컨테이너)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;type 자원타입, DAO에서 ctx = javax.sql.DataSource로 사용중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;driverClassName DB에서 제공하는 드라이버, 오라클은 odjbc17.jar, 오라클 홈페이지에서 다운받을수있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;249&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rOjRO/dJMcad2y4CG/7JfWWKZCcJ4vgL4pWs6na1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rOjRO/dJMcad2y4CG/7JfWWKZCcJ4vgL4pWs6na1/img.png&quot; data-alt=&quot;반드시 lib에 넣어야 사용가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rOjRO/dJMcad2y4CG/7JfWWKZCcJ4vgL4pWs6na1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrOjRO%2FdJMcad2y4CG%2F7JfWWKZCcJ4vgL4pWs6na1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;249&quot; height=&quot;141&quot; data-origin-width=&quot;249&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;반드시 lib에 넣어야 사용가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;username, password 오라클 DBMS에서 사용하던 계정정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maxTotal 최대 커넥션(연결) 개수( 커질수록 서버 부담도 커짐 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maxIdle&amp;nbsp; 사용되지 않고 대기할 수 있는 최대 커넥션의 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = (DataSource) &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.lookup(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;java:comp/env/jdbc/myoracle&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L2aeU/dJMcajuYnMg/wuytzU2ai59rWpHBkhwo71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L2aeU/dJMcajuYnMg/wuytzU2ai59rWpHBkhwo71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L2aeU/dJMcajuYnMg/wuytzU2ai59rWpHBkhwo71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2aeU%2FdJMcajuYnMg%2FwuytzU2ai59rWpHBkhwo71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;369&quot; height=&quot;32&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Context.lookup 메서드의 파라미터는 반드시 리소스의 이름과 같아야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;DataSource를 사용하는 이유:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 DataSource를 사용하지 않고도 DB기능을 사용할 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 DAO에서 searchPlayerInfo(), getRoomList() 등의 메서드가 존재한다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 메서드에서 DriverManager로 커넥션을 생성하고 기능을 수행한다음 커넥션을 닫은 과정을 반복해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 커넥션을 계속 만들때마다 딜레이가 생길 수 있고, 플레이어가 많다면 그만큼 커넥션이 생성되고 소멸하기를&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복하니까 서버에 부담이 늘어날 수 밖에 없음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfSWgB/dJMcai3RRtS/ZDmyHpeB4Pp0b32nRgATKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfSWgB/dJMcai3RRtS/ZDmyHpeB4Pp0b32nRgATKK/img.png&quot; data-alt=&quot;DataSource를 사용하지 않는 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfSWgB/dJMcai3RRtS/ZDmyHpeB4Pp0b32nRgATKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfSWgB%2FdJMcai3RRtS%2FZDmyHpeB4Pp0b32nRgATKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;691&quot; height=&quot;238&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DataSource를 사용하지 않는 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 DataSource를 사용하면 미리 커넥션을 만들어두고, 필요할때마다 이 커넥션을 불러다가 재사용하니 효율이 훨씬 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DAO 메서드 로직:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커넥션(Connection) 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PreparedStatement 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리(sql)를 PreparedStatement에 대입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PreparedStatement를 실행(execute)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행에도 두 종류가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;executeQuery() 와 executeUpdate()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query는 Select (조회) 전용, 조회결과는 ResultSet으로 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update는 실제 DB에 영향을 주는것 (Update, Delete, Insert)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 후에 ResultSet, PreparedStatement, Connection을 닫아야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;방생성 메서드 예시&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; insertRoom(Room &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Connection &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PreparedStatement &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;INSERT INTO ROOMS ( ROOM_NAME, HOST_ADDR, PLAYERS, LAST_UPDATE)&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; + &lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;VALUES ( ?, ?, 1, SYSDATE)&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getConnection();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.prepareStatement(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setString(1, &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getRoomName());&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setString(2, &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getHostAddress());&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.executeUpdate();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Exception &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.printStackTrace();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; closeAll(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;); // 따로 만든 메서드임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; -1;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sql문 안에 ? 라고 적혀있는 부분은 try문 안에있는 PreparedStatement.setString에서 대입함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 ?는 setStirng(1, &quot;내용&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 ?는 setString(2, &quot;내용&quot;)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;executeUpdate()로 실행하고 닫기&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; closeAll(Connection &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, PreparedStatement &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, ResultSet &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; != &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.close();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; != &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.close();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; != &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.close();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Exception &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.printStackTrace();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방 목록 가져오기 메서드(SELECT 문)&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; List&amp;lt;Room&amp;gt; getRoomList(){&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; deleteExpiredRooms(); //따로 만든 메서드임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; List&amp;lt;Room&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ArrayList&amp;lt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Connection &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PreparedStatement &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ResultSet &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;SELECT * FROM ROOMS ORDER BY ROOM_ID DESC&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getConnection();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.prepareStatement(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.executeQuery();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.next()) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Room &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Room();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setRoomId(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getInt(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;ROOM_ID&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setRoomName(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getString(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;ROOM_NAME&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setHostAddress(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getString(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;HOST_ADDR&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setCurrentUserCount(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getInt(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;PLAYERS&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.add(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Exception &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.printStackTrace();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; { closeAll(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;rs&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;); }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Insert문과 비슷하지만 executeQuery는 ResultSet으로 반환함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 반환되는 ResultSet의 값은 여러개일 수 있으니 while문으로 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rs.next() : result의 다음 행이 존재하면 true반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방 제거도 insert와 비슷한 원리고, 오래된 방 제거하는 메서드는 다음과 같음&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; deleteExpiredRooms() {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Connection &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PreparedStatement &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;DELETE FROM ROOMS WHERE LAST_UPDATE &amp;lt; (SYSDATE - INTERVAL '2' MINUTE)&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getConnection();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.prepareStatement(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.executeUpdate();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Exception &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.printStackTrace();}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; closeAll(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 LAST_UPDATE값을 새로고침(생존신고)하는 메서드&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; updateHeartbeat(&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;roomId&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Connection &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PreparedStatement &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;UPDATE ROOMS SET LAST_UPDATE = SYSDATE WHERE ROOM_ID = ?&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #0000c0;&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getConnection();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.prepareStatement(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;sql&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setInt(1, &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;roomId&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.executeUpdate();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Exception &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) {&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.printStackTrace();}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {closeAll(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;conn&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;pstmt&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;); }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 DTO와 DAO를 작성했다면 자바에서 남은건 서블릿 뿐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿이란 웹 애플리케이션에서 클라이언트의 요청을 받아 처리하고 응답으로 반환함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지의 내용을 종합해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DTO : 테이블&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DAO : DB에서 사용하던 쿼리를 쓰기좋게 메서드로 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿 : 클라이언트-웹서버 통신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 방생성 서블릿:&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #646464;&quot;&gt;@WebServlet&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;/createRoom&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RoomCreateServlet&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;extends&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; HttpServlet {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;protected&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; doPost(HttpServletRequest &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, HttpServletResponse &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ServletException, IOException {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setCharacterEncoding(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setContentType(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;application/json;charset=UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;roomName&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getParameter(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;roomName&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;hostAddr&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getParameter(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;hostAddr&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Room &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Room();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setRoomName(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;roomName&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.setHostAddress(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;hostAddr&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; RoomDAO &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;dao&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = RoomDAO.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;dao&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.insertRoom(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;room&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PrintWriter &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.getWriter();&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;gt; 0) {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.print(&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Gson().toJson(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #6a3e3e;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.print(&lt;/span&gt;&lt;span style=&quot;color: #7f0055;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Gson().toJson(&lt;/span&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&quot;fail&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; }&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzVtCd/dJMcagdZdMw/PIfh22gjyc6drvHCMO6WU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzVtCd/dJMcagdZdMw/PIfh22gjyc6drvHCMO6WU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzVtCd/dJMcagdZdMw/PIfh22gjyc6drvHCMO6WU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzVtCd%2FdJMcagdZdMw%2FPIfh22gjyc6drvHCMO6WU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;52&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://프로젝트이름/createRoom 이라는 사이트 주소로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어가면 아래 클래스(서블릿) 실행한다는 뜻&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿을 사용하려면 HttpServlet을 상속받아야하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;doPost()메서드나 doGet()메서드를 작성할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Post는 전송, Get은 가져오기 같은 느낌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 클라이언트가 /createRoom 으로 들어갈때, 서버 입장에서는 이것은 요청(request)고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방이름이랑 방장의 아이피주소 데이터를 같이 가지고 가는데 이러한 데이터는 파라미터다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 결과값을 클라이언트한테 반환할때는 응답(response)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 DTO에 위 데이터를 집어넣고 DAO의 방 만들기 메서드 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 유니티 - 웹서버 간의 데이터 전송 타입은 JSON으로 할 예정이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON을 사용할거면 손코딩으로 JSON형식으로 변환하던지, GSON이나 JACKSON라이브러리 사용은 개인취향에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞춰서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링부트는 JACKSON 라이브러리를 기본적으로 가지고있는걸로 알고있고, 글쓴이는 이클립스에서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GSON라이브러리를 따로 다운받아 사용중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDC2JS/dJMcaf0pwjs/ZepCypw5nvvbFAGuGEMKOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDC2JS/dJMcaf0pwjs/ZepCypw5nvvbFAGuGEMKOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDC2JS/dJMcaf0pwjs/ZepCypw5nvvbFAGuGEMKOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDC2JS%2FdJMcaf0pwjs%2FZepCypw5nvvbFAGuGEMKOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;57&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beV01K/dJMb99TrwH5/4WZehHpoxsYCRc6TEJE7O0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beV01K/dJMb99TrwH5/4WZehHpoxsYCRc6TEJE7O0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beV01K/dJMb99TrwH5/4WZehHpoxsYCRc6TEJE7O0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeV01K%2FdJMb99TrwH5%2F4WZehHpoxsYCRc6TEJE7O0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;154&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런느낌으로 각 서블릿을 만들어서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버를 개발할때 POSTMAN을 사용하면 테스트할때 용이하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1523&quot; data-origin-height=&quot;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I54Mc/dJMcaaEQMzd/zekFGiXZEGZT0WBQWNDT6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I54Mc/dJMcaaEQMzd/zekFGiXZEGZT0WBQWNDT6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I54Mc/dJMcaaEQMzd/zekFGiXZEGZT0WBQWNDT6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI54Mc%2FdJMcaaEQMzd%2FzekFGiXZEGZT0WBQWNDT6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1523&quot; height=&quot;927&quot; data-origin-width=&quot;1523&quot; data-origin-height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JtVa4/dJMcabjsyIY/mfVftis2YiXITy53Vr6KGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JtVa4/dJMcabjsyIY/mfVftis2YiXITy53Vr6KGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JtVa4/dJMcabjsyIY/mfVftis2YiXITy53Vr6KGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJtVa4%2FdJMcabjsyIY%2FmfVftis2YiXITy53Vr6KGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;903&quot; height=&quot;889&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;POSTMAN으로 실행결과에 문제가 없다면 유니티로 넘어갈 차례다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #121314; color: #bbbebf;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;System&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Collections&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;System&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Collections&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Generic&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;UnityEngine&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;UnityEngine&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Networking&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff7b72;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;NetworkManager&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;MonoBehaviour&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff7b72;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;baseUrl&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #a5d6ff;&quot;&gt;&quot;http://localhost:8080/MarioGameServer&quot;&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ff7b72;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;Start&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;StartCoroutine&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;GetRoomList&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;());&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;IEnumerator&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;GetRoomList&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;UnityWebRequest&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;UnityWebRequest&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;Get&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;baseUrl&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #a5d6ff;&quot;&gt;&quot;/getRooms&quot;&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;)){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;yield&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;SendWebRequest&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;UnityWebRequest&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;Result&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;Success&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;Debug&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;LogError&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a5d6ff;&quot;&gt;&quot;Error: &quot;&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ff7b72;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;www&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;downloadHandler&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;Debug&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #d2a8ff;&quot;&gt;Log&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a5d6ff;&quot;&gt;&quot;Room List: &quot;&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스트맨에서 했던 것처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UnityWebRequest.Get타입으로 요청보내기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yield return SendWebRequest() 응답이 올때까지 대기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;www.result 통신 성공여부 체크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;downloadHandler.text : response.getWriter().print()로 보낸 JSON값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uk76s/dJMcaa5T3qY/d8ZRhBT2kXkVXrEHPw7xEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uk76s/dJMcaa5T3qY/d8ZRhBT2kXkVXrEHPw7xEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uk76s/dJMcaa5T3qY/d8ZRhBT2kXkVXrEHPw7xEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUk76s%2FdJMcaa5T3qY%2Fd8ZRhBT2kXkVXrEHPw7xEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1036&quot; height=&quot;224&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>유니티 네트워크</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/4</guid>
      <comments>https://devserver.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 5 Apr 2026 14:20:49 +0900</pubDate>
    </item>
    <item>
      <title>[Mirror] #1 초기세팅</title>
      <link>https://devserver.tistory.com/3</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfvrKo/dJMcahYdHAW/kyOSeVFHIfcMZqi4gMJd2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfvrKo/dJMcahYdHAW/kyOSeVFHIfcMZqi4gMJd2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfvrKo/dJMcahYdHAW/kyOSeVFHIfcMZqi4gMJd2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfvrKo%2FdJMcahYdHAW%2FkyOSeVFHIfcMZqi4gMJd2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1146&quot; height=&quot;838&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;838&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에셋 스토어에서 Mirror Network 다운 및 임포트.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;1083&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5BLkD/dJMb996XJoj/0d2H6jNWyNJwREYY4qAedK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5BLkD/dJMb996XJoj/0d2H6jNWyNJwREYY4qAedK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5BLkD/dJMb996XJoj/0d2H6jNWyNJwREYY4qAedK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5BLkD%2FdJMb996XJoj%2F0d2H6jNWyNJwREYY4qAedK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;477&quot; height=&quot;1083&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;1083&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;빈 오브젝트 생성 및 Network Manager 컴포넌트 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network info 항목에 Transport 체크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;None (Transport)&amp;nbsp; 상태면 KCP Transport 컴포넌트 추가후 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 매니저는 싱글톤이기 때문에 2개 이상 생성시 충돌함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Player Object&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 접속시 자동으로 플레이어 프리팹 생성 여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hkv8T/dJMcaadJ9s6/zBedWobzdOMWWygHDVu9wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hkv8T/dJMcaadJ9s6/zBedWobzdOMWWygHDVu9wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hkv8T/dJMcaadJ9s6/zBedWobzdOMWWygHDVu9wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHkv8T%2FdJMcaadJ9s6%2FzBedWobzdOMWWygHDVu9wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;446&quot; height=&quot;285&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 테스트를 위해서 Network Manager HUB 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BH7lz/dJMcacijRaA/RAKzvtMbH8G3MdGPIu2pf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BH7lz/dJMcacijRaA/RAKzvtMbH8G3MdGPIu2pf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BH7lz/dJMcacijRaA/RAKzvtMbH8G3MdGPIu2pf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBH7lz%2FdJMcacijRaA%2FRAKzvtMbH8G3MdGPIu2pf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;174&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2bDnv/dJMcacijRb3/oktUukjLUuEDQmNhRzquVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2bDnv/dJMcacijRb3/oktUukjLUuEDQmNhRzquVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2bDnv/dJMcacijRb3/oktUukjLUuEDQmNhRzquVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2bDnv%2FdJMcacijRb3%2FoktUukjLUuEDQmNhRzquVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1096&quot; height=&quot;613&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rCAee/dJMcagdXC40/jnZRHFOWRuku6jFXaB30j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rCAee/dJMcagdXC40/jnZRHFOWRuku6jFXaB30j0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rCAee/dJMcagdXC40/jnZRHFOWRuku6jFXaB30j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrCAee%2FdJMcagdXC40%2FjnZRHFOWRuku6jFXaB30j0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;280&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이어 프리팹 생성 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network Identity 컴포넌트 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 객체 식별용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRQbUQ/dJMcafsyTvG/qklZDnKFkFMbpWDnTk0Tyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRQbUQ/dJMcafsyTvG/qklZDnKFkFMbpWDnTk0Tyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRQbUQ/dJMcafsyTvG/qklZDnKFkFMbpWDnTk0Tyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRQbUQ%2FdJMcafsyTvG%2FqklZDnKFkFMbpWDnTk0Tyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;105&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실시간 위치 정보 동기화 컴포넌트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network Transform Reliable (정확성 중심 , TCP)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network Transform Unreliable (속도 중심, UDP )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network Transform Hybrid (둘다 섞은거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hybrid 선택 후 추가, Network Manager에 플레이어 프리팹으로 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFQVgo/dJMcad2xuoy/xir1tCige97QNVSIijwKXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFQVgo/dJMcad2xuoy/xir1tCige97QNVSIijwKXk/img.png&quot; data-alt=&quot;플레이어 생성됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFQVgo/dJMcad2xuoy/xir1tCige97QNVSIijwKXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFQVgo%2FdJMcad2xuoy%2Fxir1tCige97QNVSIijwKXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;629&quot; height=&quot;304&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;플레이어 생성됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>유니티 네트워크</category>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/3</guid>
      <comments>https://devserver.tistory.com/3#entry3comment</comments>
      <pubDate>Fri, 3 Apr 2026 10:03:54 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 JS 클라이언트-서버 통신</title>
      <link>https://devserver.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 전달하기&amp;nbsp; (js)&lt;/p&gt;
&lt;pre id=&quot;code_1698206916279&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; fetch('/api/give', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(dataToSend)
    })
        .then(response =&amp;gt; {
            if (response.ok) {
                console.log('데이터를 서버로 전송했습니다.');
            }
        })
        .catch(error =&amp;gt; {
            console.error('데이터 전송 중 오류 발생: ' + error);
        });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 받기 (js)&lt;/p&gt;
&lt;pre id=&quot;code_1698206974175&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    fetch(&quot;/api/hello&quot;)
        .then(response =&amp;gt; response.text())
        .then(data =&amp;gt; {
            console.log(data);
        });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 (java)&lt;/p&gt;
&lt;pre id=&quot;code_1698207000928&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestController
@RequestMapping(&quot;/api&quot;)
public class testHello {
    int n = 0;
    @GetMapping(&quot;/hello&quot;)
    public int sayHello(){
        return n;
    }

    @PostMapping(&quot;/give&quot;)
    public int giveHello(@RequestBody int n1){
        n = n1;
        return n;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행시 404 에러가 뜬다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mapping경로가 잘못됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;or&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 위치가&amp;nbsp; 잘못됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;209&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ezAArO/btsy8bAVARk/zReAEmizpHS5WzegBF4WJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ezAArO/btsy8bAVARk/zReAEmizpHS5WzegBF4WJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ezAArO/btsy8bAVARk/zReAEmizpHS5WzegBF4WJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezAArO%2Fbtsy8bAVARk%2FzReAEmizpHS5WzegBF4WJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;209&quot; height=&quot;78&quot; data-origin-width=&quot;209&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체코드&lt;/p&gt;
&lt;pre id=&quot;code_1698206826465&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.sorryp.helloworld.controller;


import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(&quot;/api&quot;)
public class testHello {
    int n = 0;
    @GetMapping(&quot;/hello&quot;)
    public int sayHello(){
        return n;
    }

    @PostMapping(&quot;/give&quot;)
    public int giveHello(@RequestBody int n1){
        n = n1;
        return n;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1698206857632&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;My Title&amp;lt;/title&amp;gt;
    &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div class=&quot;banner_top&quot;&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;button id=&quot;testBtn&quot;&amp;gt;Get Data&amp;lt;/button&amp;gt;
    &amp;lt;button id=&quot;receiveBtn&quot;&amp;gt;Send Data&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src=&quot;script.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1698206872824&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var btn = document.getElementById(&quot;testBtn&quot;);
btn.onclick = function() {
    fetch(&quot;/api/hello&quot;)
        .then(response =&amp;gt; response.text())
        .then(data =&amp;gt; {
            console.log(data);
        });
};

var re = document.getElementById((&quot;receiveBtn&quot;));

var dataToSend = 5;
re.onclick = function(){
    fetch('/api/give', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(dataToSend)
    })
        .then(response =&amp;gt; {
            if (response.ok) {
                console.log('데이터를 서버로 전송했습니다.');
            }
        })
        .catch(error =&amp;gt; {
            console.error('데이터 전송 중 오류 발생: ' + error);
        });
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>sorrypark1127</author>
      <guid isPermaLink="true">https://devserver.tistory.com/2</guid>
      <comments>https://devserver.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 25 Oct 2023 13:10:53 +0900</pubDate>
    </item>
  </channel>
</rss>