<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jongchan_im.log</title>
        <link>https://velog.io/</link>
        <description>SK쉴더스 루키즈 개발 트랙 5기</description>
        <lastBuildDate>Fri, 17 Jul 2026 08:25:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jongchan_im.log</title>
            <url>https://velog.velcdn.com/images/jongchan_im/profile/fb9e9c8a-9787-42d1-be26-63a8e30fe4c0/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jongchan_im.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jongchan_im" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2026. 07. 17 멘토링 일지]]></title>
            <link>https://velog.io/@jongchan_im/2026.-07.-17-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@jongchan_im/2026.-07.-17-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Fri, 17 Jul 2026 08:25:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="부트캠프-최종-피드백---이력서와-프로젝트를-다시-돌아보다">부트캠프 최종 피드백 - 이력서와 프로젝트를 다시 돌아보다</h3>
</blockquote>
<p>부트캠프가 마무리 단계에 접어들면서 이력서와 최종 프로젝트에 대한 피드백을 받을 기회가 있었다.</p>
<p>그동안은 &quot;구현을 많이 하면 좋은 프로젝트&quot;라고 생각했지만, 이번 피드백을 통해 <strong>기능의 개수보다 그것을 어떻게 구현했고, 어떤 고민과 과정을 거쳤는지가 더 중요하다</strong>는 사실을 다시 한번 느낄 수 있었다.</p>
<p>이번 글에서는 이력서와 프로젝트 측면에서 받은 피드백을 정리하고, 앞으로 어떤 방향으로 개선할 것인지 기록해보려 한다.</p>
<hr>
<blockquote>
<h3 id="📄-이력서-피드백">📄 이력서 피드백</h3>
</blockquote>
<h4 id="1-기술-스택은-사용했다가-아니라-활용했다를-보여주기">1. 기술 스택은 &#39;사용했다&#39;가 아니라 &#39;활용했다&#39;를 보여주기</h4>
<p>기존 이력서에는 Java, Spring Boot, React처럼 기술 스택 위주로 작성되어 있었다.</p>
<p>하지만 실제로 중요한 것은 어떤 기술을 어디에 활용했고, 어떤 결과를 만들었는지였다.</p>
<p>예를 들어</p>
<ul>
<li>Kafka를 이용한 실시간 이벤트 처리</li>
<li>Redis Queue 기반 AGV Dispatch 구현</li>
<li>WebSocket(STOMP, SockJS)을 활용한 실시간 관제 화면 구현</li>
</ul>
<p>처럼 프로젝트 경험과 함께 기술을 설명해야 한다는 피드백을 받았다.</p>
<p>기술은 나열하는 것이 아니라 경험과 연결될 때 비로소 강점이 된다는 점을 배웠다.</p>
<hr>
<h4 id="2-결과물을-직접-확인할-수-있도록-구성하기">2. 결과물을 직접 확인할 수 있도록 구성하기</h4>
<p>면접관은 짧은 시간 안에 지원자를 파악해야 한다.</p>
<p>따라서 프로젝트 설명만 작성하는 것이 아니라</p>
<ul>
<li>GitHub Repository</li>
<li>Velog 기술 블로그</li>
<li>프로젝트 시연 영상</li>
</ul>
<p>등 직접 확인할 수 있는 결과물을 함께 제공해야 한다는 피드백을 받았다.</p>
<p>앞으로는 프로젝트 하나를 완료하면 구현에서 끝나는 것이 아니라, 코드와 문서를 함께 정리하여 누구나 쉽게 프로젝트를 이해할 수 있도록 구성할 계획이다.</p>
<hr>
<h4 id="3-자기소개서는-경험을-중심으로-작성하기">3. 자기소개서는 경험을 중심으로 작성하기</h4>
<p>&quot;책임감이 있다&quot;, &quot;협업을 잘한다&quot;와 같은 표현은 누구나 사용할 수 있다.</p>
<p>대신 실제 프로젝트에서</p>
<ul>
<li>어떤 문제를 만났는지</li>
<li>어떻게 해결했는지</li>
<li>무엇을 배웠는지</li>
</ul>
<p>를 중심으로 작성해야 설득력이 높아진다는 점을 배웠다.</p>
<p>특히 최근 수행한 프로젝트 경험을 적극 활용하여 개발자로서의 성장 과정을 보여주는 것이 중요하다는 피드백을 받았다.</p>
<hr>
<h4 id="4-최근-프로젝트-경험-적극-반영하기">4. 최근 프로젝트 경험 적극 반영하기</h4>
<p>최근까지 진행했던 AIMS 프로젝트에서는 단순히 화면을 구현하는 수준을 넘어 실제 제조 공정을 가정한 실시간 관제 기능을 개발하였다.</p>
<p>특히 내가 담당했던 AGV 실시간 연동 기능은 이력서에서도 충분히 강점으로 활용할 수 있는 경험이라는 피드백을 받았다.</p>
<hr>
<blockquote>
<h3 id="🚗-최근-수행한-agv-실시간-연동-기능">🚗 최근 수행한 AGV 실시간 연동 기능</h3>
</blockquote>
<p>프로젝트 후반에는 제조 공정 간 AGV 이동을 실시간으로 표현하는 기능을 집중적으로 개발하였다.</p>
<p>초기에는 새로고침을 해야만 상태가 변경되는 방식이었지만, 이를 실시간 구조로 개선하기 위해 WebSocket 기반 통신 구조를 설계하였다.</p>
<pre><code>
* Spring Boot WebSocket(STOMP + SockJS)
* React
* Redis
* Kafka
</code></pre><p>를 함께 활용하였다.</p>
<p>Kafka에서 제조 이벤트를 수신하면 Redis Queue를 통해 AGV 이동 요청을 관리하고, 백엔드에서는 AGV의 이동·도착·복귀 상태를 순차적으로 처리하도록 구현하였다.</p>
<p>상태가 변경될 때마다 WebSocket을 통해 프론트엔드로 즉시 데이터를 전송하여 관제 화면에서 AGV의 이동 상태가 실시간으로 반영되도록 구성하였다.</p>
<p>개발 과정에서는 단순히 기능을 구현하는 것보다 운영 환경에서 발생하는 문제를 해결하는 데 많은 시간을 투자했다.</p>
<p>특히 EKS 환경에서 Backend Pod가 여러 개 실행되면서 Scheduler가 중복 실행되는 문제, Kafka Consumer Group의 Partition 할당 문제, Redis Queue 중복 처리 문제 등을 직접 분석하고 개선하였다.</p>
<p>이 과정을 통해 단순한 기능 구현을 넘어 <strong>멀티 인스턴스 환경에서 실시간 시스템을 안정적으로 운영하기 위한 동시성 제어와 메시지 처리 방식</strong>에 대해 많은 경험을 쌓을 수 있었다.</p>
<p>프로젝트 최종 단계에서는 제조 이벤트 발생부터 AGV 이동, 다음 공정 전달까지 하나의 흐름으로 연결되는 실시간 관제 기능을 완성할 수 있었다.</p>
<hr>
<blockquote>
<h3 id="🚀-프로젝트-발표-피드백">🚀 프로젝트 발표 피드백</h3>
</blockquote>
<h4 id="1-기능보다-개발-과정을-보여주기">1. 기능보다 개발 과정을 보여주기</h4>
<p>발표 자료는 기능 소개보다</p>
<ul>
<li>왜 만들었는지</li>
<li>어떻게 개발했는지</li>
<li>어떤 과정을 거쳤는지</li>
</ul>
<p>를 중심으로 구성하는 것이 좋다는 피드백을 받았다.</p>
<p>특히 Sprint 단위의 개발 과정과 협업 흐름을 함께 보여주면 프로젝트의 완성도를 더욱 효과적으로 전달할 수 있다고 느꼈다.</p>
<hr>
<h4 id="2-협업-과정도-프로젝트의-결과물이다">2. 협업 과정도 프로젝트의 결과물이다</h4>
<p>프로젝트는 단순히 기능만 구현한 것이 아니라 팀원들과 함께 계획하고 개선하는 과정이었다.</p>
<p>그래서 발표 자료에는</p>
<ul>
<li>Sprint 일정</li>
<li>Redmine Gantt Chart</li>
<li>기능 개발 순서</li>
<li>역할 분담</li>
</ul>
<p>등 협업 과정을 추가하여 프로젝트가 어떤 방식으로 진행되었는지 보여줄 예정이다.</p>
<hr>
<h4 id="3-troubleshooting도-중요한-발표-내용">3. Troubleshooting도 중요한 발표 내용</h4>
<p>이번 프로젝트에서는 다양한 문제를 경험했다.</p>
<p>예를 들어</p>
<ul>
<li>WebSocket 실시간 반영 문제</li>
<li>Kafka Consumer Group Partition 이슈</li>
<li>Redis Queue 중복 처리</li>
<li>Scheduler 동시 실행 문제</li>
<li>Multi Pod 환경에서 발생한 동시성 문제</li>
</ul>
<p>등을 직접 해결하면서 프로젝트를 완성했다.</p>
<p>기능 구현보다 이러한 문제를 어떤 방식으로 분석하고 해결했는지를 발표에 포함하는 것이 프로젝트의 깊이를 보여줄 수 있는 요소라는 점을 배웠다.</p>
<hr>
<h4 id="4-발표-구성-개선">4. 발표 구성 개선</h4>
<p>발표의 전체 흐름도 다음과 같이 수정하기로 했다.</p>
<ul>
<li>프로젝트 목적</li>
<li>핵심 기능</li>
<li>시스템 아키텍처</li>
<li>Sprint 기반 개발 과정</li>
<li>시연</li>
<li>기대 효과</li>
<li>향후 계획</li>
</ul>
<p>또한 시연 영상도 발표 내용을 반복하는 것이 아니라, AI 분석 결과와 AGV 실시간 관제처럼 프로젝트의 핵심 기능을 중심으로 보여주는 방향으로 수정할 예정이다.</p>
<hr>
<h3 id="✨-마무리">✨ 마무리</h3>
<p>이번 피드백을 통해 가장 크게 느낀 점은 <strong>프로젝트는 기능을 많이 만드는 것이 아니라, 문제를 해결하며 완성해 나가는 과정 자체가 가장 큰 결과물</strong>이라는 것이다.</p>
<p>또한 이력서 역시 기술을 나열하는 문서가 아니라, 내가 어떤 기술을 선택했고 어떤 문제를 해결했으며 그 과정에서 어떻게 성장했는지를 보여주는 기록이라는 점을 다시 한번 깨달았다.</p>
<p>앞으로는 프로젝트를 구현하는 것에서 끝나지 않고, 개발 과정과 트러블슈팅, 그리고 그 과정에서 얻은 경험까지 꾸준히 기록하며 성장하는 개발자가 되고자 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 07. 07 작업 기록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-07.-07-%EC%9E%91%EC%97%85-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-07.-07-%EC%9E%91%EC%97%85-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Tue, 07 Jul 2026 08:10:47 GMT</pubDate>
            <description><![CDATA[<h3 id="제조-이벤트-기반-실시간-agv-공정-흐름도-구현">제조 이벤트 기반 실시간 AGV 공정 흐름도 구현</h3>
<p>이번 작업에서는 제조 이벤트가 발생하면 AGV가 실시간으로 출발하고, 공정 흐름도에 즉시 반영되는 기능을 구현했다.</p>
<p>단순히 AGV를 움직이는 것이 아니라 <strong>Assembly Service → Kafka → Main Backend → Redis → WebSocket → Frontend</strong>까지 하나의 이벤트가 여러 서비스를 거쳐 화면에 표시되는 전체 흐름을 구성하는 것이 목표였다.</p>
<hr>
<h3 id="전체-아키텍처">전체 아키텍처</h3>
<p>최종적인 데이터 흐름은 아래와 같다.</p>
<pre><code class="language-text">Manufacturing Event
        │
        ▼
 Assembly Service
(Process Risk Analysis)
        │
        ▼
      Kafka
(factory.manufacturing.analysis)
        │
        ▼
   Main Backend
        │
        ├── AGV Dispatch
        ├── Redis 저장
        └── WebSocket Push
                │
                ▼
 Frontend Process Flow</code></pre>
<p>기존에는 공정 흐름도가 모두 하드코딩되어 있었지만, 이번 작업을 통해 제조 이벤트가 발생하면 실제 AGV가 출발하고 화면에서도 실시간으로 움직이도록 변경하였다.</p>
<hr>
<h3 id="agv-출발-조건-개선">AGV 출발 조건 개선</h3>
<p>처음에는 같은 이벤트인데도 어떤 이벤트는 AGV가 출발하고, 어떤 이벤트는 출발하지 않는 문제가 있었다.</p>
<p>원인을 확인해보니 하나의 Kafka Topic에서</p>
<ul>
<li>Process Risk Analysis</li>
<li>Bottleneck Analysis</li>
<li>Defect Transfer Analysis</li>
</ul>
<p>등 여러 종류의 분석 결과가 함께 전달되고 있었다.</p>
<p>AGV 제어는 Process Risk Analysis 결과만 사용하도록 수정하였다.</p>
<pre><code class="language-java">if (!PROCESS_RISK_ANALYSIS.equals(event.analysisType())) {
    return;
}</code></pre>
<p>그리고 위험 공정으로 판단된 경우에는 AGV를 출발시키지 않도록 구현하였다.</p>
<pre><code class="language-java">if (event.analysisResult().isAbnormal()) {
    return;
}</code></pre>
<p>이렇게 수정하면서 AGV 출발 조건을 명확하게 분리할 수 있었다.</p>
<hr>
<h3 id="duplicate-이벤트-처리">Duplicate 이벤트 처리</h3>
<p>AI 분석 결과는 동일한 eventId가 여러 번 전달될 수 있다.</p>
<p>동일 이벤트가 여러 번 처리되면 AGV도 중복 출발할 수 있기 때문에 Redis를 이용하여 Duplicate 처리를 추가하였다.</p>
<pre><code class="language-java">redisTemplate.opsForValue().setIfAbsent(
        PREFIX + eventId,
        &quot;1&quot;,
        Duration.ofMinutes(1)
);</code></pre>
<p>Redis의 SETNX를 이용하여 동일한 eventId는 최초 한 번만 처리하도록 구현하였다.</p>
<hr>
<h3 id="analysisstatus-기준-통일">AnalysisStatus 기준 통일</h3>
<p>이번 작업에서 가장 오래 걸렸던 부분이다.</p>
<p>DB에서는</p>
<pre><code>analysis_status = ABNORMAL</code></pre><p>인데 AGV는 정상적으로 출발하는 현상이 발생하였다.</p>
<p>원인을 확인해보니 Assembly Service에서는</p>
<ul>
<li>Quality Defect</li>
<li>Bottleneck</li>
<li>Equipment Fault</li>
<li>Sequence Error</li>
</ul>
<p>등도 모두 ABNORMAL로 처리하고 있었지만,</p>
<p>Main Backend에서는</p>
<pre><code class="language-java">analysisResult.isAbnormal()</code></pre>
<p>만 기준으로 AGV를 제어하고 있었다.</p>
<p>즉, 서비스마다 ABNORMAL을 판단하는 기준이 달랐다.</p>
<p>최종적으로는 <strong>isAbnormal 값만 AnalysisStatus를 ABNORMAL로 변경하도록 수정</strong>하여 Main Backend와 동일한 기준을 사용하도록 변경하였다.</p>
<hr>
<h3 id="websocket-기반-실시간-agv-연동">WebSocket 기반 실시간 AGV 연동</h3>
<p>Frontend도 기존 하드코드를 제거하고 WebSocket(STOMP)을 통해 실시간 데이터를 수신하도록 변경하였다.</p>
<p>Backend에서는</p>
<pre><code>DB
+
Redis

↓

AgvOperationResponse

↓

WebSocket

↓

Frontend</code></pre><p>형태로 데이터를 전달한다.</p>
<p>AGV의 위치와 상태는 WebSocket을 통해 실시간으로 갱신된다.</p>
<hr>
<h3 id="최초-진입-시-상태-복원">최초 진입 시 상태 복원</h3>
<p>WebSocket만 사용할 경우 새로고침하거나 다른 페이지를 이동한 뒤 다시 들어오면 AGV가 하나도 보이지 않는 문제가 있었다.</p>
<p>이를 해결하기 위해</p>
<pre><code class="language-http">GET /api/main/process-flow</code></pre>
<p>API를 추가하였다.</p>
<p>페이지 진입 시</p>
<pre><code>REST API

↓

현재 AGV 상태 조회

↓

WebSocket 연결

↓

실시간 업데이트</code></pre><p>순서로 동작하도록 수정하였다.</p>
<p>덕분에 페이지를 다시 진입해도 현재 운행 중인 AGV 상태를 그대로 복원할 수 있게 되었다.</p>
<hr>
<h3 id="공정-흐름도-개선">공정 흐름도 개선</h3>
<p>이번 작업을 통해 Process Flow도 실시간 데이터 기반으로 변경하였다.</p>
<p>현재 AGV 상태는</p>
<ul>
<li>🟡 WAITING</li>
<li>🔵 MOVING</li>
<li>🟢 UNLOADING</li>
<li>🟣 RETURNING</li>
</ul>
<p>총 4가지 상태를 표현한다.</p>
<p>오른쪽 관제 현황에서는</p>
<ul>
<li>🚚 운반중</li>
<li>📦 하역중</li>
<li>↩️ 복귀중</li>
<li>⏸️ 대기중</li>
</ul>
<p>AGV 수를 실시간으로 집계하도록 구현하였다.</p>
<p>또한 전체 AGV 수는 항상 20대로 유지되도록 수정하였다.</p>
<hr>
<h3 id="구현-결과">구현 결과</h3>
<p>이번 작업을 통해</p>
<pre><code>제조 이벤트 발생

↓

Kafka 전달

↓

Main Backend AGV Dispatch

↓

Redis 상태 저장

↓

WebSocket Push

↓

Frontend 실시간 공정 흐름도 반영</code></pre><p>까지 하나의 흐름을 구성하였다.</p>
<p>여러 서비스가 하나의 이벤트를 중심으로 연결되어 동작하는 구조를 직접 구현할 수 있었다.</p>
<hr>
<h3 id="마무리">마무리</h3>
<p>이번 작업에서 가장 어려웠던 부분은 기능 구현 자체보다 서비스 간 상태 기준을 맞추는 것이었다.</p>
<p>처음에는 단순히 AGV가 출발하는 조건의 문제라고 생각했지만, 실제 원인은 Assembly Service와 Main Backend가 같은 데이터를 서로 다른 기준으로 해석하고 있었기 때문이었다.</p>
<p>MSA 환경에서는 기능 구현뿐만 아니라 서비스 간 데이터의 의미와 기준을 동일하게 유지하는 것이 중요하다는 점을 다시 한번 확인할 수 있었다.</p>
<p>이번 작업을 통해 Kafka 기반 이벤트 처리, Redis를 이용한 상태 관리, WebSocket을 활용한 실시간 화면 구성까지 하나의 흐름으로 연결해볼 수 있었고, 이벤트 기반 아키텍처를 실제 프로젝트에 적용하는 경험을 할 수 있었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 07. 04 멘토링 일지]]></title>
            <link>https://velog.io/@jongchan_im/2026.-07.-04-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@jongchan_im/2026.-07.-04-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sat, 04 Jul 2026 08:12:40 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="agv-운행-구조-개선과-멘토님-피드백-정리">AGV 운행 구조 개선과 멘토님 피드백 정리</h3>
</blockquote>
<p>오늘은 AGV 운행 로직을 AI 분석 결과 중심으로 개선하는 작업을 진행했고, 멘토님 피드백을 통해 프로젝트 구조와 기술 선택에 대해서도 많은 이야기를 들었다.</p>
<p>AI 분석 기반 AGV 운행 로직 개선</p>
<p>기존에는 제조 이벤트가 발생하면 AGV가 바로 출발하는 구조였다.</p>
<p>하지만 이 경우 AI 분석 결과가 Abnormal이어도 AGV가 먼저 출발하는 문제가 발생할 수 있었다.</p>
<p>그래서 전체 흐름을 다시 정리했다.</p>
<pre><code>Manufacturing Event 발생
        ↓
AI Analysis 수행
        ↓
정상 여부 판단
        ↓
정상 → AGV 출발
비정상 → AGV 출발 취소</code></pre><p>또한 AGV가 모두 운행 중인 경우를 대비해 Route별 Dispatch Queue를 설계했다.</p>
<p>기존에는 대기 중인 AGV가 없으면 예외를 발생시키는 방식이었다.</p>
<pre><code>WAITING AGV 없음
    ↓
Exception

이를 다음과 같이 변경하려고 한다.

WAITING AGV 없음
    ↓
Route Queue 저장
    ↓
AGV 복귀
    ↓
Queue 확인
    ↓
자동 Dispatch</code></pre><p>이 구조를 사용하면 AGV가 모두 사용 중인 상황에서도 이벤트를 유실하지 않고 순차적으로 처리할 수 있다.</p>
<hr>
<blockquote>
<h4 id="kafka-분석-이벤트-구조-점검">Kafka 분석 이벤트 구조 점검</h4>
</blockquote>
<p>오늘 가장 오래 걸렸던 부분이다.</p>
<p>처음에는 AI 서비스에서</p>
<p>Process Risk Analysis
Bottleneck Analysis
Defect Transfer Prediction</p>
<p>총 3개의 Analysis 이벤트를 각각 발행한다고 생각했다.</p>
<p>그래서 Main Backend에서는 3개의 분석 결과를 모두 모은 뒤 하나라도 Abnormal이면 AGV를 출발시키지 않는 Aggregation 구조를 만들었다.</p>
<p>하지만 실제 코드를 확인해 보니 Assembly에서는 Analysis 이벤트를 한 번만 발행하도록 변경되어 있었다.</p>
<p>이 때문에 Main Backend에서는 3개를 계속 기다리기만 하면서 AGV가 출발하지 않는 문제가 발생했다.</p>
<p>결국 현재 AI 분석 이벤트 구조를 다시 확인하고 Main Backend 로직도 함께 수정하는 작업을 진행했다.</p>
<hr>
<blockquote>
<h4 id="멘토님-피드백">멘토님 피드백</h4>
</blockquote>
<p>오늘 멘토님께 받은 피드백도 정리해봤다.</p>
<p><strong>1. 프로젝트 구조 통일</strong></p>
<p>Assembly와 Backend는 같은 사람이 구조를 잡아서 코드 스타일이 비슷했지만 Quality Service는 구조가 달라 이질감이 느껴졌다고 하셨다.</p>
<p>큰 프로젝트에서는 서비스마다 따로 관리하기보다</p>
<p>common
config
dto</p>
<p>같은 공통 모듈을 Root Project에서 관리하는 것이 유지보수하기 훨씬 좋다고 한다.</p>
<p>특히 라이브러리 버전 변경이나 DTO 수정 시 여러 프로젝트를 동시에 수정하지 않아도 된다는 장점이 있다.</p>
<hr>
<p><strong>2. AI를 사용하는 이유를 명확하게 설명하기</strong></p>
<p>&quot;AI를 사용했습니다.&quot;보다</p>
<p>왜 AI를 사용했는지를 설명하는 것이 중요하다고 하셨다.</p>
<p>예를 들어</p>
<p>사람이 판단하기 어려운 이상 징후 탐지
제조 데이터의 위험도 예측
공정 간 불량 전이 예측</p>
<p>처럼 AI가 해결하는 문제를 먼저 설명해야 한다.</p>
<hr>
<p><strong>3. VLM 활용 방식</strong></p>
<p>VLM은 단순히 이미지 분류 모델이 아니라 언어를 함께 이해하는 모델이기 때문에 GPU 사용량이 매우 크다.</p>
<p>그래서 실제 서비스에서는</p>
<pre><code>ML 모델
    ↓
이상 탐지
    ↓
VLM
    ↓
최종 검증
    ↓
관제사 확인</code></pre><p>과 같이 사용하는 것이 일반적이라고 하셨다.</p>
<hr>
<p><strong>4. OpenSearch(ElasticSearch)를 사용하는 이유</strong></p>
<p>OpenSearch는 많은 Raw 데이터를 저장하고 시계열 분석을 수행할 때 강점을 가진다.</p>
<p>하지만 우리가 다루는 알림은 이미 이상 이벤트만 필터링된 데이터이기 때문에 굳이 OpenSearch를 사용할 필요는 없다고 하셨다.</p>
<p>일반적인 관제 시스템에서는</p>
<pre><code>Raw Event
    ↓
이상 감지
    ↓
알림 전송
    ↓
DB 저장</code></pre><p>순서로 처리하는 경우가 많다고 한다.</p>
<p>또한 OpenSearch는 과거 이벤트와 현재 이벤트 비교 시계열 데이터 분석과 같은 용도로 활용하는 것이 더 적합하다고 설명해주셨다.</p>
<hr>
<p><strong>5. 라이브러리 버전 관리</strong></p>
<p>현업에서는 신규 기능 개발보다 취약점 대응이 더 많은 경우도 있다고 한다.</p>
<p>그래서 build.gradle을 서비스별로 따로 관리하기보다 Root Project에서 공통 버전을 관리하면 라이브러리 업데이트도 한 번에 가능하다.</p>
<hr>
<p><strong>6. 프론트엔드 개선 사항</strong></p>
<p>현재 제조/검사 페이지에서는 정상 범위와 이상 범위가 명확하지 않은 그래프가 있다.</p>
<p>프레스 공정처럼</p>
<p>정상 기준선
이상 기준선</p>
<p>을 함께 표시하면 사용자 입장에서 훨씬 직관적으로 데이터를 이해할 수 있다는 피드백을 받았다.</p>
<hr>
<p><strong>7. Logstash + Kibana 연동</strong></p>
<p>추가로 logback-spring.xml을 수정해서 애플리케이션 로그를 Logstash로 전송하고, OpenSearch(ElasticSearch)에 저장한 뒤 Kibana에서 확인하는 구조도 추천해주셨다.</p>
<p>이렇게 하면 단순한 콘솔 로그보다 운영 환경에서 훨씬 효율적으로 로그를 분석할 수 있을 것 같다.</p>
<hr>
<blockquote>
<h4 id="마무리">마무리</h4>
</blockquote>
<p>오늘은 단순히 기능 구현만 진행한 것이 아니라 AI 분석 이벤트 흐름과 AGV Dispatch 구조를 다시 설계하는 과정을 많이 고민한 하루였다.</p>
<p>특히 멘토님 피드백을 들으면서 &quot;왜 이 기술을 사용하는가&quot;, &quot;서비스 구조를 어떻게 가져가야 유지보수가 쉬운가&quot;에 대해 다시 생각해볼 수 있었다.</p>
<p>내일은 Route별 Dispatch Queue를 마무리하고, Logstash-Kibana 연동도 함께 진행해볼 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 30 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-30-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-30-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Tue, 30 Jun 2026 08:08:38 GMT</pubDate>
            <description><![CDATA[<h3 id="kafka-기반-agv-운반-흐름-개선과-서비스-간-연동-방식-고민">Kafka 기반 AGV 운반 흐름 개선과 서비스 간 연동 방식 고민</h3>
<p>오늘은 제조 이벤트와 AGV 운반 흐름을 다시 점검하면서, <strong>공정 완료와 AGV 운반 완료 사이의 관계</strong>를 어떻게 설계해야 하는지에 대해 팀원들과 많은 논의를 진행했다.</p>
<p>또한 강사님 피드백을 통해 현재 프로젝트에서 가장 우선해야 하는 것이 무엇인지도 다시 한번 정리할 수 있었다.</p>
<hr>
<h3 id="agv-운반-시점에-대한-고민">AGV 운반 시점에 대한 고민</h3>
<p>현재 프로젝트에서는 제조 공정이 완료되면 다음 공정을 READY 상태로 변경하고, AGV가 출발하도록 구현하고 있다.</p>
<p>하지만 현재 Assembly Service에서는 Scheduler가 5초마다 READY 상태의 이벤트를 조회하여 Kafka로 발행하는 구조이기 때문에 문제가 하나 발생한다.</p>
<p>예를 들어,</p>
<pre><code>PRESS 공정 완료
        ↓
BODY 이벤트 READY
        ↓
Scheduler가 BODY 이벤트 Kafka 발행
        ↓
AGV는 아직 PRESS → BODY 이동 중
        ↓
BODY 공정이 먼저 시작됨</code></pre><p>실제 제조 공정에서는 AGV가 다음 공정에 도착해야 작업이 시작되어야 한다.</p>
<p>하지만 현재 구조에서는 AGV의 이동 여부와 관계없이 Scheduler가 READY 이벤트를 먼저 발행하기 때문에 비정상적인 흐름이 발생할 수 있다.</p>
<p>즉,</p>
<p><strong>공정 준비(READY)와 실제 운반 완료를 동일하게 취급하면 안 된다는 문제</strong>가 생긴 것이다.</p>
<hr>
<h3 id="해결-방안-고민">해결 방안 고민</h3>
<h4 id="방법-1-kafka-이벤트로-운반-완료-전달">방법 1. Kafka 이벤트로 운반 완료 전달</h4>
<pre><code>Main Backend
        ↓
factory.transport.completed
        ↓
Assembly Service</code></pre><p>AGV가 도착하면 Main Backend가 새로운 Kafka Topic에 운반 완료 이벤트를 발행하고,</p>
<p>Assembly Service가 이를 수신하여 다음 공정을 READY 상태로 변경하는 방식이다.</p>
<h4 id="장점">장점</h4>
<ul>
<li>서비스 간 결합도가 낮다.</li>
<li>이벤트 기반 아키텍처를 유지할 수 있다.</li>
<li>AI 서비스, 통계 서비스 등 다른 서비스에서도 동일 이벤트를 쉽게 활용할 수 있다.</li>
<li>향후 기능 확장에 유리하다.</li>
</ul>
<h4 id="단점">단점</h4>
<ul>
<li>Topic과 Consumer를 추가로 관리해야 한다.</li>
<li>현재 프로젝트 규모에서는 다소 과한 구조가 될 수 있다.</li>
</ul>
<hr>
<h4 id="방법-2-api-호출-방식">방법 2. API 호출 방식</h4>
<pre><code>Main Backend
        ↓
POST /transport/complete
        ↓
Assembly Service</code></pre><p>AGV 운반이 완료되면 Main Backend가 Assembly Service의 API를 호출하여 다음 공정을 READY 상태로 변경하는 방식이다.</p>
<h4 id="장점-1">장점</h4>
<ul>
<li>구현이 단순하다.</li>
<li>별도의 Kafka Topic이 필요 없다.</li>
<li>즉시 처리할 수 있다.</li>
<li>현재 프로젝트 규모에 적합하다.</li>
</ul>
<h4 id="단점-1">단점</h4>
<ul>
<li>Main Backend가 Assembly Service를 직접 호출하게 되어 서비스 간 결합도가 높아진다.</li>
<li>다른 서비스에서 운반 완료 정보를 활용하려면 추가 개발이 필요하다.</li>
</ul>
<p>현재 프로젝트에서는 구현 난이도와 일정 등을 고려하여 <strong>API 방식으로 우선 구현</strong>하기로 결정하였다.</p>
<hr>
<h3 id="강사님-피드백">강사님 피드백</h3>
<p>오늘 강사님께서 여러 가지 피드백을 주셨는데, 가장 크게 느낀 부분은 <strong>MVP에 집중해야 한다</strong>는 점이었다.</p>
<p>현재는 Kafka나 Redis 같은 기술을 어떻게 활용할지 고민하는 데 많은 시간을 쓰고 있지만,</p>
<p>발표와 시연에서는 결국 <strong>사용자가 직접 볼 수 있는 기능</strong>이 가장 중요하다.</p>
<p>특히,</p>
<ul>
<li>MVP 기능을 먼저 완성할 것</li>
<li>데이터 구조는 미리 만들어 놓고 테스트를 병행할 것</li>
<li>데이터 흐름과 MVP 기능이 자연스럽게 연결되어야 할 것</li>
</ul>
<p>이라는 점을 강조해 주셨다.</p>
<p>또한 AI 기능 역시 단순히 API를 호출하는 수준이 아니라,</p>
<ul>
<li>RAG</li>
<li>Prompt Engineering</li>
<li>MCP</li>
<li>전처리</li>
</ul>
<p>등을 함께 고려해야 프로젝트의 차별성이 생길 수 있다는 조언도 들을 수 있었다.</p>
<hr>
<h3 id="느낀-점">느낀 점</h3>
<p>오늘 가장 고민했던 부분은 <strong>&quot;언제 다음 공정을 시작해야 하는가?&quot;</strong>였다.</p>
<p>처음에는 단순히 공정이 끝나면 다음 이벤트를 READY로 만들면 된다고 생각했지만,</p>
<p>실제 제조 흐름에서는 AGV라는 물리적인 운반 과정이 존재하기 때문에 그 과정까지 고려해야 정상적인 시뮬레이션이 된다.</p>
<p>이번 논의를 통해 이벤트 기반 아키텍처를 설계할 때는 <strong>비즈니스 흐름과 실제 공정 순서가 일치하도록 설계하는 것이 중요하다</strong>는 점을 다시 한번 느꼈다.</p>
<p>또한 현재 프로젝트 단계에서는 이상적인 구조보다 <strong>발표와 시연에 필요한 MVP를 우선 완성하는 것</strong>이 더 중요하다는 점도 다시 한번 정리할 수 있었던 하루였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 27 멘토링 일지]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-27-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-27-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sat, 27 Jun 2026 08:12:03 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="중간발표-피드백">중간발표 피드백</h2>
</blockquote>
<p>중간발표 이후 멘토링을 통해 발표 내용뿐만 아니라 현재 프로젝트의 구조와 개발 방향에 대해 다시 한번 점검하는 시간을 가졌다. 단순히 기능을 구현하는 것보다 <strong>왜 이런 구조를 선택했는지</strong>, <strong>데이터가 어떻게 흘러가는지</strong>를 명확하게 설명하는 것이 중요하다는 점을 많이 느꼈다.</p>
<hr>
<h3 id="kafka는-왜-사용하는가">Kafka는 왜 사용하는가?</h3>
<p>가장 많이 나온 이야기 중 하나는 <strong>Kafka를 사용하는 이유</strong>였다.</p>
<p>그동안은 &quot;무중단 처리&quot; 정도로만 설명했지만, 실제로는 <strong>MSA 환경에서 서비스 간 독립성을 유지하기 위해 반드시 필요한 기술</strong>이라는 점을 강조해야 했다.</p>
<p>만약 Kafka가 없다면 하나의 제조 이벤트가 발생할 때마다 여러 서비스가 서로 직접 API를 호출해야 한다.</p>
<pre><code>AGV Service
      ↓
Alert Service
      ↓
AI Service
      ↓
Dashboard</code></pre><p>이처럼 서비스 간 의존성이 높아지고 아키텍처가 복잡해질 수 있다.</p>
<p>반면 Kafka를 사용하면 하나의 이벤트를 발행하고, 필요한 서비스들이 각각 동일한 이벤트를 독립적으로 소비한다.</p>
<pre><code>Manufacturing Event
        ↓
      Kafka
   ├─ AGV Service
   ├─ AI Service
   ├─ Alert Service
   └─ Dashboard</code></pre><p>서비스 간 결합도를 낮출 수 있고, MSA 구조를 유지하기 위한 핵심 요소라는 점을 발표에서 반드시 설명해야 한다는 피드백을 받았다.</p>
<hr>
<h3 id="데이터-흐름도를-더-명확하게-표현하기">데이터 흐름도를 더 명확하게 표현하기</h3>
<p>이번 발표에서 가장 많이 수정해야 하는 부분은 데이터 흐름도였다.</p>
<p>기존에는 Kafka와 Consumer Group 위주로 표현했지만, 실제로 중요한 것은</p>
<blockquote>
<p>어떤 <strong>데이터</strong>가 들어와서</p>
<p>어떤 <strong>서비스</strong>가 처리하고</p>
<p>어떤 <strong>결과 데이터</strong>를 생성하는가</p>
</blockquote>
<p>였다.</p>
<p>예를 들어</p>
<pre><code>제조 이벤트
      ↓
Manufacturing Service
      ↓
AI 분석
      ↓
분석 결과 저장
      ↓
Dashboard 조회</code></pre><p>처럼 <strong>데이터 → 서비스 → 결과물</strong>의 흐름이 한눈에 보이도록 수정하는 것이 좋다는 피드백을 받았다.</p>
<p>Consumer Group 자체는 구현 세부사항이기 때문에 발표에서는 굳이 강조하지 않아도 된다고 하셨다.</p>
<hr>
<h3 id="ai-기능은-왜를-설명할-수-있어야-한다">AI 기능은 &quot;왜?&quot;를 설명할 수 있어야 한다</h3>
<p>최종 발표에서는 단순히</p>
<ul>
<li>LightGBM 사용</li>
<li>SHAP 사용</li>
</ul>
<p>이라고 설명하는 것이 아니라</p>
<p><strong>왜 해당 모델을 선택했는지</strong>를 설명해야 한다.</p>
<p>또한 현재 구현 중인 기능인</p>
<ul>
<li>현장 대응 알림 신뢰성 평가</li>
<li>불량 예측 및 전이 분석</li>
</ul>
<p>에서도 동일한 피드백을 받았다.</p>
<p>특히 <strong>알림 신뢰성 평가 공식</strong>은 현재 임의로 만든 식을 사용하고 있는데,</p>
<p>공식에 대한 레퍼런스가 있는지 질문이 나왔고,</p>
<p>가능하면 실제 논문이나 산업 사례를 참고하여 근거 있는 계산 방식으로 수정하는 것이 좋다는 의견을 받았다.</p>
<p>실제 산업에서는 단순한 계산식보다는</p>
<ul>
<li>정탐률(True Positive)</li>
<li>오탐률(False Positive)</li>
<li>관제사의 조치 이력</li>
</ul>
<p>등을 지속적으로 머신러닝 모델에 학습시켜 AI 신뢰도를 계산한다고 한다.</p>
<p>우리 프로젝트 역시 실제 사례를 참고하여 개선할 필요성을 느꼈다.</p>
<hr>
<h3 id="기술-스택도-선택-이유를-설명해야-한다">기술 스택도 선택 이유를 설명해야 한다</h3>
<p>기술 스택 페이지에서도</p>
<p>&quot;무엇을 사용했다&quot;</p>
<p>보다</p>
<p>&quot;왜 사용했는가&quot;</p>
<p>가 중요하다는 피드백을 받았다.</p>
<p>예를 들면</p>
<ul>
<li>Kafka → 서비스 간 독립적인 이벤트 처리</li>
<li>OpenSearch → 대용량 로그 검색 및 분석</li>
<li>NAT Gateway → Private Subnet에서 외부 AI 서비스와 통신</li>
</ul>
<p>처럼 기술 선정 이유를 함께 설명하는 것이 발표의 설득력을 높여준다.</p>
<p>반면 Redis는 이번 프로젝트에서는 핵심 기술이라기보다 구현을 위한 보조 기술이므로 비중을 크게 둘 필요는 없다는 의견도 있었다.</p>
<hr>
<h3 id="실시간-화면은-반드시-websocket만이-답은-아니다">실시간 화면은 반드시 WebSocket만이 답은 아니다</h3>
<p>제조 페이지와 검사 페이지의 데이터 표시 방식에 대해서도 이야기가 나왔다.</p>
<p>대시보드라고 해서 반드시 모든 화면이 완전한 실시간(WebSocket)일 필요는 없으며,</p>
<p>화면 특성에 따라 일정 주기로 Refresh하는 방식도 충분히 현실적인 선택이라고 한다.</p>
<p>실제 현업에서도 사용자가</p>
<ul>
<li>5초</li>
<li>10초</li>
<li>30초</li>
</ul>
<p>등 원하는 새로고침 주기를 설정할 수 있도록 구현하는 경우가 많다고 한다.</p>
<p>따라서</p>
<ul>
<li>정말 실시간이 필요한 데이터</li>
<li>일정 주기 조회만으로 충분한 데이터</li>
</ul>
<p>를 구분해서 설계하는 것이 중요하다.</p>
<hr>
<h3 id="프로젝트-개요도-선택-이유를-담아야-한다">프로젝트 개요도 선택 이유를 담아야 한다</h3>
<p>프로젝트 개요에서는</p>
<p>&quot;왜 자동차 제조를 선택했는가&quot;</p>
<p>정도를 간단하게 설명하는 것이 좋다는 의견도 받았다.</p>
<p>자동차 제조 산업은</p>
<ul>
<li>제조 공정이 매우 복잡함</li>
<li>설비 종류가 다양함</li>
<li>AI 활용 사례가 활발한 분야</li>
</ul>
<p>또한 관련 기술과 연구 사례도 많아 프로젝트 주제로 적합하다는 점을 함께 설명하면 프로젝트의 설득력이 높아질 것 같다.</p>
<hr>
<h3 id="앞으로-개선하면-좋을-기능">앞으로 개선하면 좋을 기능</h3>
<p>시간적인 여유가 있다면</p>
<p>현재 Rule을 코드에 하드코딩하는 방식이 아니라,</p>
<p>관제사가 직접 Rule을 생성하고 수정할 수 있도록 관리 화면을 제공하는 방향도 고려해보라는 의견을 받았다.</p>
<p>실제 스마트팩토리 관제 시스템 역시 운영자가 직접 이상 탐지 Rule을 관리하는 경우가 많다고 한다.</p>
<hr>
<h3 id="일정-관리도-프로젝트의-일부">일정 관리도 프로젝트의 일부</h3>
<p>기술적인 내용 외에도 Redmine 관리 방식에 대한 피드백도 받았다.</p>
<p>현재는 스프린트 경계가 다소 모호했는데,</p>
<pre><code>하나의 스프린트가 종료된 후 -&gt; 배포 및 테스트를 완료하고 -&gt; 다음 스프린트를 시작하는 형태</code></pre><p>로 관리하는 것이 애자일 방식에 더 적합하다고 한다.</p>
<p>완료하지 못한 작업도 반드시</p>
<ul>
<li>이번 스프린트에서 끝낼 것인지</li>
<li>다음 스프린트로 넘길 것인지</li>
</ul>
<p>명확하게 관리해야 한다는 점도 다시 확인했다.</p>
<hr>
<h3 id="앞으로-해야-할-일">앞으로 해야 할 일</h3>
<p>멘토링 이후 가장 우선순위가 높은 작업은 다음 두 가지로 정리되었다.</p>
<ol>
<li>데이터 흐름도를 <strong>데이터 → 서비스 → 결과물</strong> 중심으로 수정하기 (완료)</li>
<li>Redmine 스프린트와 간트 차트를 실제 개발 일정에 맞게 정리하기 (완료)</li>
</ol>
<p>이번 멘토링을 통해 단순히 기능을 구현하는 것보다 <strong>설계 의도와 기술 선택 이유를 설명할 수 있는 프로젝트</strong>를 만드는 것이 훨씬 중요하다는 점을 다시 한번 느꼈다.</p>
<p>최종 발표에서는 구현 내용뿐만 아니라 구조와 선택 이유까지 자연스럽게 설명할 수 있도록 계속 보완해 나갈 예정이다.</p>
<p><img src="https://velog.velcdn.com/images/jongchan_im/post/0557fb8f-da64-4076-aa17-91252b9ce960/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 24 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-24-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-24-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Wed, 24 Jun 2026 08:28:09 GMT</pubDate>
            <description><![CDATA[<h3 id="오늘-한-일">오늘 한 일</h3>
<p>오늘은 중간발표를 앞두고 발표자료를 정리하고, 현재 구현 내용과 발표 내용이 일치하도록 기능 정의를 수정했다.</p>
<p>또한 PPT 전체 흐름과 발표 대본을 정리하면서 프로젝트의 방향성과 전달하고자 하는 핵심 메시지를 다시 점검하는 시간을 가졌다.</p>
<hr>
<h3 id="골든서클golden-circle-발표-방식-적용">골든서클(Golden Circle) 발표 방식 적용</h3>
<p>이번 중간발표는 단순히 기능을 나열하는 방식이 아니라 골든서클 방식으로 발표를 구성하기로 했다.</p>
<p>보통 발표는</p>
<pre><code>무엇을 만들었는가(What)
→ 어떻게 만들었는가(How)</code></pre><p>순서로 설명하는 경우가 많다.</p>
<p>하지만 골든서클은</p>
<pre><code>왜 만들었는가(Why)
→ 어떻게 해결했는가(How)
→ 무엇을 만들었는가(What)</code></pre><p>순서로 설명한다.</p>
<p>즉,</p>
<ul>
<li>왜 이 프로젝트를 시작했는지</li>
<li>어떤 문제를 해결하고 싶었는지</li>
<li>어떤 방식으로 접근했는지</li>
<li>최종적으로 무엇을 구현했는지</li>
</ul>
<p>순서로 발표 흐름을 구성하기로 했다.</p>
<p>특히 AIMS 프로젝트에서는</p>
<blockquote>
<p>&quot;제조 현장의 데이터는 많지만, 실제로 활용하기 어렵다.&quot;</p>
</blockquote>
<p>라는 문제의식에서 시작해</p>
<blockquote>
<p>&quot;제조 데이터를 통합하고 분석하여 관제 효율을 높이자&quot;</p>
</blockquote>
<p>라는 방향으로 설명하기로 했다.</p>
<hr>
<h2 id="기능-수정">기능 수정</h2>
<h3 id="1-알림-신뢰성-평가-기능-변경">1. 알림 신뢰성 평가 기능 변경</h3>
<h4 id="기존-기획">기존 기획</h4>
<p>초기에는 AI가 발생시키는 알림에 대해 관제사가 어떻게 반응하는지를 기반으로 AI 신뢰도를 평가하려고 했다.</p>
<p>사용자 행동을</p>
<ul>
<li>무시(IGN)</li>
<li>확인 후 미조치(VIEW)</li>
</ul>
<p>로 구분하고</p>
<p>불신 지수를 계산하여 AI 신뢰도를 평가하는 구조였다.</p>
<p>하지만 현재 시스템에는</p>
<ul>
<li>AI 신뢰도 반영 기능</li>
<li>모델 자동 개선 기능</li>
</ul>
<p>이 존재하지 않는다.</p>
<p>즉,</p>
<p>기획서에는 있지만 실제 구현은 되어 있지 않은 상태였다.</p>
<hr>
<h3 id="변경-후">변경 후</h3>
<p>기능명을</p>
<pre><code>AI 알림 신뢰성 평가</code></pre><p>에서</p>
<pre><code>현장 대응형 알림 우선순위</code></pre><p>로 변경했다.</p>
<p>현재 실제 구현된 상태값인</p>
<ul>
<li>조치 완료</li>
<li>조치 불필요</li>
<li>조치 미완료</li>
</ul>
<p>를 활용하여 알림 우선순위를 계산하는 기능으로 재정의하였다.</p>
<hr>
<h3 id="현장-대응-감점률">현장 대응 감점률</h3>
<p>현장 대응 이력을 기반으로 감점률을 계산한다.</p>
<pre><code>현장대응감점률 =
((조치불필요 × 1.0) + (조치미완료 × 0.5))
÷ 전체알림수 × 100</code></pre><p>의미는 다음과 같다.</p>
<ul>
<li>조치 불필요 → 실제 필요성이 낮았던 알림</li>
<li>조치 미완료 → 대응이 제대로 이루어지지 않은 알림</li>
</ul>
<p>이 비율이 높을수록 알림의 중요도를 일부 낮추도록 설계했다.</p>
<hr>
<h3 id="우선순위-점수">우선순위 점수</h3>
<p>최종 우선순위는 RiskScore와 감점률을 결합하여 계산한다.</p>
<pre><code>우선순위점수 =
RiskScore × (1 - 0.5 × 현장대응감점률 / 100)</code></pre><p>이를 통해</p>
<ul>
<li>위험도는 높지만 실제로 중요했던 알림</li>
<li>현장에서 반복적으로 대응이 필요한 알림</li>
</ul>
<p>을 상단에 배치할 수 있도록 설계하였다.</p>
<hr>
<h3 id="변경-목적">변경 목적</h3>
<ul>
<li>실제 구현과 기획 내용 일치</li>
<li>구현되지 않은 AI 신뢰도 평가 제거</li>
<li>현장 대응 데이터를 실제 활용</li>
<li>불필요한 알림으로 인한 피로도 감소</li>
<li>중요한 알림 누락 방지</li>
</ul>
<hr>
<h3 id="향후-계획-페이지-작성">향후 계획 페이지 작성</h3>
<p>중간발표 이후 일정 관리를 위해</p>
<ul>
<li>Redmine</li>
<li>WBS</li>
</ul>
<p>를 기반으로 향후 계획 페이지를 작성했다.</p>
<p>주요 내용은 다음과 같다.</p>
<h3 id="구현-예정">구현 예정</h3>
<ul>
<li>Frontend ↔ Backend 실시간 연동</li>
<li>Kafka 기반 이벤트 처리 안정화</li>
<li>AI 분석 결과 연동</li>
<li>Watchy 기능 개선</li>
<li>통합 테스트</li>
</ul>
<h3 id="최종-발표-전">최종 발표 전</h3>
<ul>
<li>기능 고도화</li>
<li>UI 개선</li>
<li>시연 시나리오 완성</li>
<li>최종 발표 자료 작성</li>
</ul>
<p>을 목표로 진행하기로 했다.</p>
<hr>
<h3 id="발표-대본-작성">발표 대본 작성</h3>
<p>총 24페이지 분량의 중간발표 대본을 작성했다.</p>
<p>발표 흐름은 다음과 같이 구성했다.</p>
<pre><code>프로젝트 개요
→ 팀 구성
→ 수행 절차
→ 주요 기능
→ 기술 스택
→ 수행 경과
→ 향후 계획</code></pre><p>각 페이지마다</p>
<ul>
<li>설명 내용</li>
<li>다음 슬라이드로 넘어가는 연결 문구</li>
</ul>
<p>를 함께 작성했다.</p>
<hr>
<h3 id="프로젝트-개요">프로젝트 개요</h3>
<p>프로젝트의 시작 배경을 설명한다.</p>
<p>주요 내용</p>
<ul>
<li>Industry 4.0 환경</li>
<li>레거시 설비 데이터 문제</li>
<li>자동차 제조 산업 선정 이유</li>
<li>제조 데이터 통합 필요성</li>
<li>AI 기반 분석 필요성</li>
<li>스마트 관제 플랫폼 구축 목표</li>
</ul>
<hr>
<h3 id="주요-기능">주요 기능</h3>
<h3 id="현장-대응형-알림-우선순위">현장 대응형 알림 우선순위</h3>
<ul>
<li>RiskScore 활용</li>
<li>현장 대응 감점률 계산</li>
<li>위험도 기반 정렬</li>
<li>관제 효율 향상</li>
</ul>
<h3 id="불량-예측-전이-분석">불량 예측 전이 분석</h3>
<ul>
<li>제조 데이터 학습</li>
<li>LightGBM 기반 예측</li>
<li>SHAP 기반 원인 분석</li>
<li>공정별 영향도 분석</li>
</ul>
<h3 id="watchy">Watchy</h3>
<ul>
<li>사용자 숙련도별 정보 제공</li>
<li>AI 매뉴얼 기능</li>
<li>단계별 대응 가이드 제공</li>
</ul>
<hr>
<h3 id="기술-스택-및-인프라">기술 스택 및 인프라</h3>
<h4 id="backend">Backend</h4>
<ul>
<li>Spring Boot</li>
<li>JPA</li>
<li>Redis</li>
<li>Kafka</li>
</ul>
<h4 id="frontend">Frontend</h4>
<ul>
<li>Next.js</li>
<li>TypeScript</li>
</ul>
<h4 id="ai">AI</h4>
<ul>
<li>LightGBM</li>
<li>RandomForest</li>
<li>ExtraTrees</li>
<li>Logistic Regression</li>
<li>SHAP</li>
</ul>
<h4 id="infrastructure">Infrastructure</h4>
<ul>
<li>Route53</li>
<li>ALB</li>
<li>EKS</li>
<li>MSK</li>
<li>RDS</li>
<li>OpenSearch</li>
</ul>
<hr>
<h3 id="수행-경과">수행 경과</h3>
<p>현재까지 진행된 내용을 정리했다.</p>
<h3 id="데이터-정제">데이터 정제</h3>
<ul>
<li>Ford 데이터셋</li>
<li>KAMP 데이터셋</li>
<li>Bosch 데이터셋</li>
</ul>
<p>통합 및 정제</p>
<h3 id="이벤트-처리-구조">이벤트 처리 구조</h3>
<pre><code>Scheduler
↓
Kafka
↓
Consumer
↓
Redis
↓
WebSocket
↓
Frontend</code></pre><p>실시간 관제 구조 설명</p>
<h3 id="구현-완료-기능">구현 완료 기능</h3>
<ul>
<li>메인 대시보드</li>
<li>공정 흐름도</li>
<li>AGV 시뮬레이션</li>
<li>이벤트 조회</li>
<li>검사 화면</li>
<li>실시간 알림</li>
</ul>
<hr>
<h2 id="강사님-피드백">강사님 피드백</h2>
<h3 id="모델-성능-지표-노출-주의">모델 성능 지표 노출 주의</h3>
<p>현재 모델 성능 수치가 높지 않은 상태에서</p>
<p>정확도 수치를 그대로 강조하면</p>
<p>오히려 약점으로 보일 수 있다는 피드백을 받았다.</p>
<hr>
<h3 id="개선-방향">개선 방향</h3>
<p>현재 성능을 자랑하기보다는</p>
<ul>
<li>왜 해당 모델을 선택했는지</li>
<li>어떤 방식으로 개선하고 있는지</li>
<li>최종 발표까지 얼마나 향상시킬 계획인지</li>
</ul>
<p>를 설명하는 것이 더 중요하다.</p>
<p>특히</p>
<blockquote>
<p>중간발표 대비 0.1만 향상되어도 충분히 의미 있는 성과</p>
</blockquote>
<p>라는 조언을 받았다.</p>
<hr>
<h3 id="ppt-흐름-개선-필요">PPT 흐름 개선 필요</h3>
<p>현재 PPT를 보면</p>
<p>&quot;그래서 우리가 무엇을 말하고 싶은가?&quot;</p>
<p>가 잘 드러나지 않는다는 피드백을 받았다.</p>
<p>따라서</p>
<ul>
<li>Why</li>
<li>How</li>
<li>What</li>
</ul>
<p>흐름이 자연스럽게 이어지도록 다시 정리하기로 했다.</p>
<hr>
<h2 id="느낀-점">느낀 점</h2>
<p>오늘은 기능 구현보다는 발표 준비에 집중한 하루였다.</p>
<p>특히 기존의 &quot;AI 신뢰도 평가&quot; 기능이 실제 구현 내용과 맞지 않는다는 점을 발견하고, 이를 &quot;현장 대응형 알림 우선순위&quot;로 재정의하면서 기획과 구현의 일관성을 맞출 수 있었다.</p>
<p>또한 골든서클 방식으로 발표 흐름을 재정비하면서 단순히 기능을 소개하는 것이 아니라</p>
<p>&quot;왜 이 프로젝트를 만들었는가&quot;</p>
<p>를 먼저 전달하는 것이 중요하다는 점을 다시 느꼈다.</p>
<p>이제 남은 기간 동안은 기능 완성도 향상과 통합 테스트에 집중하여 최종 발표까지 프로젝트를 안정적으로 마무리하는 것이 목표다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 22 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-22-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-22-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Mon, 22 Jun 2026 08:29:04 GMT</pubDate>
            <description><![CDATA[<h3 id="제조-이벤트-흐름-설계-개선---kafka-기반-공정-제어-구조">제조 이벤트 흐름 설계 개선 - Kafka 기반 공정 제어 구조</h3>
<p>현재 진행 중인 스마트팩토리 관제 시스템(AIMS)은 실제 MES 데이터를 사용하는 것이 아니라 Sample DB에 저장된 제조 이벤트를 기반으로 공정을 시뮬레이션하는 방식으로 구현하고 있다.</p>
<p>초기에는 모든 공정 이벤트를 시간 순서대로 재생하는 구조를 고려했지만, 제조 과정 중 설비 이상이나 품질 문제로 인해 공정이 중단되는 상황을 반영하기 어렵다는 문제가 있었다.</p>
<p>이번 회의에서는 이러한 문제를 해결하기 위한 제조 이벤트 흐름 구조를 정리하였다.</p>
<hr>
<h3 id="기존-방식의-문제점">기존 방식의 문제점</h3>
<p>기존 구조는 차량 하나에 대해 모든 공정 이벤트가 미리 생성되어 있는 형태였다.</p>
<pre><code class="language-text">CAR-001

Press
 ↓
Body
 ↓
Paint
 ↓
Assembly</code></pre>
<p>즉, Sample DB에 이미 모든 공정 이벤트가 저장되어 있고 Scheduler가 순서대로 발행하는 방식이다.</p>
<p>하지만 이 구조에서는 다음과 같은 문제가 발생한다.</p>
<h3 id="문제-상황">문제 상황</h3>
<p>Press 공정에서 이상 탐지가 발생한 경우</p>
<pre><code class="language-text">Press (이상 발생)
 ↓
Body
 ↓
Paint
 ↓
Assembly</code></pre>
<p>실제로는 Press 공정에서 생산이 중단되어야 하지만 이미 다음 공정 이벤트가 존재하기 때문에 Body 공정까지 진행되는 모순이 발생할 수 있다.</p>
<hr>
<h3 id="개선된-제조-이벤트-흐름">개선된 제조 이벤트 흐름</h3>
<p>이를 해결하기 위해 이벤트 상태 기반 제어 방식을 적용하기로 했다.</p>
<h4 id="핵심-아이디어">핵심 아이디어</h4>
<p>모든 공정 이벤트는 원천 DB에 저장되어 있지만 Scheduler는 READY 상태의 이벤트만 Kafka로 발행한다.</p>
<pre><code class="language-text">Manufacturing Event

READY
 ↓
Kafka 발행
 ↓
분석 수행
 ↓
정상
 ↓
다음 공정 READY</code></pre>
<hr>
<h3 id="최종-데이터-흐름">최종 데이터 흐름</h3>
<p>차량 하나의 공정 흐름은 다음과 같다.</p>
<pre><code class="language-text">Press
 ↓
Body
 ↓
Paint
 ↓
Assembly</code></pre>
<p>예를 들어 차량 A가 있다고 가정하면</p>
<h4 id="초기-상태">초기 상태</h4>
<table>
<thead>
<tr>
<th>공정</th>
<th>상태</th>
</tr>
</thead>
<tbody><tr>
<td>Press</td>
<td>READY</td>
</tr>
<tr>
<td>Body</td>
<td>WAIT</td>
</tr>
<tr>
<td>Paint</td>
<td>WAIT</td>
</tr>
<tr>
<td>Assembly</td>
<td>WAIT</td>
</tr>
</tbody></table>
<p>Scheduler는 READY 상태인 Press만 Kafka로 발행한다.</p>
<h3 id="press-분석-성공">Press 분석 성공</h3>
<pre><code class="language-text">Press 완료
 ↓
분석 성공
 ↓
Body READY</code></pre>
<table>
<thead>
<tr>
<th>공정</th>
<th>상태</th>
</tr>
</thead>
<tbody><tr>
<td>Press</td>
<td>DONE</td>
</tr>
<tr>
<td>Body</td>
<td>READY</td>
</tr>
<tr>
<td>Paint</td>
<td>PENDING</td>
</tr>
<tr>
<td>Assembly</td>
<td>PENDING</td>
</tr>
</tbody></table>
<h3 id="press-분석-실패">Press 분석 실패</h3>
<pre><code class="language-text">Press 이상 발생
 ↓
공정 중지
 ↓
Body READY 생성 안함</code></pre>
<table>
<thead>
<tr>
<th>공정</th>
<th>상태</th>
</tr>
</thead>
<tbody><tr>
<td>Press</td>
<td>ERROR</td>
</tr>
<tr>
<td>Body</td>
<td>WAIT</td>
</tr>
<tr>
<td>Paint</td>
<td>WAIT</td>
</tr>
<tr>
<td>Assembly</td>
<td>WAIT</td>
</tr>
</tbody></table>
<p>따라서 문제가 발생한 차량은 다음 공정으로 이동하지 못한다.</p>
<hr>
<h3 id="팀원-설명용-한-문장-정리">팀원 설명용 한 문장 정리</h3>
<blockquote>
<p>원천DB에는 차량별 4공정 이벤트가 모두 저장되어 있지만, Scheduler는 READY 상태의 row만 Kafka로 발행한다. 처음에는 Press만 READY이고, 각 공정 분석이 정상일 때만 같은 차량의 다음 공정 row를 READY로 열어준다. 따라서 Press에서 이상이 난 차량은 Body row가 READY가 되지 않아 다음 공정으로 넘어가지 않는다.</p>
</blockquote>
<hr>
<h3 id="제조와-검사-프로세스-연결">제조와 검사 프로세스 연결</h3>
<p>현재 제조와 검사는 독립적으로 동작하고 있다.</p>
<pre><code class="language-text">제조
Press
 ↓
Body
 ↓
Paint
 ↓
Assembly

검사
Inspection</code></pre>
<p>하지만 실제 제조 흐름에 가깝게 만들기 위해 제조 완료 이후 검사 프로세스와 연결하는 방향을 검토하였다.</p>
<h3 id="개선-방향">개선 방향</h3>
<pre><code class="language-text">Press
 ↓
Body
 ↓
Paint
 ↓
Assembly
 ↓
Inspection</code></pre>
<p>이를 위해 다음 항목들이 필요하다.</p>
<h3 id="추가-필드">추가 필드</h3>
<ul>
<li>공정 시작 시간</li>
<li>공정 종료 시간</li>
<li>제조 완료 시간</li>
<li>검사 시작 시간</li>
</ul>
<p>특히</p>
<pre><code class="language-text">Assembly 종료 시각
=
Inspection 시작 가능 시각</code></pre>
<p>으로 사용될 예정이다.</p>
<hr>
<h3 id="불량-차량-추적">불량 차량 추적</h3>
<p>모든 차량이 검사 공정으로 이동하는 것은 아니다.</p>
<p>제조 과정에서</p>
<ul>
<li>품질 불량</li>
<li>설비 이상</li>
<li>폐기 처리</li>
</ul>
<p>등이 발생할 수 있기 때문이다.</p>
<p>따라서 차량 추적을 위해 <code>car_master_id</code>를 기준으로 데이터를 관리하기로 하였다.</p>
<p>이를 통해</p>
<ul>
<li>제조 이력 조회</li>
<li>검사 결과 조회</li>
<li>폐기 차량 추적</li>
<li>재작업 차량 추적</li>
</ul>
<p>등이 가능해진다.</p>
<hr>
<h3 id="오늘-회의-내용-정리">오늘 회의 내용 정리</h3>
<h4 id="제조-프로세스">제조 프로세스</h4>
<ul>
<li>제조 데이터 정제 완료 후 검사 페이지와 연동 예정</li>
<li>제조와 검사가 현재는 독립적으로 동작하지만 향후 하나의 흐름으로 연결 예정</li>
<li>의장 공정 종료 시점을 기준으로 검사 시작 시간 계산</li>
<li>공정별 시작 시간과 완료 시간 필드 추가 필요</li>
<li>제조 과정에서 폐기된 차량도 검사 시스템으로 전달하여 제조-검사 간 연결성 강화</li>
</ul>
<h4 id="kafka-및-데이터-흐름">Kafka 및 데이터 흐름</h4>
<ul>
<li>제조 Kafka Topic 구조 수정 진행</li>
<li>제조 이벤트 흐름 재정비</li>
<li>제조 → AGV 운반 데이터 연결 방식 수정</li>
<li>품질 AI Service Kafka 데이터 처리 구조 개선</li>
</ul>
<h4 id="대시보드">대시보드</h4>
<ul>
<li>메인 페이지 공정 흐름도 Kafka 연동 진행</li>
<li>전체 공정 상태 시각화</li>
<li>위험/경고 이벤트 조회 기능 구현</li>
</ul>
<hr>
<h3 id="앞으로-진행할-작업">앞으로 진행할 작업</h3>
<h4 id="제조-파트">제조 파트</h4>
<ul>
<li>Kafka Topic 구조 수정</li>
<li>제조 이벤트 흐름 정비</li>
<li>제조 → 검사 데이터 연동</li>
<li>공정 완료 시점 계산 로직 추가</li>
</ul>
<h4 id="메인-대시보드">메인 대시보드</h4>
<ul>
<li>공정 흐름도 Kafka 연동</li>
<li>제조 이벤트 기반 AGV 운반 연계</li>
</ul>
<h4 id="품질-분석">품질 분석</h4>
<ul>
<li>Kafka 데이터 수신</li>
<li>폐기 차량 데이터 처리</li>
<li>검사 페이지 데이터 연동</li>
</ul>
<hr>
<h3 id="마무리">마무리</h3>
<p>이번 논의를 통해 단순히 이벤트를 시간 순서대로 재생하는 방식에서 벗어나, 공정 분석 결과에 따라 다음 공정을 열어주는 이벤트 제어 구조를 적용하게 되었다.</p>
<p>이 구조를 사용하면 실제 제조 현장에서 발생할 수 있는 설비 이상, 품질 불량, 생산 중단 등의 상황을 보다 현실적으로 시뮬레이션할 수 있으며, 이후 Kafka 기반 MSA 구조와 검사 프로세스 연동에도 자연스럽게 확장할 수 있을 것으로 기대된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 20 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-20-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-20-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Fri, 19 Jun 2026 08:27:45 GMT</pubDate>
            <description><![CDATA[<h3 id="kafka-기반-제조-이벤트-처리-구조-구체화">Kafka 기반 제조 이벤트 처리 구조 구체화</h3>
<p>오늘은 스마트팩토리 관제 시스템에서 제조 이벤트를 어떤 방식으로 생성하고 전달할 것인지에 대해 팀 내 논의를 진행하였다.</p>
<p>기존에는 프레스, 차체, 도장, 의장 공정별 이벤트를 각각 생성하는 구조를 고려하고 있었지만, 공정 간 데이터 연계와 Kafka 활용 측면에서 비효율적인 부분이 존재하였다.</p>
<p>이에 따라 제조 이벤트를 하나의 생산 단위(Car 기준 이벤트)로 관리하고, Kafka를 통해 공정 흐름에 맞게 순차적으로 처리하는 방향으로 구조를 변경하기로 하였다.</p>
<hr>
<h3 id="제조-이벤트-처리-흐름-개선">제조 이벤트 처리 흐름 개선</h3>
<p>기존 방식</p>
<pre><code class="language-text">Press Event
Body Event
Paint Event
Assembly Event</code></pre>
<p>공정별로 별도 이벤트를 생성하다 보니 이벤트 간 연관관계를 관리하기 어렵고 데이터 중복도 발생할 수 있었다.</p>
<p>개선 방식</p>
<pre><code class="language-text">Manufacturing Event
    ↓
PRESS
    ↓
BODY
    ↓
PAINT
    ↓
ASSEMBLY</code></pre>
<p>하나의 제조 이벤트가 Kafka를 통해 전달되며 현재 공정 상태를 갱신하는 방식으로 변경하였다.</p>
<p>이를 통해 생산 중인 차량이 어느 공정까지 진행되었는지 추적할 수 있으며, 공정 이상 발생 시 후속 공정에도 자연스럽게 영향을 반영할 수 있게 된다.</p>
<hr>
<h3 id="agv-연동-구조-논의">AGV 연동 구조 논의</h3>
<p>현재 프로젝트에서는 제조 공정과 AGV 운행을 별도 기능으로 구현하고 있었으나, 실제 제조 환경을 고려하면 AGV 역시 제조 이벤트와 연결되어 동작하는 것이 자연스럽다고 판단하였다.</p>
<p>예시 시나리오</p>
<pre><code class="language-text">PRESS 공정 완료
        ↓
Kafka Event 발생
        ↓
AGV 출발
        ↓
BODY 공정으로 운반
        ↓
BODY 공정 시작</code></pre>
<p>이 구조를 적용하면 공정 완료 이벤트를 기준으로 AGV가 움직이게 되며 실제 생산 흐름과 유사한 시뮬레이션이 가능해진다.</p>
<p>또한 특정 공정에서 설비 이상이 발생할 경우</p>
<pre><code class="language-text">설비 이상 발생
        ↓
공정 중지
        ↓
AGV 대기
        ↓
후속 공정 지연</code></pre>
<p>과 같은 연쇄 효과를 표현할 수 있다.</p>
<hr>
<h3 id="제조-공정과-검사-공정의-연결성-검토">제조 공정과 검사 공정의 연결성 검토</h3>
<p>현재 제조 공정과 검사 공정은 각각 독립적으로 구현되고 있다.</p>
<p>하지만 강사님 피드백을 통해 최종 발표에서는 기능 단위 설명보다 사용자 관점의 흐름으로 설명하는 것이 중요하다는 점을 확인하였다.</p>
<p>기존 설명 방식</p>
<pre><code class="language-text">제조 시스템
품질 검사 시스템
AI 분석 시스템</code></pre>
<p>개별 기능 설명</p>
<p>개선 방향</p>
<pre><code class="language-text">생산
 ↓
이상 탐지
 ↓
품질 검사
 ↓
AI 분석
 ↓
알림 및 대응</code></pre>
<p>사용자가 경험하는 하나의 업무 흐름으로 설명</p>
<p>향후 발표 자료에서도 각 기능을 독립적인 모듈로 설명하기보다는 하나의 제조 시나리오 안에서 연결되는 구조로 정리할 예정이다.</p>
<hr>
<h3 id="ai-활용-방식-재검토">AI 활용 방식 재검토</h3>
<p>현재 제조 공정에서는 Rule 기반 이상 탐지와 AI 분석 기능이 함께 사용되고 있다.</p>
<p>강사님 피드백에 따르면 이상 탐지와 같이 명확한 기준이 존재하는 문제는 LLM보다는 ML 기반 모델이 적합할 수 있다.</p>
<p>따라서 최종 발표에서는</p>
<ul>
<li>제조 공정 이상 탐지 → Rule + ML 기반</li>
<li>AI 매뉴얼 및 사용자 지원 → LLM 활용</li>
</ul>
<p>이라는 역할 분리를 명확히 설명할 계획이다.</p>
<p>또한 향후에는 RAG 구조를 적용하여 제조 도메인 지식과 운영 데이터를 함께 활용하는 방향도 검토하기로 하였다.</p>
<hr>
<h3 id="향후-개발-방향">향후 개발 방향</h3>
<p>다음 주부터는 아키텍처 설계 중심의 논의보다 실제 구현 비중을 높일 예정이다.</p>
<p>우선순위는 다음과 같다.</p>
<ol>
<li>Kafka Producer / Consumer 연동 완료</li>
<li>제조 이벤트 → AGV 연동 구현</li>
<li>공정 흐름도 실시간 반영</li>
<li>WebSocket 기반 실시간 알림 구현</li>
<li>AI 매뉴얼 기능 구체화</li>
<li>전체 시스템 아키텍처 다이어그램 완성</li>
</ol>
<p>현재까지는 구조 설계 단계가 대부분 완료되었으며, 앞으로는 실제 기능 구현과 서비스 통합에 집중할 예정이다.</p>
<hr>
<h3 id="느낀-점">느낀 점</h3>
<p>오늘 회의를 통해 단순히 Kafka를 사용하는 것보다 &quot;왜 Kafka가 필요한가&quot;를 다시 고민해볼 수 있었다.</p>
<p>특히 제조 이벤트, AGV, 알림, AI 분석을 하나의 이벤트 흐름으로 연결하면 각 기능이 독립적으로 동작하면서도 동일한 데이터를 공유할 수 있다는 점이 인상적이었다.</p>
<p>최종 목표는 단순한 기능 시연이 아니라 실제 스마트팩토리 관제 시스템처럼 생산 → 물류 → 품질 → 분석 → 대응이 하나의 흐름으로 이어지는 구조를 구현하는 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 17 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-17-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-17-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Wed, 17 Jun 2026 08:23:07 GMT</pubDate>
            <description><![CDATA[<h3 id="kafka-topic-설계와-데이터-분석-구조-정리">Kafka Topic 설계와 데이터 분석 구조 정리</h3>
<p>오늘은 제조 데이터 처리 구조와 Kafka 도입 범위에 대해 팀원들과 구체적으로 논의했다.</p>
<p>현재 프로젝트는 실제 MES 데이터를 수집하는 구조가 아니라, AI 서비스에서 생성한 Sample 데이터를 기반으로 제조 시뮬레이션을 수행하고 있다.</p>
<p>현재 데이터 흐름 구조</p>
<p>현재 데이터 흐름은 다음과 같이 구성되어 있다.</p>
<pre><code>AI-Service
    ↓
Sample DB
    ↓
Backend
    ↓
분석 수행
    ↓
Main DB 저장
    ↓
Frontend 조회</code></pre><p>AI-Service가 제조 이벤트 데이터를 생성하고 Sample DB에 저장한다.</p>
<p>Backend는 Sample DB 데이터를 읽어 이상 탐지 및 집계 분석을 수행한 뒤 Main DB에 저장한다.</p>
<p>Frontend는 Main DB를 조회하여 대시보드에 데이터를 표시한다.</p>
<p>왜 Main DB에 저장할까?</p>
<p>단순히 실시간 데이터만 보여준다면 Backend에서 분석 후 바로 Frontend로 전달할 수도 있다.</p>
<pre><code>Sample DB
    ↓
Backend 분석
    ↓
Frontend</code></pre><p>하지만 이렇게 되면 <strong>과거 데이터 조회</strong>가 불가능하다.</p>
<p>관제 시스템에서는 다음과 같은 기능이 필요하다.</p>
<pre><code>과거 이상 이력 조회
위험도 추이 분석
공정별 통계 확인
설비 가동률 히스토리 확인</code></pre><p>따라서 분석 결과를 Main DB에 저장하는 구조를 유지하기로 했다.</p>
<hr>
<h3 id="ai-service와-backend의-역할-분리">AI-Service와 Backend의 역할 분리</h3>
<p>초기에는 데이터 분석 기능을 AI-Service로 이동하는 방안도 검토했다.</p>
<p>하지만 현재 분석 로직은 대부분 규칙 기반 계산 수준이기 때문에 Backend에서 처리하는 것이 더 효율적이라고 판단했다.</p>
<p>최종 역할은 다음과 같이 정리되었다.</p>
<p><strong>Backend</strong></p>
<pre><code>생산 데이터 집계
설비 가동률 계산
이상 여부 판정
분석 결과 저장</code></pre><p><strong>AI-Service</strong></p>
<pre><code>Sample 제조 데이터 생성
공정 불량 분석
병목 현상 분석</code></pre><p><strong>Assembly Service</strong></p>
<pre><code>규칙 기반 이상 탐지</code></pre><hr>
<h3 id="kafka를-어디에-적용할-것인가">Kafka를 어디에 적용할 것인가?</h3>
<p>현재 가장 많이 논의한 부분은 Kafka를 어느 구간에 사용할지였다.</p>
<p>Kafka를 사용하는 목적은 다음과 같다.</p>
<pre><code>서비스 간 결합도 감소
비동기 처리
이벤트 기반 구조
서비스 확장성 확보</code></pre><p>현재 고려 중인 구조는 다음과 같다.</p>
<pre><code>Sample DB
    ↓
Scheduler
    ↓
Kafka
    ├── Manufacturing Service
    ├── Alert Service
    ├── Equipment Service
    ├── Dashboard Service
    └── AI Service</code></pre><p><strong>Scheduler가 Producer</strong> 역할을 수행하고,</p>
<p><strong>각 서비스가 Consumer</strong>가 되어 동일 이벤트를 독립적으로 처리하는 구조이다.</p>
<hr>
<h3 id="kafka-topic-설계">Kafka Topic 설계</h3>
<p>제조 서비스에서 사용할 Topic은 다음과 같이 정의하였다.</p>
<pre><code>factory.manufacturing.raw         제조 원천 이벤트
factory.manufacturing.analysis    분석 결과
factory.manufacturing.alert        위험 이벤트
factory.manufacturing.equipment    설비 상태</code></pre><p>현재는 각 Topic당 Partition 2개를 고려하고 있다.</p>
<hr>
<p>Kafka Partition에 대한 이해</p>
<p>회의 중 가장 많이 헷갈렸던 부분은</p>
<p>&quot;<strong>브로커가 2대면 토픽도 반으로 나뉘는가?</strong>&quot;였다.</p>
<p>예를 들어</p>
<pre><code>Broker 1
Broker 2</code></pre><p>가 존재하고</p>
<pre><code>Topic 10개
Partition 1개
</code></pre><p>라면</p>
<p>토픽이 5개씩 나뉘는 것이 아니다.</p>
<p>실제로는</p>
<pre><code>Topic
 └─ Partition
      ↓
 Broker 배치</code></pre><p>구조가 된다.</p>
<p>즉,</p>
<pre><code>Topic
  ↓
Partition
  ↓
Broker</code></pre><p>순서로 생각해야 한다.</p>
<p>토픽은 논리적인 이름일 뿐이고 <strong>실제 데이터 저장 단위는 Partition</strong>이다.</p>
<p>Kafka는 Partition 리더를 여러 브로커에 분산 배치하여 부하를 분산한다.</p>
<hr>
<h3 id="제조-분석-결과-테이블-구조-정리">제조 분석 결과 테이블 구조 정리</h3>
<p>분석 결과는 공통 테이블과 공정별 상세 테이블로 분리하기로 했다.</p>
<p><strong>공통 분석 결과</strong></p>
<pre><code>manufacturing_analysis_result</code></pre><p>저장 정보</p>
<pre><code>이벤트 ID
차량 ID
설비 ID
공정 코드
이상 여부
위험도 점수
심각도
분석 메시지</code></pre><hr>
<p><strong>공정별 상세 결과</strong></p>
<p><strong>Press</strong></p>
<pre><code>press_analysis_result</code></pre><ul>
<li>사이클 타임</li>
<li>지연 시간</li>
<li>생산 카운트 증가 여부</li>
</ul>
<p><strong>Body</strong></p>
<pre><code>body_analysis_result</code></pre><ul>
<li>진동 분석</li>
<li>주파수 분석</li>
<li>로봇 상태</li>
</ul>
<p><strong>Paint</strong></p>
<pre><code>paint_analysis_result</code></pre><ul>
<li>도장 두께</li>
<li>표면 품질</li>
<li>비전 분석 결과</li>
</ul>
<p><strong>Assembly</strong></p>
<pre><code>assembly_analysis_result</code></pre><ul>
<li>작업 순서 오류</li>
<li>누락 부품</li>
<li>체결 오류</li>
</ul>
<hr>
<h3 id="설비-가동률-계산-방식">설비 가동률 계산 방식</h3>
<p>설비 상태 이력을 저장하는 테이블도 추가하였다.</p>
<pre><code>equipment_status_history</code></pre><p>공정별 가동률은 다음과 같이 계산한다.</p>
<pre><code>가동률 = 현재 RUNNING 설비 수 / 전체 설비 수 × 100</code></pre><p>이를 통해 대시보드에서 실시간 설비 가동 현황을 시각화할 수 있다.</p>
<hr>
<h3 id="강사님-피드백">강사님 피드백</h3>
<p>오늘 받은 주요 피드백은 다음과 같다.</p>
<blockquote>
<ol>
<li>Kafka는 로컬에서 먼저 검증</li>
</ol>
</blockquote>
<p>MSK를 바로 구축하기보다</p>
<pre><code>Docker Kafka
→ 기능 검증
→ AWS MSK</code></pre><p>순서로 진행하는 것이 좋다.</p>
<blockquote>
<ol start="2">
<li>서비스 간 데이터 흐름 명확화</li>
</ol>
</blockquote>
<p>각 서비스가 어떤 데이터를 생산하고 소비하는지</p>
<p>팀원 전체가 동일하게 이해할 수 있도록 데이터 흐름도를 정리할 필요가 있다.</p>
<blockquote>
<ol start="3">
<li>관제 시스템만의 강점 강조</li>
</ol>
</blockquote>
<p>발표 시</p>
<p>로그를 직접 분석해야 하는 기존 방식
VS
한 화면에서 전체 공정을 파악할 수 있는 관제 시스템</p>
<p>이라는 차별점을 강조하는 것이 좋다는 피드백을 받았다.</p>
<hr>
<h3 id="마무리">마무리</h3>
<p>오늘은 Kafka 도입 범위와 제조 데이터 분석 구조를 상당히 구체화할 수 있었다.</p>
<p>특히 Kafka Topic, Consumer Group, Partition 구조를 실제 서비스 관점에서 정리하면서 단순히 &quot;Kafka를 사용한다&quot; 수준이 아니라 어떤 데이터를 어디서 발행하고 누가 소비할 것인지까지 정의할 수 있었다.</p>
<p>다음 단계에서는 Docker 기반 Kafka 환경을 먼저 구축하고, 
<strong>Scheduler → Kafka → Consumer</strong> 구조를 실제로 연결해보면서 이벤트 흐름을 검증할 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 16 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-16-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-16-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Tue, 16 Jun 2026 08:18:20 GMT</pubDate>
            <description><![CDATA[<h3 id="프로젝트-재소개">프로젝트 재소개</h3>
<p>현재 진행 중인 <strong>AIMS(AI Manufacturing Monitoring System)</strong> 프로젝트는 자동차 제조 공정을 대상으로 하는 스마트팩토리 통합 관제 시스템이다.</p>
<p>실제 제조 데이터를 수집하는 환경은 아니기 때문에, 현재는 Sample DB에 저장된 제조 이벤트 데이터를 기반으로 공정 흐름을 시뮬레이션하는 형태로 개발을 진행하고 있다.</p>
<p>오늘은 제조 데이터를 Kafka 기반 이벤트 구조로 전환하기 위한 데이터 모델과 Topic 설계를 진행하였다.</p>
<hr>
<h3 id="제조-이벤트-데이터-구조-재정비">제조 이벤트 데이터 구조 재정비</h3>
<p>기존 원본 데이터셋은 공정별 컬럼 구조가 다르고 관제 시스템에서 바로 사용하기 어려운 형태였다.</p>
<p>따라서 관제 시스템이 이해하기 쉬운 형태의 통합 제조 이벤트 구조를 정의하였다.</p>
<h4 id="manufacturing_event_json">manufacturing_event_json</h4>
<p>Scheduler가 Kafka로 전송할 원본 이벤트를 저장하는 테이블이다.</p>
<p>주요 정보는 다음과 같다.</p>
<pre><code>* 이벤트 정보

  * event_id
  * event_time

* 차량 및 설비 정보

  * car_master_id
  * equipment_id

* 공정 정보

  * process_code
  * station_code

* 설비 상태 정보

  * equipment_code
  * equipment_type
  * equipment_status

* 이벤트 정보

  * event_type
  * event_json

* Kafka 전송 관리

  * is_sent
  * sent_at</code></pre><p>Scheduler는 아직 전송되지 않은 이벤트를 조회한 후 Kafka Topic으로 발행한다.</p>
<pre><code class="language-text">manufacturing_event_json
↓
is_sent = false 조회
↓
event_time 정렬
↓
Kafka Producer 전송
↓
is_sent = true
↓
sent_at 저장</code></pre>
<hr>
<h3 id="제조-이벤트-json-표준화">제조 이벤트 JSON 표준화</h3>
<p>원본 데이터를 그대로 사용하는 대신 관제 시스템에서 필요한 의미 기반 구조로 변환하였다.</p>
<pre><code class="language-json">{
  &quot;event&quot;: {},
  &quot;location&quot;: {},
  &quot;equipment&quot;: {},
  &quot;equipmentStatus&quot;: {},
  &quot;product&quot;: {},
  &quot;sensor&quot;: {},
  &quot;manufacturing&quot;: {},
  &quot;processMetrics&quot;: {},
  &quot;processData&quot;: {},
  &quot;sourceTrace&quot;: {}
}</code></pre>
<p>이를 통해 모든 서비스가 동일한 메시지 포맷을 사용할 수 있도록 구성하였다.</p>
<hr>
<h3 id="kafka-도입-이유">Kafka 도입 이유</h3>
<p>현재 프로젝트는 여러 서비스가 동일한 제조 이벤트를 활용한다.</p>
<p>예를 들어 하나의 제조 이벤트가 발생하면 다음 작업들이 동시에 수행된다.</p>
<ul>
<li>AI 이상 분석</li>
<li>병목 분석</li>
<li>설비 상태 계산</li>
<li>실시간 알림 생성</li>
<li>Elasticsearch 저장</li>
<li>Dashboard 표시</li>
</ul>
<p>Kafka 없이 구현하면 각 서비스가 동일 데이터를 개별 조회해야 한다.</p>
<p>Kafka를 사용하면 이벤트를 한 번 발행하고 여러 서비스가 독립적으로 구독할 수 있다.</p>
<pre><code class="language-text">Scheduler
↓
Kafka
├─ AI Service
├─ Manufacturing Service
├─ Equipment Service
├─ Elasticsearch Consumer
└─ Redis Consumer</code></pre>
<p>서비스 간 결합도를 낮추고 확장성을 확보할 수 있다는 장점이 있다.</p>
<hr>
<h3 id="kafka-topic-설계">Kafka Topic 설계</h3>
<h4 id="1-factorymanufacturingraw">1. factory.manufacturing.raw</h4>
<p>모든 제조 이벤트가 가장 먼저 전달되는 원천 이벤트 Topic이다.</p>
<p>Producer</p>
<ul>
<li>Scheduler</li>
</ul>
<p>Consumer</p>
<ul>
<li>Manufacturing Service</li>
<li>AI Service</li>
<li>Equipment Service</li>
<li>Redis Consumer</li>
<li>Elasticsearch Consumer</li>
</ul>
<p>MVP 단계에서는 공정별 Topic을 나누지 않고 하나의 Raw Topic으로 관리하기로 결정하였다.</p>
<pre><code class="language-text">PRESS
BODY
PAINT
ASSEMBLY</code></pre>
<p>공정 구분은 processCode 값으로 처리한다.</p>
<hr>
<h4 id="2-factorymanufacturinganalysis">2. factory.manufacturing.analysis</h4>
<p>AI 분석 결과를 전달하는 Topic이다.</p>
<p>포함 정보</p>
<ul>
<li>overallRiskScore</li>
<li>bottleneckRisk</li>
<li>defectTransferRisk</li>
<li>equipmentRisk</li>
<li>riskLevel</li>
<li>recommendation</li>
</ul>
<p>예상 활용</p>
<ul>
<li>병목 예측</li>
<li>설비 이상 감지</li>
<li>품질 이상 감지</li>
<li>불량 전이 예측</li>
</ul>
<hr>
<h4 id="3-factorymanufacturingalert">3. factory.manufacturing.alert</h4>
<p>위험 이벤트만 별도로 전달하는 Topic이다.</p>
<p>분석 결과가 WARNING 또는 CRITICAL 수준일 경우 생성된다.</p>
<pre><code class="language-text">분석 결과
↓
Alert 생성
↓
Kafka Alert Topic
↓
WebSocket
↓
Dashboard 알림 표시</code></pre>
<p>실시간 알림 기능 구현의 핵심이 되는 Topic이다.</p>
<hr>
<h4 id="4-factorymanufacturingequipment">4. factory.manufacturing.equipment</h4>
<p>설비 상태 계산 결과를 전달한다.</p>
<p>포함 정보</p>
<ul>
<li>설비 상태</li>
<li>가동 시간</li>
<li>정지 시간</li>
<li>유휴 시간</li>
<li>가동률</li>
</ul>
<p>Dashboard에서 설비 모니터링에 활용될 예정이다.</p>
<hr>
<h3 id="전체-이벤트-흐름">전체 이벤트 흐름</h3>
<p>최종적으로 정리된 제조 이벤트 흐름은 다음과 같다.</p>
<pre><code class="language-text">Sample DB
↓
manufacturing_event_json
↓
Scheduler Producer
↓
factory.manufacturing.raw
↓
AI Service
Manufacturing Service
Equipment Service
↓
factory.manufacturing.analysis
↓
Redis
Main DB
Elasticsearch
↓
factory.manufacturing.alert
↓
WebSocket
↓
Dashboard</code></pre>
<p>설비 상태 계산 흐름은 별도로 분리된다.</p>
<pre><code class="language-text">factory.manufacturing.raw
↓
Equipment Service
↓
factory.manufacturing.equipment
↓
Redis
Main DB
Dashboard</code></pre>
<hr>
<h3 id="추가-진행-사항">추가 진행 사항</h3>
<h4 id="인프라">인프라</h4>
<ul>
<li>Frontend Dockerfile 작성</li>
<li>GitHub Actions 추가</li>
<li>배포 후 도메인 연결 작업 진행</li>
</ul>
<h4 id="데이터-전처리">데이터 전처리</h4>
<ul>
<li>검사 데이터 전처리 Python 코드 작성 진행 중</li>
</ul>
<h4 id="강사님-피드백">강사님 피드백</h4>
<ul>
<li>ALB 443 리스너 규칙 수정 필요</li>
<li>로드밸런서 및 대상 그룹(Target Group) 재확인 필요</li>
</ul>
<hr>
<h3 id="마무리">마무리</h3>
<p>오늘은 제조 데이터를 단순 조회 방식이 아닌 이벤트 기반 구조로 전환하기 위한 설계를 진행하였다.</p>
<p>특히 Kafka를 중심으로 제조 이벤트, AI 분석 결과, 알림 이벤트, 설비 상태 데이터를 분리함으로써 향후 MSA 확장과 실시간 관제 기능 구현이 가능하도록 구조를 정리할 수 있었다.</p>
<p>다음 단계에서는 Scheduler Producer 구현과 Kafka Consumer 개발을 통해 실제 제조 이벤트가 Dashboard까지 전달되는 흐름을 구현할 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 13 멘토링 일지]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-13-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-13-%EB%A9%98%ED%86%A0%EB%A7%81-%EC%9D%BC%EC%A7%80</guid>
            <pubDate>Sat, 13 Jun 2026 08:16:35 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="📖-오늘-배운-내용-정리">📖 오늘 배운 내용 정리</h3>
</blockquote>
<p>오늘은 프로젝트 멘토링과 함께 <strong>Kafka, Elasticsearch, StreamSets</strong> 등 실제 보안관제 환경에서 사용하는 기술들에 대해 학습했다.</p>
<p>기존에는 단순히 기술 스택을 사용하기 위해 도입을 고민했다면, 오늘은 각 기술이 왜 필요한지와 실제 현업에서 어떤 문제를 해결하기 위해 사용하는지를 이해하는 데 집중했다.</p>
<hr>
<blockquote>
<h3 id="🗓️-redmine-운영-방식-정리">🗓️ Redmine 운영 방식 정리</h3>
</blockquote>
<p>프로젝트를 진행하면서 가장 중요하게 강조된 부분은 &quot;모든 업무를 Redmine에서 관리해야 한다&quot;는 점이었다.</p>
<p>일정을 단순히 적어두는 수준이 아니라 실제 개발 프로세스가 Redmine 중심으로 돌아가야 한다.</p>
<h3 id="권장-구조">권장 구조</h3>
<h4 id="일감-유형">일감 유형</h4>
<pre><code>* Epic : 큰 기능 단위
* Story : 사용자 요구사항
* Task : 개발 작업
* Bug : 결함 수정
* Spike : 기술 검토
* Test : 테스트</code></pre><h4 id="sprint-관리">Sprint 관리</h4>
<p>버전을 Sprint 단위로 관리</p>
<pre><code>예시

* v0.2
* v0.5
* v0.7
* v1.0</code></pre><p>각 Sprint마다 목표를 설정하고 완료 후 다음 Sprint로 넘어가는 방식으로 운영한다.</p>
<h4 id="git-브랜치-전략">Git 브랜치 전략</h4>
<pre><code class="language-text">main
 └─ dev
     ├─ 291/login
     ├─ 292/dashboard
     └─ 293/agv-flow</code></pre>
<p>Task 번호를 기준으로 브랜치를 생성하고 작업 완료 후 dev로 Merge한다.</p>
<p>최종적으로 안정화된 dev를 main으로 배포한다.</p>
<hr>
<h3 id="kafka를-왜-사용하는가">Kafka를 왜 사용하는가?</h3>
<p>기존에는 Kafka를 단순히 &quot;실시간 처리용&quot; 정도로 생각하고 있었는데 실제 핵심은 서비스 간의 완전한 분리(Decoupling)였다.</p>
<h3 id="첫-번째-관점">첫 번째 관점</h3>
<p>MSA 환경에서 서비스 간 통신 담당</p>
<pre><code class="language-text">Scheduler
    ↓
Kafka
    ↓
AGV Service

Alert Service

AI Service</code></pre>
<p>Producer는 메시지만 발행한다.</p>
<p>Consumer는 필요한 메시지만 구독한다.</p>
<p>서로 직접 호출하지 않기 때문에 서비스 간 의존성이 크게 줄어든다.</p>
<hr>
<h3 id="두-번째-관점">두 번째 관점</h3>
<p>서비스 간 성능 차이 해결</p>
<p>예를 들어</p>
<pre><code>* 데이터 수집 서비스
* AI 분석 서비스
* 알림 서비스</code></pre><p>가 있다고 가정하면</p>
<p>AI 분석이 느려도 수집 서비스는 계속 데이터를 Kafka에 적재할 수 있다.</p>
<p>즉 서비스마다 독립적으로 Scale Out이 가능해진다.</p>
<hr>
<h3 id="kafka-핵심-개념">Kafka 핵심 개념</h3>
<h4 id="topic">Topic</h4>
<p>메시지를 분류하는 공간</p>
<p>예시</p>
<pre><code class="language-text">manufacturing-event
agv-event
alert-event</code></pre>
<h4 id="partition">Partition</h4>
<p>병렬 처리를 위한 단위</p>
<p>Partition 수가 많을수록 동시에 처리 가능</p>
<p>Consumer와 연결되어 처리량을 조절한다.</p>
<h4 id="offset">Offset</h4>
<p>Consumer가 어디까지 읽었는지 저장하는 값</p>
<hr>
<h3 id="elasticsearch를-왜-사용하는가">Elasticsearch를 왜 사용하는가?</h3>
<p>Elasticsearch는 단순 저장소가 아니라 <strong>검색 엔진</strong>이다.</p>
<h4 id="사용하는-이유">사용하는 이유</h4>
<p><strong>복잡한 검색</strong></p>
<p>DB에서는 Full Scan이 발생할 수 있는 조건들을 빠르게 처리할 수 있다.</p>
<p>예시</p>
<ul>
<li>특정 기간</li>
<li>특정 공정</li>
<li>특정 심각도</li>
<li>특정 키워드</li>
</ul>
<p>등을 동시에 검색</p>
<hr>
<h4 id="대용량-로그-분석">대용량 로그 분석</h4>
<p>보안관제에서는 수백만 건의 로그가 발생한다.</p>
<p>Elasticsearch는 데이터를 분산 저장하여 빠르게 검색할 수 있다.</p>
<hr>
<h4 id="시계열-데이터-분석">시계열 데이터 분석</h4>
<ul>
<li>이벤트 발생 추이</li>
<li>공정별 장애 추이</li>
<li>월별 통계</li>
</ul>
<p>등을 분석하기에 적합하다.</p>
<hr>
<h3 id="elasticsearch-구조">Elasticsearch 구조</h3>
<pre><code class="language-text">Cluster
 └─ Node
      └─ Index
            └─ Shard
                  └─ Segment</code></pre>
<h3 id="master-node">Master Node</h3>
<ul>
<li>클러스터 관리</li>
<li>샤드 배치</li>
<li>인덱스 생성/삭제</li>
</ul>
<h3 id="data-node">Data Node</h3>
<ul>
<li>데이터 저장</li>
<li>검색 처리</li>
<li>인덱싱 수행</li>
</ul>
<hr>
<h3 id="streamsets">StreamSets</h3>
<p>StreamSets는 데이터 파이프라인을 쉽게 구성할 수 있는 도구다.</p>
<p>예시</p>
<pre><code class="language-text">Kafka Consumer
      ↓
데이터 검증
      ↓
정규화
      ↓
Elasticsearch 저장</code></pre>
<p>복잡한 ETL 작업을 GUI 기반으로 구성할 수 있다.</p>
<hr>
<blockquote>
<h3 id="🔍-보안관제-관점에서-얻은-인사이트">🔍 보안관제 관점에서 얻은 인사이트</h3>
</blockquote>
<p>오늘 가장 인상 깊었던 내용은 보안관제의 핵심은 &quot;관제 요원의 클릭 수를 줄이는 것&quot;이라는 점이었다.</p>
<p>보안관제에서는 수많은 이벤트가 발생한다.</p>
<p>문제는</p>
<ul>
<li>정탐</li>
<li>오탐</li>
<li>미탐</li>
</ul>
<p>을 구분하기 위해 너무 많은 인력이 투입된다는 것이다.</p>
<p>그래서 실제 현업에서는</p>
<ul>
<li>머신러닝</li>
<li>AI 분석</li>
<li>Rule Engine</li>
</ul>
<p>등을 활용하여 사람이 확인해야 할 이벤트만 선별한다.</p>
<p>결국 좋은 관제 시스템은</p>
<p>&quot;더 많은 정보를 보여주는 시스템&quot;</p>
<p>이 아니라</p>
<p>&quot;지금 꼭 봐야 하는 정보만 보여주는 시스템&quot;</p>
<p>이라는 점을 배웠다.</p>
<hr>
<blockquote>
<h3 id="💡-프로젝트-방향-수정-아이디어">💡 프로젝트 방향 수정 아이디어</h3>
</blockquote>
<p>멘토링을 통해 현재 프로젝트 구조에 대한 개선 방향도 얻을 수 있었다.</p>
<p>현재는</p>
<pre><code class="language-text">프레스 이벤트
차체 이벤트
도장 이벤트
의장 이벤트</code></pre>
<p>를 각각 따로 관리하고 있다.</p>
<p>하지만 실제 보안관제에서는 여러 이벤트를 정규화하여 하나의 이벤트 구조로 관리하는 경우가 많다.</p>
<p>예시</p>
<pre><code class="language-json">{
  &quot;eventType&quot;: &quot;PROCESS_DELAY&quot;,
  &quot;process&quot;: &quot;PAINT&quot;,
  &quot;severity&quot;: &quot;HIGH&quot;,
  &quot;message&quot;: &quot;공정 지연 발생&quot;
}</code></pre>
<p>이처럼 이벤트 형식을 통일하면</p>
<ul>
<li>Rule Engine 작성</li>
<li>검색</li>
<li>분석</li>
<li>AI 학습</li>
</ul>
<p>이 훨씬 쉬워진다.</p>
<p>따라서 제조 데이터도 보안관제 방식처럼 정규화하여 관리하는 방향을 추가 검토해볼 예정이다.</p>
<hr>
<blockquote>
<h3 id="📌-프로젝트에-적용할-내용">📌 프로젝트에 적용할 내용</h3>
</blockquote>
<p>현재 우리 프로젝트는 자동차 제조 공정을 관제하는 시스템이지만,</p>
<p>보안관제에서 사용하는 기술들을 제조 환경에 적용하여 발전시키는 방향으로 진행하려고 한다.</p>
<p>예시</p>
<ul>
<li>Kafka 기반 이벤트 처리</li>
<li>Elasticsearch 기반 검색 및 분석</li>
<li>StreamSets 기반 데이터 정규화</li>
<li>Rule Engine 기반 이상 탐지</li>
<li>AI 기반 오탐 감소</li>
<li>영향 범위 분석</li>
<li>보고서 자동 생성</li>
</ul>
<p>단순히 공장을 모니터링하는 수준이 아니라</p>
<p>&quot;보안관제의 관점으로 제조 공정을 관리하는 시스템&quot;</p>
<p>으로 발전시키는 것이 목표다.</p>
<hr>
<blockquote>
<h2 id="🖊️-느낀-점">🖊️ 느낀 점</h2>
</blockquote>
<p>이번 멘토링을 통해 기술을 사용하는 이유에 대해 많이 생각하게 되었다.</p>
<p>Kafka, Elasticsearch, StreamSets 모두 단순히 최신 기술이라서 사용하는 것이 아니라 실제 운영 환경에서 발생하는 문제를 해결하기 위해 존재한다는 점을 이해할 수 있었다.</p>
<p>앞으로도 &quot;이 기술을 왜 사용하는가?&quot;를 먼저 고민하고 프로젝트에 적용해야겠다고 느꼈다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 12 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-12-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-12-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Fri, 12 Jun 2026 08:06:44 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="오늘의-목표">오늘의 목표</h3>
</blockquote>
<p>오늘은 프론트엔드와 백엔드 기능 연동 상태를 점검하고, 현재까지 구현한 기능들을 통합하는 작업을 진행했다. 또 프로젝트 진행 상황을 좀 더 체계적으로 관리하기 위한 일정 관리 방식과 성과 측정 방법에 대한 피드백도 받았다.</p>
<hr>
<blockquote>
<h3 id="오전-회의">오전 회의</h3>
</blockquote>
<h4 id="프론트엔드-·-백엔드-연동-점검">프론트엔드 · 백엔드 연동 점검</h4>
<p>오후 3시에 예정된 프론트엔드와 백엔드 연동 테스트를 위해 각 기능의 구현 상태를 확인했다.</p>
<p>현재 로그인과 회원가입 기능은 구현이 완료된 상태이며, 인증 방식은 HTTPOnly Cookie 기반으로 적용하기로 결정했다.</p>
<p>이를 통해 브라우저에서 JavaScript로 직접 접근할 수 없는 방식으로 인증 정보를 관리하여 보안성을 높일 수 있도록 구성할 예정이다.</p>
<h4 id="산출물-제출-준비">산출물 제출 준비</h4>
<p>산출물 제출을 대비해 현재까지 작성된 문서와 구현 현황을 다시 한번 점검했다.</p>
<hr>
<p><strong>### 오후 회의</strong></p>
<h4 id="github-운영-방식-정리">GitHub 운영 방식 정리</h4>
<p>각자 구현한 기능에 대해 Pull Request를 작성하고 코드 리뷰를 진행했다.</p>
<p>프론트엔드와 백엔드 기능은 모두 main 브랜치로 Merge를 완료했으며, 앞으로는 매주 금요일마다 구현한 기능들을 통합하여 Merge하기로 팀 내 규칙을 정했다.</p>
<p>이렇게 하면 코드 품질을 유지하면서 충돌을 최소화할 수 있을 것으로 기대된다.</p>
<hr>
<blockquote>
<h3 id="강사님-피드백">강사님 피드백</h3>
</blockquote>
<h4 id="프로젝트-관리의-중요성">프로젝트 관리의 중요성</h4>
<p>현재 프로젝트는 다음 항목들이 완료된 상태다.</p>
<ul>
<li>시스템 설계 완료</li>
<li>기능 우선순위 선정 완료</li>
<li>프로젝트 문서 작업 완료</li>
</ul>
<p>다만 앞으로는 단순히 기능 구현에만 집중하는 것이 아니라 프로젝트 진행 상황을 수치화하여 관리할 필요가 있다는 피드백을 받았다.</p>
<hr>
<blockquote>
<h3 id="redmine-기반-일정-관리">Redmine 기반 일정 관리</h3>
</blockquote>
<p>프로젝트 진행 현황을 보다 명확하게 파악하기 위해 Redmine 운영 기준을 정립하기로 했다.</p>
<p>관리 항목 예시는 다음과 같다.</p>
<h4 id="backend">Backend</h4>
<ul>
<li>전체 API 개수</li>
<li>구현 완료 API 수</li>
<li>진행 중 API 수</li>
<li>테스트 완료 여부</li>
<li>기능별 개발 진척도</li>
</ul>
<h4 id="frontend">Frontend</h4>
<ul>
<li>전체 페이지 수</li>
<li>구현 완료 페이지 수</li>
<li>대시보드 개발 진행률</li>
<li>UI/UX 개선 항목</li>
</ul>
<h4 id="ai">AI</h4>
<ul>
<li>모델 선정 근거</li>
<li>데이터셋 규모</li>
<li>테스트 케이스 수</li>
<li>정확도(Accuracy)</li>
<li>오탐률(False Positive Rate)</li>
</ul>
<p>각 분야별 진행 상황을 수치로 관리하면 현재 프로젝트 상태를 보다 객관적으로 파악할 수 있을 것 같다.</p>
<hr>
<blockquote>
<h3 id="주간-성과-관리-방안">주간 성과 관리 방안</h3>
</blockquote>
<p>강사님께서는 프로젝트 성공 여부를 판단하기 위해서는 주간 단위의 목표 관리가 중요하다고 강조하셨다.</p>
<p>이에 따라 다음과 같은 프로세스를 적용하기로 했다.</p>
<ol>
<li>주 초 목표 수립</li>
<li>Redmine 일정 등록</li>
<li>주간 진행 상황 기록</li>
<li>금요일 성과 취합</li>
<li>목표 대비 달성률 측정</li>
<li>팀 단위 회고 진행</li>
</ol>
<p>앞으로는 단순히 무엇을 했는지가 아니라 얼마나 달성했는지를 꾸준히 관리할 예정이다.</p>
<hr>
<blockquote>
<h3 id="느낀-점">느낀 점</h3>
</blockquote>
<p>오늘은 기능 개발 자체보다 프로젝트를 어떻게 관리할 것인지에 대해 많이 고민한 하루였다.</p>
<p>그동안은 기능 구현에 집중했다면 이제는 프로젝트 전체 진행 상황을 수치화하고 관리하는 체계를 만드는 것도 중요하다는 것을 느꼈다.</p>
<p>특히 Backend, Frontend, AI 분야별로 완료율과 달성도를 기록하면 현재 위치와 앞으로 해야 할 작업을 더 명확하게 파악할 수 있을 것 같다.</p>
<p>남은 기간 동안에는 기능 구현뿐 아니라 일정 관리와 주간 회고 체계도 함께 정착시켜 프로젝트 완성도를 높여나갈 계획이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 11 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-11-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-11-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Thu, 11 Jun 2026 08:24:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="오늘-한-일">오늘 한 일</h3>
</blockquote>
<p>오늘은 현재 진행 중인 스마트팩토리 관제 프로젝트의 프론트엔드, 백엔드, 인프라 구조를 점검하고 MSA 환경에서의 인증 처리 방식과 데이터 구조에 대해 논의했다. 또한 멘토링을 앞두고 현재까지 진행된 내용과 MVP 방향성을 정리하는 시간을 가졌다.</p>
<hr>
<blockquote>
<h3 id="오전-회의">오전 회의</h3>
</blockquote>
<p>각자 담당 업무를 중심으로 개발을 진행했다.</p>
<h4 id="팀원별-진행-사항">팀원별 진행 사항</h4>
<ul>
<li><p>혜인</p>
<ul>
<li>도장 공정 이상 탐지 기능 구현</li>
<li>Entity 설계 및 데이터 구조 작업</li>
</ul>
</li>
<li><p>서경</p>
<ul>
<li>EKS 환경 구축 진행</li>
<li>완료 후 Route53, ACM, ALB 연동 예정</li>
</ul>
</li>
<li><p>미정</p>
<ul>
<li>병목 탐지 모델링 작업</li>
</ul>
</li>
<li><p>종찬</p>
<ul>
<li>메인 대시보드 AGV 실시간 흐름도 구현</li>
</ul>
</li>
<li><p>건</p>
<ul>
<li>검증 페이지 백엔드 개발</li>
<li>DTO, Entity, Controller, Repository, Service 구성</li>
</ul>
</li>
<li><p>준호</p>
<ul>
<li>메인 페이지 인프라 API 구현</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<h3 id="오후-회의">오후 회의</h3>
</blockquote>
<h4 id="멘토링-준비">멘토링 준비</h4>
<p>멘토님께 현재 프로젝트 진행 상황을 설명하기 위해 아래 내용을 정리하기로 했다.</p>
<ul>
<li><p>인프라 구성</p>
</li>
<li><p>프론트 프로토타입</p>
</li>
<li><p>MVP 기능</p>
</li>
<li><p>DB 구조</p>
<ul>
<li>Sample DB</li>
<li>Main DB</li>
</ul>
</li>
<li><p>팀원별 역할 및 업무 분담</p>
</li>
</ul>
<hr>
<blockquote>
<h3 id="강사님-피드백-이후-검토-사항">강사님 피드백 이후 검토 사항</h3>
</blockquote>
<h4 id="1-spring-boot-서비스-포트-분리">1. Spring Boot 서비스 포트 분리</h4>
<p>MSA 구조를 고려하여 서비스별 포트를 분리하기로 했다.</p>
<ul>
<li>Main Service : 8081</li>
<li>Manufacturing Service : 8082</li>
<li>Quality Service : 8083</li>
</ul>
<p>서비스를 독립적으로 운영하고 추후 EKS 환경으로 배포하기 위한 준비 과정이다.</p>
<hr>
<h4 id="2-인증-처리-방식-검토">2. 인증 처리 방식 검토</h4>
<p>JWT 인증을 어떤 위치에서 처리할 것인지 논의했다.</p>
<h5 id="방안-1">방안 1</h5>
<p>Frontend Proxy → Main Service</p>
<ul>
<li>프론트에서 Main Service로 요청</li>
<li>Main Service가 JWT 검증 수행</li>
<li>내부 서비스 호출</li>
</ul>
<p>장점</p>
<ul>
<li>인증 로직 중앙 집중화</li>
</ul>
<p>단점</p>
<ul>
<li>Main Service 의존도 증가</li>
</ul>
<h5 id="방안-2">방안 2</h5>
<p>Frontend Proxy → 각 서비스</p>
<ul>
<li>서비스별 JWT 직접 검증</li>
<li>MSA 표준 구조에 가까움</li>
</ul>
<p>장점</p>
<ul>
<li>서비스 독립성 확보</li>
</ul>
<p>단점</p>
<ul>
<li>JWT 검증 로직 중복 가능</li>
</ul>
<p>향후 Security 공통 모듈을 만들어 JWT 검증 로직을 재사용하는 방향도 검토하기로 했다.</p>
<hr>
<h4 id="3-sample-db-데이터-기준일-검토">3. Sample DB 데이터 기준일 검토</h4>
<p>시뮬레이션용 데이터의 날짜를 특정 시점(예: 6월 5일)로 고정하여 사용할지 논의했다.</p>
<p>현재 프로젝트는 실제 제조 데이터를 사용하는 것이 아니라 샘플 데이터를 기반으로 AGV 이동 및 공정 흐름을 시뮬레이션해야 하기 때문에 데이터 기준 시점 관리가 중요하다.</p>
<hr>
<blockquote>
<h3 id="강사님-피드백-정리">강사님 피드백 정리</h3>
</blockquote>
<h4 id="ingress-기반-인증-처리">Ingress 기반 인증 처리</h4>
<p>운영 환경에서는 Front Proxy 대신 Ingress를 활용하여 서비스 라우팅을 수행하게 된다.</p>
<p>로컬 환경</p>
<pre><code>Frontend
   ↓
Proxy
   ↓
Backend Services</code></pre><p>운영(EKS) 환경</p>
<pre><code>Frontend
   ↓
Ingress
   ↓
Backend Services</code></pre><p>따라서 운영 환경에서는 각 서비스가 JWT 검증을 수행하는 구조가 자연스러운지 검토가 필요하다.</p>
<hr>
<blockquote>
<h3 id="ai-모델링-방향-검토">AI 모델링 방향 검토</h3>
</blockquote>
<p>현재 추진 중인 불량 전이 예측 기능에 대해 추가 검토가 필요하다는 피드백을 받았다.</p>
<p>검토 항목</p>
<ul>
<li>어떤 데이터셋을 사용할 것인가</li>
<li>불량 여부를 판단하는 컬럼은 무엇인가</li>
<li>Station 정보 활용 가능 여부</li>
<li>공정 단계별 전이 분석 가능 여부</li>
<li>설비 정보 활용 가능 여부</li>
</ul>
<p>단순히 AI 모델을 만드는 것이 아니라 실제 불량 판단 근거가 되는 데이터를 명확하게 정의해야 한다는 점을 다시 확인했다.</p>
<hr>
<blockquote>
<h3 id="msa-백엔드-아키텍처-검토">MSA 백엔드 아키텍처 검토</h3>
</blockquote>
<p>이번 피드백에서 가장 많이 논의된 내용 중 하나였다.</p>
<p>주요 내용</p>
<ul>
<li>서비스별 포트 분리</li>
<li>Eureka 역할 구분</li>
<li>JWT 인증 처리 위치 결정</li>
<li>Security 공통 모듈 적용 검토</li>
<li>로컬 Proxy 구성</li>
<li>EKS Ingress 구성</li>
</ul>
<p>특히 Eureka는 서비스 등록과 발견만 담당하며 인증 기능은 제공하지 않는다는 점을 다시 확인했다.</p>
<hr>
<blockquote>
<h3 id="관제-서비스-아이디어-검토">관제 서비스 아이디어 검토</h3>
</blockquote>
<p>멘토님께 현재 관제 서비스 MVP 방향에 대한 피드백을 요청하기로 했다.</p>
<p>현재 검토 중인 기능</p>
<ul>
<li>병목 탐지</li>
<li>불량 전이 분석</li>
<li>AGV 실시간 관제</li>
<li>알림 신뢰도 분석</li>
<li>숙련자 대응 패턴 학습</li>
</ul>
<p>추가로 확장 가능한 MVP 기능이 있는지 의견을 받아볼 예정이다.</p>
<hr>
<blockquote>
<h3 id="인프라-관련-내용">인프라 관련 내용</h3>
</blockquote>
<p>멘토님께서 제공해주신 자료를 기반으로 관제 서비스를 구축할 수 있다는 의견을 받았다.</p>
<p>다만 실제 적용 시에는</p>
<ul>
<li>ECR 설정</li>
<li>EFS 마운트</li>
<li>스토리지 경로 설정</li>
</ul>
<p>등의 작업이 필요하며 이 부분은 추가 학습이 필요해 보인다.</p>
<hr>
<h3 id="느낀-점">느낀 점</h3>
<p>오늘은 단순히 기능 개발만 진행한 것이 아니라 실제 운영 환경을 고려한 아키텍처 설계와 인증 구조에 대해 깊게 고민해볼 수 있었다.</p>
<p>특히 MSA 환경에서 인증을 어느 계층에서 처리할 것인지, 그리고 로컬 개발 환경과 EKS 운영 환경의 차이를 어떻게 설계에 반영할 것인지가 중요한 고민거리였다.</p>
<p>또한 AI 기능 역시 단순히 모델을 적용하는 것이 아니라 실제 데이터의 의미와 활용 목적을 명확하게 정의해야 한다는 점을 다시 느꼈다.</p>
<p>앞으로는 멘토링을 통해 현재 MVP 방향성을 검증받고, 인프라와 백엔드 구조를 조금 더 구체화해 나갈 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 10 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-10-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-10-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Wed, 10 Jun 2026 08:07:17 GMT</pubDate>
            <description><![CDATA[<h3 id="스마트팩토리-관제-프로젝트-개발일지-20260610">스마트팩토리 관제 프로젝트 개발일지 (2026.06.10)</h3>
<blockquote>
<h4 id="오늘의-목표">오늘의 목표</h4>
</blockquote>
<p>오늘은 스마트팩토리 관제 시스템 구현을 위한 데이터 저장 구조와 실시간 데이터 처리 방식에 대해 논의하고, 데이터베이스 구축 및 프론트/백엔드 개발을 진행했다.</p>
<hr>
<blockquote>
<h4 id="오전-작업">오전 작업</h4>
</blockquote>
<h4 id="데이터-저장-구조-논의">데이터 저장 구조 논의</h4>
<p>현재 프로젝트는 실제 제조 데이터를 사용하는 것이 아니라 샘플 데이터를 기반으로 공정 흐름과 AGV 이동을 시뮬레이션해야 한다.</p>
<p>이를 위해 샘플 데이터베이스(Sample DB)와 운영 데이터베이스(Main DB)를 분리하여 운영하는 방안을 논의했다.</p>
<h4 id="검토한-방식">검토한 방식</h4>
<h4 id="1-특정-기간-데이터를-저장하고-시스템-시간을-조작하는-방식">1. 특정 기간 데이터를 저장하고 시스템 시간을 조작하는 방식</h4>
<ul>
<li>Sample DB에 6/1 ~ 6/7 데이터를 저장</li>
<li>시스템이 현재 시간을 기준으로 해당 데이터를 조회</li>
</ul>
<p>장점</p>
<ul>
<li>실제 데이터 흐름처럼 구현 가능</li>
</ul>
<p>단점</p>
<ul>
<li>시간 계산 로직이 복잡해짐</li>
</ul>
<hr>
<h4 id="2-스케줄러를-통해-sample-db에-지속적으로-데이터-적재">2. 스케줄러를 통해 Sample DB에 지속적으로 데이터 적재</h4>
<ul>
<li>일정 주기로 Sample DB에 데이터를 삽입</li>
<li>Main DB가 실시간으로 조회</li>
</ul>
<p>장점</p>
<ul>
<li>실제 운영 환경과 가장 유사</li>
</ul>
<p>단점</p>
<ul>
<li>데이터 생성 로직 추가 필요</li>
</ul>
<hr>
<h4 id="3-sample-db에-데이터를-미리-적재-후-순차-조회">3. Sample DB에 데이터를 미리 적재 후 순차 조회</h4>
<ul>
<li>날짜와 무관하게 첫 번째 데이터부터 순서대로 사용</li>
</ul>
<p>장점</p>
<ul>
<li>구현이 가장 단순</li>
</ul>
<p>단점</p>
<ul>
<li>실제 운영 데이터와 차이가 존재</li>
</ul>
<hr>
<h4 id="4-예약-작업을-이용한-실시간-데이터-생성">4. 예약 작업을 이용한 실시간 데이터 생성</h4>
<ul>
<li>INSERT 명령을 예약 실행</li>
<li>실제 데이터가 들어오는 것처럼 구성</li>
</ul>
<p>장점</p>
<ul>
<li>실시간 환경 재현 가능</li>
</ul>
<p>단점</p>
<ul>
<li>관리 포인트 증가</li>
</ul>
<hr>
<h4 id="추가-진행-사항">추가 진행 사항</h4>
<p>오전 시간에는 다음 작업도 함께 진행했다.</p>
<ul>
<li>데이터베이스 테이블 생성</li>
<li>데이터셋 정제 작업</li>
<li>공정 흐름도 구조 정리</li>
<li>병목 탐지 모델링 구현</li>
<li>Redis 생성</li>
<li>샘플 데이터 정제</li>
</ul>
<hr>
<h3 id="오후-작업">오후 작업</h3>
<h4 id="redis-연결-환경-정리">Redis 연결 환경 정리</h4>
<p>현재 Redis는 AWS ElastiCache 환경에서 운영된다.</p>
<p>개발 초기에는 Bastion 서버를 이용한 SSH 터널링 방식으로 접속할 수 있도록 구성했다.</p>
<h4 id="로컬-개발-환경">로컬 개발 환경</h4>
<pre><code class="language-env">REDIS_HOST=127.0.0.1
REDIS_PORT=16379</code></pre>
<h4 id="eks-배포-환경">EKS 배포 환경</h4>
<pre><code class="language-env">REDIS_HOST=Redis Primary Endpoint
REDIS_PORT=6379</code></pre>
<hr>
<h4 id="redis-ssh-터널-연결">Redis SSH 터널 연결</h4>
<pre><code class="language-bash">ssh -i &quot;C:\Users\user\Downloads\*.pem&quot; \
-L 16379:REDIS_PRIMARY_ENDPOINT:6379 \
ubuntu@BASTION_ELASTIC_IP</code></pre>
<p>해당 터널이 활성화되어 있는 동안에는 로컬 PC에서 Redis를 다음과 같이 사용할 수 있다.</p>
<pre><code class="language-text">127.0.0.1:16379</code></pre>
<hr>
<h4 id="db와-redis-터널-통합">DB와 Redis 터널 통합</h4>
<p>매번 DB 터널과 Redis 터널을 따로 여는 것이 번거롭기 때문에 SSH Config를 이용하여 하나의 명령으로 사용할 수 있도록 구성했다.</p>
<pre><code class="language-config">Host aims-db
    HostName BASTION_ELASTIC_IP
    Port 22
    User ubuntu
    IdentityFile C:/Users/user/Downloads/*.pem

    LocalForward 13306 RDS_ENDPOINT_ADDRESS:3306
    LocalForward 16379 REDIS_PRIMARY_ENDPOINT:6379

    ServerAliveInterval 60
    ExitOnForwardFailure yes</code></pre>
<p>이후에는 다음 명령만 실행하면 된다.</p>
<pre><code class="language-bash">ssh aims-db</code></pre>
<hr>
<h4 id="데이터셋-적재">데이터셋 적재</h4>
<p>오후에는 Sample DB와 Main DB에 데이터셋을 적재했다.</p>
<p>진행 과정에서 발견한 문제는 다음과 같았다.</p>
<ul>
<li>데이터셋 구조와 설계한 테이블 구조가 일치하지 않음</li>
<li>날짜 저장 정책 변경 필요</li>
<li>일부 컬럼 정규화 필요</li>
</ul>
<p>이를 반영하여 데이터셋을 수정한 뒤 최종적으로 데이터를 저장했다.</p>
<hr>
<h4 id="병목-탐지-모델링">병목 탐지 모델링</h4>
<p>공정별 생산 흐름을 기반으로 병목 현상을 탐지하기 위한 모델링 작업을 추가로 진행했다.</p>
<p>향후에는 다음과 같은 기능으로 확장할 예정이다.</p>
<ul>
<li>공정별 대기시간 계산</li>
<li>공정별 처리량 비교</li>
<li>AGV 이동 지연 분석</li>
<li>병목 공정 자동 탐지</li>
</ul>
<hr>
<h4 id="백엔드-개발">백엔드 개발</h4>
<p>백엔드에서는 기본 개발 환경을 구축했다.</p>
<p>구현 항목은 다음과 같다.</p>
<ul>
<li>Entity</li>
<li>DTO</li>
<li>Repository</li>
<li>Controller</li>
<li>Service 구조 설계</li>
</ul>
<p>향후 API 개발을 위한 기본 틀을 구성했다.</p>
<hr>
<h4 id="인프라-설계">인프라 설계</h4>
<p>AWS 환경에서 EKS Cluster 구축을 위한 설계를 진행했다.</p>
<p>현재 검토 중인 구성 요소는 다음과 같다.</p>
<ul>
<li>EKS</li>
<li>ALB</li>
<li>Redis (ElastiCache)</li>
<li>RDS</li>
<li>GitHub Actions</li>
<li>ArgoCD</li>
</ul>
<hr>
<h4 id="프론트엔드-수정">프론트엔드 수정</h4>
<p>샘플 데이터 및 공정 구조 변경 사항을 반영하기 위해 메인 페이지를 수정했다.</p>
<p>주요 변경 사항은 다음과 같다.</p>
<ul>
<li>공정 흐름도 재설계</li>
<li>AGV 이동 경로 수정</li>
<li>공정 간 이동 라인 추가</li>
<li>AGV 수량 증가에 따른 UI 조정</li>
</ul>
<p>실제 제조 라인처럼 AGV가 공정 사이를 왕복 이동하는 형태로 변경하는 작업을 진행했다.</p>
<hr>
<h3 id="강사님-피드백">강사님 피드백</h3>
<h4 id="ec2를-터널-전용으로-사용하는-문제">EC2를 터널 전용으로 사용하는 문제</h4>
<p>현재 Bastion 서버를 통해 DB 및 Redis 터널을 연결하고 있으나, 강사님께서는 단순 통로 역할만 수행하는 EC2는 자원 낭비가 발생할 수 있다고 조언해 주셨다.</p>
<h4 id="개선-방향">개선 방향</h4>
<ul>
<li>Redmine 서버를 활용한 접속 구조 검토</li>
<li>VPC를 Redmine용과 서비스용으로 분리</li>
<li>Bastion 서버는 t3.micro 최소 사양 사용</li>
</ul>
<hr>
<h3 id="github-actions-운영-방식">GitHub Actions 운영 방식</h3>
<p>GitHub Actions는 브랜치별로 자동 실행되도록 구성하는 것이 좋다는 의견을 받았다.</p>
<h4 id="권장-구조">권장 구조</h4>
<ul>
<li>테스트용 Workflow</li>
<li>실제 배포용 Workflow</li>
</ul>
<p>YAML 파일을 분리하여 운영 환경과 테스트 환경을 구분하는 방향으로 설계할 예정이다.</p>
<hr>
<h3 id="협업-프로세스">협업 프로세스</h3>
<p>추가로 다음과 같은 팀 운영 방안도 제안받았다.</p>
<ul>
<li>Daily Meeting 진행</li>
<li>Git Push 주기 정하기</li>
<li>코드 리뷰 문화 정착</li>
<li>공통 개발 규칙 수립</li>
</ul>
<p>프로젝트 규모가 커질수록 개발 생산성보다 협업 프로세스가 더욱 중요해질 수 있기 때문에 팀 차원의 규칙을 정하는 것이 필요하다는 의견이었다.</p>
<hr>
<blockquote>
<h3 id="마무리">마무리</h3>
</blockquote>
<p>오늘은 단순히 기능 개발만 진행한 것이 아니라 앞으로의 실시간 데이터 처리 구조와 운영 방식을 결정하는 중요한 논의를 진행한 하루였다.</p>
<p>특히 Sample DB와 Main DB를 분리하여 운영하는 구조, Redis 연결 방식, 병목 탐지 모델링 등은 향후 스마트팩토리 관제 시스템의 핵심 기반이 될 것으로 보인다.</p>
<p>내일부터는 API 개발과 실시간 AGV 시뮬레이터 구현을 본격적으로 진행할 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 09 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-09-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-09-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Tue, 09 Jun 2026 08:11:29 GMT</pubDate>
            <description><![CDATA[<h3 id="aims-프로젝트-개발-착수---아키텍처-및-개발-환경-정리">AIMS 프로젝트 개발 착수 - 아키텍처 및 개발 환경 정리</h3>
<h4 id="📌-오늘-진행-내용">📌 오늘 진행 내용</h4>
<p>오늘은 프로젝트의 실제 개발을 시작하기 위한 구조 설계와 개발 환경 정리를 진행하였다.</p>
<p>그동안 프로젝트 기획과 요구사항 정의에 집중했다면, 이제는 실제 구현 단계로 넘어가기 위해 서비스 구조와 저장소 전략, 데이터베이스 접근 방식 등을 구체화하는 시간을 가졌다.</p>
<hr>
<h4 id="🏗-서비스-구조-확정">🏗 서비스 구조 확정</h4>
<p>AIMS는 기능별 독립 서비스를 기반으로 한 구조로 개발을 진행하기로 결정하였다.</p>
<h3 id="backend-repository">Backend Repository</h3>
<pre><code class="language-text">backend
├─ assembly-service
├─ quality-service
└─ ai-service</code></pre>
<p>각 서비스는 담당 기능을 독립적으로 개발할 수 있도록 분리하며, 향후 서비스 확장과 유지보수성을 고려한 구조를 목표로 한다.</p>
<h3 id="주요-역할">주요 역할</h3>
<h4 id="assembly-service">Assembly Service</h4>
<p>자동차 제조 공정 및 생산 라인 관련 데이터 관리</p>
<h4 id="quality-service">Quality Service</h4>
<p>품질 검사 및 불량 데이터 관리</p>
<h4 id="ai-service">AI Service</h4>
<p>AI 분석 기능 담당</p>
<ul>
<li>병목 현상 분석</li>
<li>불량 전이 분석</li>
<li>원인 분석</li>
<li>LLM 기반 대응 지원</li>
</ul>
<hr>
<h3 id="🤖-ai-service-구조-설계">🤖 AI Service 구조 설계</h3>
<p>AI Service는 FastAPI 기반으로 개발을 진행하며 아래와 같은 계층 구조를 사용한다.</p>
<h3 id="core-layer">Core Layer</h3>
<pre><code class="language-text">core/</code></pre>
<p>공통 설정, 로깅, 예외 처리 담당</p>
<h3 id="router-layer">Router Layer</h3>
<pre><code class="language-text">routers/</code></pre>
<p>API 엔드포인트 관리</p>
<ul>
<li>Health Check</li>
<li>Orchestrator API</li>
<li>LLM API</li>
<li>분석 API</li>
<li>머신러닝 API</li>
</ul>
<h3 id="service-layer">Service Layer</h3>
<pre><code class="language-text">service/</code></pre>
<p>비즈니스 로직 처리</p>
<ul>
<li>분석 서비스</li>
<li>LLM 서비스</li>
<li>오케스트레이션 서비스</li>
</ul>
<h3 id="machine-learning-layer">Machine Learning Layer</h3>
<pre><code class="language-text">ml/</code></pre>
<p>AI 모델 생명주기 관리</p>
<ul>
<li>데이터 로딩</li>
<li>전처리</li>
<li>Feature Engineering</li>
<li>학습</li>
<li>평가</li>
<li>추론</li>
<li>모델 버전 관리</li>
</ul>
<p>프로젝트 초반부터 학습 코드와 서비스 코드를 분리하여 향후 유지보수와 모델 교체가 쉽도록 설계하였다.</p>
<hr>
<h3 id="🗄-데이터베이스-구조-설계">🗄 데이터베이스 구조 설계</h3>
<p>AIMS는 하나의 RDS 인스턴스 내부에 두 개의 논리 데이터베이스를 운영한다.</p>
<pre><code class="language-text">RDS
├─ sampledb
└─ maindb</code></pre>
<h3 id="sampledb">sampledb</h3>
<p>원본 데이터 저장</p>
<ul>
<li>외부 데이터셋</li>
<li>개발용 샘플 데이터</li>
<li>시뮬레이션 데이터</li>
</ul>
<h3 id="maindb">maindb</h3>
<p>실제 서비스 데이터 저장</p>
<ul>
<li>분석 결과</li>
<li>대시보드 데이터</li>
<li>이벤트 데이터</li>
<li>운영 데이터</li>
</ul>
<p>원본 데이터와 서비스 데이터를 분리함으로써 데이터 정합성과 관리 효율성을 확보할 수 있다.</p>
<hr>
<h3 id="🔐-보안-고려-사항">🔐 보안 고려 사항</h3>
<p>RDS는 Private Subnet에 배치한다.</p>
<p>외부에서 직접 접근하지 않고 Bastion Host를 통해 SSH 터널링 방식으로 접속하도록 구성한다.</p>
<pre><code class="language-text">Developer PC
      ↓
Bastion EC2
      ↓
Private RDS</code></pre>
<p>이를 통해 데이터베이스를 외부에 노출하지 않고 안전하게 운영할 수 있다.</p>
<p>또한 다음 사항을 팀 규칙으로 정하였다.</p>
<ul>
<li>PEM 키 공개 금지</li>
<li>DB 비밀번호 공유 금지</li>
<li>GitHub 업로드 금지</li>
<li>Notion 공개 문서 업로드 금지</li>
</ul>
<hr>
<h3 id="🍪-인증-방식-개선">🍪 인증 방식 개선</h3>
<p>기존 JWT 전달 방식에서 보안성을 높이기 위해</p>
<h3 id="변경-전">변경 전</h3>
<pre><code class="language-text">URL 또는 LocalStorage 기반 토큰 관리</code></pre>
<h3 id="변경-후">변경 후</h3>
<pre><code class="language-text">HTTPOnly Cookie 기반 JWT 관리</code></pre>
<p>방식으로 변경하기로 하였다.</p>
<p>이를 통해</p>
<ul>
<li>XSS 공격 위험 감소</li>
<li>토큰 노출 방지</li>
<li>보안성 향상</li>
</ul>
<p>효과를 기대할 수 있다.</p>
<hr>
<h3 id="📦-저장소-구조">📦 저장소 구조</h3>
<p>프로젝트 저장소는 역할별로 분리하여 운영한다.</p>
<h3 id="infra-repository">Infra Repository</h3>
<pre><code class="language-text">infra</code></pre>
<p>Terraform 코드 및 인프라 관리</p>
<h3 id="backend-repository-1">Backend Repository</h3>
<pre><code class="language-text">backend</code></pre>
<p>Spring Boot 및 AI 서비스 관리</p>
<h3 id="frontend-repository">Frontend Repository</h3>
<pre><code class="language-text">frontend</code></pre>
<p>v0 기반 화면을 React + TypeScript 코드로 이전</p>
<hr>
<h3 id="🔍-코드-품질-관리">🔍 코드 품질 관리</h3>
<p>팀 협업 품질 향상을 위해</p>
<pre><code class="language-text">main
 ↕
dev</code></pre>
<p>브랜치 운영 전략을 사용한다.</p>
<p>모든 기능은 Pull Request를 통해 병합하며</p>
<ul>
<li>코드 리뷰</li>
<li>동작 검증</li>
<li>충돌 확인</li>
</ul>
<p>과정을 거친 후 반영하도록 하였다.</p>
<hr>
<h3 id="🎯-앞으로의-계획">🎯 앞으로의 계획</h3>
<p>현재까지는 프로젝트 기획과 설계가 중심이었다면 이제는 실제 개발 단계에 진입하게 되었다.</p>
<p>다음 목표는 다음과 같다.</p>
<ul>
<li>Spring Boot 서비스 개발</li>
<li>AI 분석 서비스 구현</li>
<li>실시간 데이터 처리 구조 설계</li>
<li>대시보드 연동</li>
</ul>
<p>AIMS 프로젝트가 단순 모니터링 시스템이 아니라 제조 공정 데이터를 통합적으로 분석하고 시각화하는 지능형 관제 시스템으로 발전할 수 있도록 지속적으로 구현해 나갈 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 08 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-08-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-08-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Mon, 08 Jun 2026 08:12:48 GMT</pubDate>
            <description><![CDATA[<h3 id="erd-정리-및-api-설계-프론트-개선-방향-논의">ERD 정리 및 API 설계, 프론트 개선 방향 논의</h3>
<blockquote>
<p>📌 오늘 회의 목표</p>
</blockquote>
<p>오늘은 스마트팩토리 통합 관제 시스템(AIMS)의 데이터 구조와 API 명세를 구체화하고, 현재 구현 중인 프론트엔드(V0) 수정 사항을 정리하는 시간을 가졌다.</p>
<p>특히 실제 구현 단계에 진입하기 전,</p>
<p>어떤 데이터를 저장할 것인가
어떤 API를 제공할 것인가
사용자가 어떤 방식으로 이벤트를 처리할 것인가</p>
<p>를 중심으로 논의하였다.</p>
<hr>
<h3 id="1-erd-구조-구체화">1. ERD 구조 구체화</h3>
<p>현재 시스템은 크게 샘플 데이터 저장 영역과 관제 시스템 운영 영역(Main DB) 으로 분리하여 설계하고 있다.</p>
<p><strong>샘플 DB</strong></p>
<p>실제 공장 데이터를 대신하여 AI 분석 및 시뮬레이션에 활용되는 데이터이다.</p>
<p>주요 데이터는 다음과 같다.</p>
<pre><code>차량 정보
차량 상태 데이터
운전자 입력 데이터
차량 제어 데이터
차량 동역학 데이터
설비 정보
AGV 운반 상태
로봇팔 진동 데이터
열화상 이미지 데이터
공정별 환경 데이터</code></pre><p>이를 통해 실제 자동차 제조 공정과 유사한 데이터를 생성하고 관제 시스템으로 전달할 수 있도록 구성하였다.</p>
<hr>
<p><strong>Main DB</strong></p>
<p>관제 시스템이 실제로 사용하는 데이터 영역이다.</p>
<p>주요 기능은 다음과 같다.</p>
<p><strong>이벤트 관리</strong></p>
<pre><code>알림 상세 정보
AI 지원 정보
조치 타임라인
대응 매뉴얼
불신 지수</code></pre><p><strong>사용자 관리</strong></p>
<pre><code>사용자 정보
사용자 업무 현황</code></pre><p><strong>제조 공정 분석</strong></p>
<pre><code>차량 공정 이동 이력
제조 병목 분석 결과
제조 불량 전이 예측 결과</code></pre><p><strong>공정별 AI 분석</strong></p>
<pre><code>프레스 이상 정지 탐지
차체 공정 분석
도장 공정 분석
의장 공정 분석</code></pre><p><strong>검사 프로세스</strong></p>
<pre><code>검사 프로세스
검사 상태 상세
검사 요약
위험 이력</code></pre><hr>
<h3 id="2-이벤트-시스템-개선">2. 이벤트 시스템 개선</h3>
<p>현재 프로젝트에서 가장 많이 사용되는 기능인 이벤트 관리 영역에 대한 개선 방향을 확정하였다.</p>
<p><strong>이벤트 발생 범위 제한</strong></p>
<p>기존에는 다양한 공정에서 이벤트가 생성될 수 있었지만,</p>
<p>이번 회의에서는 실제 공정 중심 관제를 위해 아래 4개 공정만 이벤트 발생 대상으로 제한하기로 결정하였다.</p>
<pre><code>프레스
차체
도장
의장</code></pre><p>반대로 아래 영역에서는 이벤트를 생성하지 않는다.</p>
<pre><code>검사
자재 관리</code></pre><p>이를 통해 이벤트의 의미를 더욱 명확하게 만들고 불필요한 알림을 줄일 수 있게 되었다.</p>
<hr>
<p><strong>이벤트 상태 단순화</strong></p>
<p>기존에는 상태값이 많아 관리가 복잡했다.</p>
<p>이에 따라 상태를 아래 3개로 통일하였다.</p>
<pre><code>ACTION_REQUIRED (조치 필요)
COMPLETED (조치 완료)
NO_ACTION_REQUIRED (조치 불필요)</code></pre><p>이를 통해 사용자가 이벤트를 보다 쉽게 관리할 수 있도록 개선하였다.</p>
<hr>
<p><strong>AI 매뉴얼 동작 방식 변경</strong></p>
<p>기존에는 AI 신뢰성 지수를 기준으로 안내 대상을 선정하였다.</p>
<p>하지만 실제 관제 환경에서는 중요도가 더 중요하다고 판단하여,</p>
<p>앞으로는:</p>
<p><strong>이벤트 우선순위 점수</strong></p>
<p>기반으로 AI 매뉴얼 마스코트가 대응 이벤트를 추천하도록 변경하기로 하였다.</p>
<p>또한 조치 완료 또는 조치 불필요 상태가 된 이벤트는 더 이상 AI가 안내하지 않는다.</p>
<hr>
<h3 id="3-프론트엔드v0-개선-사항">3. 프론트엔드(V0) 개선 사항</h3>
<p>사용자 경험 개선을 위해 여러 UI 수정 사항을 결정하였다.</p>
<p>팝업 동작 개선</p>
<p>기존 문제점</p>
<pre><code>8초마다 팝업 재생성
깜빡이는 현상 발생
사용자가 닫아도 다시 표시</code></pre><p>개선 내용</p>
<pre><code>반복 재알림 제거
팝업 닫기(X)는 삭제가 아닌 숨김 처리
이벤트 데이터는 유지
AI 마스코트 안내는 계속 유지</code></pre><hr>
<p><strong>이벤트 페이지 개선</strong></p>
<p><strong>페이지네이션 추가</strong></p>
<pre><code>페이지당 10건 표시</code></pre><p><strong>이벤트 샘플 데이터 확대</strong></p>
<pre><code>프레스
차체
도장
의장</code></pre><p>공정 이벤트를 대량 추가</p>
<p><strong>건수 표시 방식 변경</strong></p>
<p>기존: 전체 128건</p>
<p>변경: 현재 10건 / 전체 128건</p>
<hr>
<h3 id="4-api-명세-초안-작성">4. API 명세 초안 작성</h3>
<p>기능별 API를 아래와 같이 분류하였다.</p>
<p><strong>Main API</strong></p>
<p>메인 대시보드 조회</p>
<pre><code>담당 업무
설비 상태
AGV 현황
생산 추이
공정 흐름도</code></pre><p><strong>Process API</strong></p>
<p>공정 분석 기능</p>
<pre><code>병목 분석
불량 전이 예측
AI 원인 분석
프레스 이상 탐지
차체 공정 분석
도장 공정 분석
의장 공정 분석</code></pre><p>Events API</p>
<p>이벤트 관리 기능</p>
<pre><code>이벤트 목록
이벤트 상세
조치 이력
AI 대응 추천
매뉴얼 조회
신뢰성 평가
통계 조회
상태 변경</code></pre><p><strong>Inspection API</strong></p>
<p>검사 데이터 저장</p>
<pre><code>검사 결과
공정 진행 현황
위험도 추이</code></pre><p><strong>Cars API</strong></p>
<p>샘플 차량 데이터 조회</p>
<pre><code>차량 정보
차량 상태
운전자 입력
제어 데이터
차량 동역학</code></pre><hr>
<h3 id="5-강사님-피드백">5. 강사님 피드백</h3>
<p>강사님께서는 개발 진행 방식에 대해 다음과 같은 조언을 해주셨다.</p>
<pre><code>스프린트 단위를 2주로 설정할 것
스프린트 목표를 명확하게 정의할 것
매일 진행 상황을 기록할 것
단순 개발뿐 아니라 설계와 문서 작업도 일정으로 관리할 것</code></pre><p>향후에는 Redmine을 활용하여 스프린트별 목표와 일일 진행 상황을 체계적으로 관리할 예정이다.</p>
<hr>
<h3 id="마무리">마무리</h3>
<p>오늘 회의에서는 단순 기능 논의를 넘어 실제 구현을 위한 데이터 구조와 API 설계를 구체화하였다.</p>
<p>특히 이벤트 시스템의 구조를 단순화하고, AI 매뉴얼의 동작 기준을 현실적인 우선순위 기반으로 변경하면서 프로젝트의 방향성이 더욱 명확해졌다.</p>
<p>다음 단계에서는 확정된 ERD와 API 명세를 기반으로 백엔드 구현과 프론트엔드 연동 작업을 본격적으로 진행할 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 04 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-04-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-04-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Thu, 04 Jun 2026 08:18:21 GMT</pubDate>
            <description><![CDATA[<h3 id="오늘의-프로젝트-회고---mvp-기능-확정과-차별화-고민">오늘의 프로젝트 회고 - MVP 기능 확정과 차별화 고민</h3>
<p>최근 계속해서 진행중인 자동차 스마트팩토리 통합 관제 플랫폼 프로젝트의
MVP 기능을 구체화하고, 멘토님 및 강사님의 피드백을 받는 시간을 가졌다.</p>
<p>이번 회의의 핵심 주제는 단순히 &quot;무엇을 만들 것인가&quot;가 아니라,</p>
<blockquote>
<p>&quot;왜 이 기능이 필요한가?&quot;
&quot;기존 MES나 관제 시스템과 다른 것이 무엇인가?&quot;
&quot;사용자에게 어떤 가치를 제공하는가?&quot;</p>
</blockquote>
<p>에 대한 답을 저번 회의에 이어서 찾는 과정이었다.</p>
<hr>
<blockquote>
<p><strong>MVP 기능에 대한 재검토</strong></p>
</blockquote>
<p>화요일에 선정했던 MVP 기능들을 멘토님께 메세지를 보내 공유하고 피드백을 받는 시간을 가졌다.</p>
<p>멘토님께서는 기능 자체보다도</p>
<p><strong>&quot;왜?&quot;</strong>
를 계속해서 질문하셨다.</p>
<p>또한 <strong>기존 MES와 무엇이 다른가?</strong> 에 대한 질문을 받고
우리가 만드는 AIMS가 제공하는 차별점은 무엇인가에 대한 고민을 해보게 되었다.</p>
<hr>
<blockquote>
<p><strong>새롭게 제안된 MVP</strong></p>
</blockquote>
<p>회의 중 흥미로운 아이디어가 하나 나왔다.</p>
<p><strong>숙련자 행동 패턴 학습 기능</strong></p>
<p>관제 업무를 하다 보면 특정 장애 상황에서 항상 특정 담당자가 빠르게 대응하는 경우가 있다.</p>
<p>하지만 이러한 대응 노하우는 대부분 문서화되지 않고 개인에게만 축적된다.</p>
<p>만약 해당 담당자가 부재중이라면?</p>
<p>새로운 담당자는 동일한 문제를 해결하는 데 훨씬 많은 시간이 필요할 수 있다.</p>
<p>이를 해결하기 위해 다음과 같은 기능을 제안했다.</p>
<p><strong>기능</strong></p>
<pre><code>숙련된 관제 담당자의 행동 로그 수집
장애 발생 시 어떤 화면을 확인했는지 기록
어떤 조치를 수행했는지 저장
해결까지 걸린 시간 분석
유사 상황 발생 시 대응 가이드 추천</code></pre><p>팀끼리 회의를 마치고 해당 기능을 AI 매뉴얼 기능과 연계하여 신규 사용자가 해당 관제 시스템을 사용 시에 숙련자가 직접 했던 조치 기록을 기반으로 어떻게 조치해야 할지 추천하는 방식으로 만들어 보고자 계획을 세웠다.</p>
<hr>
<p>내일 할 일</p>
<pre><code>아키텍처 정의서 작성
Redmine 일정 정리
WBS 작성
MVP 기능 문서 업데이트
차별화 포인트 구체화</code></pre><p>프로젝트가 조금씩 기능 구현 단계에 가까워지고 있다. 이제는 &quot;무엇을 만들 것인가&quot;보다 &quot;왜 만들어야 하는가&quot;를 더 깊게 고민해야 할 시점인 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 02 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-02-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-02-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Tue, 02 Jun 2026 08:25:23 GMT</pubDate>
            <description><![CDATA[<h3 id="스마트팩토리-관제-프로젝트-mvp-기능-선정-과정">스마트팩토리 관제 프로젝트 MVP 기능 선정 과정</h3>
<p>최근 팀 프로젝트 주제로 자동차 스마트팩토리 기반 관제 시스템을 기획하면서, 단순히 “기능이 많은 시스템”이 아니라 실제 제조 현장에서 왜 필요한지 설명할 수 있는 기능이 무엇인지에 대해 많은 고민을 하게 되었다.</p>
<p>특히 중간 발표에서는 구현 자체보다도 어제 얘기한 내용에서의 연장선으로:</p>
<ul>
<li><strong>왜 해당 주제를 선택했는지</strong></li>
<li><strong>왜 이 기능이 필요한지</strong></li>
<li><strong>기존 시스템과 어떤 차별성이 있는지</strong></li>
</ul>
<p>를 논리적으로 설명하는 것이 중요하다는 피드백을 받았다.</p>
<p>그 과정에서 저희 팀은 스마트팩토리 환경의 특징을 다시 정리해보게 되었다.</p>
<hr>
<blockquote>
<p><strong>왜 자동차 스마트팩토리였을까?</strong></p>
</blockquote>
<p>자동차 제조 공정은 프레스, 차체, 도장, 의장, 검사와 같이 여러 공정이 순차적으로 강하게 연결되어 있는 구조를 가진다.</p>
<p>특히 AGV, 컨베이어, 로봇 설비, PLC, MES 등 다양한 시스템이 동시에 동작하며 실시간 데이터를 지속적으로 생성한다는 특징이 있다.</p>
<p>이러한 구조에서는 하나의 작은 이상 상황이 단순 설비 오류로 끝나는 것이 아니라:</p>
<pre><code>부품 공급 지연
공정 대기
품질 문제
생산량 감소</code></pre><p>와 같은 연쇄적인 문제로 이어질 가능성이 높다.</p>
<p>즉 자동차 스마트팩토리는 단순 모니터링이 아니라, 이벤트 간 상관관계를 분석하고 예방 중심으로 대응하는 관제 시스템의 필요성이 매우 높은 환경이라고 판단하였다.</p>
<hr>
<h4 id="mvp-기능-선정-과정">MVP 기능 선정 과정</h4>
<p>초기에는 원격 제어, 화재/침수 대응, 확장형 플랫폼 등 다양한 기능들을 후보로 고려하였다.</p>
<p>하지만 실제 구현 가능성, 프로젝트 기간, 그리고 “보안 관제”라는 핵심 방향성을 다시 고민하면서 기능을 재정리하게 되었다.</p>
<p>그 결과 최종적으로 아래 3가지 MVP 기능이 가장 현실적이면서도 프로젝트의 방향성을 잘 보여줄 수 있다고 판단하였다.</p>
<hr>
<h4 id="1️⃣-알림-신뢰성-평가-시스템">1️⃣ 알림 신뢰성 평가 시스템</h4>
<p>스마트팩토리 환경에서는 수많은 이벤트와 알람이 동시에 발생한다.</p>
<p>문제는 실제 현장에서는 오경보(False Positive)가 많아질수록 작업자가 알람 자체를 신뢰하지 않게 되는 “경보 피로(Alarm Fatigue)” 문제가 발생한다는 점이다.</p>
<p>즉:</p>
<p>중요한 알림과 불필요한 알림이 구분되지 않으면 결국 실제 위험 상황도 놓칠 수 있게 된다.</p>
<p>이를 해결하기 위해 저희는 “불신 지수(Distrust Score)” 개념을 도입하였다.</p>
<p>작업자의:</p>
<pre><code>무시한 알림
즉시 대응한 알림
반복적으로 발생한 이벤트</code></pre><p>등을 기반으로 알림 신뢰도를 계산하고, AI 모델이 임계값과 알림 방식을 동적으로 조정하도록 설계하였다.</p>
<p>예를 들어 불신 지수가 높아질 경우:</p>
<pre><code>임계값 완화
알림 우선순위 조정
알림 방식 변경</code></pre><p>등을 통해 실제로 중요한 이벤트만 우선적으로 전달할 수 있도록 구성하였다.</p>
<p>단순히 AI가 알림을 생성하는 것이 아니라, 현장의 반응 데이터를 다시 AI 판단 로직에 반영하는 “피드백 루프 기반 관제 시스템”이라는 점에서 차별화를 두고자 하였다.</p>
<hr>
<h4 id="2️⃣-공정-간-불량-전이-예측">2️⃣ 공정 간 불량 전이 예측</h4>
<p>자동차 제조 공정은 공정 간 연결성이 매우 강하다.</p>
<p>예를 들어:</p>
<ul>
<li>차체 공정의 용접 품질 문제는</li>
<li>도장 공정의 표면 품질 저하로 이어질 수 있고,</li>
<li>이후 의장 공정의 조립 불량까지 영향을 줄 수 있다.</li>
</ul>
<p>하지만 대부분의 제조 현장에서는 “현재 공정”만 관리하는 경우가 많아, 이후 공정에서 발생할 문제를 사전에 예측하기 어렵다.</p>
<p>우리는 이러한 구조에 주목하여 제품별 제조 이력과 공정 데이터를 기반으로:</p>
<pre><code>센서 데이터
처리 시간
품질 검사 결과
공정 이동 정보</code></pre><p>간의 관계를 분석하고, 특정 이상 징후가 이후 공정의 품질 문제로 이어질 가능성을 예측하는 기능을 기획하였다.</p>
<p>이를 통해 단순 불량 탐지가 아니라:</p>
<p>“현재 발생한 이상이 미래 공정에 어떤 영향을 줄 것인가?”</p>
<p>를 분석하는 예방 중심 관제 시스템을 구현하고자 하였다.</p>
<hr>
<h4 id="3️⃣-ai-기반-운영-매뉴얼">3️⃣ AI 기반 운영 매뉴얼</h4>
<p>스마트팩토리 환경은:</p>
<pre><code>설비
PLC
센서
AGV
MES
품질 시스템</code></pre><p>등 수많은 요소들이 동시에 연결되어 있기 때문에, 초보 작업자나 신규 관제사가 시스템을 이해하기 어렵다는 문제가 존재한다.</p>
<p>특히 실제 현장에서는 여전히 숙련자의 경험과 노하우에 의존하는 경우가 많다.</p>
<p>우리는 이러한 문제를 해결하기 위해 AI 기반 운영 매뉴얼 기능을 기획하였다.</p>
<p>단순히 오류 코드만 출력하는 것이 아니라:</p>
<pre><code>장애 원인 설명
영향받는 공정 분석
우선 점검 요소
대응 가이드
위험도 분석</code></pre><p>등을 자연어 형태로 제공하여 초보 사용자도 상황을 빠르게 이해할 수 있도록 구성하였다.</p>
<p>즉:
“숙련자 중심 운영 구조”에서 벗어나,
비숙련자도 쉽게 사용할 수 있는 서포터형 관제 시스템을 목표로 하였다.</p>
<hr>
<h4 id="마무리">마무리</h4>
<p>이번 MVP 선정 과정에서 가장 중요하게 고민했던 부분은:</p>
<p><strong>“이 기능이 실제 제조 현장에서 왜 필요한가?”</strong></p>
<p>였다.</p>
<p>단순히 기술을 많이 사용하는 것이 아니라:</p>
<pre><code>왜 Kafka를 사용하는지
왜 AI가 필요한지
왜 이벤트 상관관계 분석이 중요한지</code></pre><p>를 실제 스마트팩토리 환경과 연결해서 설명할 수 있어야 한다고 생각했다.</p>
<p>아직 구현 전 단계이지만,
프로젝트의 방향성과 문제 정의를 구체적으로 고민하는 과정 자체가 굉장히 중요하다는 것을 느낄 수 있었던 시간이었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 06. 01 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.-06.-01-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.-06.-01-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Mon, 01 Jun 2026 08:16:15 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="기술보다-중요한-것은-왜">기술보다 중요한 것은 “왜?”</h3>
</blockquote>
<p>오늘 오전 회의에서는 단순히 어떤 기술을 사용할지보다,
“왜 이 프로젝트를 만들고 어떤 문제를 해결하려 하는가?”에 대한 이야기를 중심으로 논의를 진행했다.</p>
<hr>
<h4 id="기술보다-중요한-것--why">기술보다 중요한 것 = WHY</h4>
<p>이번 회의에서 가장 인상 깊었던 말은 다음이었다.</p>
<blockquote>
<p>“Redis, Kafka 같은 기술은 결국 도구일 뿐이다.”</p>
</blockquote>
<p>그동안은 어떤 기술을 사용할지에 초점이 많이 맞춰져 있었다.
Kafka를 붙이고, Redis를 쓰고, OpenSearch를 넣는 구조 자체에 집중했지만,
오늘은 그보다 더 중요한 것이 있다는 피드백을 받았다.</p>
<pre><code>- 왜 Kafka가 필요한가?
- 왜 Redis를 사용하는가?
- 왜 이 관제 시스템이 필요한가?
- 기존 관제 시스템과 무엇이 다른가?</code></pre><p>결국 발표에서 중요한 것은 기술 나열이 아니라,
그 기술을 사용하게 된 배경과 목적이라는 점이었다.</p>
<hr>
<h4 id="프로젝트-발표에서-중요한-스토리텔링">프로젝트 발표에서 중요한 “스토리텔링”</h4>
<p>이번 회의에서는 발표 방향성에 대한 이야기도 많이 나왔다.</p>
<p>단순히:</p>
<pre><code>1. Kafka 사용
2. Redis 사용
3. OpenSearch 사용
4. AI 예측 적용</code></pre><p>처럼 나열하는 방식은 기술 설명으로 끝나버릴 가능성이 크다는 의견이 있었다.</p>
<p>대신 아래와 같은 흐름이 중요하다는 피드백을 받았다.</p>
<pre><code>예시 흐름
공정 이상 발생
AGV 이동 지연 발생
특정 공정 병목 확대
후속 공정까지 영향 전파
관제 시스템이 위험도를 분석
관리자에게 알림 및 대응 가이드 제공</code></pre><p>즉, “기술 설명”이 아니라
<strong>“어떤 상황에서 어떤 문제를 어떻게 해결하는가”</strong>를 보여줘야 한다는 것이다.</p>
<hr>
<h4 id="기능-중심-vs-서비스-중심">기능 중심 vs 서비스 중심</h4>
<p>오후 회의에서는 프로젝트 방향성을 두고 팀 내부 논의도 진행했다.</p>
<pre><code># 기술 중심 접근

장점:

- 다양한 기술 스택을 강조 가능
- 시스템 구조 설명에 강함

단점:

- 발표에서 기술 나열만 하다가 끝날 가능성 존재
- 실제 사용자 관점이 약할 수 있음</code></pre><hr>
<pre><code># 서비스 중심 접근

장점:

사용자 입장에서 이해하기 쉬움
AI 매뉴얼 같은 차별화 요소 추가 가능

단점:

자칫 주제가 “관제”보다 “서비스 기능” 중심으로 흐를 수 있음</code></pre><p>아직 팀 내부적으로 어느 방향에 더 집중할지는 결정하지 못했지만,
우선 ERD를 정의하고 데이터 구조를 먼저 정리한 뒤 다시 논의하기로 했다.</p>
<hr>
<h4 id="현재-진행-상황">현재 진행 상황</h4>
<p>현재는 다음 작업들을 병행 중이다.</p>
<pre><code>- ERDCloud 기반 테이블 설계
- 공용 테이블 정의
- 각 기능별 데이터 구조 정리
- 데이터셋 정규화
- 샘플 데이터 생성</code></pre><p>특히 단순 더미 데이터가 아니라,
실제 공정 흐름처럼 보이는 데이터를 만드는 것이 중요하다는 이야기도 나왔다.</p>
<hr>
<h4 id="오늘-회의를-통해-느낀-점">오늘 회의를 통해 느낀 점</h4>
<p>오늘 회의를 통해 가장 크게 느낀 점은
<strong>“좋은 프로젝트는 기술이 아니라 문제 해결 흐름으로 설명된다”</strong>는 점이었다.</p>
<p>Kafka, Redis, OpenSearch 같은 기술은 분명 중요하지만,
그보다 중요한 것은:</p>
<ul>
<li><strong>&quot;왜&quot; 필요한지</strong></li>
<li>어떤 문제를 해결하는지</li>
<li>사용자가 어떤 도움을 받는지</li>
</ul>
<p>를 설명할 수 있어야 한다는 것이다.</p>
<p>앞으로는 단순 구현보다도
“이 시스템이 실제 현장에서 어떻게 사용될 수 있을까?”를 더 많이 고민해보려 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026. 05. 29 회의록]]></title>
            <link>https://velog.io/@jongchan_im/2026.05.29-%ED%9A%8C%EC%9D%98%EB%A1%9D</link>
            <guid>https://velog.io/@jongchan_im/2026.05.29-%ED%9A%8C%EC%9D%98%EB%A1%9D</guid>
            <pubDate>Fri, 29 May 2026 08:25:15 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="0529-프로젝트-기획-및-설계-회의">05.29 프로젝트 기획 및 설계 회의</h3>
</blockquote>
<p>오늘은 본격적인 기능 개발에 들어가기 전, 프로젝트의 전체적인
방향성 + 문서 체계를 정리하는 시간을 가졌다.</p>
<p>현재 진행중인 프로젝트는 AI 기반 자동차 제조 통합 보안 관제 시스템으로
스마트팩토리 환경에서 발생하는 제조 과정에서 수집되는 데이터를 기반으로
이상탐지 및 통합 관제를 수행하는 시스템을 목표로 한다.</p>
<hr>
<p>📌 <strong>프로젝트 진행 방향</strong></p>
<p>이번 회의에서는 먼저 프로젝트의 뼈대를 탄탄하게 잡아보고자 문서들을
우선적으로 정리하고자 하였다.</p>
<pre><code>요구사항 정의서
프로젝트 수행 계획서
클라우드 사용 계획서
인프라 구성도
아키텍처 정의서</code></pre><p>기능 구현에 앞서서 먼저 요구사항 명세서부터 명확하게 정의하는 것을
팀 회의를 통해 목표로 두고 진행했다.</p>
<hr>
<p>📌 <strong>레드마인(Redmine) 기반 일정 관리</strong></p>
<p>현재 진행중인 프로젝트는 애자일 (Agile) 방식으로 진행하기로 하였다. 
단순히 일정을 적는 것이 아닌 기능 단위로 세부 목표를 나누고
진행 상황을 관리하는 방향으로 진행하기로 하였다.</p>
<blockquote>
<p><strong>마일스톤</strong></p>
</blockquote>
<p>프로젝트의 큰 흐름을 다음과 같이 분류하고:</p>
<pre><code>기획
중간 발표
최종 발표</code></pre><p>이처럼 가장 큰 목적을 기준으로 단계를 나눠놓고 그 안에서 다시
세부 목표를 쪼개는 방식으로 진행한다.</p>
<blockquote>
<p><strong>에픽</strong></p>
</blockquote>
<p>에픽은 비교적 큰 목표 단위로 약 4주 정도의 중기 목표로 설정한다고
설명해주셨다.</p>
<blockquote>
<p><strong>스프린트</strong></p>
</blockquote>
<p>주간 단위의 작은 목표이다. 
실제로는 스프린트를 중심으로 일정 관리르 진행할 예정으로,
매주 금요일마다 아래 내용을 기준으로 회의를 진행하는 것이
진행하는데 매끄러울 것이라고 생각했다.</p>
<pre><code>현재 기능 유지 여부
방향성 수정 여부
기능 추가/삭제 결정
다음 주 목표 설정</code></pre><p>칸반보드를 통해:</p>
<pre><code>담당자
진행 상태
우선순위
일정 관리</code></pre><p>까지 함께 관리할 예정이다.</p>
<hr>
<p>📌 <strong>피그마(Figma) 기반 화면 설계</strong></p>
<p>오후에는 피그마를 활용하여 실제 대시보드 화면을 설계하는 시간을 가졌다.</p>
<p>특히 이번 프로젝트는:</p>
<pre><code>실시간 이벤트 관제
AGV 운반 상태
제조 공정 흐름
AI 이상 탐지
이벤트 로그 관리</code></pre><p>등을 한눈에 볼 수 있는 UI를 목표로 하고 있다.</p>
<p><img src="https://velog.velcdn.com/images/jongchan_im/post/ff13cefb-04e6-4264-9449-cc497e25cd46/image.png" alt=""></p>
<p>해당 이미지는 현재 예상 메인 대시보드 구현 화면이다.</p>
]]></description>
        </item>
    </channel>
</rss>