<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>keun90 님의 블로그</title>
    <link>https://keun90.tistory.com/</link>
    <description>keun90 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 12:20:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>keun90</managingEditor>
    <item>
      <title>SECS/GEM  시뮬레이터 - 테스트 시나리오SECS/GEM Equipment&amp;ndash;MES 통신 데모 구현기</title>
      <link>https://keun90.tistory.com/62</link>
      <description>&lt;!-- =====================================================
   티스토리 블로그 업로드용 HTML
   제목: SECS/GEM Equipment–MES 통신 데모 구현기
   ===================================================== --&gt;
&lt;div style=&quot;max-width: 860px; margin: 0 auto; font-family: 'Noto Sans KR', sans-serif; color: #222; line-height: 1.8;&quot;&gt;&lt;!-- ───────────────────────────────────────────
       HEADER
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;프로젝트 소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반도체 제조 현장에서 9년간 MES 개발을 담당하면서, 장비와 MES가 어떻게 통신하는지 직접 구현해보고 싶었습니다. 이 프로젝트는 &lt;b&gt;SEMI 국제 표준&lt;/b&gt;인 SECS/GEM 프로토콜을 사용하여 장비 시뮬레이터와 MES 호스트가 실제 TCP 통신을 주고받는 풀스택 데모입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 Mock이나 가상 통신이 아닌, &lt;b&gt;실제 Secs4Net 라이브러리&lt;/b&gt;를 이용한 HSMS TCP 소켓 통신으로 구현했습니다.&lt;/p&gt;
&lt;!-- 뱃지 영역 --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 8px; margin: 20px 0 32px;&quot;&gt;&lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;.NET 8&lt;/span&gt; &lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;Angular 17&lt;/span&gt; &lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;SECS/GEM&lt;/span&gt; &lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;SignalR&lt;/span&gt; &lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;SEMI E30&lt;/span&gt; &lt;span style=&quot;background: #e8f0fe; color: #4f8cff; border-radius: 20px; padding: 4px 14px; font-size: 13px; font-weight: 600;&quot;&gt;HSMS TCP&lt;/span&gt;&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       SCREENSHOT PLACEHOLDER
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;실행 화면&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj3oSQ/dJMcacwh9Bo/ZyafdoXbjKgmzxlDUrvMjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj3oSQ/dJMcacwh9Bo/ZyafdoXbjKgmzxlDUrvMjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj3oSQ/dJMcacwh9Bo/ZyafdoXbjKgmzxlDUrvMjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj3oSQ%2FdJMcacwh9Bo%2FZyafdoXbjKgmzxlDUrvMjk%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;2553&quot; height=&quot;1263&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;!-- ───────────────────────────────────────────
       SECS/GEM 표준 설명
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;SECS/GEM이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SECS/GEM은 반도체 장비와 MES(Manufacturing Execution System) 간의 통신을 정의하는 &lt;b&gt;SEMI 국제 표준&lt;/b&gt;입니다. ASML, Applied Materials 같은 장비 업체와 삼성전자, SK하이닉스 같은 FAB에서 모두 사용하는 사실상의 업계 표준입니다.&lt;/p&gt;
&lt;!-- 표준 테이블 --&gt;
&lt;div style=&quot;overflow-x: auto; margin: 16px 0 32px;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f0f4ff;&quot;&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;표준&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;역할&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;SEMI E5 (SECS-II)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;메시지 포맷 정의 (Stream/Function 번호, Item 타입, 데이터 구조)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;SEMI E37 (HSMS)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;TCP/IP 전송 계층 (연결 관리, 세션, 메시지 프레이밍)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;SEMI E30 (GEM)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 10px 16px; border: 1px solid #dde;&quot;&gt;장비-MES 간 행동 규약 (상태머신, 이벤트 리포트, 알람, 레시피)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       아키텍처
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;시스템 아키텍처&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개의 독립 프로세스가 각각 다른 포트에서 실행됩니다.&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 24px; font-size: 13px; line-height: 1.7; overflow-x: auto; margin: 16px 0 24px;&quot;&gt;&lt;code&gt;┌─────────────────────────────────────┐
│  Angular UI  (localhost:4200)        │
│  SignalR Connected  ●               │
│  ┌──────────┐ ┌───────────────────┐ │
│  │ Scenario │ │ GEM State Diagram │ │
│  │  Panel   │ │   Trace Chart     │ │
│  └──────────┘ └───────────────────┘ │
└──────────┬──────────────────────────┘
           │ HTTP REST  &amp;amp;  SignalR WS
           ▼
┌─────────────────────────────────────┐
│  Host MES API  (localhost:5001)      │
│  ScenarioOrchestrator               │
│  EventSubscriber &amp;rarr; MessageBroadcaster│
└──────────┬──────────────────────────┘
           │ SECS/HSMS TCP (SEMI E37)
           ▼
┌─────────────────────────────────────┐
│  Equipment Simulator  (:5000/:5002)  │
│  GemStateMachine  ProcessSimulator  │
│  S1F13 / S2F33~37 / S6F11 / S5F1   │
└─────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;!-- 포트 테이블 --&gt;
&lt;div style=&quot;overflow-x: auto; margin: 0 0 32px;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f0f4ff;&quot;&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;서비스&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;포트&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;프로토콜&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;Equipment HSMS (장비)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;5000&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;SECS/GEM TCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;Equipment HTTP (이벤트 트리거)&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;5002&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;REST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;Host MES API&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;5001&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;REST + SignalR WS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;Angular Frontend&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;4200&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;HTTP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       핵심 구현
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;핵심 구현 내용&lt;/h2&gt;
&lt;!-- 1. GEM 상태머신 --&gt;
&lt;h3 style=&quot;font-size: 17px; font-weight: bold; margin: 0 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;① GEM 상태머신 (SEMI E30)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SEMI E30 표준은 장비가 두 가지 상태를 동시에 유지하도록 규정합니다. &lt;code style=&quot;background: #f4f4f4; padding: 2px 6px; border-radius: 4px; font-size: 13px;&quot;&gt;Stateless&lt;/code&gt; 라이브러리로 허용된 전이만 선언하여, 잘못된 상태 전이 시 예외가 자동 발생하도록 구현했습니다.&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 20px; font-size: 13px; line-height: 1.7; overflow-x: auto; margin: 12px 0 24px;&quot;&gt;&lt;code&gt;// 통신 상태 (CommState)
NotCommunicating ──(S1F13)──► Communicating
Communicating    ──(연결 단절)──► NotCommunicating

// 공정 상태 (ProcessState)
Idle ──► Setup ──► Ready ──► Executing ──► Idle
                                 │
                              (알람) ──► Pause ──► Executing&lt;/code&gt;&lt;/pre&gt;
&lt;!-- 2. 동적 Report 설정 --&gt;
&lt;h3 style=&quot;font-size: 17px; font-weight: bold; margin: 0 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;② 동적 Report 설정 (S2F33/S2F35/S2F37)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GEM의 핵심 설계 철학입니다. 장비 코드 수정 없이 MES가 런타임에 &quot;어떤 이벤트 때 어떤 데이터를 보내라&quot;를 지시합니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 20px; font-size: 13px; line-height: 1.7; overflow-x: auto; margin: 12px 0 24px;&quot;&gt;&lt;code&gt;S2F33 &amp;mdash; Report 정의
  &quot;RPTID #1001 = [LOT_ID, PPID, START_TIME]&quot;
  &quot;RPTID #1002 = [LOT_ID, WAFER_COUNT, END_TIME, RESULT]&quot;

S2F35 &amp;mdash; 이벤트 연결
  &quot;PROCESS_START(CEID=2) 발생 시 &amp;rarr; RPTID #1001 전송&quot;
  &quot;PROCESS_END(CEID=3) 발생 시  &amp;rarr; RPTID #1002 전송&quot;

S2F37 &amp;mdash; 이벤트 활성화
  &quot;CEID=1,2,3,4 감시 시작&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;!-- 3. S6F12 응답 우선 처리 --&gt;
&lt;h3 style=&quot;font-size: 17px; font-weight: bold; margin: 0 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;③ S6F12 응답 우선 처리 &amp;mdash; T3 타이머 데드락 방지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장비의 &lt;code style=&quot;background: #f4f4f4; padding: 2px 6px; border-radius: 4px; font-size: 13px;&quot;&gt;SendAsync(S6F11)&lt;/code&gt;은 &lt;b&gt;S6F12를 받을 때까지 블로킹&lt;/b&gt;됩니다. Host가 S6F12 응답보다 SignalR 브로드캐스트를 먼저 처리하면 T3 타이머(45초) 초과로 통신이 단절됩니다. 현업에서 실제로 발생하는 패턴입니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 20px; font-size: 13px; line-height: 1.7; overflow-x: auto; margin: 12px 0 32px;&quot;&gt;&lt;code&gt;// 잘못된 순서 &amp;mdash; T3 타이머 위험
await broadcaster.BroadcastAsync(msg);  // &amp;larr; 여기서 실패하면 S6F12가 영원히 안 감
await secsGem.SendAsync(reply);

// 올바른 순서 &amp;mdash; S6F12 먼저
await secsGem.SendAsync(reply);         // &amp;larr; T3 타이머 해제
await broadcaster.BroadcastAsync(msg);  // &amp;larr; 그 다음 UI 업데이트&lt;/code&gt;&lt;/pre&gt;
&lt;!-- ───────────────────────────────────────────
       SECS 메시지 흐름
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;SECS 메시지 전체 흐름&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 20px; font-size: 13px; line-height: 1.8; overflow-x: auto; margin: 12px 0 32px;&quot;&gt;&lt;code&gt;HOST                           EQUIPMENT
 │──── S1F13 (통신 수립) ──────────►│
 │◄─── S1F14 (수락)  ──────────────│
 │──── S2F33 (리포트 정의 &amp;times;3) ─────►│
 │──── S2F35 (이벤트 연결 &amp;times;3) ─────►│
 │──── S2F37 (이벤트 활성화) ──────►│
 │                                  │
 │◄─── S6F11 (CarrierArrived) ─────│  CEID=1
 │──── S2F41 (PP-SELECT) ──────────►│  레시피 선택
 │◄─── S6F11 (ProcessStart) ───────│  CEID=2  &amp;rarr; Track-In
 │◄─── S6F11 (Trace &amp;times;N) ───────────│  CEID=4  &amp;rarr; 온도/압력 실시간
 │◄─── S5F1  (Alarm Set)  ─────────│  ALCD=0x80 [alarm 시나리오]
 │◄─── S5F1  (Alarm Clear) ────────│  ALCD=0x00
 │◄─── S6F11 (ProcessEnd)  ────────│  CEID=3  &amp;rarr; Track-Out&lt;/code&gt;&lt;/pre&gt;
&lt;!-- ───────────────────────────────────────────
       시나리오
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;3가지 자동 시나리오&lt;/h2&gt;
&lt;div style=&quot;overflow-x: auto; margin: 0 0 32px;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f0f4ff;&quot;&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;시나리오&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;LOT&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;레시피&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;웨이퍼&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;알람&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;시간&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Normal Process Run&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;LOT-2026-001&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;RCP-PHOTO-A1&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;25매&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;~15초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Alarm Recovery&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;LOT-2026-002&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;RCP-PHOTO-A1&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;25매&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;span style=&quot;color: #e05252; font-weight: 600;&quot;&gt;고온 알람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;~23초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Alternative Recipe&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;LOT-2026-003&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;span style=&quot;color: #4f8cff; font-weight: 600;&quot;&gt;RCP-PHOTO-B2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;13매&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;~10초&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       기술 스택
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;기술 스택&lt;/h2&gt;
&lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 0 0 32px;&quot;&gt;&lt;!-- Backend --&gt;
&lt;div style=&quot;background: #f8f9fa; border-radius: 10px; padding: 20px;&quot;&gt;
&lt;p style=&quot;font-weight: bold; font-size: 15px; margin: 0 0 12px; color: #333;&quot; data-ke-size=&quot;size16&quot;&gt;Backend (.NET 8 / C#)&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 18px; font-size: 13px; line-height: 2;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ASP.NET Core 8.0&lt;/li&gt;
&lt;li&gt;Secs4Net 2.4.4 (HSMS/SECS-II)&lt;/li&gt;
&lt;li&gt;Stateless 5.20.1 (상태머신)&lt;/li&gt;
&lt;li&gt;SignalR (WebSocket hub)&lt;/li&gt;
&lt;li&gt;Serilog (구조화 로깅)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!-- Frontend --&gt;
&lt;div style=&quot;background: #f8f9fa; border-radius: 10px; padding: 20px;&quot;&gt;
&lt;p style=&quot;font-weight: bold; font-size: 15px; margin: 0 0 12px; color: #333;&quot; data-ke-size=&quot;size16&quot;&gt;Frontend (Angular 17)&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 18px; font-size: 13px; line-height: 2;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular 17.3.0&lt;/li&gt;
&lt;li&gt;@microsoft/signalr 10.0.0&lt;/li&gt;
&lt;li&gt;RxJS 7.8.0&lt;/li&gt;
&lt;li&gt;TypeScript 5.4.2&lt;/li&gt;
&lt;li&gt;순수 SVG 차트 (외부 라이브러리 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       UI 컴포넌트
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;UI 대시보드 구성&lt;/h2&gt;
&lt;div style=&quot;overflow-x: auto; margin: 0 0 32px;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f0f4ff;&quot;&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;컴포넌트&lt;/th&gt;
&lt;th style=&quot;padding: 10px 16px; text-align: left; border: 1px solid #dde; font-weight: bold;&quot;&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;State Panel&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;COMM STATE / PROCESS STATE 실시간 색상 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;GEM State Diagram&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;SEMI E30 상태 전이 SVG 시각화 (현재 상태 강조)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Message Log&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;S#F# 메시지 타임스탬프 테이블 (방향 표시)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Trace Chart&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;온도 / 가스유량 / 압력 실시간 라인 차트 (SVG)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Alarm Panel&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;알람 발생/해제 목록 (ALID, 알람 텍스트)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Process History&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;Track-In/Out 이력 테이블 (LotId, Wafer, 시각, 결과)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;&lt;b&gt;Scenario Results&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 9px 16px; border: 1px solid #dde;&quot;&gt;실행 완료 시나리오 결과 카드 (PASS/FAIL, 소요시간)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;!-- ───────────────────────────────────────────
       실행 방법
  ─────────────────────────────────────────────── --&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;실행 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널 3개를 열어 순서대로 실행합니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e2e; color: #cdd6f4; border-radius: 10px; padding: 20px; font-size: 13px; line-height: 1.8; overflow-x: auto; margin: 12px 0 24px;&quot;&gt;&lt;code&gt;# Terminal 1 &amp;mdash; Equipment Simulator (먼저 실행)
cd src/SecsGemDemo.Equipment
dotnet run

# Terminal 2 &amp;mdash; Host MES API
cd src/SecsGemDemo.Host.Api
dotnet run

# Terminal 3 &amp;mdash; Angular Frontend
cd src/SecsGemDemo.Frontend
npm install &amp;amp;&amp;amp; npm start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에서 &lt;b&gt;http://localhost:4200&lt;/b&gt; 접속 후 시나리오를 선택하고 &lt;b&gt;Run&lt;/b&gt; 버튼을 클릭합니다.&lt;/p&gt;
&lt;!-- ───────────────────────────────────────────
       마무리
  ─────────────────────────────────────────────── --&gt;&lt;hr style=&quot;border: none; border-top: 2px solid #f0f0f0; margin: 32px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;font-size: 21px; font-weight: bold; border-left: 4px solid #4f8cff; padding-left: 12px; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로젝트를 통해 MES와 장비가 통신하는 구조를 단순 이론이 아닌 동작하는 코드로 직접 확인할 수 있었습니다. 특히 S2F33/35/37의 동적 Report 설정 메커니즘과 T3 타이머 기반의 블로킹 통신 구조는 현업에서 가장 자주 마주치는 패턴이라 직접 구현하면서 많이 배웠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후 &lt;b&gt;1:N 다중 장비 지원&lt;/b&gt;, &lt;b&gt;FDC 연동&lt;/b&gt;, &lt;b&gt;시계열 DB(InfluxDB) 연동&lt;/b&gt;으로 확장해볼 계획입니다.&lt;/p&gt;
&lt;!-- GitHub 링크 --&gt;
&lt;div style=&quot;background: #f0f4ff; border-radius: 10px; padding: 20px 24px; margin-top: 24px; display: flex; align-items: center; gap: 16px;&quot;&gt;&lt;span style=&quot;font-size: 28px;&quot;&gt; &lt;/span&gt;
&lt;div&gt;
&lt;p style=&quot;margin: 0; font-weight: bold; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;소스코드 (GitHub)&lt;/p&gt;
&lt;a style=&quot;color: #4f8cff; font-size: 14px; text-decoration: none;&quot; href=&quot;https://github.com/KEUN-KEUN/lam-mes-secs-gem-demo&quot;&gt; github.com/KEUN-KEUN/lam-mes-secs-gem-demo &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- END OF POST --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/62</guid>
      <comments>https://keun90.tistory.com/62#entry62comment</comments>
      <pubDate>Fri, 8 May 2026 20:43:14 +0900</pubDate>
    </item>
    <item>
      <title>BriefStock 개발일지 #5 - 실사용이 드러낸 3가지 함정 &amp;mdash; yfinance 지연, LLM JSON 중첩, 캐시 동시성 (Phase 7)</title>
      <link>https://keun90.tistory.com/60</link>
      <description>&lt;div&gt;
&lt;style&gt;
.bs-wrap{max-width:860px;margin:0 auto;font-family:'Pretendard','Apple SD Gothic Neo',sans-serif;color:#1a1a2e;line-height:1.8}
.bs-hero{background:linear-gradient(135deg,#0C0E14 0%,#161B27 100%);color:#fff;padding:48px 36px;border-radius:20px;margin-bottom:36px}
.bs-hero h1{font-size:32px;font-weight:800;margin:0 0 12px;letter-spacing:-0.02em}
.bs-hero p{font-size:15px;color:#8B95A1;margin:0;line-height:1.6}
.bs-hero .badge{display:inline-block;background:#3182F6;color:#fff;font-size:12px;font-weight:600;padding:4px 12px;border-radius:20px;margin-bottom:16px}
.bs-section{border-left:4px solid #3182F6;padding:20px 24px;margin:32px 0;background:#f7f8fc;border-radius:0 12px 12px 0}
.bs-section h2{font-size:20px;font-weight:700;margin:0 0 8px;color:#1a1a2e}
.bs-section p{font-size:14px;color:#555;margin:4px 0}
.bs-card{background:#f7f8fc;border-radius:12px;padding:20px 24px;margin:16px 0}
.bs-card h3{font-size:16px;font-weight:700;margin:0 0 10px;color:#1a1a2e}
.bs-card p{font-size:14px;color:#555;margin:4px 0;line-height:1.7}
.bs-dark-box{background:#0C0E14;color:#F2F4F6;border-radius:12px;padding:20px 24px;margin:16px 0;font-size:13px;line-height:1.7}
.bs-dark-box code{color:#3182F6;font-size:13px}
.bs-code{background:#161B27;color:#F2F4F6;border-radius:10px;padding:18px 22px;margin:12px 0;font-family:'Geist Mono',monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre}
.bs-phase-table{width:100%;border-collapse:separate;border-spacing:0;margin:20px 0;border-radius:12px;overflow:hidden}
.bs-phase-table th{background:#3182F6;color:#fff;padding:12px 16px;font-size:13px;font-weight:600;text-align:left}
.bs-phase-table td{padding:12px 16px;font-size:13px;border-bottom:1px solid #eee;background:#fff}
.bs-phase-table tr:last-child td{border-bottom:none}
.badge-done{display:inline-block;background:#e6f4ea;color:#1a7f4b;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.badge-new{display:inline-block;background:#e8f0fe;color:#3182F6;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.badge-todo{display:inline-block;background:#f0f0f0;color:#888;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.divider{height:1px;background:linear-gradient(90deg,transparent,#ddd,transparent);margin:36px 0}
.bs-stack-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}
.bs-stack-grid .item{background:#f7f8fc;border-radius:10px;padding:16px;text-align:center}
.bs-stack-grid .item .label{font-size:11px;color:#888;margin-bottom:4px}
.bs-stack-grid .item .value{font-size:14px;font-weight:700;color:#1a1a2e}
.bs-compare-table{width:100%;border-collapse:separate;border-spacing:0;margin:16px 0;border-radius:12px;overflow:hidden}
.bs-compare-table th{background:#f0f0f0;padding:10px 16px;font-size:12px;font-weight:600;text-align:left;color:#555}
.bs-compare-table td{padding:10px 16px;font-size:13px;border-bottom:1px solid #f0f0f0;background:#fff}
.bs-compare-table tr:last-child td{border-bottom:none}
.text-up{color:#F04452}
.text-down{color:#5071D9}
.text-blue{color:#3182F6}
.bs-tip{background:#f7f8fc;border-radius:12px;padding:16px 20px;margin:12px 0;font-size:13px;color:#555}
.bs-tip strong{color:#3182F6}
.bs-problem{background:#fff5f5;border-left:4px solid #F04452;border-radius:0 12px 12px 0;padding:16px 20px;margin:16px 0}
.bs-problem h4{font-size:14px;font-weight:700;color:#F04452;margin:0 0 6px}
.bs-problem p{font-size:13px;color:#555;margin:4px 0}
.bs-solution{background:#f0f9ff;border-left:4px solid #3182F6;border-radius:0 12px 12px 0;padding:16px 20px;margin:16px 0}
.bs-solution h4{font-size:14px;font-weight:700;color:#3182F6;margin:0 0 6px}
.bs-solution p{font-size:13px;color:#555;margin:4px 0}
@media(max-width:600px){.bs-stack-grid{grid-template-columns:1fr}.bs-hero{padding:32px 24px}.bs-hero h1{font-size:24px}}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-wrap&quot;&gt;&lt;!-- 히어로 --&gt;
&lt;div class=&quot;bs-hero&quot;&gt;&lt;span class=&quot;badge&quot;&gt;BriefStock 개발일지&lt;/span&gt;
&lt;h1 style=&quot;color: white;&quot;&gt;Phase 7: 데이터 신선도 &amp;middot; 비용 최적화 &amp;middot; 유튜브 파싱 안정화&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KOSPI 실시간 보정 &amp;middot; 전일 대비 변동률 &amp;middot; Claude API 비용 80% 절감 설계 &amp;middot; 유튜브 JSON 파싱 복구&lt;br /&gt;15개 파일, +1,033줄 / -234줄 변경&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 진행 상태 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 진행 현황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Phase 6까지 완료한 상태에서, 실사용 중 발견된 데이터 정확성&amp;middot;비용&amp;middot;안정성 이슈를 집중 해결했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 0~1&lt;/td&gt;
&lt;td&gt;환경 세팅 + 앱 골격&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 2~3&lt;/td&gt;
&lt;td&gt;포트폴리오 + AI 투자 브리핑&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 3.5~3.9&lt;/td&gt;
&lt;td&gt;UI 리디자인 + 코드 품질 + 대시보드 레이아웃&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 4&lt;/td&gt;
&lt;td&gt;유튜브 채널 분석&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 5&lt;/td&gt;
&lt;td&gt;Supabase Auth + 배포 준비&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 6&lt;/td&gt;
&lt;td&gt;포트폴리오 심층 분석 + 전문가 인사이트&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 7&lt;/td&gt;
&lt;td&gt;데이터 신선도 + 비용 최적화 + 유튜브 안정화&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-new&quot;&gt;이번 세션&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 01. KOSPI 신선도 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;01. KOSPI 지수가 하루 늦게 보이던 문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실사용 중 &quot;코스피가 오늘 하락 중인데 대시보드에는 상승으로 나온다&quot;는 문제를 발견했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-problem&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문제: yfinance KOSPI 데이터 1~2일 지연&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yfinance의 &lt;code&gt;^KS11&lt;/code&gt; history는 4/15까지만 반환되고, &lt;code&gt;last_price&lt;/code&gt;는 4/16 종가를 보여주는 상황. 오늘(4/17) 데이터가 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;prev_close&lt;/code&gt;도 4/15 종가라서 변동률 계산 자체가 틀림.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-solution&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;해결: pykrx KODEX 200 ETF 역산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pykrx의 인덱스 API가 깨져 있어, &lt;b&gt;KODEX 200 ETF(069500)&lt;/b&gt;의 당일 OHLCV 변동률을 구한 뒤 yfinance KOSPI &lt;code&gt;last_price&lt;/code&gt;에 적용하는 방식으로 해결했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;services/market_data.py &amp;mdash; KOSPI 조회 로직 1) pykrx로 KODEX200 ETF OHLCV 조회 (당일 데이터 포함) 2) ETF 전일 대비 변동률 계산 (예: -0.68%) 3) yfinance KOSPI last_price를 전일 종가로 사용 4) 전일 종가 &amp;times; (1 + 변동률) = 오늘 추정 KOSPI 결과: KOSPI 6,185.95 (전일 6,226.05 대비 -0.64%) source: &quot;KRX (pykrx+yfinance)&quot;&lt;/div&gt;
&lt;div class=&quot;bs-stack-grid&quot;&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;시장 지표 캐시&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;4시간 &amp;rarr; &lt;span class=&quot;text-blue&quot;&gt;10분&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;종목 분석 캐시&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;4시간 &amp;rarr; &lt;span class=&quot;text-blue&quot;&gt;30분&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;KOSPI 지연&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;1~2일 &amp;rarr; &lt;span class=&quot;text-blue&quot;&gt;당일&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 02. 전일대비 변동률 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;02. 포트폴리오 전일 대비 변동률 추가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 평균 매입가 대비 수익률만 보여줬습니다. &quot;오늘 얼마나 올랐는지/빠졌는지&quot;를 즉시 확인하고 싶다는 니즈.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BE: prev_close + daily_change_pct&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;services/price.py&lt;/code&gt;가 현재가뿐 아니라 &lt;b&gt;전일 종가&lt;/b&gt;도 함께 반환하도록 확장. KR 종목은 pykrx OHLCV에서, US 종목은 yfinance &lt;code&gt;fast_info.previous_close&lt;/code&gt;에서 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;routers/portfolio.py&lt;/code&gt;에서 &lt;code&gt;(현재가 - 전일종가) / 전일종가 &amp;times; 100&lt;/code&gt;으로 변동률 계산.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FE: 이중 수익률 표시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종목 카드 우측에 전일 대비(▲/▼)와 평단 대비(배지) 두 가지를 함께 표시합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;삼성전자 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ₩216,000&lt;br /&gt;005930 &amp;middot; 50주 &amp;middot; 평균 ₩200,000 &amp;nbsp;&amp;nbsp; &lt;span class=&quot;text-down&quot;&gt;▼0.69%&lt;/span&gt; &amp;nbsp; &lt;span class=&quot;text-up&quot;&gt;+8.00%&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #8b95a1; font-size: 11px;&quot;&gt;전일대비 &amp;nbsp; 평단대비&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 03. Claude API 비용 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;03. Claude API 비용 최적화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3일간 briefings 테이블을 조사했더니, &lt;b&gt;하루에 22건&lt;/b&gt;이나 저장된 날이 있었습니다. 캐시가 있는데도 중복 호출이 발생.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-problem&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문제: 동시 요청 시 중복 Claude 호출&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 대시보드를 열면 뉴스 브리핑 + 전문가 분석이 동시 요청됩니다. 캐시 확인 &amp;rarr; 없음 &amp;rarr; Claude 호출이 &lt;b&gt;두 요청 모두에서&lt;/b&gt; 실행되어 같은 분석이 2번 생성&amp;middot;저장.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-solution&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;해결 1: 사용자별 asyncio.Lock&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;briefing.py&lt;/code&gt;와 &lt;code&gt;asset_management.py&lt;/code&gt;에 사용자 ID별 Lock을 추가. 같은 사용자의 동시 요청은 첫 번째가 완료될 때까지 대기 &amp;rarr; 두 번째는 캐시 히트.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-solution&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;해결 2: ANTHROPIC_FAST_MODEL 환경변수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조화 JSON 출력(유튜브/전문가 분석)에는 Haiku로 충분합니다. &lt;code&gt;.env&lt;/code&gt;에 한 줄 추가하면 해당 호출만 경량 모델로 전환.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;# .env (API tier 업그레이드 후 활성화) ANTHROPIC_FAST_MODEL=claude-haiku-4-5-20251001 # 모델 결정 로직 뉴스 브리핑 &amp;rarr; ANTHROPIC_MODEL (Sonnet) &amp;mdash; 품질 중요 유튜브 분석 &amp;rarr; ANTHROPIC_FAST_MODEL (Haiku) &amp;mdash; JSON 구조화 전문가 인사이트 &amp;rarr; ANTHROPIC_FAST_MODEL (Haiku) &amp;mdash; JSON 구조화&lt;/div&gt;
&lt;table class=&quot;bs-compare-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;기존&lt;/th&gt;
&lt;th&gt;최적화 후&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;중복 호출&lt;/td&gt;
&lt;td&gt;하루 최대 22건&lt;/td&gt;
&lt;td&gt;&lt;b&gt;최대 3건 보장&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;유튜브/전문가 모델&lt;/td&gt;
&lt;td&gt;Sonnet (고비용)&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Haiku 전환 가능&lt;/b&gt; (80% 절감)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;일일 비용 (예상)&lt;/td&gt;
&lt;td&gt;~$0.08 + 중복&lt;/td&gt;
&lt;td&gt;&lt;b&gt;~$0.04&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 04. 유튜브 파싱 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;04. 유튜브 JSON 파싱 안정화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 분석 결과가 빈 화면이거나 raw JSON이 그대로 노출되는 문제.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-problem&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문제: Claude가 JSON을 중첩 반환&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude에게 JSON 출력을 요청했더니, &lt;code&gt;consensus_summary&lt;/code&gt; 값 안에 &lt;b&gt;전체 JSON을 코드블록으로 감싸서&lt;/b&gt; 넣어버림. 외부 래퍼는 빈 배열만 남고, 실제 데이터는 문자열 속에 갇힌 구조.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;실제 DB에 저장된 깨진 데이터: { &quot;consensus&quot;: &quot;neutral&quot;, &amp;larr; 외부 래퍼 (빈 기본값) &quot;consensus_summary&quot;: &quot;```json\n{ &amp;larr; 여기 안에 실제 분석이 통째로! \&quot;consensus\&quot;: \&quot;bullish\&quot;, \&quot;keywords\&quot;: [...], ... }\n```&quot;, &quot;keywords&quot;: [], &amp;larr; 비어있음 &quot;channel_summaries&quot;: [] &amp;larr; 비어있음 }&lt;/div&gt;
&lt;div class=&quot;bs-solution&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;해결: 3단계 파싱 파이프라인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;_parse_claude_json()&lt;/code&gt; 함수를 신규 작성하여 다양한 형태의 Claude 응답을 모두 처리합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;_parse_claude_json() 파싱 파이프라인 1단계: 코드블록 제거 (```json ... ``` &amp;rarr; 순수 JSON) 2단계: 중첩 JSON 감지 &amp;rarr; consensus_summary가 &quot;{&quot;로 시작하면 내부 JSON 추출 &amp;rarr; 내부에 필수 키(consensus, keywords 등)가 있으면 대체 3단계: 잘린 JSON regex 폴백 &amp;rarr; 불완전한 JSON에서 consensus, consensus_summary 추출 &amp;rarr; 완전한 keyword 객체만 regex로 복구&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&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;bull; &quot;반드시 순수 JSON만 출력. &lt;code&gt;```json&lt;/code&gt; 코드블록으로 감싸지 마세요&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &quot;consensus_summary 값은 반드시 일반 텍스트 문장이어야 합니다&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; FE에서도 방어: &lt;code&gt;consensus_summary&lt;/code&gt;가 &lt;code&gt;{&lt;/code&gt; 또는 &lt;code&gt;```&lt;/code&gt;로 시작하면 렌더링 차단&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 05. 변경 파일 요약 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;05. 변경 파일 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15개 파일, +1,033줄 / -234줄&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;bs-compare-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;파일&lt;/th&gt;
&lt;th&gt;변경 내용&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/market_data.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;KOSPI pykrx 역산, 캐시 10분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/price.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;prev_close 함께 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/stock_analysis.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;캐시 30분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;routers/portfolio.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;daily_change_pct 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/claude_client.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;model_override + get_fast_model()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/briefing.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;사용자별 Lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/asset_management.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;사용자별 Lock + fast model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services/youtube.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파싱 파이프라인 + 프롬프트 강화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;backend/main.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.0.0.0 바인딩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;frontend/src/lib/api.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;타입 확장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;frontend/.../PortfolioList.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;전일대비 ▲/▼ 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;frontend/.../YouTubeSection.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON 렌더링 차단, 미사용 코드 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.env.example&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ANTHROPIC_FAST_MODEL 가이드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HANDOFF.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Phase 7 작업 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/dashboard-review-prompt.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;전문 투자자 관점 검토 프롬프트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 회고 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;06. 회고: 실사용이 드러내는 문제들&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Phase 6까지는 &quot;기능을 만드는&quot; 단계였다면, Phase 7은 &quot;실제로 쓰면서 고치는&quot; 단계였습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배운 점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터 소스를 맹신하지 말 것.&lt;/b&gt; yfinance가 한국 시장 데이터를 1~2일 지연 반환한다는 건 코드만 봐서는 알 수 없었습니다. 사용자가 &quot;코스피가 하락 중인데 상승으로 나온다&quot;고 말해줘야 발견. 데이터 파이프라인에는 반드시 교차 검증이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. LLM의 JSON 출력은 신뢰할 수 없다.&lt;/b&gt; &quot;JSON만 출력하세요&quot;라고 요청해도 Claude는 코드블록으로 감싸거나, 값 안에 JSON을 중첩하거나, 출력을 중간에 자릅니다. 프롬프트 + 파싱 + FE 방어를 3중으로 해야 안정적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 캐시가 있어도 동시성을 고려해야 한다.&lt;/b&gt; 일별 캐시가 적용되어 있었지만, 대시보드 로드 시 여러 컴포넌트가 동시에 API를 호출하면서 캐시 미스 구간에서 중복 생성이 발생했습니다. Lock 한 줄로 비용이 절반 이상 줄었습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;&lt;b&gt;다음 단계:&lt;/b&gt; Claude API 크레딧 충전 후 &lt;code&gt;ANTHROPIC_FAST_MODEL=claude-haiku-4-5-20251001&lt;/code&gt; 활성화로 비용 80% 추가 절감. 그리고 &lt;code&gt;docs/dashboard-review-prompt.md&lt;/code&gt;에 정리한 전문 투자자 관점 검토 프롬프트로 대시보드 고도화를 진행할 예정입니다.&lt;/div&gt;
&lt;/div&gt;</description>
      <category>IT 기술/AI</category>
      <category>Claude</category>
      <category>Claude_API</category>
      <category>Nextjs</category>
      <category>바이브코딩</category>
      <category>투자대시보드</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/60</guid>
      <comments>https://keun90.tistory.com/60#entry60comment</comments>
      <pubDate>Fri, 17 Apr 2026 20:20:03 +0900</pubDate>
    </item>
    <item>
      <title>BriefStock 개발일지 #4 - 인증 연동&amp;middot;포트폴리오 심층 분석&amp;middot;데이터 정확성 개선 (Phase 5~6)</title>
      <link>https://keun90.tistory.com/59</link>
      <description>&lt;style&gt;
  .bs-hero {
    background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
    color: #fff;
    padding: 48px 36px;
    border-radius: 16px;
    margin-bottom: 36px;
    text-align: center;
  }
  .bs-hero h1 { font-size: 28px; font-weight: 800; margin-bottom: 12px; letter-spacing: -0.02em; }
  .bs-hero .subtitle { font-size: 15px; color: #a0a0b0; margin-bottom: 8px; }
  .bs-hero .date { font-size: 13px; color: #666; }

  .bs-section-title {
    font-size: 20px; font-weight: 700; color: #1a1a2e;
    margin: 40px 0 16px; padding-bottom: 8px;
    border-bottom: 2px solid #3182F6;
  }
  .bs-sub-title { font-size: 16px; font-weight: 600; color: #1a1a2e; margin: 24px 0 10px; }

  .bs-card {
    background: #f7f8fc; border-radius: 12px;
    padding: 24px; margin-bottom: 16px;
  }
  .bs-card-title { font-size: 15px; font-weight: 700; color: #1a1a2e; margin-bottom: 10px; }

  .bs-dark-box {
    background: #0C0E14; color: #e0e0e0;
    padding: 24px 28px; border-radius: 12px;
    font-family: 'Courier New', monospace; font-size: 13px;
    line-height: 1.7; overflow-x: auto; margin-bottom: 16px;
    white-space: pre-wrap;
  }

  .bs-phase-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; font-size: 14px; }
  .bs-phase-table th { background: #3182F6; color: #fff; padding: 10px 14px; text-align: left; }
  .bs-phase-table td { padding: 10px 14px; border-bottom: 1px solid #eee; color: #333; }
  .bs-phase-table tr:hover td { background: #f0f4ff; }

  .bs-tip {
    background: #f0f4ff; border-left: 4px solid #3182F6;
    padding: 16px 20px; border-radius: 0 10px 10px 0;
    margin-bottom: 16px; font-size: 14px; color: #333;
  }
  .bs-tip .num {
    display: inline-block; width: 24px; height: 24px; line-height: 24px;
    background: #3182F6; color: #fff; border-radius: 50%;
    text-align: center; font-size: 13px; font-weight: 700; margin-right: 8px;
  }

  .badge-done {
    display: inline-block; padding: 3px 10px; border-radius: 6px;
    background: #e8f5e9; color: #2e7d32; font-size: 12px; font-weight: 600;
  }
  .badge-todo {
    display: inline-block; padding: 3px 10px; border-radius: 6px;
    background: #fff3e0; color: #e65100; font-size: 12px; font-weight: 600;
  }
  .badge-progress {
    display: inline-block; padding: 3px 10px; border-radius: 6px;
    background: #e3f2fd; color: #1565c0; font-size: 12px; font-weight: 600;
  }

  .bs-bug-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; font-size: 13px; }
  .bs-bug-table th { background: #dc2626; color: #fff; padding: 10px 14px; text-align: left; }
  .bs-bug-table td { padding: 10px 14px; border-bottom: 1px solid #eee; color: #333; }
  .bs-bug-table tr:hover td { background: #fef2f2; }
&lt;/style&gt;

&lt;div class=&quot;bs-hero&quot;&gt;
  &lt;h1 style=&quot;color: white;&quot;&gt;BriefStock 개발일지 #4&lt;/h1&gt;
  &lt;p class=&quot;subtitle&quot;&gt;인증 연동 · 포트폴리오 심층 분석 · 데이터 정확성 개선&lt;/p&gt;
  &lt;p class=&quot;date&quot;&gt;Phase 5 배포 준비 + Phase 6 고도화 | 2026-04-14&lt;/p&gt;
&lt;/div&gt;

&lt;h2 class=&quot;bs-section-title&quot;&gt;01 오늘 한 일 요약&lt;/h2&gt;

&lt;div class=&quot;bs-card&quot;&gt;
  &lt;p style=&quot;font-size:15px; line-height:1.8; color:#333;&quot;&gt;
    이번 세션에서는 크게 두 갈래로 작업했습니다.&lt;br&gt;&lt;br&gt;
    &lt;strong&gt;Phase 5 (배포 준비)&lt;/strong&gt;: Supabase Auth JWT 인증을 전체 API에 연동하고, 로그인/로그아웃 UI를 추가했습니다. 하드코딩되어 있던 user_id를 제거하고 실제 인증 토큰 기반으로 전환했습니다.&lt;br&gt;&lt;br&gt;
    &lt;strong&gt;Phase 6 (고도화)&lt;/strong&gt;: 포트폴리오 심층 분석 엔진을 새로 구축하고, 기존 코드의 데이터 정확성 버그 4건을 수정했습니다. AI 프롬프트를 '추측 금지, 수치 근거 필수' 원칙으로 전면 개편했습니다.
  &lt;/p&gt;
&lt;/div&gt;

&lt;h2 class=&quot;bs-section-title&quot;&gt;02 Phase 상태&lt;/h2&gt;

&lt;table class=&quot;bs-phase-table&quot;&gt;
  &lt;tr&gt;&lt;th&gt;Phase&lt;/th&gt;&lt;th&gt;내용&lt;/th&gt;&lt;th&gt;상태&lt;/th&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;0~1&lt;/td&gt;&lt;td&gt;환경 세팅 + 앱 골격&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;포트폴리오 CRUD + 시세&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;AI 투자 브리핑 + 리스크&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5~3.9&lt;/td&gt;&lt;td&gt;UI 리디자인 + 코드 품질&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;유튜브 컨센서스 분석&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;배포 준비 (Auth 연동)&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;고도화 (심층 분석)&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;badge-progress&quot;&gt;진행 중&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2 class=&quot;bs-section-title&quot;&gt;03 Phase 5 — 배포 준비&lt;/h2&gt;

&lt;h4 class=&quot;bs-sub-title&quot;&gt;Supabase Auth 인증 연동&lt;/h4&gt;

&lt;div class=&quot;bs-card&quot;&gt;
  &lt;div class=&quot;bs-card-title&quot;&gt;BE: JWT 인증 미들웨어&lt;/div&gt;
  &lt;p style=&quot;font-size:14px; line-height:1.7; color:#555;&quot;&gt;
    &lt;code&gt;routers/auth.py&lt;/code&gt;에 &lt;code&gt;get_current_user_id&lt;/code&gt; 의존성을 추가하여 모든 API 엔드포인트에서 Supabase JWT 토큰을 검증합니다. Authorization 헤더가 없거나 유효하지 않으면 401을 반환합니다. DEV_USER_ID 환경변수 폴백으로 개발 편의성도 유지했습니다.
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;bs-card&quot;&gt;
  &lt;div class=&quot;bs-card-title&quot;&gt;FE: 로그인 게이트 + 자동 토큰 주입&lt;/div&gt;
  &lt;p style=&quot;font-size:14px; line-height:1.7; color:#555;&quot;&gt;
    &lt;code&gt;AuthProvider&lt;/code&gt;가 Supabase 세션을 감시하고, &lt;code&gt;api.ts&lt;/code&gt;의 모든 fetch 요청에 자동으로 JWT를 주입합니다. 미로그인 시 &lt;code&gt;LoginForm&lt;/code&gt;이 표시되고, 로그인 후 대시보드로 전환됩니다.
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;bs-dark-box&quot;&gt;backend/routers/auth.py — JWT 인증
frontend/src/components/auth/AuthProvider.tsx — 세션 관리
frontend/src/components/auth/LoginForm.tsx — 로그인 폼
frontend/src/lib/api.ts — 자동 JWT 헤더 주입
page.tsx — 로그인 게이트 + 로그아웃 + 다크/라이트 테마 토글&lt;/div&gt;

&lt;h2 class=&quot;bs-section-title&quot;&gt;04 Phase 6 — 포트폴리오 심층 분석&lt;/h2&gt;

&lt;h4 class=&quot;bs-sub-title&quot;&gt;신규 분석 엔진&lt;/h4&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;1&lt;/span&gt; &lt;strong&gt;portfolio_analysis.py&lt;/strong&gt; — yfinance 기반 정량 분석&lt;br&gt;
  종목별: 배당 이력/CAGR, 베타, 변동성, MDD, 샤프 비율, 52주 위치&lt;br&gt;
  포트폴리오: 공분산 기반 변동성, 섹터/지역/시가총액 분포, 상관관계, 블랙스완 시나리오, 기회비용(vs S&amp;P500/KOSPI)
&lt;/div&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;2&lt;/span&gt; &lt;strong&gt;asset_management.py&lt;/strong&gt; — Claude AI 분석 (데이터 기반)&lt;br&gt;
  건강 점수(0~100), 리밸런싱 가이드, DRIP 시뮬레이션(10/20/30년)&lt;br&gt;
  모든 문장에 수치 근거 필수, 추측/조언 표현 금지
&lt;/div&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;3&lt;/span&gt; &lt;strong&gt;AssetManagement.tsx&lt;/strong&gt; — 포트폴리오 분석 탭 UI&lt;br&gt;
  자산 총괄(도넛 차트), 배당 분석(캘린더), 위험도(게이지+테이블), 상관관계, 블랙스완, 기회비용, 리밸런싱, 전문가 인사이트, DRIP
&lt;/div&gt;

&lt;h4 class=&quot;bs-sub-title&quot;&gt;데이터 정확성 버그 수정 4건&lt;/h4&gt;

&lt;table class=&quot;bs-bug-table&quot;&gt;
  &lt;tr&gt;&lt;th&gt;버그&lt;/th&gt;&lt;th&gt;원인&lt;/th&gt;&lt;th&gt;수정&lt;/th&gt;&lt;th&gt;영향&lt;/th&gt;&lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;배당수익률 113% 표시&lt;/td&gt;
    &lt;td&gt;yfinance가 이미 % 값(1.13)을 반환하는데 ×100을 또 적용&lt;/td&gt;
    &lt;td&gt;×100 제거&lt;/td&gt;
    &lt;td&gt;삼성전자 113% → 1.13%&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;NaN JSON 에러 + CORS 누락&lt;/td&gt;
    &lt;td&gt;yfinance 반환값에 NaN 포함 → json.dumps 실패 → 500 에러가 CORS 미들웨어 밖에서 발생&lt;/td&gt;
    &lt;td&gt;_sanitize() 함수로 NaN/Inf를 None 치환&lt;/td&gt;
    &lt;td&gt;포트폴리오 분석 탭 로딩 실패 해결&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;뉴스 브리핑에 JSON 표시&lt;/td&gt;
    &lt;td&gt;briefings 테이블에 전문가 분석 JSON이 섞여 캐시 조회 시 JSON 반환&lt;/td&gt;
    &lt;td&gt;마크다운만 필터링 (JSON 시작 제외)&lt;/td&gt;
    &lt;td&gt;AI 종합 판단에 정상 마크다운 표시&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;샤프 비율 부정확&lt;/td&gt;
    &lt;td&gt;종목별 샤프의 단순 가중평균 (수학적으로 틀림) + KR/US 거래일 불일치로 공분산 NaN&lt;/td&gt;
    &lt;td&gt;공분산 행렬 기반 계산 + 날짜 인덱스 정규화&lt;/td&gt;
    &lt;td&gt;수동 검산과 일치 확인 (변동성 50.0%, 샤프 5.39)&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;h4 class=&quot;bs-sub-title&quot;&gt;성능 최적화&lt;/h4&gt;

&lt;div class=&quot;bs-card&quot;&gt;
  &lt;div class=&quot;bs-card-title&quot;&gt;Before vs After&lt;/div&gt;
  &lt;p style=&quot;font-size:14px; line-height:1.7; color:#555;&quot;&gt;
    &lt;strong&gt;수정 전:&lt;/strong&gt; 포트폴리오 분석 탭 진입 → 31초 로딩 스켈레톤 → 한 번에 전부 렌더링&lt;br&gt;
    &lt;strong&gt;수정 후:&lt;/strong&gt; 2초 만에 자산/배당/위험도 표시 → 전문가 분석은 백그라운드 로딩&lt;br&gt;&lt;br&gt;
    &lt;strong&gt;적용 기법:&lt;/strong&gt;&lt;br&gt;
    • FE 병렬 API 호출 (portfolio-analysis + expert-analysis 동시 요청)&lt;br&gt;
    • BE 인메모리 캐시 60초 TTL (yfinance 중복 호출 제거)&lt;br&gt;
    • Claude max_tokens 2000→3000 + 프롬프트 간결화 (JSON 잘림 방지)
  &lt;/p&gt;
&lt;/div&gt;

&lt;h4 class=&quot;bs-sub-title&quot;&gt;AI 프롬프트 탈추측화&lt;/h4&gt;

&lt;div class=&quot;bs-dark-box&quot;&gt;수정 전: &quot;당신은 CFA·CAIA 자격 보유 자산관리 전문가입니다&quot;
수정 후: &quot;당신은 정량 데이터 분석기입니다. 의견이나 추측이 아닌 수치 사실만 서술합니다&quot;

금지: 추측 표현, 투자 조언, 감정적/과장 표현, 데이터에 없는 정보
필수: 모든 문장에 근거 수치 포함, 비교 시 기준 명시, severity 임계값 기준 명시&lt;/div&gt;

&lt;h2 class=&quot;bs-section-title&quot;&gt;05 다음 작업&lt;/h2&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;1&lt;/span&gt; &lt;strong&gt;Phase 5 완료 — 실제 배포&lt;/strong&gt;&lt;br&gt;
  Vercel(FE) + Railway(BE) 배포, 환경변수 production 분리, CD 파이프라인
&lt;/div&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;2&lt;/span&gt; &lt;strong&gt;Phase 6 계속 — 분석 고도화&lt;/strong&gt;&lt;br&gt;
  yfinance 호출 최적화, 전문가 분석 JSON 파싱 안정성, 상관관계 히트맵, 종목 10개+ 성능 프로파일링
&lt;/div&gt;

&lt;div class=&quot;bs-tip&quot;&gt;
  &lt;span class=&quot;num&quot;&gt;3&lt;/span&gt; &lt;strong&gt;UX 개선&lt;/strong&gt;&lt;br&gt;
  유튜브 채널 URL 자동 감지, 모바일 반응형 조정, 에러 바운더리 통일
&lt;/div&gt;

&lt;p style=&quot;text-align:center; margin-top:40px; font-size:13px; color:#999;&quot;&gt;
  BriefStock 개발일지 #3 | 2026-04-14 | Claude Opus 4.6 + Human 협업
&lt;/p&gt;</description>
      <category>IT 기술/AI</category>
      <category>BriefStock</category>
      <category>Claude API</category>
      <category>FastAPI</category>
      <category>Next.js</category>
      <category>Supabase Auth</category>
      <category>yfinance</category>
      <category>바이브코딩</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/59</guid>
      <comments>https://keun90.tistory.com/59#entry59comment</comments>
      <pubDate>Tue, 14 Apr 2026 19:50:54 +0900</pubDate>
    </item>
    <item>
      <title>BriefStock 개발일지 #3 - 코드 품질 개선&amp;middot;대시보드 재설계&amp;middot;유튜브 컨센서스 분석</title>
      <link>https://keun90.tistory.com/58</link>
      <description>&lt;div&gt;
&lt;style&gt;
  .bs-hero {
    background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
    color: #fff;
    padding: 48px 36px;
    border-radius: 16px;
    margin-bottom: 36px;
    text-align: center;
  }
  .bs-hero h1 { font-size: 28px; font-weight: 800; margin-bottom: 12px; letter-spacing: -0.02em; }
  .bs-hero .subtitle { font-size: 15px; color: #a0a0b0; margin-bottom: 8px; }
  .bs-hero .date { font-size: 13px; color: #666; }

  .bs-section-title {
    font-size: 20px; font-weight: 700; color: #1a1a2e;
    margin: 40px 0 16px; padding-bottom: 8px;
    border-bottom: 2px solid #3182F6;
  }
  .bs-sub-title { font-size: 16px; font-weight: 600; color: #1a1a2e; margin: 24px 0 10px; }

  .bs-card {
    background: #f7f8fc; border-radius: 12px;
    padding: 24px; margin-bottom: 16px;
  }
  .bs-card-title { font-size: 15px; font-weight: 700; color: #1a1a2e; margin-bottom: 10px; }

  .bs-dark-box {
    background: #0C0E14; color: #e0e0e0;
    padding: 24px 28px; border-radius: 12px;
    font-family: 'Courier New', monospace; font-size: 13px;
    line-height: 1.7; overflow-x: auto; margin-bottom: 16px;
    white-space: pre-wrap;
  }

  .bs-phase-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; font-size: 14px; }
  .bs-phase-table th { background: #3182F6; color: #fff; padding: 10px 14px; text-align: left; }
  .bs-phase-table td { padding: 10px 14px; border-bottom: 1px solid #eee; }
  .bs-phase-table tr:hover { background: #f0f4ff; }

  .badge-done { display: inline-block; background: #e8f5e9; color: #2e7d32; padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 600; }
  .badge-new { display: inline-block; background: #e3f2fd; color: #1565c0; padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 600; }
  .badge-todo { display: inline-block; background: #f5f5f5; color: #888; padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 600; }

  .bs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 20px; }
  @media (max-width: 600px) { .bs-grid { grid-template-columns: 1fr; } }

  .bs-tip { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
  .bs-tip-num {
    min-width: 28px; height: 28px; border-radius: 50%;
    background: #3182F6; color: #fff; font-size: 13px; font-weight: 700;
    display: flex; align-items: center; justify-content: center;
  }
  .bs-tip-text { font-size: 14px; color: #1a1a2e; line-height: 1.6; }
  .bs-tip-text strong { color: #3182F6; }

  .bs-keyword {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 4px 12px; border-radius: 8px; font-size: 13px; font-weight: 500; margin: 3px;
  }
  .bs-keyword.positive { background: rgba(220,38,38,0.08); color: #DC2626; }
  .bs-keyword.negative { background: rgba(37,99,235,0.08); color: #2563EB; }
  .bs-keyword.neutral { background: #f0f0f3; color: #666; }

  p { font-size: 14px; line-height: 1.75; color: #1a1a2e; }
&lt;/style&gt;
&lt;/div&gt;
&lt;!-- ===== 히어로 ===== --&gt;
&lt;div class=&quot;bs-hero&quot;&gt;
&lt;h1 style=&quot;color: white;&quot;&gt;BriefStock 개발기 #3&lt;/h1&gt;
&lt;div class=&quot;subtitle&quot;&gt;코드 품질 개선 + 대시보드 재설계 + 유튜브 분석 완성&lt;/div&gt;
&lt;div class=&quot;date&quot;&gt;2026.04.13 &amp;middot; Phase 3.7~4&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== 01. Phase 현황 ===== --&gt;
&lt;h2 class=&quot;bs-section-title&quot; data-ke-size=&quot;size26&quot;&gt;01. Phase 현황&lt;/h2&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 0~1&lt;/td&gt;
&lt;td&gt;환경 세팅 + 앱 골격&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 2&lt;/td&gt;
&lt;td&gt;포트폴리오 CRUD + 시세 조회&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 3&lt;/td&gt;
&lt;td&gt;AI 뉴스 브리핑 + 종목 분석&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 3.7~3.9&lt;/td&gt;
&lt;td&gt;코드 품질 + 대시보드 + 라이트 모드&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-new&quot;&gt;오늘 완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 4&lt;/td&gt;
&lt;td&gt;유튜브 분석 (자막 추출 + 컨센서스)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-new&quot;&gt;오늘 완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 5&lt;/td&gt;
&lt;td&gt;배포 (Vercel + Railway + Auth)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-todo&quot;&gt;다음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- ===== 02. 코드 품질 개선 ===== --&gt;
&lt;h2 class=&quot;bs-section-title&quot; data-ke-size=&quot;size26&quot;&gt;02. 코드 품질 개선 (7건)&lt;/h2&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;치명적 버그 수정&lt;/h4&gt;
&lt;div class=&quot;bs-grid&quot;&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;  코스닥 종목 인식 불가&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yfinance 심볼이 &lt;code&gt;.KS&lt;/code&gt;(코스피)만 지원 &amp;rarr; &lt;code&gt;.KQ&lt;/code&gt;(코스닥) 자동 폴백 추가. 코스닥 종목도 정상 분석 가능.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;  Python 3.12 크래시&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;asyncio.coroutine&lt;/code&gt;은 Python 3.11에서 제거됨. 빈 포트폴리오 시 서버 500 에러 &amp;rarr; &lt;code&gt;if/else&lt;/code&gt; 분기로 안전하게 교체.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;보안 개선&lt;/h4&gt;
&lt;div class=&quot;bs-grid&quot;&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt; ️ XSS 취약점 제거&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt; + 정규식 마크다운 &amp;rarr; &lt;code&gt;react-markdown&lt;/code&gt; + &lt;code&gt;remark-gfm&lt;/code&gt; 전환.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt; ️ 에러 메시지 마스킹&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 응답에 &lt;code&gt;str(e)&lt;/code&gt; 노출 &amp;rarr; 서버 로그에만 기록, 클라이언트는 한국어 일반 메시지.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;성능 + 코드 정리&lt;/h4&gt;
&lt;div class=&quot;bs-grid&quot;&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;⚡ RSS 병렬 수집&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8개 뉴스 피드 순차 호출 &amp;rarr; &lt;code&gt;ThreadPoolExecutor&lt;/code&gt; 병렬. 수집 시간 3~5배 단축.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;⚙️ 환경변수 정리&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude 모델 ID 하드코딩 &amp;rarr; &lt;code&gt;ANTHROPIC_MODEL&lt;/code&gt; 환경변수. CORS origin 동적화.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== 03. 대시보드 재설계 ===== --&gt;
&lt;h2 class=&quot;bs-section-title&quot; data-ke-size=&quot;size26&quot;&gt;03. 대시보드 UI 전면 재설계&lt;/h2&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;탭 &amp;rarr; 분석가 워크플로우&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 3탭 구조(포트폴리오|브리핑|유튜브)를 제거하고, 투자 분석가가 실제로 정보를 소비하는 순서로 재배치했습니다.&lt;/p&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;① 매크로 지표 &amp;mdash; &quot;오늘 시장 분위기는?&quot; ② 포트폴리오 &amp;mdash; &quot;내 종목은 어떻게 됐나?&quot; ③ 리스크 경고 &amp;mdash; &quot;당장 조치할 게 있나?&quot; ④ 종목 심층 분석 &amp;mdash; &quot;왜 이렇게 움직였나?&quot; ⑤ AI 종합 판단 &amp;mdash; &quot;그래서 어떻게 해야 하나?&quot; ⑥ 유튜브 컨센서스 &amp;mdash; &quot;전문가들은 뭐라고 하나?&quot;&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;PC 2컬럼 레이아웃&lt;/h4&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1280px 이상:&lt;/b&gt; 메인 컬럼(분석 플로우) + 사이드바(포트폴리오+리스크) sticky 고정&lt;br /&gt;&lt;b&gt;1280px 미만:&lt;/b&gt; 단일 컬럼 유지 (모바일 호환)&lt;/p&gt;
&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;라이트 모드 전환&lt;/h4&gt;
&lt;div class=&quot;bs-grid&quot;&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;Before (다크)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경 #09090B &amp;middot; 카드 #151518 &amp;middot; 곤색 톤&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;After (라이트)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경 #F5F5F7 &amp;middot; 카드 #FFFFFF &amp;middot; 그림자+테두리 &amp;middot; 폰트 확대&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;추가 기능&lt;/h4&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;bs-tip-num&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;bs-tip-text&quot;&gt;&lt;b&gt;VIX 투자 가이드 툴팁&lt;/b&gt; &amp;mdash; 각 구간(매우 안정~공포) 위에 마우스를 올리면 투자 행동 가이드 표시&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;bs-tip-num&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;bs-tip-text&quot;&gt;&lt;b&gt;포트폴리오 비중 시각화&lt;/b&gt; &amp;mdash; 종목별 컬러 비중 바 + KR/US 지역 비중 표시&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;bs-tip-num&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;bs-tip-text&quot;&gt;&lt;b&gt;지수 표시 수정&lt;/b&gt; &amp;mdash; 코스피/S&amp;amp;P/나스닥에서 화폐 기호(₩/$) 제거 &amp;rarr; 포인트 단위&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== 04. 유튜브 분석 ===== --&gt;
&lt;h2 class=&quot;bs-section-title&quot; data-ke-size=&quot;size26&quot;&gt;04. Phase 4: 유튜브 분석 완성&lt;/h2&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;데이터 파이프라인&lt;/h4&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;채널 등록 (최대 5개) &amp;darr; YouTube RSS 피드 &amp;rarr; 채널당 최근 5개 영상 (병렬) &amp;darr; youtube-transcript-api &amp;rarr; 한국어/영어 자막 추출 (병렬) &amp;darr; Claude &amp;rarr; 개별 영상 투자 요약 (영구 캐시) &amp;darr; Claude &amp;rarr; JSON 구조화 &quot;유튜브 컨센서스&quot; (일별 캐시)&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;구조화된 컨센서스 출력&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude가 마크다운이 아닌 &lt;b&gt;JSON 구조화 데이터&lt;/b&gt;로 응답합니다.&lt;/p&gt;
&lt;div class=&quot;bs-grid&quot;&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;  컨센서스 게이지&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 시장 전망: 강세 / 중립 / 약세&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt; ️ 키워드 태그&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭하면 상세 분석 펼침 (종목, 감성, 언급 채널)&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;  채널별 카드&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 채널의 stance(강세/중립/약세) + 핵심 주장 요약&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;⚠️ 리스크 &amp;amp; 행동&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통 리스크 요인 + 구체적 행동 가이드&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 class=&quot;bs-sub-title&quot; data-ke-size=&quot;size20&quot;&gt;실제 테스트 결과 (삼프로TV + 소수몽키)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨센서스: &lt;b&gt;중립&lt;/b&gt; &amp;mdash; 전쟁 리스크 + AI/우주 성장 테마 공존&lt;/p&gt;
&lt;div style=&quot;margin: 16px 0;&quot;&gt;&lt;span class=&quot;bs-keyword negative&quot;&gt;중동 전쟁 4회&lt;/span&gt; &lt;span class=&quot;bs-keyword positive&quot;&gt;비트코인 3회&lt;/span&gt; &lt;span class=&quot;bs-keyword positive&quot;&gt;스페이스X 3회&lt;/span&gt; &lt;span class=&quot;bs-keyword positive&quot;&gt;AI 2회&lt;/span&gt; &lt;span class=&quot;bs-keyword positive&quot;&gt;메모리 반도체 2회&lt;/span&gt; &lt;span class=&quot;bs-keyword positive&quot;&gt;미중 패권경쟁 1회&lt;/span&gt;&lt;/div&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;채널&lt;/th&gt;
&lt;th&gt;영상&lt;/th&gt;
&lt;th&gt;스탠스&lt;/th&gt;
&lt;th&gt;핵심 주장&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;삼프로TV&lt;/td&gt;
&lt;td&gt;4개&lt;/td&gt;
&lt;td&gt;중립&lt;/td&gt;
&lt;td&gt;전쟁 리스크 경계 + 비트코인 중립자산 + AI 펀더멘털 긍정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;소수몽키&lt;/td&gt;
&lt;td&gt;4개&lt;/td&gt;
&lt;td&gt;강세&lt;/td&gt;
&lt;td&gt;스페이스X 상장 + AI 기업가치 폭등 &amp;rarr; 투자 기회 적극 제시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- ===== 05. 다음 계획 ===== --&gt;
&lt;h2 class=&quot;bs-section-title&quot; data-ke-size=&quot;size26&quot;&gt;05. 다음 계획&lt;/h2&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;우선순위&lt;/th&gt;
&lt;th&gt;작업&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Phase 5: 배포&lt;/td&gt;
&lt;td&gt;Supabase Auth + Vercel(FE) + Railway(BE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;UX 개선&lt;/td&gt;
&lt;td&gt;유튜브 URL&amp;rarr;채널ID 자동 감지, 다크/라이트 토글&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;기능 확장&lt;/td&gt;
&lt;td&gt;포트폴리오 종목 수정, 알림 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- ===== 메타 ===== --&gt;
&lt;div class=&quot;bs-card&quot; style=&quot;background: #f0f4ff; margin-top: 32px;&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;  변경 파일 18개 &amp;middot; 코드 +1,343줄 / -234줄&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술 스택: Next.js 16 &amp;middot; FastAPI &amp;middot; Supabase &amp;middot; Claude Sonnet &amp;middot; youtube-transcript-api &amp;middot; react-markdown&lt;/p&gt;
&lt;/div&gt;</description>
      <category>IT 기술/AI</category>
      <category>AI개발</category>
      <category>Claude API</category>
      <category>바이브코딩</category>
      <category>사이드프로젝트</category>
      <category>주식분석</category>
      <category>클로드코딩</category>
      <category>투자프로그램</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/58</guid>
      <comments>https://keun90.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 13 Apr 2026 20:10:10 +0900</pubDate>
    </item>
    <item>
      <title>BriefStock 개발일지 #2 - AI 투자 브리핑 시스템 구축 (매크로&amp;middot;종목분석&amp;middot;리스크&amp;middot;Claude 종합판단)</title>
      <link>https://keun90.tistory.com/57</link>
      <description>&lt;div&gt;
&lt;style&gt;
.bs-wrap{max-width:860px;margin:0 auto;font-family:'Pretendard','Apple SD Gothic Neo',sans-serif;color:#1a1a2e;line-height:1.8}
.bs-hero{background:linear-gradient(135deg,#0C0E14 0%,#161B27 100%);color:#fff;padding:48px 36px;border-radius:20px;margin-bottom:36px}
.bs-hero h1{font-size:32px;font-weight:800;margin:0 0 12px;letter-spacing:-0.02em}
.bs-hero p{font-size:15px;color:#8B95A1;margin:0;line-height:1.6}
.bs-hero .badge{display:inline-block;background:#3182F6;color:#fff;font-size:12px;font-weight:600;padding:4px 12px;border-radius:20px;margin-bottom:16px}
.bs-section{border-left:4px solid #3182F6;padding:20px 24px;margin:32px 0;background:#f7f8fc;border-radius:0 12px 12px 0}
.bs-section h2{font-size:20px;font-weight:700;margin:0 0 8px;color:#1a1a2e}
.bs-section p{font-size:14px;color:#555;margin:4px 0}
.bs-card{background:#f7f8fc;border-radius:12px;padding:20px 24px;margin:16px 0}
.bs-card h3{font-size:16px;font-weight:700;margin:0 0 10px;color:#1a1a2e}
.bs-dark-box{background:#0C0E14;color:#F2F4F6;border-radius:12px;padding:20px 24px;margin:16px 0;font-size:13px;line-height:1.7}
.bs-dark-box code{color:#3182F6;font-size:13px}
.bs-code{background:#161B27;color:#F2F4F6;border-radius:10px;padding:18px 22px;margin:12px 0;font-family:'Geist Mono',monospace;font-size:13px;line-height:1.7;overflow-x:auto;white-space:pre}
.bs-phase-table{width:100%;border-collapse:separate;border-spacing:0;margin:20px 0;border-radius:12px;overflow:hidden}
.bs-phase-table th{background:#3182F6;color:#fff;padding:12px 16px;font-size:13px;font-weight:600;text-align:left}
.bs-phase-table td{padding:12px 16px;font-size:13px;border-bottom:1px solid #eee;background:#fff}
.bs-phase-table tr:last-child td{border-bottom:none}
.badge-done{display:inline-block;background:#e6f4ea;color:#1a7f4b;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.badge-todo{display:inline-block;background:#f0f0f0;color:#888;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.badge-new{display:inline-block;background:#e8f0fe;color:#3182F6;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.divider{height:1px;background:linear-gradient(90deg,transparent,#ddd,transparent);margin:36px 0}
.bs-stack-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}
.bs-stack-grid .item{background:#f7f8fc;border-radius:10px;padding:16px;text-align:center}
.bs-stack-grid .item .label{font-size:11px;color:#888;margin-bottom:4px}
.bs-stack-grid .item .value{font-size:14px;font-weight:700;color:#1a1a2e}
.bs-eval-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:16px 0}
.bs-eval-grid .item{background:#f7f8fc;border-radius:10px;padding:16px}
.bs-eval-grid .item h4{font-size:13px;font-weight:600;color:#1a1a2e;margin:0 0 6px}
.bs-eval-grid .item p{font-size:12px;color:#555;margin:0;line-height:1.6}
.bs-tip{background:#f7f8fc;border-radius:12px;padding:16px 20px;margin:12px 0;font-size:13px;color:#555}
.bs-tip strong{color:#3182F6}
.text-up{color:#F04452}
.text-down{color:#5071D9}
@media(max-width:600px){.bs-stack-grid,.bs-eval-grid{grid-template-columns:1fr}.bs-hero{padding:32px 24px}.bs-hero h1{font-size:24px}}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-wrap&quot;&gt;&lt;!-- 히어로 --&gt;
&lt;div class=&quot;bs-hero&quot;&gt;&lt;span class=&quot;badge&quot;&gt;BriefStock 개발일지&lt;/span&gt;
  &lt;h1 style=&quot;color: white;&quot;&gt;Phase 2~3 완료: AI 투자 브리핑 시스템 구축&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트폴리오 시세 조회 &amp;middot; 매크로 대시보드 &amp;middot; 종목 심층 분석 &amp;middot; 리스크 진단 &amp;middot; Claude AI 종합 판단&lt;br /&gt;토스 스타일 다크 UI 전면 리디자인까지&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 진행 상태 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 진행 현황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Phase 0~1에 이어 Phase 2~3을 완료했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 0&lt;/td&gt;
&lt;td&gt;환경 세팅 (FastAPI + Next.js + Supabase + Docker + CI)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 1&lt;/td&gt;
&lt;td&gt;앱 골격 (Supabase 연결, API 계약, 라우터 스켈레톤)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 2&lt;/td&gt;
&lt;td&gt;포트폴리오 (시세 조회, 수익률 계산, 종목 CRUD UI)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 3&lt;/td&gt;
&lt;td&gt;AI 투자 브리핑 (매크로&amp;middot;종목분석&amp;middot;리스크&amp;middot;Claude 종합판단)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 3.5&lt;/td&gt;
&lt;td&gt;UI 리디자인 (토스 스타일 전면 개편)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 4&lt;/td&gt;
&lt;td&gt;유튜브 분석 (채널 관리, 자막 추출, 시황 분석)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-todo&quot;&gt;예정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 5&lt;/td&gt;
&lt;td&gt;배포 (Vercel + Railway + Supabase Auth)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-todo&quot;&gt;예정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- Phase 2 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;01. Phase 2 &amp;mdash; 포트폴리오 시세 조회&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보유 종목의 현재가를 실시간으로 가져와 수익률을 자동 계산합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BE: 시세 조회 서비스&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;backend/services/price.py&lt;/code&gt; &amp;mdash; 국내(pykrx)와 해외(yfinance) 종목의 현재가를 비동기로 조회합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;backend/services/price.py ├── _get_kr_price() &amp;rarr; pykrx 국내 종가 (최근 5영업일 범위) ├── _get_us_price() &amp;rarr; yfinance 해외 현재가 └── get_price() &amp;rarr; asyncio.to_thread 비동기 래핑 GET /api/portfolio 응답 변경: 기존: { items: PortfolioItem[] } 변경: { items: PortfolioItemWithPrice[] } 추가 필드: current_price, pnl_pct, currency&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FE: 포트폴리오 UI&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 평가금액 요약 카드 + 종목별 현재가&amp;middot;수익률 카드 + 종목 추가 폼을 구현했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-grid&quot;&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;총 평가금액&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;₩2,061,302&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;수익률 배지&lt;/div&gt;
&lt;div class=&quot;value&quot; style=&quot;color: #f04452;&quot;&gt;+12.3%&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;시장 선택&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;KR / US&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- Phase 3 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;02. Phase 3 &amp;mdash; AI 투자 브리핑 시스템&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증권사 리서치 수준의 투자 분석을 자동화합니다. 4개 데이터 레이어 + Claude AI 종합 판단.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;&lt;b&gt;아키텍처: 4-Layer 데이터 수집 &amp;rarr; Claude 종합 분석&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Layer 1. &lt;code&gt;market_data.py&lt;/code&gt; &amp;mdash; 매크로 8개 지표 (KOSPI, S&amp;amp;P500, NASDAQ, VIX, USD/KRW, WTI, Gold, US10Y)&lt;br /&gt;Layer 2. &lt;code&gt;stock_analysis.py&lt;/code&gt; &amp;mdash; 종목별 심층 (펀더멘털&amp;middot;기술적&amp;middot;컨센서스&amp;middot;실적&amp;middot;내부자&amp;middot;기관)&lt;br /&gt;Layer 3. &lt;code&gt;risk_analysis.py&lt;/code&gt; &amp;mdash; 섹터/지역 집중도, 52주 시나리오, 이벤트 캘린더&lt;br /&gt;Layer 4. &lt;code&gt;news.py&lt;/code&gt; &amp;mdash; RSS 8개 피드 (연합뉴스, 한경, 매경, 서울경제, 이데일리, Investing.com, CNBC, MarketWatch)&lt;br /&gt;&lt;br /&gt;&amp;rarr; &lt;code&gt;briefing.py&lt;/code&gt;가 4개 레이어 병렬 수집 &amp;rarr; Claude Sonnet 종합 분석 &amp;rarr; Supabase 일별 캐싱&lt;/div&gt;
&lt;div class=&quot;bs-eval-grid&quot;&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;매크로 대시보드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글로벌 지수, 환율, 원자재, VIX 공포지수(5단계 게이지), 미국 10Y 국채 금리를 한눈에 표시&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;종목 심층 분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Forward P/E, 52주 레인지 바, 애널리스트 목표가&amp;middot;투자의견 분포, 실적 서프라이즈 차트, RSI 게이지&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;리스크 진단&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;섹터/지역 집중도 분포 바, 경고 알림(좌측 바), 52주 최악 시나리오, 실적 이벤트 캘린더&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AI 종합 판단&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 전체 정량 데이터 + 뉴스를 Claude Sonnet에 전달. 시니어 애널리스트 수준의 서술형 분석 생성&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;API 엔드포인트 (4개 추가)&lt;/h3&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;GET /api/briefing/market &amp;rarr; 매크로 지표 (비용 0원, yfinance) GET /api/briefing/analysis &amp;rarr; 종목별 심층 분석 (비용 0원, yfinance) GET /api/briefing/risk &amp;rarr; 포트폴리오 리스크 (비용 0원, 계산) GET /api/briefing/news &amp;rarr; AI 종합 브리핑 (Claude API, 일 1회 캐싱)&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;&lt;b&gt;비용 구조:&lt;/b&gt; 매크로&amp;middot;종목분석&amp;middot;리스크는 yfinance 무료 데이터만 사용합니다. Claude API 호출은 &lt;code&gt;/api/briefing/news&lt;/code&gt; 1개뿐이며, 일별 캐싱으로 하루 ~$0.01 수준입니다.&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 데이터 신뢰도 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;03. 데이터 신뢰도 검증&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yfinance에서 수집 가능한 모든 데이터를 실제 테스트하고 신뢰도를 평가했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;데이터&lt;/th&gt;
&lt;th&gt;신뢰도&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;실적 서프라이즈&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;100%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;역산 검증 완벽 일치, 공시 데이터 기반&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기술적 지표 (MA/RSI)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;100%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;가격 데이터에서 직접 계산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기관 보유&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;95%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;SEC 13F 기반, 최대 분기 지연&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;내부자 거래&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;95%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;SEC Form 4 기반, US만 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;애널리스트 컨센서스&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-done&quot;&gt;90%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;40명 커버리지, 1-2주 지연 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주가/매크로&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-new&quot;&gt;85%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;정확하나 장중 15-20분 지연&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;뉴스 RSS&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge-new&quot;&gt;75%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;출처 신뢰, 제목 기반 (본문 미수집)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- Phase 3.5 UI --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;04. Phase 3.5 &amp;mdash; 토스 스타일 UI 리디자인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 컴포넌트를 토스증권 디자인 원칙에 맞게 전면 개편했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최소 폰트&lt;/td&gt;
&lt;td&gt;10px (text-[10px])&lt;/td&gt;
&lt;td&gt;11px (caption) / 12px (label)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;카드 스타일&lt;/td&gt;
&lt;td&gt;1px 테두리&lt;/td&gt;
&lt;td&gt;테두리 없음, 배경만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;카드 radius&lt;/td&gt;
&lt;td&gt;12px&lt;/td&gt;
&lt;td&gt;16px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;종목 분석 카드&lt;/td&gt;
&lt;td&gt;10개 섹션 연속 나열&lt;/td&gt;
&lt;td&gt;핵심 상단 + 접기/펼치기 토글&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;섹션 제목&lt;/td&gt;
&lt;td&gt; ⚠️ 이모지&lt;/td&gt;
&lt;td&gt;이모지 없음, 텍스트만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;입력 필드&lt;/td&gt;
&lt;td&gt;32px 높이&lt;/td&gt;
&lt;td&gt;44px, focus blue border&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 본문&lt;/td&gt;
&lt;td&gt;12px&lt;/td&gt;
&lt;td&gt;14px, line-height 1.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디자인 시스템 유틸리티 클래스&lt;/h3&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;.label &amp;rarr; 12px, tertiary (항목 이름) .value &amp;rarr; 15px, primary, tabular-nums (수치) .caption &amp;rarr; 11px, tertiary (출처, 시간) .card-inner &amp;rarr; overlay 배경, radius 10px (카드 내부 영역) .alert-warn &amp;rarr; 좌측 3px 빨간 바 + 연한 배경 (경고) .input &amp;rarr; 44px 높이, focus blue border .btn-primary&amp;rarr; 48px, blue 배경 .progress-* &amp;rarr; 6px 트랙 + 12px 도트 (레인지 바)&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 기술 스택 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;05. 기술 스택 현황&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-grid&quot;&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;Frontend&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;Next.js 16&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;Backend&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;FastAPI&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;Database&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;Supabase&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;AI&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;Claude Sonnet&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;시세 데이터&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;yfinance&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;div class=&quot;label&quot;&gt;뉴스&lt;/div&gt;
&lt;div class=&quot;value&quot;&gt;RSS 8개 피드&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;backend/ ├── services/ │ ├── market_data.py &amp;larr; 매크로 8개 지표 │ ├── stock_analysis.py &amp;larr; 종목별 종합 분석 │ ├── risk_analysis.py &amp;larr; 포트폴리오 리스크 │ ├── news.py &amp;larr; RSS 8개 피드 │ ├── briefing.py &amp;larr; 전체 수집 &amp;rarr; Claude 분석 │ ├── price.py &amp;larr; 시세 조회 │ ├── portfolio.py &amp;larr; 포트폴리오 CRUD │ └── supabase.py &amp;larr; DB 클라이언트 frontend/src/components/ ├── briefing/ │ ├── BriefingPage.tsx &amp;larr; 전체 조합 │ ├── MarketOverview.tsx &amp;larr; 매크로 대시보드 │ ├── StockAnalysisCard.tsx&amp;larr; 종목 분석 (접기/펼치기) │ ├── RiskDashboard.tsx &amp;larr; 리스크 진단 │ └── AiBriefing.tsx &amp;larr; AI 종합 판단 └── portfolio/ ├── PortfolioList.tsx &amp;larr; 포트폴리오 목록 └── AddForm.tsx &amp;larr; 종목 추가 폼&lt;/div&gt;
&lt;div class=&quot;divider&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- 다음 작업 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;06. 다음 작업 (Phase 4~5)&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-grid&quot;&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Phase 4: 유튜브 분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시황 채널 등록 (최대 5개) &amp;rarr; youtube-transcript-api 자막 추출 &amp;rarr; Claude 분석 &amp;rarr; 컨센서스 요약&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;item&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Phase 5: 배포&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Supabase Auth 연동 (하드코딩 user_id 제거) &amp;rarr; Vercel(FE) + Railway(BE) 배포 &amp;rarr; CD 파이프라인&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;&lt;b&gt;GitHub:&lt;/b&gt; &lt;a style=&quot;color: #3182f6;&quot; href=&quot;https://github.com/KEUN-KEUN/briefstock&quot;&gt;github.com/KEUN-KEUN/briefstock&lt;/a&gt; &amp;mdash; 전체 소스코드 공개&lt;/div&gt;
&lt;/div&gt;</description>
      <category>IT 기술/AI</category>
      <category>AI투자</category>
      <category>Claude API</category>
      <category>바이브코딩</category>
      <category>사이드프로젝트</category>
      <category>주식프로젝트</category>
      <category>투자프로젝트</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/57</guid>
      <comments>https://keun90.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 13 Apr 2026 07:49:26 +0900</pubDate>
    </item>
    <item>
      <title>BriefStock 개발기 #1 - Claude Code로 하루 만에 풀스택 골격 + CI/CD 완성하기</title>
      <link>https://keun90.tistory.com/56</link>
      <description>&lt;div&gt;
&lt;style&gt;                                                                                                                   
    .bs-wrap { font-family: 'Pretendard', 'Apple SD Gothic Neo', sans-serif; max-width: 860px; margin: 0 auto; color:       
  #1a1a2e; line-height: 1.75; }                                                                                             
    .bs-hero { background: linear-gradient(135deg, #0C0E14 0%, #161B27 100%); border-radius: 16px; padding: 48px 40px;
  margin-bottom: 40px; }                      
    .bs-hero h1 { color: #fff; font-size: 28px; font-weight: 700; margin: 0 0 12px; }                                       
    .bs-hero p { color: #8B95A7; font-size: 15px; margin: 0; }
    .bs-hero .tag { display: inline-block; background: #3182F6; color: #fff; border-radius: 6px; padding: 3px 10px;         
  font-size: 12px; margin-right: 6px; margin-bottom: 8px; }
    .bs-section { margin-bottom: 48px; }                                                                                    
    .bs-section h2 { font-size: 20px; font-weight: 700; color: #111; border-left: 4px solid #3182F6; padding-left: 14px;    
  margin-bottom: 20px; }                                                                                                    
    .bs-card { background: #f7f8fc; border-radius: 12px; padding: 20px 24px; margin-bottom: 12px; }                         
    .bs-card-title { font-weight: 700; font-size: 15px; color: #111; margin-bottom: 6px; }                                  
    .bs-card p { font-size: 14px; color: #555; margin: 0; line-height: 1.6; }                                               
    .bs-phase-table { width: 100%; border-collapse: collapse; font-size: 14px; }
    .bs-phase-table th { background: #f0f4ff; color: #3182F6; font-weight: 700; padding: 10px 14px; text-align: left;       
  border-bottom: 2px solid #dde4f5; }                                                                                       
    .bs-phase-table td { padding: 10px 14px; border-bottom: 1px solid #eee; vertical-align: top; }                          
    .bs-phase-table tr:hover td { background: #fafbff; }                                                                    
    .badge { display: inline-block; border-radius: 20px; padding: 2px 10px; font-size: 12px; font-weight: 600; }            
    .badge-done { background: #e6f4ea; color: #1a7f4b; }                                                                    
    .badge-todo { background: #f0f0f0; color: #888; }                                                                       
    .bs-dark-box { background: #0C0E14; border-radius: 12px; padding: 28px 32px; margin-bottom: 16px; overflow-x: auto; }
    .bs-dark-box pre { margin: 0; color: #e0e0e0; font-family: 'Courier New', monospace; font-size: 13px; line-height: 1.9; 
  }                                                                                                                         
    .bs-code { background: #1e2130; color: #abb2bf; border-radius: 10px; padding: 20px 24px; font-family: 'Courier New',    
  monospace; font-size: 13px; line-height: 1.8; overflow-x: auto; margin: 12px 0; }                                         
    .bs-code pre { margin: 0; }                                                                                             
    .kw { color: #c678dd; }                                                                                                 
    .str { color: #98c379; }                                                                                                
    .cm { color: #5c6370; }               
    .hl-blue { color: #5B9BD5; }                                                                                            
    .hl-green { color: #79C7A0; }                                                                                           
    .bs-eval-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
    .bs-eval-item { border-radius: 10px; padding: 18px 20px; }                                                              
    .bs-eval-item.good { background: #e6f4ea; border-left: 4px solid #1a7f4b; }                                             
    .bs-eval-item.improve { background: #fff8e6; border-left: 4px solid #f5a623; }                                          
    .bs-eval-item .label { font-size: 12px; font-weight: 700; color: #888; margin-bottom: 6px; }                            
    .bs-eval-item .text { font-size: 14px; color: #333; line-height: 1.6; }                                                 
    .bs-tip { display: flex; gap: 14px; margin-bottom: 16px; align-items: flex-start; }                                     
    .bs-tip .num { min-width: 32px; height: 32px; background: #3182F6; color: #fff; border-radius: 50%; display: flex;      
  align-items: center; justify-content: center; font-weight: 700; font-size: 14px; flex-shrink: 0; }                        
    .bs-tip .content .title { font-weight: 700; font-size: 15px; color: #111; margin-bottom: 4px; }                         
    .bs-tip .content .desc { font-size: 14px; color: #555; line-height: 1.6; }                                              
    .bs-stack-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }                                     
    .bs-stack-item { background: #f7f8fc; border-radius: 10px; padding: 14px 16px; text-align: center; }                    
    .bs-stack-item .area { font-size: 11px; color: #888; font-weight: 700; margin-bottom: 6px; }                            
    .bs-stack-item .tech { font-size: 14px; font-weight: 700; color: #111; }
    .divider { border: none; border-top: 1px solid #eee; margin: 40px 0; }                                                  
    @media (max-width: 600px) {                                                                                             
      .bs-eval-grid { grid-template-columns: 1fr; }                                                                         
      .bs-stack-grid { grid-template-columns: repeat(2, 1fr); }                                                             
      .bs-hero { padding: 32px 20px; }                                                                                      
      .bs-dark-box { padding: 20px 16px; }                                                                                  
    }                                                                                                                       
  &lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-wrap&quot;&gt;&lt;!-- 히어로 --&gt;
&lt;div class=&quot;bs-hero&quot;&gt;
&lt;div&gt;&lt;span class=&quot;tag&quot;&gt;사이드프로젝트&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;Claude Code&lt;/span&gt; &lt;span class=&quot;tag&quot;&gt;멀티에이전트&lt;/span&gt;&lt;/div&gt;
&lt;h1&gt;BriefStock &amp;mdash; AI 투자 어시스턴트 개발기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Code로 백엔드&amp;middot;프론트엔드를 동시에 개발하고, CI/CD까지 구성한 하루의 기록&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 01. 프로젝트 목적 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;01. 프로젝트 목적&lt;/h2&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;왜 만드는가?&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토스증권, 한국투자증권 등 여러 플랫폼에 분산된 주식을 한 곳에서 보고 싶었다. 그리고 매일 아침 내가 보유한 종목과 관련된 뉴스와 유튜브 시황 채널을 Claude AI가 자동으로 요약해주면 어떨까 하는 아이디어에서 출발했다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;핵심 기능 (목표)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 멀티 플랫폼 포트폴리오 통합 관리&lt;br /&gt;② 보유 종목 기준 AI 뉴스 브리핑 (하루 1회 자동 생성)&lt;br /&gt;③ 유튜브 시황 채널 요약 &amp;mdash; 채널별 컨센서스 파악&lt;br /&gt;④ 수익률&amp;middot;현재가 실시간 조회 (KR: pykrx / US: yfinance)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 02. 기술 스택 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;02. 기술 스택&lt;/h2&gt;
&lt;div class=&quot;bs-stack-grid&quot;&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;FRONTEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;Next.js 16&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;FRONTEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;TypeScript&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;FRONTEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;Tailwind CSS&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;BACKEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;FastAPI&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;BACKEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;Python 3.12&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;BACKEND&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;uv&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;DB&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;Supabase&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;AI&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;Claude API&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-stack-item&quot;&gt;
&lt;div class=&quot;area&quot;&gt;INFRA&lt;/div&gt;
&lt;div class=&quot;tech&quot;&gt;GitHub Actions&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 03. 오늘 완료한 작업 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;03. 오늘 완료한 작업&lt;/h2&gt;
&lt;table class=&quot;bs-phase-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;작업 내용&lt;/th&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Phase 0&lt;/b&gt;&lt;br /&gt;환경 세팅&lt;/td&gt;
&lt;td&gt;FastAPI 골격 (라우터 3개), Next.js 16 App Router,&lt;br /&gt;Supabase 스키마 4개 테이블, Docker Compose,&lt;br /&gt;토스증권 참조 다크 디자인 시스템 (CSS 변수 체계)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Phase 1&lt;/b&gt;&lt;br /&gt;앱 골격&lt;/td&gt;
&lt;td&gt;Supabase 클라이언트 연결 (싱글톤 패턴),&lt;br /&gt;포트폴리오 CRUD API 실사 테스트 통과 (11개 엔드포인트),&lt;br /&gt;전체 API 타입 정의 및 프론트 클라이언트 연결&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;멀티에이전트&lt;/b&gt;&lt;br /&gt;체계 구성&lt;/td&gt;
&lt;td&gt;CLAUDE.md 계층 구성 (루트 &amp;rarr; FE &amp;rarr; BE),&lt;br /&gt;/fe /be /qa /handoff 슬래시 커맨드,&lt;br /&gt;PostToolUse 자동 검증 훅 (validate.sh)&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;GitHub + CI&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Private 레포 생성 (KEUN-KEUN/briefstock),&lt;br /&gt;GitHub Actions &amp;mdash; Backend(pytest) + Frontend(tsc+build) 병렬,&lt;br /&gt;main push 시 자동 실행, 첫 CI 통과 확인&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-done&quot;&gt;완료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Phase 2~5&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;시세 조회, AI 브리핑, 유튜브 분석, Vercel/Railway 배포&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-todo&quot;&gt;예정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 04. 프로젝트 폴더 구조 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;04. 프로젝트 폴더 구조&lt;/h2&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;briefstock/
  ├── .claude/
  │   ├── commands/                                                                                                         
  │   │   ├── be.md          # /be 백엔드 에이전트 커맨드
  │   │   ├── fe.md          # /fe 프론트엔드 에이전트 커맨드                                       
  │   │   ├── qa.md          # /qa 테스트 에이전트 커맨드                                           
  │   │   └── handoff.md     # /handoff 핸드오프 커맨드
  │   ├── hooks/                                                                                                            
  │   │   └── validate.sh    # PostToolUse 자동 검증 훅
  │   └── settings.json      # 훅 설정                                                              
  │                                                                                                                         
  ├── backend/                                                                                
  │   ├── routers/                                                                                                          
  │   │   ├── portfolio.py   # 포트폴리오 CRUD API
  │   │   ├── briefing.py    # 뉴스 브리핑 API                                                      
  │   │   └── youtube.py     # 유튜브 분석 API                                                      
  │   ├── services/                           
  │   │   ├── supabase.py    # DB 클라이언트 싱글톤                                                 
  │   │   └── portfolio.py   # 포트폴리오 비즈니스 로직
  │   ├── main.py            # FastAPI 앱 진입점                                                    
  │   ├── pyproject.toml                      
  │   └── CLAUDE.md          # BE 에이전트 전용 규칙                                                
  │                                           
  ├── frontend/                                                                               
  │   ├── src/    
  │   │   ├── app/                                                                                                          
  │   │   │   ├── page.tsx   # 메인 페이지 (3탭 레이아웃)
  │   │   │   ├── layout.tsx                                                                                                
  │   │   │   └── globals.css # 토스 참조 다크 디자인 토큰
  │   │   ├── components/                     
  │   │   │   └── ui/        # 공통 UI 컴포넌트                                                     
  │   │   └── lib/                            
  │   │       ├── api.ts     # 전체 API 클라이언트 + 타입                                           
  │   │       └── supabase.ts                 
  │   ├── package.json                                                                                                      
  │   └── CLAUDE.md          # FE 에이전트 전용 규칙
  │                                                                                                                         
  ├── supabase/
  │   └── schema.sql         # 4개 테이블 DDL                                                       
  │                                                                                                                         
  ├── .github/workflows/
  │   └── ci.yml             # BE 테스트 + FE 빌드 병렬 CI                                          
  │                                           
  ├── CLAUDE.md              # 루트 &amp;mdash; API 계약 + 전역 규칙                                          
  ├── HANDOFF.md             # 세션 간 인수인계 문서
  └── docker-compose.yml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 05. 멀티에이전트 아키텍처 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;05. 멀티에이전트 아키텍처&lt;/h2&gt;
&lt;p style=&quot;font-size: 14px; color: #555; margin-bottom: 16px;&quot; data-ke-size=&quot;size16&quot;&gt;Claude Code에서 FE 에이전트와 BE 에이전트를 역할 분리해 운영했다. API 계약(CLAUDE.md)이 두 에이전트의 유일한 접점이다.&lt;/p&gt;
&lt;div class=&quot;bs-dark-box&quot;&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;┌─────────────────────┐        ┌─────────────────────┐                            
  │   FE Agent          │        │   BE Agent          │
  │   소유: frontend/   │◄──────►│   소유: backend/    │                                      
  │        src/**       │  API   │        routers/**   │
  │        components/  │  계약  │        services/**  │                                      
  └─────────────────────┘        └─────────────────────┘                                       
            │                               │                                                                               
            └──────────── Supabase ─────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-code&quot;&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;# .claude/hooks/validate.sh &amp;mdash; 코드 수정 후 자동 검증                                   
  if [[ &quot;$FILE&quot; == backend/* ]]; then
    uv run python -c &quot;from main import app&quot;   # BE import 체크             
  elif [[ &quot;$FILE&quot; == frontend/src/* ]]; then                                                        
    pnpm exec tsc --noEmit                # FE 타입 체크                                            
  fi&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 06. 평가 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;06. 오늘 작업 평가&lt;/h2&gt;
&lt;div class=&quot;bs-eval-grid&quot;&gt;
&lt;div class=&quot;bs-eval-item good&quot;&gt;
&lt;div class=&quot;label&quot;&gt;✅ 잘 된 점&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;하루 만에 풀스택 골격 + CI까지 완성. 혼자 했다면 수일이 걸렸을 작업을 AI와 함께 몇 시간 만에 완료했다.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-item good&quot;&gt;
&lt;div class=&quot;label&quot;&gt;✅ 잘 된 점&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;CLAUDE.md 계층 구조로 에이전트 역할을 명확히 분리. FE/BE가 서로의 파일을 건드리지 않는 소유권 규칙이 효과적이었다.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-item good&quot;&gt;
&lt;div class=&quot;label&quot;&gt;✅ 잘 된 점&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;PostToolUse 훅으로 코드 수정 즉시 자동 검증. 에러를 사람이 발견하기 전에 Claude가 먼저 잡았다.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-item good&quot;&gt;
&lt;div class=&quot;label&quot;&gt;✅ 잘 된 점&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;HANDOFF.md + git push 패턴으로 WSL2 &amp;rarr; 맥북 크로스 PC 작업 연속성을 확보했다.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-item improve&quot;&gt;
&lt;div class=&quot;label&quot;&gt;⚠️ 개선 필요&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;병렬 에이전트 실행이 권한 문제로 실패. 루트 디렉토리에서 세션을 시작하지 않으면 서브 에이전트가 다른 디렉토리를 수정하지 못한다.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-eval-item improve&quot;&gt;
&lt;div class=&quot;label&quot;&gt;⚠️ 개선 필요&lt;/div&gt;
&lt;div class=&quot;text&quot;&gt;CI에서 실제 Supabase 연결 테스트가 없다. 더미 환경변수로만 검사해서 DB 쿼리 오류는 배포 전까지 발견되지 않는다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 07. Claude 활용율 높이는 법 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;07. Claude Code 활용율을 높이는 방법&lt;/h2&gt;
&lt;p style=&quot;font-size: 14px; color: #555; margin-bottom: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 직접 적용하고 효과를 확인한 패턴들이다. 어떤 프로젝트에도 그대로 적용할 수 있다.&lt;/p&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;num&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;title&quot;&gt;CLAUDE.md에 API 계약을 먼저 써라&lt;/div&gt;
&lt;div class=&quot;desc&quot;&gt;Claude는 현재 파일 상태를 읽어서 판단한다. &quot;어떻게 만들어줘&quot; 대신 구체적인 입출력 타입, 엔드포인트, 응답 형식을 CLAUDE.md에 적어두면 질문 없이 바로 구현한다. 오늘 이 방식으로 11개 API를 계획대로 구현했다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;num&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;title&quot;&gt;슬래시 커맨드로 역할을 고정해라&lt;/div&gt;
&lt;div class=&quot;desc&quot;&gt;/be, /fe, /qa 커맨드에 &quot;무엇을 수정할 수 있고, 무엇은 금지&quot;를 명시하면 Claude가 역할을 벗어나지 않는다. &quot;백엔드 파일만 수정 가능, frontend/ 수정 금지&quot;처럼 소유권 규칙을 커맨드 파일에 박아두면 된다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;num&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;title&quot;&gt;훅(Hook)으로 검증을 자동화해라&lt;/div&gt;
&lt;div class=&quot;desc&quot;&gt;PostToolUse 훅에 validate.sh를 연결하면 Claude가 파일을 수정할 때마다 자동으로 import 체크, tsc 체크를 실행한다. Claude가 실수해도 스스로 오류를 발견하고 수정한다. 사람이 개입할 필요가 줄어든다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;num&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;title&quot;&gt;핸드오프 문서로 컨텍스트를 이어라&lt;/div&gt;
&lt;div class=&quot;desc&quot;&gt;Claude의 컨텍스트는 세션이 끊기면 사라진다. /handoff 커맨드로 완료 내용과 다음 작업 지시서를 HANDOFF.md에 저장하고 git push하면 다른 PC, 다른 세션에서도 같은 맥락으로 작업을 이어갈 수 있다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-tip&quot;&gt;
&lt;div class=&quot;num&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;div class=&quot;title&quot;&gt;병렬 에이전트는 루트 디렉토리에서 시작해라&lt;/div&gt;
&lt;div class=&quot;desc&quot;&gt;Claude Code의 서브 에이전트는 부모 세션의 작업 디렉토리를 기준으로 권한이 결정된다. 멀티에이전트를 병렬로 돌리려면 반드시 프로젝트 루트에서 세션을 시작해야 FE/BE 에이전트 모두 정상 동작한다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 08. 다음 계획 --&gt;
&lt;div class=&quot;bs-section&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;08. 다음 계획&lt;/h2&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;Phase 2 &amp;mdash; 포트폴리오 시세 조회 + UI&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pykrx(국내) / yfinance(해외)로 현재가 조회 &amp;rarr; 수익률 계산 &amp;rarr; 토스 스타일 카드 UI로 표시&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;Phase 3 &amp;mdash; AI 뉴스 브리핑&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RSS 수집 &amp;rarr; 보유 종목 필터링 &amp;rarr; Claude API로 요약 &amp;rarr; 하루 1회 Supabase 캐싱&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;Phase 4 &amp;mdash; 유튜브 시황 분석&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록한 채널의 최신 영상 자막 추출 &amp;rarr; Claude로 컨센서스 요약&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;bs-card&quot;&gt;
&lt;div class=&quot;bs-card-title&quot;&gt;Phase 5 &amp;mdash; 배포 + CD 파이프라인&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vercel(FE) + Railway(BE) 배포, GitHub Actions CD 연결, Supabase Auth 연동&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;font-size: 13px; color: #aaa; text-align: center; margin-top: 40px;&quot; data-ke-size=&quot;size16&quot;&gt;작성: 2026-04-10 &amp;nbsp;|&amp;nbsp; 개발 환경: WSL2 + Claude Code (claude-sonnet-4-6)&lt;/p&gt;
&lt;/div&gt;</description>
      <category>IT 기술/AI</category>
      <category>AI개발</category>
      <category>claude code</category>
      <category>멀티에이전트</category>
      <category>바이브코딩</category>
      <category>사이드프로젝트</category>
      <category>풀스택개발</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/56</guid>
      <comments>https://keun90.tistory.com/56#entry56comment</comments>
      <pubDate>Fri, 10 Apr 2026 20:14:27 +0900</pubDate>
    </item>
    <item>
      <title>AI 코딩 효율 &amp;mdash; 프롬프트 계약서(Prompt Contracts)</title>
      <link>https://keun90.tistory.com/55</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;title&gt;AI 코딩 실수 방지법 — 프롬프트 계약서(Prompt Contracts)로 바이브 코딩 탈출하기&lt;/title&gt;
&lt;style&gt;
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;600;700&amp;family=Noto+Serif+KR:wght@400;600;700&amp;family=JetBrains+Mono:wght@400;500;600&amp;display=swap');

  :root {
    --accent:        #0071e3;
    --accent-light:  #e8f0fe;
    --danger:        #ff3b30;
    --success:       #1b8a3a;
    --warning:       #ff9500;
    --warning-light: #fff8ed;
    --bg:            #ffffff;
    --bg-2:          #f5f5f7;
    --bg-3:          #fafafa;
    --border:        #e8e8ed;
    --text-1:        #1d1d1f;
    --text-2:        #6e6e73;
    --text-3:        #86868b;
    --sh-sm:         0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
    --sh-md:         0 4px 16px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,.04);
    --r-md:          12px;
    --r-lg:          18px;
  }

  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  html { font-size: 16px; }

  body {
    background: var(--bg);
    color: var(--text-1);
    font-family: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, sans-serif;
    line-height: 1.82;
    -webkit-font-smoothing: antialiased;
  }

  /* ── CONTAINER ── */
  .wrap {
    width: 100%;
    max-width: 780px;
    margin: 0 auto;
    padding: 56px 24px 100px;
  }

  /* ── HERO ── */
  .hero {
    margin-bottom: 64px;
    padding-bottom: 48px;
    border-bottom: 1px solid var(--border);
  }

  .tag {
    display: inline-flex;
    align-items: center;
    background: var(--accent-light);
    color: var(--accent);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .4px;
    padding: 5px 14px;
    border-radius: 20px;
    margin-bottom: 22px;
  }

  h1 {
    font-family: 'Noto Serif KR', serif;
    font-size: clamp(24px, 5vw, 42px);
    font-weight: 700;
    line-height: 1.3;
    color: var(--text-1);
    letter-spacing: -.5px;
    margin-bottom: 16px;
    word-break: keep-all;
  }

  .hero-desc {
    font-size: clamp(15px, 2vw, 18px);
    color: var(--text-2);
    font-weight: 300;
    line-height: 1.7;
    margin-bottom: 28px;
    word-break: keep-all;
  }

  .meta {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }

  .badge {
    display: inline-flex;
    align-items: center;
    background: var(--bg-2);
    color: var(--text-2);
    font-size: 13px;
    padding: 6px 14px;
    border-radius: 20px;
    font-weight: 500;
  }

  /* ── SECTION ── */
  .sec { margin-bottom: 60px; }

  .label {
    font-size: 11px;
    font-weight: 700;
    color: var(--accent);
    letter-spacing: 1px;
    text-transform: uppercase;
    margin-bottom: 10px;
    display: block;
  }

  h2 {
    font-family: 'Noto Serif KR', serif;
    font-size: clamp(18px, 3vw, 24px);
    font-weight: 700;
    color: var(--text-1);
    margin-bottom: 18px;
    letter-spacing: -.3px;
    word-break: keep-all;
  }

  h3 {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-1);
    margin-bottom: 5px;
    word-break: keep-all;
  }

  p {
    font-size: clamp(15px, 1.8vw, 17px);
    color: var(--text-1);
    margin-bottom: 16px;
    word-break: keep-all;
    line-height: 1.82;
  }

  strong { font-weight: 600; color: var(--text-1); }

  /* ── CALLOUT ── */
  .callout {
    background: var(--bg-2);
    border-left: 3px solid var(--accent);
    border-radius: 0 var(--r-md) var(--r-md) 0;
    padding: 20px 24px;
    margin: 24px 0;
    font-family: 'Noto Serif KR', serif;
    font-size: clamp(14px, 1.8vw, 16px);
    color: var(--text-2);
    font-style: italic;
    line-height: 1.75;
  }

  .callout strong { color: var(--text-1); font-style: normal; }

  /* ── HIGHLIGHT BOX ── */
  .hl-box {
    background: linear-gradient(135deg, #f0f7ff, #fafcff);
    border: 1.5px solid #c2d9f8;
    border-radius: var(--r-lg);
    padding: clamp(20px, 3vw, 28px) clamp(20px, 3vw, 32px);
    margin: 24px 0;
    box-shadow: var(--sh-sm);
  }

  .hl-box p { margin-bottom: 0; font-size: clamp(14px, 1.8vw, 16px); }

  /* ── CODE BLOCK ── */
  pre {
    background: #1c1c1e;
    border-radius: var(--r-md);
    padding: clamp(18px, 2.5vw, 26px) clamp(16px, 2.5vw, 28px);
    overflow-x: auto;
    margin: 20px 0;
    font-family: 'JetBrains Mono', 'SF Mono', monospace;
    font-size: clamp(11px, 1.5vw, 13px);
    line-height: 1.8;
    box-shadow: var(--sh-md);
    -webkit-overflow-scrolling: touch;
  }

  .cm { color: #636366; }
  .kw { color: #64d2ff; font-weight: 600; }
  .vl { color: #a8d8a8; }
  .bd { color: #ff6b6b; }
  .gd { color: #30d158; }

  /* ── PROBLEM LIST ── */
  .prob-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin: 20px 0;
  }

  .prob-item {
    background: var(--bg-2);
    border-radius: var(--r-md);
    padding: clamp(16px, 2vw, 20px) clamp(16px, 2vw, 22px);
    display: flex;
    gap: 14px;
    align-items: flex-start;
  }

  .prob-icon {
    font-size: 16px;
    flex-shrink: 0;
    width: 34px;
    height: 34px;
    background: #fff;
    border-radius: 9px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: var(--sh-sm);
  }

  .prob-title { font-weight: 600; color: var(--text-1); margin-bottom: 4px; font-size: 14px; }
  .prob-desc  { color: var(--text-2); font-size: 13px; line-height: 1.65; }

  /* ── TABLE ── */
  .tbl-wrap {
    width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    margin: 24px 0;
    border-radius: var(--r-md);
    box-shadow: var(--sh-sm);
    border: 1px solid var(--border);
  }

  table {
    width: 100%;
    min-width: 420px;
    border-collapse: separate;
    border-spacing: 0;
    font-size: clamp(12px, 1.6vw, 14px);
  }

  th {
    background: var(--bg-2);
    color: var(--text-3);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .8px;
    text-transform: uppercase;
    padding: 13px 16px;
    text-align: left;
    border-bottom: 1px solid var(--border);
    white-space: nowrap;
  }

  th:nth-child(2) { color: var(--danger); }
  th:nth-child(3) { color: var(--success); }

  td {
    padding: 13px 16px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
    background: #fff;
  }

  tr:last-child td { border-bottom: none; }
  td:first-child { color: var(--text-2); font-weight: 500; white-space: nowrap; }
  td:nth-child(2) { color: var(--danger); }
  td:nth-child(3) { color: var(--success); font-weight: 500; }

  /* ── STEPS ── */
  .steps {
    display: flex;
    flex-direction: column;
    margin: 20px 0;
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    overflow: hidden;
    box-shadow: var(--sh-sm);
  }

  .step {
    display: flex;
    gap: 16px;
    align-items: flex-start;
    padding: clamp(18px, 2.5vw, 24px) clamp(18px, 2.5vw, 26px);
    background: #fff;
    border-bottom: 1px solid var(--border);
  }

  .step:last-child { border-bottom: none; }

  .step-num {
    width: 28px;
    height: 28px;
    min-width: 28px;
    background: var(--accent);
    color: #fff;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: 'JetBrains Mono', monospace;
    font-weight: 600;
    font-size: 12px;
    margin-top: 3px;
  }

  .step h3 { font-size: clamp(13px, 1.8vw, 15px); }
  .step p  { font-size: clamp(12px, 1.6vw, 14px); color: var(--text-2); margin-bottom: 0; line-height: 1.65; }

  /* ── WARNING ── */
  .warn {
    background: var(--warning-light);
    border: 1.5px solid #ffd591;
    border-radius: var(--r-md);
    padding: clamp(18px, 2.5vw, 22px) clamp(18px, 2.5vw, 26px);
    margin: 24px 0;
  }

  .warn-title {
    color: var(--warning);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .8px;
    text-transform: uppercase;
    margin-bottom: 10px;
  }

  .warn p { font-size: clamp(13px, 1.7vw, 15px); color: #4a3000; margin-bottom: 0; line-height: 1.7; }
  .warn strong { color: #2d1d00; }

  /* ── DIVIDER ── */
  hr {
    border: none;
    border-top: 1px solid var(--border);
    margin: 52px 0;
  }

  /* ── CONCLUSION ── */
  .conclusion {
    background: var(--bg-2);
    border-radius: var(--r-lg);
    padding: clamp(36px, 5vw, 52px) clamp(24px, 4vw, 48px);
    text-align: center;
    margin-top: 60px;
  }

  .conclusion-q {
    font-family: 'Noto Serif KR', serif;
    font-size: clamp(17px, 3vw, 24px);
    font-weight: 600;
    color: var(--text-1);
    line-height: 1.7;
    margin-bottom: 22px;
    letter-spacing: -.3px;
    word-break: keep-all;
  }

  .conclusion-badge {
    display: inline-block;
    color: var(--accent);
    font-size: 13px;
    font-weight: 600;
    padding: 6px 18px;
    background: var(--accent-light);
    border-radius: 20px;
  }

  /* ── RESPONSIVE ── */

  /* 태블릿 (768px 이하) */
  @media (max-width: 768px) {
    .wrap { padding: 40px 20px 80px; }
    .hero { margin-bottom: 48px; padding-bottom: 36px; }
    .sec  { margin-bottom: 48px; }
    hr    { margin: 40px 0; }
    pre   { font-size: 12px; }
  }

  /* 모바일 (480px 이하) */
  @media (max-width: 480px) {
    .wrap  { padding: 28px 16px 72px; }
    .hero  { margin-bottom: 36px; padding-bottom: 28px; }
    .sec   { margin-bottom: 40px; }
    hr     { margin: 32px 0; }

    pre {
      font-size: 11px;
      padding: 16px 14px;
      border-radius: 10px;
    }

    .prob-item  { padding: 14px 16px; gap: 12px; }
    .prob-icon  { width: 30px; height: 30px; font-size: 14px; }

    .step       { padding: 16px 18px; gap: 12px; }
    .step-num   { width: 26px; height: 26px; min-width: 26px; font-size: 11px; }

    .hl-box     { padding: 18px 20px; border-radius: 14px; }
    .callout    { padding: 16px 18px; }
    .warn       { padding: 16px 18px; }
    .conclusion { padding: 28px 20px; border-radius: 14px; }

    .badge { font-size: 12px; padding: 5px 12px; }
    .tbl-wrap { border-radius: 10px; }
  }

  /* 초소형 (360px 이하) */
  @media (max-width: 360px) {
    .wrap { padding: 20px 14px 60px; }
    pre   { font-size: 10.5px; padding: 14px 12px; }
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;wrap&quot;&gt;

  &lt;!-- HERO --&gt;
  &lt;div class=&quot;hero&quot;&gt;
    &lt;div class=&quot;tag&quot;&gt;AI Coding · Prompt Engineering · 2026&lt;/div&gt;
    &lt;h1&gt;AI한테 코딩 맡겼다가&lt;br&gt;2,400줄 전부 버린 이유&lt;/h1&gt;
    &lt;p class=&quot;hero-desc&quot;&gt;
      프롬프트를 잘 쓰는 게 아니라, 계약서처럼 설계해야 한다.&lt;br&gt;
      바이브 코딩의 함정과 Prompt Contracts의 등장.
    &lt;/p&gt;
    &lt;div class=&quot;meta&quot;&gt;
      &lt;span class=&quot;badge&quot;&gt;  원문: Medium @rentierdigital&lt;/span&gt;
      &lt;span class=&quot;badge&quot;&gt;⏱ 읽기 약 5분&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;


  &lt;!-- 1. 도입 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Episode&lt;/span&gt;
    &lt;h2&gt;새벽 2시의 실수&lt;/h2&gt;
    &lt;p&gt;Claude Code에게 &lt;strong&gt;Supabase 인증 플로우&lt;/strong&gt;를 만들어달라고 했다. 돌아온 건 완벽하게 작동하는 &lt;strong&gt;Firebase&lt;/strong&gt; 인증 시스템이었다.&lt;/p&gt;
    &lt;div class=&quot;callout&quot;&gt;
      코드는 컴파일됐다. 실행됐다. 심지어 깔끔해 보였다.&lt;br&gt;
      하지만 &lt;strong&gt;틀린 문제를 풀고 있었다.&lt;/strong&gt;
    &lt;/div&gt;
    &lt;p&gt;피자를 주문했는데 완벽하게 조리된 리조또가 왔다. 기술적으로는 훌륭하다. 근본적으로는 틀렸다.&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;&quot;나는 Claude Code로 코딩을 한 게 아니라, 도박을 하고 있었다.&quot;&lt;/strong&gt;&lt;/p&gt;
  &lt;/div&gt;

  &lt;hr&gt;


  &lt;!-- 2. 바이브 코딩 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Problem&lt;/span&gt;
    &lt;h2&gt;바이브 코딩이란?&lt;/h2&gt;
    &lt;p&gt;자연어로 AI에게 요청하고 결과를 기대하는 방식이다. AI는 컨텍스트 없이도 자신감 200%로 뭔가를 만들어낸다.&lt;/p&gt;
    &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;# 바이브 코딩의 전형적인 패턴&lt;/span&gt;

&lt;span class=&quot;bd&quot;&gt;&amp;gt; &quot;SaaS 대시보드 만들어줘&quot;&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;→ 14개 파일, 3,000줄 생성 / 원하는 게 아닌 코드
→ 다시 요청 → 또 다시 → 무한 반복&lt;/span&gt;

&lt;span class=&quot;bd&quot;&gt;&amp;gt; &quot;로그인 폼 React로 만들어줘&quot;&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;→ Tailwind + Lucide 아이콘까지 붙은 복잡한 폼 생성
→ 나는 일반 CSS를 원했지만, AI는 알 방법이 없다&lt;/span&gt;&lt;/pre&gt;
    &lt;p&gt;&lt;strong&gt;AI는 그럴듯해 보이는 코드를 만든다. 그럴듯한 것이 올바른 것과 같지 않을 뿐이다.&lt;/strong&gt;&lt;/p&gt;
  &lt;/div&gt;


  &lt;!-- 3. 문제점 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Root Cause&lt;/span&gt;
    &lt;h2&gt;바이브 코딩의 3가지 실질적 문제&lt;/h2&gt;
    &lt;div class=&quot;prob-list&quot;&gt;
      &lt;div class=&quot;prob-item&quot;&gt;
        &lt;div class=&quot;prob-icon&quot;&gt;⚠️&lt;/div&gt;
        &lt;div&gt;
          &lt;div class=&quot;prob-title&quot;&gt;품질 보증 부재&lt;/div&gt;
          &lt;div class=&quot;prob-desc&quot;&gt;표면적으로는 작동하지만 에러 핸들링 · 보안 검사 · 엣지 케이스 처리가 빠져있는 경우가 많다. 프로덕션에 그대로 올리면 사고난다.&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;prob-item&quot;&gt;
        &lt;div class=&quot;prob-icon&quot;&gt; &lt;/div&gt;
        &lt;div&gt;
          &lt;div class=&quot;prob-title&quot;&gt;프롬프트 드리프트&lt;/div&gt;
          &lt;div class=&quot;prob-desc&quot;&gt;기능을 추가하거나 수정할수록 AI가 일관성 없는 스타일, 중복 로직, 호환되지 않는 구조를 만들어낸다. 코드베이스가 점점 망가진다.&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;prob-item&quot;&gt;
        &lt;div class=&quot;prob-icon&quot;&gt; &lt;/div&gt;
        &lt;div&gt;
          &lt;div class=&quot;prob-title&quot;&gt;시스템 컨텍스트 무시&lt;/div&gt;
          &lt;div class=&quot;prob-desc&quot;&gt;기존 인증 미들웨어가 어떻게 작동하는지, 세션 관리는 어디에 있는지를 모르는 채로 요청하면 완전히 잘못된 방향이 나온다.&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;hr&gt;


  &lt;!-- 4. 정의 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Solution&lt;/span&gt;
    &lt;h2&gt;프롬프트 계약서(Prompt Contracts)란?&lt;/h2&gt;
    &lt;div class=&quot;hl-box&quot;&gt;
      &lt;p&gt;&lt;strong&gt;코드를 한 줄 쓰기 전에 작성하는 구조화된 명세서.&lt;/strong&gt;&lt;br&gt;
      AI에게 무엇을 만들지, 어떻게 만들지, 무엇을 하면 안 되는지, 결과를 어떻게 검증할지를 사전에 명시한 문서.&lt;/p&gt;
    &lt;/div&gt;
    &lt;p&gt;핵심 개념은 &lt;strong&gt;&quot;프롬프트를 API처럼 다루는 것&quot;&lt;/strong&gt;이다. 소프트웨어에서 함수를 호출할 때 입력값과 반환값을 모르고 쓰지 않는 것처럼, AI 프롬프트도 명시적인 입력 / 출력 / 실패 조건을 정의해야 한다.&lt;/p&gt;
    &lt;p&gt;새로운 도구나 소프트웨어가 아니다. AI에게 작업을 넘기기 전에 작성하는 &lt;strong&gt;구조화된 텍스트 문서&lt;/strong&gt;다.&lt;/p&gt;
  &lt;/div&gt;


  &lt;!-- 5. 구조 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Template&lt;/span&gt;
    &lt;h2&gt;프롬프트 계약서 구조&lt;/h2&gt;
    &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;## ── PROMPT CONTRACT TEMPLATE ──────────────────&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;## GOAL&lt;/span&gt;
&lt;span class=&quot;vl&quot;&gt;무엇을 만드는가 (한 줄로 명확하게)&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;  예: Supabase RLS 기반 사용자 인증 플로우 구현&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;## STACK&lt;/span&gt;
&lt;span class=&quot;vl&quot;&gt;사용할 기술 스택 명시&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;  예: Next.js 14, Supabase, Clerk, Convex&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;## CONSTRAINTS&lt;/span&gt;
&lt;span class=&quot;vl&quot;&gt;하면 안 되는 것 (명시적으로 금지)&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;  예: No Firebase. No Prisma. No Tailwind.
      기존 /lib/auth.ts 패턴을 반드시 따를 것.&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;## FORMAT&lt;/span&gt;
&lt;span class=&quot;vl&quot;&gt;출력 형식 정의&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;  예: 파일 단위로 분리. 함수마다 JSDoc 주석 포함.
      index.ts → handler.ts → types.ts 순서로 작성.&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;## FAILURE CONDITIONS&lt;/span&gt;
&lt;span class=&quot;vl&quot;&gt;이 결과가 나오면 실패로 간주&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;  예: - Firebase import 시 실패
      - RLS 정책 없이 직접 쿼리하면 실패
      - 에러 핸들링이 없으면 실패&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;## ──────────────────────────────────────────────&lt;/span&gt;&lt;/pre&gt;
    &lt;p&gt;이 5가지 섹션이 전부다. 10분 작성으로 반복 수정에 드는 몇 시간을 아낄 수 있다.&lt;/p&gt;
  &lt;/div&gt;


  &lt;!-- 6. Before vs After --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Comparison&lt;/span&gt;
    &lt;h2&gt;Before vs After&lt;/h2&gt;
    &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;── BEFORE (바이브 코딩) ──────────────────────────&lt;/span&gt;

&lt;span class=&quot;bd&quot;&gt;&amp;gt; &quot;Supabase 인증 만들어줘&quot;&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;결과: Firebase로 완성된 인증 시스템
      → 2,400줄 전부 삭제 → 처음부터 다시&lt;/span&gt;


&lt;span class=&quot;cm&quot;&gt;── AFTER (프롬프트 계약서) ───────────────────────&lt;/span&gt;

&lt;span class=&quot;gd&quot;&gt;## GOAL: Supabase RLS 기반 인증 플로우
## STACK: Next.js 14, Supabase
## CONSTRAINTS: No Firebase. No 외부 인증 라이브러리.
## FORMAT: 파일 단위 분리, 에러 핸들링 필수
## FAILURE CONDITIONS: Firebase import 시 실패&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;결과: 첫 번째 시도에 프로덕션 수준 코드 생성
      → 검토 → 배포&lt;/span&gt;&lt;/pre&gt;

    &lt;div class=&quot;tbl-wrap&quot;&gt;
      &lt;table&gt;
        &lt;tr&gt;
          &lt;th&gt;항목&lt;/th&gt;
          &lt;th&gt;❌ 바이브 코딩&lt;/th&gt;
          &lt;th&gt;✅ 프롬프트 계약서&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;방식&lt;/td&gt;&lt;td&gt;자연어로 대충 요청&lt;/td&gt;&lt;td&gt;구조화된 명세 사전 합의&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;결과 예측&lt;/td&gt;&lt;td&gt;불가능&lt;/td&gt;&lt;td&gt;예측 가능&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;문제 발생 시&lt;/td&gt;&lt;td&gt;전부 다시&lt;/td&gt;&lt;td&gt;조건 수정 후 재실행&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;AI 역할&lt;/td&gt;&lt;td&gt;도박사&lt;/td&gt;&lt;td&gt;계약 이행자&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;시간 비용&lt;/td&gt;&lt;td&gt;무한 반복 수정&lt;/td&gt;&lt;td&gt;첫 시도에 근접&lt;/td&gt;&lt;/tr&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;hr&gt;


  &lt;!-- 7. 원칙 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Practice&lt;/span&gt;
    &lt;h2&gt;실전 적용 3원칙&lt;/h2&gt;
    &lt;div class=&quot;steps&quot;&gt;
      &lt;div class=&quot;step&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;1&lt;/div&gt;
        &lt;div&gt;
          &lt;h3&gt;4가지 질문에 먼저 답하라&lt;/h3&gt;
          &lt;p&gt;무엇을 바꿔야 하는가 / 어디에서 / 왜 (제약 조건) / 어떻게 검증할 것인가. 이 4가지가 명확하지 않으면 프롬프트를 보내지 마라.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;step&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;2&lt;/div&gt;
        &lt;div&gt;
          &lt;h3&gt;작게 쪼개서 요청하라&lt;/h3&gt;
          &lt;p&gt;데이터 모델 → 핸들러 → 비즈니스 레이어 순으로. &quot;전체 앱 만들어줘&quot;는 도박이다. 기능 단위로 나누면 검증이 가능해진다.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;step&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;3&lt;/div&gt;
        &lt;div&gt;
          &lt;h3&gt;제약 조건은 앞에 넣어라&lt;/h3&gt;
          &lt;p&gt;컨텍스트가 길어질수록 AI는 프롬프트 끝부분을 덜 주목한다. 금지 사항과 핵심 조건은 반드시 프롬프트 앞부분에 배치하라.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;


  &lt;!-- 8. 한계 --&gt;
  &lt;div class=&quot;sec&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Caveat&lt;/span&gt;
    &lt;h2&gt;그래도 알아야 할 한계&lt;/h2&gt;
    &lt;div class=&quot;warn&quot;&gt;
      &lt;div class=&quot;warn-title&quot;&gt;⚠ 중요한 경고&lt;/div&gt;
      &lt;p&gt;
        프롬프트 계약서도 버그가 될 수 있다.&lt;br&gt;&lt;br&gt;
        &lt;strong&gt;계약서 자체가 잘못 작성되면, AI는 그 잘못된 명세를 완벽하게 따른다.&lt;/strong&gt; 계약서가 틀리면 코드도 정확하게 틀린 방향으로 나온다.&lt;br&gt;&lt;br&gt;
        결국 계약서를 잘 쓰려면 &lt;strong&gt;내가 뭘 원하는지 정확히 알아야 한다.&lt;/strong&gt; AI는 도구다. 판단은 여전히 사람의 몫이다.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;p&gt;프롬프트 계약서는 새로운 마법이 아니다. 기존 프롬프트 엔지니어링을 &lt;strong&gt;더 체계화한 방법론&lt;/strong&gt;에 가깝다. 하지만 이 사소한 구조화가 결과물의 질을 완전히 바꾼다.&lt;/p&gt;
  &lt;/div&gt;


  &lt;!-- CONCLUSION --&gt;
  &lt;div class=&quot;conclusion&quot;&gt;
    &lt;div class=&quot;conclusion-q&quot;&gt;
      &quot;AI는 도구다.&lt;br&gt;
      도구에게 명세서를 주면,&lt;br&gt;
      도박이 아니라 납품이 된다.&quot;
    &lt;/div&gt;
    &lt;div class=&quot;conclusion-badge&quot;&gt;Prompt Contracts — vibe coding의 종료 선언&lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 기술/AI</category>
      <category>AI코딩</category>
      <category>Claude</category>
      <category>개발생산성</category>
      <category>바이브코딩</category>
      <category>프롬프트엔지니어링</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/55</guid>
      <comments>https://keun90.tistory.com/55#entry55comment</comments>
      <pubDate>Fri, 27 Mar 2026 17:59:11 +0900</pubDate>
    </item>
    <item>
      <title>Claude Code - VB6 레거시 시스템을 React + Python으로 컨버전하며 느낀 Claude 실전 후기</title>
      <link>https://keun90.tistory.com/54</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오래된 레거시 시스템을 새로운 기술 스택으로 전환하는 프로젝트에 Claude 활용성을 검증해보기로 했습니다.&amp;nbsp;&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;b&gt;Frontend: React&lt;/b&gt; Vue와 비교했을 때 학습 곡선이 높다는 것은 알고 있었습니다. 하지만 Claude를 함께 사용한다면 그 장벽이 크게 낮아질 것이라 판단했고, 고민 없이 React를 선택했습니다.&lt;/p&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;b&gt;Backend: Python&lt;/b&gt; Java와 Python 사이에서 고민했습니다. Java는 유지보수 측면에서 강점이 있고, Python은 Frontend와 동일한 IDE에서 개발할 수 있다는 편의성이 있었습니다. 이번 프로젝트는 대규모 트래픽이나 특별한 성능 요구사항이 없었기 때문에, Claude 활용 검증이라는 목적에 맞게 다루기 편한 Python을 최종 선택했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;b&gt;비즈니스 로직&lt;/b&gt;과 &lt;b&gt;디자인 요소&lt;/b&gt;를 철저히 분리해서 작업했습니다. 이렇게 나눈 이유는 Claude의 결과물을 단계별로 꼼꼼하게 검증하기 위해서였습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비즈니스 로직 분석 흐름&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;기존 레거시 소스 전체를 폴더에 정리&lt;/li&gt;
&lt;li&gt;Claude 터미널에서 소스 분석 수행&lt;/li&gt;
&lt;li&gt;분석 결과를 별도 파일로 저장&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 포인트가 하나 있습니다. &lt;b&gt;레거시 시스템에는 주석 처리된 코드가 매우 많습니다.&lt;/b&gt; 이 주석들을 분석 대상에 포함시키면 불필요한 내용이 섞여 설계가 흐려집니다. 반드시 주석 처리된 코드는 분석 대상에서 제외하도록 Claude에게 명확히 지시해야 원하는 분석 결과를 얻을 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로직 변환 시에는 매 작업마다 아래 문구를 프롬프트에 포함시켰습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;기존 소스 코드의 정상 작동을 보장하면서 변환할 것&quot;&lt;/p&gt;
&lt;/blockquote&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;h3 data-ke-size=&quot;size23&quot;&gt;디자인 구현 흐름&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;기존 화면을 캡처하여 Claude.ai에 이미지로 업로드&lt;/li&gt;
&lt;li&gt;와이어프레임 코드로 변환 요청&lt;/li&gt;
&lt;li&gt;변환된 코드를 Claude 터미널에서 React 컴포넌트로 변환&lt;/li&gt;
&lt;li&gt;공통 디자인 요소 적용을 위한 style.md 생성 및 관리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;style.md는 처음부터 만들어두시는 것을 강력히 권장합니다.&lt;/b&gt; 작업 초반에 공통 스타일 기준을 잡아두지 않으면, 나중에 화면마다 일관성이 무너지는 상황이 반드시 생깁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773110711754&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### 와이어프레임 예시 

+-------------------------------------------------------------+
|  Toolbar  [ 조회 ] [ 저장 ] [ 삭제 ] [ 복사 ] [ 엑셀 ] [ 닫기 ] |
+-------------------------------------------------------------+
|  Header   항목A v | 항목B v | 항목C v | 항목D v | 상태 Badge    |
+-------------------------------------------------------------+
|  Tab:  [ 기본 정보 ]  [ 수량/사이즈 ]  [ 소재 정보 ]             |
+--------------+----------------------------------------------+
|  Left Panel  |  수량 Grid                                     |
|              |                                                |
|  기본 정보     |  구분 | 시작일 | 종료일 | 수량 | 금액          |
|  - 콤보 A     |  ------------------------------------------- |
|  - 콤보 B     |  Row                                         |
|  - 콤보 C     |  Row                                         |
|  - 텍스트     |  Row                                          |
|  - 체크박스    |                                              |
|  ----------- |                                               |
|  옵션 그룹    |                                               |
|  ----------- |                                               |
|  소재 정보    |                                               |
|  ----------- |                                               |
|  [ 이미지 ]  |                                                |
+--------------+----------------------------------------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;실제로 느낀 Claude의 강점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상용 라이브러리 없이 구현 가능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 시스템 개발에서는 Chart, Grid 같은 컴포넌트를 상용 라이브러리로 해결합니다. 코드로 직접 구현하기 어렵기 때문에 라이선스를 구매하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 Claude를 활용하면 이야기가 달라집니다. 필터, 정렬, 조회 등 복잡한 Grid 기능을 모두 코드로 직접 구현할 수 있었습니다. 라이선스 비용을 절감하면서도 요구사항에 딱 맞는 커스텀 구현이 가능하다는 점은 실질적으로 큰 메리트였습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;향후 계획: 서브에이전트 병렬 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 검증에서는 로직과 디자인을 순차적으로 직접 확인하며 진행했지만, 실제 프로젝트에서는 다르게 접근할 계획입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;subagent-style &amp;mdash; 디자인 구현 전담&lt;/li&gt;
&lt;li&gt;subagent-logic &amp;mdash; 비즈니스 로직 변환 전담&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 에이전트를 &lt;b&gt;병렬로 실행&lt;/b&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;3~4일이라는 짧은 기간이었지만, Claude의 활용 가능성은 충분히 확인했습니다. 다만 한 가지 분명히 말씀드리고 싶은 것이 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React와 Python을 모르는 분께는 추천하지 않습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude가 빠르게 결과물을 만들어주는 것은 맞습니다. 하지만 그 결과물을 제대로 관리하려면 언어의 특성, 폴더 구조, 컴포넌트 설계에 대한 이해가 반드시 필요합니다. 이 배경 지식 없이 프롬프트만으로 개발을 진행하면, 초반에는 빠른 것처럼 보여도 &lt;b&gt;공통 컴포넌트 관리와 코드 스타일 일관성이 무너지는 시점&lt;/b&gt;이 반드시 찾아옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 Claude는 도구입니다. 개인의 노하우가 담긴 프롬프트 설계와 아키텍처 지식이 결합될 때, Claude의 진짜 활용 능력이 발휘된다는 것을 이번 작업을 통해 분명하게 느꼈습니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;개발 환경 - Frontend&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 242px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;&lt;b&gt; 기술 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;&lt;b&gt; 버전 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;&lt;b&gt; 용도 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;언어&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;JavaScript (JSX)&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;ES2022+&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;주 개발 언어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;프레임워크&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;React&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;18.3&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;UI 구성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;빌드 도구&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;Vite&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;5.2&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;번들링/개발서버&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;스타일&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;Tailwind CSS&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;3.4&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;유틸리티 기반 스타일링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;라우팅&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;react-router-dom&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;6.23&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;페이지 라우팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;HTTP 클라이언트&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;Axios&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;1.7&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;API 통신&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;폼&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;react-hook-form&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;7.51&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;폼 상태 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;테이블&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;@tanstack/react-table&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;8.17&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;데이터 그리드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;가상스크롤&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;@tanstack/react-virtual&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;3.5&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;대용량 리스트 렌더링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.9535%; height: 22px;&quot;&gt;인증 상태&lt;/td&gt;
&lt;td style=&quot;width: 34.186%; height: 22px;&quot;&gt;React Context + localStorage&lt;/td&gt;
&lt;td style=&quot;width: 18.721%; height: 22px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 27.907%; height: 22px;&quot;&gt;전역 로그인 상태 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;개발 환경 - Backend&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 198px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;&lt;b&gt; 기술 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;&lt;b&gt; 버전 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;&lt;b&gt; 용도 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;언어&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;Python&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;3.11+&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;주 개발 언어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;프레임워크&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;FastAPI&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;0.111&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;REST API 서버&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;ASGI 서버&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;Uvicorn&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;0.29&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;비동기 서버 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;DB 드라이버&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;pyodbc (ODBC Driver 17)&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;5.1&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;SQL Server 연결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;인증&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;python-jose + HTTPBearer&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;3.3&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;JWT 발급/검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;설정 관리&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;pydantic-settings + python-dotenv&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;환경변수 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;스키마 검증&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;Pydantic v2&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;2.7&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;요청/응답 유효성 검사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 17.7907%;&quot;&gt;압축&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 35.9302%;&quot;&gt;GZipMiddleware&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 18.1395%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 28.1395%;&quot;&gt;응답 압축&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&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>IT 기술/AI</category>
      <category>AI개발</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>Python</category>
      <category>react</category>
      <category>VB6컨버전</category>
      <category>레거시시스템마이그레이션</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/54</guid>
      <comments>https://keun90.tistory.com/54#entry54comment</comments>
      <pubDate>Tue, 10 Mar 2026 22:15:12 +0900</pubDate>
    </item>
    <item>
      <title>26년 2월 24일 - 금리 인하 시그널 포착: FedWatch 기반 고배당&amp;middot;배당성장주 투자 전략</title>
      <link>https://keun90.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CME Group의 FedWatch Tool에서 나온 데이터를 보겠습니다.&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-origin-width=&quot;1015&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJB0Y/dJMcadnvkdT/ZKoKKQhiQ46D7PkjO4sVDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJB0Y/dJMcadnvkdT/ZKoKKQhiQ46D7PkjO4sVDk/img.png&quot; data-alt=&quot;2026년 기준금리 전망&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJB0Y/dJMcadnvkdT/ZKoKKQhiQ46D7PkjO4sVDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJB0Y%2FdJMcadnvkdT%2FZKoKKQhiQ46D7PkjO4sVDk%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;747&quot; height=&quot;344&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2026년 기준금리 전망&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;금리 목표 범위 확률표이며, 각 FOMC 회의 시점의 기준금리 범위 확률을 보여줍니다. 해당 회의가 끝났을 때 금리가 어디에 있을지 예상할 수 있습니다.&amp;nbsp;2026년 3월 회의 후 금리가 3.50~3.75%일 가능성이 96%이며, 하반기에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;금리가 더욱 내려갈 것&lt;/span&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;background-color: #f6e199;&quot;&gt;소비재 기업&lt;/span&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;베센트 재무장관은 미국 경제가 올해 최소 3.5% 성장할 수 있다고 얘기했습니다. 워시(Fed 후보)가 현금을 줄여도 소비재 기업이 좋을 것으로 보입니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;b&gt;저평가 '고배당 기업' (금융, 경기순환)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;티로웨프라이스(TROW), 5.45% &lt;span style=&quot;color: #ef5369;&quot;&gt;(아래 분석으로 좋지만, 현재 금융 분야의 미래가 좋지 못함)&lt;/span&gt;&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&gt;미국의 대형 자산운용사&lt;/li&gt;
&lt;li&gt;39년 연속 배당주 상승&lt;/li&gt;
&lt;li&gt;1.91% 시점이 가장 고평가 구간이었음&lt;/li&gt;
&lt;li&gt;5.45%, 아직 배당이 높다는 것은 저평가 구간인 것을 알 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E3d45/dJMcagLlXm9/tEyhFyQqrlILcTKowEdYm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E3d45/dJMcagLlXm9/tEyhFyQqrlILcTKowEdYm1/img.png&quot; data-alt=&quot;티로웨프라이스 배당률&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E3d45/dJMcagLlXm9/tEyhFyQqrlILcTKowEdYm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE3d45%2FdJMcagLlXm9%2FtEyhFyQqrlILcTKowEdYm1%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;676&quot; height=&quot;262&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;티로웨프라이스 배당률&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;&gt;
&lt;li&gt;4년째 순이익은 증가하고 있지만, 주가는 횡보하고 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cW802D/dJMb996wiOm/2i0gOpPfcsg4A8KScQuOvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cW802D/dJMb996wiOm/2i0gOpPfcsg4A8KScQuOvK/img.png&quot; data-alt=&quot;티로웨프라이스-순이익/주가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cW802D/dJMb996wiOm/2i0gOpPfcsg4A8KScQuOvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcW802D%2FdJMb996wiOm%2F2i0gOpPfcsg4A8KScQuOvK%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;666&quot; height=&quot;260&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;507&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;&lt;b&gt;앰코(AMCR), 5.15%&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&gt;포장재 회사(의약품, 식품용기 등)&lt;/li&gt;
&lt;li&gt;코카콜라 등 대형 기업들이 앰코 제품을 사용함&lt;/li&gt;
&lt;li&gt;친환경 포장재를 사용함으로써 ESG 변화 중&lt;/li&gt;
&lt;li&gt;순이익은 계속 감소하고 있어 좋지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o1iQG/dJMcaaYD3hw/Sfxaty1a8Nk7JY4mIkb3vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o1iQG/dJMcaaYD3hw/Sfxaty1a8Nk7JY4mIkb3vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o1iQG/dJMcaaYD3hw/Sfxaty1a8Nk7JY4mIkb3vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo1iQG%2FdJMcaaYD3hw%2FSfxaty1a8Nk7JY4mIkb3vK%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;673&quot; height=&quot;289&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;558&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;b&gt;저평가 '배당성장 기업'&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B5WIQ/dJMcafr7j6i/ZkSdUC8qiaMkyURC9HMyyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B5WIQ/dJMcafr7j6i/ZkSdUC8qiaMkyURC9HMyyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B5WIQ/dJMcafr7j6i/ZkSdUC8qiaMkyURC9HMyyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB5WIQ%2FdJMcafr7j6i%2FZkSdUC8qiaMkyURC9HMyyk%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;720&quot; height=&quot;318&quot; data-origin-width=&quot;1152&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드슨(NDSN)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배당률 1.13% / 배당 성장률 21.1%&lt;/li&gt;
&lt;li&gt;리쇼어링, 고마진 산업재, 소비회복&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트랙터서플라이(TSCO)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배당률 1.81% / 배당 성장률 25.1%&lt;/li&gt;
&lt;li&gt;농촌 소비, 경기방어, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;내수 부양&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;농촌과 교외지역 주민들을 위한 생활용품 전문점&lt;/li&gt;
&lt;li&gt;농장용품, 동물사료, 텃밭도구 (미국 농촌의 홈디포)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MSCI&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배당률 1.51% / 배당 성장률 19.8%&lt;/li&gt;
&lt;li&gt;자본시장 확대, 금융시장 성장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배당 투자는 현재가 아닌 미래를 사는 겁니다. 해당 기업의 현재 배당률은 적지만, 10년 후 크게 상승할 것으로 보입니다.&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;1292&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S168q/dJMcabJ3vEs/stQRIYznxe8GPMIg2vgerK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S168q/dJMcabJ3vEs/stQRIYznxe8GPMIg2vgerK/img.png&quot; data-alt=&quot;트랙터서플라이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S168q/dJMcabJ3vEs/stQRIYznxe8GPMIg2vgerK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS168q%2FdJMcabJ3vEs%2FstQRIYznxe8GPMIg2vgerK%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;692&quot; height=&quot;304&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;568&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;</description>
      <category>주식&amp;middot;경제</category>
      <category>fedwatch</category>
      <category>고배당주</category>
      <category>금리전망</category>
      <category>미국배당주</category>
      <category>미국주식분석</category>
      <category>배당성장주</category>
      <category>소비재투자</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/52</guid>
      <comments>https://keun90.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 24 Feb 2026 22:25:45 +0900</pubDate>
    </item>
    <item>
      <title>ISA-95 스마트팩토리 관점에서 보는 계층 구조(Level, Part)</title>
      <link>https://keun90.tistory.com/51</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1784&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dciCVx/dJMcadgKp6X/AAOy9DGimtZxIS8Cj5KXh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dciCVx/dJMcadgKp6X/AAOy9DGimtZxIS8Cj5KXh1/img.png&quot; data-alt=&quot;The ISA-95 Model&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dciCVx/dJMcadgKp6X/AAOy9DGimtZxIS8Cj5KXh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdciCVx%2FdJMcadgKp6X%2FAAOy9DGimtZxIS8Cj5KXh1%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;1784&quot; height=&quot;716&quot; data-origin-width=&quot;1784&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;The ISA-95 Model&lt;/figcaption&gt;
&lt;/figure&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;b&gt;ISA-95 모델 정의&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISA-95(IEC 62264)는 기업의 비즈니스 시스템(ERP 등)과 생산현장 자동화 시스템(PLC, SCADA, MES 등) 간의 정보 교환을 표준화하기 위해 제정된 국제 표준입니다. 이 표준의 목적은 제조 기업이 상위 관리 시스템과 하위 생산 제어 시스템 간에 데이터를 효율적이고 일관성 있게 교환하여, 운영 효율성과 생산성 및 품질을 향상시키는 것입니다. 즉 &lt;b&gt;&quot;어떤 데이터를 어떤 계층 사이에서 어떤 형식으로 주고 받을지&quot;&lt;/b&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ISA-95 계층 구조&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Level 4: 기업 기획 및 물류 관리 (Business Planning &amp;amp; Logistics)&lt;/li&gt;
&lt;li&gt;Level 3: 제조 운영 관리 (Manufacturing Operations Management, MOM/MES)&lt;/li&gt;
&lt;li&gt;Level 2: 공정 감독 제어 (Supervisory Control)&lt;/li&gt;
&lt;li&gt;Level 1: 기본 제어 (Basic Control)&lt;/li&gt;
&lt;li&gt;Level 0: 물리적 공정 (Physical Process)&lt;/li&gt;
&lt;/ul&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;b&gt;Level 0: 물리적 공정 (Physical Process)&lt;/b&gt;&lt;/h4&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;/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;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Level 1: 기본 제어 (Basic Control)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레벨 0의 장치들을 제어하는 계층이다. PLC(Programmable Logic Controller), DCS(Distributed Control System), 임베디드 컨트롤러등이 여기에 해당합니다. 이들은 센서로부터 데이터를 수집하고 액추에이터에 신호를 보내어 기기 동작을 제어합니다.&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;자동화 조립 공장에서 로봇용접기의 동작을 제어하는 Siemems S7 PLC&lt;/li&gt;
&lt;li&gt;화학 공장에서 반응기 온도를 조절하는 Honeywell DCS 컨트롤러&lt;/li&gt;
&lt;li&gt;식음료 공장에서 충전 라인의 펌프를 제어하는 Allen-Bradley PLC.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Level 2: 공정 감독 제어 (Supervisory Control) 및 운여&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레벨 1에서 제어하고 있는 프로세스를 모니터링하고 운영자가 직관적으로 상황을 파악, 제어할 수 있도록 하는 HMI(Human Machine Interface), SCADA(Supervisory Control And Data Acquisition) 시스템이 해당합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;석유 정제 공장에서 전체 공정 흐름도를 보여주는 SCADA 시스템 (예: Wonderware InTouch, GE iFLX)&lt;/li&gt;
&lt;li&gt;발전소 터빈 상태를 모니터링하는 DCS 화면&lt;/li&gt;
&lt;li&gt;식품 공장에서 모든 충전 스테이션, 포장 스테이션의 데이터 실시간 모니터링&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Level 3: 제조 운영 관리 (Manufacturing Operations Management, MOM/MES)&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 생산 활동(제조 실행)에 필요한 계획, 스케줄링, 품질 관리, 추적성 관리, 생산 실적 관리 등 제조 운영 전반을 담당하는 계층입니다. MES는 생산 오더를 관리하고, 공정 스케줄링을 최적화하며, 생산 이력과 품질 데이터, 성능 지표(OEE) 등을 관리하여 실시간으로 현장 운영 효율성을 개선합니다.&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;전자제품 공장에서 SAP ME를 이용하여 생산 오더 스케줄링, 공정 흐름 관리, 품질 불량 제품의 원인 추적&lt;/li&gt;
&lt;li&gt;자동차 공장에서 Rockwell FactoryTalk ProductionCentre를 활용하여 조립 라인별 실적, 다운타임 분석, OEE&amp;nbsp; 측정&lt;/li&gt;
&lt;li&gt;식품 공장에서 Simense Opcenter를 통해 배치별 원료 투입 기록 관리 및 실시간 재고 관리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Level 4:&lt;span&gt; &lt;/span&gt;기업 기획 및 물류 관리 (Business Planning &amp;amp; Logistics)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기업 경영층에서 사용되는 ERP, SCM, CRM 시스템이 해당하는 계층입니다. 기업의 전사적 자원 관리, 판매 및 수주 계획, 생산계획 수립, 재고관리, 회계 및 재무 관리가 이루어집니다.&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;SAP S/4HANA를 통해 주간, 월간 생산계획 수립, 원재료 구매 발주, 출하 일정 계획&lt;/li&gt;
&lt;li&gt;Oracle ERP를 통해 원자재 재고 파악, 고객 주문 접수, 예측 생산량 산출 후 MES로 하달&lt;/li&gt;
&lt;li&gt;MS Dynamics 365를 이용한 제조기업의 재무회계, 인사관리, 제품원가 분석 등&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ISA-95 주요 Part&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;Part 1&lt;/span&gt;&lt;/b&gt;: Level 4와 Level 3의 Interface에 해당하며 전사적인 관점을 지향하며 ERP 및 MES 등 시스템 통합 운영을 위한 용어 정의 및 기본 모형 제시&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Part&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt; 2&lt;/b&gt;&lt;/span&gt;: Part 1에서 제시된 ERP와 MES간 표준화된 정보흐름을 표현하기 위해 객체모형과 그 속성을 제시&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Part&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;&lt;span&gt; 3&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;: 제조운영활동 구분 및 기본활동모형을 통해 Level 3의 제조운영활동을 저의&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Part&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;&lt;span&gt; 4&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;: Part 3에서 제시된 제조운영활동에 관련된 객체모형과 그 속성들을 제시&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Part&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;&lt;span&gt; 5&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;: 생산 자동화 시스템과 사주지원활동간 운영에 대한 정의로서 Level 4와 Level 3 간의&amp;nbsp; Interface에 적용 가능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Part&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;&lt;span&gt; 6&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;: 제조 공정간 운영&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ISA-95&lt;span&gt;&amp;nbsp;문서&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;자동화 컨설턴트로서 아래 8가지 문서의 목적-구조-일고 검증하는 능력이 반드시 필요합니다.&amp;nbsp;&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;b&gt;&lt;span&gt;RACI&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 업무/의사결정에 대해 누가 무엇을 책임지는지 명확히 하는 역할 매트릭스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;b&gt;R&lt;/b&gt;esponsible: 실제 작업 수행자&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;A&lt;/b&gt;cccountable: 최종 책임자(1명 원칙)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;C&lt;/b&gt;onsulted: 사전 협의 대상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;I&lt;/b&gt;nformed: 결과 통보 대상&lt;/p&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;b&gt;Canonical (Canonical Data Model)&lt;/b&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;- ERP &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp; MES &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp; APS &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; PLM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #222222;&quot;&gt;- 각각 데이터 구조 다름 &amp;gt;&amp;gt;&amp;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;b&gt;ICD (Interface Control Document)&lt;/b&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;b&gt;Data Governance&lt;/b&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;- Data ownership / quality / standard / lifecycle / security&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 중요한 이유 1. Master data 정합성&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;&lt;b&gt;Gap &amp;amp; Roadmap&lt;/b&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;b&gt;KPI Dictionary &amp;amp; Lineage&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- KPI 정의 표준집&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 중요한 이유 1. OEE 계산 방식 공장마다 다름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 중요한 이유 2.&lt;span&gt; Yield 정의 불일치&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&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; text-align: start;&quot;&gt;- 중요한 이유 3.&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Change Governance&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템/공정 변경을 통제된 절차로 관리&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 중요한 이유 1. Recipe 변경&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 중요한 이유 2.&lt;span&gt;&lt;span&gt; 공정 라우팅 변경&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 중요한 이유 3.&lt;span&gt;&lt;span&gt; Master data 변경&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 중요한 이유 4.&lt;span style=&quot;color: #333333; text-align: start;&quot;&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Global Blueprint&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 글로벌 공장에 공통 적용할 표준 운영/시스템 설계서&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 중요한 이유 1. 공장마다 MES 다름&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 중요한 이유 2.&lt;span&gt;&lt;span&gt;&lt;span&gt; 데이터 비교 불가&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 중요한 이유 3.&lt;span&gt;&lt;span&gt;&lt;span&gt; 운영 방식 불일치&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>ISA-95</category>
      <category>mes</category>
      <category>mom</category>
      <category>스마트팩토리</category>
      <category>제조자동화</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/51</guid>
      <comments>https://keun90.tistory.com/51#entry51comment</comments>
      <pubDate>Mon, 23 Feb 2026 20:10:55 +0900</pubDate>
    </item>
    <item>
      <title>[2026.02 경제지표 정리] Core PCE 3%, PMI 확장 유지&amp;hellip; 금리 인하 기대는..</title>
      <link>https://keun90.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트럼프가 10% 상호관세를 발표했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 15%에서 줄어든 내용을 보이고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 관세에 대해서는 100%, 25% 와 같이 높은 수치를 발표하기는 어려워보입니다.&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;2026년, 경제 지표는 소폭이지만, 상승을 의미하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 GDP 성장률은 2.2%입니다.&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;910&quot; data-origin-height=&quot;689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brsxCj/dJMcagdsRL2/GgVqhilDjb320CJ5D3Ypzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brsxCj/dJMcagdsRL2/GgVqhilDjb320CJ5D3Ypzk/img.png&quot; data-alt=&quot;Source: Bureau of Economic Analysis &amp;amp;middot; Get the data &amp;amp;middot; Created with Datawrapper&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brsxCj/dJMcagdsRL2/GgVqhilDjb320CJ5D3Ypzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrsxCj%2FdJMcagdsRL2%2FGgVqhilDjb320CJ5D3Ypzk%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;517&quot; height=&quot;391&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;689&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Source: Bureau of Economic Analysis &amp;middot; Get the data &amp;middot; Created with Datawrapper&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;2025년 성장률은 셧다운 영향을 제외하면 긍정적인 지표를 보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셧다웃이 없었다면, 1.4% &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 2.4%가 가능했을 것으로 보고 있습니다.&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;623&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkWuzy/dJMcaiCi2xi/D6yABT6phqvMC9jbuDe65K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkWuzy/dJMcaiCi2xi/D6yABT6phqvMC9jbuDe65K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkWuzy/dJMcaiCi2xi/D6yABT6phqvMC9jbuDe65K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkWuzy%2FdJMcaiCi2xi%2FD6yABT6phqvMC9jbuDe65K%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;514&quot; height=&quot;327&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;396&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2026년 , GDP 성장률은 AI투자 + 금리인하로 인해 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2.7%&lt;/b&gt;&lt;/span&gt;로 가속될 것으로 예상하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCE 근원 물가 3%로 예상 2.9%와 거의 비슷하게 나왔습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시장은 예상치에 거의 비슷한 수치에 보합 수준에서 안정세를 보였습니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PMI 소폭 하락 50 이상&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;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가계의 경기 체감과 소비 의향이 약간 좋아졌다는 신호&amp;nbsp;&lt;/li&gt;
&lt;li&gt;소비 급락 우려는 완화, 그러나 경기 반등 확정 신호는 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3W0x4/dJMcaiCi5Na/vf4wyurNuPEsIEtlKCnY4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3W0x4/dJMcaiCi5Na/vf4wyurNuPEsIEtlKCnY4k/img.png&quot; data-alt=&quot;https://www.indexergo.com/series/?frq=M&amp;amp;amp;idxDetail=13108&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3W0x4/dJMcaiCi5Na/vf4wyurNuPEsIEtlKCnY4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3W0x4%2FdJMcaiCi5Na%2Fvf4wyurNuPEsIEtlKCnY4k%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;642&quot; height=&quot;379&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.indexergo.com/series/?frq=M&amp;amp;idxDetail=13108&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;b&gt;BEA(Bureau of Economic Analysis)&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&gt;US GDP 공식 발표&lt;/li&gt;
&lt;li&gt;개인소득&lt;/li&gt;
&lt;li&gt;소비지출(PCE, 연준이 가장 증시하는 물가지표)&lt;/li&gt;
&lt;li&gt;PCE(Personal Consumption Expenditures), 미국 가계가 실제로 소비한 금액과 물가 변화를 측정하는 지표(연준이 가장 중요하게 보는 인프레이션 지표)&lt;/li&gt;
&lt;li&gt;기업이익 통계&lt;/li&gt;
&lt;li&gt;국제수지&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCE 물가 vs PCE 근원 물가&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&gt;PCE 물가(PCE Price Index) 전체 소비 물가&lt;/li&gt;
&lt;li&gt;PCE 근원(Core PCE) 식료품&lt;b&gt;&amp;middot;&lt;/b&gt;에너지 제외한 기조 물가, 단기 노이즈 제거 후 진짜 물가 추세 보기 위함&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; PCE 물가 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; Core PCE &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;포함 범위&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;모든 소비 항목&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;식료품 ❌ 에너지 ❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;변동성&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;큼&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;상대적으로 안정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;목적&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;전체 물가 수준 파악&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;기조 인플레이션 파악&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;연준 중요도&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;중요&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;⭐ 매우 중요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Core PCE에서 식료품&lt;b&gt;&amp;middot;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;에너지를 제외하는 이유는 날씨/지정학 영향이 크고, 단기 급등락이 많고 통화정책으로 통제가 어렵기 때문입니다.&amp;nbsp;&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;b&gt;PMI (Purchasing Manager's Index, 구매관리자 지수)&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&gt;경기가 앞으로 좋아질지 나빠질지 가장 먼저 알려주는 선행 경기 온도계&lt;/li&gt;
&lt;li&gt;기업 구매관리자 설문 기반 경기 선행지표&lt;/li&gt;
&lt;li&gt;제조&lt;b&gt;&amp;middot;&lt;/b&gt;서비스 엽황의 체감 변화를 빠르게 반영함&amp;nbsp;&lt;/li&gt;
&lt;li&gt;50 이상: 경기 확장&lt;/li&gt;
&lt;li&gt;50 미만: 경기 위축&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;&lt;b&gt;미시간대 소비자심리지수&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&gt;소비와 인플레이션 기대를 가장 먼저 읽는 가계 체감 선행지표&lt;/li&gt;
&lt;li&gt;경제의 70%를 차지하는 소비를 예측하기 위해 분석함(미국 경제 구조: 소비 ~ GDP의 약 70%)&lt;/li&gt;
&lt;li&gt;1년 기대 인플레이션&lt;/li&gt;
&lt;li&gt;5년 기대 인플레이션&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;기대 인플레이션 상승&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 금리 상승 압력(연준이 경제에 많이 풀린 돈을 조절하기 위함)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;소비심리 급락 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 경기둔화 우려 상승&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>CORE PCE</category>
      <category>GDP</category>
      <category>PMI</category>
      <category>금리</category>
      <category>미국경제</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/50</guid>
      <comments>https://keun90.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 21 Feb 2026 11:07:11 +0900</pubDate>
    </item>
    <item>
      <title>필드버스 vs 산업용 이더넷 비교 - 스마트팩토리 네트워크 핵심</title>
      <link>https://keun90.tistory.com/49</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccwlZd/dJMcagYJXiS/Ne0qa8a6hyL0aeRerjdxa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccwlZd/dJMcagYJXiS/Ne0qa8a6hyL0aeRerjdxa0/img.png&quot; data-alt=&quot;산업용 네트워크 기술 시장 분석(출처: HMS Networks)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccwlZd/dJMcagYJXiS/Ne0qa8a6hyL0aeRerjdxa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccwlZd%2FdJMcagYJXiS%2FNe0qa8a6hyL0aeRerjdxa0%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;804&quot; height=&quot;473&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;산업용 네트워크 기술 시장 분석(출처: HMS Networks)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;필드버스 정의&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산업용 네트워크 중 하나인 필드버스란&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Field(생산에 필요한 각종 설비들이 운전 되는 현장) + Bus(각 설비 사이의 데이터를 전송하는 통로)&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;필드버스 장점&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원각 절감과 유지보수의 편리성, 시스템 구축 시 하나의 제조회사에 의존하지 않고 사용자가 원하는 제품을 선정해 사용할 수 있다는 것입니다. 배선 방식에 비해 필드버스의 경우 리모트 I/O 모듈을 현장 근처에 설치해 단자대 없이 센서 및 기기를 직접 연결하고 통신선 한 가닥만 제어 기기로 배선함으로써 중앙 집중식 대비 약 40~50%의 절감 효과를 얻을 수 있습니다. 또한, 센서나 I/O의 이상 시 해당 노드에서 점검을 빠르게 할 수 있어 장비의 다운 타임을 줄일 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;필드버스 세분화&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1. 컨트롤버스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;PLC, DCS 또는 제어용 PC HMI(Human Machine Interface) 상호의 정보 교환에 이용되는 네트워크로서 콘트롤러 상위 네트워크라고도 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;2. 필드버스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;PLC, DCS 또는 아날로그형의 제어 기기와 필드 기기간의 접속을 디지털화 네트워크화한 것으로 FA계(Factory Automaiton), PA계(Process Automation)로 분류할 수 있습니다.콘트롤러 하위 네트워크 혹은 필드 네트워크라고도 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;3. 센서버스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(Process Automation)로 분류할 수 있습니다.콘트롤러 하위 네트워크 혹은 필드 네트워크라고도 합니다 센서 신호, 액추에이터 신호(검출단&amp;middot;조작단의 온 오프 신호, 접점 신호, 또는 아날로그 입출력 신호)를 고속으로 전송하는 네트워크를 말합니다. 코드화된 제어 명령이나 메시지는 취급할 필요가 없고 디바이스 버스,비트 버스 혹은 센서 레벨 네트워크라고도 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;필드버스 vs 산업용 이더넷&lt;/b&gt;&lt;/h4&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;산업용 이더넷: Ethernet 기반의 고속 확장성 공장 네트워크&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 54.4186%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;&lt;b&gt;산업&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;&lt;b&gt;산업용 Ethernet&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;&lt;b&gt;필드버스&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;반도체&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;매우 높음&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;일부 레거시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;LCD&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;매우 높음&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;일부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;자동차&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;일부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;물류 자동화&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;매우 높음&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;거의 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;화학/정유&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;아직 많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;제약&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;width: 18.4884%;&quot;&gt;존재&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;산업용 이더넷&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 패킷로 나누어 네트워크를 통해 전달한느 기술입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;산업 현장에서는 1Gbps/s 속도로 사용이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다만, 특정 패킷이 목적이에 도달하는 시간이 정해져 있지 않기 때문에 실시간 제어 기능이 보장되지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇기에 PLC 등 컨트롤러 하위는 아직 필드버스를 사용하는 데가 있으나 그 상위로 연결되는 부분은 이더넷을 사용합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(이젠 필드 계열까지 이더넷 사용을 지원하는 End Device도 많이 나온 상황입니다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통신 방식은 제조 디바이스에 따라 결정되는 경우가 많습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로크웰 오토메이션의 디바이스를 주로 사용하는 곳에서는 Ethernet/IP를, 지멘스 PLC를 주로 사용하는 현장은 PROFNET을&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미쓰비시 제품을 사용하는 경우 CC-LINK IE를 사용합니다. 공장들 대부분이 혼용해서 사용하는 경우가 많고 통합 과정이 매우 까다로웠습니다. 이 상황에 대한 대응 방법으로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;OPC-UA&lt;/span&gt; 기술이 많이 쓰이고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://keun90.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://keun90.tistory.com/22&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771023201554&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;OPC-UA 실습 1 - 서버, 클라이언트 연동&quot; data-og-description=&quot;OPC-UA 실습을 위한 Server, Client를 다운받는다. (계정이 막혔는지,, 로그인 실패 알림이 계속해서 발생한다.) 계정 메일 주소는 gmail을 활용하는 것을 추천한다. ttps://documentation.unified-automation.com/uaexp&quot; data-og-host=&quot;keun90.tistory.com&quot; data-og-source-url=&quot;https://keun90.tistory.com/22&quot; data-og-url=&quot;https://keun90.tistory.com/22&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bPtXot/dJMb9lk3lKj/ubAaxe8X7HH2DbvE2ZFt90/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/daWlgR/dJMb9jOjacn/57H9jb6kb2ofyTaUh8GREK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTtV4D/dJMb9g47k5E/qtJcKkSAUDnS4N5VuaxtF0/img.png?width=1885&amp;amp;height=1130&amp;amp;face=0_0_1885_1130&quot;&gt;&lt;a href=&quot;https://keun90.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://keun90.tistory.com/22&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bPtXot/dJMb9lk3lKj/ubAaxe8X7HH2DbvE2ZFt90/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/daWlgR/dJMb9jOjacn/57H9jb6kb2ofyTaUh8GREK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTtV4D/dJMb9g47k5E/qtJcKkSAUDnS4N5VuaxtF0/img.png?width=1885&amp;amp;height=1130&amp;amp;face=0_0_1885_1130');&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;OPC-UA 실습 1 - 서버, 클라이언트 연동&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OPC-UA 실습을 위한 Server, Client를 다운받는다. (계정이 막혔는지,, 로그인 실패 알림이 계속해서 발생한다.) 계정 메일 주소는 gmail을 활용하는 것을 추천한다. ttps://documentation.unified-automation.com/uaexp&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;keun90.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>fieldbus</category>
      <category>OPC-UA</category>
      <category>PLC 통신</category>
      <category>산업용 이더넷</category>
      <category>스마트팩토리 네트워크</category>
      <category>필드버스</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/49</guid>
      <comments>https://keun90.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 14 Feb 2026 07:57:39 +0900</pubDate>
    </item>
    <item>
      <title>LIMS System Owner의 역할</title>
      <link>https://keun90.tistory.com/48</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;LIMS는 단순 시험 시스템이 아니라, 규제 환경에서 데이터 무결성을 통제하는 핵심 플랫폼입니다. (LIMS: Laboratory Information Management System, 실험실 정보 관리 시스템)&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;데이터 저장 및 기기 연동&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;b&gt;직무의 본질&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMP 환경에서 LIMS의 기술적 안정성과 데이터 무결성을 책임지는 System Owner&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;System Owner는 모든 레이어를 관통하는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMP는 위에 있는 게 아니라 전체를 감싸는 통제 계층입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(GMP: Good Manufacturing Practice, 제조 및 품질관리 전 과정에서 데이터의 무결성, 추적 가능성, 일관성을 보장하기 위한 기준)&lt;/p&gt;
&lt;pre id=&quot;code_1770950524287&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ Business Layer ]
시험실 프로세스 / QC 업무 / 배치 Release 판단
                &amp;darr;
────────────────────────────────
[ Application Layer ]
                LIMS Core
  - 시험 관리
  - 결과 저장
  - 승인 프로세스
  - 재시험 관리
────────────────────────────────
                &amp;darr;
[ Integration Layer ]
  장비 인터페이스 &amp;harr; MES &amp;harr; ERP &amp;harr; 기타 시스템
────────────────────────────────
                &amp;darr;
[ Data Layer ]
  DB (시험 결과, 원본 데이터, Audit Log)
────────────────────────────────
                &amp;uarr;
[ GMP Control Layer ]
  - Data Integrity 통제
  - Change Control
  - Validation
  - Audit 대응&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;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;데이터 흐름 중심 구조&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 단계와 변경점에 대해 기록하고 제어하는 역할이 매우 종요합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770951062394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ 분석 장비 ]
     &amp;darr; (Raw Data)
[ Interface Module ]
     &amp;darr; (Validation &amp;amp; Parsing)
[ LIMS Core ]
     &amp;darr;
[ DB 저장 ]
     &amp;darr;
[ 승인/Release 프로세스 ]
     &amp;darr;
[ ERP / MES 연계 ]

모든 단계 &amp;rarr; Audit Log 기록
모든 변경 &amp;rarr; Change Control 대상&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;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;System Owner 의 역할&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Owner는 코딩 담당자가 아니라 QA와 IT 사이의 기술적 책임자역할을 수행합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;변경 통제 및 Validation 책임&lt;/u&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;테스트 범위 정의&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Validation(OQ/PC) 참여&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Change Control 승인 프로세스 참여&amp;nbsp;&lt;/li&gt;
&lt;li&gt;변경 이력 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;데이터 무결성 및 인터페이스 관리&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장비 &amp;harr; LIMS 데이터 수집 구조 검토&lt;/li&gt;
&lt;li&gt;인터페이스 오류 모니터링&lt;/li&gt;
&lt;li&gt;데이터 누락/중복 방지 설계&lt;/li&gt;
&lt;li&gt;Audit Trail 점검&lt;/li&gt;
&lt;li&gt;DB 정합성 확인&lt;/li&gt;
&lt;li&gt;장애 발생 시 Root Cause 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;Audit 대응 및 대내외 기술 창구&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Audit 시 시스템 설명&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;
&lt;li&gt;글로벌 기준 정렬&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Risk-Based Approach(위험 기반 통제)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;System Owner는 모든 변경을 동일하게 보는 것이 아니라, 품질에 미치는 영향 수준에 따라 통제 강도를 조절해야 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 기능이 동일한 Critial Level은 아님&lt;/li&gt;
&lt;li&gt;시험 결과 계산 로직은 High Risk&lt;/li&gt;
&lt;li&gt;UI 문구 변경은 Low Risk&lt;/li&gt;
&lt;li&gt;인터페이스 자동 승인 로직은 High Risk&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Part 11 / 전자기록 &amp;middot; 전자서명 개념&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;LIMS는 대부분 전자 기록 시스템입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Electronic Record&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Electronic&lt;span&gt; Signature&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;접근 권한 분리&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;계정 공유 금지&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;비밀번호 정책&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Master Data 통제&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;운영 데이터 외에 Master Data 통제가 더 중요합니다.&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;허용 기준값(Spec)&lt;/li&gt;
&lt;li&gt;계산 공식&lt;/li&gt;
&lt;li&gt;시험 방법 버전&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;br /&gt;Deviation CAPA 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 GMP 환경에서는 장애를 &quot;버그&quot;라고 하지 않고 &quot;Deviation(일탈)&quot; 이라고 부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;System Owner는 장애를 기술적으로 해결하는 것뿐 아니라 Deviation 기록 근거를 제공하는 역할을 합니다.&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;원인 분석&lt;/li&gt;
&lt;li&gt;재발 방지 조치(CAPA)&lt;/li&gt;
&lt;li&gt;문서 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;br /&gt;Backup / Disaster Recovery (DR)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB&amp;nbsp; 백업 정책&lt;/li&gt;
&lt;li&gt;복구 테스트&lt;/li&gt;
&lt;li&gt;데이터 손실 허용 범위&lt;/li&gt;
&lt;li&gt;이중화 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Lifecycle 관점&amp;nbsp;&lt;/b&gt;&lt;/h4&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;Validation&lt;/li&gt;
&lt;li&gt;운영&lt;/li&gt;
&lt;li&gt;변경&lt;/li&gt;
&lt;li&gt;폐기(Decommissioning)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;폐기&lt;/b&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;폐기 단계에서는 데이터 보존 전략 / 전급 통제 유지 / Validation 종료 문서화 / 인터페이스 정리 를 해주어야 합니다. 데이터의 삭제가 아닌 언제든 접근 가능한 상태를 유지해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;KPI 기반 운영&lt;/b&gt;&lt;/h4&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;Audit Finding 건수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Traceability Matrix 의 본질&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMP 프로젝트에서는 요규사항 정의 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 설계 명세 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 테스트 케이스 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 실행 결과 &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 변경 이력 .. 이 모든 것을 연결해서 증명해야 합니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&quot;이 요구사항이 어디에 구현되었고, 어떻게 검증되었는가?&quot;를 한눈에 보여주는 지도입니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;Audit 시 가장 많이 받는 질문에 대응하기 위해 Traceability Matrix가 반드시 필요합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;/li&gt;
&lt;li&gt;이 요구사항이 누락되지 않았는가?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;테스트되지 않은 기능이 있는가?&lt;/li&gt;
&lt;li&gt;변경 후 재검증 되었는가?&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIMS에서 아래와 같은 형식으로 관리하게 됩니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; URS &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Risk &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; FS &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Config &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; OQ &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; PQ &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Status &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URS-001&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;FS-03&lt;/td&gt;
&lt;td&gt;Role Rule&lt;/td&gt;
&lt;td&gt;TC-05&lt;/td&gt;
&lt;td&gt;PQ-02&lt;/td&gt;
&lt;td&gt;Validated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;URS - 사용자 요구사항 고유 번호&amp;nbsp;&lt;/li&gt;
&lt;li&gt;FS Ref - 설계 문서의 어느 항목에 반영되었는지&lt;/li&gt;
&lt;li&gt;Config - 설정값 or 계산 로직 or 인터페이스 모듈&lt;/li&gt;
&lt;li&gt;QQ Test - 운영 검증 테스트 케이스 번호&lt;/li&gt;
&lt;li&gt;PQ Test - 실제 업무 시나리오 기반 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Traceability의 핵심 3가지는 아래와 같습니다.&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;Completeness - 모든 URF가 FS에 반영되었는가?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Coverage - 모든 High Rish 항목이 QQ 테스트되었는가?&lt;/li&gt;
&lt;li&gt;Revalidation - 변경 시 영향 받는 URS는 재검증 되었는가?&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Bidirectional Traceability&amp;nbsp;&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Forward Traceability: URS(요구사항) &amp;rarr; FS/DS(설계) &amp;rarr; Config/Code &amp;rarr; IQ/OQ/PQ(시험) &amp;rarr; Evidence(증빙)&lt;/li&gt;
&lt;li&gt;Backward Traceability: Evidence(증빙) &amp;rarr; 테스트케이스&amp;nbsp; &amp;rarr; 설정 &amp;rarr; 코드&amp;nbsp;&amp;rarr; 어떤 URS를 만족 / URS 없는 기능이 있는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;규제 관점에서 실패 패턴은 두 가지가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;역방향 추적성은 이 두 가지를 구조적으로 방지할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&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;URS는 있는데 테스트가 없는 경우 &amp;rarr; 검증되지 않은 요구사항(Audit에서 바로 걸림)&lt;/li&gt;
&lt;li&gt;테스트/기능은 있는데 URS가 는 경우 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 승인되지 않은 기능(Shadow Function, 통제 위반)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;GMP / 규제 관련 용어&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;&lt;b&gt; 약어/용어 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;b&gt; Full Name &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;&lt;b&gt; 의미 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;&lt;b&gt; System Owner 관점 핵심 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;GMP&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Good Manufacturing Practice&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;제조 및 품질관리 기준&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;시스템 설계 원칙&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;ALCOA&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Attributable, Legible, Contemporaneous, &lt;br /&gt;Original, Accurate&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;데이터 무결성 원칙&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;Audit Trail 필수 근거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;CSV&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Computer System Validation&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;컴퓨터 시스템 검증&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;문서 기반 검증 체계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;URS&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;User Requirement Specification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;사용자 요구사항 문서&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;모든 검증의 출발점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;FS&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Functional Specification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;기능 명세&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;URS를 기술적으로 풀어쓴 문서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;DS&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Design Specification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;설계 명세&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;실제 구현 구조 정의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;IQ&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Installation Qualification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;설치 검증&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;시스템이 올바르게 설치되었는지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;OQ&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Operational Qualification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;운영 검증&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;기능이 요구대로 동작하는지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;PQ&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Performance Qualification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;성능/실사용 검증&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;실제 업무 환경에서 검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;RTM&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Requirements Traceability Matrix&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;요구사항 추적 매트릭스&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;URS&amp;harr;검증 연결 지도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;OOS&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Out Of Specification&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;허용 기준 초과&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;품질 리스크 발생 이벤트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;Deviation&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;일탈&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;규정 위반/예외 발생&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;원인 분석 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;CAPA&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;Corrective and Preventive Action&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;시정 및 예방 조치&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;재발 방지 체계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;Change Control&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;변경 통제&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;시스템 변경 승인 절차&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;배포 통제 핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;Risk-Based Approach&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;위험 기반 접근&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;위험도에 따른 통제&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;검증 범위 결정 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.093%;&quot;&gt;Part 11&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;21 CFR Part 11 (FDA)&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;전자기록/전자서명 규정&lt;/td&gt;
&lt;td style=&quot;width: 26.3954%;&quot;&gt;전자 승인/로그 설계 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;LIMS / 시스템 관련 용어&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 약어/용어 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 의미&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Owner가 보는 포인트 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LIMS&lt;/td&gt;
&lt;td&gt;Laboratory Information Management System&lt;/td&gt;
&lt;td&gt;시험 데이터 관리 시스템&lt;/td&gt;
&lt;td&gt;데이터 허브&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QC&lt;/td&gt;
&lt;td&gt;Quality Control&lt;/td&gt;
&lt;td&gt;품질 관리 부서&lt;/td&gt;
&lt;td&gt;사용자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;Quality Assurance&lt;/td&gt;
&lt;td&gt;품질 보증 부서&lt;/td&gt;
&lt;td&gt;규제 통제 주체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Master Data&lt;/td&gt;
&lt;td&gt;기준 데이터&lt;/td&gt;
&lt;td&gt;시험항목, Spec, 계산식 등&lt;/td&gt;
&lt;td&gt;변경 시 High Risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spec&lt;/td&gt;
&lt;td&gt;Specification&lt;/td&gt;
&lt;td&gt;허용 기준값&lt;/td&gt;
&lt;td&gt;합/부 판정 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RBAC&lt;/td&gt;
&lt;td&gt;Role-Based Access Control&lt;/td&gt;
&lt;td&gt;역할 기반 접근 제어&lt;/td&gt;
&lt;td&gt;권한 통제 핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit Trail&lt;/td&gt;
&lt;td&gt;변경 이력 로그&lt;/td&gt;
&lt;td&gt;누가 언제 무엇을 변경했는지&lt;/td&gt;
&lt;td&gt;Data Integrity 핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Electronic Signature&lt;/td&gt;
&lt;td&gt;전자서명&lt;/td&gt;
&lt;td&gt;승인 인증 절차&lt;/td&gt;
&lt;td&gt;Part 11 대상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;시스템 간 연동&lt;/td&gt;
&lt;td&gt;장비&amp;harr;LIMS&amp;harr;MES&amp;harr;ERP&lt;/td&gt;
&lt;td&gt;데이터 정합성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw Data&lt;/td&gt;
&lt;td&gt;원본 데이터&lt;/td&gt;
&lt;td&gt;장비에서 생성된 최초 데이터&lt;/td&gt;
&lt;td&gt;삭제 금지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive&lt;/td&gt;
&lt;td&gt;데이터 보관&lt;/td&gt;
&lt;td&gt;시스템 폐기 시 보존&lt;/td&gt;
&lt;td&gt;Read-Only 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revalidation&lt;/td&gt;
&lt;td&gt;재검증&lt;/td&gt;
&lt;td&gt;변경 후 재검증&lt;/td&gt;
&lt;td&gt;Change Control 연결&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;</description>
      <category>IT 제조</category>
      <category>gmp</category>
      <category>lims</category>
      <category>LIMS직무</category>
      <category>SystemOwner</category>
      <category>TraceabilityMatrix</category>
      <category>변경통제</category>
      <category>시험실시스템</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/48</guid>
      <comments>https://keun90.tistory.com/48#entry48comment</comments>
      <pubDate>Fri, 13 Feb 2026 19:20:38 +0900</pubDate>
    </item>
    <item>
      <title>26년 2월 - 비트코인, 크립토 윈터, 하락 원인&amp;middot;청산 구조&amp;middot;반등 가능성 총정리</title>
      <link>https://keun90.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개당 12만 달러를 넘어갔던 비트코인은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26.02.11 기준, 심리적 저항선으로 여겨졌던 7만 달러 밑으로 떨어졌습니다.&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;b&gt;비트코인은 왜 금과 다르게 하락세을 보일까?&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26년, 크립토 윈터(바닥을 탐색하는 시기)가 좀 더 길어질 수 있다는 분석들이 많이 나왔고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22년 11월 이후로 가장 큰 하락 폭을 보이고 있습니다.&amp;nbsp;&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;b&gt;하락의 원인은 무엇일까?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 연준 의장, 케빈 워시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &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;모든 자산이 급락했고 이에 따라 비트코인도 함께 폭락했습니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;왜 비트 코인은 반등하지 못했을까?&lt;/b&gt;&lt;/h4&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;rarr; 1코인으로 10~20코인을 굴리는, 레버리지 투자가 활발한 시장입니다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코인에는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;강제 청산&lt;/span&gt; 이 있어, 하락 장에서는 24시간 쉬지않고 연쇄 청산이 발생할 수 있습니다.&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;26년 2월, 단 하루만에 조 단위 청산이 발생하면서 가파른 하락세를 보이고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;상승장이 올까?&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;24년 1월 이후 비트코인이 제도권(ETF) 편입 되면서 좋은 흐름을 보였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기관 투자자 보유 물량이 전체 코인 시장의 10%를 넘었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ETF 투자자들의 평단가는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;8만8천달러&lt;/span&gt;로, 대부분 현재 기준 손실 구간에 빠진 것으로 보입니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이럴 때 기관들은 일반적으로 포트폴리오 재구성을 위해 손절 후 자산을 운영합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기관 손절 &amp;rarr; 개미 저점 매수 &amp;rarr; 개미 청산 반복해온 것이 확인되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스트레티지(비트코인 매수 기업)의 평단가는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;7만5천달러&lt;/span&gt;입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마라홀딩스(채굴기업)가 1비트코인을 채굴하는 비용이, 25년 3분기 기준, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;6만7천달러&lt;/span&gt;입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비트코인 가격이 채굴비용 보다 하락하게 된다면, 기관도 버티기 힘든 가격대가 됩니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;br /&gt;가격 추이&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2,3차를 보면 고점 대비 70%까지 하락을 보였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 관점에서 보면, 4차 반감기의 하락의 끝이 더 남아 있는 것으로 보입니다. (현재 고점 대비 -50%)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCPydN/dJMcacvijcP/Lx1d9Kx5I4WDa1RPuAQ9DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCPydN/dJMcacvijcP/Lx1d9Kx5I4WDa1RPuAQ9DK/img.png&quot; data-alt=&quot;출처: 블룸버그 키움증권&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCPydN/dJMcacvijcP/Lx1d9Kx5I4WDa1RPuAQ9DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCPydN%2FdJMcacvijcP%2FLx1d9Kx5I4WDa1RPuAQ9DK%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;529&quot; height=&quot;371&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 블룸버그 키움증권&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;b&gt;미국,&amp;nbsp; 비트코인 X 크립토 O &lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;달러와 1:1 가치를 연동한 크립토(디지털 달러), 스테이블 코인의 지니어스 법은 생겼지만,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비트코인에 대한 정책은 아직 나오지 않고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미국 재무 장관도 비트코인에 대해 선을 긋고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비트코인이 우상향 한다는 의견이 있지만, 아직 위험자산으로 보입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;테더(&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;세계 최대 달러 스테이블 코인 업체)는 자신들의 코인에 1대 1로 연동시켜야 할 현금과 국채 같은 달러 자산 외에도&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;비트코인과 실물 금괴를 사 모으고 있습니다. 비트코인의 비중은 10%이지만, 금의 비중은 10~15%까지 늘리겠다는 계획입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>강제청산</category>
      <category>비트코인ETF</category>
      <category>비트코인전망</category>
      <category>비트코인하락이유</category>
      <category>연준긴축정책</category>
      <category>채굴비용</category>
      <category>크립토윈터</category>
      <category>테더전략</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/47</guid>
      <comments>https://keun90.tistory.com/47#entry47comment</comments>
      <pubDate>Fri, 13 Feb 2026 00:29:14 +0900</pubDate>
    </item>
    <item>
      <title>협동로봇 입문 교육 후기 &amp;ndash; 두산로보틱스 초급 과정 솔직 정리</title>
      <link>https://keun90.tistory.com/45</link>
      <description>&lt;p data-end=&quot;39&quot; data-start=&quot;27&quot; 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-end=&quot;39&quot; data-start=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;(가장 아래, 최종 실습 영상이 있습니다.)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;39&quot; data-start=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;39&quot; data-start=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;교육 목표 요약&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;177&quot; data-start=&quot;40&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;63&quot; data-start=&quot;40&quot;&gt;협동로봇과 산업용 로봇의 차이 이해&lt;/li&gt;
&lt;li data-end=&quot;99&quot; data-start=&quot;64&quot;&gt;두산 협동로봇 구성과 인터페이스 이해 및 기본 설치&amp;middot;운용&lt;/li&gt;
&lt;li data-end=&quot;119&quot; data-start=&quot;100&quot;&gt;티치 펜던트 UI 사용 숙련&lt;/li&gt;
&lt;li data-end=&quot;142&quot; data-start=&quot;120&quot;&gt;수동 조작과 직접 교시 방식 이해&lt;/li&gt;
&lt;li data-end=&quot;177&quot; data-start=&quot;143&quot;&gt;기본 좌표계 기반 Pick &amp;amp; Place 프로그램 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;165&quot; data-start=&quot;145&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 교육 개요 (10:00~)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;214&quot; data-start=&quot;166&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;182&quot; data-start=&quot;166&quot;&gt;친절한 사내 강사님이 진행을 해주셨습니다. (수강생의 폭 넓은(?) 질문에 성실히 답변해주시는 모습이 매우 인상적이었습니다. )&lt;/li&gt;
&lt;li data-end=&quot;214&quot; data-start=&quot;183&quot;&gt;초급자에게 적절한 수업 구성이었습니다.&lt;/li&gt;
&lt;li data-end=&quot;214&quot; data-start=&quot;183&quot;&gt;PDF 강의 잘료에 모든 수업 내용이 담겨있었습니다.&amp;nbsp;&lt;/li&gt;
&lt;li data-end=&quot;295&quot; data-start=&quot;238&quot;&gt;&lt;b&gt;산업용 로봇&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;295&quot; data-start=&quot;253&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;282&quot; data-start=&quot;253&quot;&gt;사람과 함께 작업하려면 센서&amp;middot;안전 규제 다수 필요&lt;/li&gt;
&lt;li data-end=&quot;295&quot; data-start=&quot;285&quot;&gt;법적 제약이 큼&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;411&quot; data-start=&quot;296&quot;&gt;&lt;b&gt;협동로봇&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;411&quot; data-start=&quot;309&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;325&quot; data-start=&quot;309&quot;&gt;사람과 함께 작업하기 쉬움&lt;/li&gt;
&lt;li data-end=&quot;347&quot; data-start=&quot;328&quot;&gt;자동화 공정에서 활용 빈도 높음&lt;/li&gt;
&lt;li data-end=&quot;373&quot; data-start=&quot;350&quot;&gt;동일 하중 기준 산업용 로봇보다 가벼움&lt;/li&gt;
&lt;li data-end=&quot;411&quot; data-start=&quot;376&quot;&gt;안전 인증 충족 (PL e, Cat 4 / 해외 기준 포함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;1329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ7UTU/dJMcaioIgqv/IVBqwKvTLgM2MySHti2k8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ7UTU/dJMcaioIgqv/IVBqwKvTLgM2MySHti2k8k/img.png&quot; data-alt=&quot;협동로봇(M0606), 터치패드, 컨트롤러&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ7UTU/dJMcaioIgqv/IVBqwKvTLgM2MySHti2k8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ7UTU%2FdJMcaioIgqv%2FIVBqwKvTLgM2MySHti2k8k%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;1902&quot; height=&quot;1329&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;1329&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;협동로봇(M0606), 터치패드, 컨트롤러&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;519&quot; data-start=&quot;491&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 장비 연결 및 초기 세팅 (10:20~)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;582&quot; data-start=&quot;520&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;564&quot; data-start=&quot;546&quot;&gt;DART-Platform 설치&lt;/li&gt;
&lt;li data-end=&quot;564&quot; data-start=&quot;546&quot;&gt;노트북(Windows)과 로봇 직접 연결(LAN)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;617&quot; data-start=&quot;589&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 그리퍼 및 컨트롤러 이해 (10:35~)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;803&quot; data-start=&quot;618&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;655&quot; data-start=&quot;618&quot;&gt;기본 그리퍼 테스트: 신호 &lt;b&gt;0(놓기) / 1(잡기)&lt;/b&gt; 단순 제어&lt;/li&gt;
&lt;li data-end=&quot;713&quot; data-start=&quot;656&quot;&gt;타사 그리퍼&amp;middot;복잡 동작 시:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;713&quot; data-start=&quot;676&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;713&quot; data-start=&quot;676&quot;&gt;로봇 팔 직결이 아닌 &lt;b&gt;컨트롤러 직접 배선&lt;/b&gt;으로 커스터마이징&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;755&quot; data-start=&quot;714&quot;&gt;컨트롤러 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;755&quot; data-start=&quot;726&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;737&quot; data-start=&quot;726&quot;&gt;전원/통신 케이블&lt;/li&gt;
&lt;li data-end=&quot;755&quot; data-start=&quot;740&quot;&gt;USB(로그, 업데이트)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;803&quot; data-start=&quot;756&quot;&gt;그리퍼 규격은 표준화
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;803&quot; data-start=&quot;772&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;803&quot; data-start=&quot;772&quot;&gt;&lt;b&gt;그리퍼 통신 스펙 &amp;harr; 협동로봇 스펙 비교 필수&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;835&quot; data-start=&quot;810&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 작업 공간과 특이점 (10:55~)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;946&quot; data-start=&quot;836&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;871&quot; data-start=&quot;836&quot;&gt;&lt;b&gt;가용 작업 스페이스&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;871&quot; data-start=&quot;855&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;871&quot; data-start=&quot;855&quot;&gt;말단 축을 굽힌 범위 기준&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;946&quot; data-start=&quot;872&quot;&gt;&lt;b&gt;특이점 영역&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;946&quot; data-start=&quot;887&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;894&quot; data-start=&quot;887&quot;&gt;도넛 형태&lt;/li&gt;
&lt;li data-end=&quot;917&quot; data-start=&quot;897&quot;&gt;그리퍼가 몸체에 붙으면 작업 불가&lt;/li&gt;
&lt;li data-end=&quot;946&quot; data-start=&quot;920&quot;&gt;중심점에 위치 시 회전 방향 판단 혼선 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;975&quot; data-start=&quot;953&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. DART-Platform 조작&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1107&quot; data-start=&quot;976&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;997&quot; data-start=&quot;976&quot;&gt;언어, 날짜 설정(로그 분석 목적)&lt;/li&gt;
&lt;li data-end=&quot;1035&quot; data-start=&quot;998&quot;&gt;로봇 전원 ON
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1035&quot; data-start=&quot;1011&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1035&quot; data-start=&quot;1011&quot;&gt;&amp;ldquo;딱&amp;rdquo; 소리 6회 &amp;rarr; 6축 브레이크 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1052&quot; data-start=&quot;1036&quot;&gt;터치패드로 수동 조작 실습&lt;/li&gt;
&lt;li data-end=&quot;1107&quot; data-start=&quot;1053&quot;&gt;24시간 가동 기준 수명: &lt;b&gt;약 2~3년&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1107&quot; data-start=&quot;1083&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1107&quot; data-start=&quot;1083&quot;&gt;유지보수&amp;middot;부품 관리는 본사에서 일괄 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최종적으로 DART 플랫폼에서 Task를 만들어 동작을 직접 만들어보고 로봇을 움직여보는 실습을 해보았습니다. 화면은 처음 보는 사람도 쉽게 구성되어 있습니다. (같은 작업을 로봇마다 하나씩 작업해야 한다는 사실이 불편해보였지만, AI를 활용해 쉽게 조작하는 방법을 연구하고 있다고 합니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1732&quot; data-origin-height=&quot;1125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b59JVt/dJMcahJ6YKz/mbvLdkwmR4ekt4RjQk8QY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b59JVt/dJMcahJ6YKz/mbvLdkwmR4ekt4RjQk8QY1/img.png&quot; data-alt=&quot;최종 Task 화면(MoveJ, MoveL이 액션 컴포넌트 입니다.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b59JVt/dJMcahJ6YKz/mbvLdkwmR4ekt4RjQk8QY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb59JVt%2FdJMcahJ6YKz%2FmbvLdkwmR4ekt4RjQk8QY1%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;638&quot; height=&quot;414&quot; data-origin-width=&quot;1732&quot; data-origin-height=&quot;1125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 Task 화면(MoveJ, MoveL이 액션 컴포넌트 입니다.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점심은 쿠폰을 받아 사내식당을 이용했습니다. 메뉴는 4가지 정도였고, 식사 외에 샐러드를 선택할 수도 있었습니다. 식사 시간에는 두산 직원들이 자부심을 느낄 만한 쾌적한 식당과 함께, 전망이 좋은 사내 시설도 둘러볼 수 있었습니다.&lt;/p&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;1171&quot; data-origin-height=&quot;1554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urdKt/dJMcacaXU3N/S8I6Ns8FQKPMVEoyk1Kn20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urdKt/dJMcacaXU3N/S8I6Ns8FQKPMVEoyk1Kn20/img.png&quot; data-alt=&quot;24층 - 강당, 휴게 공간, 점심&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urdKt/dJMcacaXU3N/S8I6Ns8FQKPMVEoyk1Kn20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurdKt%2FdJMcacaXU3N%2FS8I6Ns8FQKPMVEoyk1Kn20%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;689&quot; height=&quot;914&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;1554&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;24층 - 강당, 휴게 공간, 점심&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1130&quot; data-start=&quot;1114&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. 좌표계와 제어 개념&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1272&quot; data-start=&quot;1131&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1153&quot; data-start=&quot;1131&quot;&gt;&lt;b&gt;조인트 좌표계&lt;/b&gt;: 각 축의 자세&lt;/li&gt;
&lt;li data-end=&quot;1201&quot; data-start=&quot;1154&quot;&gt;&lt;b&gt;태스크 좌표계&lt;/b&gt;: TCP 기준
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1201&quot; data-start=&quot;1178&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1201&quot; data-start=&quot;1178&quot;&gt;그리퍼 **끝 위치(TCP)**가 핵심&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1234&quot; data-start=&quot;1202&quot;&gt;X, Y, Z, A, B, C 개념은 진입 난이도 있음&lt;/li&gt;
&lt;li data-end=&quot;1272&quot; data-start=&quot;1235&quot;&gt;X, Y, Z, RX, RY, RZ 계산 기반 제어는 쉽지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1293&quot; data-start=&quot;1279&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7. I/O 및 통신&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1453&quot; data-start=&quot;1294&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1324&quot; data-start=&quot;1294&quot;&gt;전류 요구 증가 시 &lt;b&gt;컨트롤러 전원 분리 가능&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1335&quot; data-start=&quot;1325&quot;&gt;포트 확장 가능&lt;/li&gt;
&lt;li data-end=&quot;1382&quot; data-start=&quot;1336&quot;&gt;&lt;b&gt;디지털 I/O&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1382&quot; data-start=&quot;1352&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1370&quot; data-start=&quot;1352&quot;&gt;컨트롤러 16개, TCP 6개&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bygwHr/dJMcacWiwlF/5feSnnNMExMQUNueu0xSD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bygwHr/dJMcacWiwlF/5feSnnNMExMQUNueu0xSD1/img.png&quot; data-alt=&quot;I/O On/Off를 직관적으로 확인 및 동작해 볼 수 있는 화면입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bygwHr/dJMcacWiwlF/5feSnnNMExMQUNueu0xSD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbygwHr%2FdJMcacWiwlF%2F5feSnnNMExMQUNueu0xSD1%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;757&quot; height=&quot;426&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;I/O On/Off를 직관적으로 확인 및 동작해 볼 수 있는 화면입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1453&quot; data-start=&quot;1294&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1417&quot; data-start=&quot;1383&quot;&gt;&lt;b&gt;아날로그 I/O&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1417&quot; data-start=&quot;1400&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1417&quot; data-start=&quot;1400&quot;&gt;컨베이어 등 외부 장비 연동&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1453&quot; data-start=&quot;1418&quot;&gt;통신 프로토콜
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1453&quot; data-start=&quot;1430&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1453&quot; data-start=&quot;1430&quot;&gt;Ethernet, Fieldbus 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1475&quot; data-start=&quot;1460&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8. 기본 설정 포인트&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1564&quot; data-start=&quot;1476&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1535&quot; data-start=&quot;1476&quot;&gt;&lt;b&gt;그리퍼 무게 설정 필수&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1535&quot; data-start=&quot;1497&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1515&quot; data-start=&quot;1497&quot;&gt;미설정 시 중력 영향으로 처짐&lt;/li&gt;
&lt;li data-end=&quot;1535&quot; data-start=&quot;1518&quot;&gt;무게 측정용 최적 자세 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1564&quot; data-start=&quot;1536&quot;&gt;인터페이스 메시지 전송 속도: &lt;b&gt;100ms&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1587&quot; data-start=&quot;1571&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;9. 그리퍼 동작 방식&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1665&quot; data-start=&quot;1588&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1623&quot; data-start=&quot;1588&quot;&gt;&lt;b&gt;단동식&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1623&quot; data-start=&quot;1600&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1607&quot; data-start=&quot;1600&quot;&gt;신호 1개&lt;/li&gt;
&lt;li data-end=&quot;1623&quot; data-start=&quot;1610&quot;&gt;정전 시 물건을 놓음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1643&quot; data-start=&quot;1624&quot;&gt;&lt;b&gt;복동식&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1643&quot; data-start=&quot;1636&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1643&quot; data-start=&quot;1636&quot;&gt;신호 2개&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1665&quot; data-start=&quot;1644&quot;&gt;절대 이동 / 상대 이동 개념 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1688&quot; data-start=&quot;1672&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10. 도입 시 고려사항&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1782&quot; data-start=&quot;1689&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1710&quot; data-start=&quot;1689&quot;&gt;로봇 사용 &lt;b&gt;목적을 먼저 정의&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1756&quot; data-start=&quot;1711&quot;&gt;로봇 엔지니어 + 그리퍼 엔지니어 간
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1756&quot; data-start=&quot;1736&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1756&quot; data-start=&quot;1736&quot;&gt;&lt;b&gt;인터페이스 사전 검증 필수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1782&quot; data-start=&quot;1757&quot;&gt;이상 발생 시 로그 전달로 정밀 분석 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1809&quot; data-start=&quot;1789&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;11. 교육 참석자와 적합 대상&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1926&quot; data-start=&quot;1810&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1834&quot; data-start=&quot;1810&quot;&gt;참석자: 로봇 사업 준비, 로봇 관심있는 처음 접하는 엔지니어, 자동화 엔지니어, 교육 사업가&lt;/li&gt;
&lt;li data-end=&quot;1890&quot; data-start=&quot;1835&quot;&gt;적합 대상
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1890&quot; data-start=&quot;1845&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1869&quot; data-start=&quot;1845&quot;&gt;협동로봇 &lt;b&gt;개념 이해가 필요한 현업&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1890&quot; data-start=&quot;1872&quot;&gt;자동화 도입 초기 단계 담당자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1926&quot; data-start=&quot;1891&quot;&gt;비적합
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1926&quot; data-start=&quot;1899&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1926&quot; data-start=&quot;1899&quot;&gt;로봇 제어&amp;middot;인터페이스를 깊게 다루려는 엔지니어(초급 교육에서는 단순한 조작 장법에 대해 실습함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1942&quot; data-start=&quot;1933&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;12. 정리&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2008&quot; data-start=&quot;1943&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1964&quot; data-start=&quot;1943&quot;&gt;이동 + 그리퍼 작동까지 직접 실습&lt;/li&gt;
&lt;li data-end=&quot;1978&quot; data-start=&quot;1965&quot;&gt;개념 위주 초급 과정&lt;/li&gt;
&lt;li data-end=&quot;2008&quot; data-start=&quot;1979&quot;&gt;실무 적용을 위해서는 &lt;b&gt;추가 기술 교육 필요&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/461190002&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/XEihM/dJMb8U8Pp5U/vkjltujPtwghuSs9V7z750/img.jpg?width=720&amp;amp;height=1280&amp;amp;face=0_0_720_1280,https://scrap.kakaocdn.net/dn/b15CzE/dJMb9ee9IYo/q8X1fCksN8p7wftGuUlz01/img.jpg?width=720&amp;amp;height=1280&amp;amp;face=0_0_720_1280&quot; data-video-width=&quot;720&quot; data-video-height=&quot;1280&quot; data-video-origin-width=&quot;720&quot; data-video-origin-height=&quot;1280&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/461190002?service=daum_tistory&quot; width=&quot;720&quot; height=&quot;1280&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;최종 실습: Pick - 이동 - Place&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;교육 접수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://robotlab.doosanrobotics.com/ko/Training/EducationList&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://robotlab.doosanrobotics.com/ko/Training/EducationList&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770641544240&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;교육 신청 : Doosan Robotics Training &amp;amp; Service&quot; data-og-description=&quot;교육신청 필터 &amp;lt;!-- Training course Select Type of training Select Date Select ~ Select Location Select Language Select Apply --&amp;gt; + 더보기&quot; data-og-host=&quot;robotlab.doosanrobotics.com&quot; data-og-source-url=&quot;https://robotlab.doosanrobotics.com/ko/Training/EducationList&quot; data-og-url=&quot;https://robotlab.doosanrobotics.com/ko/Training/EducationList&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lPk10/dJMb8SpDIHO/4LNTlOBhE1xTOYzfg9W8V0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://robotlab.doosanrobotics.com/ko/Training/EducationList&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://robotlab.doosanrobotics.com/ko/Training/EducationList&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lPk10/dJMb8SpDIHO/4LNTlOBhE1xTOYzfg9W8V0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;교육 신청 : Doosan Robotics Training &amp;amp; Service&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;교육신청 필터 &amp;lt;!-- Training course Select Type of training Select Date Select ~ Select Location Select Language Select Apply --&amp;gt; + 더보기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;robotlab.doosanrobotics.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>DoosanRobotics</category>
      <category>두산로보틱스</category>
      <category>두산협동로봇</category>
      <category>로봇교육</category>
      <category>협동로봇</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/45</guid>
      <comments>https://keun90.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 9 Feb 2026 21:57:14 +0900</pubDate>
    </item>
    <item>
      <title>제조 공정 분석 1 - LCD, MES</title>
      <link>https://keun90.tistory.com/44</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNnYhl/dJMcadOlvU9/xnYNH1g2M8KbVzBGl9KjF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNnYhl/dJMcadOlvU9/xnYNH1g2M8KbVzBGl9KjF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNnYhl/dJMcadOlvU9/xnYNH1g2M8KbVzBGl9KjF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNnYhl%2FdJMcadOlvU9%2FxnYNH1g2M8KbVzBGl9KjF1%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;720&quot; height=&quot;329&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;527&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;TFT-LCD 패널 제조는 Array 공정, Cell 공정, Module 공정의 세 단계로 이루어지며, 각 단계마다 제조 기술과 장비, 그리고 MES 포인트가 달라지기 때문에 공정에 대한 설명과 MES 역할을 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공정별 리드 타임과 MES 중점 관리 포인트는 아래와 같습니다. MES는 EAP와 직접 통신하고 미들웨어로는 TIB/RV를 사용하여 로드벨런싱을 해본 경험이 있습니다. MES 엔지니어가 아닌 설비 엔지니어가 SECS/GEM을 직접 관리해 장비 인터페이스를 구성합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9069%;&quot;&gt;&lt;b&gt;공정 단계&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.18601%;&quot;&gt;&lt;b&gt;예상 &lt;br /&gt;소요 시간&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.7209%;&quot;&gt;&lt;b&gt;주요 작업 내용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.9534%;&quot;&gt;&lt;b&gt;MES 중점 관리&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9069%;&quot;&gt;&lt;b&gt;Array 공정&lt;/b&gt; &lt;br /&gt;(TFT Array)&lt;/td&gt;
&lt;td style=&quot;width: 9.18601%;&quot;&gt;약 5~7일&lt;/td&gt;
&lt;td style=&quot;width: 28.7209%;&quot;&gt;박막 증착, 포토 마스크 노광, 식각, 박리 등 일련의 미세공정 5~7회 반복&lt;/td&gt;
&lt;td style=&quot;width: 48.9534%;&quot;&gt;로트 이력 추적, 공정 레시피 관리, 설비 인터페이스 EAP(예: SECS/GEM) 통한 데이터 수집 및 장비 제어, WIP 재공관리 및 스케줄/디스패칭 최적화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9069%;&quot;&gt;&lt;b&gt;Cell 공정&lt;/b&gt; &lt;br /&gt;(패널 접합)&lt;/td&gt;
&lt;td style=&quot;width: 9.18601%;&quot;&gt;약 3~5일&lt;/td&gt;
&lt;td style=&quot;width: 28.7209%;&quot;&gt;TFT 기판과 컬러필터 기판 정합, 배향막 도포 및 러빙(rubbing), 액정 주입, 봉지(sealing), 폴라라이저 부착 등&lt;/td&gt;
&lt;td style=&quot;width: 48.9534%;&quot;&gt;로트(유리 기판 세트) 추적, 외주 자재(CF판 등) 투입 관리, 주요 공정 실적/품질 데이터 수집 (예: 정합 정밀도), 공정 병목 관리 및 실시간 WIP 모니터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9069%;&quot;&gt;&lt;b&gt;Module 공정&lt;/b&gt; (모듈 조립)&lt;/td&gt;
&lt;td style=&quot;width: 9.18601%;&quot;&gt;약 1일&lt;/td&gt;
&lt;td style=&quot;width: 28.7209%;&quot;&gt;Cell 공정 완료 패널에 구동 IC 장착(COG/COF 본딩), FPC 연결, 백라이트 조립, 최종 검사 및 Aging 테스트, 제품 포장&lt;/td&gt;
&lt;td style=&quot;width: 48.9534%;&quot;&gt;제품 개별 패널 단위 식별 및 추적, 부자재 투입(구동칩, 백라이트 등) 관리, 최종 검사 결과 수집/분석, 불량 판정 시 재작업/폐기 처리, 출하 관리 및 이력 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;b&gt;공정별 간략한 설명&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;공정명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;핵심 목적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;주요 작업&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;전공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Array&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;픽셀 구동 회로 형성&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;증착, 노광, 현상, 에칭, 박리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;전공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Color Filter&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;RGB 색 표현&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;컬러 패턴 형성, 보호막&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;중공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Cell&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;액정 셀 완성&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;정합, 실런트, 액정 주입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;후공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Module&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;제품화&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;BLU, IC 접합, 검사&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;background-color: #f6e199;&quot;&gt;Array&lt;/span&gt; 공정(TFT 어레이) 을 정리한 표 입니다.&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;동일 노광 장비 반복 사용 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 스케줄링 난이도 높음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;수율&lt;b&gt;&amp;middot;&lt;/b&gt;결함 관리가 전체 원가에 직접 영향&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 142px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;공정 성격&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;반도체 유사 미세 공정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;반복 구조&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;재진입 공정 (Re-entrant Flow)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;포토 공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;5~7 Mask 반복&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;공정 순서&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;세정 &amp;rarr; 코팅 &amp;rarr; 노광 &amp;rarr; 현상 &amp;rarr; 에칭 &amp;rarr; 박리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;산출물&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;TFT 소자 어레이 기판&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;background-color: #f6e199;&quot;&gt;Color Filter&lt;/span&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;Array와 정합 정밀도가 핵심&lt;/li&gt;
&lt;li&gt;외주 시 MES 연계 범위 축소 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.2326%;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.2326%;&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;RGB 색 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.2326%;&quot;&gt;&lt;b&gt;기술&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;포토리소그래피 기반 색소 패터닝&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.2326%;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;TFT 기판과 픽셀 배열 1:1 대응&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.2326%;&quot;&gt;&lt;b&gt;공급 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%;&quot;&gt;내재화 or 외주&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;background-color: #f6e199;&quot;&gt;Cell&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;/li&gt;
&lt;li&gt;Lot 단위 &amp;rarr; Panel 단위로 추적 단위 변화&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px; width: 20.2326%;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px; width: 79.6512%;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.2326%;&quot;&gt;&lt;b&gt;핵심 작업&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.6512%;&quot;&gt;기판 정합 + 액정 주입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.2326%;&quot;&gt;&lt;b&gt;액정 주입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.6512%;&quot;&gt;ODF(One-Drop Fill)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.2326%;&quot;&gt;&lt;b&gt;주요 공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.6512%;&quot;&gt;얼라인 &amp;rarr; 실런트 &amp;rarr; 합착 &amp;rarr; UV 경화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.2326%;&quot;&gt;&lt;b&gt;이후 공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.6512%;&quot;&gt;대형 유리 &amp;rarr; 개별 패널 절단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;background-color: #f6e199;&quot;&gt;Module&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;/li&gt;
&lt;li&gt;검사 데이터가 출하 품질 기준&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.186%;&quot;&gt;&lt;b&gt; 내용 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;&lt;b&gt;조립 요소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.186%;&quot;&gt;BLU, Driver IC, PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;&lt;b&gt;IC 접합&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.186%;&quot;&gt;ACF (Chip On Glass)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;&lt;b&gt;추가 공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.186%;&quot;&gt;편광판, 터치, 코팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;&lt;b&gt;검사&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.186%;&quot;&gt;밝기, 색 균일도, 결점&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;MES&amp;nbsp; 관점으로 공정 특성을 정리한 표 입니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;&lt;b&gt; Array &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;&lt;b&gt; Cell &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.8837%;&quot;&gt;&lt;b&gt; Module &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;공정 유형&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;재진입&lt;/td&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;조립&lt;/td&gt;
&lt;td style=&quot;width: 24.8837%;&quot;&gt;조립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;흐름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;복잡&lt;/td&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;width: 24.8837%;&quot;&gt;단순&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;추적 단위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;Glass / Lot&lt;/td&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;Glass &amp;rarr; Panel&lt;/td&gt;
&lt;td style=&quot;width: 24.8837%;&quot;&gt;Panel / Serial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;MES 포인트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;스케줄링, WIP&lt;/td&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;정합 이력&lt;/td&gt;
&lt;td style=&quot;width: 24.8837%;&quot;&gt;검사&amp;middot;출하&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;b&gt;공정별 상세 설명&lt;/b&gt;&lt;/h4&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: #f6e199;&quot;&gt;&lt;b&gt;Array 공정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유리 기판 위에 박막 트랜지스터(TFT) 어레이를 만드는 단계입니다. 여러 차례의 박막 증착, 포토리소그래피(노광 및 현상), 에칭 공정을 반복하여 픽셀 구동을 위한 미세한 회로 패턴을 형성합니다. 보통 5~7개의 포토마스크를 사용하여 여러층의 배선과 트랜지스터를 제작하며, 각각의 공정마다 세정 &amp;rarr;코팅 &amp;rarr;노광 &amp;rarr;현상 &amp;rarr;에칭 &amp;rarr;박리 순으로 진행됩니다. 최종 산출물은 화소 구동용 TFT 소자가 박혀 있는 TFT 어레이 기판입니다.&lt;/p&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: #f6e199;&quot;&gt;&lt;b&gt;컬러 필터 공정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬러 필터 기판은 RGB컬러 화소를 생성하기 위한 색소층을 가진 유리 기판입니다. 컬러 필터 제조도 포토리소그래피를 활용하여 적&lt;b&gt;&amp;middot;&lt;/b&gt;녹&lt;b&gt;&amp;middot;&lt;/b&gt;청 색의 미세 패턴을 여러 층으로 형성합니다. 완성된 컬러 필터 기판은 Array 공정의 TFT 기판과 동일한 크기와 픽셀 배열을 가지며, 두 기판을 합착하기 위해 준비됩니다.(일부 디스플레이 업체는 컬러 필터 공ㄹ정을 자체 생산하지 않고 외부에서 공급받기도 합니다.)&lt;/p&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: #f6e199;&quot;&gt;&lt;b&gt;Cell 공정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cell 단계에서는 앞 단계에서 준비된 TFT 기판과 컬러 필터 기판을 합치는 작업이 이루어집니다. 두 기판은 정밀하게 얼라인(정렬)되고, 가장자리에는 액정이 새지 않도록 접착제(실런트)를 인쇄합니다. 접착제를 도포한 후 두 유리판을 밀착하여 봉합하고, 판들 사이의 빈 공간(셀 갭)에 액정(Liquid Crystal) 물질을 주입합니다. 주입은 진공 하에서 액정을 채우는 ODF(One Drop Fill) 공법 등이 사용되며, 액정 주입 후 자외선 경화 등을 통해 접착제를 완전히 굳힙니다. 이렇게 액정 셀(Cell)이 형성된 대형 유리 기판(Mother Glass)은 이후 규격에 맞게 잘라져 개별 패널 단위로 분리됩니다.&lt;/p&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: #f6e199;&quot;&gt;&lt;b&gt;Module 공정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개별 LCD 패널에 백라이트 등 부품을 조립하여 최종 제품 모듈을 완성합니다. 먼저 패널 뒷면에 백라이트 유닛(LED, 광원, 도광판, 확산판 등으로 구성)을 부착하여 LCD에 광원을 제공합니다. 이어서 구동 드라이버 IC칩을 PCB 기판 똔느 유리 기판 가장자리와 접합합니다. 필요에 따라 터치 패널이나 편광판 부착, 표면 코팅(반사, 방지, 내구 코팅)등의 처리가 이루어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MES 관점에서 LOT관리가 매우 중요합니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 20.9302%; height: 22px;&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%; height: 22px;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 20.9302%; height: 22px;&quot;&gt;&lt;b&gt; LOT &amp;nbsp;정의&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%; height: 22px;&quot;&gt;MES가 관리하는 생산 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 20.9302%; height: 22px;&quot;&gt;&lt;b&gt;LCD 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%; height: 22px;&quot;&gt;여러 장의 대형 유리 기판 묶음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 20.9302%; height: 22px;&quot;&gt;&lt;b&gt;이동 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%; height: 22px;&quot;&gt;공정 간 하나의 객체처럼 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 20.9302%; height: 22px;&quot;&gt;&lt;b&gt;MES 초점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%; height: 22px;&quot;&gt;장비가 아니라 LOT 흐름&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;LOT이 공정/설비에 투입되면 Track-In/Out 이라고 합니다. LOT이 어떤 공정을 진행해야 할지 미리 설계되어 있는 Process Flow를 따라 움직입니다. Process Flow는 설계도를 데이터로 변경하여 관리하게 됩니다.&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;공정 순서는 Workfow/Prcessflow로 통제&lt;/li&gt;
&lt;li&gt;모든 이벤트는 Lot 이력으로 남음&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.814%;&quot;&gt;&lt;b&gt; 단계 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.0697%;&quot;&gt;&lt;b&gt; MES 역할 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.814%;&quot;&gt;&lt;b&gt;Track-In&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.0697%;&quot;&gt;공정&amp;middot;장비 적합성 검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.814%;&quot;&gt;&lt;b&gt;가공 중&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.0697%;&quot;&gt;레시피, 장비 상태, 시간 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.814%;&quot;&gt;&lt;b&gt;Track-Out&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.0697%;&quot;&gt;공정 결과 데이터 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; width: 20.814%;&quot;&gt;&lt;b&gt;다음 공정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; width: 79.0697%;&quot;&gt;Workflow 기준 자동 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;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;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9302%;&quot;&gt;&lt;b&gt;상황&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%;&quot;&gt;&lt;b&gt;MES 판단&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9302%;&quot;&gt;&lt;b&gt;정상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%;&quot;&gt;다음 공정 진행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9302%;&quot;&gt;&lt;b&gt;경미 불량&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%;&quot;&gt;Rework 공정 유도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9302%;&quot;&gt;&lt;b&gt;중대 불량&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.9535%;&quot;&gt;Scrap 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;대량 자동 생산에서의 핵심은 Queue, Dispatch, Scheduling 입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hot Lot 처리, 높은 우선순위 부여&amp;nbsp;&lt;/li&gt;
&lt;li&gt;MES 디스패치 = LOT을 카세트에 담에 목적지를 설정해 반송을 명령하는 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.2791%;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6046%;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.2791%;&quot;&gt;&lt;b&gt;Queue&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6046%;&quot;&gt;설비 앞 대기 Lot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.2791%;&quot;&gt;&lt;b&gt;Scheduling&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6046%;&quot;&gt;중장기 공정 계획&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.2791%;&quot;&gt;&lt;b&gt;Dispatching&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6046%;&quot;&gt;실시간 설비 배정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;Dispatch는 MCS와 인터페이스를 이루어 반송(수동/자동)을 역할을 수행합니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.3953%;&quot;&gt;&lt;b&gt; 역할 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%;&quot;&gt;&lt;b&gt; 시스템 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.3953%;&quot;&gt;&lt;b&gt;공정 판단&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%;&quot;&gt;MES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.3953%;&quot;&gt;&lt;b&gt;이동 실행&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%;&quot;&gt;MCS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.3953%;&quot;&gt;&lt;b&gt;이송 수단&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%;&quot;&gt;AGV / OHT / Conveyor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;MES는 장비를 관리하는 시스템이 아니라, LOT이 공장을 통과해 완성품이 되기까지의 흐름과 판단을 책임지는 시스템입니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;b&gt;추가 내용&lt;/b&gt;&lt;/h4&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;MES는 각 공정 장비들과 데이터를 주고받아야 합니다. 이를 위해 반도체/디스플레이 업계에서는 SECS/GEM과 같은 표준 프로토콜이 널리 사용되며, 장비의 동작 상태, 공정 진행, 측정 값 등을 MES에서 실시간 모니터링하고 제어할 수 있습니다. MES는 설비 제어용 인터페이스 모듈(EAP)을 통해 공정 Recipe 전송, LOT 시작/종료 지시, 장비 Alarm 수신, 계측 데이터 수집 등의 작업을 수행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노광기: MES 지시로 특정 LOT에 맞는 Receipe/Mask를 로딩하고 노광을 시작하며, 완료 후 MES에 종료 신호와 처리 결과 데이터를 보내도록 통신합니다. (*설비의 모델별 인터페이스 가능한 Value가 한정되어 있습니다. 반드시 설비 담당자와 스펙을 확인하는 검증 작업을 수행해야 합니다.)&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;MES는 공정 데이터베이스를 중심으로 방대한 생산 데이터를 관리합니다. 각 LOT의 공정 이력(어느 시간에 어떤 설비에서 처리되었는지), 투입 자재 로트, 검사 결과, 설비 로그 등이 모두 MES에 누적됩니다. MES 엔지니어는 이러한 데이터를 활용해 통계적 공정관리(SPC) 차트를 작성하거나, 이상 발생 시 근본 원인을 추적하여 공정 개선에 반영합니다. 예컨대 특정 공정 단계에서 반복적으로 불랴이 발생하면 MES 데이터 분석을 통해 문제가 되는 설비나 공정조건을 찾아낼 수 있습니다.&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 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;</description>
      <category>IT 제조</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/44</guid>
      <comments>https://keun90.tistory.com/44#entry44comment</comments>
      <pubDate>Tue, 3 Feb 2026 20:11:56 +0900</pubDate>
    </item>
    <item>
      <title>26년 02월 02일 - 증시 폭락, 케빈 워시, 금리 인상 예상</title>
      <link>https://keun90.tistory.com/43</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFROg/dJMcaiIUAGS/dEpsip5AViV8qv55EvvATk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFROg/dJMcaiIUAGS/dEpsip5AViV8qv55EvvATk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFROg/dJMcaiIUAGS/dEpsip5AViV8qv55EvvATk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFROg%2FdJMcaiIUAGS%2FdEpsip5AViV8qv55EvvATk%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;608&quot; height=&quot;374&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;683&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;26년 2월 2일 오후 3시,&lt;/p&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;table style=&quot;border-collapse: collapse; width: 86.5044%; height: 240px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;국가&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;지사&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;지수값&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;등락률&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;한국&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;코스피&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;4,949.67&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;-5.26%&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;일본&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;Nikkei 225&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 52,655&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;약 -1.25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;중국 본토&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;SSE Composite&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 4,015&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;약 -2.48%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;중국 선전&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;SZSE Component&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;(추정)*&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;(하락)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;홍콩&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;Hang Seng Index&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 26,775&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;약 -2.23%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;대만&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;TAIEX&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 -1.3~ -1.4%&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;싱가포르&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;Straits Times Index&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 4,892&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;약 -0.26%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;말레이시아&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;FTSE Bursa Malaysia KLCI&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 1,740&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;+0.58%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;태국&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;SET Index&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;약 -0.32%&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;인도&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;Nifty 50&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;+1.06%&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 13.1395%; height: 20px;&quot;&gt;인도&lt;/td&gt;
&lt;td style=&quot;width: 30.8465%; height: 20px;&quot;&gt;SENSEX&lt;/td&gt;
&lt;td style=&quot;width: 21.5545%; height: 20px;&quot;&gt;+1.17%&lt;/td&gt;
&lt;td style=&quot;width: 27.5684%; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;2026.01.29 기준 SLV(&lt;span&gt;&lt;span&gt;iShares Silver Trust, 은 변동 ETF)&lt;/span&gt;&lt;/span&gt;의 거래대금은 Apple과 Amazone을 합한 것보다 컸습니다.&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;a href=&quot;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770040228258&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Gold sinks to $4,900, silver crashes 25% as precious metals trade unwinds&quot; data-og-description=&quot;Gold and silver futures crashed on Friday in a sharp reversal of a massive rally in precious metals.&quot; data-og-host=&quot;finance.yahoo.com&quot; data-og-source-url=&quot;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&quot; data-og-url=&quot;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bn1uI9/dJMb8Zvwymh/Em8J632vimHJUN7kCSZD6K/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/bfUknx/dJMb8WMkIrP/R71MaAkzt9N89HabO6xvk1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800&quot;&gt;&lt;a href=&quot;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://finance.yahoo.com/news/gold-sinks-to-4900-silver-crashes-25-as-precious-metals-trade-unwinds-211140665.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bn1uI9/dJMb8Zvwymh/Em8J632vimHJUN7kCSZD6K/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/bfUknx/dJMb8WMkIrP/R71MaAkzt9N89HabO6xvk1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800');&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;Gold sinks to $4,900, silver crashes 25% as precious metals trade unwinds&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Gold and silver futures crashed on Friday in a sharp reversal of a massive rally in precious metals.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;finance.yahoo.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2jPys/dJMcagYEOPm/3Ji6tlFW9nrzosBL0mRtdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2jPys/dJMcagYEOPm/3Ji6tlFW9nrzosBL0mRtdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2jPys/dJMcagYEOPm/3Ji6tlFW9nrzosBL0mRtdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2jPys%2FdJMcagYEOPm%2F3Ji6tlFW9nrzosBL0mRtdk%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;370&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;524&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;
&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;금 하락 쉽게 설명&lt;/b&gt;&amp;nbsp;&lt;/h4&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 집 값 10억 &amp;rarr; LTV 7억 + 현금 3억&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 집 값의 하락 + 정부에서 LTV도 낮추는 상황이 발생했습니다.&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;기존 집 값 8억 하락&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;LTV 최대 4억 감소&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;기존 LTV 7억 &amp;rarr; 4억으로 3억을 당장 채워 넣으라는 통지가 받게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;이게 바로 &lt;span style=&quot;color: #f6e199;&quot;&gt;&lt;span style=&quot;color: #333333; background-color: #f6e199;&quot;&gt;&lt;b&gt;마진콜&lt;/b&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;주말 이후 가장 먼저 시작한 한국 주식을 청산하면서 하락세를 보였습니다.&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;한국 주식 최근 상승&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>금리</category>
      <category>미국증시</category>
      <category>미주</category>
      <category>케빈 워시</category>
      <category>케빈워시</category>
      <category>파월</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/43</guid>
      <comments>https://keun90.tistory.com/43#entry43comment</comments>
      <pubDate>Mon, 2 Feb 2026 23:19:47 +0900</pubDate>
    </item>
    <item>
      <title>시계열 데이터 - 특징, ISA-95, 도입 사례</title>
      <link>https://keun90.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;제조 산업에서는 설비 센서나 IoT 장치로부터 끊임없이 온도&amp;middot;압력&amp;middot;진동 등의 데이터가 시간 순으로 수집됩니다. 이러한 데이터를 시계열(Time-Series) 데이터라고 하며, 시계열 DB는 기본적으로 시간(Time)을 기준으로 값이 저장되도록 설계되었습니다.&lt;/p&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;일반적인 관계형 DBMS(MSSQL, Oracle 등)와 차이점은 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 관계형 DB (MSSQL, Oracle 등) &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 시계열 DB (InfluxDB, TimescaleDB 등) &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;저장 구조&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규화 테이블, 고정 스키마&lt;/td&gt;
&lt;td&gt;타임스탬프 + 값 + 태그 구조, 유연한 확장성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;인덱싱 / 파티셔닝&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;범용 인덱스(B+Tree)&lt;/td&gt;
&lt;td&gt;시간 기준 파티셔닝, 시계열 전용 구조 (TSM 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;쓰기/읽기 패턴&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;읽기 중심, 트랜잭션/조인 빈번&lt;/td&gt;
&lt;td&gt;쓰기 중심, 연속 INSERT 최적화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;보존 정책&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;수동 삭제 필요, 스크립트로 관리&lt;/td&gt;
&lt;td&gt;Retention 정책으로 자동 삭제 및 요약&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;성능 최적화&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대량 시계열 데이터에 비효율적&lt;/td&gt;
&lt;td&gt;압축 저장 + 시계열 집계에 최적화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;시계열 DBMS(Time-Series DBMS)는 위와 같은 구조적 차이를 바탕으로 대용량 시계열 데이터의 실시간 수집&lt;b&gt;&amp;middot;&lt;/b&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;대표 제품: InfluxDB, TimescaleDB&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[시계열&amp;nbsp; DBMS 특징 및 장점]&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;시계열 DBMS의 특징 및 장점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;고속 수집/조회&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;초당 수백만 건 데이터 처리 가능, 삽입 성능 안정적 (정적 조인&amp;middot;제약 없음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;저장 효율성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;시계열 전용 압축 저장, Retention 정책으로 자동 삭제 및 저장 공간 절감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;분석 기능 특화&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;이동평균, 연속 집계, 다운샘플링 등 시계열 연산 지원, Flux/확장 SQL로 추세&amp;middot;이상 분석 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;운영 편의성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;TimescaleDB는 PostgreSQL 호환, InfluxDB는 TICK 스택 기반의 시각화&amp;middot;알림&amp;middot;처리 기능 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;산업 활용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;스마트팩토리에서 설비 모니터링, 공정 추세 분석 등으로 TSDB 도입 사례 증가 (InfluxDB, TimescaleDB 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[데이터 품질 요건]&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 126px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;품질 요소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;요구 사항 설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;정확성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;센서 보정(Calibration)을 통해 신뢰 가능한 수치 확보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;일관성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;단위(예: &amp;deg;C, bar)와 변수명이 공정 및 설비 간 동일하게 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;완전성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;누락 데이터(Missing) 없이 연속적으로 수집되며, 이상치 보정 가능해야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;시간 정렬성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;타임스탬프가 오름차순 정렬되어 있고 중복&amp;middot;역순 없이 연속성을 보장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;추적 가능성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;각 데이터가 어떤 설비, 공정, 배치에서 수집된 것인지 명확한 식별 정보 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[시스템 연계 포인트 및 타이밍]&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 196px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 20px;&quot;&gt;&lt;b&gt; 계층 &lt;/b&gt;&lt;b&gt;(ISA-95 기준) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;&lt;b&gt; 구성 요소 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 20px;&quot;&gt;&lt;b&gt; 주요 역할 및 연계 포인트 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 22px;&quot;&gt;&lt;b&gt;Level 0&amp;ndash;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 22px;&quot;&gt;센서, PLC&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 22px;&quot;&gt;실시간 센서 데이터 수집 (온도, 압력 등), 타임스탬프 포함 로우 데이터 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 22px;&quot;&gt;&lt;b&gt;Level 2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 22px;&quot;&gt;SCADA, Historian&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 22px;&quot;&gt;실시간 모니터링, 알람 처리, 히스토리 저장 (시계열 DB), 엣지 게이트웨이 연계 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 22px;&quot;&gt;&lt;b&gt;Level 3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 22px;&quot;&gt;MES&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 22px;&quot;&gt;생산 실행 정보(작업지시, 배치ID 등) 관리, SCADA/Hist. 데이터와 매핑 및 통합 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 44px;&quot;&gt;&lt;b&gt;전송 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 44px;&quot;&gt;MQTT, OPC UA, &lt;br /&gt;REST API&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 44px;&quot;&gt;엣지 장비 또는 미들웨어를 통해 상위 시스템(MES, 분석 플랫폼 등)으로 시계열 데이터 전송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 22px;&quot;&gt;&lt;b&gt;문맥 정보&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 22px;&quot;&gt;설비 ID, 배치 ID 등&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 22px;&quot;&gt;분석을 위한 데이터 식별 및 정합성 확보 (시계열 데이터에 연관 메타데이터 포함 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;width: 17.6744%; height: 44px;&quot;&gt;&lt;b&gt;분석/활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%; height: 44px;&quot;&gt;QMS, BI, AI 분석 &lt;br /&gt;플랫폼&lt;/td&gt;
&lt;td style=&quot;width: 63.6047%; height: 44px;&quot;&gt;MES + 시계열 데이터를 통합하여 품질 이상 감지, 공정 최적화, 예지 정비 등 고도화 분석 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;ISA-95&lt;/span&gt;&lt;/b&gt; 는 MES과 ERP 간의 정보 교환과 역할 분리를 표준화한 국제 모델입니다. 목적은 생산 현장(OT)과 기업 경영(IT) 간의 연계 구조를 명확히 하고, 시스템 통합을 쉽게 만드는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;제조 운영(Operations)과 경영 시스템 간의 기능&amp;middot;데이터 인터페이스를 표준화한 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;목표&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MES와 ERP 등 이기종 시스템 간 통신&amp;middot;역할 구분 명확화자동화 계층 구조 정립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;적용 분야&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MES 구축, ERP-MES 연동, 스마트팩토리 설계, 데이터 흐름 구조 설계 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;5단계 계층 모델(Level 0~4), 정보 모델(Object/Activity/Operations 등) 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;계층(Level)&lt;/span&gt;&lt;/b&gt;별 역할을 요약해보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;레벨&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;시스템 예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;L0&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;물리적 장치, 센서/액추에이터&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;온도 센서, 압력계, 모터 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;L1&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;제어 장치, 상태 수집&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;PLC, 드라이브, RTU 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;L2&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;현장 제어/운전 모니터링&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;SCADA, HMI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;L3&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;생산 실행 및 스케줄링&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;MES (작업지시, 트래킹 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;L4&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;경영 및 자원 계획&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;ERP (수주, 자재관리, 회계 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[데이터 저장 관리 및 확장성]&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;쓰기 성능&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;초당 수백만 건 데이터 삽입 가능, 실시간 인덱싱 및 압축 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;저장 효율&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;시계열 전용 압축 기술로 저장 용량 절감, 고속 읽기 성능 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;보존 정책&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;일정 기간 경과 데이터 자동 삭제 또는 집계(Downsampling) 기능 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;확장성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;클러스터 아키텍처 기반 수평 확장(노드 추가) 가능, 대규모 설비 데이터 대응&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;고가용성/복제&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;장애 대비를 위한 데이터 복제, 고가용성(HA) 클러스터 구성 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;운영 안정성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대량 시계열 데이터에도 안정적인 수집&amp;middot;보관&amp;middot;조회 보장&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[도입 사례]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 업정 사례에서 공통적으로, 시계열 DB(히스토리안) 도입을 통해 대용량 센서 데이터를 효율적으로 관리하고 있습니다. InfluxDB, Timeplus, Grafana 같은 오픈소스 기반 솔루션도 널리 활용되며, 기존 MES/SCADA 시스템과 연동되어 데이터 파이프라인을 구축합니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 192px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px; width: 9.18605%;&quot;&gt;&lt;b&gt;업종&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px; width: 19.186%;&quot;&gt;&lt;b&gt; 수집 데이터 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px; width: 21.1628%;&quot;&gt;&lt;b&gt; 분석 목적 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px; width: 19.0698%;&quot;&gt;&lt;b&gt; 저장/분석 시스템 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px; width: 31.2791%;&quot;&gt;&lt;b&gt; 도입 효과 요약 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;height: 44px; width: 9.18605%;&quot;&gt;&lt;b&gt;반도체&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.186%;&quot;&gt;온도, 압력, 플라즈마, 가스유량 등&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 21.1628%;&quot;&gt;공정 이상 감지,설비 이상 예측&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.0698%;&quot;&gt;Historian + 시계열 DB + AI&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 31.2791%;&quot;&gt;공정중단 감소, 설비 예지보전, 재작업률 감소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;height: 44px; width: 9.18605%;&quot;&gt;&lt;b&gt;자동차&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.186%;&quot;&gt;진동, 전류, 온도, 소음, 토크 등&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 21.1628%;&quot;&gt;설비 고장 예측, 품질 이상 감지&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.0698%;&quot;&gt;SCADA + Historian + AI 모델&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 31.2791%;&quot;&gt;다운타임 40%&amp;darr;, 불량률 70%&amp;darr;, 유지보수 비용 절감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;height: 44px; width: 9.18605%;&quot;&gt;&lt;b&gt;식음료&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.186%;&quot;&gt;온도, 압력, 진동, &lt;br /&gt;탭 사용량&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 21.1628%;&quot;&gt;품질 관리, 설비 상태 모니터링&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.0698%;&quot;&gt;IoT 플랫폼 + 클라우드 TSDB&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 31.2791%;&quot;&gt;생맥주 품질 27%&amp;uarr;, 고장률 13%&amp;darr;, 서비스비 10%&amp;darr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;height: 44px; width: 9.18605%;&quot;&gt;&lt;b&gt;화학/정유&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.186%;&quot;&gt;진동, 압력, 온도, 유량&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 21.1628%;&quot;&gt;펌프&amp;middot;열교환기 이상 감지, 예지보전&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 19.0698%;&quot;&gt;Historian 또는 InfluxDB + AI&lt;/td&gt;
&lt;td style=&quot;height: 44px; width: 31.2791%;&quot;&gt;고장예측 정확도 90%&amp;uarr;, 점검시간 40%&amp;darr;, 안전성 향상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;</description>
      <category>IT</category>
      <category>time-series</category>
      <category>Time-Series DBMS</category>
      <category>시계열</category>
      <category>시계열데이터</category>
      <category>제조db</category>
      <category>제조it</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/42</guid>
      <comments>https://keun90.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 2 Feb 2026 20:05:05 +0900</pubDate>
    </item>
    <item>
      <title>26년 01월 31일 - 미국 SMR, ETF</title>
      <link>https://keun90.tistory.com/40</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM9NoS/dJMcab36kJi/EFHhlZFjwcpUyChXb73hG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM9NoS/dJMcab36kJi/EFHhlZFjwcpUyChXb73hG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM9NoS/dJMcab36kJi/EFHhlZFjwcpUyChXb73hG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM9NoS%2FdJMcab36kJi%2FEFHhlZFjwcpUyChXb73hG1%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;534&quot; height=&quot;334&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;510&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;올해는 SMR에 대한 투자가 본격적으로 시작될 것으로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국의 26년, 전력 소비는 4조 2560kWhSMR로 예상하며, 공급 측면에서 재생에너지와 천연가스 발전이 빠르게 일어나고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국 전력 생산에서 기존 대형 원자력 비중은 18% 수준이지만, SMR이 차지하는 비중은 0%이며, 초기 단계입니다.&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;b&gt;25년 4분기, 미국 SMR 주가는 하락세&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AI버블론, 개별 기업들의 유상증자와 대주주매도 이슈 등 발생&lt;/li&gt;
&lt;li&gt;유상증자로 확보된 자금은 26년 폭팔적 수요 대응을 위한 설비 투자(Capex) 재원으로 활용될 예정&lt;/li&gt;
&lt;/ul&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;b&gt;26년, 미국 SMR에 주목&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중국이 개발한 상용 SMR '링롱 1호' 가동(완공)될 예정&lt;/li&gt;
&lt;li&gt;미국은 에너지 패권 경쟁에서 위기&lt;/li&gt;
&lt;li&gt;실질적인 계약과 수주가 발생하는 구간을 진입 중&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;빨라진 미국의 원자력 시계&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2024.07: ADVANCE Act, SMR 배치를 위한 법적 토대 마련&lt;/li&gt;
&lt;li&gt;2025.05: 원자력 행정명령 4건, 트럼프 속도전 명령&lt;/li&gt;
&lt;li&gt;2025.10: Project Janus, 미 육군 SMR 배치 계획&lt;/li&gt;
&lt;li&gt;2025.12: SPEED Act, 규제 장벽 걷어내며 인어가 절차 가속화&lt;/li&gt;
&lt;li&gt;2026 - 원자력 연료 제조 기업에 지원금 지급&lt;/li&gt;
&lt;li&gt;- AI 데이터센터의 전력으로 SMR(오클로) 선택한 Meta&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ETF&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개별주의 변동성이 크기 때문에 ETF도 좋은 선택지가 될 수 있습니다.&amp;nbsp;&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;ACE ETF - 미국&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/llIcn/dJMb99SLq3Y/iQ5vPzKt5H1dNwKGIXsHkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/llIcn/dJMb99SLq3Y/iQ5vPzKt5H1dNwKGIXsHkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/llIcn/dJMb99SLq3Y/iQ5vPzKt5H1dNwKGIXsHkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FllIcn%2FdJMb99SLq3Y%2FiQ5vPzKt5H1dNwKGIXsHkk%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;873&quot; height=&quot;288&quot; data-origin-width=&quot;788&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;&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;ACE ETF - 미국 vs 한국&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmFYB/dJMcadgx2E3/YLyg1L3McFHiPJLgEKx6qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmFYB/dJMcadgx2E3/YLyg1L3McFHiPJLgEKx6qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmFYB/dJMcadgx2E3/YLyg1L3McFHiPJLgEKx6qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpmFYB%2FdJMcadgx2E3%2FYLyg1L3McFHiPJLgEKx6qK%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;643&quot; height=&quot;362&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VanEck Uranium and Nuclear ETF (&lt;b&gt;NLR&lt;/b&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wYZte/dJMcacPvr8U/E6m5Lnc3jlnmVORslzOdH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wYZte/dJMcacPvr8U/E6m5Lnc3jlnmVORslzOdH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wYZte/dJMcacPvr8U/E6m5Lnc3jlnmVORslzOdH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwYZte%2FdJMcacPvr8U%2FE6m5Lnc3jlnmVORslzOdH0%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;623&quot; height=&quot;307&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;379&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;빅테크 기업, SMR 투자&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 러시아산 에너지를 많이 사용했었지만, 의존도를 탈피하기 위해 미국 정부는 투자를 계속할 것으로 보입니다.&lt;u&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;반도체&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메모리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;u&gt;&amp;rarr; 전력,&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;쇼티지를 보일 것으로 예상됨에 따라 빅테크 기업들도 투자를 시작하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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://www.asiae.co.kr/article/2025120411041604899&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.asiae.co.kr/article/2025120411041604899&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769823329825&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignLeft&quot; data-og-type=&quot;article&quot; data-og-title=&quot;머스크도 언급한 돈 없는 사회&amp;hellip;&amp;quot;돈 보다 에너지&amp;quot; - 아시아경제&quot; data-og-description=&quot;일론 머스크 테슬라 최고경영자(CEO)는 머지않은 미래에 에너지가 화폐를 대체할 것이라고 전망했다. 기술 발전으로 모든 게 풍족해지면 돈의 쓸모는 사라지지만,...&quot; data-og-host=&quot;www.asiae.co.kr&quot; data-og-source-url=&quot;https://www.asiae.co.kr/article/2025120411041604899&quot; data-og-url=&quot;https://www.asiae.co.kr/article/2025120411041604899&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FmrU5/dJMb8XkakuD/KfPzrzCnyxqLS9pje7Wxx1/img.jpg?width=639&amp;amp;height=407&amp;amp;face=307_86_442_233,https://scrap.kakaocdn.net/dn/b5nWkb/dJMb8YpQjYv/lF4XMemQ1khqHKUHrH3GOk/img.jpg?width=639&amp;amp;height=407&amp;amp;face=307_86_442_233,https://scrap.kakaocdn.net/dn/7cncv/dJMb87NRfhN/aPiSrfKasQwKnVUgzKthKK/img.jpg?width=320&amp;amp;height=210&amp;amp;face=0_0_320_210&quot;&gt;&lt;a href=&quot;https://www.asiae.co.kr/article/2025120411041604899&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.asiae.co.kr/article/2025120411041604899&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FmrU5/dJMb8XkakuD/KfPzrzCnyxqLS9pje7Wxx1/img.jpg?width=639&amp;amp;height=407&amp;amp;face=307_86_442_233,https://scrap.kakaocdn.net/dn/b5nWkb/dJMb8YpQjYv/lF4XMemQ1khqHKUHrH3GOk/img.jpg?width=639&amp;amp;height=407&amp;amp;face=307_86_442_233,https://scrap.kakaocdn.net/dn/7cncv/dJMb87NRfhN/aPiSrfKasQwKnVUgzKthKK/img.jpg?width=320&amp;amp;height=210&amp;amp;face=0_0_320_210');&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;머스크도 언급한 돈 없는 사회&amp;hellip;&quot;돈 보다 에너지&quot; - 아시아경제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;일론 머스크 테슬라 최고경영자(CEO)는 머지않은 미래에 에너지가 화폐를 대체할 것이라고 전망했다. 기술 발전으로 모든 게 풍족해지면 돈의 쓸모는 사라지지만,...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.asiae.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;메타가 우선 SMR 기업과 6.6GW 구매 계약을 맺었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://hankyung.com/article/2026011137871&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://hankyung.com/article/2026011137871&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769825316865&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;메타, 전력 쇼핑&amp;hellip;오클로&amp;middot;비스트라와 '원전 동맹'&quot; data-og-description=&quot;메타, 전력 쇼핑&amp;hellip;오클로&amp;middot;비스트라와 '원전 동맹', 美기업 3곳과 6.6GW 구매 계약 가동 전인 SMR&amp;middot;MMR까지 '찜' '즉시 전력'부터 미래 수요도 챙겨 AI데이터센터 시장 선점 '포석'&quot; data-og-host=&quot;www.hankyung.com&quot; data-og-source-url=&quot;http://hankyung.com/article/2026011137871&quot; data-og-url=&quot;https://www.hankyung.com/article/2026011137871&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bttaMC/dJMb9c9sQqK/pBbNHYLkWXmshU1pWJV9ZK/img.jpg?width=300&amp;amp;height=515&amp;amp;face=0_0_300_515&quot;&gt;&lt;a href=&quot;http://hankyung.com/article/2026011137871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://hankyung.com/article/2026011137871&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bttaMC/dJMb9c9sQqK/pBbNHYLkWXmshU1pWJV9ZK/img.jpg?width=300&amp;amp;height=515&amp;amp;face=0_0_300_515');&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;메타, 전력 쇼핑&amp;hellip;오클로&amp;middot;비스트라와 '원전 동맹'&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;메타, 전력 쇼핑&amp;hellip;오클로&amp;middot;비스트라와 '원전 동맹', 美기업 3곳과 6.6GW 구매 계약 가동 전인 SMR&amp;middot;MMR까지 '찜' '즉시 전력'부터 미래 수요도 챙겨 AI데이터센터 시장 선점 '포석'&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hankyung.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;한국 SMR 관련&lt;/b&gt;&amp;nbsp;&lt;/h4&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;한전기술 +90% past year&lt;/li&gt;
&lt;li&gt;두산에너빌리티 +280% past year&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XEhnO/dJMcagRTG1o/Magsue7z7kyY6ByoI4Bwo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XEhnO/dJMcagRTG1o/Magsue7z7kyY6ByoI4Bwo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XEhnO/dJMcagRTG1o/Magsue7z7kyY6ByoI4Bwo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXEhnO%2FdJMcagRTG1o%2FMagsue7z7kyY6ByoI4Bwo0%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;837&quot; height=&quot;301&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;301&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SMR(Small Modular Reactor)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소형 모듈 원자로&amp;nbsp;&lt;/li&gt;
&lt;li&gt;50~300MW 출력 (기존 대형 원전 1,000MW 이상)&lt;/li&gt;
&lt;li&gt;대규모 송전망 없이 지역 단위 전력 공급&lt;/li&gt;
&lt;li&gt;안전성과 유연성을 강화한 분산형 원자력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGgYCo/dJMcabwgyB4/7NKW3yXAuTKkoT3rYuZYH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGgYCo/dJMcabwgyB4/7NKW3yXAuTKkoT3rYuZYH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGgYCo/dJMcabwgyB4/7NKW3yXAuTKkoT3rYuZYH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGgYCo%2FdJMcabwgyB4%2F7NKW3yXAuTKkoT3rYuZYH0%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;756&quot; height=&quot;482&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>etf</category>
      <category>smr</category>
      <category>두산에너빌리티</category>
      <category>메타</category>
      <category>미주</category>
      <category>소형원자력</category>
      <category>원전</category>
      <category>전력</category>
      <category>카메코</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/40</guid>
      <comments>https://keun90.tistory.com/40#entry40comment</comments>
      <pubDate>Sat, 31 Jan 2026 11:16:20 +0900</pubDate>
    </item>
    <item>
      <title>26년 01월 27일 - 미주 6개월 후</title>
      <link>https://keun90.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/otenH/dJMcacIIou2/XXwlPTvcP9AaRpnymM3s1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/otenH/dJMcacIIou2/XXwlPTvcP9AaRpnymM3s1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/otenH/dJMcacIIou2/XXwlPTvcP9AaRpnymM3s1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FotenH%2FdJMcacIIou2%2FXXwlPTvcP9AaRpnymM3s1K%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;575&quot; height=&quot;369&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;708&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 data-ke-size=&quot;size16&quot;&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;span style=&quot;color: #000000; text-align: start;&quot;&gt;선행지표&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 주식시장 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 경제지표&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;보통 선행지표는 주식시장보다 6개월 먼저 반영됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;미국의 경제 대표 경제 지표&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;[대형 트럭 판매 지수]&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&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;미국에서는 경제 성장의 확신이 생길 때 대형트럭을 구매합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;닷컴버블 - 2000~2002년, 대형트럭판매 정점(3~6개월)&lt;/li&gt;
&lt;li&gt;리먼사태 - &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2008~2009년,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;대형트랙판매 정점(12개월)&lt;/li&gt;
&lt;li&gt;팬데믹 - &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2020년 1~2분기, &lt;/span&gt;대형트랙판매 정점(6~8개월)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프를 보면 대형트럭의 판매 지수가 최고조에 이른 이후에 모두 하락한 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://ko.tradingeconomics.com/united-states/total-vehicle-sales&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ko.tradingeconomics.com/united-states/total-vehicle-sales&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxRjde/dJMcah4jMNc/8UAutC2kE9nviMAHjewtCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxRjde/dJMcah4jMNc/8UAutC2kE9nviMAHjewtCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxRjde/dJMcah4jMNc/8UAutC2kE9nviMAHjewtCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxRjde%2FdJMcah4jMNc%2F8UAutC2kE9nviMAHjewtCk%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;605&quot; height=&quot;334&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;334&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;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;[주택 구매 지수 ]&lt;/span&gt;&lt;/span&gt;&lt;/b&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 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;미국 기존주택 판매 지수를 보면 23년부터 수축국면에 접어들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.tradingeconomics.com/united-states/existing-home-sales&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ko.tradingeconomics.com/united-states/existing-home-sales&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G6Y1z/dJMcafyEJxl/cTsuQzK2eqFbVAadEPrZDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G6Y1z/dJMcafyEJxl/cTsuQzK2eqFbVAadEPrZDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G6Y1z/dJMcafyEJxl/cTsuQzK2eqFbVAadEPrZDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG6Y1z%2FdJMcafyEJxl%2FcTsuQzK2eqFbVAadEPrZDk%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;749&quot; height=&quot;391&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;391&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;주택 판매가 회복되기 위해서는 500만채 이상이 거래되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;모기지 시장 안정 위해 정부 개입 확대&amp;nbsp;&lt;/li&gt;
&lt;li&gt;주택 구매 문턱 낮추는 추가 정책 추진&lt;/li&gt;
&lt;/ul&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;그리고 트럼프도 기업을 이익을 위해 정책을 마련하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업의 이익이 겨우 주가를 떠받치고 있지만, 6개월 후 변화에 대비해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>2026년 주가</category>
      <category>26년 주가</category>
      <category>6개월</category>
      <category>경제 지표</category>
      <category>미국주식</category>
      <category>미주</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/39</guid>
      <comments>https://keun90.tistory.com/39#entry39comment</comments>
      <pubDate>Wed, 28 Jan 2026 21:36:49 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA 실습 5 - 인터페이스 시나리오 설계</title>
      <link>https://keun90.tistory.com/37</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1091&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIjYE/dJMcaaYnYAW/iiOxf08QXjJWhLdKOkKRp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIjYE/dJMcaaYnYAW/iiOxf08QXjJWhLdKOkKRp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIjYE/dJMcaaYnYAW/iiOxf08QXjJWhLdKOkKRp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIjYE%2FdJMcaaYnYAW%2FiiOxf08QXjJWhLdKOkKRp1%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;603&quot; height=&quot;412&quot; data-origin-width=&quot;1091&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;샘플(노드 구조, 메시지 흐름)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 구성한 노드의 구조는 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769131551359&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Objects
└─ Factory
   └─ LINE1
      └─ EQP1
         ├─ Status        (UInt16)    // 설비 상태 코드
         ├─ Temperature   (Double)    // 온도 값
         ├─ LastUpdate    (DateTime)  // 마지막 갱신 시각(UTC)
         ├─ Seq           (UInt32)    // 증가 시퀀스
         └─ RawMessage    (String)    // 원문 메시지(선택)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 Message Flow(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;TCP&lt;/span&gt;, Client-Server)는 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1769151590728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Message Flow (TCP, Client&amp;ndash;Server

User        PLM          MES           OPC UA Server        PLC
 |           |            |                 |               |
 | 1.Change  |            |                 |               |
 |----------&amp;gt;|            |                 |               |
 |           | 2.Notify   |                 |               |
 |           |-----------&amp;gt;|                 |               |
 |           | (Change,   |                 |               |
 |           |  SEQ=1001) |                 |               |
 |           |            | 3.Validate SEQ  |               |
 |           |            |                 |               |
 |           |            | 4.ACK           |               |
 |           |&amp;lt;-----------|                 |               |
 |           |            | (ACK,1001)      |               |
 |           |            |                 |               |
 |           |            | 5.Write Params  |               |
 |           |            |---------------&amp;gt; |               |
 |           |            | (CMD, SEQ=2001) |               |
 |           |            |                 | 6.Apply       |
 |           |            |                 |--------------&amp;gt;|
 |           |            |                 |               |
 |           |            |                 | 7.ACK         |
 |           |            |&amp;lt;--------------- |               |
 |           |            | (ACK,2001)      |               |&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;일반적인 Message Flow(&lt;span style=&quot;background-color: #99cefa;&quot;&gt;Pub/Sub&lt;/span&gt;)는 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1769151670703&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Message Flow (Pub/Sub)

User        PLM        Event Bus / OPC UA PubSub        MES        PLC
 |           |                 |                        |          |
 | 1.Change  |                 |                        |          |
 |----------&amp;gt;|                 |                        |          |
 |           | 2.Publish       |                        |          |
 |           |---------------&amp;gt; |                        |          |
 |           | (Event,         |                        |          |
 |           |  SEQ=3001)      |                        |          |
 |           |                 | 3.Deliver              |          |
 |           |                 |----------------------&amp;gt; |          |
 |           |                 | (Event, SEQ=3001)      |          |
 |           |                 |                        | 4.ACK*   |
 |           |                 | &amp;lt;----------------------|          |
 |           |                 | (ACK,3001)             |          |
 |           |                 |                        |          |
 |           |                 | 5.Deliver              |          |
 |           |                 |-------------------------------&amp;gt;   |
 |           |                 | (Event, SEQ=3001)                 |&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;메시지 전송 트리거&amp;nbsp;&lt;/b&gt;&lt;/h4&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;특정 상태 코드(Status) 또는 온도(Temperature)가 임계치를 넘는 등 유의미한 변화가 있을 때 PLC의 OPCUA 서버는 해당 값들을 업데이트하고, 이를 MES 클라이언트가 Sub으로 감지하여 처리합니다.(Polling 없이 Sub으로 실시간 감지 가능)&lt;/p&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;특정 주기 또는 공정 단계 완료 시점 등에 정기적으로 메시지를 묶어 보내는 방식입니다. 실시간성은 떨어지지만, MES에서&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;메시지 내용 및 데이터 모델&lt;/b&gt;&lt;/h4&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;pre id=&quot;code_1769132931415&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Status (UInt16): 설비 상태 코드 (예: 가동/정지/에러 등의 코드)
Temperature (Double): 현재 온도 값 (프로세스 변수 예시)
LastUpdate (DateTime): 해당 데이터셋이 갱신된 시각 (UTC 기준)
Seq (UInt32): 메시지 시퀀스 번호 (증가하는 고유 ID)
RawMessage (String): 원문 메시지 (선택 사항, 필요 시 구조화된 문자열 또는 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;추가로 고려해볼 사항입니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Microsoft Azure OPC UA Connector의 메시지 헤더에는 type이나 subject 필드로 메시지 종류와 대상 자산을 구분하고, sequence 필드로 메시지 일렬번호를 제공하고 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1769134909175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;OPC UA Message
├─ header
│  ├─ type        // 메시지 종류 (telemetry | event | alarm | command)
│  ├─ subject     // 대상 자산 (site/line/equipment/tag)
│  ├─ sequence    // 메시지 일련번호 (증가값), 자산에 메시지가 하나 발행될 때 생성
│  ├─ timestamp   // 이벤트 발생 시각 (UTC)
│  └─ source      // OPC-UA 서버 또는 Endpoint
│
└─ body
   ├─ nodeId      // OPC-UA NodeId
   ├─ value       // 실제 값
   ├─ dataType    // OPC-UA DataType
   ├─ quality     // StatusCode (Good/Bad/Uncertain)
   └─ meta        // 확장 정보 (선택)

------------------------------------------------------------------------

{
  &quot;header&quot;: {
    &quot;type&quot;: &quot;telemetry&quot;,
    &quot;subject&quot;: &quot;factory1/lineA/eqp01/temperature&quot;,
    &quot;sequence&quot;: 102345,
    &quot;timestamp&quot;: &quot;2026-01-23T01:15:30Z&quot;,
    &quot;source&quot;: &quot;opc.tcp://10.0.0.5:4840&quot;
  },
  &quot;body&quot;: {
    &quot;nodeId&quot;: &quot;ns=2;s=Factory.LineA.EQP01.Temperature&quot;,
    &quot;value&quot;: 72.4,
    &quot;dataType&quot;: &quot;Double&quot;,
    &quot;quality&quot;: &quot;Good&quot;,
    &quot;meta&quot;: {
      &quot;unit&quot;: &quot;C&quot;,
      &quot;samplingIntervalMs&quot;: 1000
    }
  }
}

# 배열 

{
  &quot;header&quot;: {
    &quot;type&quot;: &quot;telemetry&quot;,
    &quot;subject&quot;: &quot;factory1/lineA/eqp01/sensors&quot;,
    &quot;sequence&quot;: 33012,
    &quot;timestamp&quot;: &quot;2026-01-23T01:15:40Z&quot;,
    &quot;source&quot;: &quot;opc.tcp://10.0.0.5:4840&quot;
  },
  &quot;body&quot;: {
    &quot;nodeId&quot;: &quot;ns=2;s=Factory.LineA.EQP01.SensorArray&quot;,
    &quot;dataType&quot;: &quot;Structure[]&quot;,
    &quot;value&quot;: [
      { &quot;sensorId&quot;: &quot;T1&quot;, &quot;value&quot;: 72.4 },
      { &quot;sensorId&quot;: &quot;P1&quot;, &quot;value&quot;: 1.02 }
    ],
    &quot;quality&quot;: &quot;Good&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;[설비 라인 식별 정보]&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;지금은 subject 값으로 line, eqp 정보를 알 수 있지만, object가 많아지면 msg 항목에 추가 시켜도 좋습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/ul&gt;
&lt;pre id=&quot;code_1769137056303&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Objects
 └─ Factory
    └─ LineA
       └─ EQP01
          ├─ Status (Object)
          │   ├─ Temperature
          │   ├─ Pressure
          │   └─ RunState
          │
          └─ StatusData (Structure)
              └─ { temperature, pressure, runState, alarm }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;메시지 순서 보장과 유실 검출&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신뢰성 있는 MES-PLC 통신을 위해선느 메시지의 순서가 보장되고, 누락된 메시지를 감지하는 메커니즘이 필요합니다.&amp;nbsp; OPCUA 자체도 전송 계층에서 순서 제어와 누락 검출 기능을 일부 제공합니다.&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;내용 초반에 노드 구성을 보면 Seq 노드가 응용 레벨 시퀀스 번호입니다. 이 번호를 활용하여 다음과 같은 전략을 구현할 수 있습니다.&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;메시지 순서 부여: PLC는 새로운 메시지 생성할 때마다 Seq 값을 1씩 증가시켜 붙입니다. MES에서 Seq 값을 확인해 누락된 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;핸드셰이크 설계: ACK 메커니즘을 토입하면 더욱 신뢰성 있는 구성이 가능합니다. &lt;a href=&quot;https://cache.industry.siemens.com/dl/files/835/109814835/att_1140017/v2/109814835_SiemensInformationModelKit_DOC_v3_0_en.pdf#:~:text=SequenceNo%20UInt32%20Unique%20sequence%20number,for%20this%20handshake%20interface%2C%20to&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cache.industry.siemens.com/dl/files/835/109814835/att_1140017/v2/109814835_SiemensInformationModelKit_DOC_v3_0_en.pdf#:~:text=SequenceNo%20UInt32%20Unique%20sequence%20number,for%20this%20handshake%20interface%2C%20to&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMz10q/dJMcagqKD1m/eaPB5Duk3X624TjN6pYQcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMz10q/dJMcagqKD1m/eaPB5Duk3X624TjN6pYQcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMz10q/dJMcagqKD1m/eaPB5Duk3X624TjN6pYQcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMz10q%2FdJMcagqKD1m%2FeaPB5Duk3X624TjN6pYQcK%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;827&quot; height=&quot;299&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;371&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;시퀀스 번호는 메시지의 순서를 추적하고 유실 여부를 판단하는 핵심 장치입니다. OPCUA 통신 자체가 TCP 기반이라 전송된 메시지는 순서를 유지하지만, 네트워크 장애나 구독 지연 등으로 인해 어떤 메시지가 전달되지 못하는 상황에 대비해야 합니다. 가능하다면, Seq와 ACK를 활용하여 검증하는 것을 권장합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;재기동/장애 시 복구 전략&lt;/b&gt;&amp;nbsp;&lt;/h4&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;대부분의 OPCUA 클라이언트 SDK는 세션 끊김을 감지하면 자동으로 재연결 및 sub 복구 기능을 제공하거나, 그렇지 않으면 재구독 로직을 구현해야 합니다. 재연결 후 초기에 한 번 현재 값들을 읽어서 PLC 상태를 동기화하는 것도 좋습니다.&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;재연결 시 MES는 현재 PLC의 Seq 값을 읽고, 자신이 마지막으로 처리한 Seq와 비교해야 합니다. 통신 장애로 인해 MES.Seq=50이고 PLC.Seq=55이면, 51~54에 대한 누락 메시지 처리 방안에 대해 정리해야 합니다.&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;단순 로그: 누락된 번호를 기록하고, 운영자가 별도로&amp;nbsp; 확인합니다.&lt;/li&gt;
&lt;li&gt;데이터베이스/이력 복구: PLC가 중단 후 발생한 메시지를 메모리나 파일에 보관해두었다며, MES가 재연결 후 전송을 받습니다. OPCUA-Historical Access / Events / History Read 기능이 관련있습니다.&amp;nbsp;&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;[미처리 메시지 처리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장애 직전에 송신되었으나 미처 Ack 받지 못한 메시지가 있을 수 있습니다. MES &amp;rarr; PLC로 보낸 경우 PLC가 해당 명령을 수행했는지 불확실하고, PLC &amp;rarr; MES인 경우 MES가 처리 못 했을 수 있습니다. 핸드셰이크를 도입해쑈다면, 재연결 시 Ack 불일치로 파악하여 재전송이 가능하지만, 단순 구조에서는 이 부분을 고려해야 합니다. 일반적으로 MES에서는 중요 트랜잭션은 응답을 받을 때까지 재시도하거나, PLC쪽에서는 중복 수신에 대비하여 동일한 Seq의 메시지가 다시 와도 한 번만 처리하도록 만들어 두는 것이 안전합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXCXJB/dJMcafek30L/SS7AhHrEtdtw1rclAXZEyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXCXJB/dJMcafek30L/SS7AhHrEtdtw1rclAXZEyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXCXJB/dJMcafek30L/SS7AhHrEtdtw1rclAXZEyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXCXJB%2FdJMcafek30L%2FSS7AhHrEtdtw1rclAXZEyk%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;488&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;778&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;Sequence&amp;nbsp;&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;메시지에 붙은 고유한 번호&lt;/li&gt;
&lt;li&gt;이 메시지가 몇 번째인가?를 식별하기 위한 값&lt;/li&gt;
&lt;li&gt;메시지 중복 판단 / 순서 보장&lt;/li&gt;
&lt;li&gt;Seq만으로는 &quot;처리되었는지&quot; 알 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACK(Acknowledgement)&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;이 Seq 메시지를 정상 처리했다 라는 응답&lt;/li&gt;
&lt;li&gt;송신자가 안심하고 다음 단계로 넘어가게 하는 신호&lt;/li&gt;
&lt;li&gt;ACK는 수진자가 전송&lt;/li&gt;
&lt;li&gt;ACK 없으면&amp;nbsp; 처리 여부 불확실&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1769147798383&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MES &amp;rarr; PLC
SEQ: 101, 102, 103 ...

PLC &amp;rarr; MES
ACK: seq=101&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;요약하면, 재기동/장애 시에는 &lt;b&gt;세션 복구 &lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&amp;rarr; 시퀀스 동기화 확인 &lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;span&gt;&lt;b&gt; 누락 데이터 검토&lt;/b&gt;의 단계를 거칩니다. OPCUA의 내재된 신뢰성 기능을 활용하고, 추가로 응용단에서 시퀀스 비교를 통한 누락 검출 및 로그를 시행하면 한층 견고한 통신을 구현활 수 있습니다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;/b&gt; &lt;b&gt;MES-PLC 양방향 통신의 중요성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MES &amp;rarr; PLC 명령이나 설정값을 보내고, PLC&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr; MES 로 생산 실적이나 이벤트를 보내는 것 모두 원활해야 제조 실행 시스템이 제대로 가능합니다. 시나리오를 예로 정리해보았습니다. &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;letter-spacing: 0px;&quot;&gt;MES&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;rarr; PLC&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;생산 지시 다운로드, 레시피 파라미터 전송, 설비 제어 명령(가동/정지 등) 등을 MES에서 PLC로 내보낼 수 있어야 합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;OPCUA에서는 이를 위해 MES에서 PLC의 변수를 Write하거나 OPCUA 메서드를 호출하는 방식이 일반적입니다.&lt;/li&gt;
&lt;li&gt;메서드는 하나의 호출로 여러 파라미터(구조체 형태)를 전달하고 실행 겨로가를 돌려받을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PLC &amp;rarr; MES&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설비에서 발생하는 이벤트, 알람 등은 OPCUA 서버가 값 변경이나 Event 발생을 통해 MES로 전달해야 합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Seq 증가와 노드 업데이트 매커니즘이 바로 이 방향의 통신을 담당합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PLC &amp;harr; MES&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PLC에서 설비 알람을 MES로 전송합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;MES에서 담당자가 알람을 확인/해제하면, PLC에 전달하여 PLC도 알람 acknowledge를 완료하는 형태가 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단순 구현과 향후 확장성 고려&lt;/b&gt;&lt;/h4&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;초기 단계부터 복잡한 시나리오를 구현하려 하면 개발과 유지보수가 어려워질 수 있습니다. 간략한 구조에서 Seq/Ack 태그만으로 메모리 버퍼에 데이터를 안전하게 주고받게 구성할 수 있습니다. &lt;a href=&quot;https://cache.industry.siemens.com/dl/files/835/109814835/att_1140017/v2/109814835_SiemensInformationModelKit_DOC_v3_0_en.pdf#:~:text=The%20client%20checks%20for%20available,it%20is%20ready%20to%20receive&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cache.industry.siemens.com/dl/files/835/109814835/att_1140017/v2/109814835_SiemensInformationModelKit_DOC_v3_0_en.pdf#:~:text=The%20client%20checks%20for%20available,it%20is%20ready%20to%20receive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;1033&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bArISf/dJMcafyCERl/iOKx0Om7ZjQSPrhl2kSq50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bArISf/dJMcafyCERl/iOKx0Om7ZjQSPrhl2kSq50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bArISf/dJMcafyCERl/iOKx0Om7ZjQSPrhl2kSq50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbArISf%2FdJMcafyCERl%2FiOKx0Om7ZjQSPrhl2kSq50%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;757&quot; height=&quot;805&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;1033&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;[OPCUA&amp;nbsp; 표준 기능 활용]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가능한 한 OPCUA 표준 케커니즘을 활용하는 것이 좋습니다.&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;연결 유지(Keep-Alive)&lt;/li&gt;
&lt;li&gt;자동 재연결&lt;/li&gt;
&lt;li&gt;데드밴드(Deadband)를 통한 잡음 필터링&lt;/li&gt;
&lt;li&gt;히스토리 데이터 저장&amp;nbsp;&lt;/li&gt;
&lt;li&gt;...&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;[확장 시나리오 대비]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후 더 많은 장비가 추가되거나, 메시지 종류가 다양해질 것으로 대비하여 모델을 일반화하면 좋습니다. OPCUA의 네임스페이스와 노드 구조를 체계적으로 설계해 두면, MES 쪽에서도 Browse 경로나 Node ID 패턴을 통해 동적으로 장비를 추가해나가기 수월합니다.&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;자동화된 통합 테스트를 만들어 다양한 시나리오에서 메시지 흐름을 검증해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;소캣, opc 어떤 통신이던 queue에 쌓아놓고 처리하는 설계가 필요할 것 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[AI Prompt]&lt;/p&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;OPCUA,&amp;nbsp;MES&amp;nbsp;전문가이다.&amp;nbsp; &lt;br /&gt;전문가&amp;nbsp;의견으로&amp;nbsp;판단해줘.&amp;nbsp; &lt;br /&gt;나는&amp;nbsp;MES를&amp;nbsp;다루는&amp;nbsp;엔지니어이다.&amp;nbsp; &lt;br /&gt;OPCUA에&amp;nbsp;대한&amp;nbsp;아주&amp;nbsp;기본적인&amp;nbsp;사항은&amp;nbsp;마무리한&amp;nbsp;것으로&amp;nbsp;보인다.&amp;nbsp; &lt;br /&gt;#다음작업으로&amp;nbsp;실제&amp;nbsp;메시지&amp;nbsp;흐름을&amp;nbsp;설계해보고&amp;nbsp;싶다.&amp;nbsp; &lt;br /&gt;나의&amp;nbsp;생각에&amp;nbsp;대해&amp;nbsp;부족한&amp;nbsp;부분이&amp;nbsp;있으면&amp;nbsp;의견부탁한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#구축완료한환경&amp;nbsp;:&amp;nbsp; &lt;br /&gt;-&amp;nbsp;하나의&amp;nbsp;윈도우&amp;nbsp;PC에&amp;nbsp;OPC-UA&amp;nbsp;서버&amp;nbsp;구동&amp;nbsp;완료 &lt;br /&gt;-&amp;nbsp;하나의&amp;nbsp;윈도우&amp;nbsp;PC에&amp;nbsp;OPC-UA&amp;nbsp;클라이언트&amp;nbsp;구동&amp;nbsp;완료 &lt;br /&gt;-&amp;nbsp;서버와&amp;nbsp;클라이언트&amp;nbsp;연동&amp;nbsp;완료 &lt;br /&gt;-&amp;nbsp;서버의&amp;nbsp;uanodesetimport.xml에&amp;nbsp;Node&amp;nbsp;추가(bjects&amp;nbsp;&amp;rarr;&amp;nbsp;Factory&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;&amp;rarr;&amp;nbsp;PLC&amp;nbsp;&amp;rarr;&amp;nbsp;Message) &lt;br /&gt;-&amp;nbsp;PLC&amp;nbsp;역할의&amp;nbsp;메시지&amp;nbsp;전달&amp;nbsp;로직&amp;nbsp;수행,&amp;nbsp;2개 &lt;br /&gt;-&amp;nbsp;uaexpert에서&amp;nbsp;Message&amp;nbsp;Value&amp;nbsp;값&amp;nbsp;수정&amp;nbsp;가능&amp;nbsp;확인 &lt;br /&gt;-&amp;nbsp;노드&amp;nbsp;구조&amp;nbsp; &lt;br /&gt;Objects &lt;br /&gt;└─&amp;nbsp;Factory &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;└─&amp;nbsp;LINE1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;└─&amp;nbsp;EQP1 &lt;br /&gt;&amp;nbsp;├─&amp;nbsp;Status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(UInt16)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;설비&amp;nbsp;상태&amp;nbsp;코드 &lt;br /&gt;&amp;nbsp;├─&amp;nbsp;Temperature&amp;nbsp;&amp;nbsp;&amp;nbsp;(Double)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;온도&amp;nbsp;값 &lt;br /&gt;&amp;nbsp;├─&amp;nbsp;LastUpdate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(DateTime)&amp;nbsp;&amp;nbsp;//&amp;nbsp;마지막&amp;nbsp;갱신&amp;nbsp;시각(UTC) &lt;br /&gt;&amp;nbsp;├─&amp;nbsp;Seq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(UInt32)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;증가&amp;nbsp;시퀀스 &lt;br /&gt;&amp;nbsp;└─&amp;nbsp;RawMessage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(String)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;원문&amp;nbsp;메시지(선택) &lt;br /&gt;-&amp;nbsp;테스트&amp;nbsp;PLC&amp;nbsp;코드로&amp;nbsp;테그값&amp;nbsp;변경&amp;nbsp;완료 &lt;br /&gt;-&amp;nbsp;StressTest&amp;nbsp;진행&amp;nbsp; &lt;br /&gt;Write&amp;nbsp;부하&amp;nbsp;테스트&amp;nbsp;수행,&amp;nbsp;10개&amp;nbsp;서비스&amp;nbsp;구동&amp;nbsp;중&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Subscription&amp;nbsp;서비스&amp;nbsp;10개,&amp;nbsp;서비스당&amp;nbsp;4개&amp;nbsp;노드&amp;nbsp;구독 &lt;br /&gt;-&amp;nbsp;Stress&amp;nbsp;테스트&amp;nbsp;종료 &lt;br /&gt;-&amp;nbsp;Pub/Sub에&amp;nbsp;대한&amp;nbsp;개념&amp;nbsp;이해&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#다음작업 &lt;br /&gt;-&amp;nbsp;&amp;nbsp;메시지&amp;nbsp;언제&amp;nbsp;보낼&amp;nbsp;것인가&amp;nbsp;(이벤트&amp;nbsp;기준) &lt;br /&gt;-&amp;nbsp;&amp;nbsp;메시지&amp;nbsp;무엇을&amp;nbsp;담을&amp;nbsp;것인가&amp;nbsp;(데이터&amp;nbsp;모델) &lt;br /&gt;-&amp;nbsp;&amp;nbsp;메시지&amp;nbsp;순서/유실을&amp;nbsp;어떻게&amp;nbsp;판단할&amp;nbsp;것인가&amp;nbsp;(Sequence) &lt;br /&gt;-&amp;nbsp;&amp;nbsp;재기동/장애&amp;nbsp;시&amp;nbsp;어떻게&amp;nbsp;복구할&amp;nbsp;것인가 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#DO&amp;nbsp; &lt;br /&gt;-&amp;nbsp;코딩&amp;nbsp;외적으로&amp;nbsp;필요한&amp;nbsp;부분은&amp;nbsp;주석으로&amp;nbsp;설명 &lt;br /&gt;&lt;br /&gt;#DO&amp;nbsp;NOT &lt;br /&gt;-&amp;nbsp;의미&amp;nbsp;없는&amp;nbsp;코드&amp;nbsp;작성 &lt;br /&gt;-&amp;nbsp;오버&amp;nbsp;엔지니어링&amp;nbsp;금지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>EQP</category>
      <category>mes</category>
      <category>OPC</category>
      <category>OPCUA</category>
      <category>smartfactory</category>
      <category>공장</category>
      <category>스마트팩토리</category>
      <category>인터페이스</category>
      <category>자동화</category>
      <category>제조</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/37</guid>
      <comments>https://keun90.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 26 Jan 2026 20:17:16 +0900</pubDate>
    </item>
    <item>
      <title>26년 01월 23일 - 미국 증시 요약</title>
      <link>https://keun90.tistory.com/38</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn1Cvw/dJMcajnrB9a/D2Ue6QiC9CqRmMWn2droY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn1Cvw/dJMcajnrB9a/D2Ue6QiC9CqRmMWn2droY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn1Cvw/dJMcajnrB9a/D2Ue6QiC9CqRmMWn2droY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn1Cvw%2FdJMcajnrB9a%2FD2Ue6QiC9CqRmMWn2droY0%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;310&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;전체 현황&lt;/b&gt;&lt;/h4&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;트럼프 대통령은 이란에 군 병력을 집결시켰습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;종목별&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[엔비디아, NVDA]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중국이 H200 AI 칩 주문 준비를 허용했다는 소식에 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;1.5%&lt;/span&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;H200: 데이터센터&amp;middot;AI 훈련&amp;middot;추론용으로 개발한 고성능 AI 가속 칩&lt;/li&gt;
&lt;li&gt;H20 &amp;rarr; H200 &amp;rarr; Blackwell/Rubin&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;[인텔, INTC]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실적 전망 부진 여파로 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;17%&lt;/span&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;26년 1분기 실적 가이던스(전망)가 월가 기대치보다 낮게 발표됨&amp;nbsp;&lt;/li&gt;
&lt;li&gt;월가 기대치($12.6 B), 인텔 가이던스($12.2 B)&lt;/li&gt;
&lt;li&gt;제조 및 공급망 문제로 AI 서버용 칩 수요를 충분히 맞추지 못할 것이라고 경영진이 언급하면서 실적 회복 속도에 대한 불확실성이 커짐&lt;/li&gt;
&lt;li&gt;CPU의 수요는 강했지만, 공급을 못하고 수율과 마진이 좋지 못해서 부정적 영향 발생&lt;/li&gt;
&lt;li&gt;NVDA, AMD, TSMC 모두 주가 상승을 보임&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;[크래프트하인즈, KHC]&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;3G캐피탈이 크래프트 + 하인즈를 인수&amp;middot;합병하면서 사모펀드의 특징에 따라 기업의 비용 절감을 시작합니다.&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;악재가 겹치자 버빗도 62% 손실을 얻게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;지표&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[소비자 심리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26년 1월 미국 소비자 심리가 5개월 만에 최고치를 기록했습니다.&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;전원 대비 상승했지만, 지수 수준은 여전히 작년 같은 달보다 20% 낮은 수준&lt;/li&gt;
&lt;li&gt;높은 물가, 노동시장 우려, 구매력 압박 등 소비자들이 느끼는 부담이 여전함&lt;/li&gt;
&lt;li&gt;다른 실물 지표들과 함께 추세를 봐야 의미 있는 판단이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6LUfR/dJMcagYAfbB/Ux4nUhdKHd1Oa0Psl5bV5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6LUfR/dJMcagYAfbB/Ux4nUhdKHd1Oa0Psl5bV5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6LUfR/dJMcagYAfbB/Ux4nUhdKHd1Oa0Psl5bV5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6LUfR%2FdJMcagYAfbB%2FUx4nUhdKHd1Oa0Psl5bV5k%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;670&quot; height=&quot;390&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;390&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;단기적 개선&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;상승: 물가 불안 &amp;rarr; 금리 인하 어려움&lt;/li&gt;
&lt;li&gt;안정/하락: 물가 통제 신뢰 &amp;rarr; 금리 인하 여지&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[PMI, Purchasing Managers Index]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;기업들이 지금 주문&amp;middot;생산을 늘리고 있는가&lt;/li&gt;
&lt;li&gt;제조업&amp;middot;서비스업 구매 담당자에게 직접 설문&lt;/li&gt;
&lt;li&gt;PMI (&amp;uarr;) + 신규주문 (&amp;uarr;) &amp;rarr; 경기 회복 초입&lt;/li&gt;
&lt;li&gt;PMI (&amp;darr;) + 고용 (&amp;darr;) &amp;rarr; 경기 둔화&amp;middot;침체 신호&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;자금 흐름 데이터&lt;/b&gt;&amp;nbsp;&lt;/h4&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;미국 주식형 펀드에서 170억 달러 유출&lt;/li&gt;
&lt;li&gt;유럽&amp;middot;일본&amp;middot;신흥시장으로의 자금 유입은 오히려 가속화되었음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 개인투자자는 미국 주식을 약 40억 달러어치 순매수했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;국채(Treasury)&lt;/b&gt;&lt;/h4&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;만기&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;시장에서 의미&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;무엇을 반영&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;핵심 질문&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1년물&lt;/td&gt;
&lt;td&gt;현재 금리&lt;/td&gt;
&lt;td&gt;연준 정책금리, 단기 유동성&lt;/td&gt;
&lt;td&gt;지금 금리는 어떤가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2년물&lt;/td&gt;
&lt;td&gt;연준의 다음 수&lt;/td&gt;
&lt;td&gt;향후 1~2년 금리 경로&lt;/td&gt;
&lt;td&gt;언제 금리를 내릴까&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5년물&lt;/td&gt;
&lt;td&gt;중기 경기&lt;/td&gt;
&lt;td&gt;경기 사이클, 인플레 지속성&lt;/td&gt;
&lt;td&gt;침체가 온다면 얼마나 갈까&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10년물&lt;/td&gt;
&lt;td&gt;장기 경제 신뢰&lt;/td&gt;
&lt;td&gt;장기 성장률, 물가, 재정 신뢰&lt;/td&gt;
&lt;td&gt;미국 경제는 장기적으로 괜찮은가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;원자재 &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The US-China AI and geopolitical power race and global energy supply waves drive our analysts key convictions..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Goldman Sachs Research's cyclical macro base case of sturdy global GDP growth and 50 basis points of Fed rate cuts in 2026is again supportive of top-down commodify returns.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원자재 시장이 강세를 유지할 위험/기회 요인들이 존재하며, 2026년의 거시 환경(성장+금리 인하)이 원자재 수익에 우호적이라고 보여지고 있습니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다음주 이슈&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매그니퍼센트 7 기업 다수가 실적을 발표할 예정입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://old.earningswhispers.com/calendar&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://old.earningswhispers.com/calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8phCA/dJMcafk53uD/xcW9SQYdxa0Mihnam4Xij0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8phCA/dJMcafk53uD/xcW9SQYdxa0Mihnam4Xij0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8phCA/dJMcafk53uD/xcW9SQYdxa0Mihnam4Xij0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8phCA%2FdJMcafk53uD%2FxcW9SQYdxa0Mihnam4Xij0%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;705&quot; height=&quot;397&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;397&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>주식&amp;middot;경제</category>
      <category>미국증시</category>
      <category>미주</category>
      <category>버크셔</category>
      <category>엔비디아</category>
      <category>주가</category>
      <category>주식</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/38</guid>
      <comments>https://keun90.tistory.com/38#entry38comment</comments>
      <pubDate>Sat, 24 Jan 2026 15:14:11 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA 실습 4 - Pub/Sub 아키텍처</title>
      <link>https://keun90.tistory.com/35</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0FHvQ/dJMcaaYm7ae/idhktqMKsco9YNhVwd2fA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0FHvQ/dJMcaaYm7ae/idhktqMKsco9YNhVwd2fA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0FHvQ/dJMcaaYm7ae/idhktqMKsco9YNhVwd2fA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0FHvQ%2FdJMcaaYm7ae%2FidhktqMKsco9YNhVwd2fA1%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;641&quot; height=&quot;403&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Pub/Sub 아키텍처의 필수성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공장 자동화 현장에서 보면, 필수라기 보다는 &quot;선택지&quot;에 가깝습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공장 데이터의 외부 연계(Cloud, AI)&lt;/li&gt;
&lt;li&gt;MES 외에도 Dashboard, AI, 모니터링 등 데이터 소비자 증가&amp;nbsp;&lt;/li&gt;
&lt;li&gt;(메시지를 한 번 발생하고, 필요한 쪽에서 알아서 구독하는 모델)&lt;/li&gt;
&lt;li&gt;네트워크 경계(OT &amp;harr; IT &amp;harr; 외부)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pub/Sub이 오버엔지니어링인 경우는 다음과 같습니다.&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;소비자가 소수이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Read/Write가 중요하다.&lt;/li&gt;
&lt;li&gt;실시간 제어와 상태 조회가 핵심이다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;느슨한 통신 구조 + 여러 클라이언트가 있다면, Pub/Sub 구조가 적합할 것입니다.&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;Pub/Sub을 구성하기에 앞서 다음과 같은 질문을 해보았으면 합니다.&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;이 메시지는 유실돼도 되는가?&lt;/li&gt;
&lt;li&gt;중복되면 문제가 되는가?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;느린 Sub는 어떻게 처리하는가?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;재기동 시 이전 메시지를 처리해야 하는가?&lt;/li&gt;
&lt;li&gt;이 메시지는 언제까지 유효한가?&lt;/li&gt;
&lt;li&gt;누가 이 메시지를 책임지는가?&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Pub/Sub vs Broadcasting&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Broadcast 방식은 커낵션 되어 있는 모든 대상에 메시지를 전송하는 것입니다.&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;Pub/Sub은 Topic를 구독한 애들만 받도록 함에 있어 구조적 차이가 있습니다.&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;Topic은 메시지를 분류하는 논리적 주소(채널)입니다.&lt;/li&gt;
&lt;li&gt;Pub &amp;nbsp;&amp;rarr; Msg &amp;rarr; Topic&lt;/li&gt;
&lt;li&gt;Sub 는 Topic을 구독합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pub/Sub이 Topic을 구성하지 않으면 Broadcast와 유사해집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Pub/Sub의 구조&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간략한 구조와 코드에 대한 설명을 해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pub은 msg를 Topic에 전달하고,&amp;nbsp;Topic 구조를 명확히 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sub은 Topic에 대한 구독자를 등록하기 위해, subscribe()를 호출해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에서는 Sub한 메시지를 직접 조회하지 않고 Cache 데이터를 바라봅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, Sub 종료가 필요하면, 반드시 UnSubscribe를 해주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1768971792452&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Topic 
	factory/line1/eqp1/status
    
Publisher
  └─ publish(&quot;factory/line1/eqp1/status&quot;, msg)
        &amp;darr;
PubSubBus
        &amp;darr;
Subscriber(on_status) 만 호출, Topic에 구독자(on_status)가 등록되어 있음


#화면 구동 시 데이터 갱신 

[화면 열기]
   &amp;darr;
subscribe() 실행
   &amp;darr;
Subscriber 콜백 등록
   &amp;darr;
Publisher publish()
   &amp;darr;
콜백 호출
   &amp;darr;
화면 데이터 갱신 (Cache의 데이터를 조회)&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 메시지 언제 보낼 것인가 (이벤트 기준)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 메시지 무엇을 담을 것인가 (데이터 모델)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 메시지 순서/유실을 어떻게 판단할 것인가 (Sequence)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 재기동/장애&amp;nbsp;시&amp;nbsp;어떻게&amp;nbsp;복구할&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;</description>
      <category>IT 제조</category>
      <category>OPC</category>
      <category>OPCUA</category>
      <category>pub</category>
      <category>PubSub</category>
      <category>sub</category>
      <category>설비</category>
      <category>스마트팩토리</category>
      <category>인터페이스</category>
      <category>자동화</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/35</guid>
      <comments>https://keun90.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 21 Jan 2026 20:10:02 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA 실습 3 - 가상 환경, Message, StressTest, Pub/Sub</title>
      <link>https://keun90.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQeyhS/dJMcahiTonw/akcqwbpZLSWgUkXvYUzu6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQeyhS/dJMcahiTonw/akcqwbpZLSWgUkXvYUzu6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQeyhS/dJMcahiTonw/akcqwbpZLSWgUkXvYUzu6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQeyhS%2FdJMcahiTonw%2FakcqwbpZLSWgUkXvYUzu6k%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;649&quot; height=&quot;354&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;630&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에 이어서 환경 구성을 더욱 운영 환경에 맞추어 설정하보겠습니다.&amp;nbsp;&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;b&gt; &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;PLC 테스트 코드를 하나 더 증가, 다중 테스트&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PLC 테스트, 메시지 전송하는 프로그램을 추가, 동일한 node로 메시지를 전송해보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 노드는 두 PLC 메시지를 정상적으로 처리했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드를 쪼개서 관리하면 하나의 설비에서 상태 값 별로 서로 다른 메시지를 OPC-UA서버로 전달하는 구조가&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;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;MES는 필요한 태그만&amp;nbsp; Subscription&lt;/li&gt;
&lt;li&gt;서버가 동시 write 요청 처리 가능&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;동시성 관리 필요&lt;/li&gt;
&lt;li&gt;Seq/Timestamp 설계 없으면 누락 인지 어려움&lt;/li&gt;
&lt;li&gt;노드 수 증가, 관리/메모리 부담&lt;/li&gt;
&lt;li&gt;설계 복잡도 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;Message Value 단순 구조가 아닌, 실제 Message 포맷으로 변경&amp;nbsp;&lt;/span&gt; &lt;/b&gt;&lt;/h4&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: #222222; text-align: start;&quot;&gt;NodeSet이란 OPC UA 서버가 외부에 공개할 데이터/구조의 설계도 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;2장, uanodesetimport.xml에 노드를 추가하면서 다루어본 경험이 있습니다.&amp;nbsp;&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: #222222; text-align: start;&quot;&gt;노드를 쪼개기 위한 구조는 다음과 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768873904398&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 기존 구조
Factory &amp;rarr; Line &amp;rarr; PLC &amp;rarr; Message(String)

Objects
 └─ Factory
     └─ LINE1
         └─ EQP1
             ├─ Status      (UInt16 or Int32)   # 0=STOP,1=RUN,2=ALARM...
             ├─ Temperature (Double)            # ex 36.7
             ├─ LastUpdate  (DateTime)          # 서버/설비 기준 시간
             ├─ Seq         (UInt32)            # 누락/순서 검증용
             └─ RawMessage  (String)            # (선택) 원문/디버깅용&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;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;uanodesetimport.xml 설정 파일은 아래 더보기를 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #fafafa; color: #333333;&quot; data-text-less=&quot;닫기&quot; data-text-more=&quot;더보기&quot; data-ke-type=&quot;moreLess&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;lt;!--&amp;nbsp;============================================================&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OPC&amp;nbsp;UA&amp;nbsp;PoC&amp;nbsp;Data&amp;nbsp;Model&amp;nbsp;(운영형&amp;nbsp;최소)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Objects(i=85)&amp;nbsp;&amp;rarr;&amp;nbsp;Factory&amp;nbsp;&amp;rarr;&amp;nbsp;LINE1&amp;nbsp;&amp;rarr;&amp;nbsp;EQP1&amp;nbsp;&amp;rarr;&amp;nbsp;Variables&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Factory가&amp;nbsp;LINE1을&amp;nbsp;&quot;정방향&amp;nbsp;Organizes&quot;로&amp;nbsp;반드시&amp;nbsp;참조해야&amp;nbsp;UAExpert&amp;nbsp;트리에&amp;nbsp;보임&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;EQP1&amp;nbsp;아래&amp;nbsp;태그는&amp;nbsp;HasComponent로&amp;nbsp;구성(장비&amp;nbsp;태그&amp;nbsp;모델)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;알람/Event/Historical은&amp;nbsp;이번&amp;nbsp;단계에서&amp;nbsp;제외(오버엔지니어링&amp;nbsp;방지)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;============================================================&amp;nbsp;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Factory&amp;nbsp;(Objects&amp;nbsp;아래에&amp;nbsp;매달리는&amp;nbsp;루트)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory&quot;&amp;nbsp;BrowseName=&quot;1:Factory&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Factory&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Objects(i=85)&amp;nbsp;아래에&amp;nbsp;붙기&amp;nbsp;위한&amp;nbsp;역방향&amp;nbsp;링크&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;i=85&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Factory&amp;nbsp;하위&amp;nbsp;구조&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;기존&amp;nbsp;구조를&amp;nbsp;유지할&amp;nbsp;거면&amp;nbsp;아래&amp;nbsp;라인은&amp;nbsp;살리고,&amp;nbsp;통일할&amp;nbsp;거면&amp;nbsp;제거&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line&amp;lt;/Reference&amp;gt;&amp;nbsp;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;반드시&amp;nbsp;필요:&amp;nbsp;Factory&amp;nbsp;&amp;rarr;&amp;nbsp;LINE1&amp;nbsp;정방향&amp;nbsp;연결&amp;nbsp;(이게&amp;nbsp;없으면&amp;nbsp;트리에&amp;nbsp;안&amp;nbsp;보일&amp;nbsp;수&amp;nbsp;있음)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.LINE1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Factory&amp;nbsp;&amp;gt;&amp;nbsp;Line&amp;nbsp;&amp;gt;&amp;nbsp;PLC&amp;nbsp;&amp;gt;&amp;nbsp;Message&amp;nbsp;Structure&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory&quot;&amp;nbsp;BrowseName=&quot;1:Factory&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Factory&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;i=85&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory.Line&quot;&amp;nbsp;BrowseName=&quot;1:Line&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Line&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line.PLC&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory.Line.PLC&quot;&amp;nbsp;BrowseName=&quot;1:PLC&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;PLC&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.Line&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line.PLC.Message&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;DataType=&quot;String&quot;&amp;nbsp;NodeId=&quot;ns=1;s=Factory.Line.PLC.Message&quot;&amp;nbsp;BrowseName=&quot;1:Message&quot;&amp;nbsp;AccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Message&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.Line.PLC&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:String&amp;gt;&amp;lt;/uax:String&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&amp;nbsp;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;LINE1&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1&quot;&amp;nbsp;BrowseName=&quot;1:LINE1&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;LINE1&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;부모(Factory)로의&amp;nbsp;역방향&amp;nbsp;링크&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;LINE1&amp;nbsp;하위&amp;nbsp;설비&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;EQP1&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAObject&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1&quot;&amp;nbsp;BrowseName=&quot;1:EQP1&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;EQP1&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;부모(LINE1)로의&amp;nbsp;역방향&amp;nbsp;링크&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;Organizes&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;장비&amp;nbsp;태그(Variables)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1.Status&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1.Temperature&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1.LastUpdate&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1.Seq&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1.RawMessage&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAObject&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Status&amp;nbsp;(UInt16)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1.Status&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BrowseName=&quot;1:Status&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataType=&quot;UInt16&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLevel=&quot;3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserAccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Status&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:UInt16&amp;gt;0&amp;lt;/uax:UInt16&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Temperature&amp;nbsp;(Double)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1.Temperature&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BrowseName=&quot;1:Temperature&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataType=&quot;Double&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLevel=&quot;3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserAccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Temperature&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:Double&amp;gt;0&amp;lt;/uax:Double&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;LastUpdate&amp;nbsp;(DateTime)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1.LastUpdate&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BrowseName=&quot;1:LastUpdate&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataType=&quot;DateTime&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLevel=&quot;3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserAccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;LastUpdate&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:DateTime&amp;gt;1601-01-01T00:00:00Z&amp;lt;/uax:DateTime&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;Seq&amp;nbsp;(UInt32)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1.Seq&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BrowseName=&quot;1:Seq&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataType=&quot;UInt32&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLevel=&quot;3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserAccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;Seq&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:UInt32&amp;gt;0&amp;lt;/uax:UInt32&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;RawMessage&amp;nbsp;(String)&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;UAVariable&amp;nbsp;NodeId=&quot;ns=1;s=Factory.LINE1.EQP1.RawMessage&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BrowseName=&quot;1:RawMessage&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataType=&quot;String&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessLevel=&quot;3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserAccessLevel=&quot;3&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DisplayName&amp;gt;RawMessage&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Reference&amp;nbsp;ReferenceType=&quot;HasComponent&quot;&amp;nbsp;IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.LINE1.EQP1&amp;lt;/Reference&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/References&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;uax:String&amp;gt;&amp;lt;/uax:String&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/UAVariable&amp;gt;&lt;/p&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;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;노드의 구조의 연결, 아이디 중복 등 문제가 발생한다면, 서버 구동 시 다음과 같이 에러가 납니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;에러 로그 또한 남기 때문에, 원인 분석이 가능합니다.&amp;nbsp;&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;466&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VxNOR/dJMcahDaoBk/QuZOoR1fBpc93kMJu3tCZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VxNOR/dJMcahDaoBk/QuZOoR1fBpc93kMJu3tCZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VxNOR/dJMcahDaoBk/QuZOoR1fBpc93kMJu3tCZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVxNOR%2FdJMcahDaoBk%2FQuZOoR1fBpc93kMJu3tCZ0%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;135&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;135&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;또한, 자주 만날 수 있는 에러인 BadWriteNotSupported 가 있습니다.&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;BadWriteNotSupported: &lt;br /&gt;The&amp;nbsp;server&amp;nbsp;does&amp;nbsp;not&amp;nbsp;support&amp;nbsp;writing&amp;nbsp;the&amp;nbsp;combination&amp;nbsp;of&amp;nbsp;value, &lt;br /&gt;status and timestamps provided.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;서버는 값(Value), 상태(Status), 타임스탬프(Timestamp)가 함께 포함된 쓰기 요청을 지원하지 않는다.&amp;rdquo; 의미입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 테스트 서버에서 Value만 쓰기를 허용해서 발생하는 것으로 운영 서버에서는 모두 지원하고 있습니다.&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;Value&lt;/li&gt;
&lt;li&gt;Value&amp;nbsp;+&amp;nbsp;StatusCode&lt;/li&gt;
&lt;li&gt;Value&amp;nbsp;+&amp;nbsp;Timestamp&lt;/li&gt;
&lt;li&gt;Value&amp;nbsp;+&amp;nbsp;Status&amp;nbsp;+&amp;nbsp;Timestamp&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OPC-UA 서버 구동 완료 +&amp;nbsp; Node/Tag 등록이 완료되었다면, 이제 파이썬 코드로 Tag 값을 변경해보면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1768891457527&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import asyncio
import time
from datetime import datetime, timezone
from asyncua import Client, ua

OPC_UA_ENDPOINT = &quot;opc.tcp://keun90:48010&quot;

# 서버 NamespaceArray에서 확인된 URI (당신 환경 기준)
TARGET_NAMESPACE_URI = &quot;urn:UnifiedAutomation:CppDemoServer:UANodeSetXmlImport&quot;

# 업데이트 대상 설비 경로
BASE = &quot;Factory.LINE1.EQP1&quot;

# 주기
INTERVAL_SEC = 1


async def get_ns_index(client: Client, namespace_uri: str) -&amp;gt; int:
    &quot;&quot;&quot;서버 NamespaceArray(i=2255)에서 namespace_uri의 index(ns)를 찾는다.&quot;&quot;&quot;
    ns_array = await client.get_node(
        ua.NodeId(ua.ObjectIds.Server_NamespaceArray)
    ).read_value()
    return ns_array.index(namespace_uri)


def node_id_str(ns: int, s: str) -&amp;gt; str:
    &quot;&quot;&quot;ns=&amp;lt;runtimeIndex&amp;gt;;s=&amp;lt;identifier&amp;gt; 형태로 NodeId 문자열 생성&quot;&quot;&quot;
    return f&quot;ns={ns};s={s}&quot;


async def main():
    async with Client(OPC_UA_ENDPOINT) as client:
        ns = await get_ns_index(client, TARGET_NAMESPACE_URI)

        # 태그 노드 핸들 (한 번만 만들어 재사용)
        n_status = client.get_node(node_id_str(ns, f&quot;{BASE}.Status&quot;))
        n_temp   = client.get_node(node_id_str(ns, f&quot;{BASE}.Temperature&quot;))
        n_ts     = client.get_node(node_id_str(ns, f&quot;{BASE}.LastUpdate&quot;))
        n_seq    = client.get_node(node_id_str(ns, f&quot;{BASE}.Seq&quot;))
        n_raw    = client.get_node(node_id_str(ns, f&quot;{BASE}.RawMessage&quot;))

        seq = 0
        while True:
            seq += 1

            # ---- 값 생성 (의미 없는 로직 없이 최소) ----
            status = seq % 3  # 0,1,2 반복 (STOP/RUN/ALARM 같은 상태코드라고 가정)
            temp = 36.0 + (seq % 10) * 0.1  # 36.0 ~ 36.9
            ts = datetime.now(timezone.utc)

            raw = (
                f&quot;LINE1|EQP1|status={status}|temp={temp:.2f}|&quot;
                f&quot;seq={seq}|ts={int(time.time())}&quot;
            )

            # ---- 모든 태그 업데이트 ----
            # 모든 태그 업데이트 (Value only write)
            await n_status.write_attribute(
                ua.AttributeIds.Value,
                ua.DataValue(ua.Variant(status, ua.VariantType.UInt16))
            )
            await n_temp.write_attribute(
                ua.AttributeIds.Value,
                ua.DataValue(ua.Variant(temp, ua.VariantType.Double))
            )
            await n_ts.write_attribute(
                ua.AttributeIds.Value,
                ua.DataValue(ua.Variant(ts, ua.VariantType.DateTime))
            )
            await n_seq.write_attribute(
                ua.AttributeIds.Value,
                ua.DataValue(ua.Variant(seq, ua.VariantType.UInt32))
            )
            await n_raw.write_attribute(
                ua.AttributeIds.Value,
                ua.DataValue(ua.Variant(raw, ua.VariantType.String))
            )

            print(&quot;UPDATED&quot;, BASE, &quot;seq&quot;, seq, &quot;status&quot;, status, &quot;temp&quot;, temp)
            await asyncio.sleep(INTERVAL_SEC)


if __name__ == &quot;__main__&quot;:
    asyncio.run(main())&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Stress Test&lt;/b&gt;&lt;/h4&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PLC &amp;rarr; Server &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Write 부하&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Client &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Subscription 부하&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Wrtie 부하&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;로컬 Desktop의 스펙&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwizUD/dJMcafFnkkv/pUoCQbp9667F1kdawgrKF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwizUD/dJMcafFnkkv/pUoCQbp9667F1kdawgrKF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwizUD/dJMcafFnkkv/pUoCQbp9667F1kdawgrKF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwizUD%2FdJMcafFnkkv%2FpUoCQbp9667F1kdawgrKF0%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;540&quot; height=&quot;155&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stressTest 로직 (메시지 전송/초, 업데이트 대상 Tag 4개)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;stressTest&lt;span&gt; 서비스 10개 수행&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Write 부하까지, 테스트 결과는 CPU=00으로 전혀 부하를 주지 못하는 것을 확인했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FmqPA/dJMcacPqxv8/KPdi7FcgfwnJIkBDKJMaN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FmqPA/dJMcacPqxv8/KPdi7FcgfwnJIkBDKJMaN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FmqPA/dJMcacPqxv8/KPdi7FcgfwnJIkBDKJMaN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFmqPA%2FdJMcacPqxv8%2FKPdi7FcgfwnJIkBDKJMaN0%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;586&quot; height=&quot;30&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;30&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;span style=&quot;background-color: #9feec3;&quot;&gt;Subscription 부하&lt;/span&gt;로 테스트를 이어가겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OPC-UA에서 Pub/Sub의 개념을 알아야 하며, 이 개념은 Redis 등 폭 넓게 사용됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Subscription이란, 클라이언트가 계속 Read를 반복하지 않고, 서버가 &quot;변화&quot;를 알려줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SubScription 테스트 환경은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노드에는 총 4개의 Tag가 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;총 4개의 태그에 subscription을 걸어두었습니다.&lt;/li&gt;
&lt;li&gt;총 10개의 서비스를 수행했습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Write + Subscription 테스트 결과 부하를 주지 못하는 것을 확인했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzIKX3/dJMcaaD3GbX/XKv7IZ6KfFhvpN7Y5sgcPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzIKX3/dJMcaaD3GbX/XKv7IZ6KfFhvpN7Y5sgcPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzIKX3/dJMcaaD3GbX/XKv7IZ6KfFhvpN7Y5sgcPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzIKX3%2FdJMcaaD3GbX%2FXKv7IZ6KfFhvpN7Y5sgcPk%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;681&quot; height=&quot;29&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;29&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;CPU 점유율을 높이기 위해서는 태그를 1,000 개 단위로 크게 올리는 것이 필요할 것으로 보입니다.&lt;/p&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;a href=&quot;https://github.com/KEUN-KEUN/plc_python_MessageChange/tree/main&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/KEUN-KEUN/plc_python_MessageChange/tree/main&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768898950668&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - KEUN-KEUN/plc_python_MessageChange&quot; data-og-description=&quot;Contribute to KEUN-KEUN/plc_python_MessageChange development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/KEUN-KEUN/plc_python_MessageChange/tree/main&quot; data-og-url=&quot;https://github.com/KEUN-KEUN/plc_python_MessageChange&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKkMFv/dJMb8QL5VO9/V6qjVmKA9G0ZxfOepZfPU1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bKbFBe/dJMb8RRLQA6/2c9Gji7HVT5hRRhNztybbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/KEUN-KEUN/plc_python_MessageChange/tree/main&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/KEUN-KEUN/plc_python_MessageChange/tree/main&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKkMFv/dJMb8QL5VO9/V6qjVmKA9G0ZxfOepZfPU1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bKbFBe/dJMb8RRLQA6/2c9Gji7HVT5hRRhNztybbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - KEUN-KEUN/plc_python_MessageChange&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to KEUN-KEUN/plc_python_MessageChange development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습 4에서는 아래 내용을 다루어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Pub/Sub에 대한 이벤트별 시나리오 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OPC-UA에 대한 고급 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>EQP</category>
      <category>mes</category>
      <category>OPC</category>
      <category>OPC-UA</category>
      <category>OPCUA</category>
      <category>plc</category>
      <category>설비</category>
      <category>인터페이스</category>
      <category>자동화</category>
      <category>자동화공장</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/33</guid>
      <comments>https://keun90.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 21 Jan 2026 12:40:37 +0900</pubDate>
    </item>
    <item>
      <title>26년, AI '환멸의 골짜기' 맞을 것인가</title>
      <link>https://keun90.tistory.com/34</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;카트너의 기술 사이클 그래프(Hype Cycle)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신기술이 등장하여 시장의 주류로 자리 잡기까지 거치는 일반적인 심리적&amp;middot;성숙 단계를 시각화한 것입니다.&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;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=158055&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aitimes.com/news/articleView.html?idxno=158055&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768913142672&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;가트너 &amp;quot;내년에 생성 AI '환멸의 골짜기' 찾아올 수 있어&amp;quot; - AI타임스&quot; data-og-description=&quot;가트너가 현재 생성 인공지능(AI)의 기대감이 절정에 달했으며, '과장광고(hype) 기술의 주기상' 이르면 내년에는 기대감과 관심이 급격하게 떨어질 수도 있다고&quot; data-og-host=&quot;www.aitimes.com&quot; data-og-source-url=&quot;https://www.aitimes.com/news/articleView.html?idxno=158055&quot; data-og-url=&quot;https://www.aitimes.com/news/articleView.html?idxno=158055&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b09blZ/dJMb8T9TnmH/OSKtbHw1Hod1k6xd4HB6eK/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831,https://scrap.kakaocdn.net/dn/JXUbx/dJMb8Xj9l8J/lekF7as9pPit69nR40rFgk/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831,https://scrap.kakaocdn.net/dn/bTfuUk/dJMb8XRZs3k/vxvE6zgs7yavDcswOumoWK/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831&quot;&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=158055&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aitimes.com/news/articleView.html?idxno=158055&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b09blZ/dJMb8T9TnmH/OSKtbHw1Hod1k6xd4HB6eK/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831,https://scrap.kakaocdn.net/dn/JXUbx/dJMb8Xj9l8J/lekF7as9pPit69nR40rFgk/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831,https://scrap.kakaocdn.net/dn/bTfuUk/dJMb8XRZs3k/vxvE6zgs7yavDcswOumoWK/img.png?width=1280&amp;amp;height=831&amp;amp;face=0_0_1280_831');&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;가트너 &quot;내년에 생성 AI '환멸의 골짜기' 찾아올 수 있어&quot; - AI타임스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가트너가 현재 생성 인공지능(AI)의 기대감이 절정에 달했으며, '과장광고(hype) 기술의 주기상' 이르면 내년에는 기대감과 관심이 급격하게 떨어질 수도 있다고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aitimes.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;카트너에서 26년에 환멸의 골짜기 진입할 것으로 예측할 것으로 발표했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;묻지마 투자 시대 저물고 실질적 수익을 증명하는 기업만 살아남는 시기 (&lt;span style=&quot;background-color: #f6e199;&quot;&gt;옥석 가리기&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;AI 지출 전망은 +44%로 역대 최대 규모지만, 현실적인 문제 드러나며 실패하는 기업들 나타날 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://n.news.naver.com/article/092/0002406481?lfrom=twitter&quot;&gt;https://n.news.naver.com/article/092/0002406481?lfrom=twitter&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768913652023&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[SW키트] 美 빅테크 실적 발표 임박&amp;hellip;AI에 돈 쓴 만큼 벌었나?&quot; data-og-description=&quot;밀키트는 손질된 식재료와 양념을 알맞게 담은 간편식입니다. 누구나 밀키트만 있으면 별도 과정 없이 편리하게 맛있는 식사를 할 수 있습니다. [SW키트]도 마찬가지입니다. 누구나 매일 쏟아지&quot; data-og-host=&quot;n.news.naver.com&quot; data-og-source-url=&quot;https://n.news.naver.com/article/092/0002406481?lfrom=twitter&quot; data-og-url=&quot;https://n.news.naver.com/article/092/0002406481&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0bMC5/dJMb9kTWU4d/qwKC6zu7GajjKoQ9kTFQhK/img.png?width=640&amp;amp;height=357&amp;amp;face=457_47_480_72,https://scrap.kakaocdn.net/dn/bO5WH5/dJMb9cBB3QL/8gbvPm1b0SWFMJbAjwQ5bk/img.png?width=640&amp;amp;height=357&amp;amp;face=457_47_480_72&quot;&gt;&lt;a href=&quot;https://n.news.naver.com/article/092/0002406481?lfrom=twitter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://n.news.naver.com/article/092/0002406481?lfrom=twitter&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0bMC5/dJMb9kTWU4d/qwKC6zu7GajjKoQ9kTFQhK/img.png?width=640&amp;amp;height=357&amp;amp;face=457_47_480_72,https://scrap.kakaocdn.net/dn/bO5WH5/dJMb9cBB3QL/8gbvPm1b0SWFMJbAjwQ5bk/img.png?width=640&amp;amp;height=357&amp;amp;face=457_47_480_72');&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;[SW키트] 美 빅테크 실적 발표 임박&amp;hellip;AI에 돈 쓴 만큼 벌었나?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;밀키트는 손질된 식재료와 양념을 알맞게 담은 간편식입니다. 누구나 밀키트만 있으면 별도 과정 없이 편리하게 맛있는 식사를 할 수 있습니다. [SW키트]도 마찬가지입니다. 누구나 매일 쏟아지&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;n.news.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;진짜 옥석을 가리는 시기간 온다면, AI로 돈을 버는 기업으로 더욱 돈이 몰릴 것으로 예상됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트폴리오를 AI 선두기업 + ETF로 분산한다면, 하락장을 지킬 수 있을 것입니다.&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;다가올 AI 빅테크 기업의 실적 발표 날짜에 주목해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;애플&lt;/td&gt;
&lt;td&gt;AAPL&lt;/td&gt;
&lt;td&gt;2026년 1월 29일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;맥데일리뉴스 보도 (2026년 1월 6일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;마이크로소프트&lt;/td&gt;
&lt;td&gt;MSFT&lt;/td&gt;
&lt;td&gt;2026년 1월 28일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;마이크로소프트 공식 보도자료 (2026년 1월 7일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;알파벳(구글)&lt;/td&gt;
&lt;td&gt;GOOGL&lt;/td&gt;
&lt;td&gt;2026년 2월 4일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;알파벳 IR 보도자료 (2026년 1월 8일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;아마존&lt;/td&gt;
&lt;td&gt;AMZN&lt;/td&gt;
&lt;td&gt;2026년 2월 5일 (예상)&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;시장 전망치 (Benzinga 기준)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;메타&lt;/td&gt;
&lt;td&gt;META&lt;/td&gt;
&lt;td&gt;2026년 1월 28일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;메타 IR 보도자료 (2026년 1월 14일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;엔비디아&lt;/td&gt;
&lt;td&gt;NVDA&lt;/td&gt;
&lt;td&gt;2026년 2월 25일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;모틀리풀 기사 (2025년 12월 29일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;테슬라&lt;/td&gt;
&lt;td&gt;TSLA&lt;/td&gt;
&lt;td&gt;2026년 1월 28일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;테슬라 보도자료 (2026년 1월 2일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;브로드컴&lt;/td&gt;
&lt;td&gt;AVGO&lt;/td&gt;
&lt;td&gt;2025년 12월 11일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;브로드컴 보도자료 (2025년 12월 11일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;2026년 2월 3일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;AMD 보도자료 (2026년 1월 6일)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;넷플릭스&lt;/td&gt;
&lt;td&gt;NFLX&lt;/td&gt;
&lt;td&gt;2026년 1월 20일&lt;/td&gt;
&lt;td&gt;2025년 4분기 실적&lt;/td&gt;
&lt;td&gt;넷플릭스 IR 보도자료 (2025년 12월 15일)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;전기료 및 각종 비용 부담 발표(1/14)&lt;/b&gt;&lt;/h4&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt; &quot;기업이 모두 부담하겠다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&quot;&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; text-align: start;&quot;&gt;&lt;span&gt;다른 테크 기업들도 이에 대해 대답할 예정입니다.&amp;nbsp;&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; text-align: start;&quot;&gt;&lt;span&gt;이에 따라 전력 관련주들은 더 주목받을 가능성이 커졌습니다.&amp;nbsp;&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;b&gt;10년 이상 대규모 투자 필요 발언(1/12)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메타는 데이터센터에 이어 AI인프라에 투자할 것을 발표했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소셜미디어로 많은 돈을 벌고 있지만, 투자에 대한 수익이 없어 주가를 고점 대비 -20%인 상태입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;추가 채무 은폐 손해배상 소송(1/14)&lt;/b&gt;&lt;/h4&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글, 스마트폰 AI 시장 사실상 평정한 것으로 보입니다. (애플, 삼성..)&lt;/p&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;a href=&quot;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768915245932&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;뒤쳐져도 버티던 애플, 결국 &amp;lsquo;AI 경쟁&amp;rsquo; 백기?...아이폰에 구글 제미나이 탑재&quot; data-og-description=&quot;뒤쳐져도 버티던 애플, 결국 AI 경쟁 백기...아이폰에 구글 제미나이 탑재&quot; data-og-host=&quot;www.chosun.com&quot; data-og-source-url=&quot;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&quot; data-og-url=&quot;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byNaiP/dJMb9iIA46C/sN3FWbZgpSDbJe8rpDDv5k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.chosun.com/economy/tech_it/2026/01/13/6DN6YIWJJRCCBNCTUBMWZACLI4/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byNaiP/dJMb9iIA46C/sN3FWbZgpSDbJe8rpDDv5k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;뒤쳐져도 버티던 애플, 결국 &amp;lsquo;AI 경쟁&amp;rsquo; 백기?...아이폰에 구글 제미나이 탑재&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;뒤쳐져도 버티던 애플, 결국 AI 경쟁 백기...아이폰에 구글 제미나이 탑재&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.chosun.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&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>주식&amp;middot;경제</category>
      <category>2026년주가</category>
      <category>AI</category>
      <category>미주</category>
      <category>주가</category>
      <category>주식</category>
      <category>증시</category>
      <category>카트너</category>
      <category>환멸의골짜기</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/34</guid>
      <comments>https://keun90.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 20 Jan 2026 22:22:48 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA 실습 2 - PLC 테스트 코드 &amp;rarr; OPCUA 서버 &amp;rarr; 클라이언트(Uaexpert) 확인</title>
      <link>https://keun90.tistory.com/30</link>
      <description>&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;OPCUA 서버 : Node 컨피그 작성&lt;/li&gt;
&lt;li&gt;PLC 테스트 코드 작성: OPCUA로 1초 주기, 메시지 전송&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;클라이언트(Uaexcpert) : PLC 메시지 적용 값 확인&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받은 OPCUA 서버에 node 설정 값을 추가해줍니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경로 : UaCPPServer\bin\&lt;span style=&quot;background-color: #f6e199;&quot;&gt;uanodesetimport&lt;/span&gt;.xml&amp;nbsp;&lt;/li&gt;
&lt;li&gt;구조 Factory &amp;rarr; Line &amp;nbsp;&amp;rarr; PLC&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768788949813&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- Factory &amp;gt; Line &amp;gt; PLC &amp;gt; Message Structure --&amp;gt;
&amp;lt;UAObject NodeId=&quot;ns=1;s=Factory&quot; BrowseName=&quot;1:Factory&quot;&amp;gt;
    &amp;lt;DisplayName&amp;gt;Factory&amp;lt;/DisplayName&amp;gt;
    &amp;lt;References&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot; IsForward=&quot;false&quot;&amp;gt;i=85&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line&amp;lt;/Reference&amp;gt;
    &amp;lt;/References&amp;gt;
&amp;lt;/UAObject&amp;gt;
&amp;lt;UAObject NodeId=&quot;ns=1;s=Factory.Line&quot; BrowseName=&quot;1:Line&quot;&amp;gt;
    &amp;lt;DisplayName&amp;gt;Line&amp;lt;/DisplayName&amp;gt;
    &amp;lt;References&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot; IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line.PLC&amp;lt;/Reference&amp;gt;
    &amp;lt;/References&amp;gt;
&amp;lt;/UAObject&amp;gt;
&amp;lt;UAObject NodeId=&quot;ns=1;s=Factory.Line.PLC&quot; BrowseName=&quot;1:PLC&quot;&amp;gt;
    &amp;lt;DisplayName&amp;gt;PLC&amp;lt;/DisplayName&amp;gt;
    &amp;lt;References&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=61&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot; IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.Line&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot;&amp;gt;ns=1;s=Factory.Line.PLC.Message&amp;lt;/Reference&amp;gt;
    &amp;lt;/References&amp;gt;
&amp;lt;/UAObject&amp;gt;
&amp;lt;UAVariable DataType=&quot;String&quot; NodeId=&quot;ns=1;s=Factory.Line.PLC.Message&quot; BrowseName=&quot;1:Message&quot; AccessLevel=&quot;3&quot;&amp;gt;
    &amp;lt;DisplayName&amp;gt;Message&amp;lt;/DisplayName&amp;gt;
    &amp;lt;References&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;HasTypeDefinition&quot;&amp;gt;i=63&amp;lt;/Reference&amp;gt;
        &amp;lt;Reference ReferenceType=&quot;Organizes&quot; IsForward=&quot;false&quot;&amp;gt;ns=1;s=Factory.Line.PLC&amp;lt;/Reference&amp;gt;
    &amp;lt;/References&amp;gt;
    &amp;lt;Value&amp;gt;
        &amp;lt;uax:String&amp;gt;&amp;lt;/uax:String&amp;gt;
    &amp;lt;/Value&amp;gt;
&amp;lt;/UAVariable&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;NodeId를 ns=1;로 설정해도 서버 런타임에서 NamespaceIndex가 재할당되면 변경될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 ns=1; 설정했지만, &quot; ns=7;s=Factory.Line.PLC.Message &quot; 로 설정된 것을 확인했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PLC 메시지를 보내기 전, OPCUA 서버에서 ns 값을 조회해 후 사용(+캐싱) 하면 됩니다.&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;OPCUA 서버를 다시 실행해줍니다.&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;실행 파일 경로 : UaCPPServer\bin\uaservercpp.exe&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 후 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;uanodesetimport 값이 적용되어 어떤 NamespaceIndex 가 할당 되었는지 #결과 값에서 확인이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768790193737&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import asyncio
from asyncua import Client, ua

async def check_namespaces():
    async with Client(&quot;opc.tcp://keun90:48010&quot;) as client:
        ns_array = await client.get_node(
            ua.NodeId(ua.ObjectIds.Server_NamespaceArray)
        ).read_value()

        for i, uri in enumerate(ns_array):
            print(i, uri)

if __name__ == &quot;__main__&quot;:
    asyncio.run(check_namespaces())
    
    
# 결과 값    
0 http://opcfoundation.org/UA/                                                                                          
1 urn:keun90:UnifiedAutomation:UaServerCpp                                                                                2 urn:UnifiedAutomation:PubSubConfiguration
3 http://www.unifiedautomation.com/DemoServer/                                                                          
4 urn:UnifiedAutomation:CppDemoServer:BuildingAutomation                                                                
5 http://www.unifiedautomation.com/DemoServer/AccessPermission
6 http://www.unifiedautomation.com/DemoServer/StateMachines
7 urn:UnifiedAutomation:CppDemoServer:UANodeSetXmlImport&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;uanodesetimport 가 정상적으로 적용되었으면, Uaexpert에서도 조회가 가능합니다.&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;1674&quot; data-origin-height=&quot;1125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmE9Vg/dJMcabCXkKM/a0gdWkNMgAE9xgsloLgOHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmE9Vg/dJMcabCXkKM/a0gdWkNMgAE9xgsloLgOHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmE9Vg/dJMcabCXkKM/a0gdWkNMgAE9xgsloLgOHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmE9Vg%2FdJMcabCXkKM%2Fa0gdWkNMgAE9xgsloLgOHk%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;1674&quot; height=&quot;1125&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;1125&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OPCUA로 1초 주기, 메시지 전송하는 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uanodesetimport의 ns값 + Node 구조(Factory+Line+PLC)로 통신합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Message의 Value 값을 수정하면, Uaexpert에서 조회가 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1768790641039&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import asyncio
import time
from asyncua import Client, ua

OPC_UA_ENDPOINT = &quot;opc.tcp://keun90:48010&quot;

# ✅ 서버에서 실제로 조회된 URI (ns=7에 해당)
TARGET_NAMESPACE_URI = &quot;urn:UnifiedAutomation:CppDemoServer:UANodeSetXmlImport&quot;

# ✅ XML에서 정의한 s=... 부분만 고정
NODE_IDENTIFIER = &quot;Factory.Line.PLC.Message&quot;

WRITE_INTERVAL_SEC = 1


async def resolve_node(client: Client):
    ns_array_node = client.get_node(ua.NodeId(ua.ObjectIds.Server_NamespaceArray))  # i=2255
    namespace_uris = await ns_array_node.read_value()

    ns_index = namespace_uris.index(TARGET_NAMESPACE_URI)  # 여기서 7이 나와야 정상
    node_id_str = f&quot;ns={ns_index};s={NODE_IDENTIFIER}&quot;
    return client.get_node(node_id_str)


async def plc_simulator():
    seq = 0

    while True:
        try:
            async with Client(OPC_UA_ENDPOINT) as client:
                node = await resolve_node(client)

                while True:
                    seq += 1
                    message = f&quot;PLC_MSG_{seq}_{int(time.time())}&quot;

                    dv = ua.DataValue(ua.Variant(message, ua.VariantType.String))
                    await node.write_attribute(ua.AttributeIds.Value, dv)

                    readback = await node.read_value()
                    print(&quot;WRITE:&quot;, message, &quot;/ READBACK:&quot;, readback)

                    await asyncio.sleep(WRITE_INTERVAL_SEC)

        except Exception as e:
            print(f&quot;[ERROR] {type(e).__name__}: {e}&quot;)
            await asyncio.sleep(2)


if __name__ == &quot;__main__&quot;:
    asyncio.run(plc_simulator())


# plc 테스트 환경 스크립트
# python -m venv .venv
# .\.venv\Scripts\activate
# pip install asyncua
# -- 설치 확인 
# python -c &quot;from asyncua import Client, ua; print('asyncua OK')&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;OPCUA로 서버로 메시지 전송시 아래와 같은 에러가 발생할 수 있습니다.&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;노드 아이이 매칭 오류&amp;nbsp; &lt;br /&gt;&lt;i&gt;packages\asyncua\ua\uatypes.py&quot;,&amp;nbsp;line&amp;nbsp;383,&amp;nbsp;in&amp;nbsp;check&amp;nbsp;raise&amp;nbsp;UaStatusCodeError(self.value)&amp;nbsp;asyncua.ua.uaerrors._auto.BadNodeIdUnknown:&amp;nbsp;The&amp;nbsp;node&amp;nbsp;id&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;a&amp;nbsp;node&amp;nbsp;that&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist&amp;nbsp;in&amp;nbsp;the&amp;nbsp;server&amp;nbsp;address&amp;nbsp;space.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;쓰기 거부 오류&amp;nbsp; &lt;br /&gt;&lt;i&gt;BadWriteNotSupported: &lt;/i&gt;&lt;br /&gt;&lt;i&gt;The&amp;nbsp;server&amp;nbsp;does&amp;nbsp;not&amp;nbsp;support&amp;nbsp;writing&amp;nbsp;the&amp;nbsp;combination&amp;nbsp;of&amp;nbsp;value,&amp;nbsp;status&amp;nbsp;and&amp;nbsp;timestamps&amp;nbsp;provided&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Uaexpert에서 Value 값이 정상적으로 수정되었는지 확인해봅니다.&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;아래는 PLC 테스트 코드에서 Value 값을 보낸 로그입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nA8ve/dJMcagEijcE/bFwIS1mAqO98pkAXv3OKH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nA8ve/dJMcagEijcE/bFwIS1mAqO98pkAXv3OKH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nA8ve/dJMcagEijcE/bFwIS1mAqO98pkAXv3OKH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnA8ve%2FdJMcagEijcE%2FbFwIS1mAqO98pkAXv3OKH0%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;586&quot; height=&quot;273&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;273&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;Uaexpert의 Message.Value 값을 새로고침하면 변경되는 것을 확인할 수 있습니다.&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;1526&quot; data-origin-height=&quot;1085&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUG60I/dJMcaa47NCH/6oxxaxRvewVqIFPK3mYLCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUG60I/dJMcaa47NCH/6oxxaxRvewVqIFPK3mYLCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUG60I/dJMcaa47NCH/6oxxaxRvewVqIFPK3mYLCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUG60I%2FdJMcaa47NCH%2F6oxxaxRvewVqIFPK3mYLCk%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;1526&quot; height=&quot;1085&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;1085&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;- PLC 테스트 코드를 하나 더 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Message Value 단순 구조가 아닌, 실제 Message 포맷으로 변경&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;- Pub/Sub 구조&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OPCUA 고급 설정&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>OPC</category>
      <category>OPCUA</category>
      <category>UAEXPERT</category>
      <category>설비</category>
      <category>스마트팩토리</category>
      <category>인터페이스</category>
      <category>자동화</category>
      <category>자동화공장</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/30</guid>
      <comments>https://keun90.tistory.com/30#entry30comment</comments>
      <pubDate>Mon, 19 Jan 2026 20:05:00 +0900</pubDate>
    </item>
    <item>
      <title>영화 인턴 대본</title>
      <link>https://keun90.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;But I never seem to do anything right around here.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; never seem to + 동사원형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 항상 그런 느낌이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; do anything right&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 제대로 해내다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; around here&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 물리적 장소 + 조직 관계 환경&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;And you're, like, 50 years older than me and you're deaf.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; deaf&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &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;b&gt;I happen to think you do a lot of things right.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;happen to + 동사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 우연히 ~하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 개인적인 견해를 조심스럽게 던진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;think + (that) + S + V&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 명사절&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; things&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a lot of + 복수 가산명사&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; thing = 가산명사&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a lot of = 수량 표현 -&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;I&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;bust my ass for her 14 hours a day, and she never notices.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;bust one's ass&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &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;b&gt;I hate girls who cry at work.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; girls&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 특정 한 명이 아닌, 그런 유형 전체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; who cry&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 현재시제 동사 규칙&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; s 붙는 경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 주어 = 3인칭 단수&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; he / she / it&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a girl / the girl&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; who(선행사가 단수일 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;s 안 붙는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 주어 = 복수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; they&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; girls&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; who(선행사가 복수일 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; I = 1인칭 단수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&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;345&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dekShp/dJMcabpqtWn/SDv5K7NlaWB7fnYn7Ogpvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dekShp/dJMcabpqtWn/SDv5K7NlaWB7fnYn7Ogpvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dekShp/dJMcabpqtWn/SDv5K7NlaWB7fnYn7Ogpvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdekShp%2FdJMcabpqtWn%2FSDv5K7NlaWB7fnYn7Ogpvk%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;430&quot; height=&quot;113&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;91&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;b&gt;How about if you, just as an experiment, try letting me help you.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; how about if ~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 해보는 건 어때?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; , just as an experiment,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 그냥 시험 삼아서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;삽입구 구조&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 부사구 삽입&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; try + V-ing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 시험 삼아 해보다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; try + to V&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &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;b&gt;A lot of your stress is gonna be lifted once you're out from under this mountain of worry.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; A lot of + 불가산명사&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; A lot of your stress = 단수 취급&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; be gonna be + p.p&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 곧 ~ 될 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; once 절&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; once = when / as soon as&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 미래 의미지만 현재형 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; out from under ~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 억압 부담 통제에서 벗어난&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; this mountain of worry&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 은유, 엄청남 걱정 덩어리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;And maybe you should consider leaving here at a normal hour once in a while.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;should consider + -ing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 진지하게 생각해보다 / 고려하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; consider 동명사만 가능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; at a normal hour&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; at + 시간대&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; once a while&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 가끔, 이따끔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; maybe&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 압박 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I can offer my assistance in this area.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;in this area&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 이 부분&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; In this part, I would have made the same decision.&lt;/p&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;b&gt;I would have made the same decision on this part.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; would have made&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; would have + 과거분사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 과거 사실이 아닌 가정, 추측, 평가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;과거에 (그 상황이었다면) 그렇게 했을 것이다.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I would love to, actually.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;would&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 공손함 + 톤 조절&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; I love to 직설적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; I would love to 정줌 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I just don't want her to think that I can't do my job and I need an intern to help me.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;I just don't&amp;nbsp;&lt;b&gt;&amp;nbsp;&lt;/b&gt;want&amp;nbsp; ~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 그냥 ~ 하고 싶지 않다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; want her to think&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; want + 사람 + to + 생각/행동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; can't do my job&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 내 일을 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; need an intern to help me&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 인턴의 도움이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; think A and B&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 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;b&gt;Okay, you're not gonna wanna hear this,&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; you're not gonna wanna ~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; you're not going to want to ~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; you're&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;/jər/ 열 ~&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;b&gt;but I heard women who sleep less than seven hours a night gain 38% more weight than&amp;nbsp;&lt;/b&gt;&lt;b&gt;women who sleep more than seven hours a night.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; I heard (that) ~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; ~ 라고 들었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; gain 38% more weight&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; gain weight 살이 찌다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I took a look at the data purchase patterns.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; take a look&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 숙어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; look 명사로 사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;문장에서 내가 알아야할 모든 내용의 핵심 전문가 수준으로 정리. 단어가 아닌, 사용하기 유용한 구간으로 정리해줘. 문장이 잘 들리지 않는 이유가 원어민 발음이 이유에 대해 알려줘&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>영어</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/32</guid>
      <comments>https://keun90.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 19 Jan 2026 12:51:02 +0900</pubDate>
    </item>
    <item>
      <title>SMR, AI 전력난</title>
      <link>https://keun90.tistory.com/27</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cELak5/dJMcaf6qh1R/bgUG9Y74ztsL4uKTXgYvZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cELak5/dJMcaf6qh1R/bgUG9Y74ztsL4uKTXgYvZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cELak5/dJMcaf6qh1R/bgUG9Y74ztsL4uKTXgYvZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcELak5%2FdJMcaf6qh1R%2FbgUG9Y74ztsL4uKTXgYvZ1%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;1133&quot; height=&quot;749&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;749&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;b&gt;전기 생성 방법&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&gt;대형 원전&lt;/li&gt;
&lt;li&gt;천연가스 터빈&lt;/li&gt;
&lt;li&gt;해상풍력 및 태양광 등 신재생에너지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, &lt;span style=&quot;background-color: #f6e199;&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;이러한 문제로 인해 지역별 작은 발전소를 설치해 전기 과부족을 해결하려고 합니다.&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;- 발전소의 가동률이 자유로워야 한다.&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;span style=&quot;background-color: #f6e199;&quot;&gt;SMR&lt;/span&gt;로, 가동률(20~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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;소형원자로&lt;/b&gt;의 도입이 &lt;b&gt;실패&lt;/b&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;소형원자로는 건설의 개념, 공사 기간이 길어지다 결국 2023년에 무산되었습니다.&amp;nbsp;&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;a href=&quot;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768725171461&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[이슈브리핑] 뉴스케일의 SMR 사업, 추가용량 확보 실패로 사업위기 : 에너지전환포럼 자료&quot; data-og-description=&quot;사)에너지전환포럼보도자료&amp;ldquo;사람‧환경‧미래를 위한 에너지전환&amp;rdquo;2023년 11월 07일 (화요일)즉시 보도가능합니다배포2023년 11월 07일 (화요일)문의석광훈 전문위원&amp;nbsp;admin@energytransitionkorea.org황수&quot; data-og-host=&quot;www.energytransitionkorea.org&quot; data-og-source-url=&quot;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&quot; data-og-url=&quot;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LgyxV/dJMb86nRfhZ/DtOH0NEQMuwqPMzGJWb7jk/img.jpg?width=444&amp;amp;height=629&amp;amp;face=0_0_444_629,https://scrap.kakaocdn.net/dn/v8N9R/dJMb83kmESE/jGfq77Fm7ktqrZRNdrkaZK/img.jpg?width=444&amp;amp;height=629&amp;amp;face=0_0_444_629,https://scrap.kakaocdn.net/dn/cl06PC/dJMb9dHhKrA/aE9zWldzJjj6BrlpoNc7t0/img.png?width=5130&amp;amp;height=455&amp;amp;face=0_0_5130_455&quot;&gt;&lt;a href=&quot;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.energytransitionkorea.org/brief/?bmode=view&amp;amp;idx=81067375&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LgyxV/dJMb86nRfhZ/DtOH0NEQMuwqPMzGJWb7jk/img.jpg?width=444&amp;amp;height=629&amp;amp;face=0_0_444_629,https://scrap.kakaocdn.net/dn/v8N9R/dJMb83kmESE/jGfq77Fm7ktqrZRNdrkaZK/img.jpg?width=444&amp;amp;height=629&amp;amp;face=0_0_444_629,https://scrap.kakaocdn.net/dn/cl06PC/dJMb9dHhKrA/aE9zWldzJjj6BrlpoNc7t0/img.png?width=5130&amp;amp;height=455&amp;amp;face=0_0_5130_455');&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;[이슈브리핑] 뉴스케일의 SMR 사업, 추가용량 확보 실패로 사업위기 : 에너지전환포럼 자료&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;사)에너지전환포럼보도자료&amp;ldquo;사람‧환경‧미래를 위한 에너지전환&amp;rdquo;2023년 11월 07일 (화요일)즉시 보도가능합니다배포2023년 11월 07일 (화요일)문의석광훈 전문위원&amp;nbsp;admin@energytransitionkorea.org황수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.energytransitionkorea.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;태양광과 풍력 모든 신재생에너지도 정부의 도움 없이는 현실화되기 어렵습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 SMR은 정부의 도움이 필요하지만, 미국의 트럼프는 임기내에 성과낼 수 있는 정책에 집중하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에따라 SMR이 아닌 천연가스에 초점을 맞추고 정책을 펼쳤습니다.&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;GE Vernova(천연가스 인프라)주가를 보면 트럼프의 천연가스 우선 정책이 주가에 미친 영향을 확인할 수 습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kr.investing.com/equities/ge-vernova-llc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kr.investing.com/equities/ge-vernova-llc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGudZf/dJMcabCW3ER/7FWNcDvI11q5jhghtnAp9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGudZf/dJMcabCW3ER/7FWNcDvI11q5jhghtnAp9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGudZf/dJMcabCW3ER/7FWNcDvI11q5jhghtnAp9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGudZf%2FdJMcabCW3ER%2F7FWNcDvI11q5jhghtnAp9k%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;643&quot; height=&quot;407&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;트럼프 정책&lt;/b&gt;의 변화가 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768726206588&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;트럼프 행정부, 자체 우라늄 농축 시설 구축에 4조 원 투입&quot; data-og-description=&quot;미국이 원자력 발전 등에 사용되는 핵연료인 농축 우라늄을 자체적으로 확보하기 위해 약 4조 원을 투입하...&quot; data-og-host=&quot;news.kbs.co.kr&quot; data-og-source-url=&quot;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&quot; data-og-url=&quot;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZLInH/dJMb89x7e7i/uc2j4HASk4WDESm5OqZIQ0/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/9gocW/dJMb9b3LO2u/CkJamZBV7bkpli092RaeQK/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/bnWGQX/dJMb8U8NmHT/FKcqZZ2hQkZye0kHbNIJdk/img.jpg?width=1920&amp;amp;height=1080&amp;amp;face=792_252_990_468&quot;&gt;&lt;a href=&quot;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.kbs.co.kr/news/pc/view/view.do?ncd=8451306&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZLInH/dJMb89x7e7i/uc2j4HASk4WDESm5OqZIQ0/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/9gocW/dJMb9b3LO2u/CkJamZBV7bkpli092RaeQK/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/bnWGQX/dJMb8U8NmHT/FKcqZZ2hQkZye0kHbNIJdk/img.jpg?width=1920&amp;amp;height=1080&amp;amp;face=792_252_990_468');&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;트럼프 행정부, 자체 우라늄 농축 시설 구축에 4조 원 투입&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;미국이 원자력 발전 등에 사용되는 핵연료인 농축 우라늄을 자체적으로 확보하기 위해 약 4조 원을 투입하...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;news.kbs.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;우라늄 농축시설 구축에 보조금이 SMR(고농축 우라늄)으로 넘어올 가능성도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우라늄&lt;/b&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;background-color: #f6e199;&quot;&gt;농축&lt;/span&gt;입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우라늄 원석에서 우라늄-235 비중은 0.7%-0.8% 밖에 안됩니다.&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;경수로 3%(농축 정도)&lt;/li&gt;
&lt;li&gt;SMR 20%&lt;/li&gt;
&lt;li&gt;핵무기 90%&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;우라늄은 구조적으로&amp;nbsp;&lt;b&gt;안전&lt;/b&gt;하다는 전문가 의견이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;430&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot; height=&quot;24&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td width=&quot;156&quot;&gt;&lt;b&gt;대형 원전&lt;/b&gt;&lt;/td&gt;
&lt;td width=&quot;137&quot;&gt;&lt;b&gt;SMR&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td height=&quot;24&quot;&gt;냉각&lt;/td&gt;
&lt;td&gt;펌프 의존&lt;/td&gt;
&lt;td&gt;자연순환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td height=&quot;24&quot;&gt;열 밀도&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td height=&quot;24&quot;&gt;구조&lt;/td&gt;
&lt;td&gt;복잡&lt;/td&gt;
&lt;td&gt;단순&amp;middot;일체형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td height=&quot;24&quot;&gt;사고 대응&lt;/td&gt;
&lt;td&gt;능동&lt;/td&gt;
&lt;td&gt;수동&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중국은 고온가스로 방식으로 4세대 소형원자로에 관심이 많습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/?utm_source=chatgpt.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768729319479&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;China uses nuclear reactor technology to expand global influence - Asia Times&quot; data-og-description=&quot;This article was first published by Pacific Forum. It is republished with permission. On October 13 of this year, the state media outlet China Energy News&quot; data-og-host=&quot;asiatimes.com&quot; data-og-source-url=&quot;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/?utm_source=chatgpt.com&quot; data-og-url=&quot;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/081EY/dJMb83ScxqM/uEW0kHL505UMWGDmKir440/img.jpg?width=1200&amp;amp;height=676&amp;amp;face=0_0_1200_676,https://scrap.kakaocdn.net/dn/iiqU1/dJMb87fZ3sP/130cD8fiKtfUcxPa7Fz8Ik/img.jpg?width=780&amp;amp;height=594&amp;amp;face=0_0_780_594,https://scrap.kakaocdn.net/dn/xByoj/dJMb82MwKOd/BviFd7KXyaUUkM3vxRItV0/img.jpg?width=779&amp;amp;height=439&amp;amp;face=0_0_779_439&quot;&gt;&lt;a href=&quot;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/?utm_source=chatgpt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://asiatimes.com/2025/11/china-uses-nuclear-reactor-technology-to-expand-global-influence/?utm_source=chatgpt.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/081EY/dJMb83ScxqM/uEW0kHL505UMWGDmKir440/img.jpg?width=1200&amp;amp;height=676&amp;amp;face=0_0_1200_676,https://scrap.kakaocdn.net/dn/iiqU1/dJMb87fZ3sP/130cD8fiKtfUcxPa7Fz8Ik/img.jpg?width=780&amp;amp;height=594&amp;amp;face=0_0_780_594,https://scrap.kakaocdn.net/dn/xByoj/dJMb82MwKOd/BviFd7KXyaUUkM3vxRItV0/img.jpg?width=779&amp;amp;height=439&amp;amp;face=0_0_779_439');&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;China uses nuclear reactor technology to expand global influence - Asia Times&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This article was first published by Pacific Forum. It is republished with permission. On October 13 of this year, the state media outlet China Energy News&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;asiatimes.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&gt;어떤 국가가 SMR 시장을 장악할 수 있을지 고민입니다.&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;SMR 지금은 작은 시장이지만, 에너지 패권&amp;middot;산업 표준&amp;middot;지정학이 결합된 '차세대 전략 무기'이며, 중국은 기술 선점, 미국은 시장 지배를 노리고 있다고 생각합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;용어&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&gt;SMR(Small Modular Reactor)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;소형 모듈 원자로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;차세대 원자력, 소형&amp;middot;표준화&amp;middot;모듈 조립 &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;GE Vernova&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;천연가스 기반 전력(가스터빈) + 전력망(HVDC)로 단기 성과를 만드는 에너지 인프라 기업&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우라늄-235&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;경수로(Light Water Reactor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 가장 검증된 상업용 원전 시술이며, 현재 SMR의 기술적 출발점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그레이&amp;nbsp; 마켓&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 비공식적인 경로로 거래하는 합법과 불법의 경계가 모호한 시장&lt;/p&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>AI</category>
      <category>smr</category>
      <category>경제</category>
      <category>미주</category>
      <category>인프라</category>
      <category>전력</category>
      <category>주식</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/27</guid>
      <comments>https://keun90.tistory.com/27#entry27comment</comments>
      <pubDate>Sun, 18 Jan 2026 18:52:52 +0900</pubDate>
    </item>
    <item>
      <title>2026.01.10 삼성전자, Foundary, NAND Flash, DRAM</title>
      <link>https://keun90.tistory.com/26</link>
      <description>&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vrstC/dJMcajgDZrM/f6ki4k8EEi8G3nv7RzaH20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vrstC/dJMcajgDZrM/f6ki4k8EEi8G3nv7RzaH20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vrstC/dJMcajgDZrM/f6ki4k8EEi8G3nv7RzaH20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvrstC%2FdJMcajgDZrM%2Ff6ki4k8EEi8G3nv7RzaH20%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;290&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;삼성 파운드리&amp;nbsp;&lt;/h4&gt;
&amp;nbsp; &amp;nbsp; 2025년 기준 적자, 2조 5천억&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; But, 적자가 점차 줄고 있음&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 파운드리 적자폭 변경 사항에 따라 주가 변동이 있을 것이라고 판단함&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot; data-ke-size=&quot;size20&quot;&gt;HBM&amp;nbsp;&lt;/h4&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;수요&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 2025년 대비 수요가 지속 증가하고 있음&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot; data-ke-size=&quot;size20&quot;&gt;경쟁사&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/h4&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; SK&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;ADR 상장 (+)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 다른 시장에서 거래가 가능하게 설정&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 나스닥에서 거래 가능함&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;마이크론&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 최대 규모의 반도체 제조시설 창공&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;2030년 D램 생산&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 145조 투자&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; D램 공급 안정성 미국 내에서 확보&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 미국 내 유일한 반도체 기어으로 미국 지원을 받음&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 단점&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 메모리에 편중되어 있음&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZnEG3/dJMcajgDZrL/zrNGyDO11ZIIsDOkU2SFa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZnEG3/dJMcajgDZrL/zrNGyDO11ZIIsDOkU2SFa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZnEG3/dJMcajgDZrL/zrNGyDO11ZIIsDOkU2SFa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZnEG3%2FdJMcajgDZrL%2FzrNGyDO11ZIIsDOkU2SFa1%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;616&quot; height=&quot;120&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;120&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;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot; data-ke-size=&quot;size20&quot;&gt;용어&amp;nbsp;&lt;/h4&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; 삼성 파운드리&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 고객 설계&amp;nbsp;&amp;rarr; 삼성 생산&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 경쟁사&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; TSMC, Intel Foundary&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 약점&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; TSMC 대비 신뢰 격차&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 산업 내 위치&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; AI/HPC 시대&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 고성능, 저전력 공정 수요 증가&lt;br /&gt;&amp;nbsp; &amp;nbsp; 주가&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; EPS(실적) * PER(기대감)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; NAND Flash&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 전원이 꺼져도 데이터가 유지되는 비휘발성 저장 메모리&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 사용처&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; SSD, eMMC, UFS, USB, ..&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; DRAM&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 전원이 켜져 있을 때만 동작하는 고속 휘발성 연산 메모리&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 사용처&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; PC/서버 메인 메모리&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 모바일(LPDDR)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; LPDDR (Low Power Double Data Rate DRAM)&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 저전력에 최적화된 DRAM&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; CPU 기억장치&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; HBM&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; High Bandwidth Memory&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 소속 연산용 데이터 처리&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; AI 연산에 최적화된 메모리&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; 메모리&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DRAM&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; NANd&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; GPU&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Graphic Processing Unit&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 연산장치&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; HPC&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; High Performance Computing&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 시스템 전체 개념&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; CPU + GPU&lt;/div&gt;</description>
      <category>주식&amp;middot;경제</category>
      <category>국내주식</category>
      <category>국장</category>
      <category>메모리</category>
      <category>반도체</category>
      <category>삼성</category>
      <category>주가</category>
      <category>주식</category>
      <category>하이닉스</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/26</guid>
      <comments>https://keun90.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 18 Jan 2026 16:27:23 +0900</pubDate>
    </item>
    <item>
      <title>직장인, 은퇴 분위기</title>
      <link>https://keun90.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;직장인 평균 퇴사 49~50세 .. 하지만, 지금은 더 빨라지고 있는 상황입니다.&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;정년 보장이 되는 회사는 &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;신입의 경우 경력을 쌓기조차 어려워지는 시장이 되었습니다.&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;AI의 시대, AI 오퍼레이팅이 매우 중요해지고 있습니다.&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;AI를 다루는 사람의 기술 격차는 점차 커지고 있어, 경쟁력 차이의 크기 또한 점차 커지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, AI가 일자리를 점차 차지고 있는 비중이 커짐에 따라 미래에 어떤 식으로 우리가 대처해야 할지 고민해봐야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768717047412&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;일론 머스크의 충격적인 예측: 돈은 쓸모없어지고, 로봇이 의사들의 일자리를 빼앗을 것이다.&quot; data-og-description=&quot;(댄 트리 신문) - 세계 최고 부자 억만장자가 향후 20년에 대한 놀라운 전망을 내놓았습니다. 돈은 쓸모없어지고, 로봇이 의사들의 일자리를 &amp;quot;빼앗아&amp;quot; 갈 것이며, 죽음은 단순히 프로그래밍 오류&quot; data-og-host=&quot;www.vietnam.vn&quot; data-og-source-url=&quot;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&quot; data-og-url=&quot;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JYKhy/dJMb8RjVCs4/EQF9TM7v97jhAKZE1JzGXk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=553_112_759_337,https://scrap.kakaocdn.net/dn/dqu3XP/dJMb8YXFaZX/sO14PFaUKK5zVeAzOhwdy0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=553_112_759_337,https://scrap.kakaocdn.net/dn/bTgJEJ/dJMb9iIAQHn/P31ZRieJYlAnQaXnkPd8nk/img.png?width=1200&amp;amp;height=675&amp;amp;face=487_195_593_311&quot;&gt;&lt;a href=&quot;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.vietnam.vn/ko/elon-musk-va-nhung-du-bao-soc-tien-bac-loi-thoi-robot-cuop-viec-bac-si&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JYKhy/dJMb8RjVCs4/EQF9TM7v97jhAKZE1JzGXk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=553_112_759_337,https://scrap.kakaocdn.net/dn/dqu3XP/dJMb8YXFaZX/sO14PFaUKK5zVeAzOhwdy0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=553_112_759_337,https://scrap.kakaocdn.net/dn/bTgJEJ/dJMb9iIAQHn/P31ZRieJYlAnQaXnkPd8nk/img.png?width=1200&amp;amp;height=675&amp;amp;face=487_195_593_311');&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;일론 머스크의 충격적인 예측: 돈은 쓸모없어지고, 로봇이 의사들의 일자리를 빼앗을 것이다.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;(댄 트리 신문) - 세계 최고 부자 억만장자가 향후 20년에 대한 놀라운 전망을 내놓았습니다. 돈은 쓸모없어지고, 로봇이 의사들의 일자리를 &quot;빼앗아&quot; 갈 것이며, 죽음은 단순히 프로그래밍 오류&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.vietnam.vn&lt;/p&gt;
&lt;/div&gt;
&lt;/a&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;&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;</description>
      <category>Life *</category>
      <category>은퇴</category>
      <category>직장인</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/25</guid>
      <comments>https://keun90.tistory.com/25#entry25comment</comments>
      <pubDate>Sun, 18 Jan 2026 15:29:22 +0900</pubDate>
    </item>
    <item>
      <title>설비/단말/시스템 간 인터페이스 경험(Socket,API,Message Queue,OPC-UA), 현대차 SDF 관점</title>
      <link>https://keun90.tistory.com/24</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;설비 인터페이스 선택은 기술 문제가 아니라&amp;nbsp;&lt;br /&gt;&quot;공정의 시간축&amp;middot;책임&amp;middot;실패 허용 범위&quot;를 결정하는 설계 문제다.&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;설비 제어 영역(Press/Body/Paint)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Press&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;공정 특성&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 대형 프레스(Transfer/Tandem) 연속 운전&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 사이클 타임: 수 초 단위&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 금형 교체(Smart Die Change), 소재 코일 타입&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설비 보호가 최우선(오작동 = 수십억 손실)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;데이터 특성&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 스트로크 수, 하중, 속도, 금형 상태&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 불량은 즉시 차단, 분석은 사후&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 실시간 제어 데이터&amp;nbsp;&amp;ne; 생산/품질 데이터&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Press는 SDF에서 제어와 데이터 분리가 가장 엄격해야 하는 공정&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 인터페이스 설계(역할 분리)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Socket / Fieldbus(제어 전용)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 연결&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 프레스 &amp;lt;-&amp;gt; PLC &amp;lt;-&amp;gt; 안전 제어 시스템&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 데이터&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 스트로크 인터록&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 하중 초과, 비상정지&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 원칙&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; MES / IT 시스템 접근 절대 금지&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 제어망 폐쇄(OT Network)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA(설비 상태 표준화)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 연결&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; PLC -&amp;gt; OPC-UA Server -&amp;gt; Edge&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 데이터&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Stroke Count&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Press Load Curve 요약값&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Die Status / Alarm Code&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설계 포인트&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 공정 의미를 가진 값만 노출&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설비 상태의 표준 인터페이스&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Message Queue(SDF 핵심)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 연결&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Edge -&amp;gt; MQ -&amp;gt; MES / Quality / Data Platform&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 예: PRESS_STROKE_COMPLETED..&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 특징&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 비동기&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 재처리 가능&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 라인 확장 시 구조 변경 없음&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Body&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 로봇 용접 중심&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 차체 품질의 결정 구간&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 인터페이스&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 제어: Socket&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 상태: OPC-UA&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 생산&amp;middot;추적: Message Queue&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 실적&amp;middot;품질: API&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Paint&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; ...&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; Assembly&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; ...&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ohoGa/dJMcahJWKm6/BKWDaSPFmlq4qKDFKSWxy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ohoGa/dJMcahJWKm6/BKWDaSPFmlq4qKDFKSWxy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ohoGa/dJMcahJWKm6/BKWDaSPFmlq4qKDFKSWxy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FohoGa%2FdJMcahJWKm6%2FBKWDaSPFmlq4qKDFKSWxy0%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;107&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;용어 정리&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp; OPC-UA(Open Platform Communication Unified Architecture)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 보안이 내장된, 의미 중심의 산업용 데이터 인터페이스 표준&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 산업 설비&amp;middot;시스템 간 데이터를 표준화된 정보 모델 + 보안 통신으로 교환하는 프로토콜.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 이기종 장비(PLC, 로봇, 센서) &amp;lt;-&amp;gt; 상위 시스템(MES, SCADA, ERP) 간 의미 있는 데이터 연결.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 아키텍처 핵심 용어&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA Server&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설비/시스템의 데이터를 제공하는 주체.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 예: PLC, 로봇 컨트롤러, 설비 게이트웨이&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;OPC-UA Client&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Server에 접속해 데이터를 읽고/구독/제어.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 예: MES, SCADA, 데이터 수집 서비스&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Endpoint&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Client가 접속하는 Server의 접점(URL + 보안 정책)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Session&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Client-Server간 논리적 연결 단위(인증&amp;middot;권한 포함)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 정보 모델(Information Model)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Node&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA 데이터의 최소 단위(객체, 변수, 메서드 등)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Nodeld&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Node를 식별하는 고유 ID&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Object Node&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설비, 장비, 공정 같은 실체 개념&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Variable Node&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 실제 값(온도, 속도, 상태 등)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Method Node&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 설비 제어 명령(Reset, Start 등)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Reference&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Node 간 관계(구조&amp;middot;의미 연결)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Address Space&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 모든 Node와 Reference로 구성된 전체 데이터 맵&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA는 값(Value) 만이 아니라 의미(Structure)를 함께 전달.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 통신 방식&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Read/Write&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Subscription&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 변경 시점에 이벤트 기반으로 데이터 수신&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Monitored Item&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Subscription에 포함된 감시 대상 변수.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Sampling Interval&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Server가 값을 확인하는 주기&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Publishing Interval&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Client로 전송하는 주기&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 보안&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Security Policy&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 암호화 알고리즘 규칙 집합&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Message Security Mode&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; None / Sign / SignAndEncrypt&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Certificate(X.509)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Client&amp;middot;Server 상호 인증 수단&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; User Authentication&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Anonymous / Username / Certificate&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA는 설계 단계부터 보안이 내장됨.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 데이터 타입 &amp;amp; 품질&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DataType&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Boolean, Int, Float, String, Structure 등&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Value + StatusCode + Timestamp&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA&amp;nbsp; 데이터의 3요소&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; StatusCode: 갑의 신뢰도&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Timestamp: 측정 시점&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 확장 개념&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Companion Specification&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 산업별 표준 정보 모델 (로봇, 자동차, 반도체 등)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA PubSub&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Client-Server 구조 없이 메시지 브로커/멀티캐스트 기반 통신&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Edge Gateway&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; PLC &amp;lt;-&amp;gt; IT 시스템 사이 중계&amp;middot;변환 역할&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT 제조</category>
      <category>mes</category>
      <category>sdf</category>
      <category>공장자동화</category>
      <category>설비</category>
      <category>스마트팩토리</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/24</guid>
      <comments>https://keun90.tistory.com/24#entry24comment</comments>
      <pubDate>Sat, 17 Jan 2026 09:35:06 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA와 개념(MES)</title>
      <link>https://keun90.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OPC(OLE for Process Control)&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 표준화된 통신 프로토콜&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;b&gt;(구) OPCDA, OPC Classic&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; OPC-DA&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 윈도우 환경에서만 구동&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DCOM 통신, 포트 지정&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DCOM(Distributed Component Object Model)&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Window 전용 분산 객체 통신 기술&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-DA가 네트워크, 방화벽, 보안 문제를 자주 일으키는 근본 원인&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 외부에서 접속가능한 설정이 까다로움&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;b&gt;(신) OPCUA(Open Platform Communications Unified Architecture)&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;OPC 목적&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; PLC는 각각의 프로토콜로 통신을 합니다. 결국 PLC의 데이터를 상위 시스템으로 인터페이스를&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 하기 위해서는 PLC 별로 통신 드라이브를 구축해야 합니다.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA는 PLC 통신의 중계 역할을 하게 됩니다.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch6UUn/dJMcadAIiRB/gu7kR9gcrQ6xfMdn8JhoWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch6UUn/dJMcadAIiRB/gu7kR9gcrQ6xfMdn8JhoWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch6UUn/dJMcadAIiRB/gu7kR9gcrQ6xfMdn8JhoWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch6UUn%2FdJMcadAIiRB%2Fgu7kR9gcrQ6xfMdn8JhoWK%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;583&quot; height=&quot;359&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/b&gt;
&lt;div&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; OPC-UA 특징&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 플랫폼 독립성&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Window, Linux, Android, iOS 다양한 운영체제에서 사용&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 센서, 클라우드까지 적용 가능한 서비스 지향 아키텍처&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 단일 통합 프레임워크&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DA, HDA, A&amp;amp;E 등 여러 규격을 하나의 정보 모델로 통합&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 클라이언트는 단일한 서비스 집합으로 다양한 데이터 접근&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; DA:&amp;nbsp;OPC Classic&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; HDA: 이력 데이터&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; A&amp;amp;E: 알람/이벤트&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 다양한 통신 바인딩&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 바이너리 프로토콜(바이너리 TCP) 표준&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 낮은 오버헤드로 빠른 통신 제공&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; HTTP/HTTPS 웹 서비스 방식&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 방화벽과 프록시 환경에서 쉽게 사용 가능&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 단일 포트 통신&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 하나의 TCP 포트만 사용&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 방화벽 설정 유리&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 정보 모델링 및 확장성&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 표준화된 정보 모델(객체 모델)을 통해 복잡한 데이터 구조를 표현&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 새로운 기능으 ㄹ추가해도 기존 응용 프로그램에 영향을 주지 않음&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 산업 자동화 및 IIoT 연계&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 센서에서 클라우드까지 데이터 교환 지원&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Pub/Sub 통신을 포함한 다양한 통신 패턴 제공&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; IIoT(Industrial Internet of Things)&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 확장성&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 소규모부터 대규모 환경에 적용 가능함&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 클라우드 가능&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 보안성&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 웹 서비스 보안 표준을 사용하여 메시지를 보호하며, 데이터 전송 시 높은 수준의 보안 제공&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; X.509 인증서 기반의 보안 도입&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 클라이언트-서버&amp;nbsp; 간&amp;nbsp; 통신 암호화하고 서명함으로써 데이터 위변조나 무단 접근 방지함&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 상호 운영성&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 다양한 벤더의 장비와 시스템 간의 원활한 통신을 가능하게 함&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-DA vs OPC-UA 통신 구조&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: center;&quot; data-original-attrs=&quot;{&amp;quot;style&amp;quot;:&amp;quot;&amp;quot;}&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qGg0M/dJMcadAIiRA/UdZEdNxCqCKgVyKHPTK8p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qGg0M/dJMcadAIiRA/UdZEdNxCqCKgVyKHPTK8p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qGg0M/dJMcadAIiRA/UdZEdNxCqCKgVyKHPTK8p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqGg0M%2FdJMcadAIiRA%2FUdZEdNxCqCKgVyKHPTK8p0%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;576&quot; height=&quot;257&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC-UA (Application + Session 통합 계층)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 데이터 모델&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 세션 관리&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 보안(인증서, 암호화)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 서비스 호출(Read/Write/Subscribe)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; COM / RPC 없음&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OS 독립&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC API&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; MES/SCADA가 사용하는 OPC 인터페이스&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Read / Write / Subscribe 제공&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Application Layer (COM / DCOM)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 분산 객체 호출&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; OPC Server의 객체를 원격에서 호출&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Session Layer(RPC)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 원격 프로시저 호출 관리&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 세션 상태 유지&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Transport Layer(TCP/UDP)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 실제 데이터 전송&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Network Layer(IP)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 주소 지정, 라우팅&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Data Link Layer(Ethernet Framing)&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 프레임 전달&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; Physical Layer(Ethernet)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 물리적 신호 전송&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;MES와 OPC-UA&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; OPC-UA서버는 기기의 하드웨어 통신 프로토콜을 표준 OPC 인터페이스로 변환하고, 주소 공간&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Address Space)이라는 구조화된 데이터 모델을 외부에 제공한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; MES 클라이언트는 이 주소공간의 태크(Tag)들을 탐색(browse)하여 필요한 데이터를 구독하거나&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; 읽어올 수 있다. 데이터가 객체 단위로 있어, 각각의 데이터가 무엇을 의미하는지 쉽게 파악할 수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;있다는 장점이 있다.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;b&gt;이해하기 좋은 사이트&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;a href=&quot;https://blog.naver.com/suresofttech/221394318179?trackingCode=blog_bloghome_searchlist&quot;&gt;https://blog.naver.com/suresofttech/221394318179?trackingCode=blog_bloghome_searchlist&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;b&gt;OPC-UA 소개 주소&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;div&gt;&lt;a href=&quot;https://maplesystems.com/industrial-internet-of-things-iiot/opcua/?srsltid=AfmBOorcm9__5PNfwN2sUe5klnKDLY4Ut6h7JICzJwsMeNDG1GAiOoAB#:~:text=OPC%20UA%20is%20supported%20by,and%20how%20to%20use%20it&quot;&gt;https://maplesystems.com/industrial-internet-of-things-iiot/opcua/?srsltid=AfmBOorcm9__5PNfwN2sUe5klnKDLY4Ut6h7JICzJwsMeNDG1GAiOoAB#:~:text=OPC%20UA%20is%20supported%20by,and%20how%20to%20use%20it&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;b&gt;OPC-UA 소개 유투브 !!!&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=D3JnN1GBnGc&quot;&gt;https://www.youtube.com/watch?v=D3JnN1GBnGc&lt;/a&gt;&lt;/div&gt;</description>
      <category>IT 제조</category>
      <category>If</category>
      <category>mes</category>
      <category>OPC-UA</category>
      <category>SCADA</category>
      <category>설비</category>
      <category>인터페이스</category>
      <category>통신</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/23</guid>
      <comments>https://keun90.tistory.com/23#entry23comment</comments>
      <pubDate>Sat, 17 Jan 2026 09:28:07 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA 실습 1 - 서버, 클라이언트 연동</title>
      <link>https://keun90.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;OPC-UA 실습을 위한 Server, Client를 다운받는다.&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;계정 메일 주소는 &lt;span style=&quot;color: #000000; background-color: #ffc9af;&quot;&gt;gmail&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;a href=&quot;https://documentation.unified-automation.com/uaexpert/1.4.2/html/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;ttps://documentation.unified-automation.com/uaexpert/1.4.2/html/index.html&lt;/a&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;설치 후 uaexpert.exe 실행하면 다음과 같은 UI를 확인할 수 있다.&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;1885&quot; data-origin-height=&quot;1130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pkiHe/dJMcaiPyDsk/cMJjUKn6klJflLw4t6rAu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pkiHe/dJMcaiPyDsk/cMJjUKn6klJflLw4t6rAu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pkiHe/dJMcaiPyDsk/cMJjUKn6klJflLw4t6rAu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpkiHe%2FdJMcaiPyDsk%2FcMJjUKn6klJflLw4t6rAu1%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;1885&quot; height=&quot;1130&quot; data-origin-width=&quot;1885&quot; data-origin-height=&quot;1130&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;652&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.7442%;&quot; width=&quot;120&quot; height=&quot;43&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구분&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;항목&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중요도&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중요한 이유 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;핵심만&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.7442%;&quot; rowspan=&quot;2&quot; width=&quot;120&quot; height=&quot;158&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SUBJECT&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Common Name (CN)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;middot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;middot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증서 목록에서 운영자가 클라이언트를 구분하기 위한 식별자&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;72&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Country (C)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일부 서버&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안 정책에서 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;X.509 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 검증을 통과하기 위해 필요&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.7442%;&quot; rowspan=&quot;3&quot; width=&quot;120&quot; height=&quot;244&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OPC UA INFO&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application URI&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최상&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버가 클라이언트를 식별하고 신뢰 여부를 판단하는 기준 값&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;72&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Domain Names&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버가 인증서와 실제 실행 호스트의 일치 여부를 검증할 때 사용&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;72&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP Addresses&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기반 검증 환경에서 실행 주체 확인에 사용&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.7442%;&quot; rowspan=&quot;4&quot; width=&quot;120&quot; height=&quot;275&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CERT SETTING&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RSA Key Strength&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안 정책 충족 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화 성능 균형을 위한 기준&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;59&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Signature Algorithm&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버가 허용하는 암호 알고리즘 조건 충족 여부&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;72&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Certificate Validity&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만료 시 즉시 통신 불가&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1163%;&quot; width=&quot;166&quot; height=&quot;72&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Private Key Password&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.32557%;&quot; width=&quot;68&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.5813%;&quot; width=&quot;298&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개인키 유출 시 클라이언트 위&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;middot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변조 방지&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;정상적으로 Client 가 작동했다면, 이제 Server를 다운받아 구동시켜 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;899&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uvZL4/dJMcafehEYo/l3Rc7rkW4I4SFp8CQfcEl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uvZL4/dJMcafehEYo/l3Rc7rkW4I4SFp8CQfcEl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uvZL4/dJMcafehEYo/l3Rc7rkW4I4SFp8CQfcEl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuvZL4%2FdJMcafehEYo%2Fl3Rc7rkW4I4SFp8CQfcEl0%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;899&quot; height=&quot;510&quot; data-origin-width=&quot;899&quot; data-origin-height=&quot;510&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;다운로드 후 uaservercpp.exe를 실행하면 cmd 창이 나타난다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Java, Python 여러 가지 버전을 찾아 구동시켜볼 수 있다. Java를 다운받은 후 코드를 보았지만, 내용을 이해하기는 쉽지 않다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1770&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2giS7/dJMcabXfuBB/RGv8mMR8dg5twdhRg4rM51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2giS7/dJMcabXfuBB/RGv8mMR8dg5twdhRg4rM51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2giS7/dJMcabXfuBB/RGv8mMR8dg5twdhRg4rM51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2giS7%2FdJMcabXfuBB%2FRGv8mMR8dg5twdhRg4rM51%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;1770&quot; height=&quot;773&quot; data-origin-width=&quot;1770&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Client에서 방금 구동한 Server를 추가해보자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Add Server] &amp;rarr; [Double click to Add Server] &amp;rarr; Server URLs 입력&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결 가능한 목록이 아래와 같이 None- / Basic- / Aes- 등 목록이 나타난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;863&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6f6GZ/dJMcabbR9gv/09e9Zxx40JMTvDawr9LCm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6f6GZ/dJMcabbR9gv/09e9Zxx40JMTvDawr9LCm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6f6GZ/dJMcabbR9gv/09e9Zxx40JMTvDawr9LCm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6f6GZ%2FdJMcabbR9gv%2F09e9Zxx40JMTvDawr9LCm1%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;722&quot; height=&quot;863&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;863&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;None- 을 클릭하면 증명 알림이 발생한다.&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;604&quot; data-origin-height=&quot;733&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brKp1s/dJMcagRM3qG/KCfe7QmGjjf8kuDDleqkK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brKp1s/dJMcagRM3qG/KCfe7QmGjjf8kuDDleqkK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brKp1s/dJMcagRM3qG/KCfe7QmGjjf8kuDDleqkK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrKp1s%2FdJMcagRM3qG%2FKCfe7QmGjjf8kuDDleqkK0%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;733&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;733&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;커낵션이 성공하면 Serves 하위에 나타난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQHpJv/dJMcafrOlet/Vt5sYYv0dWckncKQLL3vVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQHpJv/dJMcafrOlet/Vt5sYYv0dWckncKQLL3vVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQHpJv/dJMcafrOlet/Vt5sYYv0dWckncKQLL3vVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQHpJv%2FdJMcafrOlet%2FVt5sYYv0dWckncKQLL3vVk%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;438&quot; height=&quot;158&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;158&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>IT 제조</category>
      <category>OPC</category>
      <category>OPCUA</category>
      <category>smartfactory</category>
      <category>설비통신</category>
      <category>스마트팩토리</category>
      <category>통신</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/22</guid>
      <comments>https://keun90.tistory.com/22#entry22comment</comments>
      <pubDate>Fri, 16 Jan 2026 19:31:32 +0900</pubDate>
    </item>
    <item>
      <title>Claude 기본 활용 방법 2 - 서브에이전트(SubAgent)</title>
      <link>https://keun90.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcpYEY/dJMcag5kwDO/83Ui2VkZNJesfieLQMoEg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcpYEY/dJMcag5kwDO/83Ui2VkZNJesfieLQMoEg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcpYEY/dJMcag5kwDO/83Ui2VkZNJesfieLQMoEg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcpYEY%2FdJMcag5kwDO%2F83Ui2VkZNJesfieLQMoEg1%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;420&quot; height=&quot;261&quot; data-origin-width=&quot;420&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서브에이전트(SubAgent) 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;markdown 파일을 활용해 서브에이전트를 생성해 AI작업 수행한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;아래 경로 (.claude\agents 폴더 하위) 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by7OSI/dJMcacu44zw/s35C0dG4fYXrTSxLnjgTk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by7OSI/dJMcacu44zw/s35C0dG4fYXrTSxLnjgTk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by7OSI/dJMcacu44zw/s35C0dG4fYXrTSxLnjgTk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby7OSI%2FdJMcacu44zw%2Fs35C0dG4fYXrTSxLnjgTk1%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;254&quot; height=&quot;115&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어는 아래와 같이 CLI에 입력하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768439328466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@agent-docs-architect 를 사용해 현재 코드베이스에 대한 문서화를 하고, READE.md 파일에 저장해줘&lt;/code&gt;&lt;/pre&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;.md 파일에 포함할 권장 사항&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 체크리스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 필수 요구 사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 접근 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 테스트 방버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 사용할 MCP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DO, DO NOT (*보안)&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;검증된 서브에이전트 활용 방안&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;bull;&amp;nbsp;&lt;a href=&quot;https://github.com/contains-studio/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/contains-studio/agents&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;bull;&amp;nbsp;&lt;a href=&quot;https://github.com/wshobson/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/wshobson/agents&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;bull;&amp;nbsp;&lt;a href=&quot;https://github.com/VoltAgent/awesomeclaude-code-subagents&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/VoltAgent/awesomeclaude-code-subagents&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;bull;&amp;nbsp;&lt;a href=&quot;https://github.com/0xfurai/claude-codesubagents&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/0xfurai/claude-codesubagents&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;bull;&amp;nbsp;&lt;a href=&quot;https://github.com/iannuttall/claude-agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/iannuttall/claude-agents&lt;/a&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;h3 data-ke-size=&quot;size23&quot;&gt;서브에이전트(SubAgent) 장점&lt;/h3&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;20만 토큰, 에이전트 마다 할당한다&amp;nbsp;&lt;/li&gt;
&lt;li&gt;결과를 메인 에이전트가 받는다&lt;/li&gt;
&lt;li&gt;/context 명령어로 토큰 사용량 확인 가능하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xuGOU/dJMcaf6pcED/lmvk1QoASrWGzokRZ93r70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xuGOU/dJMcaf6pcED/lmvk1QoASrWGzokRZ93r70/img.png&quot; data-alt=&quot;subagents를 활용하면 Free Space의 사용량이 많이 증가하지 않는다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xuGOU/dJMcaf6pcED/lmvk1QoASrWGzokRZ93r70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxuGOU%2FdJMcaf6pcED%2Flmvk1QoASrWGzokRZ93r70%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;705&quot; height=&quot;264&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;subagents를 활용하면 Free Space의 사용량이 많이 증가하지 않는다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT 기술/AI</category>
      <category>AI</category>
      <category>Claude</category>
      <category>subagent</category>
      <category>subagents</category>
      <category>바이브코딩</category>
      <category>서브에이전트</category>
      <category>클로드</category>
      <category>클로드코딩</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/21</guid>
      <comments>https://keun90.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 15 Jan 2026 22:02:58 +0900</pubDate>
    </item>
    <item>
      <title>Claude 기본 활용 방법 1</title>
      <link>https://keun90.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;슬래시 명령어&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 예제 경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; git clone &lt;a href=&quot;https://github.com/stepanowon/test-svc&quot;&gt;https://github.com/stepanowon/test-svc&lt;/a&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;목록&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;/init&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 프로젝트(현재의 디렉토리()의 구조를 자동으로 분석해서 CLAUDE.mcd 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; CLAUDE.md&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;AI 모델이 이 프로젝트를 이해하기 위한 핵심 컨텍스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&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; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&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; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;수준별 유형&lt;/span&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; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 프로젝트 수준의 메모리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; /init에 의해 생성&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt; git 과 같은 도구를 이용해 소스 제어되는 메모리&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &amp;nbsp; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp; 다른 개발자와 공유&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; CLAUDE.local.md&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; .gitignore에 포함시켜 소스제어 되지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 개발자 개인 메모리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; ~/.claude/CLAUDE.md&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&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; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 로컬 머신의 모든 프로젝트에 적용되는 전역 규칙&amp;nbsp;&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; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 지침별 우선순위&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; System Prompt &amp;gt; 프로젝트 수준의 ./CLAUDE.md &amp;gt; 사용자 수준의 ~/.claude/CLAUDE.md&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/status&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;claude code의 상태 확인&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/model&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;현재 사용중인 모델 확인, 모델 변경&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Default | Opus&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; * 일상 코딩은 Sonnet 사용 권장 !!!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; * 설계 Opus&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/clear&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;대화 기록 삭제함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;삭제된 기록은 컨텍스트에 포함되지 않음&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/doctor&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;설치 상태 확인&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/compact [args]&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;args 지침을 반영해 대화 내용 압축 &amp;rarr; 토큰 사용량 줄여줌&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(75%이상 넘어가면 자동으로 실행)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Chat 창이 길어지면 토근 사용량이 증가함&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/permissions&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;권한 모드&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;default&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;표준동작, 도구가 첫번째 사용될 때 권한을 요청함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acceptEdits&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;현재 세션에 대해 파일 편집 권한을 자동으로 요청함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;plan&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Claude가 분석만 수행하고 파일을 수정하거나 명령을 실행하지 않음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bypassPermissions&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;모든 권한 프롬프트를 패스함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;권한&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Allow&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ask&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Deny&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Workspace&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;도구&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Bash,, MCP..&amp;nbsp;&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;&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>IT 기술/AI</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/20</guid>
      <comments>https://keun90.tistory.com/20#entry20comment</comments>
      <pubDate>Thu, 15 Jan 2026 19:50:24 +0900</pubDate>
    </item>
    <item>
      <title>Claude 개발 환경 구축 가이드 (Windows 기준)</title>
      <link>https://keun90.tistory.com/18</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8Ccc6/dJMb99SEb3S/EFRB8kyw69RfKKMqzDQjF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8Ccc6/dJMb99SEb3S/EFRB8kyw69RfKKMqzDQjF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8Ccc6/dJMb99SEb3S/EFRB8kyw69RfKKMqzDQjF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Ccc6%2FdJMb99SEb3S%2FEFRB8kyw69RfKKMqzDQjF1%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;1154&quot; height=&quot;669&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;201&quot; data-start=&quot;179&quot; data-ke-size=&quot;size26&quot;&gt;1. Node.js 환경 (nvm)&lt;/h2&gt;
&lt;h3 data-end=&quot;209&quot; data-start=&quot;203&quot; data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;270&quot; data-start=&quot;210&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;239&quot; data-start=&quot;210&quot;&gt;&lt;b&gt;Claude Code는 Node.js 기반&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;270&quot; data-start=&quot;240&quot;&gt;Node 버전 충돌 방지를 위해 &lt;b&gt;nvm 사용&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;278&quot; data-start=&quot;272&quot; data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;363&quot; data-start=&quot;279&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;363&quot; data-start=&quot;279&quot;&gt;다운로드&lt;br /&gt;&lt;a href=&quot;https://github.com/coreybutler/nvm-windows/releases&quot;&gt;https://github.com/coreybutler/nvm-windows/releases&lt;/a&gt;&lt;br /&gt;&amp;rarr; nvm-setup.exe&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;375&quot; data-start=&quot;365&quot; data-ke-size=&quot;size23&quot;&gt;기본 명령어&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;nvm list &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;nvm install 22 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;nvm use 22&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;427&quot; data-start=&quot;424&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;444&quot; data-start=&quot;429&quot; data-ke-size=&quot;size26&quot;&gt;2. Python 환경&lt;/h2&gt;
&lt;h3 data-end=&quot;452&quot; data-start=&quot;446&quot; data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;530&quot; data-start=&quot;453&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;503&quot; data-start=&quot;453&quot;&gt;일부 &lt;b&gt;MCP(Model Context Protocol)&lt;/b&gt; 도구는 Python 기반&lt;/li&gt;
&lt;li data-end=&quot;530&quot; data-start=&quot;504&quot;&gt;Claude Code 확장 활용을 위해 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;538&quot; data-start=&quot;532&quot; data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;583&quot; data-start=&quot;539&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;583&quot; data-start=&quot;539&quot;&gt;다운로드&lt;br /&gt;&lt;a href=&quot;https://www.python.org/downloads/&quot;&gt;https://www.python.org/downloads/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;594&quot; data-start=&quot;585&quot; data-ke-size=&quot;size23&quot;&gt;권장 버전&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;615&quot; data-start=&quot;595&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;615&quot; data-start=&quot;595&quot;&gt;&lt;b&gt;Python 3.13 이상&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;623&quot; data-start=&quot;617&quot; data-ke-size=&quot;size23&quot;&gt;확인&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;python --version&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;657&quot; data-start=&quot;654&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;676&quot; data-start=&quot;659&quot; data-ke-size=&quot;size26&quot;&gt;3. Claude Code&lt;/h2&gt;
&lt;h3 data-end=&quot;684&quot; data-start=&quot;678&quot; data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;709&quot; data-start=&quot;685&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;709&quot; data-start=&quot;685&quot;&gt;AI 기반 코드 작성&amp;middot;리팩토링&amp;middot;분석 도구&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;717&quot; data-start=&quot;711&quot; data-ke-size=&quot;size23&quot;&gt;조건&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;748&quot; data-start=&quot;718&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;748&quot; data-start=&quot;718&quot;&gt;&lt;b&gt;Claude Pro Plan 이상 구독 필요&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;756&quot; data-start=&quot;750&quot; data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;814&quot; data-start=&quot;757&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;814&quot; data-start=&quot;757&quot;&gt;공식 페이지&lt;br /&gt;&lt;a href=&quot;https://claude.com/ko-kr/product/claude-code&quot;&gt;https://claude.com/ko-kr/product/claude-code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;npm install -g @anthropic-ai/claude-code&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;873&quot; data-start=&quot;870&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;892&quot; data-start=&quot;875&quot; data-ke-size=&quot;size26&quot;&gt;4. IDE (개발 도구)&lt;/h2&gt;
&lt;h3 data-end=&quot;937&quot; data-start=&quot;894&quot; data-ke-size=&quot;size23&quot;&gt;▸ &lt;span&gt;&lt;span&gt;Cursor&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;995&quot; data-start=&quot;938&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;955&quot; data-start=&quot;938&quot;&gt;AI 코딩에 최적화된 IDE&lt;/li&gt;
&lt;li data-end=&quot;968&quot; data-start=&quot;956&quot;&gt;실무에서 많이 사용&lt;/li&gt;
&lt;li data-end=&quot;995&quot; data-start=&quot;969&quot;&gt;단점: &lt;b&gt;가격이 비쌈&lt;/b&gt;, 사용 모델 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1040&quot; data-start=&quot;997&quot; data-ke-size=&quot;size23&quot;&gt;▸ &lt;span&gt;&lt;span&gt;Visual Studio Code&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1079&quot; data-start=&quot;1041&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1049&quot; data-start=&quot;1041&quot;&gt;범용 IDE&lt;/li&gt;
&lt;li data-end=&quot;1062&quot; data-start=&quot;1050&quot;&gt;확장성&amp;middot;안정성 우수&lt;/li&gt;
&lt;li data-end=&quot;1079&quot; data-start=&quot;1063&quot;&gt;대부분의 개발 환경과 호환&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1084&quot; data-start=&quot;1081&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1100&quot; data-start=&quot;1086&quot; data-ke-size=&quot;size26&quot;&gt;5. 계정 및 플랫폼&lt;/h2&gt;
&lt;h3 data-end=&quot;1145&quot; data-start=&quot;1102&quot; data-ke-size=&quot;size23&quot;&gt;▸ &lt;span&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1200&quot; data-start=&quot;1146&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1169&quot; data-start=&quot;1146&quot;&gt;Git Remote Repository&lt;/li&gt;
&lt;li data-end=&quot;1185&quot; data-start=&quot;1170&quot;&gt;소스 관리 및 협업 필수&lt;/li&gt;
&lt;li data-end=&quot;1200&quot; data-start=&quot;1186&quot;&gt;&lt;b&gt;계정 생성 필수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1205&quot; data-start=&quot;1202&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1250&quot; data-start=&quot;1207&quot; data-ke-size=&quot;size23&quot;&gt;▸ &lt;span&gt;&lt;span&gt;Supabase&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1291&quot; data-start=&quot;1251&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1291&quot; data-start=&quot;1251&quot;&gt;&lt;a href=&quot;https://supabase.com/dashboard/sign-up&quot;&gt;https://supabase.com/dashboard/sign-up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1299&quot; data-start=&quot;1293&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1394&quot; data-start=&quot;1300&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1338&quot; data-start=&quot;1300&quot;&gt;대표적인 &lt;b&gt;BaaS (Backend-as-a-Service)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1366&quot; data-start=&quot;1339&quot;&gt;DB, Auth, Storage, API 제공&lt;/li&gt;
&lt;li data-end=&quot;1394&quot; data-start=&quot;1367&quot;&gt;&lt;b&gt;소규모 프로젝트 / 테스트 단계에 적합&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1399&quot; data-start=&quot;1396&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1444&quot; data-start=&quot;1401&quot; data-ke-size=&quot;size23&quot;&gt;▸ &lt;span&gt;&lt;span&gt;Vercel&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1472&quot; data-start=&quot;1445&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1472&quot; data-start=&quot;1445&quot;&gt;&lt;a href=&quot;https://vercel.com/signup&quot;&gt;https://vercel.com/signup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1480&quot; data-start=&quot;1474&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1562&quot; data-start=&quot;1481&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1502&quot; data-start=&quot;1481&quot;&gt;프론트엔드 중심의 빠른 배포 플랫폼&lt;/li&gt;
&lt;li data-end=&quot;1538&quot; data-start=&quot;1503&quot;&gt;&lt;b&gt;Serverless Function 기반 백엔드 지원&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1562&quot; data-start=&quot;1539&quot;&gt;GitHub / GitLab 연동 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1590&quot; data-start=&quot;1564&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Serverless Function 개념&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1695&quot; data-start=&quot;1591&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1611&quot; data-start=&quot;1591&quot;&gt;요청 시에만 실행되는 백엔드 코드&lt;/li&gt;
&lt;li data-end=&quot;1628&quot; data-start=&quot;1612&quot;&gt;서버를 직접 관리하지 않음&lt;/li&gt;
&lt;li data-end=&quot;1666&quot; data-start=&quot;1629&quot;&gt;서버가 &amp;ldquo;없는 것&amp;rdquo;이 아니라 &lt;b&gt;운영을 신경 쓰지 않는 구조&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1695&quot; data-start=&quot;1667&quot;&gt;지원 언어: &lt;b&gt;Node.js, Python&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1700&quot; data-start=&quot;1697&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1714&quot; data-start=&quot;1702&quot; data-ke-size=&quot;size26&quot;&gt;6. Git 환경&lt;/h2&gt;
&lt;h3 data-end=&quot;1727&quot; data-start=&quot;1716&quot; data-ke-size=&quot;size23&quot;&gt;Git SCM&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1762&quot; data-start=&quot;1728&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1742&quot; data-start=&quot;1728&quot;&gt;Git 자체 설치 도구&lt;/li&gt;
&lt;li data-end=&quot;1762&quot; data-start=&quot;1743&quot;&gt;로컬 &amp;harr; 원격 저장소 연동 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1775&quot; data-start=&quot;1764&quot; data-ke-size=&quot;size23&quot;&gt;Git CLI&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1817&quot; data-start=&quot;1776&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1798&quot; data-start=&quot;1776&quot;&gt;git 명령어 사용을 위한 CLI&lt;/li&gt;
&lt;li data-end=&quot;1817&quot; data-start=&quot;1799&quot;&gt;체크포인트(이력) 관리의 핵심&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1822&quot; data-start=&quot;1819&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1832&quot; data-start=&quot;1824&quot; data-ke-size=&quot;size26&quot;&gt;정리 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1989&quot; data-start=&quot;1834&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1870&quot; data-start=&quot;1834&quot;&gt;&lt;b&gt;nvm + Node 22&lt;/b&gt; : Claude Code 필수&lt;/li&gt;
&lt;li data-end=&quot;1903&quot; data-start=&quot;1871&quot;&gt;&lt;b&gt;Python 3.13+&lt;/b&gt; : MCP 및 확장 대응&lt;/li&gt;
&lt;li data-end=&quot;1935&quot; data-start=&quot;1904&quot;&gt;&lt;b&gt;Claude Code&lt;/b&gt; : AI 코딩 핵심 도구&lt;/li&gt;
&lt;li data-end=&quot;1989&quot; data-start=&quot;1936&quot;&gt;&lt;b&gt;IDE + GitHub + Supabase + Vercel&lt;/b&gt; : 실전 풀스택 최소 구성&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT 기술/AI</category>
      <category>#Windows개발환경</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>cursor</category>
      <category>supabase</category>
      <category>vercel</category>
      <category>vibeCode</category>
      <category>개발환경구축</category>
      <category>바이브코딩</category>
      <category>풀스택개발</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/18</guid>
      <comments>https://keun90.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 14 Jan 2026 22:52:50 +0900</pubDate>
    </item>
    <item>
      <title>OPC-UA Node / Address Space</title>
      <link>https://keun90.tistory.com/19</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x0OA8/dJMcabQsCPm/tRNMYafFxHdusgPlrjbml0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x0OA8/dJMcabQsCPm/tRNMYafFxHdusgPlrjbml0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x0OA8/dJMcabQsCPm/tRNMYafFxHdusgPlrjbml0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx0OA8%2FdJMcabQsCPm%2FtRNMYafFxHdusgPlrjbml0%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;1164&quot; height=&quot;643&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;643&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;b&gt;&amp;nbsp;Address Space 란&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; OPC UA 서버는 내부에 Address Space라는 구조를 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 서버가 외부에 공개하는 모든 데이터, 기능, 상태의 전체 지도다.&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;b&gt;Address Space 내부&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Object : 설비나 라인을 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 값이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 의미의 표준이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; Variable: 온도&lt;b&gt;&amp;middot;&lt;/b&gt;속도&lt;b&gt;&amp;middot;&lt;/b&gt;상태&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 값 하나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 실시간 값 or 설정값 or&amp;nbsp; 단순 카운터 ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Method : 제어 동작&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 표준에 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 현장에서는 구현 난이도가 높아 실사용은 안한다&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt; Event : 알람&lt;b&gt;&amp;middot;&lt;/b&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; text-align: start;&quot;&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Reference: 이 모든 것을 묶는 관계&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요 포인트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; OPC UA 표준은 &quot;이런 구조를 만들 수 있다&quot; 까지만 정의한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; &quot;이 구조가 무엇을 의미하는지&quot;는 전혀 정의하지 않는다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Address Space 그래프이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; 트리 구조로서 관계의 완성이 되어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768377926796&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# UAExpert 클라이언트, 마치 폴더 구조로 보인다.
Objects
 └─ Line1
     └─ Motor1
         ├─ Speed
         └─ Status&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;b&gt;Node 란&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;OPC UA 의 모든 구성 요소는 노드(Node)로 표현된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 하지만 노드는&amp;nbsp; 본질적으로 다음 세 가지만 가진다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 1. NodeId - 서버 내부 식별자&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 2&lt;/span&gt;. Attribute - 값, 타입, 접근권한&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 3&lt;/span&gt;. Reference - 다른 노드와의 연결&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; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; 노드는&amp;nbsp;&lt;/span&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; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &quot;이게 선서다.&quot;&lt;/span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&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; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; &quot;&lt;/span&gt;이건 모터다.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt; &quot;&lt;/span&gt;이 값은 생산량이다.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 의미를 스스로 알지 못한다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NodeId 특징&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 서버 내부에서 유일하기만 하면 된다.&amp;nbsp;&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;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 의미를 가질 필요가 없다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768377390785&quot; class=&quot;abnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;NodeId 예시 

ns=2;i=1034
ns=2;i=1035&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;&amp;nbsp; &amp;nbsp; 의미를 알기 위해서는 아래 내용을 종합적으로 추론해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BrowseName&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DisplayName&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reference&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&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;b&gt;OPC UA를 쓰면 자동으로 의미가 생기는 게 아니라, &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;의미가 없는 구조를 의미 있다고 착각하지 않기 위해 노드와 Address Space를 이해해야 한다.&lt;/b&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;</description>
      <category>AddressName</category>
      <category>OPC-UA</category>
      <category>OPCUA</category>
      <category>smartfactory</category>
      <category>공장자동화</category>
      <category>스마트팩토리</category>
      <category>통신</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/19</guid>
      <comments>https://keun90.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 14 Jan 2026 18:41:56 +0900</pubDate>
    </item>
    <item>
      <title>동시성 제어 없는 낙관적 프로그래밍</title>
      <link>https://keun90.tistory.com/17</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TX1의 조회 시점(t1)의 가격이 변경(t2)된다면 동시성 제어를 해주어야 한다.&lt;/p&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;1338&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGBdUd/btsNJIxPjUB/QoD2CmRpqFYNGJjcKaqmB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGBdUd/btsNJIxPjUB/QoD2CmRpqFYNGJjcKaqmB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGBdUd/btsNJIxPjUB/QoD2CmRpqFYNGJjcKaqmB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGBdUd%2FbtsNJIxPjUB%2FQoD2CmRpqFYNGJjcKaqmB0%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;1338&quot; height=&quot;431&quot; data-origin-width=&quot;1338&quot; data-origin-height=&quot;431&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;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;insert into 주문&lt;br /&gt;select :상품코드, :고객ID, :주문일시, :상점번호,...&lt;br /&gt;from 상품&lt;br /&gt;where 상품코드 = :상품코드&lt;br /&gt;and 가격 = :가격;&lt;br /&gt;&lt;br /&gt;if sql%rowcount = 0 then&lt;br /&gt;&amp;nbsp;alert('상품가격이 변경되었습니다.');&lt;br /&gt;end if;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <category>SQL</category>
      <category>sqlp</category>
      <category>transaction</category>
      <category>Update</category>
      <category>동시성제어</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/17</guid>
      <comments>https://keun90.tistory.com/17#entry17comment</comments>
      <pubDate>Sat, 3 May 2025 11:03:59 +0900</pubDate>
    </item>
    <item>
      <title>Lock</title>
      <link>https://keun90.tistory.com/16</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;오라클 Lock&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DML Lock - 다중 트랜잭션이 동시에 액세스하는 사용자 데이터의 무결성을 보호해 준다. 테이블 Lock과 로우 Lock이 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;DLL Lock -&amp;nbsp;&lt;/li&gt;
&lt;li&gt;래치 - SGA에 공유된 각종 자료구조를 보호하기 위해 사용한다.&lt;/li&gt;
&lt;li&gt;버퍼 Lock - 버퍼 블록에 대한 액세스를 직렬화하기 위해 사용한다.&lt;/li&gt;
&lt;li&gt;라이브러리 캐시 Lock/Pin - 라이브러리 캐시에 공유된 SQL 커서와 PL/SQL 프로그램을 보호하기 위해 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DML 로우 Lock&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 동시 트랜잭션이 같은 로우를 변경하는 것을 방지한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update, delete와는 다르게 insert에 대한 로우 lock 경합은 unique 인덱스가 있을 때만 발생한다. 블로킹이 발생하면, 후행 트랜잭션은 기다렸다가 선행 트랜잭션이 커밋하면 insert에 실패하고, 롤백하면 성공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;DML 테이블 Lock&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클은 dml 로우 lock을 설정하기에 앞서 테이블 lock(TM Lock)을 먼저 설정한다. TM Lock이 걸려있다고, 모든 작업을 수행하지 못하는 것이 아니다. RS, RX 등 레벨을 설정하여 작업이 가능하여 다음 트랜잭션의 제어할 수 있다.&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;select * from t for update -&amp;gt; lock 해제될 때까지 기다린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select * from t for update wait 3 -&amp;gt; 일정 시간만 기다리다 포기한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select * from t for update nowait -&amp;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;Lock을 푸는 열쇠, 커밋&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로킹(blocking) - 선행 트랜잭션이 설정한 Lock 때문에 후행 트랜잭션이 작업을 진행하지 못하고 멈춰 있는 상태를 말한다. 커밋과 롤백으로 풀어주어야 한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;교착상해(deadlock) - 두 트랜잭션이 각각 특정 리소스에 lock을 설정한 상태에서 맞은편 트랜잭션이 lock을 설정한 리소스에 또 lock을 설정하려고 진행하는 상황을 말한다. 둘 중 하나가 죽어야 해소된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ora-00060 : deadlock detected while waiting for resource&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 10gR2부터 제공하는 비동기식 커밋과 배치 커밋을 활용하는 방법은 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wait : lgwr가 로그버퍼를 파일에 기록했다는 완료 메시지를 받을 때까지 기다린다.(동기식 커밋)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nowait : lgwr의 완료 메시지를 기다리지 않고 바로 다음 트랜잭션을 진행한다.(비동기식 커밋)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;immediate : 커밋 명령을 받을 때마다 lgwr가 로그 버퍼를 파일에 기록한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;batch : 세션 내부에 트랜잭션 데이터를 일정량 버퍼링했다가 일괄 처리한다.&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;</description>
      <category>IT 기술/DB 개념</category>
      <category>LOCK</category>
      <category>sqlp</category>
      <category>tm lock</category>
      <category>tmlock</category>
      <category>테이블 lock</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/16</guid>
      <comments>https://keun90.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 16 Apr 2025 23:05:55 +0900</pubDate>
    </item>
    <item>
      <title>파티션을 활용한 대량 INSERT 튜닝</title>
      <link>https://keun90.tistory.com/15</link>
      <description>&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;대량 데이터를 INSERT 하려면, 인덱스를 Unusable 시켰다가 재생성하는 방식이 더 빠를 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. nologging 모드 변환&lt;/p&gt;
&lt;pre id=&quot;code_1744642533733&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table t1 nologging;&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;2.&lt;b&gt;&amp;nbsp;&lt;/b&gt;인덱스 unusable 상태 변경&lt;/p&gt;
&lt;pre id=&quot;code_1744642580779&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter index t1_x01 unusable;&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;3. (할 수 있다면 direct path insert) 방식으로 대량 데이터를 입력한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642590152&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;insert /*+ append */ into t1
select * from s1;&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;4. (할 수 있다면 nologging 모드로) 인덱스를 재생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744642662059&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter index t1_x01 rebuild nologging;&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;5. logging 모드로 전환한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642690991&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table t1 logging;
alter index t1_x01 logging;&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/h3&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;1. (할 수 있다면) 작업 대상 테이블 파티션을 nologging 모드로 전환한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744643315219&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table t1 modify partition p_202504 nologging;&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;2. 작업 대상 테이블 파티션과 매칭되는 인덱스 파티션을 unusable 상태로 전환한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744643322850&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter index t1_x01 modify partition p_202504 unusable;&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;3. (할 수 있다면 direct path insert 방식으로) 대량 데이터를 입력한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744643330514&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;insert /* append */ into t1
select * from s1 where dt between '202501' and '20251231'&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;4. (할 수 있다면 nologging 모드로) 인덱스 파티션을 재생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744643337811&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter index t1_x01 rebuild partition p_202504 nologgin;&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;5. logging 모드로 전환한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744643344206&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table t1 modify partition p202504 logging;
alter index t1_x01 modify partition p202504 logging;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <category>logging</category>
      <category>partition</category>
      <category>sqlp</category>
      <category>대용량</category>
      <category>테이블</category>
      <category>파티션테이블</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/15</guid>
      <comments>https://keun90.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 15 Apr 2025 00:10:16 +0900</pubDate>
    </item>
    <item>
      <title>파티션을 활용한 대량 DELETE 튜닝</title>
      <link>https://keun90.tistory.com/14</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;일반 delete 문이 느린 이유는 하나씩 삭제하면서 많은 로그를 남기기 때문이다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delete from 거래;&amp;nbsp;&amp;nbsp;&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. 테이블 레코드 삭제에 대한 undo logging&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 테이블 레코드 삭제에 대한 redo logging&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 인덱스 레코드 삭제&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 인덱스 레코드 삭제에 대한 undo logging&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 인덱스 레코드 삭제에 대한 redo logging&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. undo (2,5번)에 대한 redo logging&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;Partition Drop&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alter table custom drop partition p202503;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alter table custom drop partition for ('20250301') --&amp;gt; 11g이상. 값을 이용해 대상 파티션 지정이 가능함.&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;파티션 Truncate를 이용한 대량 데이터 삭제&lt;/b&gt;&lt;/h3&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. 임시 테이블 생성하고 남길 데이터만 복제한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642110146&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table 거래_t
as 
select * 
from custom
where 거래일자 &amp;lt; '20250301'
and 상태코드 = 'zzz'&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;2. 삭제 대상 테이블 파티션을 truncate 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642136355&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table 거래 truncate partition p20250301;&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;3.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642166769&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;insert into 거래 
select * from 거래_t;&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;4.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744642198341&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;drop table 거래_t;&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;&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;</description>
      <category>IT 기술/DB 개념</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/14</guid>
      <comments>https://keun90.tistory.com/14#entry14comment</comments>
      <pubDate>Mon, 14 Apr 2025 23:50:48 +0900</pubDate>
    </item>
    <item>
      <title>2025.04.12</title>
      <link>https://keun90.tistory.com/13</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;투자 성향 : 반도체 + 나스닥 + 테슬라 + SCHD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이슈 러쉬 : 4월 9일, SCHD, 관세전쟁&lt;/p&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. ARM, 데이터센터,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. TSMC, 1분기 매출 37조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. BABA -7%&lt;/p&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;미국 증시 현황&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 엔비디아,+17%,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 애플, 5%, 중국에 생산공장 많아 관세 영향 큼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아마존, +8%, AI 계속 투자, 반도체 직접 생산?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 헬스케어 관련 주, 대부분 하락&lt;/p&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. 엔비디아 10% 남음&lt;/p&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;섹터별 수익률&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임의소비재 - 아마존, 테슬라, 홈디포, 맥도날드 ... *테슬라 6월 자율주행&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;항공주가 많이 올랐음&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;s&amp;amp;p500 200일 이동평균선 비율&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;ETF 색터별 고점대비 얼마나 남았는지.&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;SCHD 괜찮을까 ?&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;- 배당률 4.16% (매우 높음, 위험은 큼)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 물가상승률보다 높게 성장하고 있음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 월 100만원 투자, 30년 - 14억, 원금 3억&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 4/22, 실적 발표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>주식&amp;middot;경제</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/13</guid>
      <comments>https://keun90.tistory.com/13#entry13comment</comments>
      <pubDate>Sun, 13 Apr 2025 08:11:05 +0900</pubDate>
    </item>
    <item>
      <title>파티션, 대량 UPDATE 튜닝</title>
      <link>https://keun90.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;입력/수정/삭제하는 데이터 비중이 5%를 넘는다면, 인덱스를 그대로 둔 상태에서 작업하기보다 인덱스 없이 작업한 후에 재생성하는 게 더 빠르다.&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;b&gt;파티션 exchange를 이용한 대량 데이터 변경&lt;/b&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;create table 거래_t&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nologging&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;as&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select * from 거래 where 1=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;2. 거래 데이터를 읽어 임시 테이블에 입력하면서 상태코드 값을 수정한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert /*+ append */ into 거래_t&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select 고객번호, 거래일자, 거래순번, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , (case when 상태코드 &amp;lt;&amp;gt; 'ZZZ' then 'ZZZ' else 상태코드 end) 상태코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;from 거래&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where 거래일자 &amp;lt; '20150101';&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 임시 테이블에 원본 테이블과 같은 구조로 인덱스를 생성한다. 할 수 있다면 nologging 모드로 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;create unique index 거래_t_pk on 거래_t (고객번호, 거래일자, 거래순번) nologging;&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;4. 파티션과 임시 테이블을 exchange 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alter table 거래&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exchange partition p201412 with table 거래_t&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;including indexes without validation;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 임시 테이블을 drop한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;drop table 거래_t;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 파티션을 logging 모드로 전환한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alter table 거래 modify partition p201412 logging;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <category>db</category>
      <category>Exchange</category>
      <category>partition</category>
      <category>sqlp</category>
      <category>대량테이블</category>
      <category>파티션</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/12</guid>
      <comments>https://keun90.tistory.com/12#entry12comment</comments>
      <pubDate>Mon, 7 Apr 2025 23:47:39 +0900</pubDate>
    </item>
    <item>
      <title>튜닝 - exists, NL semi join</title>
      <link>https://keun90.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[데이터]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품 : 1,000건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계약 : 5,000만 건&lt;/p&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년 간 계약 건수는 500만 건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;계약 row가 만 건으로 10년 치 데이터가 쌓여 있음을 알 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상품유형코드를 '=' 조건으로 검색할 때의 평균 카디널리티는 100&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #333333; text-align: start;&quot;&gt;Cardinality 란 중복도가 낮으면 높고, 중복도가 높으면 낮다. (여자, 남자 Car-di- 는 2이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #333333; text-align: start;&quot;&gt;즉, 100이란 숫자는 상품유형코드에 대한 중복도가 매우 낮음을 의미한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;카디널리티로 선택도(Selectivity)를 구할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;(Selectivity : 전체 레코드 중에서 조건절에 의해 선택될 것으로 예상되는 레코드의 비율% 이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;선택도 = 카디널리디 / 총 레코드 수, 100/1000 = 10%&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;500만 건의 10%, 50만 건 중 100(카디널리티)개의 상품 집합을 쿼리에서 가져오려고 한다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품_PK : 상품번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품_X1 : 상품유형코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계약_PK : 계약번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계약_X1 : 계약일&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계약_X2 : 상품번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select distinct p.상품번호, p.상품명, p.상품가격, p.상품분류코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;from 상품 p, 계약 c&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where p.상품유형코드 = :pclscd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;and c.상품번호 = p.상품번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;and c.계약일자 &amp;gt;= trunc(add_months(susdate, -12))&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;[실행계획]&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;상품_X1 &amp;gt; 상품 테이블 엑세스 &amp;gt; 계약_X2 &amp;gt; NL &amp;gt; 계약 테이블 엑세스 &amp;gt; NL &amp;gt; 필터 &amp;gt; Hash&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;실행 계획대로 수행되도록 인덱스 재구성과 힌트를 작성해야 한다. &lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;/*ordered nl(c) */&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인덱스 재구성 : &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상품_X1 : 상품유형코드 + 계약일자&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;유형1&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;select p.상품번호, p.상품명, p.상품가격, p.상품분류코드&lt;br /&gt;from 상품 p&lt;br /&gt;where p.상품유형코드 = :pclscd&lt;br /&gt;and exists (&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; select /* unnest nl_sj */ 'X'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; from 계약 c&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where c.상품번호 = p.상품번호&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and c.계약일자 &amp;gt;= trunc(add_months(susdate, -12))&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;);&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;lt;/유형1&amp;gt; &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;lt;유형2&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;select p.상품번호, p.상품명, p.상품가격, p.상품분류코드&lt;br /&gt;from 상품 p&lt;br /&gt;where p.상품유형코드 = :pclscd&lt;br /&gt;and exists (&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; select /* no_unnest */ 'X'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; from 계약 c&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where c.상품번호 = p.상품번호&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and c.계약일자 &amp;gt;= trunc(add_months(susdate, -12))&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;);&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;/유형2&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개념&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;exists를 사용하면 실행 계획 상에서 nested loops semi join(nl semi join)이라는 조인 방식이 자주 사용된다. 존재 여부만 확인(매칭 여부만 필요할 때)하여 첫 매칭 후 중단한다. 빠른 필터링, 적은 메모리 사용이 특징이다.&lt;/li&gt;
&lt;li&gt;unnest ? 메인 쿼리와 조인 방식으로 병합(unnest)하도록 강제한다. 기본적으로 필터 방식일 수도 있는 서브쿼리를 조인으로 변환하여 성능 향상을 유도 한다.&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;no_unnest ? 해당 서브쿼리를 unnest하지 않고 필터 방식으로 유지하라는 의미이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 기술/DB 실습</category>
      <category>db</category>
      <category>exist</category>
      <category>nl semi join</category>
      <category>nl 세미 조인</category>
      <category>sqlp</category>
      <category>SQLP문제</category>
      <category>쿼리</category>
      <category>튜닝</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/11</guid>
      <comments>https://keun90.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 7 Apr 2025 13:13:12 +0900</pubDate>
    </item>
    <item>
      <title>파티션을 활용한 DML 튜닝</title>
      <link>https://keun90.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Range 파티션&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객 ID varchar2(5)...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition by range(주문일자) (&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition P2025_Q1 values less than ('20250401')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, partition P2025_Q2 values less than ('20250701')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, partition P9999_MX values less than (MAXVALUE)&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;&lt;b&gt;해시 파티션&amp;nbsp;&lt;/b&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처럼 변별력이 좋고 데이터 분포가 고른 컬럼을 파티션 기준으로 선정해야 효과적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;create table 고객 ( 고객 ID varchar2(5), 고객명 varchar2(10) ... )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition by hash (고객 ID) partitions 4;&lt;/p&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;b&gt;리스트 파티션&lt;/b&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;create table 인터넷매물 (물건코드 varchar2(5), 지역분류 varchar2(4) ... )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition by list(지역분류) (&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition P_지역1 values('서울')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, partition P_지역2 values('경기', '인천')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, partition P_기타 values(DEFAULT)&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;table style=&quot;border-collapse: collapse; width: 86.0472%; height: 145px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px; text-align: left;&quot;&gt;Range Partition&lt;/td&gt;
&lt;td style=&quot;width: 31.3485%; height: 18px;&quot; colspan=&quot;2&quot;&gt;값의 순서에 따라 저장할 파티션이 결정된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 10px; text-align: left;&quot;&gt;Hash&lt;/td&gt;
&lt;td style=&quot;width: 31.3485%; height: 10px;&quot; colspan=&quot;2&quot;&gt;오라클이 정한 해시 알고리즘에 따라 임의로 분할한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px; text-align: left;&quot;&gt;List&lt;/td&gt;
&lt;td style=&quot;width: 31.3485%; height: 18px;&quot; colspan=&quot;2&quot;&gt;순서와 상관없이 불연속적인 값의 목록에 의해 결정된다.&lt;br /&gt;사용자가 정의한 논리적인 그룹에 따라 분할한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;인덱스 파티션&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&gt;&amp;nbsp;non-partitioned table&lt;/li&gt;
&lt;li&gt;&amp;nbsp;partitioned table&lt;/li&gt;
&lt;li&gt;local partitioned index : 테이블 파티션과 인덱스 파티션이 서로 1:1 대응 관계가 되도록 오라클이 자동으로 관리하는 파티션 인덱스를 말한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;global partitioned index : 로컬이 아닌 파티션 인덱스가 모두 글로벌이며, 테이블 파티션과 독립적인 구성을 갖는다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;non-partitioned index&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;&lt;b&gt;로컬 파티션 인덱스&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;create index 주문_x01 on 주문 (주문일자, 주문금액) &lt;b&gt;local&lt;/b&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;b&gt;로컬 파티션 인덱스&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티션을 테이블과 다르게 구성한 인덱스다. 테이블 파티션 구성을 변경하는 순간 unusable 상태로 바뀌므로 곧바로 인덱스를 재생성해 줘야 한다. 그동안 테이블을 사용하는 서비스를 중단해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;create index 주문_x03 on 주문 (주문금액, 주문일자) &lt;b&gt;global&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition by range(주문금액) (&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partition P_01 values less than ( 10000)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;, partition P_MX values less than (MAXVALUE)&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;b&gt;비파티션 인덱스, non-partitioned&lt;/b&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;create index 주문_x04 on 주문 ( 고객 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;b&gt;Prefixed vs Nonprefixed&lt;/b&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;prefixed : 인덱스 파티션 키 컬럼이 인덱스 키 컬럼 왼쪽 선두에 위치한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nonprefixed : 인덱스 파티션 키 컬럼이 인덱스 키 컬럼 왼쪽 선두에 위치하지 않는다. 파티션 키가 인덱스 컬럼에 아예 속하지 않을 때도 여기에 속한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <category>partition</category>
      <category>sqlp</category>
      <category>파티션</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/10</guid>
      <comments>https://keun90.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 3 Apr 2025 23:31:22 +0900</pubDate>
    </item>
    <item>
      <title>Direct Path I/O</title>
      <link>https://keun90.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정보계 시스템(DW/OLAP등)이 배치 프로그램에서 사용하는 SQL은 주로 대량 데이터를 처리하기 때문에 버퍼캐시를 경유하는 I/O 메커니즘이 오히려 성능을 떨어뜨릴 수 있다. 그래서 오라클은 버퍼캐시를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있는 Direct Path I/O 기능을 제공한다.&lt;/p&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. 병령 쿼리로 Full Scan을 수행할 때&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 병렬 DML을 수행할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Direct Path Insert를 수행할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Temp 세그먼트 블록들을 읽고 쓸 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. direct 옵션을 지정하고 export를 수행할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. nocahe 옵션을 지정한 LOB 컬럼을 읽을 때&lt;/p&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: #f6e199;&quot;&gt;select /*+ full(t) parallel(t 4) */ * from big_table t;&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;b&gt;Direct Path Insert&amp;nbsp;&lt;/b&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;1. insert .. select 문에 append 힌트 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. parallel 힌트를 이용해 병렬 모드로 insert&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. direct 옵션을 지정하고 sql loader(sqlldr)로 데이터 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. ctas(create table ... as select) 문 수행&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;1. freelist 참조하지 않고 hmv(high-water-mark) 바깥 영역에 데이터를 순차적으로 입력한다.&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;3. 버퍼캐시에 적재하지 않고, 데이터파일에 직접 기록하낟.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. undo 로깅을 안 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. redo 로깅을 안 하게 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;span style=&quot;background-color: #f6e199;&quot;&gt;alter table t nologging; (o)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - insert into t nologging select * from test; (x)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - insert /*+ append nologging */ into t select * from test; (x)&lt;/p&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;1. exclusive 모드 tm lock이 걸린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. freelist 조회하지 않고 hwm 바깥 영역에 입력하므로 테이블에 여유 공간이 있어도 재활용하지 않는다. 테이블 사이즈 증가한다.&lt;/p&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;b&gt;병렬 DML&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert는 append 힌트 이용, update/delete는 기본적으로 direct path write 불가능하다. 아래와 같이 병렬 dml을 활성화해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;alter session enable parallel dml;&amp;nbsp;&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 /*+ parallel(c 4) */ into 고객 c&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( insert /*+ append parallel(c 4) */ into 고객 c )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;select /*+ full(o) parallel(o 4) */ * from 외부가입고객 o;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update /*+ full(c) parallel(c 4) */ 고객 c&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set 고객상태코드 = 'WD'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where 최종거래일시 &amp;lt; '20100101';&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delete /*+ full(c) parallel(c 4) */ from 고객 c&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where 탈퇴일시 &amp;lt; '20100101';&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;QC(query coordinator) : sql을 병렬로 실행하면 병렬도로 지정한 만큼 또는 두 배로 병렬 프로세스를 띄워 동시에 작업을 진행하는데, 이때 최초 DB에 접속해서 sql을 수행한 프로세스는 qc역할을 맡는다. 단, 병렬로 처리할 수 없거나 병렬로 처리하도록 지정하지 않은 작업은 qc가 직접 처리한다.&amp;nbsp;&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;</description>
      <category>IT 기술/DB 개념</category>
      <category>direct path</category>
      <category>direct path io</category>
      <category>sqlp</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/9</guid>
      <comments>https://keun90.tistory.com/9#entry9comment</comments>
      <pubDate>Sat, 29 Mar 2025 08:13:48 +0900</pubDate>
    </item>
    <item>
      <title>MERGE</title>
      <link>https://keun90.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일반적인 merge 예시 &lt;b&gt;&amp;lt;q1&amp;gt;&lt;/b&gt;&lt;/b&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; background-color: #9feec3;&quot;&gt;&amp;lt;q1&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge into cutomser t using customer_delta s on (t.cust_id = s.cust_id)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;when matched then update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;set t.cust_nm = s.cust_nm, t.email = s.email, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;when not matched then insert&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;(cust_id,,,, ) values&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;(s.cust_id,,,,);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;lt;/q1&amp;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;b&gt;간혹 merge를 활용해 update(&amp;lt;q2&amp;gt;)를 사용한다.. 그러지 말자.. 불필요한 테이블 접근은 좋지 않다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;update 대상 건수를 쉽게 확인하고자 한다면, &amp;lt;q3&amp;gt;을 활용하는 것을 권장한다.&lt;/b&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: #9feec3;&quot;&gt;&amp;lt;q2&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge into emp t2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;using( select t.rowid as rid, s.ename&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; from emp t, emp_src s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where t.empno = s.empno&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and t.ename = s.ename ) s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;on (t2.rowid = s.rid)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;when matched then update set t2.ename = s.ename;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;lt;/q2&amp;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: #9feec3;&quot;&gt;&amp;lt;q3&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update (&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;select s.ename as s_ename, t.ename as t_ename&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;from emp t, emp_src s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;where t.empno = s.empno&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;and t.ename &amp;lt;&amp;gt; s.ename&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set t_ename = s_ename;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&amp;lt;/q3&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <category>merger</category>
      <category>SQL</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/8</guid>
      <comments>https://keun90.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 25 Mar 2025 23:24:07 +0900</pubDate>
    </item>
    <item>
      <title>세이노의 가르침</title>
      <link>https://keun90.tistory.com/7</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6:47, 2025-03-25&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6:49, 2025-03-26&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;6:47, 2025-03-27&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;8:20, 2025-03-29&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#좋아하는 일이라고 섣불리 하지 마라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제나 자신감 있는, 당당한 태도가 있어야 하며 &quot;무소유를 즐길 각오가 되어 있어야 한다.&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;6:50, 2025-04-03&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동차를 타고 가다가 길이 막혀 어쩔 수 없이 보내게 되는 시간 같은 것이 크로노스이다. 가치 있는 시간, 보람 있는 시간이 모두 카이로스이다. 크로노스를 카이로스로 바꾸어 살아가야 한다. 재미없어 보이는 지식들을 위하여 '돈이 되는 시간'을 먼저 투자하는 사람만이 크로노스의 굴레에서 벗어 날 수 있다. 재미있는 것만 즐기면 시간을 보내는 동안 당신의 삶 자체가 조만간 재미없어질 것이다. 개인 방송 서비스에 빠져서 시간 가는 줄 모르는 사람들이 꽤 많을 거다. 그들의 호주머니를 노리고 연동 방송은 계속 늘어나는 것 같고, 그런 것들에 중독되지 않기를 빈다.&lt;/p&gt;</description>
      <category>Life *</category>
      <category>세이노의가르침</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/7</guid>
      <comments>https://keun90.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 25 Mar 2025 07:06:56 +0900</pubDate>
    </item>
    <item>
      <title>SQLP 학습 이유</title>
      <link>https://keun90.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. Backend 개발을 하면서 SQL을 다루지 않는 개발자는 거의 없을 것이며, 이는 내가 어떤 산업 및 직군에서 일을 시작해도 강점이 될 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 시스템 성능에 직접적이고 단순? 눈에 보이게 영향을 주는 언어로 자원을 효율적으로 사용함으로써 많은 것을 아낄 수 있다고 생각한다.&lt;/p&gt;</description>
      <category>IT 기술/DB 개념</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/6</guid>
      <comments>https://keun90.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 24 Mar 2025 23:02:31 +0900</pubDate>
    </item>
    <item>
      <title>Google for Startups 방분.. 좋다.</title>
      <link>https://keun90.tistory.com/5</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;&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;들어서는 순간 느꼈다.. 그래 이런 환경에서 일하고 싶어서 IT를 시작했지...&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;&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;하지만, 그래도 내가 어디까지 IT의 중심에 갈 수 있을지 궁금하다.&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;이제 36.. 늦은 나이.. 그래도 하고 싶은건 끝까지 해봐야 직성이 풀린다.&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;분명 나와 같은 사람이 있을 것이다.&lt;/p&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;잘하지는 못하지만 잘하고 싶은 열정이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 어디까지 IT로 나아갈 수 있을지 여기에 기록하겠다.&lt;/p&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;</description>
      <category>IT 기술/IT 블라블라</category>
      <author>keun90</author>
      <guid isPermaLink="true">https://keun90.tistory.com/5</guid>
      <comments>https://keun90.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 24 Mar 2025 21:30:57 +0900</pubDate>
    </item>
  </channel>
</rss>