<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyeon-kdh</title>
        <link>https://velog.io/</link>
        <description>nice to meet you:)</description>
        <lastBuildDate>Mon, 11 Dec 2023 10:55:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. hyeon-kdh. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyeon-kdh" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[데이터 어노테이션]]></title>
            <link>https://velog.io/@hyeon-kdh/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98</link>
            <guid>https://velog.io/@hyeon-kdh/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98</guid>
            <pubDate>Mon, 11 Dec 2023 10:55:41 GMT</pubDate>
            <description><![CDATA[<h3 id="definition">Definition</h3>
<ul>
<li>데이터 어노테이션은 훈련 데이터(텍스트, 이미지, 오디오, 비디오 등)의 개별 요소에 주석을 달아 기계가 데이터 내용과 중요한 부분을 이해하도록 돕는 과정입니다.
예를 들어, 이미지에 있는 사람이나 물체에 &#39;이것은 사람&#39;, &#39;이것은 자동차&#39;와 같은 태그를 붙이는 것을 말합니다.<h4 id="annotation-vs-labeling">Annotation vs Labeling</h4>
</li>
<li>데이터 어노테이션은 데이터에 주석을 달아주는 작업을 의미합니다. 예를 들어, 이미지 데이터에 어노테이션을 하면 사람의 얼굴, 물체의 종류 등 이미지의 각 요소에 대한 상세한 정보를 제공합니다.</li>
<li>데이터 라벨링은 데이터를 특정 범주로 분류하는 작업을 의미합니다. 예를 들어, 이미지 데이터를 라벨링하면 이미지의 전체 또는 특정 부분을 &#39;사람&#39;, &#39;동물&#39;, &#39;자연&#39; 등의 범주로 분류할 수 있습니다.<h3 id="중요성">중요성</h3>
</li>
<li>지도학습에서 입력 데이터의 품질이 머신 러닝 모델의 성능을 결정합니다.</li>
<li>데이터 유형의 이해: 데이터는 구조화된 데이터와 비구조화된 데이터로 분류됩니다. 예를 들어, 구조화된 데이터는 엑셀 시트에 나열된 고객 정보 같은 것이고, 비구조화된 데이터는 소셜 미디어의 텍스트나 이미지 같은 것입니다.</li>
</ul>
<h3 id="종류">종류</h3>
<h4 id="텍스트-어노테이션">텍스트 어노테이션</h4>
<ul>
<li>Named Entity Recognition (NER): 텍스트 내 개별 엔티티를 식별합니다. 예: &#39;서울은 도시입니다&#39;에서 &#39;서울&#39;을 &#39;도시&#39;로 식별.</li>
<li>Sentiment Tagging: 텍스트의 감정적 톤을 분류합니다. 예: &#39;이 제품은 정말 좋아요!&#39;는 긍정적 감정으로 분류.</li>
<li>Semantic Annotation: 텍스트의 의도나 맥락을 이해하는 데 도움을 줍니다. 예: &#39;나는 창문을 닫았다&#39;는 행동을 설명합니다.<h4 id="이미지-어노테이션">이미지 어노테이션</h4>
</li>
<li>Image Bounding Boxes: 이미지 내 특정 객체를 식별하고 라벨을 붙입니다. 예: 공원의 사진에서 사람, 벤치, 나무에 박스를 그림.</li>
<li>Image Classification: 이미지를 하나 이상의 범주로 분류합니다. 예: 산의 이미지를 &#39;자연&#39; 범주로 분류.<h4 id="비디오-어노테이션">비디오 어노테이션</h4>
</li>
<li>비디오 프레임 내 객체 식별, 분류, 추적: 비디오 내의 객체를 식별하고, 분류하며, 필요한 경우 여러 프레임에 걸쳐 추적합니다. 예: 도로 위를 달리는 자동차를 비디오의 각 프레임에서 추적.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Autosar]]></title>
            <link>https://velog.io/@hyeon-kdh/Autosar</link>
            <guid>https://velog.io/@hyeon-kdh/Autosar</guid>
            <pubDate>Tue, 28 Nov 2023 00:57:31 GMT</pubDate>
            <description><![CDATA[<h3 id="ref">ref</h3>
<ul>
<li><a href="https://www.einfochips.com/blog/autosar-in-automotive-industry/#:~:text=Basic%20Software%20Architecture%20(BSW),of%20engine%2C%20gearbox%2C%20etc">https://www.einfochips.com/blog/autosar-in-automotive-industry/#:~:text=Basic%20Software%20Architecture%20(BSW),of%20engine%2C%20gearbox%2C%20etc</a>.</li>
<li><a href="https://www.autosar.org/standards/classic-platform">https://www.autosar.org/standards/classic-platform</a><h3 id="키워드--표준화-확장성">키워드 : 표준화, 확장성</h3>
</li>
</ul>
<h2 id="autosar-개요">AUTOSAR 개요</h2>
<ul>
<li>AUTOSAR는 자동차 OEM(Original Equipment Manufacturer) 및 1차 공급업체들이 ECU(Electronic Control Unit) 소프트웨어의 품질을 향상시키고, 개발 비용을 줄이며, 동일한 차량 애플리케이션에 대해 유사한 ECU 소프트웨어 컴포넌트의 재개발을 방지하기 위해 지원하는 개방형 시스템 아키텍처입니다.</li>
</ul>
<h2 id="본문">본문</h2>
<h3 id="자동차-산업의-트렌드">자동차 산업의 트렌드</h3>
<ul>
<li>자율 주행, 차량 간 통신(V2X), OTA(Over-The-Air) 업데이트, 예측 유지 보수 등과 같은 혁신적인 기능들이 차량 내 소프트웨어 기능에 기반하고 있습니다. 이러한 기능들이 원활하게 작동하기 위해서는 각 ECU가 효율적으로 작동해야 합니다.<h3 id="과거의-문제점">과거의 문제점</h3>
</li>
<li>과거에는 OEM이 사용하는 ECU 소프트웨어가 다양한 플랫폼에서 개발되었으며, 1차 공급업체와 그들의 벤더들이 OEM을 위한 ECU 소프트웨어를 설계할 때 사용되는 표준 소프트웨어 아키텍처가 없었습니다. 이로 인해 새로운 공급업체가 기존의 소프트웨어 아키텍처, 하드웨어 플랫폼, 그리고 ECU 소프트웨어 개발에 사용된 표준들을 이해하는데 큰 도전을 겪었습니다.</li>
<li>이 문제를 해결하기 위해, 2003년에 자동차 1차 공급업체, 반도체 제조업체, 소프트웨어 공급업체, 도구 공급업체 등이 모여 AUTOSAR 컨소시엄을 창설했습니다.</li>
</ul>
<h3 id="목적">목적</h3>
<ul>
<li>AUTOSAR은 개방형 및 표준화된 자동차 소프트웨어 아키텍처로, 애플리케이션 소프트웨어와 기본 차량 기능 간의 인터페이스 표준화를 지원합니다. 이는 멤버들에게 복잡한 전자/전기 차량 환경 관리에 있어 여러 혜택을 제공하며, 소프트웨어 아키텍처의 표준화를 통해 품질 향상과 개발 시간 및 비용 절감을 도모합니다.</li>
</ul>
<h3 id="아키텍쳐">아키텍쳐</h3>
<ul>
<li>AUTOSAR 아키텍처는 소프트웨어 개발을 위한 개방형 시스템 아키텍처로, 다음 3개의 주요 계층으로 구성됩니다<ul>
<li>기본 소프트웨어 아키텍처(Basic Software Architecture -모든 AUTOSAR ECU 공통)</li>
<li>AUTOSAR 런타임 환경(AUTOSAR Runtime Enviroment)</li>
<li>애플리케이션 계층(Application Layer)</li>
</ul>
</li>
</ul>
<h2 id="bsw">BSW</h2>
<ul>
<li>Basic Software Architecture</li>
<li>다양한 계층으로 구성된 수백개의 소프트웨어 모듈로 구성됩니다.</li>
<li>이를 통해 BSW를 설계한 공급업체가 엔진, 기어박스 등의 ECU를 작업하는 다른 공급업체와 이를 공유할 수 있습니다.</li>
</ul>
<h3 id="기본-소프트웨어-아키텍쳐-계층">기본 소프트웨어 아키텍쳐 계층</h3>
<ul>
<li>Microcontroller Abstraction Layer (MCAL)<ul>
<li>하드웨어 추상화 계층</li>
<li>특정 MCU에 대한 인터페이스를 구현합니다</li>
<li>MCAL은 차량 내의 특정 마이크로컨트롤러와 소프트웨어 간의 연결 다리 역할을 합니다</li>
<li>소프트웨어 계층이 마이크로컨트롤러와 레지스터를 통해 직접 소통할 수 있도록 해줍니다.</li>
<li>시스템 드라이버, 진단 드라이버, 메모리 드라이버, 통신 드라이버(CAN, LIN, Ethernet 등), I/O 드라이버 등 다양한 드라이버를 제공합니다.</li>
</ul>
</li>
<li>ECU Abstraction Layer<ul>
<li>상위 SW 계층에 특정 ECU 서비스를 제공합니다. </li>
<li>이 계층과 드라이버들은 MCU와 독립적이며, ECU 하드웨어에 의존성이 있습니다.</li>
<li>ECU의 모든 주변 장치 및 장치에 접근할 수 있게 해주며, 통신, 메모리, I/O 등의 기능을 지원합니다.</li>
</ul>
</li>
<li>Service Layer<ul>
<li>AUTOSAR 기본 SW 아키텍쳐의 최상위 계층입니다</li>
<li>서비스 계층에는 OS가 포함되어있으며, OS는 SW가 차량 내에서 어떻게 동작하는지를 관리합니다</li>
<li>이 OS는 Application 계층부터 MCU까지 전 범위까지 모든 계층을 관리하고 조정합니다.</li>
<li>역할: 마이크로컨트롤러와 애플리케이션 계층 사이의 인터페이스 역할을 하며, 애플리케이션 작업을 스케줄할 수 있습니다.</li>
<li>담당 서비스: 네트워크 서비스, 메모리 서비스, 진단 서비스, 통신 서비스, ECU 상태 관리 등을 담당합니다.<h3 id="런타임-환경-rte-계층">런타임 환경 (RTE 계층)</h3>
</li>
</ul>
</li>
<li>BSW와 application 계층 사이의 미들웨어 계층으로 applicationSW에 대한 통신 서비스를 제공합니다</li>
</ul>
<h3 id="application-계층">Application 계층</h3>
<ul>
<li>AUTOSAR의 애플리케이션 계층는 소프트웨어 아키텍처의 최상위 계층이며 사용자 지정 기능 구현을 지원합니다. </li>
<li>이 계층은 특정 소프트웨어 구성 요소와 지침에 따라 특정 작업을 수행하는 다양한 애플리케이션으로 구성됩니다.</li>
<li>애플리케이션 소프트웨어 구성 요소, 소프트웨어 구성 요소의 포트 및 포트 인터페이스로 구성된 세 가지 구성 요소로 구성됩니다.</li>
<li>AUTOSAR는 애플리케이션 계층의 소프트웨어 구성 요소에 대한 표준화된 인터페이스를 보장합니다.</li>
<li>애플리케이션 소프트웨어 구성 요소는 차량 기능을 지원하는 간단한 애플리케이션을 생성하는 데 도움이 됩니다.</li>
<li>소프트웨어 구성 요소 간의 통신은 가상 함수 버스를 사용하여 특정 포트를 통해 가능합니다. </li>
<li>이러한 포트는 또한 소프트웨어 구성 요소와 AUTOSAR 기본 소프트웨어(BSW) 간의 통신을 용이하게 합니다.</li>
<li>위에 설명된 AUTOSAR 아키텍처는 실시간 요구 사항과 안전 제약을 지원하는 클래식 플랫폼입니다. </li>
<li>MCU를 기반으로 하는 클래식 플랫폼은 ECU가 차량 센서 및 actuator에 접근할 수 있도록 허용하여 네트워킹 및 보안 분야의 애플리케이션을 지원할 수 있습니다.</li>
</ul>
<h2 id="adaptive-autosar의-필요성">Adaptive AUTOSAR의 필요성</h2>
<ul>
<li>요약 : 표준화된 adaptive 프레임워크를 통해 혁신, 협업 및 최첨단 자동차 기능의 제공에 있어 중추적인 역할을 하고 있습니다.</li>
</ul>
<h3 id="classic-autosar의-한계">Classic AUTOSAR의 한계</h3>
<ul>
<li>2003년부터 2015년까지 Classic AUTOSAR는 잘 확립된 플랫폼으로, 차량 내 60-80개의 ECU를 운영하는 데 적합했습니다.<h3 id="자동차-산업의-진화">자동차 산업의 진화</h3>
</li>
<li>IoT 기반의 자동차 트렌드(예: V2X 연결성, 자동 운전)의 발전으로 인해 전기화가 급증하면서, 시장에서는 더 많은 기능과 장치를 지원할 수 있는 새로운 아키텍처의 필요성이 대두되었습니다.<h3 id="adaptive-autosar의-출현">Adaptive AUTOSAR의 출현</h3>
</li>
<li>기존의 Classic AUTOSAR 플랫폼은 이러한 메가 트렌드를 지원하기에 적합하지 않았기 때문에, 더 강력하고 유연한 E/E 아키텍처가 요구되었고, 이에 따라 Adaptive AUTOSAR가 2017년 3월에 출시되었습니다.</li>
</ul>
<h3 id="adaptive-autosar-아키텍처의-특징">Adaptive AUTOSAR 아키텍처의 특징</h3>
<ul>
<li>고성능 중앙 애플리케이션 서버 : 이 시스템은 고성능 컴퓨팅을 지원하는 중앙 애플리케이션 서버를 포함합니다.</li>
<li>실시간 기능 지원: Ethernet 기반의 ECU는 실시간 기능을 지원합니다.</li>
<li>확장성과 동적 아키텍처: Adaptive AUTOSAR는 확장 가능하며, 차량의 수명 주기에 걸쳐 애플리케이션을 업데이트할 수 있는 동적 아키텍처를 가지고 있습니다.</li>
<li>미래 지향적 자동차 애플리케이션 지원: 인포테인먼트, V2X, 예측 유지보수, 자동차 앱, 카메라, 레이더, 라이다 센서를 사용하는 ADAS 기능, 지도 업데이트, 전기화 등을 지원합니다.</li>
</ul>
<h3 id="autosar-2023의-주요-트렌드">AUTOSAR 2023의 주요 트렌드:</h3>
<ul>
<li>사이버 보안 강화: 차량과 모든 것(V2X) 간의 안전한 통신을 가능하게 하는 사이버 보안에 대한 초점이 증가하고 있습니다.</li>
<li>OTA 업데이트 지원 강화: 공중을 통한(Over-The-Air) 업데이트 지원을 강화하고 있습니다.</li>
<li>AI 통합: ADAS 및 자율 주행 기능을 위한 인공 지능(AI) 통합이 진행되고 있습니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[vector.resize()]]></title>
            <link>https://velog.io/@hyeon-kdh/vector.resize</link>
            <guid>https://velog.io/@hyeon-kdh/vector.resize</guid>
            <pubDate>Wed, 22 Nov 2023 10:55:04 GMT</pubDate>
            <description><![CDATA[<p>interrupted by signal 11: SIGSEGV
sementfault
메모리 오류
-&gt;
vector.resize()로 공간 할당하고 사용하자</p>
<p>vector&lt;vector&lt;pair&lt;int,int&gt;&gt;&gt; tree;
vector<bool> visited;</p>
<p>tree.resize(v+1)
visited.resize(v+1,false);</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CPP Switch 문자열 비교]]></title>
            <link>https://velog.io/@hyeon-kdh/CPP-Switch-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@hyeon-kdh/CPP-Switch-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Tue, 21 Nov 2023 03:48:01 GMT</pubDate>
            <description><![CDATA[<h1 id="cpp에서-문자열-비교">cpp에서 문자열 비교</h1>
<ul>
<li>tag : #algorithm, # C++<h2 id="개요">개요</h2>
</li>
<li>문제 정의 : C++에서는 switch에서 문자열을 사용할 수 없습니다</li>
<li>대안 : if문, hash 함수 <h2 id="본문">본문</h2>
</li>
<li>cpp에서 switch는 정수형, 열거형 타입과만 함께 사용할 수 있습니다.</li>
</ul>
<table>
<thead>
<tr>
<th>타입</th>
<th>크기 (바이트)</th>
<th>값 범위</th>
<th>예제</th>
</tr>
</thead>
<tbody><tr>
<td><code>char</code></td>
<td>1</td>
<td>-128 ~ 127 또는 0 ~ 255 (부호 있는/없는)</td>
<td><code>char ch = &#39;A&#39;;</code></td>
</tr>
<tr>
<td><code>int</code></td>
<td>4</td>
<td>-2147483648 ~ 2147483647</td>
<td><code>int num = 42;</code></td>
</tr>
<tr>
<td><code>unsigned int</code></td>
<td>4</td>
<td>0 ~ 4294967295</td>
<td><code>unsigned int num = 42U;</code></td>
</tr>
<tr>
<td><code>short</code></td>
<td>2</td>
<td>-32768 ~ 32767</td>
<td><code>short s = 100;</code></td>
</tr>
<tr>
<td><code>unsigned short</code></td>
<td>2</td>
<td>0 ~ 65535</td>
<td><code>unsigned short us = 1000U;</code></td>
</tr>
<tr>
<td><code>long</code></td>
<td>4 또는 8</td>
<td>플랫폼 종속적</td>
<td><code>long num = 12345L;</code></td>
</tr>
<tr>
<td><code>unsigned long</code></td>
<td>4 또는 8</td>
<td>플랫폼 종속적</td>
<td><code>unsigned long num = 12345UL;</code></td>
</tr>
<tr>
<td><code>enum</code></td>
<td>플랫폼 종속적</td>
<td>정의한 값들</td>
<td><code>enum Color { RED, GREEN, BLUE };</code></td>
</tr>
</tbody></table>
<p><code>enum</code> 타입은 정의한 값들을 열거하는 데 사용되며, 해당 값들은 기본적으로 0부터 시작하여 1씩 증가하는 값으로 초기화됩니다. 따라서 <code>enum Color</code>의 경우, <code>RED</code>는 0, <code>GREEN</code>은 1, <code>BLUE</code>는 2의 값을 갖게 됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[pyenv]]></title>
            <link>https://velog.io/@hyeon-kdh/pyenv</link>
            <guid>https://velog.io/@hyeon-kdh/pyenv</guid>
            <pubDate>Tue, 21 Nov 2023 01:05:14 GMT</pubDate>
            <description><![CDATA[<p>#여러 버전의 파이썬을 사용하는 법 </p>
<ul>
<li>pyenv <pre><code>sudo apt-get update
sudo apt-get install pyenv</code></pre></li>
</ul>
<pre><code>export PATH=&quot;$HOME/.pyenv/bin:$PATH&quot;
eval &quot;$(pyenv init -)&quot;
eval &quot;$(pyenv virtualenv-init -)&quot;</code></pre><pre><code>pyenv local 3.10</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[GIT ERROR : The upstream branch of your current branch does not match
the name of your current branch. ]]></title>
            <link>https://velog.io/@hyeon-kdh/GIT-ERROR-The-upstream-branch-of-your-current-branch-does-not-matchthe-name-of-your-current-branch</link>
            <guid>https://velog.io/@hyeon-kdh/GIT-ERROR-The-upstream-branch-of-your-current-branch-does-not-matchthe-name-of-your-current-branch</guid>
            <pubDate>Thu, 16 Nov 2023 08:17:00 GMT</pubDate>
            <description><![CDATA[<h1 id="error">ERROR</h1>
<pre><code class="language-shell">$ git push 
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:develop

To push to the branch of the same name on the remote, use

    git push origin HEAD
</code></pre>
<h1 id="solution">Solution</h1>
<h2 id="현재-브랜치의-upstream-설정-변경">현재 브랜치의 Upstream 설정 변경</h2>
<pre><code>git push -u origin HEAD</code></pre><ul>
<li>현재 브랜치(HEAD)를 원격 저장소(origin)의 동일한 이름의 브랜치로 푸시하고, 이를 기본(upstream) 브랜치로 설정합니다.</li>
</ul>
<pre><code>git branch --set-upstream-to=origin/&lt;브랜치 이름&gt;</code></pre><ul>
<li>현재 브랜치의 upstream을 명시적으로 설정할 수 있습니다</li>
</ul>
<h2 id="예시">예시</h2>
<ul>
<li>현재 브랜치가 feature이고 이를 원격의 feature 브랜치에 매핑하고 싶으면<pre><code class="language-shell">git branch --set-upstream-to=origin/feature feature</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[error : MXnet_libnccl.so.2]]></title>
            <link>https://velog.io/@hyeon-kdh/error-MXnetlibnccl.so.2</link>
            <guid>https://velog.io/@hyeon-kdh/error-MXnetlibnccl.so.2</guid>
            <pubDate>Thu, 09 Nov 2023 04:53:02 GMT</pubDate>
            <description><![CDATA[<h1 id="mxnet">MXnet</h1>
<pre><code class="language-python">import mxnet as mx</code></pre>
<p>오류 메세지</p>
<pre><code class="language-shell">OSError                                   Traceback (most recent call last)
Input In [16], in &lt;cell line: 2&gt;()
      1 # import os
----&gt; 2 import mxnet as mx

File ~/.local/lib/python3.9/site-packages/mxnet/__init__.py:23, in &lt;module&gt;
      1 #!/usr/bin/env python
      2 
      3 # Licensed to the Apache Software Foundation (ASF) under one
   (...)
     19 
     20 # coding: utf-8
     21 &quot;&quot;&quot;MXNet: a concise, fast and flexible framework for deep learning.&quot;&quot;&quot;
---&gt; 23 from .context import Context, current_context, cpu, gpu, cpu_pinned
     24 from . import engine, error
     25 from .base import MXNetError

File ~/.local/lib/python3.9/site-packages/mxnet/context.py:23, in &lt;module&gt;
     21 import warnings
     22 import ctypes
---&gt; 23 from .base import classproperty, with_metaclass, _MXClassPropertyMetaClass
     24 from .base import _LIB
     25 from .base import check_call

File ~/.local/lib/python3.9/site-packages/mxnet/base.py:356, in &lt;module&gt;
    354 __version__ = libinfo.__version__
    355 # library instance of mxnet
--&gt; 356 _LIB = _load_lib()
    358 # type definitions
    359 mx_int = ctypes.c_int

File ~/.local/lib/python3.9/site-packages/mxnet/base.py:347, in _load_lib()
    345     lib = ctypes.CDLL(lib_path[0], winmode=0x00000008)
    346 else:
--&gt; 347     lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_LOCAL)
    348 # DMatrix functions
    349 lib.MXGetLastError.restype = ctypes.c_char_p

File /opt/tljh/user/lib/python3.9/ctypes/__init__.py:382, in CDLL.__init__(self, name, mode, handle, use_errno, use_last_error, winmode)
    379 self._FuncPtr = _FuncPtr
    381 if handle is None:
--&gt; 382     self._handle = _dlopen(self._name, mode)
    383 else:
    384     self._handle = handle

OSError: libnccl.so.2: cannot open shared object file: No such file or directory</code></pre>
<p>sudo 명령어를 사용할 수 없는 환경에서 
dkpg 역시 불가능했고 다른 모델은 환경이었기 때문에 문제를 파악하기 어려웠습니다.</p>
<p>LLM에 물어봐도 도움이 되지 않는 대답 뿐이여서 문제를 해결하기가 더욱 어려웠습니다.</p>
<p>혹시 환경 자체에 문제가 생긴 것인지 테스트하고자 가상 환경에 torch를 install하였더니
문제가 해결되었습니다. &#39;</p>
<p>어떻게 해결된 것인지 궁금하여 bard에게 질문하였고 응답을 기록하였습니다.</p>
<pre><code>torch를 설치하기 전에 MXNet을 가져오려고 하면 MXNet이 NVIDIA GPU를 사용하기 위해 필요한 libnccl.so.2 공유 오브젝트 파일을 찾을 수 없습니다. 
이것이 OSError를 일으켰습니다.
torch를 설치하면 MXNet이 설치되어 있는지 감지합니다. 
torch는 MXNet이 libnccl.so.2 공유 오브젝트 파일을 필요로 한다는 것을 알고 있으므로 이 파일과 MXNet에 필요한 기타 누락된 라이브러리와 종속성을 자동으로 설치합니다.
torch를 설치한 후 MXNet을 다시 가져오려고 합니다. 
이번에는 MXNet이 libnccl.so.2 공유 오브젝트 파일과 기타 필요한 라이브러리를 찾을 수 있으므로 가져오기가 성공합니다.
요약하자면, torch 설치가 OSError를 해결한 이유는 MXNet이 제대로 작동하는 데 필요한 누락된 라이브러리와 종속성을 자동으로 설치했기 때문입니다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[import typing]]></title>
            <link>https://velog.io/@hyeon-kdh/import-typing</link>
            <guid>https://velog.io/@hyeon-kdh/import-typing</guid>
            <pubDate>Tue, 07 Nov 2023 01:45:27 GMT</pubDate>
            <description><![CDATA[<p>from typing import List, Dict</p>
<h2 id="용도">용도</h2>
<ul>
<li>코드의 명시성과 유지보수성</li>
</ul>
<h2 id="내장-모듈이-아닌-typing모듈의-list와-dict를-사용하는-이유">내장 모듈이 아닌 typing모듈의 List와 Dict를 사용하는 이유</h2>
<ul>
<li>파이썬 내장 list와 dict 자료형은 타입을 구체적으로 명시하지 않습니다. 예를 들어, 어떤 함수가 리스트를 반환한다고 할 때, 그 안에 어떤 타입의 원소가 들어가는지는 기본적인 list 자료형만으로는 알 수 없습니다. 이는 dict에도 마찬가지로 적용됩니다.</li>
<li>반면, typing 모듈의 List와 Dict 제네릭 타입은 이러한 자료형들의 내부 원소에 대한 타입 정보까지 명시할 수 있게 해줍니다. 예를 들어, List[int]는 정수들의 리스트임을, Dict[str, float]는 문자열을 키로 하고 부동소수점 숫자를 값으로 하는 딕셔너리임을 명확히 합니다.</li>
</ul>
<h2 id="버전">버전</h2>
<ul>
<li>typing 모듈은 파이썬 3.5 이상에서 사용할 수 있습니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ERROR  bash: basename: command not found]]></title>
            <link>https://velog.io/@hyeon-kdh/ERROR-bash-basename-command-not-found</link>
            <guid>https://velog.io/@hyeon-kdh/ERROR-bash-basename-command-not-found</guid>
            <pubDate>Tue, 07 Nov 2023 01:28:02 GMT</pubDate>
            <description><![CDATA[<p>git bash에서 ls, source 등 커맨드가 작동하지 않는 오류 
<a href="https://stackoverflow.com/questions/53971379/basename-used-in-subshell-returns-command-not-found">https://stackoverflow.com/questions/53971379/basename-used-in-subshell-returns-command-not-found</a></p>
<h2 id="문제">문제</h2>
<pre><code>bash: basename: command not found</code></pre><h2 id="basename">basename</h2>
<ul>
<li>UNIX 시스템에서 사용되는 명령어로, 주어진 파일 경로에서 디렉토리 부분을 제외하고 파일 이름만 출력합니다.</li>
<li>만약 확장자나 특정 접미사를 제거하고자 한다면, 다음과 같이 사용할 수 있습니다<pre><code class="language-bash">basename /usr/bin/basename.c .c</code></pre>
</li>
</ul>
<h2 id="해결">해결</h2>
<p>path 변경</p>
<pre><code>echo $PATH</code></pre><p>현재 환경변수 확인 후 </p>
<pre><code>PATH = </code></pre><p>PATH=/usr/local/bin : 사용자가 수동으로 설치한 SW의 실행 파일들을 찾을 수 있는 표준 디렉토리
/bin : 필수 시스템 명령어들이 위치하는 표준 디렉토리
/usr/bin : 시스템 기본 사용자 명령어들이 포함된 표준 디렉토리</p>
<p>PATH=/usr/local/bin:/bin:/usr/bin</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TypeError: 'Color' object is not subscriptable]]></title>
            <link>https://velog.io/@hyeon-kdh/TypeError-Color-object-is-not-subscriptable</link>
            <guid>https://velog.io/@hyeon-kdh/TypeError-Color-object-is-not-subscriptable</guid>
            <pubDate>Mon, 06 Nov 2023 08:03:31 GMT</pubDate>
            <description><![CDATA[<h1 id="typeerror-color-object-is-not-subscriptable">TypeError: &#39;Color&#39; object is not subscriptable</h1>
<ul>
<li>BaseModel을 상속받은 클래스의 인스턴스를 리스트나 딕셔너리와 같은 방식으로 인덱실 할 때 발생하는 에러</li>
<li>필드에 접근할 때 속성(attribute)접근 방식을 사용해야 합니다.</li>
</ul>
<h2 id="주요-원인">주요 원인</h2>
<ul>
<li>enumerate &lt; 리스트나 튜플과 같이 순서가 있는(iterable) 객체에 사용 가능합니다</li>
<li>인스턴스는 일반적으로 이러한 방식으로 반복할 수 없습니다.</li>
</ul>
<h2 id="해결법">해결법</h2>
<ul>
<li>&#39;Color&#39; 클래스의 각 필드에 직접 접근해야 합니다. </li>
<li>인스턴스의 속성으로 리스트를 만들고 enumerate를 사용할 수 있습니다 </li>
</ul>
<p>오류가 발생한 코드</p>
<pre><code class="language-python">def func0(item_colors : Color):
    for idx, i in enumerate(item_colors):
        pass

</code></pre>
<p>개선된 코드</p>
<pre><code class="language-python">def func1(item_colors: Color):
    colors = [item_colors.outer, item_colors.top, item_colors.bottom, item_colors.item]
    for idx, color_name in enumerate(colors):
        pass</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[python path problem]]></title>
            <link>https://velog.io/@hyeon-kdh/python-path-problem</link>
            <guid>https://velog.io/@hyeon-kdh/python-path-problem</guid>
            <pubDate>Mon, 06 Nov 2023 07:22:33 GMT</pubDate>
            <description><![CDATA[<h2 id="파이썬-경로-문제">파이썬 경로 문제</h2>
<h2 id="문제-정의">문제 정의</h2>
<pre><code class="language-shell">project/
│
├── main.py
└── a_dir/
    ├── __init__.py
    ├── a_run.py
    └── a_b.py
</code></pre>
<p>위와 같은 디렉토리 구조에서 
main.py를 통해 a_run.py를 호출하고 여기서 다시 a_b를 참조하는 경우
a_run 파일에서 다음과 같이 절대 경로로 명시하였다면 오류가 생길 수 있습니다.</p>
<pre><code class="language-python">from a_b import a_b_function</code></pre>
<h2 id="해결-방법">해결 방법</h2>
<p>이 경우 두 가지 방법으로 해결 가능합니다</p>
<h3 id="1-상대-경로-사용">1. 상대 경로 사용</h3>
<pre><code class="language-python">from .a_b import a_b_function</code></pre>
<p>위와 같이 경로에 .을 붙여 상대 경로로 사용합니다</p>
<h3 id="2-파이썬-스크립트가-실행될-때-syspath에-프로젝트의-루트-디렉토리-추가">2. 파이썬 스크립트가 실행될 때 &#39;sys.path&#39;에 프로젝트의 루트 디렉토리 추가</h3>
<ul>
<li>이 방법은 프로젝트 구조나 환경 설정에 따라 sys.path에 경로가 올바르게 설정되지 않아 
절대 경로로 모듈을 찾을 수 없는 상황을 해결합니다.</li>
</ul>
<pre><code class="language-python">import sys
import os

# 프로젝트의 루트 디렉토리 경로를 얻습니다.
root_path = os.path.dirname(os.path.abspath(&#39;main.py&#39;))

# sys.path에 프로젝트 루트를 추가합니다.
if root_path not in sys.path:
    sys.path.append(root_path)

# 이제 a_dir 패키지 내부의 모듈을 절대 경로로 임포트할 수 있습니다.
from a_dir.a_b import a_b_function</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[CBOR]]></title>
            <link>https://velog.io/@hyeon-kdh/CBOR</link>
            <guid>https://velog.io/@hyeon-kdh/CBOR</guid>
            <pubDate>Thu, 10 Aug 2023 01:11:30 GMT</pubDate>
            <description><![CDATA[<h1 id="cbor">CBOR</h1>
<ul>
<li>Concise Binary Object Representation</li>
<li>“The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.”</li>
<li>ref : <a href="https://cbor.io/">https://cbor.io/</a></li>
</ul>
<h2 id="개요">개요</h2>
<ul>
<li>C.Bormann이 작성한 JSON을 기반으로 하는 이진 데이터 직렬화(serialization) 형식</li>
<li>가독성을 포기하고 처리 및 전송속도를 중가시켰습니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[mqtt in python]]></title>
            <link>https://velog.io/@hyeon-kdh/mqtt-in-python</link>
            <guid>https://velog.io/@hyeon-kdh/mqtt-in-python</guid>
            <pubDate>Wed, 09 Aug 2023 06:52:41 GMT</pubDate>
            <description><![CDATA[<h1 id="pahomqtt">paho.mqtt</h1>
<p><a href="https://pypi.org/project/paho-mqtt/">https://pypi.org/project/paho-mqtt/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Class method]]></title>
            <link>https://velog.io/@hyeon-kdh/Class-method</link>
            <guid>https://velog.io/@hyeon-kdh/Class-method</guid>
            <pubDate>Wed, 09 Aug 2023 06:51:34 GMT</pubDate>
            <description><![CDATA[<p>클래스 메서드는 클래스 레벨에서 동작하며, 모든 인스턴스가 공유하는 동일한 동작을 수행할 때 사용됩니다</p>
<pre><code class="language-py">
class Shape:
    def __init__(self, sides):
        self.sides = sides

    @classmethod
    def get_class_info(cls):
        return f&quot;This is a {cls.__name__} with {cls.sides} sides.&quot;

class Triangle(Shape):
    def __init__(self):
        super().__init__(3)

class Square(Shape):
    def __init__(self):
        super().__init__(4)

print(Triangle.get_class_info())  # 출력: This is a Triangle with 3 sides.
print(Square.get_class_info())    # 출력: This is a Square with 4 sides.</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[@static method]]></title>
            <link>https://velog.io/@hyeon-kdh/static-method</link>
            <guid>https://velog.io/@hyeon-kdh/static-method</guid>
            <pubDate>Wed, 09 Aug 2023 06:47:47 GMT</pubDate>
            <description><![CDATA[<p>(ref : <a href="https://www.geeksforgeeks.org/class-method-vs-static-method-python/">geeksforgeeks</a>)</p>
<h1 id="class-method">Class method</h1>
  <details> 
        <summary>
        - 배경지식 
        </summary>
        <br>
        1. 파이썬에서 다른 함수 안에 함수 정의가 가능하다            <br>
        2. 파이썬에서 함수는 다른 함수에 매개 변수로 전달될 수 있다

<ul>
<li><p>함수 데코레이터</p>
   <br>
   Decorator는 기존 함수를 wrapping하여 기능을 앞뒤로 추가할 수 있습니다.<br>
   이를 통해 코드의 중복을 줄이고 재사용성을 높일 수 있습니다.

<br>
이해에 도움되는 링크 : https://wikidocs.net/160127

</details>

</li>
</ul>
<h2 id="classmethod-decorator">@classmethod decorator</h2>
<ul>
<li>함수가 정의된 이후 evaluated(표현식이나 코드가 실행되어 결과를 얻는 과정)되는 표현식인 built-in function decorator입니다.</li>
<li>인스턴스 매서드가 인스턴스를 받는 것처럼, 클래스 매서드는 implicit(암시적(값을 지정하지 않아도 컴파일러 등에서 자동으로 처리되는 경우)) 으로 첫번째 인자를 받습니다</li>
</ul>
<pre><code class="language-py">    class Car:
        def func(cls, arg1, arg2, ...):
            pass

    func: classmethod로 변환해야 하는 함수
    returns:classmethod로 변환된 함수
</code></pre>
<ul>
<li>object 인스턴스가 아닌 (class를 가리키는 class parameter)를 갖기 때문에 class의 state에 access할 수 있습니다.</li>
</ul>
<h1 id="static-method">Static method</h1>
<ul>
<li>Static method는 implicit first argument를 받지 않습니다.</li>
<li>Static method 역시 object of class가 아닌 class에 bound되어있습니다.</li>
<li>Static method는 class의 state에 access할 수 없습니다.</li>
<li>method는 클래스 안에 정의되어 있지만, 클래스나 인스턴스와는 별개로 독립적으로 동작합니다.(method는 클래스에 존재하는 것이 합리적이라는 이유로 클래스 안에 정의되어 있을 뿐입니다.)</li>
</ul>
<pre><code class="language-python">class Car(obj):
    @staticmethod
    def func(arg1, arg2, ...):
        pass
returns : 함수 func에 대한 staticmethod(즉 해당 함수를 정적 메서드로 변환하여 return)

</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[self.close() vs self.accept()]]></title>
            <link>https://velog.io/@hyeon-kdh/self.close-vs-self.accept</link>
            <guid>https://velog.io/@hyeon-kdh/self.close-vs-self.accept</guid>
            <pubDate>Wed, 09 Aug 2023 03:19:51 GMT</pubDate>
            <description><![CDATA[<h2 id="selfclose">self.close()</h2>
<p> 이 메서드는 다이얼로그 창을 강제로 닫습니다. 
다이얼로그가 열려 있는 상태에서 self.close()를 호출하면 창이 즉시 종료되며, 
<br>
이후에 어떤 작업도 실행되지 않습니다. 
이는 단순히 창을 닫을 때 사용됩니다.</p>
<h2 id="selfaccept">self.accept()</h2>
<p> 이 메서드는 다이얼로그 창을 &quot;수락&quot; 상태로 닫습니다. 
일반적으로 &quot;확인&quot;이나 &quot;적용&quot; 버튼과 연결되어 사용됩니다. 
<br>
self.accept()를 호출하면 다이얼로그가 닫히면서 
부모 창이나 호출한 코드에게 &quot;수락&quot;되었음을 알리는 신호가 전달됩니다. 
<br>
이후에 수행할 작업을 부모 창이나 호출한 코드에서 처리할 수 있습니다.</p>
<br>
## 결론
"확인"이나 "적용" 버튼을 누르고 다이얼로그를 닫을 때는 
self.accept()를 사용하여 부모 창에 결과를 전달하고 
추가 작업을 수행할 수 있습니다. <br>
그 외에 단순히 창을 닫아야 할 때는 self.close()를 사용합니다.]]></description>
        </item>
        <item>
            <title><![CDATA[self.th.quit() vs self.th.terminate()]]></title>
            <link>https://velog.io/@hyeon-kdh/self.th.quit-vs-self.th.terminate</link>
            <guid>https://velog.io/@hyeon-kdh/self.th.quit-vs-self.th.terminate</guid>
            <pubDate>Wed, 09 Aug 2023 01:28:27 GMT</pubDate>
            <description><![CDATA[<p>quit()-&gt; 이벤트 루프 종료 이후 스레드의 run() 메서드 종료</p>
<p>terminate()-&gt; 실행중인 작업을 중단하고 스레드 즉시 종료</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS SNS에서 지원하는 fan-out]]></title>
            <link>https://velog.io/@hyeon-kdh/AWS-SNS%EC%97%90%EC%84%9C-%EC%A7%80%EC%9B%90%ED%95%98%EB%8A%94-fan-out</link>
            <guid>https://velog.io/@hyeon-kdh/AWS-SNS%EC%97%90%EC%84%9C-%EC%A7%80%EC%9B%90%ED%95%98%EB%8A%94-fan-out</guid>
            <pubDate>Mon, 07 Aug 2023 05:06:34 GMT</pubDate>
            <description><![CDATA[<h1 id="aws-sns에서-지원하는-fan-outdata-fan-out">AWS SNS에서 지원하는 fan-out(data fan-out)</h1>
<ul>
<li>ref : <a href="https://docs.aws.amazon.com/ko_kr/sns/latest/dg/sns-common-scenarios.html">aws-fanout</a><h2 id="fan-out">fan-out</h2>
</li>
<li>하나의 source에서 Data를 병렬로 전송하는 과정</li>
</ul>
<h2 id="kinesis-data-firehose-전송-스트림으로-팬아웃">Kinesis Data Firehose 전송 스트림으로 팬아웃</h2>
<h2 id="lambda-함수로-팬아웃">Lambda 함수로 팬아웃</h2>
<h2 id="amazon-sqs-대기열로-팬아웃">Amazon SQS 대기열로 팬아웃</h2>
<h2 id="https-엔드포인트로-팬아웃">HTTP(S) 엔드포인트로 팬아웃</h2>
<h2 id="amazon-sns-및-aws-컴퓨팅-스토리지-데이터베이스-및-네트워킹-서비스를-사용한-이벤트-기반-컴퓨팅">Amazon SNS 및 AWS 컴퓨팅, 스토리지, 데이터베이스 및 네트워킹 서비스를 사용한 이벤트 기반 컴퓨팅</h2>
<h2 id="kinesis-data-firehose-전송-스트림으로-팬아웃-1">Kinesis Data Firehose 전송 스트림으로 팬아웃:</h2>
<h3 id="특징--실시간-스트리밍-데이터를-다양한-대상으로-전달할-수-있는-서비스">특징 : 실시간 스트리밍 데이터를 다양한 대상으로 전달할 수 있는 서비스.</h3>
<p>데이터를 수집하여 Amazon S3, Amazon Redshift, Amazon Elasticsearch 등으로 전송 가능.
스트리밍 처리와 함께 데이터 정리 및 변환 작업도 가능.</p>
<h3 id="장점--실시간-처리로-신속한-데이터-전달이-가능">장점 : 실시간 처리로 신속한 데이터 전달이 가능.</h3>
<p>스트림 처리 및 저장을 통해 유연한 데이터 유지 관리 가능.</p>
<h3 id="단점--aws-서비스로-제한되며-비용이-발생할-수-있음">단점 : AWS 서비스로 제한되며, 비용이 발생할 수 있음.</h3>
<p>복잡한 데이터 처리가 필요한 경우에는 Lambda 함수와 함께 사용해야 할 수도 있음.</p>
<h1 id="lambda-함수로-팬아웃-1">Lambda 함수로 팬아웃:</h1>
<h2 id="특징">특징:</h2>
<p>AWS Lambda를 사용하여 데이터를 처리하고 다양한 대상으로 분배하는 방식.
Lambda 함수는 이벤트 기반으로 트리거될 수 있으며, 처리 로직을 자유롭게 구현 가능.</p>
<h2 id="장점">장점:</h2>
<p>매우 유연한 방식으로, 다양한 데이터 처리 및 분배 작업 가능.
서버리스 아키텍처로 인프라 관리가 필요 없음.</p>
<h2 id="단점">단점:</h2>
<p>함수 실행에 따른 지연이 발생할 수 있으며, 빠른 실시간 처리가 요구되는 경우에는 고려해야 함.
복잡한 데이터 처리 작업은 함수 구현 및 관리의 어려움을 초래할 수 있음.</p>
<h1 id="amazon-sqs-대기열로-팬아웃-1">Amazon SQS 대기열로 팬아웃:</h1>
<h2 id="특징-1">특징:</h2>
<p>메시지 대기열 서비스로, 데이터를 대기열에 넣고 여러 컨슈머가 비동기적으로 처리할 수 있음.
각 메시지를 독립적으로 처리하므로 분산 시스템에 유리함.</p>
<h2 id="장점-1">장점:</h2>
<p>확장성이 높으며, 여러 컨슈머 간의 병렬 처리가 가능.
대기열에서 메시지 처리 실패 시 재시도가 가능하며, 신뢰성 있는 데이터 전달이 보장됨.</p>
<h2 id="단점-1">단점:</h2>
<p>실시간 처리에 제한이 있을 수 있으며, 처리량이 대기열의 처리량에 영향을 받을 수 있음.
메시지 처리 지연이 발생할 수 있음.</p>
<h1 id="https-엔드포인트로-팬아웃-1">HTTP(S) 엔드포인트로 팬아웃:</h1>
<h2 id="특징--http-또는-https를-통해-데이터를-다른-시스템-또는-엔드포인트로-전송하는-방식">특징 : HTTP 또는 HTTPS를 통해 데이터를 다른 시스템 또는 엔드포인트로 전송하는 방식.</h2>
<p>API 엔드포인트 또는 웹 서비스와 연결하여 데이터를 전달할 수 있음.</p>
<h2 id="장점--다른-시스템과의-통합이-용이하며-다양한-대상-시스템으로-데이터-전달-가능">장점 : 다른 시스템과의 통합이 용이하며, 다양한 대상 시스템으로 데이터 전달 가능.</h2>
<p>HTTP 프로토콜을 활용하므로 많은 언어 및 플랫폼에서 사용 가능.</p>
<h2 id="단점--데이터-처리-및-안전성을-추가로-고려해야-하며-일부-시스템에-따라-네트워크-문제-발생-가능성-있음">단점 : 데이터 처리 및 안전성을 추가로 고려해야 하며, 일부 시스템에 따라 네트워크 문제 발생 가능성 있음.</h2>
<p>대량 데이터 처리 시 성능 문제가 발생할 수 있음.
Amazon SNS 및 AWS 서비스를 사용한 이벤트 기반 컴퓨팅:</p>
<h2 id="특징--amazon-sns를-사용하여-이벤트를-발생시키고-해당-이벤트를-처리하기-위해-다양한-aws-서비스를-활용하는-방식">특징 : Amazon SNS를 사용하여 이벤트를 발생시키고, 해당 이벤트를 처리하기 위해 다양한 AWS 서비스를 활용하는 방식.</h2>
<p>이벤트에 대한 응답으로 Lambda 함수, AWS Step Functions, HTTP 엔드포인트 등을 활용 가능.</p>
<h2 id="장점--이벤트-기반-아키텍처로-다양한-서비스-간-연결과-처리가-용이함">장점 : 이벤트 기반 아키텍처로, 다양한 서비스 간 연결과 처리가 용이함.</h2>
<p>특정 이벤트에 대한 대응 및 처리를 유연하게 구현 가능.</p>
<h2 id="단점--서비스-간의-복잡한-통합과-관리가-필요할-수-있음">단점 : 서비스 간의 복잡한 통합과 관리가 필요할 수 있음.</h2>
<p>이벤트 발생 시간과 처리 시간 간의 딜레이가 발생할 수 있음.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQS visibility timeout]]></title>
            <link>https://velog.io/@hyeon-kdh/SQS-visibility-timeout</link>
            <guid>https://velog.io/@hyeon-kdh/SQS-visibility-timeout</guid>
            <pubDate>Mon, 07 Aug 2023 04:59:17 GMT</pubDate>
            <description><![CDATA[<h1 id="sqs-visibility-timeout">SQS visibility timeout</h1>
<ul>
<li><p>ref : <a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html">https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html</a></p>
</li>
<li><p>consumer가 queue에서 메시지를 수신하고 처리할 때 메시지는 대기열에 남아있습니다</p>
</li>
<li><p>메시지는 소비자가 수신한 후 대기열에서 삭제합니다</p>
</li>
<li><p>받은 직후 메시지는 대기열에 남아있습니다</p>
</li>
<li><p>SQS는 timeout 기간동안 다른 소비자들에게 보이지 않도록 만듭니다</p>
</li>
<li><p>이 기간동안 다른 소비자들은 해당 메시지에 접근할 수 없습니다</p>
</li>
<li><p>default 30초, 0~12시간까지 설정 가능합니다</p>
</li>
</ul>
<h4 id="주의">주의</h4>
<ul>
<li>visibility timeout은 메시지의 중복 수신을 완벽하게 방지하지는 못합니다. (특히 표준 queue에서)</li>
</ul>
<h2 id="inflight-messages">Inflight messages</h2>
<ul>
<li><p>SQS 메세지에는 아래의 세가지 기본 상태가 있습니다</p>
<ol>
<li>producer가 queue로 보냅니다</li>
<li>consumer가 queue에서 수신했습니다.</li>
<li>queue에서 삭제되었습니다</li>
</ol>
</li>
<li><p>Infilght messages(2-3 사이) : 메세지가 소비자에게 받아진 후 아직 삭제되지 않은 상태</p>
</li>
<li><p>Inflight message의 수에는 할당량이 있습니다 ( queue 유형에 따라 다릅니다 ) </p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS IoT Core Protocol]]></title>
            <link>https://velog.io/@hyeon-kdh/AWS-IoT-Core-Protocol</link>
            <guid>https://velog.io/@hyeon-kdh/AWS-IoT-Core-Protocol</guid>
            <pubDate>Mon, 07 Aug 2023 04:47:25 GMT</pubDate>
            <description><![CDATA[<h1 id="개요">개요</h1>
<h1 id="aws-iot--core">AWS IoT  Core</h1>
<pre><code>- IoT 기기를 다른 기기에 연결하는 클라우드 서비스를 제공합니다.</code></pre><ul>
<li>AWS IoT Core에서 지원하는 프로토콜들을 살펴보겠습니다</li>
</ul>
<h1 id="mqtt">MQTT</h1>
<ul>
<li>MQTT는 제약된 디바이스를 위해 설계된 경량의 메시징 프로토콜로서 광범위하게 사용되고 있습니다.</li>
<li>Publish-Subscribe 패턴을 기반으로 하며, client는 주제(topic)를 구독하거나 메시지를 발행할 수 있습니다</li>
<li>Pub와 Sub 사이의 Message Broker의 종류는 일반적으로 아래와 같습니다<ul>
<li>Rabbit MQ</li>
<li>VernaMQ</li>
<li>HiveMQ</li>
<li>mosquitto</li>
</ul>
</li>
</ul>
<h2 id="장점">장점</h2>
<ul>
<li>저전력 디바이스와 효율적인 통신이 가능합니다</li>
<li>경량 프로토콜이므로 오버헤드가 적고, 다른 기기 간 통신 역시 쉽게 가능합니다.</li>
<li>QoS(Quality of Service) 레벨을 통해 메세지의 신뢰성과 일관성을 보장합니다.</li>
</ul>
<h2 id="단점">단점</h2>
<ul>
<li>보안성이 낮아 암호화와 인증이 별도로 필요할 수 있습니다 (AWS 이용시 암호화 제공)<h3 id="대용량-데이터-전송에-아래와-같은-이유로-적합하지-않을-수-있습니다">대용량 데이터 전송에 아래와 같은 이유로 적합하지 않을 수 있습니다</h3>
<ul>
<li>메세지 크기 제한</li>
<li>데이터 유실<ul>
<li>QoS 레벨이 높을수록 처리량이 감소합니다</li>
<li>QoS 레벨이 낮을수록 유실될 확률이 증가합니다</li>
</ul>
</li>
<li>보안<ul>
<li>MQTT는 보안 기능을 갖추고 있지 않습니다, 별도의 암호화가 필요합니다    <h2 id="예시">예시</h2>
</li>
</ul>
</li>
</ul>
</li>
<li>스마트 팜에서 센서 데이터 수집 및 관리</li>
</ul>
<ul>
<li>AWS IoT의 MQTT 지원 ver : MQTT v3.1.1을 기반으로 몇가지 차이점이 있습니다</li>
</ul>
<ul>
<li>ref : (aws)[<a href="https://catalog.us-east-1.prod.workshops.aws/workshops/cdb1fb2e-9345-4c47-9831-026dad5870e6/ko-KR/4-iotcore%5D">https://catalog.us-east-1.prod.workshops.aws/workshops/cdb1fb2e-9345-4c47-9831-026dad5870e6/ko-KR/4-iotcore]</a></li>
</ul>
<h1 id="mqtt-over-wss">MQTT over WSS</h1>
<ul>
<li>MQTT 프로토콜을 웹 소켓 위에서 보안 연결을 사용하여 전송하는 방식입니다</li>
<li>webapps(in page) 내에서 직접 메세지를 sub/pub 하는 경우 websocket을 통해 MQTT를 실행하는 방식을 추천
(ref : (stackoverflow)[<a href="https://stackoverflow.com/questions/30624897/direct-mqtt-vs-mqtt-over-websocket%5D">https://stackoverflow.com/questions/30624897/direct-mqtt-vs-mqtt-over-websocket]</a>)<h2 id="장점-1">장점</h2>
</li>
<li>연결 유지를 위한 재접속 절차가 간소화됩니다</li>
<li>다수의 클라이언트간의 통신을 WSS와 비교하여 간편하게 활용할 수 있습니다</li>
<li>QoS 레벨을 활용하여 신뢰성 있는 데이터 전송을 간편하게 구현할 수 있습니다</li>
<li>웹 브라우저와 서버간의 실시간 통신에 널리 사용되는 웹 소켓 덕분에 웹 생태계와 쉽게 통합 가능합니다</li>
</ul>
<h2 id="단점-1">단점</h2>
<ul>
<li>MQTT보다 전력소모가 많습니다</li>
</ul>
<h1 id="https">HTTPS</h1>
<ul>
<li>Hypertext transfer Protocol</li>
<li>application layer protocol</li>
<li>클라이언트가 요청을 하기 위해 연결을 연 다음 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따릅니다</li>
</ul>
<p>(ref:(mozila_http)[<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP%5D">https://developer.mozilla.org/en-US/docs/Web/HTTP]</a>)</p>
<h1 id="lorawan">LoRaWAN</h1>
<ul>
<li>장거리 광역 네트워크</li>
<li>LPWAN(저전력 광역 네트워크)의 하나로, 장거리 통신 및 저전력 기능을 제공합니다</li>
</ul>
<h2 id="장점-2">장점</h2>
<ul>
<li>장거리, 저전력<h2 id="단점-2">단점</h2>
</li>
<li>제한된 대역폭 , 느린 데이터 전속 속도</li>
<li>실시간 통신이 어렵고 연결의 일관성이 보장되지 않을 수 있습니다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>