<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>8pdev 님의 블로그</title>
    <link>https://8pdev.tistory.com/</link>
    <description>한양대 ERICA 로봇융합전공</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 06:28:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>8pdev</managingEditor>
    <image>
      <title>8pdev 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7258320/attach/24215e5eb4154f9785c21d472fa3e289</url>
      <link>https://8pdev.tistory.com</link>
    </image>
    <item>
      <title>[PCB Design] PCB설계의 필수 기초 지식</title>
      <link>https://8pdev.tistory.com/9</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;PCB제작에 필요한 필수 용어들&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;Trace (트레이스 / 배선):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부품과 부품을 연결하여 전기가 흐르는 구리선(길)입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;Pad (패드):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부품의 다리를 납땜하기 위해 솔더 마스크를 덮지 않고 구리를 노출시켜 놓은 부분입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;Via (비아):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;서로 다른 Layer의 구리선들을 연결해 주는 작은 구멍입니다. 구멍 벽면에 구리 도금이 되어 있어 위층과 아래층에 전기가 통하게 해줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,3,0&quot;&gt;Footprint (풋프린트 / Land Pattern):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;특정 부품이 PCB 위에 안착하기 위해 필요한 패드들의 물리적인 크기와 배치 형태를 말합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,4,0&quot;&gt;Gerber File (거버 파일):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설계를 마치고 공장에 PCB 제작을 의뢰할 때 사용하는 국제 표준 도면 파일입니다. (각 층마다 하나의 거버 파일이 생성됩니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PCB&amp;nbsp; Layers&lt;/h2&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;PCB는 단일 판이 아니라, 여러 겹의 층(Layer)으로 이루어진 샌드위치와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bga93V/dJMcaaEYQjh/M1ZGyxyzL1NawUkK3wP7o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bga93V/dJMcaaEYQjh/M1ZGyxyzL1NawUkK3wP7o0/img.png&quot; data-alt=&quot;https://www.viasion.com/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bga93V/dJMcaaEYQjh/M1ZGyxyzL1NawUkK3wP7o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbga93V%2FdJMcaaEYQjh%2FM1ZGyxyzL1NawUkK3wP7o0%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;548&quot; height=&quot;409&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.viasion.com/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-path-to-node=&quot;5&quot;&gt;
&lt;li&gt;&lt;b data-path-to-node=&quot;5,3,0&quot; data-index-in-node=&quot;0&quot;&gt;Silkscreen (실크스크린):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부품의 위치, 번호, 로고, 극성 표시 등 사람이 읽을 수 있는 글자나 그림을 하얗게 인쇄하는 최상단 층입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,2,0&quot;&gt;Solder Mask (솔더 마스크):&lt;/b&gt; 구리층이 공기 중에 산화되거나, 납땜 시 다른 금속과 닿아 합선되는 것을 막기 위해 덮어주는 절연 도료입니다. 우리가 흔히 아는 PCB의 초록색, 파란색, 검은색 표면이 바로 이 층입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;Copper (동박 / 구리층):&lt;/b&gt; 전기가 통하는 길입니다. 얇은 구리판을 기판에 붙인 뒤, 불필요한 부분을 화학 용액으로 녹여내어(에칭) 우리가 원하는 회로 선만 남깁니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;Substrate (기판 / FR4):&lt;/b&gt; PCB의 뼈대가 되는 절연 물질입니다. 주로 유리 섬유 에폭시 수지인 'FR4'라는 단단한 재질을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;설계 툴에서 다루는 기능적 레이어의 종류&lt;/h2&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;앞서 말씀드린 구리층, 실크스크린 등은 물리적인 재질에 가깝다면, 설계 프로그램 안에서는 이를 목적에 따라 세분화해서 다룹니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,0&quot;&gt;Signal Layer (신호층):&lt;/b&gt; 전기적 신호가 지나가는 실제 Trace을 그리는 구리층입니다. 주로 최상단과 최하단(Bottom)을 사용하지만, 다층 기판에서는 내부 Layer도 신호층으로 사용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,1,0&quot;&gt;Plane Layer (플레인층 / 전원, GND 층):&lt;/b&gt; Trace으로 연결하지 않고, 층 전체 또는 넓은 영역을 통째로 구리로 채워버리는 층입니다. 주로 시스템 전체에 안정적으로 전기를 공급하기 위해 VCC나&amp;nbsp;GND전용으로 사용합니다. (주로 4층 이상의 기판에서 내부 층으로 설정합니다.)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,2,0&quot;&gt;Paste Mask Layer (페이스트 마스크):&lt;/b&gt; SMT 부품을 기판에 붙일 때 사용하는 Solder Paste을 바를 위치를 지정하는 층입니다. 이 레이어의 도면을 바탕으로 구멍이 뚫린 얇은 철판(스텐실)을 만들어 기판 위에 대고 납을 긁어 바르게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,3,0&quot;&gt;Edge Cuts / Mechanical Layer (외곽선 및 기구 층):&lt;/b&gt; PCB의 최종적인 외곽선 모양, 나사를 박기 위한 마운팅 홀, V-cut(기판을 쉽게 똑 부러뜨릴 수 있게 파놓은 홈) 등 기계적인 가공 정보를 공장에 전달하는 층입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,4,0&quot;&gt;Keep-out Layer (접근 금지 영역):&lt;/b&gt; &quot;이 구역에는 배선이나 부품을 배치하지 마시오&quot;라고 툴에게 지시하는 보이지 않는 역할 입니다. 안테나가 있는 모듈 주변이나, 높은 전압이 흐르는 곳을 격리할 때 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Layer의 종류&lt;/h2&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1층 레이어 (Single-Sided PCB), 단면 기판&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기판의 한쪽 면에만 구리 배선(회로)이 형성된 형태입니다.&lt;/li&gt;
&lt;li&gt;구조가 단순해서 제작 비용이 매우 저렴합니다.&lt;/li&gt;
&lt;li&gt;회로가 복잡하지 않은 가전제품(리모컨, 단순한 LED 조명, 전원 공급 장치 등)에 주로 쓰입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2층 레이어 (Double-Sided PCB), 양면 기판&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;절연판의 앞면과 뒷면 모두에 회로가 있는 형태입니다.&lt;/li&gt;
&lt;li&gt;앞면과 뒷면의 회로는 비아(Via)라고 불리는 작은 구멍을 통해 서로 연결됩니다.&lt;/li&gt;
&lt;li&gt;산업용 기기, 조금 더 복잡한 가전제품, 아두이노 같은 DIY 보드 등 가장 대중적으로 쓰입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;MLB (Multi-Layer Board)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-path-to-node=&quot;11&quot;&gt;4층, 6층, 8층 그 이상으로 겹겹이 쌓은 기판을 말합니다.&lt;/li&gt;
&lt;li&gt;여러 개의 얇은 회로 기판을 샌드위치처럼 층층이 쌓고 접합한 형태입니다. 겉으로 보기엔 한 장 같지만, 내부에는 회로가 복잡하게 얽혀 있습니다.&lt;/li&gt;
&lt;li&gt;공간 절약, 노이즈 감소(전원층과 접지층을 별도로 배정해 신호 간섭을 줄임)의 목적&lt;/li&gt;
&lt;li&gt;스마트폰, 컴퓨터 메인보드, 고성능 그래픽카드 등 첨단 IT 기기에 필수적으로 들어갑니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size26&quot;&gt;비아(Via)의 심화 종류&lt;/h2&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;비아는 층과 층을 연결하는 구멍이라고 헀지만, 뚫는 방식에 따라 종류가 나뉩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;Through-Hole Via (관통 비아):&lt;/b&gt; Top부터 Bottom까지 기판 전체를 시원하게 뻥 뚫어버리는 가장 일반적인 비아입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0&quot;&gt;Blind Via (블라인드 비아):&lt;/b&gt; 겉면에서 시작해서 내부 층까지만 구멍을 뚫고, 반대편 겉면으로는 구멍이 나오지 않는 비아입니다. (초고밀도 기판에서 사용)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,2,0&quot;&gt;Buried Via (베리드 비아):&lt;/b&gt; 내부 층과 내부 층끼리만 연결되어, 기판 겉에서는 아예 보이지 않는 비아입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;15&quot; data-ke-size=&quot;size26&quot;&gt;구리의 두께 (Copper Weight)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;PCB의 구리 두께는 보통 oz (온스)라는 단위를 사용합니다. 1평방피트 면적에 구리 1온스를 넓게 폈을 때의 두께(약 35&amp;micro;m)를 1oz라고 부릅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;17&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,0,0&quot;&gt;1 oz:&lt;/b&gt; 가장 표준적인 두께입니다. 일반적인 아두이노 센서나 마이크로컨트롤러 회로에 사용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,0&quot;&gt;2 oz 이상:&lt;/b&gt; 모터 드라이버, 파워 서플라이 처럼 전류를 엄청나게 많이 소모하는 기판에 사용합니다. 구리가 두꺼워야 저항이 줄고 열이 나지 않기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설계할 때, 흐르는 전류량이 크다면 Trace의 굵기도 굵게 그려야 하며, 두꺼운 oz의 기판을 발주해야 안전합니다.&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;19&quot; data-ke-size=&quot;size26&quot;&gt;폴리곤 푸어 (Polygon Pour / Copper Pour)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;배선이 다 끝나고 난 뒤, 기판의 빈 공간을 구리로 꽉 채워서 덮어버리는 기술입니다. 주로 이 덮어버린 넓은 구리를 GND와 연결합니다. 이렇게 하면 신호의 노이즈를 잡아주는 방패 역할을 하고, 부품에서 발생하는 열을 넓은 구리면을 통해 빠르게 식혀주는 방열판 역할도 수행하게 됩니다. 설계의 마지막을 장식하는 필수 스킬입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PCB 설계 프로세스&lt;/h2&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;실제 설계 프로그램(EDA 툴)을 열면 다음의 순서로 작업이 진행됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;17&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,0,0&quot;&gt;회로도 설계:&lt;/b&gt; 어떤 부품들이 어떻게 연결되는지 전기적인 논리 기호로 그리는 단계입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,0&quot;&gt;풋프린트 할당:&lt;/b&gt; 회로도의 추상적인 기호에 실제 부품의 물리적 크기와 모양을 짝지어 줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,2,0&quot;&gt;부품 배치:&lt;/b&gt; 회로도를 바탕으로 기판위에 부품들을 어디에 둘지 결정합니다. 설계의 핵심 단계입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,3,0&quot;&gt;배선:&lt;/b&gt; 부품의 패드와 패드 사이를 트레이스(구리선)로 연결합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,4,0&quot;&gt;DRC 검사:&lt;/b&gt; 선과 선이 너무 가깝지 않은지, 덜 연결된 곳은 없는지 툴의 자동 검사 기능을 통해 설계 오류를 잡아냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,5,0&quot;&gt;거버 파일 생성 및 발주:&lt;/b&gt; 에러가 없다면 거버 파일을 생성하여 JLCPCB, PCBWay 같은 온라인 제조업체에 업로드하고 주문합니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>PCB Design</category>
      <category>PCB Design</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/9</guid>
      <comments>https://8pdev.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 16 Apr 2026 03:25:13 +0900</pubDate>
    </item>
    <item>
      <title>FakeStreamChat - 영상 제작자를 위한 가짜 채팅 시뮬레이터</title>
      <link>https://8pdev.tistory.com/8</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;서론&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;930&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqT8J3/dJMcaiCWT8X/RqoszAxROFMBKoN3N5V2e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqT8J3/dJMcaiCWT8X/RqoszAxROFMBKoN3N5V2e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqT8J3/dJMcaiCWT8X/RqoszAxROFMBKoN3N5V2e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqT8J3%2FdJMcaiCWT8X%2FRqoszAxROFMBKoN3N5V2e0%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;1654&quot; height=&quot;930&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;930&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화, 드라마, 혹은 유튜브 쇼츠 영상에서 인터넷 방송 장면이나 실시간 채팅 반응을 연출할 때 배우의 연기 타이밍에 맞춰 원하는 내용의 채팅을 화면에 띄우거나, 후반 작업에서 리얼한 채팅창 오버레이를 합성하는 과정은 생각보다 훨씬 번거롭고 손이 많이 갑니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FakeChatSteam은 타임라인에 맞춰 정확하게 동작하며타임라인(Timeline), 순차(Sequential), 랜덤(Random) 모드를 지원하여 실제 라이브 채팅 환경을 시뮬레이션할 수 있는 오픈소스 도구입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;screencapture-localhost-4173-control-html-2026-04-14-16_31_53.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Hway/dJMcagSHaj2/0rh2ePi0kt2fN221iZdd4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Hway/dJMcagSHaj2/0rh2ePi0kt2fN221iZdd4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Hway/dJMcagSHaj2/0rh2ePi0kt2fN221iZdd4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Hway%2FdJMcagSHaj2%2F0rh2ePi0kt2fN221iZdd4k%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;678&quot; height=&quot;770&quot; data-filename=&quot;screencapture-localhost-4173-control-html-2026-04-14-16_31_53.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 기능&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;재생 모드:&lt;/b&gt; 타임라인 TSV, 순차 TSV, 랜덤 TSV 파일을 활용하여 개발자나 연출자가 원하는 정확한 타이밍에 세팅된 채팅을 출력할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;리얼한 랜덤 연출:&lt;/b&gt; 와일드카드(*, *category)를 기반으로 한 랜덤 치환을 지원합니다. 특히 순간적으로 채팅이 폭발하는 '랜덤 버스트' 기능(예: 30% 확률로 초당 2~5개의 메시지가 쏟아짐)을 통해 실제 라이브 방송 특유의 역동성을 그대로 구현할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;플랫폼 아이콘 매칭:&lt;/b&gt; Twitch, Chzzk, YouTube, Soop 등 다양한 플랫폼의 아이콘을 지원합니다. 데이터 파일에 플랫폼 이름(예: Twitch.png)을 대소문자까지 정확히 일치하게 입력하면, 해당 플랫폼 아이콘이 닉네임 옆에 자동으로 표시됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;편리한 프리셋 관리:&lt;/b&gt; 모든 더미 데이터와 세부 설정값들을 단일 JSON 파일로 저장하고 불러올 수 있어, 프로젝트마다 세팅을 간편하게 관리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;현장 연기 동기화 및 모니터링:&lt;/b&gt; 본 촬영 시, 배우의 대사나 씬 타이밍에 맞춰 스크립트된 관객의 반응을 실시간으로 재생할 수 있습니다. 현장 모니터나 가상 프로덕션의 배경에 OBS 출력을 연동하여 배우의 몰입감을 극대화합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포스트 프로덕션(후반 작업) 시간 단축:&lt;/b&gt; 사전에 저장된 JSON 프리셋을 활용하면, 재촬영이나 편집 단계에서도 언제든 이전과 동일한 타이밍의 채팅을 재현할 수 있어 작업 속도가 비약적으로 상승합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;원클릭 브라우저 소스 연동:&lt;/b&gt; 별도의 복잡한 설정 없이, 프로그램에서 제공하는 디스플레이 URL을 OBS의 '브라우저 소스'에 붙여넣기만 하면 즉시 채팅창이 송출됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 자세한 코드와 가이드는 아래 Git Hub 저장소에서 확인하실 수 있습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/8p4dev/FakeStreamChat&quot;&gt;https://github.com/8p4dev/FakeStreamChat&lt;/a&gt;&lt;/p&gt;</description>
      <category>日常일상</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/8</guid>
      <comments>https://8pdev.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 14 Apr 2026 16:35:25 +0900</pubDate>
    </item>
    <item>
      <title>[육군 정보보호병] 1차, 2차 합격 후기, 복원문제 (2026.1. 최신 선발기준)</title>
      <link>https://8pdev.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;지원 동기&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;대학교 새내기 때부터 주변 공군 직업군인 전역자, 공군 병 전역자 선배들의 영향으로 공군에서의 군생활을 지망했었다.&lt;br&gt;공군 &lt;span style=&quot;color: #555555;&quot;&gt;통신전자전기에 개같이 탈락후 최대한 전공을 살릴 수 있는 군생활을 하기 위해 찾아보던 중 정보보호병을 알게 되었다.&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;사실은 학년만 좀 더 높았으면 붙었겠지만, 현재 약정되어있는 회사와 1학년 수료 후 군입대 → 2학년 복학+근무 하기로 합의하였기 때문에 방법은 없었다 ㅠ.ㅜ (사실 정보보호병 떨어지면 복학 타이밍이 애매할 수도 있었지만 야수의심장)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;육군 전문특기병 선발기준 변경 (2026.1.)&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;2026년 1월 모집부터 전문특기병 선발기준이 변경되었다. 하지만 이를 다루는 정보보호병 후기가 없기에 처음으로 남긴다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Vvyd/dJMcaiJvJfj/ZjqYiTJ1Rg65nCzZxieRMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Vvyd/dJMcaiJvJfj/ZjqYiTJ1Rg65nCzZxieRMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Vvyd/dJMcaiJvJfj/ZjqYiTJ1Rg65nCzZxieRMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Vvyd%2FdJMcaiJvJfj%2FZjqYiTJ1Rg65nCzZxieRMK%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;709&quot; height=&quot;120&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차의 고교출석률(10)이 사라지고 전공학과 점수가 &lt;span style=&quot;color: #555555;&quot;&gt;30으로 상승하였다.&lt;/span&gt;&lt;br&gt;2차(최종)의 면접이 실기로 바뀌었는데, 기존에는 필기 + 면접 을 반영했다면, &lt;b&gt;&lt;span style=&quot;color: #EE2323;&quot;&gt;현재는 필기만 반영한다&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;대전병무청 실기 당일 시험 감독관께 왜 면접 안보냐고 하시는 분들이 많이 계셨다... ㅠ.ㅜ&lt;br&gt;실제로 육군 정보보호병 소개 페이지의 선발 기준이 늦게 반영되었어서 때문에 본인도 실기 전날 육군갤보고 면접을 안본다는 것을 알았다....&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;서류 (1차 합격)&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;본인은 공군가기위해 취득하였던 정보처리기능사(10) + 간접학과 1학년 수료( 21)로 1차 서류점수는 31점 이었다.&lt;br&gt;1학년 재학과 수료 점수가 다르니, 본인이 1학년을 마쳤다면 무조건 수료로 서류를 제출하자...&lt;br&gt;&amp;nbsp;&lt;br&gt;또한 육군에서 점수를 인정하는 학과 리스트를 확인하고 자신의 학과가 없을 경우 꼭 자신 지역의 병무청에 문의해야한다.&lt;br&gt;학과 리스트는 병무청 병무민원 &amp;gt; 군지원 &amp;gt; 지원요건 검색으로 확인할 수 있다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bktue6/dJMcaakr1vC/nKmt01ejCTt9CSRDDRr9dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bktue6/dJMcaakr1vC/nKmt01ejCTt9CSRDDRr9dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bktue6/dJMcaakr1vC/nKmt01ejCTt9CSRDDRr9dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbktue6%2FdJMcaakr1vC%2FnKmt01ejCTt9CSRDDRr9dk%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;1413&quot; height=&quot;716&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;학과 인정이 안될 경우&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;지원하려는 모집 분야의 학과 목록에 본인 전공이 검색되지 않는다면, 가장 먼저 관할 지역 병무청에 문의해야 한다.&lt;br&gt;본인 역시 학과가 명단에 없어 당황했지만, 직접 문의 후 학과 커리큘럼과 재학증명서를 팩스로 제출하여 문제를 해결했다.&lt;br&gt;&amp;nbsp;&lt;br&gt;처음에는 행정 절차상 학과 인정 결재까지 최소 6개월이 소요될 수 있다는 안내를 받았으나, 담당 직원분들께서 적극적으로 도와주신 덕분인지 다행히 모집 마감 전인 1주일 만에 처리가 완료되었다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;실기 공부 방법&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;실기 문제는 다른 후기들을 보니 정보보안기사 문제에서 나온다고 한다.&lt;br&gt;정보보안 기사의 전체 범위를 공부하는 것은 시간적으로 무리가 있고, 본인은 다른 후기들의 기출을 분석 후 가장 빈도수가 높았던 과목들을 추려서 공부하였고, 추린 과목을 1회독 후 3개년치 CBT를 풀었다.&lt;br&gt;&amp;nbsp;&lt;br&gt;공부한 핵심 과목들은 다음과 같다. (알기사 기준)&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;정보보안 개요 (전쳬)&lt;/li&gt;&lt;li&gt;암호학 (전체)&lt;/li&gt;&lt;li&gt;접근통제 (접근통제 개요, 사용자 인증)&lt;/li&gt;&lt;li&gt;시스템 보안 (유닉스/리눅스 서버 보안, 서버 보안 관리, 각종 시스템 보안위협 및 대응책, 최신 보안 주제들)&lt;/li&gt;&lt;li&gt;네트워크 보안 (네트워크 관리, 네트워크 기반 공격의 이해, IDS/IPS, 침입차단 시스템)&lt;/li&gt;&lt;li&gt;애플리케이션 보안 (웹 보안)&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;다른분들이 작성해주신 실기 복원문제들을 정리해놓은 노션 페이지입니다.&lt;br&gt;&lt;a href=&quot;https://www.notion.so/30b86e55335880df96d4ca194a338918?source=copy_link&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://www.notion.so/30b86e55335880df96d4ca194a338918?source=copy_link&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;실기 (2차 합격) + 복원 문제&lt;/h2&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2906&quot; data-origin-height=&quot;2906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bACrO5/dJMcahRoNn1/3wGpMArYGzRUVtDpkk52h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bACrO5/dJMcahRoNn1/3wGpMArYGzRUVtDpkk52h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bACrO5/dJMcahRoNn1/3wGpMArYGzRUVtDpkk52h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbACrO5%2FdJMcahRoNn1%2F3wGpMArYGzRUVtDpkk52h0%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;406&quot; height=&quot;406&quot; data-origin-width=&quot;2906&quot; data-origin-height=&quot;2906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실기는 대전·충남 지방병무청 모병센터 면접장에서 진행된다.&lt;br&gt;다른 후기들에서는 늦게 올수록 대기번호가 밀려 면접을 늦게 보기 때문에 무조건 최소 1시간 전 일찍 오라고 하는데, 면접이 사라졌기 때문에 현재는 그럴 필요가 없어 보인다.&lt;br&gt;본인은 일찍 도착했지만 모르고 병역판정검사장에서 대기하다가 시작 30분 전에 모병센터 면접장에 도착했다... (레전드 폐급)&lt;br&gt;&amp;nbsp;&lt;br&gt;실기 문제는 총 20문제가 나왔다.&lt;br&gt;다른 후기들에서는 암호학 관련 문제가 꽤 나왔던 것 같은데, 암호학 문제는 하나도 없던 걸로 기억한다.&lt;br&gt;시험 당일 최대한 복원해본 문제들은 다음과 같다.&lt;br&gt;솔직히 다른 후기들에서 나온 문제들에 비하면 문제 난이도가 많이 쉬워진 것 같다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;1. NAC 환경에서 접속하는 단말의 보안 상태를 가장 명확하고 세밀하게 확인 및 통제하기 위한 검증 방식&lt;/b&gt; &lt;br&gt;→ 에이전트 + OS/AV방식&lt;br&gt;&lt;br&gt;&lt;b&gt;2. 인적 보안(Human Security) 관점에서의 가장 핵심적이고 효과적인 대응 방법&lt;/b&gt; &lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;→&lt;/span&gt;&amp;nbsp;교육과 보상&lt;br&gt;&lt;br&gt;&lt;b&gt;3. DNS를 조작해 악성 웹사이트로 유도하는 방법&lt;/b&gt; &lt;br&gt;→ DNS 하이재킹 (나는 스푸핑이라해서 틀림)&lt;br&gt;&lt;br&gt;&lt;b&gt;4. HTTPS 보안의 한계점&lt;/b&gt; &lt;br&gt;→ 트래픽은 못숨김&lt;br&gt;&lt;br&gt;&lt;b&gt;5. 책임 공유 모델(Shared Responsibility Model)의 핵심&lt;/b&gt; &lt;br&gt;→ CSP와 사용자의 책임 분담&lt;br&gt;&lt;br&gt;&lt;b&gt;6. NAC의 핵심 능력&lt;/b&gt; &lt;br&gt;→ 보안상태 확인&lt;br&gt;&lt;br&gt;&lt;b&gt;7. UTM, NIC 통합 절차&lt;/b&gt; &lt;br&gt;→ 틀림&lt;br&gt;&lt;br&gt;&lt;b&gt;8. DB의 계정 잠금 정책 사용 이유&lt;/b&gt; &lt;br&gt;→ 무차별 대입 공격 방지&lt;br&gt;&lt;br&gt;&lt;b&gt;9. 기만전술 사용하는 이유&lt;/b&gt; &lt;br&gt;→ 공격자 유인 및 탐지&lt;br&gt;&lt;br&gt;&lt;b&gt;10. 트래픽 이상을 가장 먼저 확인할 수 있는 곳&lt;/b&gt; &lt;br&gt;→ IPS, IDS앞단&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;점수는 2차 실기 평가에서 크게 분산되는 것 같다.&lt;br&gt;2주간의 기다림 끝에 결과가 나왔고... 생각 이상의 결과와 선발순위가 나와 기뻤다.&lt;br&gt;사실 하루 전날 여친과 피시방에서 야매합으로 결과를 미리 확인했었고, 합격 사실을 (야매로) 미리 확인하고 서로 껴안았다 야호~~&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/54fV2/dJMcaiJvKAg/FUDOc82YcFWQFspkv4D4KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/54fV2/dJMcaiJvKAg/FUDOc82YcFWQFspkv4D4KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/54fV2/dJMcaiJvKAg/FUDOc82YcFWQFspkv4D4KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F54fV2%2FdJMcaiJvKAg%2FFUDOc82YcFWQFspkv4D4KK%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;957&quot; height=&quot;269&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;269&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;907&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diS2bH/dJMcagZfR3j/k1eeQva1AeVjlr0WEQudk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diS2bH/dJMcagZfR3j/k1eeQva1AeVjlr0WEQudk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diS2bH/dJMcagZfR3j/k1eeQva1AeVjlr0WEQudk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiS2bH%2FdJMcagZfR3j%2Fk1eeQva1AeVjlr0WEQudk1%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;907&quot; height=&quot;328&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</description>
      <category>日常일상</category>
      <category>cert</category>
      <category>육군</category>
      <category>전문특기병</category>
      <category>정보보안</category>
      <category>정보보안기사</category>
      <category>정보보호병</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/7</guid>
      <comments>https://8pdev.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 31 Mar 2026 00:47:00 +0900</pubDate>
    </item>
    <item>
      <title>택트스위치의 바운싱(bouncing) 현상과 디바운싱(debouncing)</title>
      <link>https://8pdev.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;터치센서와 다르게 기계적인 접점을 갖는 스위치는 접점이 붙거나 떨어지는 순간에 &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;노화, 동작 관성, 기계적 설계&lt;/span&gt; 등등의 요소들에 의해서 바운싱(bouncing)현상이 있다. 이는 접점이 붙거나 떨어지는 짧은 시간에 접점이 고속으로 여러번 on/off 되는 현상을 말한다. 이는 기계적 스위치라면 반드시 발생하는 현상이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20250320_100746076_02.jpg&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HVf5w/btsMPPqODbM/WvMpSKEDbxfgwjen7DZsM0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HVf5w/btsMPPqODbM/WvMpSKEDbxfgwjen7DZsM0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HVf5w/btsMPPqODbM/WvMpSKEDbxfgwjen7DZsM0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHVf5w%2FbtsMPPqODbM%2FWvMpSKEDbxfgwjen7DZsM0%2Fimg.jpg&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;444&quot; height=&quot;174&quot; data-filename=&quot;KakaoTalk_20250320_100746076_02.jpg&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;509&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;디바운싱하는 데는 여러가지 방법이 있지만, 크게 소프트웨어를 이용한 방법과, 하드웨어적인 방법으로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어적인 방법은 RC 저역 필터를 슈미트트리거나 디지털 인버터에 직결한 후 이 신호를 포트 핀에 연결하는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y66cd/btsMRcZm5bi/Ly9GdokGYa9WPMDmIJJrzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y66cd/btsMRcZm5bi/Ly9GdokGYa9WPMDmIJJrzK/img.png&quot; data-alt=&quot;대표적인 디바운싱 회로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y66cd/btsMRcZm5bi/Ly9GdokGYa9WPMDmIJJrzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY66cd%2FbtsMRcZm5bi%2FLy9GdokGYa9WPMDmIJJrzK%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;270&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;879&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;아두이노와 같은 프로세서가 사용된다면 바운싱이 안정화될 때 까지 시간을 딜레이 시키는 방법 등으로 디바운싱할 수 있다. (보통 80ms 정도가 적당하다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J5vPG/btsMP6lxok2/6jRiGhAneLrPO2jkQM8vq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J5vPG/btsMP6lxok2/6jRiGhAneLrPO2jkQM8vq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J5vPG/btsMP6lxok2/6jRiGhAneLrPO2jkQM8vq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ5vPG%2FbtsMP6lxok2%2F6jRiGhAneLrPO2jkQM8vq1%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;556&quot; height=&quot;209&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;357&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;</description>
      <category>Arduino아두이노</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/6</guid>
      <comments>https://8pdev.tistory.com/6#entry6comment</comments>
      <pubDate>Thu, 20 Mar 2025 10:44:29 +0900</pubDate>
    </item>
    <item>
      <title>택트스위치의 플로팅(floating)현상</title>
      <link>https://8pdev.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아두이노 우노의 디지털 핀은 전압 3V 이상의 전압은 디지털 신호 1로 인식&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: left;&quot;&gt;하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;전압 3V 미만의 전압은 디지털 신호 0으로 인식한다.&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;font-family: 'Noto Sans Light'; color: #333333; text-align: justify;&quot;&gt;스위치 주변의 노이즈가 섞이면 디지털 신호의 전압이 상승과 하강을 반복하는데, 해당 디지털 신호를 입력 받으면 디지털 입력값이 하나로 고정되지 않고 0이나 1로 이리저리 떠다니며 이도저도아닌 붕 뜬(floating) 상태가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20250320_100746076.jpg&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB6tlC/btsMRirCwcg/kVuA4zwhvMtHZTbVcor261/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB6tlC/btsMRirCwcg/kVuA4zwhvMtHZTbVcor261/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB6tlC/btsMRirCwcg/kVuA4zwhvMtHZTbVcor261/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB6tlC%2FbtsMRirCwcg%2FkVuA4zwhvMtHZTbVcor261%2Fimg.jpg&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;702&quot; height=&quot;266&quot; data-filename=&quot;KakaoTalk_20250320_100746076.jpg&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;494&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20250320_100746076_01.jpg&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HkXGN/btsMQeXWFRD/updWCgLIfcsVyRgCC2Ckz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HkXGN/btsMQeXWFRD/updWCgLIfcsVyRgCC2Ckz0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HkXGN/btsMQeXWFRD/updWCgLIfcsVyRgCC2Ckz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHkXGN%2FbtsMQeXWFRD%2FupdWCgLIfcsVyRgCC2Ckz0%2Fimg.jpg&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;574&quot; height=&quot;276&quot; data-filename=&quot;KakaoTalk_20250320_100746076_01.jpg&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: justify;&quot;&gt;스위치와 직렬로 연결된 저항이 전원과 디지털 신호 입력선 사이에 연결되었다면 풀업 저항(Pull-up) 회로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;디지털 신호 입력선과 접지 사이에 연&lt;/span&gt;결되었다면 풀다운(Pull-down) 저항 회로라고 한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: justify;&quot;&gt;풀업 저항 회로는 버튼을 누르지 않은 상태에서는 디지털 신호 1, 누른 상태에서는 디지털 신호 0이 입력되며,&amp;nbsp; 풀다운 저항 회로는 버튼을 누르지 않은 상태에서는 디지털 신호 0, 누른 상태에서는 디지털 신호 1이 입력된다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: justify;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: justify;&quot;&gt;(참고로 저항은 보통 5&lt;span style=&quot;color: #000000;&quot;&gt;k&lt;span style=&quot;text-align: start;&quot;&gt;&amp;Omega; ~ 10k&lt;span style=&quot;text-align: start;&quot;&gt;&amp;Omega; 정도의 저항을 사용한다)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgqMsN/btsMP0yWfQN/uHXa0PEQfgoLjE2OKtRKrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgqMsN/btsMP0yWfQN/uHXa0PEQfgoLjE2OKtRKrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgqMsN/btsMP0yWfQN/uHXa0PEQfgoLjE2OKtRKrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgqMsN%2FbtsMP0yWfQN%2FuHXa0PEQfgoLjE2OKtRKrK%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;1097&quot; height=&quot;420&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;420&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;그런데 아두이노에서는 사실 위 그림과 같이 풀업저항을 외부에서 달아줄 필요가 없는데, 아두이노의 프로세서인 AVR칩의 내부에 모든 포트핀에 이 풀업저항이 아예 내장되어 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 프로그래밍적으로 풀업저항을 연결할 수 있다. 이것을 내부(internal)풀업 저항이라고 한다.&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;1706&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDASvy/btsMOW5pbeI/TXfsr21TYrXULnNwHkXslK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDASvy/btsMOW5pbeI/TXfsr21TYrXULnNwHkXslK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDASvy/btsMOW5pbeI/TXfsr21TYrXULnNwHkXslK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDASvy%2FbtsMOW5pbeI%2FTXfsr21TYrXULnNwHkXslK%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;813&quot; height=&quot;312&quot; data-origin-width=&quot;1706&quot; data-origin-height=&quot;655&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Arduino아두이노</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/5</guid>
      <comments>https://8pdev.tistory.com/5#entry5comment</comments>
      <pubDate>Thu, 20 Mar 2025 10:32:24 +0900</pubDate>
    </item>
    <item>
      <title>공지</title>
      <link>https://8pdev.tistory.com/notice/4</link>
      <description>&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/Cywd1LvCfO8?version-2&amp;amp;amp&quot; width=&quot;1903&quot; height=&quot;500&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/notice/4</guid>
      <pubDate>Thu, 15 Aug 2024 07:36:20 +0900</pubDate>
    </item>
    <item>
      <title>언어모델(Language Model, LM) 소개</title>
      <link>https://8pdev.tistory.com/3</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;언어모델(Language Model, LM)이란&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어모델(Language Model, LM)은 언어라는 현상을 모델링 하고자 단어 시퀀스(문장)에 확률을 할당하는 모델이다.&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;추가로 언어모델에 -ing를 붙힌 언어 모델링(Language Modeling)은 주어진 단어들로부터 아직 모르는 단어를 예측하는 작업을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;단어 시퀀스에 확률을 할당하는 이유?&lt;/b&gt;&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;기계번역에서의 예시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시로 &quot;I am going to the bank&quot;라는 텍스트를 한국어로 번역한다고 가정하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트에서 bank는 은행, 강둑을 의미하기에 아래 두 가지의 번역 가능성을 고려해볼 수 있다.&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;&quot;나는 강둑에 간다&quot;&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;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;조건부 확률로 표현한 단어 시퀀스의 확률&lt;/b&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;단어 시퀀스의 확률&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 단어를$w$, 단어 시퀀스를 $W$라고 한다면, $n$개의 단어가 등장하는 단어 시퀀스 $W$의 확률은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;$$P(W)=P(w_{1},w_{2},w_{3},...,w_{n})$$&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다음 단어의 등장 확률&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$n-1$개의 단어가 나열된 상태에서 $n$번째 단어의 확률은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$P(w_{n}|w_{1},w_{2},w_{3},...,w_{n-1})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI인공지능</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/3</guid>
      <comments>https://8pdev.tistory.com/3#entry3comment</comments>
      <pubDate>Thu, 15 Aug 2024 07:17:47 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 전처리(Text preprocessing)</title>
      <link>https://8pdev.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;텍스트 전처리를 통해 주어진 텍스트를 자연어 처리기법이 잘 적용될 수 있도록 사전에 가공할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;텍스트 전처리 과정은 크게&amp;nbsp;&lt;u&gt;토큰화&lt;/u&gt;, &lt;u&gt;정제 및 추출&lt;/u&gt;, &lt;u&gt;인코딩&lt;/u&gt;으로나눌 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;토큰화(Tokenization)&lt;/b&gt;: 텍스트를 토큰(token)이라 불리는 단위로 나눈다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;정제 및 추출(Cleaning, Stemming)&lt;/b&gt;: 불필요한 단어 또는 문자를 제거한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;인코딩(Encording)&lt;/b&gt;: 단어들을 숫자로 바꾼다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;전처리를 하는 이유&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfpaMM/btsIXJ9RbFU/awR2BzHGKGkrrPQHMr6WKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfpaMM/btsIXJ9RbFU/awR2BzHGKGkrrPQHMr6WKk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfpaMM/btsIXJ9RbFU/awR2BzHGKGkrrPQHMr6WKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfpaMM%2FbtsIXJ9RbFU%2FawR2BzHGKGkrrPQHMr6WKk%2Fimg.jpg&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;487&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시로 위의 단어들은 전부 '모르다'라는 같은 뜻을 가지고 있다. 위의 단어들을 전부 NLP 과정에 입력한다면 메모리, 시간의 차원에서 효과적이지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;컴퓨터 및 컴퓨터 언어에서 자연어를 &lt;u&gt;효과적으로&lt;/u&gt; 처리할 수 있도록 전처리 과정을 거칠 필요가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;토큰화(Tokenization)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;주어진 텍스트에서 토큰(token)이라 불리는 단위로 나누는 작업을 토큰화(tokenization)라고 한다. 토큰의 단위는보통 의미있는 최소한의단위로 토큰을 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;ex) I like JavaScript. &amp;rarr; I / like / JavaScript&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;토큰화가 어려운 예시&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&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;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;ex) 어제 삼성 라이온즈가 기아 타이거즈를 5:3으로 꺾고 위닝 시리즈를 거두었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;라는 문장에서 5:3을 관점에 따라서 하나의 토큰으로 볼 수도 있고 5 / : / 3 세 가지의 토큰으로도 볼 수 있다. 이러한 요소들은 수동으로 예외처리 해주어야 하기에 인간의 직관이 필요로 하다.&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: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;위와 같은 예외적인 상황들에 대한 기준을 마련하기 위해 표준 토큰화 방법이 있으며 대표적으로는 Treebank Tokenization이 있다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;정제(Cleaning)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;Cleaning을 통해 사용 목적에 맞추어 데이터의 노이즈를 제거할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 대문자 소문자 통합&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;영어권 언어에서 대문자는 문장 맨 앞 등과 같은 상황에 쓰이고, 대부분의 상황에서는 소문자가 쓰인다. 예시로 컴퓨터는 Language 라는 단어와 language라는 단어를 다르게 인식하기 때문에 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;소문자 변환을 사용하여, language를 찾는 질의(query)에서, 결과로서 Language도 찾을 수 있게 하여야 한다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하지만 US(미국)와 us(우리)처럼 Cleaning하였을 때 뜻이 바뀌게 되는 경우도 있으므로 인간의 직관과 예외처리가 필요로 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 출현 횟수가 적은 단어의 제거&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;때로는 텍스트 데이터에서 너무 적게 등장해서 자연어 처리에 도움이 되지 않는 단어들이 존재할 수도 있다. 예를 들어 입력된 메일이 정상 메일인지 스팸 메일인지를 분류하는 스팸 메일 분류기를 설계한다고 가정해보겠다. 이때 100,000개의 메일 데이터에서 총 합 5번 밖에 등장하지 않은 단어가 있다면 이 단어는 직관적으로 분류에 거의 도움이 되지 않을 것임을 알 수 있다.&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;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;하지만 무조건 출현 횟수와 중요도가 비례하지는 않으므로 이때에도 인간의 직관과 예외처리가 필요로 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;3) 길이가 짧은 단어, 지시(대)명사, 관사의 제거&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;영어권 언어에서는 길이가 짧은 a(n)과 같은 단어를 삭제하는 것만으로도 어느정도 자연어 처리에서 크게 의미가 없는 단어들을 제거하는 효과를 볼 수 있다고 알려져 있다. 즉, 영어권 언어에서 길이가 짧은 단어들은 대부분 대세에 해당되지 않는다. 하지만 한국어에서는 길이가 짧은 단어라고 삭제하는 이런 방법이 크게 유효하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;4) 추출(Stemming)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;추출 방법에는 대표적으로 어간 추출(Stemming)과 표제어 추출(Lemmmatization)이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;어간추출(Stemming)&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;예시로 lectures라는 단어에 s가 있던 없던 전체 문장을 파악하는 데에는 크게 문제가 없기 때문에 어간(Stem)을 추출할 필요가 있다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;표제어 추출(Lemmatization)&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;표제어 추출은 단어들로부터 표제어를 찾아가는 과정이다. 표제어 추출은 단어들이 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다. 예를 들어서 am, are, is는 서로 다른 스펠링이지만 그 뿌리 단어(표제어)는 be라고 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;어간 추출 vs 표제어 추출&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;표제어 추출은 단어의 품사 정보를 포함하고 있지만, 어간 추출은 품사 정보를 갖고 있지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;뜻이 분명한 단어들로만 이루어진 데이터에서는 어간 추출이 유리할 수 있지만, 뜻이 분명하지 않은 단어들로만 이루어진 데이터에서는 표제어 추출이 유리할 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;불용어(Stopword)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;예를 들면, I, me, my, myself와 같은 단어들은 문장에서는 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없는 경우가 있다. 이러한 단어들을 불용어라고 한다.&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;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;불용어들은 메모리, 시간, 해석의 차원에서 제거하는 것이 유리하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;불용어(Stopword)를 제거하는 방법&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;불용어는 다음과 같은 방법을 통해서 제거할 수 있다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;불용어(stopword) 목록을 받아온다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정제할 문장을 토큰화(tokenization)한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;토큰화된 각 단어들을 불용어 목록에 있는 불용어와 대조하여&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;단어가 불용어 목록에 &lt;u&gt;없는&lt;/u&gt; 경우 &amp;rarr; 정제 결과에 추가&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;단어가 불용어 목록에 &lt;u&gt;있는&lt;/u&gt; 경우 &amp;rarr; Pass&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;인코딩(Encording)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;컴퓨터는 텍스트보다 숫자를 효율적으로 처리한다. 그렇기에 자연어 처리에서는 텍스트를 숫자와 대응시켜 컴퓨터가 쉽게 처리할 수 있도록 변환하는 과정이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정수 인코딩(Integer-Encording)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대표적인 인코딩 방법으로는 정수 인코딩 방법이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;정수 인코딩은 단어에&amp;nbsp;&lt;/span&gt;정수를 일대일로 대응&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문장의 토큰화 - 불용어 및 대문자 제거 과정을 거친다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;빈 단어 dictionart vocab = {}를 만든다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;토큰화된 각 단어에 대해서&lt;br /&gt;단어가 vocab에 속해 있지 않는 경우 &amp;rarr; vocab[단어] = 0&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;단어가 vocab에 속한 경우 &amp;rarr; vocab[단어]+= 1&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;정수 인코딩(Integer-Encording) 2: 빈도수 정렬&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;0c89e186-c2c6-48f6-8a6b-14358ac90b20&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&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;&lt;span style=&quot;color: #333333;&quot;&gt;위의 과정 이후 가장 빈번한 단어에 낮은 인덱스를 부여한다. 이 과정을 거치면 행렬의 앞부분이 자주 사용되기 때문에 학습 시 메모리를 최적화할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;패딩(Padding)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;패딩을 통해 각 행렬의 인덱스 길이를 일정하게 맞출 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;패딩을 하는 이유는 대부분의 딥러닝 모델에서 고정된 길이의 행렬을 요구하기 때문이다. 왜냐하면 배치(batch) 학습과 후처리의 용이성 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;패딩(Padding) :&amp;nbsp;제로 패딩(Zero-padding)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대표적인 패딩 방법으로는 제로 패딩이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가장 길이가 긴 행렬의 길이에 맞추어 나머지 행렬의 뒷부분에 값이 0인 인덱스를 추가하는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;원-핫 인코딩(One-hot Encording)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식이다. 이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;원핫 인코딩은 각 범주를 이진 벡터로 변환하여 숫자형 데이터를 생성한다. 예를 들어, 세 개의 카테고리 [&quot;사과&quot;, &quot;바나나&quot;, &quot;포도&quot;]가 있을 때, 원핫 인코딩은 이를 [1, 0, 0], [0, 1, 0], [0, 0, 1]과 같은 벡터로 변환한다.&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: #333333;&quot;&gt;단어 집합의 크기를 벡터의 차원으로 하여 저장하기 때문에 저장공간을 많이 차지한다는 문제점이 있고, &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Word2Vec Encording&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;원-핫 인코딩은 단어들 간의 유사도를표현할 수 없다는 단점 있다. 그렇기 때문에 단어들 간의 유의미한 유사도를 반영할 수 있도록 단어의 의미를 수치화 할 수 있는 방법이 필요하다. 이를 위해서 사용되는 대표적인 방법이 워드투벡터(Word2Vec)이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;TF-IDF&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;TF-IDF를 통해 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;각 단어들마다 중요한 정도를 가중치로 매길 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TF-IDF는 TF와 IDF의 곱으로 나타낸다.&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: #333333;&quot;&gt;tf(d,t)는 특정 문서 d에서 특정 단어 t의 등장 횟수를 의미하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;idf(t)는 특정 단어 t가 등장한 문서의 수의 역수값이다. 이는 &lt;span style=&quot;background-color: #fafafa; text-align: start;&quot;&gt;$ idf(t)=log(\frac{n}{1+df(t)}) $ 으로 나타내며 $n$은 총 문서의 수 이다. log를 사용하는 이유는 $n$의 값이 커질수록 IDF의 값이 기하급수적으로 커지게 되기 때문이고, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;분모에 1을 더하는 이유는 $df(t)$의 값이 0일 경우 무한대에 수렴할 수 있기 때문이다. (굳이 1이 아니어도 되지만 통상적으로 1을 사용하며 이를 Smoothing이라고 함)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI인공지능</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/2</guid>
      <comments>https://8pdev.tistory.com/2#entry2comment</comments>
      <pubDate>Tue, 13 Aug 2024 21:03:30 +0900</pubDate>
    </item>
    <item>
      <title>NLP (자연어 처리) 소개</title>
      <link>https://8pdev.tistory.com/1</link>
      <description>&lt;h2 id=&quot;SE-595d7d3d-a35d-446e-ab35-9fb1e6167371&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NLP (자연어 처리)란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p id=&quot;SE-960cd101-abb7-4582-816d-afffbc9f3701&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자연어(natural language)는 일상생활에서 사용하는 보편적인 언어를 뜻하며&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e4e73d16-95aa-4f8c-9e76-aebaf3235ee9&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자연어 처리(natural language processing, NLP)는 컴퓨터가 자연어를 처리하는 일을 뜻한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-17fa2e07-f64b-401f-af64-b7fb53a26a71&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;SE-68a2965b-049d-44ff-9567-fc1659f77cd7&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NLP를 활용하고 있는 예시&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p id=&quot;SE-6c620baf-3fb7-42e1-83a1-9fac15041459&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NLP를 활용하고 있는 예시들을 통해 NLP의 개념을 간략하게 이해해 보자.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b5abd545-4e10-45df-b4a4-cfb7433af6f0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SE-2d3ac43e-7015-4cd3-a754-0592d5b47d88&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;챗봇(Chatbot)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;SE-55ef8daa-8085-41f5-a83c-28979b030314&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;챗봇은 사용자의 메시지에 응답하는 봇을 말한다. 단순히 미리 설정된 규칙에 따라 발화를 하는 것이 아닌 NPL 및 생성 기술을 통해 사용자와 인간 같은 대화를 할 수 있게 하는 챗봇에는 다음과 같은 기술들이 적용되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;감정분석(Sentiment Analtsis)&lt;/span&gt;&lt;/b&gt; : 텍스트에 녹아 있는 감성 또는 의견을 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;토큰화(Tokenization)&lt;/b&gt; : 주어진 텍스트를 최소한의 의미만을 담는 단위로 쪼갤 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개체명 인식(Named Entity Recognition)&lt;/b&gt; : 주어진 텍스트로부터 주제를 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정규화(Nomalization)&lt;/b&gt; : 의도된 오타를 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존 구문분석(Dependency Parsing)&lt;/b&gt; : 문장 구성 성분(동사, 명사 등..)을 분석할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-f87d4931-3ad1-4521-9539-48fc8a57ca44&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SE-f00f2f66-742d-483c-89b9-9ac8df5a432c&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인공지능 개인 비서&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;SE-3100d800-8059-4342-b620-3042cc5eecfe&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Siri와 같은 인공지능 개인 비서는 사용자의 음성을 통한 질문을 파악한 후에 이에 대한 답변을 사용자에게 전달한다. 여기에는 다음과 같은 기술들이 적용되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;피처 분석(Feature Analysis)&lt;/b&gt; : 음성데이터로부터 특징을 추출할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;언어 모델(Language Model)&lt;/b&gt; : 언어별로 갖고 있는 특성을 반영할 수 있다. 예시로 영어는 주어-동사-목적어 순이지만 한국어는 주어-목적어-동사이다. 이러한 언어별 특성을 반영해야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;딥러닝(Deep Learning)&lt;/b&gt; : 이미 학습된 데이터로부터 음성 신호를 처리할 수 있다. 현재 금 시세와 같은 사용자의 질문에 미리 학습된 데이터로부터 이에 대한 적절한 답변을 할 수 있어야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;은닉 마르코프 모델(Hidden Markov Model, HMM)&lt;/b&gt; : 앞으로 나올 단어 또는 주제를 예측할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유사도 분석(Similarity Analysis)&lt;/b&gt; : 음성 신호가 어떤 기준에 부합하는지 분석할 수 있다. 사용자의 음성을 질문, 감탄, 혼잣말과 같은 기준으로 분석할 수 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-3e00979c-0ac6-497e-a8bf-65404b747fcc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SE-83675c2a-81ab-432c-bb1d-76c76b78c7da&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;번역기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p id=&quot;SE-f4de85ca-b13d-4c83-a595-644aa4b79611&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;번역기에는 다음과 같은 기술들이 적용되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인코딩(Encording)&lt;/b&gt; : 유사도를 기반으로 자연어의 특징을 추출할 수 있다. 인코딩을 통해 텍스트에서 중요한 부분만 추출할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시계열 모델링(Time Series Modeling)&lt;/b&gt; : 문장을 시간에 따른 데이터로 처리할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;어텐션 메커니즘(Attention Mehanism)&lt;/b&gt; : 번역에 필요한 부분에만 집중할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;셀프 어텐션(Self-Attention)&lt;/b&gt; : 문장 사이의 상관관계를 분석할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;트랜스포머(Transformer)&lt;/b&gt; : Attention 구조를 이용한 번역 원리.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI인공지능</category>
      <author>8pdev</author>
      <guid isPermaLink="true">https://8pdev.tistory.com/1</guid>
      <comments>https://8pdev.tistory.com/1#entry1comment</comments>
      <pubDate>Fri, 9 Aug 2024 06:20:13 +0900</pubDate>
    </item>
  </channel>
</rss>