<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>luis_j.log</title>
        <link>https://velog.io/</link>
        <description>New life &amp; History</description>
        <lastBuildDate>Wed, 08 Jan 2025 08:19:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>luis_j.log</title>
            <url>https://velog.velcdn.com/images/luis_j/profile/1cffbe61-064a-4918-8381-73658bd90281/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. luis_j.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/luis_j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[교육 66~76일차 2차 프로젝트]]></title>
            <link>https://velog.io/@luis_j/%EA%B5%90%EC%9C%A1-6676%EC%9D%BC%EC%B0%A8-2%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-o8v89q9j</link>
            <guid>https://velog.io/@luis_j/%EA%B5%90%EC%9C%A1-6676%EC%9D%BC%EC%B0%A8-2%EC%B0%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-o8v89q9j</guid>
            <pubDate>Wed, 08 Jan 2025 08:19:26 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[65일차_CustomVision]]></title>
            <link>https://velog.io/@luis_j/65%EC%9D%BC%EC%B0%A8CustomVision</link>
            <guid>https://velog.io/@luis_j/65%EC%9D%BC%EC%B0%A8CustomVision</guid>
            <pubDate>Wed, 08 Jan 2025 08:19:00 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="custom-vision-활용-가이드">Custom Vision 활용 가이드</h2>
<h3 id="1-azure-cli로-리소스-그룹-관리하기">1. Azure CLI로 리소스 그룹 관리하기</h3>
<ul>
<li>GUI 삭제 방법: Azure Portal을 통해 손쉽게 리소스 그룹을 삭제.
CLI 삭제 추천 상황: 대량(100개 이상)의 리소스 그룹 삭제 - 시 효율적.</li>
<li>CLI 명령어를 활용하면 반복 작업을 줄일 수 있음.
CLI 사용 방법:</li>
</ul>
<pre><code class="language-bash">az group delete --name &lt;리소스 그룹 이름&gt; --yes --no-wait</code></pre>
<h3 id="cli-명령-자동화">CLI 명령 자동화</h3>
<p>리소스 그룹 목록을 파일에서 가져와 처리:</p>
<ol>
<li>Ctrl + H(macOS: Cmd + H)로 찾기 및 바꾸기.</li>
<li>정규식 활용:</li>
</ol>
<ul>
<li>찾기: ^(.*)$</li>
<li>바꾸기: call az group delete --name \1 --yes --no-wait</li>
</ul>
<ol start="3">
<li>모든 줄을 명령어로 변환.<h2 id="2-이미지-라벨링과-어노테이션">2. 이미지 라벨링과 어노테이션</h2>
<h3 id="주요-차이점">주요 차이점:</h3>
항목    | 라벨링(Labeling)    | 어노테이션(Annotation)
목적    | 클래스 분류 | 객체 위치 및 세부 정보 제공
복잡도    | 단순    | 복잡
응용 분야    | 기본 객체 인식    | 객체 감지, 자율 주행 등<h2 id="3-coco-데이터셋">3. COCO 데이터셋</h2>
</li>
</ol>
<ul>
<li>구성:<ul>
<li>33만+ 이미지, 150만+ 객체 인스턴스 포함.</li>
<li>객체 감지, 세그먼트, 키포인트 주석 지원.</li>
</ul>
</li>
<li>활용 사례:<ul>
<li>객체 감지, 이미지 캡셔닝, 파노픽 세그먼테이션 등.
JSON 포맷 주요 구성:
이미지, 어노테이션, 카테고리 정보 포함.</li>
</ul>
</li>
</ul>
<ol start="4">
<li>YOLO 모델과 어노테이션
특징:
한 번의 처리로 빠르고 정확한 객체 탐지.
정규화된 좌표(x_center, y_center, width, height) 사용.
YOLO 어노테이션 형식:
텍스트 파일에 클래스 ID, 중심 좌표, 박스 크기 기록.</li>
<li>어노테이션 포맷 비교
특징    COCO    YOLO    Pascal VOC
형식    JSON    TXT    XML
바운딩 박스    절대 좌표    정규화된 상대 좌표    절대 좌표
사용 사례    대규모 데이터셋    실시간 처리 모델    단순 프로젝트</li>
<li>Pylabel: 어노테이션 관리 라이브러리
지원 포맷: COCO, YOLO, Pascal VOC 등.
주요 기능:
포맷 변환, 필터링, 데이터 시각화.
사용자 정의 확장 가능.
Azure Custom Vision 연동 사례:</li>
</ol>
<p>COCO 형식으로 데이터 변환 후 Custom Vision에 업로드.</p>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[64일차_OpenCV와 Gradio를 활용한 실시간 얼굴 검출]]></title>
            <link>https://velog.io/@luis_j/64%EC%9D%BC%EC%B0%A8OpenCV%EC%99%80-Gradio%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%96%BC%EA%B5%B4-%EA%B2%80%EC%B6%9C</link>
            <guid>https://velog.io/@luis_j/64%EC%9D%BC%EC%B0%A8OpenCV%EC%99%80-Gradio%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%96%BC%EA%B5%B4-%EA%B2%80%EC%B6%9C</guid>
            <pubDate>Tue, 10 Dec 2024 07:23:30 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>OpenCV와 Gradio를 활용한 실시간 얼굴 검출</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="teachable-machine">Teachable Machine</h2>
<p>가위, 바위, 보 게임 만들기
쉽게 모델 생성 및 배포 가능</p>
<h2 id="1-opencv란">1. OpenCV란?</h2>
<p>OpenCV(Open Source Computer Vision)는 실시간 이미지 및 비디오 처리를 지원하는 오픈소스 라이브러리입니다. 다양한 프로그래밍 언어(C++, Python 등)를 지원하며 이미지 처리, 객체 검출, 머신 러닝 등 다양한 기능을 제공합니다.</p>
<h3 id="opencv의-주요-활용-분야">OpenCV의 주요 활용 분야</h3>
<ul>
<li>공장 제품 검사</li>
<li>의료 영상 처리</li>
<li>자율주행</li>
<li>CCTV 영상 분석</li>
<li>스포츠 분석</li>
</ul>
<h2 id="2-haar-cascade를-활용한-얼굴-검출">2. Haar Cascade를 활용한 얼굴 검출</h2>
<p>Haar Cascade는 객체(특히 얼굴)를 검출하기 위한 알고리즘으로, Viola와 Jones가 제안했습니다. OpenCV는 이 알고리즘을 구현하여 제공합니다.</p>
<h3 id="haar-cascade의-주요-특징">Haar Cascade의 주요 특징</h3>
<ul>
<li>Haar 특징: 밝기 차이를 기반으로 객체 검출</li>
<li>적분 이미지: 빠른 연산을 위한 변환된 이미지</li>
<li>Adaboost: 약한 분류기를 조합하여 강한 분류기로 구성</li>
<li>Cascade Classifier: 여러 단계로 구성된 효율적인 검출 구조</li>
</ul>
<h2 id="3-라이브러리-설치">3. 라이브러리 설치</h2>
<p>OpenCV와 Gradio를 설치합니다.</p>
<pre><code class="language-bash">pip install opencv-python gradio</code></pre>
<h2 id="4-얼굴-검출-코드">4. 얼굴 검출 코드</h2>
<p>아래는 OpenCV를 사용해 이미지를 처리하고 얼굴을 검출하는 코드입니다.</p>
<pre><code class="language-python">import cv2

# Haar Cascade 파일 로드
cascPath = cv2.data.haarcascades + &#39;haarcascade_frontalface_default.xml&#39;
faceCascade = cv2.CascadeClassifier(cascPath)

def detect_faces(image):
    # 이미지를 OpenCV 형식으로 변환
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 얼굴 검출
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.CASCADE_SCALE_IMAGE
    )

    # 검출된 얼굴에 사각형 그리기
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 이미지를 다시 RGB로 변환
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    return image</code></pre>
<h2 id="5-gradio를-활용한-실시간-얼굴-검출">5. Gradio를 활용한 실시간 얼굴 검출</h2>
<p>Gradio를 사용해 웹캠에서 실시간으로 얼굴을 검출하는 인터페이스를 구성합니다.</p>
<h3 id="gradio-코드">Gradio 코드</h3>
<pre><code class="language-python">import gradio as gr

# Gradio Blocks 인터페이스 구성
with gr.Blocks() as demo:
    with gr.Row():
        webcam_input = gr.Image(source=&quot;webcam&quot;, streaming=True)
        output_image = gr.Image(streaming=True)

    def update(image):
        return detect_faces(image)

    webcam_input.stream(fn=update, inputs=webcam_input, outputs=output_image)

demo.launch()</code></pre>
<h2 id="6-실행-결과">6. 실행 결과</h2>
<ol>
<li>위 코드를 실행하면 Gradio 인터페이스가 실행됩니다.</li>
<li>웹캠을 통해 얼굴을 검출하고 결과를 실시간으로 표시합니다.</li>
<li>검출된 얼굴에는 초록색 사각형이 표시됩니다.<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ol>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[63일차_Azure AI Vision: 고급 기능과 활용 사례]]></title>
            <link>https://velog.io/@luis_j/63%EC%9D%BC%EC%B0%A8Azure-AI-Vision-%EA%B3%A0%EA%B8%89-%EA%B8%B0%EB%8A%A5%EA%B3%BC-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80</link>
            <guid>https://velog.io/@luis_j/63%EC%9D%BC%EC%B0%A8Azure-AI-Vision-%EA%B3%A0%EA%B8%89-%EA%B8%B0%EB%8A%A5%EA%B3%BC-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80</guid>
            <pubDate>Mon, 09 Dec 2024 06:31:13 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure AI Vision은 이미지 분석과 비디오 처리에 강력한 기능을 제공합니다. </p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-이미지-검색-image-retrieval">1. 이미지 검색 (Image Retrieval)</h2>
<h3 id="①-기능-설명">① 기능 설명</h3>
<ul>
<li>이미지 검색 기능은 키워드 또는 다른 이미지와 유사한 이미지를 찾아주는 기술입니다.</li>
<li>벡터 유사성 검색을 통해 텍스트 기반 키워드 검색보다 더 정확한 결과를 제공합니다.<h3 id="②-주요-과정">② 주요 과정</h3>
</li>
</ul>
<ol>
<li>쿼리 입력: 텍스트나 이미지로 검색 조건을 설정합니다.</li>
<li>검색 수행: 관련 이미지들의 목록을 반환.</li>
<li>결과 확인: 검색된 이미지와 메타데이터를 제공합니다.<h3 id="③-활용-사례">③ 활용 사례</h3>
</li>
</ol>
<ul>
<li>사진 데이터베이스에서 특정 이미지 검색.</li>
<li>유사 제품 이미지 검색(예: 쇼핑몰).<h2 id="2-배경-제거-background-removal">2. 배경 제거 (Background Removal)</h2>
<h3 id="①-기능-설명-1">① 기능 설명</h3>
</li>
<li>이미지에서 전경 객체(사람, 사물 등)를 추출하여 배경을 제거하는 기능.</li>
<li>투명 배경 이미지를 생성해 객체를 다른 배경에 삽입 가능.<h3 id="②-특징">② 특징</h3>
얇고 세밀한 구조(머리카락 등)를 처리 가능.
사람, 동물, 차량 등 주요 객체를 정확히 분리.<h3 id="③-활용-사례-1">③ 활용 사례</h3>
</li>
<li>전자상거래용 제품 사진 편집.</li>
<li>프로필 사진에서 배경 제거.<h2 id="3-공간-분석-spatial-analysis">3. 공간 분석 (Spatial Analysis)</h2>
<h3 id="①-기능-설명-2">① 기능 설명</h3>
비디오 스트림을 분석하여 사람의 존재와 움직임을 감지.
Azure IoT Hub와 통합하여 실시간 데이터 분석 가능.<h3 id="②-주요-기능">② 주요 기능</h3>
</li>
</ul>
<ol>
<li>구역 내 인원 수 계산:<ul>
<li>특정 영역에 있는 사람의 수를 실시간으로 계산.</li>
</ul>
</li>
<li>출입 감지:
사람이 특정 구역에 출입하는 이벤트를 감지.</li>
<li>사회적 거리 모니터링:
사람들 간의 거리와 마스크 착용 여부를 확인.<h3 id="③-활용-사례-2">③ 활용 사례</h3>
</li>
</ol>
<ul>
<li>스마트 오피스: 사무실 내 인원 관리.</li>
<li>이벤트 공간 관리: 군중 밀집도 모니터링.<h2 id="4-비디오-검색-video-retrieval">4. 비디오 검색 (Video Retrieval)</h2>
<h3 id="①-기능-설명-3">① 기능 설명</h3>
비디오 콘텐츠를 분석하고 특정 프레임을 검색.
자연어 쿼리를 사용해 필요한 장면을 쉽게 찾을 수 있음.<h3 id="②-주요-기능-1">② 주요 기능</h3>
</li>
</ul>
<ol>
<li>타임스탬프 제공:<ul>
<li>검색 결과와 함께 관련 프레임의 타임스탬프를 반환.</li>
</ul>
</li>
<li>비디오 요약:<ul>
<li>주요 장면을 자동으로 추출하여 요약본 생성.<h3 id="③-활용-사례-3">③ 활용 사례</h3>
</li>
</ul>
</li>
</ol>
<ul>
<li>동영상 콘텐츠 관리: 특정 주제나 객체를 포함한 장면 검색.</li>
<li>보안 영상 분석: 사건 발생 시간대에 해당하는 비디오만 필터링.<h2 id="5-ocr-optical-character-recognition">5. OCR (Optical Character Recognition)</h2>
<h3 id="①-기능-설명-4">① 기능 설명</h3>
</li>
<li>이미지에서 텍스트를 인식하여 추출하는 기술.</li>
<li>인쇄 및 손글씨 텍스트 모두 지원.<h3 id="②-ocr-모델-비교">② OCR 모델 비교</h3>
</li>
</ul>
<table>
<thead>
<tr>
<th><strong>모델</strong></th>
<th><strong>특징</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>OCR for Images</strong></td>
<td>비문서 이미지(포스터, 표지판 등)에서 텍스트 추출.</td>
</tr>
<tr>
<td><strong>Document Read</strong></td>
<td>문서(스캔 파일, 보고서 등)에서 대량의 텍스트 추출.</td>
</tr>
</tbody></table>
<h3 id="③-활용-사례-4">③ 활용 사례</h3>
<ul>
<li>영수증, 청구서 등 비즈니스 문서 자동 처리.</li>
<li>제품 라벨의 텍스트 정보 추출.</li>
</ul>
<h2 id="6-개발-시-주의점">6. 개발 시 주의점</h2>
<h3 id="①-cors-설정">① CORS 설정</h3>
<ul>
<li>Vision Studio와 Blob Storage를 연동하려면 CORS(Cross-Origin Resource Sharing) 설정이 필요합니다.</li>
<li>설정 방법:<ul>
<li>Azure Portal &gt; Blob Storage &gt; 설정 &gt; 리소스 공유.</li>
<li>허용된 원본: <a href="https://portal.vision.cognitive.azure.com">https://portal.vision.cognitive.azure.com</a></li>
<li>허용된 메서드: GET.<h3 id="②-최적화-팁">② 최적화 팁</h3>
</li>
</ul>
</li>
</ul>
<ol>
<li>데이터 품질 관리:<ul>
<li>학습 데이터는 다양한 각도와 조명에서 준비.</li>
</ul>
</li>
<li>리소스 사용 최적화:<ul>
<li>비디오 분석 시 데이터 압축 및 필터링을 활용.</li>
</ul>
</li>
</ol>
<h2 id="7-활용-사례-요약">7. 활용 사례 요약</h2>
<p>Azure AI Vision의 다양한 기능은 다음과 같은 분야에서 활용될 수 있습니다</p>
<table>
<thead>
<tr>
<th><strong>분야</strong></th>
<th><strong>기능</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>전자상거래</strong></td>
<td>배경 제거, 이미지 검색.</td>
</tr>
<tr>
<td><strong>스마트 시티</strong></td>
<td>공간 분석, 비디오 검색.</td>
</tr>
<tr>
<td><strong>문서 처리 자동화</strong></td>
<td>OCR, 비디오 요약.</td>
</tr>
<tr>
<td><strong>보안 및 감시</strong></td>
<td>출입 감지, 사회적 거리 모니터링.</td>
</tr>
</tbody></table>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Vision은 이미지와 비디오 데이터를 효율적으로 분석하여 다양한 비즈니스 요구를 충족할 수 있는 강력한 도구입니다. 각 기능을 활용하면 운영 효율성을 크게 높일 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[62일차_AzureAIVison]]></title>
            <link>https://velog.io/@luis_j/62%EC%9D%BC%EC%B0%A8AzureAIVison</link>
            <guid>https://velog.io/@luis_j/62%EC%9D%BC%EC%B0%A8AzureAIVison</guid>
            <pubDate>Mon, 09 Dec 2024 06:09:30 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure AI Vision 서비스는 컴퓨터 비전 기술을 통해 이미지를 분석하고 특정 용도에 맞는 모델을 학습시키는 도구입니다. 이번 글에서는 사용자 지정 모델(Custom Models) 생성 과정과 활용 방법에 대해 구체적으로 알아보겠습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-사용자-지정-모델-생성-과정">1. 사용자 지정 모델 생성 과정</h2>
<p>Azure AI Vision의 사용자 지정 모델(Custom Models)은 이미지 분석 요구에 맞는 맞춤형 모델을 제공합니다. 다음은 사용자 지정 모델 생성의 주요 단계입니다.</p>
<h3 id="①-데이터-준비">① 데이터 준비</h3>
<h4 id="1-blob-storage-설정">1. Blob Storage 설정</h4>
<ul>
<li>Azure 포털에서 Blob Storage 계정을 생성합니다.</li>
<li>Blob Storage는 학습 이미지와 레이블 데이터를 저장하는 데 사용됩니다.</li>
</ul>
<h4 id="2-학습-데이터-업로드">2. 학습 데이터 업로드</h4>
<ul>
<li>다양한 환경(조명, 각도, 배경)에서 촬영된 학습 이미지를 업로드합니다.</li>
<li>학습 데이터는 최소한 각 카테고리당 5개의 이미지를 준비합니다.<h4 id="3-coco-파일-생성">3. COCO 파일 생성</h4>
</li>
<li>COCO(Common Objects in Context) 파일은 JSON 형식으로, 객체의 경계 상자와 태그 정보를 포함합니다.</li>
<li>Azure Machine Learning Studio를 통해 자동으로 생성하거나 직접 작성할 수 있습니다.</li>
</ul>
<h3 id="②-레이블링">② 레이블링</h3>
<ol>
<li>Azure Machine Learning Studio에서 데이터 레이블링<ul>
<li>학습 데이터셋에서 객체를 선택하여 경계 상자를 지정합니다.</li>
<li>예: &quot;포크&quot;라는 레이블을 이미지에서 포크 객체에 추가.</li>
</ul>
</li>
<li>레이블 범주 생성<ul>
<li>분석할 객체의 이름을 정의합니다. (예: 포크, 접시, 나이프)</li>
</ul>
</li>
</ol>
<h3 id="③-모델-학습">③ 모델 학습</h3>
<ol>
<li>Vision Studio에서 데이터셋 연결<ul>
<li>Blob Storage에 저장된 데이터셋을 선택하여 학습에 사용.</li>
</ul>
</li>
<li>학습 시간 설정<ul>
<li>최소 1시간 이상 학습이 필요하며, 데이터 양에 따라 시간이 증가합니다.</li>
</ul>
</li>
<li>모델 학습 시작<ul>
<li>Vision Studio에서 ‘Train a new model’을 클릭하여 학습을 시작합니다.</li>
</ul>
</li>
<li>모델 성능 평가<ul>
<li>학습이 완료되면 테스트 데이터로 모델 성능(정확도, 신뢰도)을 평가합니다.</li>
</ul>
</li>
</ol>
<h3 id="④-모델-배포-및-활용">④ 모델 배포 및 활용</h3>
<ol>
<li>Vision Studio에서 모델 테스트<ul>
<li>이미지 파일을 업로드하고 객체 감지 또는 캡션 생성을 테스트합니다.</li>
</ul>
</li>
<li>API 호출<ul>
<li>학습된 모델은 API로 배포할 수 있어 응용 프로그램에서 사용할 수 있습니다.</li>
</ul>
</li>
</ol>
<h2 id="2-coco-파일이란">2. COCO 파일이란?</h2>
<p>COCO 파일은 객체 탐지, 이미지 캡션 생성 등에 널리 사용되는 데이터 형식입니다.</p>
<p>구성 요소:</p>
<ul>
<li>이미지 정보: ID, 파일명, 이미지 크기 등.</li>
<li>어노테이션: 객체의 경계 상자 좌표와 레이블 정보.</li>
<li>카테고리: 분석할 객체의 분류 이름.
COCO 파일은 데이터 구조화와 학습 정확도 향상에 도움을 줍니다.</li>
</ul>
<h2 id="3-vision-studio-활용">3. Vision Studio 활용</h2>
<p>Azure AI Vision의 Vision Studio는 사용자 지정 모델을 쉽게 생성할 수 있는 웹 기반 도구입니다.</p>
<h3 id="①-blob-storage-연결">① Blob Storage 연결</h3>
<ul>
<li>Vision Studio에서 학습 데이터를 Blob Storage와 연결합니다.<h3 id="②-데이터셋-생성">② 데이터셋 생성</h3>
</li>
<li>데이터셋 이름과 목적을 지정하고 Blob Storage를 연결합니다.<h3 id="③-모델-학습-1">③ 모델 학습</h3>
</li>
<li>데이터셋을 선택한 후 학습을 시작합니다.</li>
<li>학습이 완료되면 성능 평가를 통해 모델의 정확도를 확인합니다.</li>
</ul>
<h2 id="4-활용-사례">4. 활용 사례</h2>
<h3 id="①-객체-감지">① 객체 감지</h3>
<ul>
<li>이미지 내 특정 객체(예: 포크, 컵)를 감지하고 경계 상자와 신뢰도 점수를 반환합니다.<h3 id="②-이미지-캡션-생성">② 이미지 캡션 생성</h3>
</li>
<li>예: &quot;테이블 위에 포크와 접시가 있습니다.&quot;와 같이 이미지의 주요 내용을 설명합니다.<h3 id="③-제품-인식">③ 제품 인식</h3>
</li>
<li>선반 위 제품의 유무를 감지하고 위치 정보를 제공합니다.<h3 id="④-배경-제거">④ 배경 제거</h3>
</li>
<li>이미지에서 객체를 배경과 분리하여 투명 배경 이미지를 생성합니다.</li>
</ul>
<h2 id="5-주요-특징">5. 주요 특징</h2>
<ol>
<li>Few-Shot Learning 지원<ul>
<li>적은 데이터로도 빠르게 학습 가능한 기술을 지원.</li>
</ul>
</li>
<li>다양한 활용성<ul>
<li>이미지 분석, 객체 감지, 제품 인식, 이미지 캡션 생성 등 여러 응용 분야에서 활용 가능.</li>
</ul>
</li>
<li>손쉬운 사용자 경험<ul>
<li>Vision Studio의 간단한 UI로 초보자도 쉽게 모델을 학습시킬 수 있습니다.</li>
</ul>
</li>
</ol>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Vision은 이미지 분석의 새로운 가능성을 열어주는 강력한 도구입니다. 데이터 준비부터 학습, 활용까지 모든 과정을 쉽게 수행할 수 있어 다양한 응용 분야에서 유용하게 사용됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[61일차_AI_Vision]]></title>
            <link>https://velog.io/@luis_j/61%EC%9D%BC%EC%B0%A8AIVision</link>
            <guid>https://velog.io/@luis_j/61%EC%9D%BC%EC%B0%A8AIVision</guid>
            <pubDate>Thu, 05 Dec 2024 03:48:14 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Microsoft Azure AI Vision 서비스는 이미지와 비디오 데이터를 효과적으로 분석하여 다양한 비즈니스 요구를 충족하는 데 유용한 도구입니다. 아래는 Azure AI Vision의 주요 특징과 활용 사례를 정리한 내용입니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="주요-특징">주요 특징</h2>
<h3 id="1-이미지-분석-image-analysis">1. 이미지 분석 (Image Analysis)</h3>
<ul>
<li>객체 탐지: 이미지에서 특정 객체의 위치와 이름을 식별.</li>
<li>OCR (Optical Character Recognition): 이미지를 기반으로 다양한 언어로 인쇄 및 필기된 텍스트 추출.</li>
<li>이미지 캡션 생성: 이미지의 콘텐츠를 간단한 문장으로 설명.</li>
<li>색 구성표 감지: 이미지의 색상 팔레트 분석.</li>
<li>배경 제거: 이미지의 전경 객체를 추출하여 배경을 제거.<h3 id="2-비디오-분석-video-analysis">2. 비디오 분석 (Video Analysis)</h3>
</li>
<li>사람의 존재 및 움직임 감지: 공간 내의 사람 수를 계산하거나 이동 감지.</li>
<li>사회적 거리두기 모니터링: 비디오 피드를 분석하여 거리를 유지하고 있는지 확인.</li>
<li>라인 교차 감지: 사람들이 특정 선을 넘을 때 이벤트 생성.<h3 id="3-맞춤형-모델-custom-models">3. 맞춤형 모델 (Custom Models)</h3>
</li>
<li>Custom Vision: 소량의 데이터로 특정 목적에 맞는 이미지 분류 및 객체 탐지 모델 제작.</li>
<li>Image Analysis 4.0: Florence 모델 기반으로 빠르고 정확한 데이터 분석.</li>
</ul>
<h3 id="코드-예제-이미지-태깅">코드 예제: 이미지 태깅</h3>
<p>Python SDK를 사용하여 이미지에서 태그를 추출하는 예제입니다:</p>
<pre><code class="language-python">from azure.ai.vision.imageanalysis import ImageAnalysisClient
from azure.core.credentials import AzureKeyCredential

endpoint = &quot;YOUR_ENDPOINT&quot;
key = &quot;YOUR_KEY&quot;

client = ImageAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))

image_path = &quot;sample.jpg&quot;
with open(image_path, &quot;rb&quot;) as f:
    image_data = f.read()

result = client.analyze(image_data=image_data, visual_features=[&quot;Tags&quot;])
for tag in result.tags:
    print(f&quot;Tag: {tag.name}, Confidence: {tag.confidence}&quot;)</code></pre>
<h2 id="활용-사례">활용 사례</h2>
<ol>
<li><p>소매업</p>
<ul>
<li>선반 위 제품 식별 및 진열 상태 분석.</li>
<li>플래노그램(제품 진열 지도) 일치 확인.</li>
</ul>
</li>
<li><p>보안</p>
<ul>
<li>실시간 출입 감지 및 경고 시스템.</li>
<li>비디오 기반 위험 요소 감지.</li>
</ul>
</li>
<li><p>디지털 전환</p>
<ul>
<li>문서에서 데이터를 자동 추출하여 디지털화.</li>
<li>배경 제거를 통해 전자 상거래용 제품 이미지 생성.<h2 id="azure-vision-studio-활용">Azure Vision Studio 활용</h2>
Azure Vision Studio를 사용하여 코딩 없이 서비스를 테스트하고 커스텀 모델을 제작할 수 있습니다:</li>
</ul>
</li>
<li><p>Vision Studio에 리소스 생성.</p>
</li>
<li><p>데이터를 업로드하여 사용자 지정 데이터셋 구성.</p>
</li>
<li><p>모델 학습 및 결과 테스트.</p>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ol>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Vision은 이미지와 비디오 데이터를 분석하여 비즈니스 프로세스를 최적화할 수 있는 강력한 도구입니다. 이를 활용해 운영 효율성과 데이터 기반 의사 결정을 강화해보세요.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[60일차_Document_Intelligence]]></title>
            <link>https://velog.io/@luis_j/60%EC%9D%BC%EC%B0%A8DocumentIntelligence</link>
            <guid>https://velog.io/@luis_j/60%EC%9D%BC%EC%B0%A8DocumentIntelligence</guid>
            <pubDate>Thu, 05 Dec 2024 03:44:09 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<h2 id="microsoft-azure-ai-services-및-document-intelligence-소개">Microsoft Azure AI Services 및 Document Intelligence 소개</h2>
<h3 id="1-azure-ai-개요">1. Azure AI 개요</h3>
<ul>
<li>Azure는 다양한 AI 기술을 지원하며, 통합 플랫폼을 통해 AI 모델의 개발, 배포, 관리가 가능합니다.</li>
<li>주요 기능:<ul>
<li>Azure AI Studio: 생성 AI 솔루션 배포를 위한 플랫폼.</li>
<li>Azure Machine Learning: 데이터 준비부터 모델 배포까지의 전체 라이프사이클 관리.<h3 id="2-document-intelligence-구-form-recognizer">2. Document Intelligence (구 Form Recognizer)</h3>
</li>
</ul>
</li>
<li>문서 처리 및 데이터 추출에 특화된 Azure AI 서비스.</li>
<li>주요 기능:<ul>
<li>문서 분석 모델: 텍스트와 문서 구조 추출.</li>
<li>사전 제작된 모델: 사용 사례에 맞춘 템플릿 제공.</li>
<li>맞춤형 모델: 레이블 데이터로 특정 데이터 학습 가능.<h3 id="3-주요-분석-기능">3. 주요 분석 기능</h3>
</li>
</ul>
</li>
<li>문서 및 양식에서 텍스트 추출.
다양한 언어 지원(한글 포함).
PDF, 이미지 파일 등 다양한 포맷 분석 가능.<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="azure-ai-document-intelligence-기능별-설명">Azure AI Document Intelligence 기능별 설명</h2>
<h3 id="1-사전-제작된-모델">1. 사전 제작된 모델</h3>
</li>
<li>Invoices: 청구서 정보 추출.</li>
<li>Receipts: 영수증 정보 추출.</li>
<li>Identity Documents: 여권, 면허증 등 신원 확인 문서 처리.<h3 id="2-맞춤형-모델">2. 맞춤형 모델</h3>
</li>
<li>Custom Extraction: 정적 및 혼합 문서 형식 지원.</li>
<li>Custom Classifier: 문서 유형 분류 및 적합한 모델 호출.<h3 id="3-document-intelligence-studio">3. Document Intelligence Studio</h3>
</li>
<li>코드 작성 없이 데이터 추출 및 모델 생성 가능.</li>
<li>주요 분석 포맷:<ul>
<li>PDF, Word, Excel 등.</li>
</ul>
</li>
</ul>
<h2 id="python-코드-예시">Python 코드 예시</h2>
<pre><code class="language-python">from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = &quot;YOUR_FORM_RECOGNIZER_ENDPOINT&quot;
key = &quot;YOUR_FORM_RECOGNIZER_KEY&quot;

client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))
form_url = &quot;YOUR_DOCUMENT_URL&quot;

poller = client.begin_analyze_document_from_url(&quot;prebuilt-invoice&quot;, form_url)
result = poller.result()

for document in result.documents:
    print(f&quot;Vendor Name: {document.fields.get(&#39;VendorName&#39;).value}&quot;)</code></pre>
<h2 id="활용-사례">활용 사례</h2>
<ol>
<li>기업 운영 개선: 문서 처리 자동화를 통해 데이터 관리 효율화.</li>
<li>맞춤형 솔루션: 특정 비즈니스 니즈에 맞는 데이터 추출.</li>
<li>환경 친화적 디지털 전환: 종이 문서를 디지털 데이터로 변환.</li>
</ol>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Document Intelligence는 문서 데이터를 효율적으로 처리하고 비즈니스 인사이트를 제공하는 강력한 도구입니다. 이를 활용해 운영 효율성과 데이터 기반 의사 결정을 강화할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[59일차_Azure AI Speech Services]]></title>
            <link>https://velog.io/@luis_j/59%EC%9D%BC%EC%B0%A8Azure-AI-Speech-Services</link>
            <guid>https://velog.io/@luis_j/59%EC%9D%BC%EC%B0%A8Azure-AI-Speech-Services</guid>
            <pubDate>Tue, 03 Dec 2024 08:46:07 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Microsoft의 Azure AI Speech Services는 강력한 음성 기반 애플리케이션을 구축하기 위한 다양한 기능을 제공합니다. 여기서는 Custom Neural Voice, Speech to Text Translation, Video Translation 세 가지 주요 기능을 소개합니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-custom-neural-voice-cnv">1. Custom Neural Voice (CNV)</h2>
<h3 id="개요">개요</h3>
<p>Custom Neural Voice는 텍스트 음성 변환(Text-to-Speech) 기술로, 브랜드 맞춤 음성을 만들 수 있는 기능입니다. 자연스러운 음성을 생성해 사용자 경험을 강화할 수 있습니다.</p>
<h3 id="주요-기능">주요 기능</h3>
<ul>
<li>Lite 버전: 데모 및 평가 목적으로 사용.<ul>
<li>20~50개의 발화로 모델 학습 가능.</li>
<li>Speech Studio에서 직접 스크립트를 녹음하여 훈련.</li>
</ul>
</li>
<li>Pro 버전: 비즈니스 애플리케이션용 고품질 음성 생성.<ul>
<li>전문 스튜디오 녹음 데이터 사용.</li>
<li>300~2000개의 발화 필요.<h3 id="사용-방법">사용 방법</h3>
</li>
</ul>
</li>
</ul>
<ol>
<li>Speech Studio에서 CNV Lite 프로젝트 생성.</li>
<li>텍스트 스크립트를 따라 음성 녹음.</li>
<li>최소 20개의 문장을 녹음 후 학습 시작.</li>
<li>학습 완료 후, 텍스트를 입력해 훈련된 음성을 테스트.</li>
</ol>
<p>참고: Pro 버전을 사용하려면 Microsoft의 승인이 필요합니다.</p>
<h2 id="2-speech-to-text-translation">2. Speech to Text Translation</h2>
<h3 id="개요-1">개요</h3>
<p>Azure Speech Services는 음성을 텍스트로 변환한 후, 다른 언어로 번역하는 기능을 제공합니다. 실시간 번역과 다양한 언어 지원이 특징입니다.</p>
<h3 id="주요-기능-1">주요 기능</h3>
<ul>
<li>실시간 번역:<ul>
<li>마이크 입력 음성을 실시간 텍스트로 변환.</li>
<li>텍스트를 설정한 대상 언어로 번역.</li>
</ul>
</li>
<li>다중 대상 언어 번역:<ul>
<li>입력 언어를 여러 언어로 동시 번역 가능.</li>
</ul>
</li>
<li>사용 사례:<ul>
<li>국제 회의 실시간 번역.</li>
<li>교육 및 언어 학습 자료 제작.<h3 id="사용-방법-1">사용 방법</h3>
</li>
</ul>
</li>
</ul>
<ol>
<li>Speech Studio에서 음성 번역 기능 선택.</li>
<li>입력 언어와 대상 언어 설정 (예: 영어 → 한국어).</li>
<li>오디오 파일 업로드 후 번역 시작.</li>
<li>번역 결과를 텍스트로 확인.</li>
</ol>
<h2 id="3-video-translation-preview">3. Video Translation (Preview)</h2>
<h3 id="개요-2">개요</h3>
<p>비디오 번역 기능은 동영상의 음성을 텍스트로 변환하고, 설정한 언어로 번역된 자막과 더빙을 추가합니다.</p>
<h3 id="주요-기능-2">주요 기능</h3>
<ul>
<li>지원 파일 크기 및 길이:<ul>
<li>500MB 이하, 60분 이하 동영상 지원.</li>
</ul>
</li>
<li>자동 자막 생성:<ul>
<li>원본 언어의 자막을 번역 언어로 생성.</li>
</ul>
</li>
<li>더빙:<ul>
<li>번역된 텍스트를 음성으로 변환하여 동영상에 추가.<h3 id="사용-방법-2">사용 방법</h3>
</li>
</ul>
</li>
</ul>
<ol>
<li>Speech Studio에서 비디오 번역 프로젝트 생성.</li>
<li>원본 비디오 업로드 및 원본 언어와 대상 언어 설정 (예: 스페인어 → 한국어).</li>
<li>번역 작업 실행.</li>
<li>결과 비디오에서 자막과 더빙 확인.<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ol>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Speech Services는 음성 데이터를 활용한 애플리케이션 제작에 최적화된 플랫폼을 제공합니다.</p>
<p>Custom Neural Voice를 활용한 브랜드 맞춤 음성 제작부터, Speech to Text Translation 및 Video Translation 기능을 통한 글로벌 콘텐츠 제작까지 폭넓은 가능성을 제시합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[58일차_Azure AI Speech 서비스: 음성 기술의 새로운 지평]]></title>
            <link>https://velog.io/@luis_j/58%EC%9D%BC%EC%B0%A8Azure-AI-Speech-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%9D%8C%EC%84%B1-%EA%B8%B0%EC%88%A0%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%A7%80%ED%8F%89</link>
            <guid>https://velog.io/@luis_j/58%EC%9D%BC%EC%B0%A8Azure-AI-Speech-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%9D%8C%EC%84%B1-%EA%B8%B0%EC%88%A0%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%A7%80%ED%8F%89</guid>
            <pubDate>Mon, 02 Dec 2024 02:40:13 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Microsoft Azure AI Speech 서비스는 음성 인식 및 합성 기술을 기반으로 다양한 애플리케이션을 지원합니다. 이 서비스는 텍스트를 음성으로 변환하거나 음성을 텍스트로 변환하는 등의 작업을 포함하며, 이를 통해 효율적이고 사용자 친화적인 경험을 제공합니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="주요-서비스-및-기능">주요 서비스 및 기능</h2>
<ol>
<li><p>음성을 텍스트로 변환 (Speech to Text)
실시간 및 배치 모드로 음성을 텍스트로 변환합니다.</p>
<ul>
<li>실시간 변환: 회의 내용 기록, 캡션 생성 등</li>
<li>배치 변환: 녹음된 파일 분석 및 텍스트화</li>
</ul>
</li>
<li><p>텍스트를 음성으로 변환 (Text to Speech)
사람처럼 자연스러운 음성을 합성하며, 기본 음성과 맞춤 음성을 지원합니다.</p>
<ul>
<li>Neural TTS: 억양, 속도, 볼륨 등을 세밀하게 조정 가능</li>
<li>SSML: 음성 합성을 제어하는 표준화된 마크업 언어</li>
</ul>
</li>
<li><p>음성 번역 (Speech Translation)
음성 데이터를 다국어로 번역하며, 입력 언어를 자동으로 감지하는 기능을 제공합니다.</p>
</li>
<li><p>화자 인식 (Speaker Recognition)
특정 화자의 신원을 확인하거나 식별하는 기술로 보안 및 개인화된 서비스에 활용됩니다.</p>
</li>
<li><p>발음 평가 (Pronunciation Assessment)
언어 학습자를 위한 발음 평가 기능으로, 학습자에게 실시간 피드백을 제공합니다.</p>
</li>
<li><p>맞춤형 모델 생성 (Custom Speech)
특정 도메인에 특화된 모델을 학습시켜 음성 인식 정확도를 향상시킵니다.</p>
</li>
</ol>
<h2 id="openai-whisper-모델의-도입">OpenAI Whisper 모델의 도입</h2>
<p>Azure AI Speech 서비스는 OpenAI의 Whisper 모델을 통합하여 대용량 오디오 파일 처리와 다국어 번역 기능을 강화했습니다. Whisper는 다양한 파일 포맷을 지원하며, 화자 분리와 같은 고급 기능도 제공합니다.</p>
<h2 id="speech-studio-및-활용-사례">Speech Studio 및 활용 사례</h2>
<p>Azure Speech Studio는 코딩 없이도 다양한 기능을 테스트할 수 있는 직관적인 인터페이스를 제공합니다. 사용자는 CLI, SDK, REST API와 같은 다양한 방법으로 Speech 서비스를 활용할 수 있습니다.</p>
<h2 id="활용-방법-및-설치-가이드">활용 방법 및 설치 가이드</h2>
<p>Azure Speech 서비스는 GUI, CLI, SDK, REST API 등을 통해 접근 가능합니다. 예를 들어:</p>
<ul>
<li>CLI 사용법<pre><code class="language-bash">spx recognize --file &lt;audio-file-path&gt;</code></pre>
</li>
<li>SDK 연동
다양한 프로그래밍 언어를 지원하며, Python 예제는 GitHub에서 확인할 수 있습니다.</li>
</ul>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure AI Speech 서비스는 최신 음성 기술을 활용해 기업과 개인이 보다 효과적으로 커뮤니케이션하고 데이터를 처리할 수 있도록 돕습니다. 이 서비스는 특히 음성 데이터 활용에 혁신을 가져오며, 다양한 산업군에서 응용 가능성을 넓히고 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[57일차_CustomTextClassification]]></title>
            <link>https://velog.io/@luis_j/57%EC%9D%BC%EC%B0%A8CustomTextClassification</link>
            <guid>https://velog.io/@luis_j/57%EC%9D%BC%EC%B0%A8CustomTextClassification</guid>
            <pubDate>Mon, 02 Dec 2024 02:33:51 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure Custom Text Classification은 특정 텍스트 데이터를 기반으로 맞춤형 텍스트 분류 모델을 생성하고 배포할 수 있는 강력한 AI 도구입니다. 아래는 실습에 필요한 주요 단계들을 정리한 글입니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-리소스-생성">1. 리소스 생성</h2>
<h3 id="11-리소스-그룹-생성">1.1 리소스 그룹 생성</h3>
<ol>
<li>Azure Portal에서 리소스 그룹을 생성합니다.</li>
</ol>
<ul>
<li>태그 정보는 선택 사항.<h3 id="12-리소스-만들기">1.2 리소스 만들기</h3>
</li>
</ul>
<ol>
<li>생성된 리소스 그룹에서 리소스를 생성합니다.</li>
<li>Marketplace에서 AI Services를 검색하고 OpenAI 로고가 있는 버전을 선택합니다.</li>
</ol>
<ul>
<li>지역: 리소스 그룹과 동일.</li>
<li>Pricing tier: Standard S0.</li>
</ul>
<ol start="3">
<li>리소스 생성 후 API Key와 Endpoint를 확인합니다.</li>
</ol>
<h2 id="2-데이터-준비">2. 데이터 준비</h2>
<h3 id="21-데이터셋-다운로드">2.1 데이터셋 다운로드</h3>
<ul>
<li>GitHub에서 실습 데이터를 다운로드:<ul>
<li>Custom Single Classification - WebOfScience.zip<h3 id="22-데이터-업로드">2.2 데이터 업로드</h3>
</li>
</ul>
</li>
</ul>
<ol>
<li>압축을 해제하여 데이터 확인:</li>
</ol>
<ul>
<li>JSON 파일 1개, TXT 파일 210개 포함.</li>
</ul>
<ol start="2">
<li>Azure Blob Storage에 업로드:</li>
</ol>
<ul>
<li>이너 이름: single-label-classification-demo (사용자 정의 가능).</li>
</ul>
<h2 id="3-프로젝트-생성-및-모델-학습">3. 프로젝트 생성 및 모델 학습</h2>
<h3 id="31-프로젝트-생성">3.1 프로젝트 생성</h3>
<ol>
<li>Language Studio에서 Custom Text Classification 선택.</li>
<li>Create new project:<ul>
<li>프로젝트 이름 및 설명 작성.</li>
<li>Primary Language: English (US).</li>
<li>업로드한 Blob Storage 데이터 연결.<h3 id="32-데이터-레이블링">3.2 데이터 레이블링</h3>
</li>
</ul>
</li>
</ol>
<ul>
<li>JSON 파일이 포함되어 있을 경우, 레이블링 과정은 생략 가능.</li>
<li>이미 준비된 데이터가 자동으로 로드됩니다.<h3 id="33-모델-학습">3.3 모델 학습</h3>
</li>
</ul>
<ol>
<li>학습 데이터와 테스트 데이터를 8:2 비율로 분리.</li>
<li>학습 모델 이름을 지정한 뒤 학습을 시작.</li>
<li>학습 완료 후 모델 성능을 평가:<ul>
<li>Micro F1, Precision, Recall.</li>
<li>Confusion Matrix를 통해 모델의 분류 성능 확인.<h2 id="4-모델-배포-및-테스트">4. 모델 배포 및 테스트</h2>
<h3 id="41-모델-배포">4.1 모델 배포</h3>
</li>
</ul>
</li>
<li>학습된 모델을 선택하여 배포.<ul>
<li>배포 이름과 지역 지정.</li>
</ul>
</li>
<li>배포 완료 후 Language Studio에서 배포 상태를 확인.<h3 id="42-모델-테스트">4.2 모델 테스트</h3>
</li>
<li>테스트 데이터 작성:<pre><code class="language-plaintext">The RISC-V instruction set architecture (ISA) has gained prominence due to its open-source nature and flexibility. In this study, we investigate recent enhancements in RISC-V architecture aimed at improving energy efficiency.</code></pre>
</li>
<li>배포된 모델을 테스트하여 결과 확인:</li>
</ol>
<ul>
<li>예: Electrical Engineering 카테고리가 도출됨.<h2 id="5-주요-설정-및-팁">5. 주요 설정 및 팁</h2>
<h3 id="51-데이터셋-관리">5.1 데이터셋 관리</h3>
</li>
<li>데이터셋 준비 시 각 텍스트 파일이 분류에 필요한 적절한 데이터를 포함하도록 구성.<h3 id="52-모델-성능-분석">5.2 모델 성능 분석</h3>
</li>
<li>Confusion Matrix 및 개별 엔티티 성능 확인:<ul>
<li>잘못 분류된 데이터 확인 및 조정.<h3 id="53-활용-사례">5.3 활용 사례</h3>
</li>
</ul>
</li>
<li>연구 논문 분류.</li>
<li>고객 리뷰의 긍정/부정 분류.</li>
<li>도메인별 맞춤형 데이터 분류.</li>
</ul>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure Custom Text Classification은 사용자의 요구에 맞는 맞춤형 텍스트 분류 모델을 손쉽게 생성하고 배포할 수 있는 강력한 도구입니다. 위 단계를 따라 실습을 진행하고, 성공적으로 모델을 구현해 보세요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[57일차_
Custom Named Entity Recognition (NER) 실습 가이드]]></title>
            <link>https://velog.io/@luis_j/57%EC%9D%BC%EC%B0%A8Custom-Named-Entity-Recognition-NER-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
            <guid>https://velog.io/@luis_j/57%EC%9D%BC%EC%B0%A8Custom-Named-Entity-Recognition-NER-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</guid>
            <pubDate>Fri, 29 Nov 2024 10:36:51 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure Custom NER은 특정 도메인 및 사용자 지정 엔터티를 식별하는 데 최적화된 AI 서비스입니다. 이 문서에서는 리소스 설정, 데이터 준비, 모델 학습 및 배포, 테스트 과정을 다룹니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-리소스-생성">1. 리소스 생성</h2>
<h3 id="11-리소스-그룹-생성">1.1 리소스 그룹 생성</h3>
<ol>
<li>Azure Portal에서 리소스 그룹을 생성합니다.</li>
</ol>
<ul>
<li>지역: Australia East 선택 (CLU 작업 필수 지역).</li>
<li>태그 정보는 선택 사항.<h3 id="12-리소스-만들기">1.2 리소스 만들기</h3>
</li>
</ul>
<ol>
<li>리소스 그룹에서 새 리소스를 생성합니다.</li>
<li>Marketplace에서 AI Services를 검색하고 OpenAI 로고가 있는 최신 버전을 선택합니다.</li>
</ol>
<ul>
<li>지역: 리소스 그룹과 동일.</li>
<li>Pricing tier: Standard S0.</li>
</ul>
<h2 id="2-데이터-준비">2. 데이터 준비</h2>
<h3 id="21-데이터-업로드">2.1 데이터 업로드</h3>
<ol>
<li>GitHub에서 실습 데이터를 다운로드:</li>
</ol>
<ul>
<li>Custom NER Loan Agreements 데이터셋</li>
</ul>
<ol start="2">
<li>데이터 압축 해제 후 Blob Storage에 업로드:</li>
</ol>
<ul>
<li>json 파일 1개, txt 파일 23개 (학습용 20개, 테스트용 3개).<h3 id="22-blob-storage-설정">2.2 Blob Storage 설정</h3>
</li>
</ul>
<ol>
<li>Azure Portal에서 생성된 리소스 그룹으로 이동.</li>
<li>Blob Storage 컨테이너 생성 후 데이터를 업로드.<h2 id="3-custom-ner-프로젝트-생성">3. Custom NER 프로젝트 생성</h2>
<h3 id="31-프로젝트-설정">3.1 프로젝트 설정</h3>
</li>
<li>Language Studio에서 Custom Named Entity Recognition을 선택.</li>
<li>새 프로젝트 생성:</li>
</ol>
<ul>
<li>프로젝트 이름과 설명 작성.</li>
<li>Primary Language: English (US).<h3 id="32-데이터-로딩">3.2 데이터 로딩</h3>
</li>
</ul>
<ol>
<li>Blob Storage 컨테이너에서 데이터 자동 연결 확인.</li>
<li>JSON 파일이 포함된 경우 Labeling 과정은 생략.<h2 id="4-모델-학습">4. 모델 학습</h2>
<h3 id="41-데이터-분할">4.1 데이터 분할</h3>
</li>
<li>데이터셋을 학습용(80%)과 테스트용(20%)으로 분리.</li>
<li>학습 모델 이름 지정 후 학습 시작.<h3 id="42-모델-평가">4.2 모델 평가</h3>
</li>
<li>모델 학습 후 성능 지표 확인:</li>
</ol>
<ul>
<li>Micro F1, Precision, Recall.</li>
<li>Confusion Matrix를 통해 오분류 확인.<h2 id="5-모델-배포">5. 모델 배포</h2>
<h3 id="51-배포-설정">5.1 배포 설정</h3>
</li>
</ul>
<ol>
<li>학습된 모델을 선택하여 배포 시작.</li>
</ol>
<ul>
<li>배포 이름 지정.</li>
</ul>
<ol start="2">
<li>배포 완료 후 Language Studio에서 확인.<h3 id="52-모델-테스트">5.2 모델 테스트</h3>
</li>
<li>GitHub의 테스트 데이터(3개) 중 하나를 선택.</li>
<li>Run the test로 결과 확인.</li>
<li>사용자 지정 엔터티 검색 결과를 확인:</li>
</ol>
<ul>
<li>예: &quot;Loan Agreement&quot;에서 채권자, 채무자 등의 정보 추출.<h2 id="6-주요-사례">6. 주요 사례</h2>
<h3 id="61-정보-추출">6.1 정보 추출</h3>
</li>
<li>법률 문서, 금융 서식 등에서 특정 정보를 자동으로 추출.<h3 id="62-지식-검색">6.2 지식 검색</h3>
</li>
<li>엔터티 기반으로 문서를 분류하거나 검색 성능을 강화.<h3 id="63-감사-및-컴플라이언스">6.3 감사 및 컴플라이언스</h3>
</li>
<li>긴 텍스트 파일에서 엔터티를 자동으로 검토하여 규정 준수.<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ul>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[56일차_
Custom Question Answering 실습 가이드]]></title>
            <link>https://velog.io/@luis_j/56%EC%9D%BC%EC%B0%A8Custom-Question-Answering-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
            <guid>https://velog.io/@luis_j/56%EC%9D%BC%EC%B0%A8Custom-Question-Answering-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</guid>
            <pubDate>Fri, 29 Nov 2024 10:25:03 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure Custom Question Answering은 대화형 AI 시스템을 구축하는 데 도움을 주는 강력한 도구입니다. 이 가이드는 리소스 설정, 지식 기반 구축, 그리고 배포 및 테스트 과정까지의 주요 단계를 설명합니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-리소스-생성">1. 리소스 생성</h2>
<h3 id="11-리소스-그룹-생성">1.1 리소스 그룹 생성</h3>
<p>Azure Portal에서 리소스 그룹을 생성합니다.
그룹 이름과 지역을 지정합니다.</p>
<h3 id="12-ai-services-리소스-생성">1.2 AI Services 리소스 생성</h3>
<p>Marketplace에서 AI Services를 검색합니다.
OpenAI 로고가 있는 최신 버전을 선택합니다.
리소스 이름, 지역, <strong>Pricing Tier (Standard S0)</strong>를 설정한 뒤 리소스를 생성합니다.</p>
<h2 id="2-language-studio-설정">2. Language Studio 설정</h2>
<h3 id="21-language-studio-접속">2.1 Language Studio 접속</h3>
<ol>
<li>생성된 리소스를 통해 Language Studio에 접속합니다.</li>
<li>Custom Question Answering을 선택하여 설정을 시작합니다.<h3 id="22-프로젝트-생성">2.2 프로젝트 생성</h3>
</li>
<li>새 프로젝트를 생성하고 언어를 지정합니다.</li>
</ol>
<ul>
<li>프로젝트별로 언어를 지정하거나 모든 리소스에 동일한 언어를 설정할 수 있습니다.</li>
</ul>
<ol start="2">
<li>기본 답변 메시지 설정:</li>
</ol>
<ul>
<li>질문에 대한 답을 제공할 수 없는 경우 반환할 기본 메시지를 설정합니다.</li>
<li>예: &quot;No answer found. Please contact administrator.&quot;</li>
</ul>
<h2 id="3-지식-기반-구축">3. 지식 기반 구축</h2>
<h3 id="31-데이터-소스-추가">3.1 데이터 소스 추가</h3>
<ol>
<li>지식 기반을 구축하기 위해 관련 데이터를 업로드합니다.</li>
</ol>
<ul>
<li>URL: 원격 리소스 주소.</li>
<li>파일 업로드: 로컬 문서를 업로드.</li>
<li>Chitchat 추가: 친근한 챗봇 응답을 위해 잡담 데이터를 포함.<h3 id="32-예제-url">3.2 예제 URL</h3>
</li>
<li>예제 URL: Surface Book User Guide<ul>
<li>파일 크기가 크므로 Standard Tier가 필요합니다.<h3 id="33-지식-기반-편집">3.3 지식 기반 편집</h3>
</li>
</ul>
</li>
<li>가져온 데이터를 기반으로 자동 생성된 답변을 수정하거나 보완합니다.<h2 id="4-테스트-및-배포">4. 테스트 및 배포</h2>
<h3 id="41-테스트">4.1 테스트</h3>
</li>
</ul>
<ol>
<li>Language Studio에서 챗봇 기능 테스트를 수행합니다.</li>
</ol>
<ul>
<li>화면 오른쪽 아래의 채팅창을 사용하여 질문 입력.</li>
<li>&quot;Short answer&quot;와 &quot;Long answer&quot; 옵션을 포함하여 응답 확인.<h3 id="42-배포">4.2 배포</h3>
</li>
</ul>
<ol>
<li>학습한 모델을 배포합니다.</li>
</ol>
<ul>
<li>배포 이름을 지정하고 지역을 설정합니다.</li>
</ul>
<ol start="2">
<li>Azure Portal에서 배포 완료 상태를 확인합니다.<h3 id="43-azure-bot-생성">4.3 Azure Bot 생성</h3>
</li>
<li>Language Studio에서 Azure Portal로 이동하여 Bot을 생성합니다.</li>
</ol>
<ul>
<li>App Service Plan을 설정하고 Language Resource Key를 입력합니다.</li>
</ul>
<ol start="2">
<li>배포가 완료되면 Azure Bot을 통해 테스트를 수행합니다.<h2 id="5-주요-설정-및-팁">5. 주요 설정 및 팁</h2>
<h3 id="51-데이터-레이블링">5.1 데이터 레이블링</h3>
</li>
</ol>
<ul>
<li>직접 데이터를 레이블링하거나, 레이블이 포함된 JSON 파일을 사용하면 학습 단계를 간소화할 수 있습니다.<h3 id="52-배포-상태-확인">5.2 배포 상태 확인</h3>
</li>
<li>배포 완료 후 Azure Portal에서 생성된 Bot의 상태를 확인하세요.</li>
<li>Language Studio와 Azure Bot에서 동일한 테스트를 수행하여 응답의 일관성을 검증합니다.<h3 id="53-모델-성능-평가">5.3 모델 성능 평가</h3>
</li>
<li>Language Studio에서 제공하는 Inspect 기능을 사용하여 답변의 신뢰도를 분석합니다.<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ul>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure Custom Question Answering은 사용자 질문에 대해 정확하고 유용한 답변을 제공하는 데 최적화된 도구입니다. 올바른 데이터 준비, 학습, 배포 과정을 통해 고품질의 대화형 AI 시스템을 구축할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[56일차_Azure Conversational Language Understanding (CLU) 실습 가이드]]></title>
            <link>https://velog.io/@luis_j/Temp-Title</link>
            <guid>https://velog.io/@luis_j/Temp-Title</guid>
            <pubDate>Fri, 29 Nov 2024 10:10:04 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>Azure Conversational Language Understanding(CLU)은 사용자의 대화 데이터를 분석하여 의도(Intent)와 엔티티(Entity)를 식별하는 AI 서비스입니다. 이 문서에서는 CLU를 설정, 학습, 배포하는 방법을 정리했습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="특정-분야에-맞춰서-특화된-답변을-하는-챗봇">특정 분야에 맞춰서 특화된 답변을 하는 챗봇</h2>
<p>여행사 등 특정 서비스에서 활용 기대</p>
<h3 id="리플릿에서-구현">리플릿에서 구현</h3>
<p><a href="https://replit.com/">https://replit.com/</a></p>
<h4 id="html-통해-생성">HTML 통해 생성</h4>
<p><img src="https://velog.velcdn.com/images/luis_j/post/fe40a422-62ee-4e49-ad17-ac911da7e589/image.png" alt=""></p>
<h2 id="1-리소스-생성-및-설정">1. 리소스 생성 및 설정</h2>
<h3 id="11-리소스-그룹-생성">1.1 리소스 그룹 생성</h3>
<h4 id="1-azure-portal에서-리소스-그룹을-생성합니다">1. Azure Portal에서 리소스 그룹을 생성합니다.</h4>
<ul>
<li>리소스 그룹 이름을 지정합니다.</li>
<li>지역을 선택합니다 (CLU 작업은 Australia East에서 가능합니다).</li>
</ul>
<h3 id="12-ai-서비스-리소스-생성">1.2 AI 서비스 리소스 생성</h3>
<ol>
<li>Marketplace에서 AI Services를 검색합니다.</li>
<li>OpenAI 로고가 포함된 최신 버전을 선택합니다.</li>
<li>리소스 이름, 지역, <strong>Pricing Tier (Standard S0)</strong>를 설정한 뒤 리소스를 생성합니다.</li>
</ol>
<h3 id="13-language-studio로-이동">1.3 Language Studio로 이동</h3>
<ol>
<li>생성된 리소스를 통해 Language Studio에 접속합니다.</li>
<li>Custom Conversational Language Understanding을 선택하여 설정을 시작합니다.</li>
</ol>
<h2 id="2-clu-프로젝트-생성-및-학습">2. CLU 프로젝트 생성 및 학습</h2>
<h3 id="21-프로젝트-생성">2.1 프로젝트 생성</h3>
<ol>
<li>Language Studio에서 Create new project를 선택합니다.</li>
<li>프로젝트 이름을 입력하고 데이터 언어를 설정합니다.<h3 id="22-데이터-업로드">2.2 데이터 업로드</h3>
</li>
<li>JSON 또는 텍스트 데이터를 업로드합니다.</li>
</ol>
<ul>
<li>GitHub 예제: EmailAppDemo.json</li>
</ul>
<ol start="2">
<li>데이터 레이블링(Schema Definition, Data Labeling) 단계를 완료하거나 이미 준비된 데이터를 사용할 수 있습니다.<h3 id="23-학습-실행">2.3 학습 실행</h3>
</li>
<li>모델 학습을 위해 다음 설정을 진행합니다:</li>
</ol>
<ul>
<li>학습 모델 이름 지정.</li>
<li>Standard Training(무료) 또는 Advanced Training(다국어 지원) 선택.</li>
<li>데이터 세트를 학습/테스트 용도로 분리.</li>
</ul>
<ol start="2">
<li>학습을 완료하고 모델 성능(Micro F1, Precision, Recall)을 확인합니다.</li>
</ol>
<h2 id="3-clu-모델-배포-및-테스트">3. CLU 모델 배포 및 테스트</h2>
<h3 id="31-모델-배포">3.1 모델 배포</h3>
<ol>
<li>학습된 모델을 배포합니다:</li>
</ol>
<ul>
<li>배포 이름을 지정합니다.</li>
<li>배포할 지역을 선택합니다.</li>
</ul>
<ol start="2">
<li>배포 상태를 확인합니다.<h3 id="32-모델-테스트">3.2 모델 테스트</h3>
</li>
<li>배포된 모델을 API 호출로 테스트합니다.</li>
<li>사용자의 입력 문장에서 의도와 엔티티를 분석합니다.</li>
</ol>
<h2 id="4-오류-해결-방법">4. 오류 해결 방법</h2>
<h3 id="41-cannot-find-published-project-오류">4.1 Cannot find published project 오류</h3>
<ul>
<li>오류 원인: 지정된 프로젝트 이름 또는 배포 이름이 일치하지 않음.</li>
<li>해결 방법:</li>
</ul>
<ol>
<li>Language Studio에서 프로젝트 이름과 배포 이름을 확인합니다.</li>
<li>API 호출 코드에서 올바른 이름을 설정합니다.<h3 id="42-input-documents-cannot-be-a-string">4.2 Input documents cannot be a string</h3>
</li>
</ol>
<ul>
<li>오류 원인: API가 문자열 대신 JSON 배열을 요구.</li>
<li>해결 방법:<pre><code class="language-json">{
  &quot;documents&quot;: [
      { &quot;id&quot;: &quot;1&quot;, &quot;text&quot;: &quot;문서 내용&quot; }
  ]
}</code></pre>
</li>
</ul>
<h2 id="5-python-api-호출-예제">5. Python API 호출 예제</h2>
<pre><code class="language-python">from azure.ai.textanalytics import TextAnalyticsClient
from azure.core.credentials import AzureKeyCredential

# 설정
endpoint = &quot;https://&lt;your-endpoint&gt;.cognitiveservices.azure.com/&quot;
key = &quot;&lt;your-key&gt;&quot;
project_name = &quot;ProjectName&quot;
deployment_name = &quot;DeploymentName&quot;

# 클라이언트 생성
client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

# 데이터 준비
documents = [{&quot;id&quot;: &quot;1&quot;, &quot;text&quot;: &quot;Sample text for analysis.&quot;}]

# 요청
poller = client.begin_single_label_classify(
    documents=documents,
    project_name=project_name,
    deployment_name=deployment_name
)

result = poller.result()
for doc in result:
    if doc.classifications:
        for classification in doc.classifications:
            print(f&quot;Category: {classification.category}, Confidence: {classification.confidence_score:.2f}&quot;)</code></pre>
<h2 id="6-모델-성능-평가">6. 모델 성능 평가</h2>
<h3 id="61-주요-지표">6.1 주요 지표</h3>
<ul>
<li>Micro F1 Score: 전체 모델의 정확도.</li>
<li>Precision: 올바른 예측 비율.</li>
<li>Recall: 실제 인스턴스를 올바르게 예측한 비율.<h3 id="62-성능-시각화">6.2 성능 시각화</h3>
Language Studio에서 모델의 <strong>의도(Intent)</strong>와 <strong>엔티티(Entity)</strong>별 성능 지표를 확인할 수 있습니다.</li>
</ul>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure Conversational Language Understanding은 대화 데이터를 분석하고 이해하는 데 강력한 도구입니다. 올바른 프로젝트와 배포 설정, 그리고 적절한 학습 데이터 준비를 통해 높은 정확도의 모델을 구현할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[55일차_AI_Language]]></title>
            <link>https://velog.io/@luis_j/55%EC%9D%BC%EC%B0%A8AILanguage</link>
            <guid>https://velog.io/@luis_j/55%EC%9D%BC%EC%B0%A8AILanguage</guid>
            <pubDate>Wed, 27 Nov 2024 11:14:10 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>인선미 강사님</p>
<h2 id="azure-ai-서비스란">Azure AI 서비스란?</h2>
<p>Azure AI 서비스는 클라우드 기반 서비스로, 다양한 AI 기능을 제공하여 정교하고 지능적인 애플리케이션을 개발할 수 있는 빌딩 블록입니다. 이를 활용하면 자연어 처리, 컴퓨터 비전, 의사결정 지원 등 여러 범주에 걸친 AI 작업을 수행할 수 있습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="자연어-처리nlp">자연어 처리(NLP)</h2>
<h3 id="정의">정의</h3>
<p>자연어 처리는 인간의 서면 및 음성 언어를 이해하고, 이를 기반으로 적절히 응답하는 AI 기술입니다. 이를 통해 텍스트 분석, 문서 요약, 브랜드/회사명 추출 등 다양한 작업을 수행할 수 있습니다.</p>
<h3 id="주요-활용-사례">주요 활용 사례</h3>
<ul>
<li>감정 분석: 소셜 미디어 피드의 감정을 검색하여 제품 마케팅에 활용.</li>
<li>문서 요약: 대량의 문서를 효율적으로 요약.</li>
<li>텍스트에서 주요 엔터티 추출: 브랜드 및 특정 회사명을 식별.</li>
</ul>
<h2 id="nlp-기술-및-프로세스">NLP 기술 및 프로세스</h2>
<h3 id="텍스트-분석">텍스트 분석</h3>
<p>구조화되지 않은 텍스트에서 유의미한 정보를 추출하기 위해 다음과 같은 기술이 사용됩니다:</p>
<ul>
<li>토큰화: 텍스트를 단어 단위로 분리하여 분석.</li>
<li>빈도 분석: 주요 단어와 주제를 파악.</li>
<li>텍스트 분류: 머신러닝 알고리즘을 통해 텍스트를 긍정/부정으로 분류.</li>
</ul>
<h3 id="텍스트-요약">텍스트 요약</h3>
<p>긴 텍스트 본문에서 주요 요점을 요약하여 정보의 핵심을 간결하게 전달합니다.</p>
<h2 id="azure-ai-서비스-활용-방법">Azure AI 서비스 활용 방법</h2>
<ol>
<li>리소스 생성: Azure 포털에서 AI 리소스를 설정.</li>
<li>엔드포인트 및 키 식별: REST API와 SDK를 활용해 서비스에 접근.</li>
<li>REST API 사용: HTTP 요청을 통해 데이터를 전송하고 결과를 JSON 형태로 반환.</li>
</ol>
<h2 id="주요-azure-ai-서비스">주요 Azure AI 서비스</h2>
<ul>
<li>Azure OpenAI: GPT-4 모델을 활용한 생성형 AI.</li>
<li>Azure Custom Vision: 이미지 분류 및 개체 탐지 지원.</li>
<li>Azure Cognitive Search: 문서에서 통찰력을 제공하는 검색 솔루션.</li>
<li>Azure Immersive Reader: 접근성을 높이는 읽기 솔루션.</li>
</ul>
<h2 id="주요-메서드">주요 메서드</h2>
<h3 id="1-authenticate_client">1. authenticate_client</h3>
<h4 id="역할">역할</h4>
<p>Azure Cognitive Services에 인증된 클라이언트를 생성합니다. 이후 다른 메서드에서 이 클라이언트를 사용해 텍스트 분석 작업을 수행합니다.</p>
<h4 id="코드">코드</h4>
<pre><code class="language-python">def authenticate_client():
    load_dotenv()  # 환경 변수(.env 파일) 불러오기
    ai_endpoint = os.getenv(&#39;AI_SERVICE_ENDPOINT&#39;)  # API 엔드포인트
    ai_key = os.getenv(&#39;AI_SERVICE_KEY&#39;)  # API 키
    ta_credential = AzureKeyCredential(ai_key)  # API 키로 인증 객체 생성
    return TextAnalyticsClient(endpoint=ai_endpoint, credential=ta_credential)  # 클라이언트 반환</code></pre>
<h4 id="입력">입력</h4>
<ul>
<li>.env 파일에 저장된 AI_SERVICE_ENDPOINT와 AI_SERVICE_KEY.<h4 id="출력">출력</h4>
</li>
<li>TextAnalyticsClient: 텍스트 분석 API와 통신할 수 있는 클라이언트 객체.<h3 id="2-analyze_text_files">2. analyze_text_files</h3>
<h4 id="역할-1">역할</h4>
지정된 폴더에서 텍스트 파일을 읽고, 텍스트 분석 메서드(감정 분석, 엔터티 추출 등)를 호출합니다.</li>
</ul>
<h4 id="코드-1">코드</h4>
<pre><code class="language-python">def analyze_text_files(client, folder_path):
    for file_name in os.listdir(folder_path):  # 폴더 내 파일 목록 반복
        file_path = os.path.join(folder_path, file_name)
        with open(file_path, encoding=&#39;utf8&#39;) as file:
            text = file.read()  # 파일 내용 읽기
        print(f&quot;Analyzing File: {file_name}\n{text}\n&quot;)
        detect_language_result = client.detect_language(documents=[text])[0]  # 언어 감지
        detected_language = detect_language_result.primary_language.iso6391_name  # 언어 코드 가져오기
        sentiment_analysis(client, text, detected_language)  # 감정 분석
        extract_entities(client, text, detected_language)  # 명명된 엔터티 추출
        extract_linked_entities(client, text, detected_language)  # 링크된 엔터티 추출
        extract_key_phrases(client, text, detected_language)  # 핵심 구 추출</code></pre>
<h4 id="입력-1">입력</h4>
<ul>
<li>client: 인증된 클라이언트 객체.</li>
<li>folder_path: 분석할 텍스트 파일이 있는 폴더 경로.<h4 id="출력-1">출력</h4>
</li>
<li>각 파일에서 수행된 분석 결과를 콘솔에 출력.<h3 id="3-sentiment_analysis">3. sentiment_analysis</h3>
<h4 id="역할-2">역할</h4>
텍스트의 감정을 분석하여 긍정, 중립, 부정 점수를 반환합니다.</li>
</ul>
<h4 id="코드-2">코드</h4>
<pre><code class="language-python">def sentiment_analysis(client, text, language):
    result = client.analyze_sentiment(
        documents=[{&#39;id&#39;: &#39;1&#39;, &#39;language&#39;: language, &#39;text&#39;: text}],
        show_opinion_mining=True
    )[0]
    print(f&quot;Document Sentiment: {result.sentiment}&quot;)
    print(&quot;Overall scores: positive={0:.2f}; neutral={1:.2f}; negative={2:.2f}&quot;.format(
        result.confidence_scores.positive,
        result.confidence_scores.neutral,
        result.confidence_scores.negative,
    ))</code></pre>
<h5 id="입력-2">입력</h5>
<ul>
<li>text: 감정을 분석할 텍스트.</li>
<li>language: 텍스트의 언어 코드(예: &quot;en&quot;은 영어, &quot;ko&quot;는 한국어).
출력
문서 전체의 감정(positive, neutral, negative).
긍정, 중립, 부정 점수.<h3 id="4-extract_entities">4. extract_entities</h3>
<h4 id="역할-3">역할</h4>
텍스트에서 장소, 사람, 조직 등의 엔터티를 추출합니다.</li>
</ul>
<h4 id="코드-3">코드</h4>
<pre><code class="language-python">Copy code
def extract_entities(client, text, language):
    result = client.recognize_entities(
        documents=[{&#39;id&#39;: &#39;1&#39;, &#39;language&#39;: language, &#39;text&#39;: text}]
    )[0]
    print(&quot;\nNamed Entities:&quot;)
    for entity in result.entities:
        print(f&quot;  Text: {entity.text}, Category: {entity.category}, Confidence Score: {entity.confidence_score}&quot;)</code></pre>
<h4 id="입력-3">입력</h4>
<ul>
<li>text: 엔터티를 추출할 텍스트.</li>
<li>language: 텍스트의 언어 코드.<h4 id="출력-2">출력</h4>
</li>
<li>텍스트에서 추출된 엔터티 정보:<ul>
<li>Text: 엔터티 텍스트(예: &quot;서울&quot;).</li>
<li>Category: 엔터티 카테고리(예: &quot;Location&quot;, &quot;Organization&quot;).</li>
<li>Confidence Score: 신뢰 점수.<h3 id="5-extract_linked_entities">5. extract_linked_entities</h3>
<h4 id="역할-4">역할</h4>
텍스트의 엔터티를 외부 데이터 소스(예: Wikipedia)와 연결합니다.</li>
</ul>
</li>
</ul>
<h4 id="코드-4">코드</h4>
<pre><code class="language-python">def extract_linked_entities(client, text, language):
    result = client.recognize_linked_entities(
        documents=[{&#39;id&#39;: &#39;1&#39;, &#39;language&#39;: language, &#39;text&#39;: text}]
    )[0]
    print(&quot;\nLinked Entities:&quot;)
    for entity in result.entities:
        print(f&quot;  Name: {entity.name}, Source: {entity.data_source}, URL: {entity.url}&quot;)
        for match in entity.matches:
            print(f&quot;    Match Text: {match.text}, Confidence Score: {match.confidence_score}&quot;)</code></pre>
<h4 id="입력-4">입력</h4>
<ul>
<li>text: 링크된 엔터티를 추출할 텍스트.</li>
<li>language: 텍스트의 언어 코드.<h4 id="출력-3">출력</h4>
</li>
<li>링크된 엔터티 정보:<ul>
<li>Name: 엔터티 이름(예: &quot;서울&quot;).</li>
<li>Source: 데이터 소스(예: Wikipedia).</li>
<li>URL: 엔터티에 대한 링크.<h3 id="6-extract_key_phrases">6. extract_key_phrases</h3>
<h4 id="역할-5">역할</h4>
텍스트에서 주요 구문(키워드)을 추출합니다.</li>
</ul>
</li>
</ul>
<h4 id="코드-5">코드</h4>
<pre><code class="language-python">def extract_key_phrases(client, text, language):
    result = client.extract_key_phrases(
        documents=[{&#39;id&#39;: &#39;1&#39;, &#39;language&#39;: language, &#39;text&#39;: text}]
    )[0]
    print(&quot;\nKey Phrases:&quot;)
    for phrase in result.key_phrases:
        print(f&quot;  {phrase}&quot;)</code></pre>
<h4 id="입력-5">입력</h4>
<ul>
<li>text: 핵심 구를 추출할 텍스트.</li>
<li>language: 텍스트의 언어 코드.<h4 id="출력-4">출력</h4>
</li>
<li>텍스트에서 추출된 주요 구문(키워드).
요약된 흐름</li>
</ul>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<ol>
<li>authenticate_client: 클라이언트를 생성합니다.</li>
<li>analyze_text_files: 폴더 내 모든 파일을 읽고, 각각의 텍스트에 대해 다음 메서드를 호출합니다:</li>
</ol>
<ul>
<li>sentiment_analysis: 텍스트의 감정을 분석.</li>
<li>extract_entities: 장소, 사람, 조직 등의 엔터티를 추출.</li>
<li>extract_linked_entities: 엔터티를 외부 데이터와 연결.</li>
<li>extract_key_phrases: 텍스트에서 주요 키워드를 추출.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[54일차. Azure OpenAI 및 AI Search 실습 가이드]]></title>
            <link>https://velog.io/@luis_j/54%EC%9D%BC%EC%B0%A8.-Azure-OpenAI-%EB%B0%8F-AI-Search-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
            <guid>https://velog.io/@luis_j/54%EC%9D%BC%EC%B0%A8.-Azure-OpenAI-%EB%B0%8F-AI-Search-%EC%8B%A4%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</guid>
            <pubDate>Tue, 26 Nov 2024 06:24:13 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<ol>
<li>원하는 데이터를 기반으로 LLM 모델을 생성할 수 있습니다.</li>
<li>인덱스, 인덱서, 의미 체계 설정하는 법을 소개합니다.</li>
<li>콘텐츠 차단하는 법을 소개합니다.</li>
</ol>
<h1 id="introduction">Introduction</h1>
<p>김수진 강사님
Azure OpenAI 활용 - 검색 증강 및 콘텐츠 필터
Azure OpenAI와 AI Search를 활용한 RAG 및 콘텐츠 필터</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-azure-portal-소개">1. Azure Portal 소개</h2>
<p>Azure Portal은 웹 기반의 통합 콘솔로, Azure 구독을 관리하고 필요한 리소스를 생성 및 배포할 수 있는 강력한 도구입니다.</p>
<p>주요 특징:</p>
<ul>
<li>간단한 웹앱부터 복잡한 클라우드 배포까지 구축 가능.</li>
<li>리소스 그룹 및 사용자 지정 대시보드 지원.</li>
<li>portal.azure.com에서 시작 가능.</li>
</ul>
<h2 id="2-리소스-그룹-생성">2. 리소스 그룹 생성</h2>
<p>리소스 그룹은 Azure에서 함께 사용하는 리소스를 관리하는 단위입니다.</p>
<p>생성 방법:</p>
<ol>
<li>Azure Portal로 이동 → &quot;리소스 그룹&quot; 클릭 → &quot;만들기&quot; 선택.</li>
<li>구독, 이름, 지역 입력 → &quot;검토 + 만들기&quot; 클릭.</li>
<li>생성 완료 후 검색 창에서 이름으로 검색 가능.</li>
</ol>
<h2 id="3-azure-ai-search를-사용한-데이터-검색">3. Azure AI Search를 사용한 데이터 검색</h2>
<p>Azure AI Search는 데이터를 구조화하고 검색 가능한 인덱스를 생성해 검색 품질을 향상시키는 서비스입니다.</p>
<p>주요 구성 요소:</p>
<ol>
<li>데이터 소스: Blob Storage, SQL 등 연결 가능한 데이터 저장소.</li>
<li>인덱스: 검색 필드를 정의.</li>
<li>인덱서: 데이터를 가져와 인덱스로 변환.</li>
</ol>
<h2 id="4-구성-단계">4. 구성 단계</h2>
<h3 id="41-데이터-소스-추가">4.1 데이터 소스 추가</h3>
<ol>
<li>Azure Blob Storage에 데이터를 업로드.</li>
<li>AI Search에서 데이터 원본으로 Blob Storage를 선택.</li>
</ol>
<h3 id="42-인덱스-생성">4.2 인덱스 생성</h3>
<p>검색 가능한 데이터의 구조를 정의합니다.</p>
<p>인덱스 JSON 예시:</p>
<pre><code class="language-json">{
  &quot;name&quot;: &quot;festival-index&quot;,
  &quot;fields&quot;: [
    { &quot;name&quot;: &quot;id&quot;, &quot;type&quot;: &quot;Edm.String&quot;, &quot;key&quot;: true },
    { &quot;name&quot;: &quot;festival_name&quot;, &quot;type&quot;: &quot;Edm.String&quot;, &quot;searchable&quot;: true },
    { &quot;name&quot;: &quot;venue&quot;, &quot;type&quot;: &quot;Edm.String&quot;, &quot;searchable&quot;: true },
    { &quot;name&quot;: &quot;latitude&quot;, &quot;type&quot;: &quot;Edm.Double&quot;, &quot;filterable&quot;: true },
    { &quot;name&quot;: &quot;longitude&quot;, &quot;type&quot;: &quot;Edm.Double&quot;, &quot;filterable&quot;: true }
  ]
}</code></pre>
<h3 id="43-인덱서-생성">4.3 인덱서 생성</h3>
<p>데이터 소스와 인덱스를 연결하여 데이터를 자동으로 인덱싱합니다.</p>
<p>인덱서 JSON 예시:</p>
<pre><code class="language-json">{
  &quot;name&quot;: &quot;festival-indexer&quot;,
  &quot;dataSourceName&quot;: &quot;&lt;YOUR_DATASOURCE_NAME&gt;&quot;,
  &quot;targetIndexName&quot;: &quot;festival-index&quot;,
  &quot;fieldMappings&quot;: [
    { &quot;sourceFieldName&quot;: &quot;Festival Name&quot;, &quot;targetFieldName&quot;: &quot;festival_name&quot; },
    { &quot;sourceFieldName&quot;: &quot;Venue&quot;, &quot;targetFieldName&quot;: &quot;venue&quot; }
  ]
}</code></pre>
<h3 id="44-의미-체계-설정-semantic-configuration">4.4 의미 체계 설정 (Semantic Configuration)</h3>
<p>검색 품질 향상을 위해 의미 체계를 적용합니다.</p>
<p>의미 체계 JSON 예시:</p>
<pre><code class="language-json">{
  &quot;name&quot;: &quot;festival-semantic&quot;,
  &quot;configurations&quot;: [
    {
      &quot;titleField&quot;: { &quot;fieldName&quot;: &quot;festival_name&quot; },
      &quot;contentFields&quot;: [
        { &quot;fieldName&quot;: &quot;venue&quot; }
      ],
      &quot;keywordFields&quot;: [
        { &quot;fieldName&quot;: &quot;festival_name&quot; },
        { &quot;fieldName&quot;: &quot;id&quot; }
      ]
    }
  ]
}</code></pre>
<h2 id="5-결과-확인-및-활용">5. 결과 확인 및 활용</h2>
<p>테스트: AI Search에서 데이터를 검색하고 결과를 확인.
배포: 검색 서비스 결과를 웹앱 형태로 배포하여 사용 가능.</p>
<h2 id="6-콘텐츠-필터링">6. 콘텐츠 필터링</h2>
<ul>
<li>Azure OpenAI의 기본 및 사용자 지정 콘텐츠 필터를 통해 부적절한 응답을 방지할 수 있습니다.</li>
<li>기능:<ul>
<li>안전한 콘텐츠 제공 (증오, 폭력, 자해 등 분류).</li>
<li>사용자 정의 설정으로 특정 단어 및 주제 필터링.</li>
</ul>
</li>
</ul>
<h2 id="7-책임-있는-ai-운영">7. 책임 있는 AI 운영</h2>
<ul>
<li>잠재적 피해 식별: 모델의 출력에서 발생할 수 있는 유해 콘텐츠를 분석.</li>
<li>피해 완화 단계:<ol>
<li>모델 선택 및 미세 조정.</li>
<li>안전 시스템 계층 적용.</li>
<li>프롬프트 최적화 및 Grounding Data 사용.</li>
<li>사용자 환경 개선.</li>
</ol>
</li>
</ul>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<p>원하는 데이터를 기반으로 LLM을 활용하는 법을 실습했습니다.
원하는 방향으로 LLM 을 활용할 수 있다는 점이 신선했습니다.</p>
<p>주변에서 AI 기술에 대한 이해보다도
AI 기술을 어떻게 활용할지에 대한 고민이 더 필요하다고 했던 조언들이 머리와 가슴으로 다가왔습니다.</p>
<h1 id="conlusion">Conlusion</h1>
<p>Azure OpenAI와 AI Search를 활용하면 고품질의 사용자 맞춤형 AI 검색 서비스를 구축할 수 있습니다. 이를 통해 기업 데이터를 효율적으로 활용하고, 더 나은 사용자 경험을 제공합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[53일차 : RAG]]></title>
            <link>https://velog.io/@luis_j/53%EC%9D%BC%EC%B0%A8-RAG</link>
            <guid>https://velog.io/@luis_j/53%EC%9D%BC%EC%B0%A8-RAG</guid>
            <pubDate>Mon, 25 Nov 2024 06:21:57 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<p>RAG (Retrieval-Augmented Generation)은 대규모 언어 모델(LLM)의 한계를 극복하기 위해 제안된 자연어 처리 기술입니다.</p>
<p>RAG는 LLM이 외부 데이터베이스를 활용하여 더욱 정확하고 맥락에 맞는 답변을 생성하도록 돕습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="rag-모델의-핵심-아이디어">RAG 모델의 핵심 아이디어</h2>
<p>RAG는 <strong>검색(Retrieval)</strong>과 <strong>생성(Generation)</strong>을 결합하여 대규모 언어 모델의 성능을 강화하는 접근 방식입니다. </p>
<p>RAG는 언어 모델이 특정 질문이나 요청에 대해 외부 데이터베이스나 문서에서 관련 정보를 검색하고 이를 활용해 더 정밀하고 맥락에 맞는 응답을 생성하도록 설계되었습니다.</p>
<h2 id="rag-모델의-작동-원리">RAG 모델의 작동 원리</h2>
<h3 id="retriever검색기">Retriever(검색기):</h3>
<p>입력된 질문에 대해 관련 문서를 검색.</p>
<ul>
<li>입력 문장(예: 질문)이 주어지면, 관련성이 높은 문서를 외부 데이터베이스(예: 위키피디아, 사전 구축한 문서 코퍼스 등)에서 검색합니다.</li>
<li>일반적으로 Dense Retrieval 모델(예: DPR, BM25)이 사용됩니다.</li>
</ul>
<h3 id="generator생성기">Generator(생성기):</h3>
<p>검색된 문서를 바탕으로 최종 답변을 생성.</p>
<ul>
<li>검색기로부터 검색된 문서들을 입력으로 받아, 질문에 대한 응답을 생성합니다.</li>
<li>주로 Seq2Seq 모델(예: BART, T5)이 사용됩니다.</li>
</ul>
<h2 id="rag-vs-미세-조정">RAG vs 미세 조정</h2>
<ul>
<li>미세 조정: 모델 자체를 특정 작업에 맞게 학습시키는 방식. 비용과 시간이 많이 소요됨.</li>
<li>RAG: 기존 모델을 학습시키지 않고 외부 데이터를 연결하여 빠르고 효율적인 결과 생성.</li>
</ul>
<h2 id="rag의-작동-방식">RAG의 작동 방식</h2>
<ol>
<li>질문 또는 요청이 주어지면, 검색기가 데이터베이스에서 관련성이 높은 문서들(top-K)를 검색합니다.</li>
<li>검색된 문서들은 생성기의 입력으로 전달됩니다.</li>
<li>생성기는 검색된 문서를 참고하여 질문에 대한 응답을 생성합니다.</li>
</ol>
<h2 id="rag-모델의-장점">RAG 모델의 장점</h2>
<ol>
<li>외부 지식 활용: 모델이 학습된 데이터 외에도 최신 데이터나 특정 도메인의 지식을 활용할 수 있습니다.</li>
<li>효율성: 대규모 언어 모델을 단독으로 사용할 때보다 작은 크기의 모델로도 높은 성능을 낼 수 있습니다.</li>
<li>투명성: 검색된 문서와 생성된 응답을 제공하므로, 응답의 출처를 확인할 수 있습니다.</li>
</ol>
<h2 id="rag-모델의-활용-사례">RAG 모델의 활용 사례</h2>
<ol>
<li><p>질문 답변 시스템 (Q&amp;A)
예: 의료 지식, 법률 정보 등 특정 도메인에서 사용자 질문에 답변.</p>
</li>
<li><p>문서 요약 및 생성
긴 문서를 기반으로 요약 생성.</p>
</li>
<li><p>지식 기반 챗봇
최신 정보를 제공하거나 특정 도메인에 최적화된 대화 시스템 개발.</p>
</li>
<li><p>제품 추천
사용자 피드백과 관련 문서를 검색하여 개인화된 제품 추천 제공.</p>
</li>
</ol>
<h2 id="rag-모델의-단점">RAG 모델의 단점</h2>
<ol>
<li>검색 정확도 의존: 검색기가 잘못된 문서를 선택하면, 생성기 역시 오류가 있는 응답을 생성할 가능성이 높습니다.</li>
<li>속도: 검색과 생성의 두 단계를 거치므로 처리 속도가 느릴 수 있습니다.</li>
<li>데이터베이스 구축: 관련성 높은 데이터베이스를 구축하고 유지하는 데 비용과 노력이 필요합니다.</li>
</ol>
<h2 id="azure-openai에서의-rag-활용">Azure OpenAI에서의 RAG 활용</h2>
<p>Azure OpenAI Service를 통해 RAG를 쉽게 구현할 수 있습니다.</p>
<ol>
<li>데이터 업로드: .txt, .pdf, .html 등 다양한 파일 형식 지원.</li>
<li>AI Search 연결: 데이터를 인덱싱해 효율적으로 검색.</li>
<li>API 활용: 외부 데이터와 함께 OpenAI API 호출 가능.</li>
</ol>
<h2 id="azure-openai로-시작하는-방법">Azure OpenAI로 시작하는 방법</h2>
<p>Azure OpenAI Studio 활용: 데이터 추가 및 설정.
Chat Playground: 사용자 지정 데이터를 참고해 응답 생성 실습.
API와 Visual Studio Code 연동: 코드 기반 응용 프로그램 개발.</p>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>RAG는 기존 언어 모델의 한계를 보완하고, Azure OpenAI의 기능과 결합해 강력한 검색 및 생성 시스템을 제공합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[52일차 : OpenAI를 활용한 코드 생성 및 개선]]></title>
            <link>https://velog.io/@luis_j/52%EC%9D%BC%EC%B0%A8-OpenAI%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%BD%94%EB%93%9C-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EA%B0%9C%EC%84%A0</link>
            <guid>https://velog.io/@luis_j/52%EC%9D%BC%EC%B0%A8-OpenAI%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%BD%94%EB%93%9C-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EA%B0%9C%EC%84%A0</guid>
            <pubDate>Fri, 22 Nov 2024 06:50:09 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<p>Open AI를 활용하면 자연어 기반으로도 쉽게 코드 생성이 가능하고, 코드의 수정과 리팩토리 쉽게 가능합니다.</p>
<h1 id="introduction">Introduction</h1>
<p>김수진 강사님</p>
<p>Azure OpenAI는 자연어를 기반으로 프로그래밍 코드를 생성하고, 기존 코드를 분석 및 개선하며, 개발 과정을 지원할 수 있는 강력한 도구입니다. 이를 활용하여 효율적인 개발 방법을 정리했습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-자연어에서-코드-생성">1. 자연어에서 코드 생성</h2>
<p>Codex 모델을 통해 GPT-4 등과 같은 모델에서 자연어로 코드를 작성 가능.
예시:
프롬프트: Write a function for binary search in Python.
결과: Python으로 작성된 이진 탐색 함수가 생성됩니다.</p>
<h2 id="2-주요-기능">2. 주요 기능</h2>
<h3 id="1-코딩-언어-변경">1) 코딩 언어 변경</h3>
<p>기존 코드를 다른 프로그래밍 언어로 변환 가능.
예시:
프롬프트: Convert this Python code to C#.</p>
<h3 id="2-코드-이해">2) 코드 이해</h3>
<p>익숙하지 않은 언어로 작성된 코드를 이해할 수 있도록 설명 요청 가능.
프롬프트: Could you explain what this code is doing?</p>
<h3 id="3-코드-완료-및-단위-테스트-작성">3) 코드 완료 및 단위 테스트 작성</h3>
<p>주석과 함수 이름만으로 코드의 나머지 부분을 완성.
단위 테스트를 자동으로 생성하여 코드 안정성 향상.
프롬프트: Write three unit tests for this function.</p>
<h3 id="4-버그-수정-및-성능-개선">4) 버그 수정 및 성능 개선</h3>
<p>코드의 오류를 식별하고 수정하며, 성능을 최적화.
프롬프트: Fix the bug in this function.</p>
<h3 id="5-코드-리팩토링">5) 코드 리팩토링</h3>
<p>가독성과 유지보수를 위해 코드 구조 개선.
예시:
중복 코드 제거, 함수 분리, 복잡한 조건문 단순화.</p>
<h2 id="3-실습-azure-openai로-코드-생성">3. 실습: Azure OpenAI로 코드 생성</h2>
<h3 id="1-실습-시나리오">1) 실습 시나리오</h3>
<ul>
<li>AI를 활용하여 코딩 작업을 효율화하는 소프트웨어 개발자의 역할.</li>
<li>코드 생성, 주석 추가, 리팩토링, 성능 개선 실습.<h3 id="2-실습-과정">2) 실습 과정</h3>
</li>
</ul>
<ol>
<li>Azure Portal에서 OpenAI 리소스 생성.</li>
<li>Azure OpenAI Studio에서 모델 배포 (gpt-3.5-turbo).</li>
<li>Chat Playground에서 프롬프트 입력 및 결과 확인.</li>
<li>Visual Studio Code와 GitHub 연동 후 코드 실습.</li>
</ol>
<h2 id="4-예제-코드">4. 예제 코드</h2>
<h3 id="python으로-주석-추가-요청">Python으로 주석 추가 요청</h3>
<pre><code class="language-python"># Prompt: Add comments to this function
def factorial(n):
    if n == 0:  # Base case: factorial of 0 is 1
        return 1
    return n * factorial(n - 1)  # Recursive case: n * (n-1)!</code></pre>
<h3 id="버그-수정-요청">버그 수정 요청</h3>
<pre><code class="language-python"># Prompt: Fix the bug in this function
def divide_numbers(a, b):
    try:
        result = a / b
        return result
    except ZeroDivisionError:
        return &quot;Cannot divide by zero.&quot;</code></pre>
<h2 id="5-이미지-생성-dall-e-활용">5. 이미지 생성: DALL-E 활용</h2>
<ul>
<li>DALL-E 모델을 사용해 자연어 기반으로 이미지를 생성 가능.</li>
<li>예시 프롬프트: Create an image of a squirrel riding a motorcycle.</li>
<li>Azure OpenAI Studio의 DALL-E Playground에서 이미지 생성 및 스타일 지정 가능.</li>
</ul>
<h2 id="6-rest-api-활용">6. REST API 활용</h2>
<p>REST API를 사용해 Azure OpenAI와 통신하며 이미지 또는 코드를 생성.
예제:</p>
<pre><code class="language-bash">curl -X POST https://&lt;endpoint&gt;/openai/deployments/&lt;deployment&gt;/completions \
    -H &quot;Content-Type: application/json&quot; \
    -H &quot;api-key: &lt;api_key&gt;&quot; \
    -d &#39;{&quot;prompt&quot;: &quot;Write a Python function for bubble sort.&quot;, &quot;max_tokens&quot;: 100}&#39;</code></pre>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<p>chatGPT를 주로 SQL 코드 수정시 사용한 경험은 있었지만
파이썬과 javascrpit, gradio 이번에 제대로 활용하게 됐습니다.</p>
<p>소감은 초반은 60<del>70%까지는 혁신적으로 빠르게 구현할 수 있지만, 마지막 10</del>20%를 채우기 위해서는 개인의 해당 언어 활용 역량이 뛰어나야함을 깨달았습니다.</p>
<p>해당 언어에 대한 기본지식이 있는 상황에서
원하는 목표가 구체화됐을 때
OpenAI를 활용한다면</p>
<p>기존과 비교불가의 역량을 갖게 됩니다.</p>
<h1 id="conlusion">Conlusion</h1>
<p>Azure OpenAI를 활용하면 코딩의 효율성을 크게 향상할 수 있습니다. 특히, 반복적인 작업을 줄이고 창의적이고 효율적인 코드 생성 및 개선을 지원합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[51일차 : 앱에서 프롬프트엔지니어링 구현_Azure Open AI 활용]]></title>
            <link>https://velog.io/@luis_j/51%EC%9D%BC%EC%B0%A8-%EC%95%B1%EC%97%90%EC%84%9C-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-%EA%B5%AC%ED%98%84Azure-Open-AI-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@luis_j/51%EC%9D%BC%EC%B0%A8-%EC%95%B1%EC%97%90%EC%84%9C-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-%EA%B5%AC%ED%98%84Azure-Open-AI-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Thu, 21 Nov 2024 05:59:20 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<p>프롬프트 수준에 따라 AI 답변의 품질이 달라집니다.
같은 재료와 도구를 누가 사용하느냐에 따라
결과물이 천지차이이듯, AI도 마찬가지입니다.</p>
<h1 id="introduction">Introduction</h1>
<p>프롬프트 엔지니어링은 AI 모델의 성능을 극대화하기 위한 핵심 기술입니다. Azure OpenAI와 함께 활용하는 방법을 정리했습니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="1-프롬프트-엔지니어링-이해">1. 프롬프트 엔지니어링 이해</h2>
<ul>
<li>프롬프트 엔지니어링이란?<ul>
<li>AI 모델이 원하는 결과를 생성하도록 프롬프트를 설계하고 최적화하는 과정.</li>
<li>명확하고 구체적인 프롬프트는 더 나은 응답을 제공합니다.</li>
</ul>
</li>
<li>중요성:<ul>
<li>프롬프트 품질에 따라 AI의 응답 품질이 크게 좌우됩니다.</li>
<li>관련성 높은 프롬프트는 모델의 편향을 줄이고 더 공정한 결과를 제공합니다.</li>
</ul>
</li>
</ul>
<h2 id="2-효과적인-프롬프트-작성">2. 효과적인 프롬프트 작성</h2>
<h3 id="명확한-지침-제공">명확한 지침 제공</h3>
<ul>
<li>모델이 정확한 응답을 생성하도록 구체적이고 명확한 요청 작성.</li>
<li>예시:<pre><code class="language-plaintext">&quot;새 물병의 주요 특징과 장점을 강조하여 마케팅용 제품 설명을 작성하세요.&quot;</code></pre>
<h3 id="섹션-표식-사용">섹션 표식 사용</h3>
</li>
<li>텍스트를 구조화하여 모델의 해석을 돕습니다.</li>
<li>예시:
```plaintext<h3 id="물병의-특징">물병의 특징</h3>
</li>
<li>재질: 스테인리스 스틸</li>
<li>용량: 500ml<pre><code>### 생각의 사슬
모델에서 최고 품질의 답변을 얻기 위해 프롬프트를 반복하고 개선하는 데 가장 적합합니다.
</code></pre></li>
</ul>
<p>모델이 응답을 형성하는데 사용된 이유와 단계를 알면 프롬프트를 분할 및 자세한 정보를 제공하거나 지침을 명확히 해야 하는 위치를 식별</p>
<p>일반적인 프롬프트 입력시 일반적인 응답이 나옵니다.
What sport is easiest to learn but hardest to master? </p>
<p>프롬프트를 입력하면 응답이 어떻게 결론에 도달했는지 구체적으로 명시합니다.
What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer </p>
<h2 id="3-콘텐츠-유형">3. 콘텐츠 유형</h2>
<ul>
<li>기본 콘텐츠: 모델이 작업을 수행하는 데 필요한 핵심 정보.<ul>
<li>예: 번역할 문장, 요약할 문서.</li>
</ul>
</li>
<li>지원 콘텐츠: 추가 정보를 제공하여 안전성과 정확도를 높임.<ul>
<li>예: 날짜, 사용자 이름, 환경설정.</li>
</ul>
</li>
<li>그라운딩 콘텐츠: 모델에 신뢰할 수 있는 정보를 제공합니다.<ul>
<li>예: 회사 FAQ, 최신 기사.</li>
</ul>
</li>
</ul>
<h2 id="4-모델-매개변수-조정">4. 모델 매개변수 조정</h2>
<ul>
<li>온도(Temperature): 모델의 응답 창의성을 제어.<ul>
<li>낮은 값(0.2): 논리적, 일관성 높은 응답.</li>
<li>높은 값(0.8): 창의적이고 다양한 응답.</li>
</ul>
</li>
<li>Top-p: 확률 기반으로 응답 범위를 조정.<ul>
<li>낮은 값(0.3): 확률 높은 단어에만 집중.</li>
<li>높은 값(0.9): 더 다양한 단어 포함.</li>
</ul>
</li>
</ul>
<h2 id="5-프롬프트-엔지니어링-기술">5. 프롬프트 엔지니어링 기술</h2>
<h3 id="퓨샷-러닝-few-shot-learning">퓨샷 러닝 (Few-shot Learning)</h3>
<ul>
<li>사용자 정의 예제를 통해 모델의 응답 패턴을 개선.</li>
<li>예시:<pre><code class="language-plaintext">&quot;다음 예제를 참고하여 주어진 문장을 요약하세요.&quot;
Example: 
Input: &quot;인공지능 기술은 다양한 산업에서 활용되고 있다.&quot;
Output: &quot;AI의 산업 활용.&quot;</code></pre>
<h3 id="복잡한-작업-나누기">복잡한 작업 나누기</h3>
</li>
<li>큰 작업을 여러 단계로 나누어 모델이 이해하기 쉽게 만듦.</li>
<li>예시:
```plaintext</li>
</ul>
<ol>
<li>물병의 주요 특징 정리.  </li>
<li>정리된 내용을 바탕으로 3문단 광고문 작성.<pre><code>### 시스템 메시지 활용
모델에 역할과 톤을 정의.
예시:
```plaintext
&quot;당신은 여행 가이드를 돕는 AI 비서입니다. 사용자에게 추천 여행지를 제공하세요.&quot;</code></pre><h2 id="6-실습-예시-azure-openai와-통합">6. 실습 예시: Azure OpenAI와 통합</h2>
코드 샘플<pre><code class="language-python">from openai import AzureOpenAI
import os
from dotenv import load_dotenv
</code></pre>
</li>
</ol>
<p>load_dotenv()
client = AzureOpenAI(
    endpoint=os.getenv(&quot;AZURE_OAI_ENDPOINT&quot;),
    api_key=os.getenv(&quot;AZURE_OAI_KEY&quot;)
)</p>
<p>prompt = &quot;새 물병의 주요 특징과 장점을 설명하는 마케팅 텍스트를 작성하세요.&quot;
response = client.Completions.create(
    deployment_id=&quot;gpt-3.5-turbo&quot;,
    prompt=prompt,
    max_tokens=100
)</p>
<p>print(response.choices[0].text)</p>
<p>```</p>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<p>구체화할수록, 프롬프트에서 가정을 구체적으로 부여할수록, 더 수준 높은 답변을 얻을 수 있습니다.</p>
<h1 id="conlusion">Conlusion</h1>
<ul>
<li>프롬프트 엔지니어링은 AI 모델의 성능과 응답 품질을 높이는 데 중요한 역할을 합니다.</li>
<li>명확하고 구조화된 프롬프트를 설계하고, 매개변수를 조정하여 최적의 결과를 도출하세요.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[50일차 : Azure_OpenAI, GPT-4o, 앱 통합]]></title>
            <link>https://velog.io/@luis_j/50%EC%9D%BC%EC%B0%A8-AzureOpenAI-GPT-4o-%EC%95%B1-%ED%86%B5%ED%95%A9</link>
            <guid>https://velog.io/@luis_j/50%EC%9D%BC%EC%B0%A8-AzureOpenAI-GPT-4o-%EC%95%B1-%ED%86%B5%ED%95%A9</guid>
            <pubDate>Wed, 20 Nov 2024 09:42:02 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<h1 id="introduction">Introduction</h1>
<ol>
<li>OPEN AI의 모델과 매개 변수, 4o에 관련해 정리했습니다.</li>
<li>Azure OpenAI를 활용하여 AI 기능을 애플리케이션에 통합하는 방법을 정리했습니다.</li>
<li>Python SDK와 REST API를 사용해 AI 기능을 쉽게 구현할 수 있습니다.<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="open-ai">Open AI</h2>
</li>
</ol>
<h3 id="모델-호출">모델 호출</h3>
<ol>
<li>REST API, Python, C# 또는 Studio 를 통해 배포된 모델에 대한 호출을 시작할 수 있습니다.</li>
<li>Azure OpenAI Studio의 플레이그라운드에서 모델 테스트<h3 id="매개-변수">매개 변수</h3>
</li>
<li>온도는 &quot;얼마나 창의적으로 생각할까?&quot;를 조정합니다.</li>
</ol>
<ul>
<li>낮으면: 차분하고 이성적</li>
<li>높으면: 창의적이고 변덕스러움</li>
</ul>
<ol start="2">
<li>상위 P는 &quot;확률이 낮은 단어는 제외할까?&quot;를 결정합니다.</li>
</ol>
<ul>
<li>낮으면: 선택지가 좁고 예측 가능</li>
<li>높으면: 선택지가 다양하고 유연</li>
</ul>
<h4 id="온도">온도</h4>
<p>임의성 제어
온도 낮추면 반복적 응답
온도 높이면 창의적 응답</p>
<ul>
<li><p>역할: 모델이 다음 단어를 예측할 때 확률 분포를 얼마나 다양하게 사용할지를 결정합니다.
값 범위: 0.0 ~ 1.0(또는 그 이상)</p>
<ul>
<li><p>낮은 값 (예: 0.2):</p>
<ul>
<li>더 결정적이고 논리적인 응답을 생성합니다.</li>
<li>모델은 가장 확률이 높은 단어를 주로 선택합니다.
예: 기술 문서 작성, 코드 생성 등에 적합.</li>
</ul>
</li>
<li><p>높은 값 (예: 0.8):</p>
<ul>
<li>창의적이고 다양성 있는 응답을 생성합니다.</li>
<li>확률이 낮은 단어도 선택될 가능성이 커집니다.
예: 스토리텔링, 시 쓰기 등에 적합.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="상위-p">상위 P</h3>
<p>상위 P를 낮추면 모델의 토큰 선택이 유사 토큰으로 좁혀집니다.
상위 P를 높이면 모델이 가능성이 높고 낮은 토큰 중에서 선택할 수 있습니다.
온도와 상위p를 동시에 조정하지 않습니다.</p>
<p>상위 P(Top-p, 또는 Nucleus Sampling)</p>
<ul>
<li>역할: 모델이 단어를 선택할 때 확률 순으로 상위 몇 퍼센트의 단어만 고려할지를 결정합니다.</li>
<li>값 범위: 0.0 ~ 1.0<ul>
<li>낮은 값 (예: 0.2):<ul>
<li>확률 상위 20%에 해당하는 단어만 선택 가능.</li>
<li>응답이 매우 제한적이고 집중적입니다.</li>
</ul>
</li>
<li>높은 값 (예: 0.9):
확률 상위 90%에 포함되는 단어 중에서 선택.
더 다양하고 창의적인 결과를 생성합니다.</li>
</ul>
</li>
</ul>
<h3 id="프롬프트-설계">프롬프트 설계</h3>
<p>간단한 프롬프트 : 검색 엔진과 유사한 수준의 응답
응답에서 원하는 내용에 대한 자세한 정보를 제공하는 프롬프트 : 구체적인 응답</p>
<h4 id="프롬프트-형식">프롬프트 형식</h4>
<ol>
<li>콘텐츠 분류</li>
<li>새 콘텐츠 생성</li>
<li>대화 유지</li>
<li>변환 (번역 및 기호 변환)</li>
<li>콘텐츠 요약</li>
<li>중단한 위치에서 다시 시작</li>
<li>사실적 응답 제공</li>
</ol>
<h2 id="gpt-4o">GPT-4o</h2>
<p>GPT-4o는 멀티모달 입력(텍스트, 이미지, 오디오 등)을 처리하여 AI 모델과의 상호작용 방식을 혁신적으로 바꾼 OpenAI의 차세대 모델입니다. 이 모델은 더욱 풍부하고 몰입감 있는 사용자 경험을 제공합니다.</p>
<h3 id="gpt-4o-주요-특징">GPT-4o 주요 특징</h3>
<ol>
<li>성능과 효율성</li>
</ol>
<ul>
<li>GPT-4 Turbo와 동등한 지능을 제공하며, 텍스트 처리 속도 2배, 비용은 절반 수준.</li>
<li>비전(이미지 처리) 성능과 비영어권 언어 지원에서 이전 모델 대비 최고 수준의 성과.</li>
</ul>
<ol start="2">
<li>확장된 기능</li>
</ol>
<ul>
<li>새로운 버전(2024-08-06)에서는 출력 크기가 4,096 → 16,384로 증가.</li>
<li>JSON 모드, 병렬 함수 호출, 구조화된 데이터 처리 등 추가 지원.</li>
</ul>
<ol start="3">
<li>비용 절감과 효율성</li>
</ol>
<ul>
<li>복잡한 쿼리를 효율적으로 처리하여 리소스 소모를 최소화하고 비용 절감을 실현.</li>
</ul>
<h3 id="gpt-4o-활용-사례">GPT-4o 활용 사례</h3>
<ol>
<li><p>고객 서비스
멀티모달 데이터를 활용하여 동적이고 포괄적인 고객 지원 제공.</p>
</li>
<li><p>고급 데이터 분석
다양한 데이터 유형을 분석하여 의사결정을 강화하고 심층적인 인사이트 도출.</p>
</li>
<li><p>콘텐츠 생성 및 혁신
매력적이고 다양한 콘텐츠 형식 생성으로 폭넓은 소비자 취향에 부합.</p>
</li>
</ol>
<h3 id="gpt-4o-새-버전의-주요-개선점">GPT-4o 새 버전의 주요 개선점</h3>
<p>2024-08-06 업데이트 기준</p>
<ul>
<li>기능 추가:<ul>
<li>텍스트 및 이미지 처리</li>
<li>JSON 모드</li>
<li>병렬 함수 호출</li>
<li>GPT-4 Turbo와 동등한 영어 텍스트 및 코딩 작업 성능</li>
</ul>
</li>
<li>비영어권 언어 및 비전 작업에서의 향상된 성능</li>
</ul>
<h3 id="gpt-4o-비즈니스-도입-가능성">GPT-4o 비즈니스 도입 가능성</h3>
<p>GPT-4o는 다양한 산업에서 활용될 수 있으며, Azure 플랫폼을 통해 프리뷰로 제공됩니다.</p>
<ul>
<li>더 나은 확장성: 효율적인 멀티모달 데이터 처리를 통해 비즈니스 성장에 기여.</li>
<li>유연한 AI 솔루션: GPT-4o를 활용해 고객 맞춤형 애플리케이션 개발 가능.</li>
</ul>
<h2 id="azure-openai와-앱-통합하기">Azure OpenAI와 앱 통합하기</h2>
<h3 id="1-azure-openai와-앱-통합의-장점">1. Azure OpenAI와 앱 통합의 장점</h3>
<ul>
<li>생성 AI를 통해 챗봇, 언어 모델 등의 기능을 추가.</li>
<li>GPT 시리즈 모델을 사용하여 텍스트 생성, 대화형 응답, 데이터 분석 등을 구현 가능.</li>
<li>REST API와 SDK를 활용한 효율적 개발 환경 제공.</li>
</ul>
<h3 id="2-azure-openai-통합-단계">2. Azure OpenAI 통합 단계</h3>
<h4 id="step-1-azure-openai-리소스-생성">Step 1: Azure OpenAI 리소스 생성</h4>
<ol>
<li>Azure Portal에서 리소스를 생성.</li>
<li>엔드포인트와 API 키를 확보.<ul>
<li>엔드포인트: <a href="https://sample.openai.azure.com/">https://sample.openai.azure.com/</a>
API 키: 리소스 창에서 확인 가능.<h4 id="step-2-python-sdk-설치-및-환경-설정">Step 2: Python SDK 설치 및 환경 설정</h4>
</li>
</ul>
</li>
</ol>
<ul>
<li><p>라이브러리 설치:</p>
<pre><code class="language-bash">pip install openai</code></pre>
</li>
<li><p>환경 변수 설정: .env 파일에 아래 정보를 저장.</p>
<pre><code class="language-makefile">YOUR_ENDPOINT_NAME = https://sample.openai.azure.com/
YOUR_API_KEY = &lt;your-api-key&gt;
YOUR_DEPLOYMENT_NAME = &lt;your-deployment-name&gt;</code></pre>
<h4 id="step-3-애플리케이션-코드-작성">Step 3: 애플리케이션 코드 작성</h4>
</li>
<li><p>Azure OpenAI SDK 사용 코드 예시:</p>
<pre><code class="language-python">from openai import AzureOpenAI
</code></pre>
</li>
</ul>
<h1 id="환경-변수-로드">환경 변수 로드</h1>
<p>import os
from dotenv import load_dotenv
load_dotenv()</p>
<h1 id="매개변수-설정">매개변수 설정</h1>
<p>endpoint = os.getenv(&quot;YOUR_ENDPOINT_NAME&quot;)
api_key = os.getenv(&quot;YOUR_API_KEY&quot;)
deployment_name = os.getenv(&quot;YOUR_DEPLOYMENT_NAME&quot;)</p>
<h1 id="클라이언트-초기화">클라이언트 초기화</h1>
<p>client = AzureOpenAI(api_key=api_key, endpoint=endpoint)</p>
<h1 id="프롬프트-요청">프롬프트 요청</h1>
<p>response = client.Completions.create(
    engine=deployment_name,
    prompt=&quot;Azure OpenAI의 주요 특징은?&quot;,
    max_tokens=50
)
print(response.choices[0].text.strip())</p>
<pre><code>
### 3. REST API 사용 방법
- REST API를 활용한 요청 예시:
```bash
curl -X POST https://&lt;YOUR_ENDPOINT_NAME&gt;/openai/deployments/&lt;YOUR_DEPLOYMENT_NAME&gt;/completions \
    -H &quot;Content-Type: application/json&quot; \
    -H &quot;api-key: &lt;YOUR_API_KEY&gt;&quot; \
    -d &#39;{
        &quot;prompt&quot;: &quot;Azure OpenAI의 주요 기능은?&quot;,
        &quot;max_tokens&quot;: 50
    }&#39;</code></pre><h3 id="4-visual-studio-code로-개발-환경-구성">4. Visual Studio Code로 개발 환경 구성</h3>
<ol>
<li>필수 도구 설치:</li>
</ol>
<ul>
<li>Visual Studio Code: 다운로드</li>
<li>Git: 다운로드</li>
</ul>
<ol start="2">
<li>GitHub 저장소 복제:</li>
</ol>
<ul>
<li>명령 팔레트에서 git clone 실행.</li>
<li>Azure OpenAI 샘플 코드 저장소: MicrosoftLearning/mslearn-openai.</li>
</ul>
<ol start="3">
<li>SDK 설치 및 실행:</li>
</ol>
<ul>
<li>Python SDK 설치:<pre><code class="language-bash">pip install openai==1.13.3</code></pre>
</li>
<li>.env 파일 수정 후 저장.</li>
<li>앱 실행:<pre><code class="language-bash">python app.py</code></pre>
</li>
</ul>
<h3 id="5-통합-완료-후-테스트">5. 통합 완료 후 테스트</h3>
<ul>
<li>앱 테스트: 대화형 응답을 확인하고, 필요한 경우 프롬프트를 수정.</li>
<li>리소스 관리: 사용 완료 후 Azure Portal에서 리소스를 정리.<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
</li>
</ul>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<h1 id="conlusion">Conlusion</h1>
<p>Azure OpenAI를 앱에 통합하면 복잡한 AI 기능을 간단히 구현할 수 있습니다. 이를 통해 사용자는 고도화된 서비스를 손쉽게 구축할 수 있습니다. 🚀</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[50일차 : JavaScript (함수,이벤트,웹스토리지,JSON)]]></title>
            <link>https://velog.io/@luis_j/50%EC%9D%BC%EC%B0%A8-JavaScript%ED%95%A8%EC%88%98%EC%9D%B4%EB%B2%A4%ED%8A%B8</link>
            <guid>https://velog.io/@luis_j/50%EC%9D%BC%EC%B0%A8-JavaScript%ED%95%A8%EC%88%98%EC%9D%B4%EB%B2%A4%ED%8A%B8</guid>
            <pubDate>Tue, 19 Nov 2024 03:56:31 GMT</pubDate>
            <description><![CDATA[<h1 id="summary">Summary</h1>
<ol>
<li>아는 만큼 보입니다.</li>
<li>코드를 직접 작성하지 못 해도, 읽고 수정할 수 있어야 합니다.</li>
<li>어려울수록 몸값은 올라갑니다.<h1 id="introduction">Introduction</h1>
김자영 강사님</li>
</ol>
<p>JavaScript에서 함수, 이벤트, 웹 스토리지, json 에 대해 살펴보고 예시들과 함께 정리합니다.</p>
<h1 id="code-conept--explanation">Code, Conept &amp; Explanation</h1>
<h2 id="함수">함수</h2>
<h3 id="비동기-함수">비동기 함수</h3>
<p>비동기 함수는 작업이 끝날 때까지 기다리지 않고 다음 코드를 실행할 수 있게 해주는 함수입니다.</p>
<p>JavaScript는 한 번에 하나의 작업만 처리할 수 있는 단일 스레드 언어입니다. 따라서 시간이 오래 걸리는 작업 (예: 서버에서 데이터 가져오기)을 처리하면 프로그램이 멈추는 일이 생길 수 있습니다.</p>
<p>비동기 함수를 사용하면, 시간이 오래 걸리는 작업이 끝날 때까지 기다리지 않고 다른 작업을 먼저 할 수 있습니다.</p>
<h3 id="함수-기본-구조">함수 기본 구조</h3>
<p>function (){}
() = {}</p>
<p>위 구조만은 꼭 기억해야 합니다.</p>
<h3 id="기본-함수">기본 함수</h3>
<h4 id="1️⃣-선언적-함수-function-declaration">1️⃣ 선언적 함수 (Function Declaration)</h4>
<p>function 키워드를 사용해 함수를 선언하는 방식입니다.
호이스팅(Hoisting) 덕분에 함수 선언 전에 호출이 가능합니다.</p>
<pre><code class="language-javascript">function sayHello(name) {
  console.log(`Hello, ${name}!`);
  return &quot;hello&quot;;
}

sayHello(&quot;world&quot;); // 출력: Hello, world!</code></pre>
<p>✅ 특징:</p>
<ol>
<li>이름이 있는 함수로 선언됩니다.</li>
<li>호이스팅: 함수 선언부가 코드 상단으로 끌어올려져, 선언 전에 호출 가능합니다.</li>
<li>전역에서 사용하기 쉽고 가독성이 좋습니다.</li>
</ol>
<h4 id="2️⃣-함수-표현식-function-expression">2️⃣ 함수 표현식 (Function Expression)</h4>
<p>함수를 변수에 할당하여 선언하는 방식입니다.
함수가 익명 함수일 때 많이 사용됩니다.</p>
<pre><code class="language-javascript">const sayHello = function (name) {
  console.log(`Hello, ${name}!`);
  return &quot;hello&quot;;
};

sayHello(&quot;expression&quot;); // 출력: Hello, expression!</code></pre>
<p>✅ 특징:</p>
<ol>
<li>변수에 함수가 할당됩니다.</li>
<li>호이스팅되지 않음: 함수 선언 이후에만 호출 가능합니다.</li>
<li>주로 콜백 함수나 일회성 함수에 사용됩니다.</li>
</ol>
<h4 id="3️⃣-화살표-함수-arrow-function">3️⃣ 화살표 함수 (Arrow Function)</h4>
<p>ES6부터 도입된 함수로, 짧고 간결한 문법이 특징입니다.
function 키워드 대신 <strong>=&gt;</strong>를 사용합니다.</p>
<pre><code class="language-javascript">const sayHello = (name) =&gt; {
  console.log(`Hello, ${name}!`);
  return &quot;hello&quot;;
};

sayHello(&quot;arrow&quot;); // 출력: Hello, arrow!</code></pre>
<p>✅ 특징:</p>
<ol>
<li>문법이 간단하고 코드를 짧게 작성할 수 있습니다.</li>
<li>this를 사용하지 않음: 일반 함수와 달리 this가 호출 컨텍스트에 묶이지 않습니다.</li>
<li>콜백 함수나 이벤트 핸들러에 자주 사용됩니다.</li>
</ol>
<h3 id="일급함수">일급함수</h3>
<p>1️⃣ 일급 함수 (First-Class Function)
JavaScript에서 <strong>함수는 &quot;일급 객체&quot;</strong>입니다. 즉, 함수도 일반 데이터처럼 다룰 수 있다는 뜻입니다.</p>
<p>✅ 일급 함수의 특징:</p>
<p>1) 변수에 함수를 저장할 수 있음:</p>
<pre><code class="language-javascript">const sayHello = function () {
  console.log(&quot;Hello!&quot;);
};

sayHello(); // 출력: Hello!</code></pre>
<p>2) 함수를 다른 함수의 인자로 전달할 수 있음:</p>
<pre><code class="language-javascript">function greet(callback) {
  callback(); // 전달받은 함수를 실행
}

greet(() =&gt; console.log(&quot;Hi!&quot;)); // 출력: Hi!</code></pre>
<p>3) 함수를 다른 함수에서 반환할 수 있음:</p>
<pre><code class="language-javascript">function makeMultiplier(x) {
  return function (y) {
    return x * y;
  };
}

const multiplyBy2 = makeMultiplier(2);
console.log(multiplyBy2(5)); // 출력: 10</code></pre>
<p>✨ 요약:
함수는 변수에 저장, 전달, 반환이 모두 가능합니다!
함수도 데이터처럼 다룰 수 있습니다.</p>
<h3 id="콜백-함수">콜백 함수</h3>
<p>2️⃣ 콜백 함수 (Callback Function)
콜백 함수는 다른 함수에 인자로 전달되어 나중에 호출되는 함수입니다.</p>
<p>✅ 콜백 함수의 정의:
한 함수가 다른 함수를 호출하면서 &quot;콜백(나중에 실행)&quot;을 요청하는 방식입니다.</p>
<p>✅ 예시:</p>
<ol>
<li>타이머 함수:</li>
</ol>
<pre><code class="language-javascript">setTimeout(() =&gt; {
  console.log(&quot;3초 후 실행됩니다!&quot;);
}, 3000); // 3초 후에 콜백 함수 실행</code></pre>
<ol start="2">
<li>이벤트 처리:</li>
</ol>
<pre><code class="language-javascript">const button = document.querySelector(&quot;button&quot;);
button.addEventListener(&quot;click&quot;, () =&gt; {
  console.log(&quot;버튼이 클릭되었습니다!&quot;);
});</code></pre>
<ol start="3">
<li>배열 메서드에서의 콜백:</li>
</ol>
<pre><code class="language-javascript">const numbers = [1, 2, 3];
numbers.forEach((num) =&gt; {
  console.log(num * 2); // 각각의 숫자를 2배로 출력
});</code></pre>
<p>✅ 주요 용도:</p>
<ol>
<li>비동기 처리: 네트워크 요청, 타이머 등.</li>
<li>이벤트 처리: 클릭, 마우스 이동 등.</li>
<li>배열 메서드: forEach, map, filter 등.</li>
</ol>
<h2 id="이벤트">이벤트</h2>
<h3 id="자주-사용하는-이벤트">자주 사용하는 이벤트</h3>
<p>JavaScript의 이벤트는 사용자의 동작에 따라 웹 페이지에서 특정 작업을 수행하도록 도와줍니다. 이 글에서는 클릭(click)과 키업(keyup), 체인지(change) 이벤트를 중심으로 간단히 정리하겠습니다.</p>
<ol>
<li>클릭</li>
<li>키업</li>
<li>체인지</li>
</ol>
<h4 id="1️⃣-클릭-이벤트-click">1️⃣ 클릭 이벤트 (click)</h4>
<p>정의: 사용자가 HTML 요소를 클릭했을 때 발생하는 이벤트입니다.</p>
<p>주요 사용처:</p>
<ol>
<li>버튼 클릭 시 특정 작업 실행.</li>
<li>링크 클릭 시 페이지 이동 또는 동작 처리.</li>
<li>다양한 UI 요소와의 상호작용 처리.</li>
</ol>
<p>✅ 사용 예제:</p>
<pre><code class="language-javascript">const button = document.querySelector(&quot;button&quot;);
button.addEventListener(&quot;click&quot;, () =&gt; {
  alert(&quot;버튼이 클릭되었습니다!&quot;);
});</code></pre>
<p>🔑 클릭 이벤트의 특징:</p>
<ol>
<li>대상 요소: 거의 모든 HTML 요소에서 사용 가능 (&lt;&#39;button&gt;, &lt;&#39;div&gt;, &lt;&#39;a&gt; 등).</li>
<li>더블클릭 이벤트(dblclick)와는 다름 → 두 번 클릭 시 동작 처리 필요 시 사용.</li>
</ol>
<h4 id="2️⃣-키업-이벤트-keyup">2️⃣ 키업 이벤트 (keyup)</h4>
<p>정의: 사용자가 누른 키를 손에서 뗄 때 발생하는 이벤트입니다.
주요 사용처:</p>
<ol>
<li>입력 필드에서 사용자가 입력한 값 확인.</li>
<li>실시간 검색 기능 구현.</li>
<li>입력 제한 또는 포맷 처리.</li>
</ol>
<p>✅ 사용 예제:</p>
<pre><code class="language-javascript">
const inputField = document.querySelector(&quot;input&quot;);
inputField.addEventListener(&quot;keyup&quot;, (event) =&gt; {
  console.log(`입력된 키: ${event.key}`);
});</code></pre>
<p>🔑 키업 이벤트의 특징:</p>
<ol>
<li>대상 요소: 주로 &lt;&#39;input&gt; 또는 &lt;&#39;textarea&gt;와 같은 입력 요소에서 사용.</li>
<li>키다운(keydown) 이벤트와의 차이 :
키다운은 키를 누르는 순간 발생 (반복적으로 호출 가능).
키업은 키에서 손을 뗄 때 딱 한 번 발생.</li>
</ol>
<h4 id="3️⃣-change-이벤트">3️⃣ change 이벤트</h4>
<p>정의: 폼 요소(&lt;&#39;input&gt;, &lt;&#39;select&gt;, &lt;&#39;textarea&gt; 등)의 값이 변경된 후 포커스가 다른 곳으로 이동했을 때 발생하는 이벤트.</p>
<p>주요 사용처:</p>
<ol>
<li>드롭다운 메뉴(select)에서 선택 값이 바뀌었을 때.</li>
<li>체크박스나 라디오 버튼의 상태가 변경되었을 때.</li>
<li>사용자 입력을 감지하고 동작을 실행할 때.</li>
</ol>
<p>✅ 사용 예제 1: 드롭다운 메뉴 값 변경 감지사용</p>
<pre><code class="language-html">
&lt;label for=&quot;colorSelect&quot;&gt;색상을 선택하세요:&lt;/label&gt;
&lt;select id=&quot;colorSelect&quot;&gt;
  &lt;option value=&quot;red&quot;&gt;빨강&lt;/option&gt;
  &lt;option value=&quot;blue&quot;&gt;파랑&lt;/option&gt;
  &lt;option value=&quot;green&quot;&gt;초록&lt;/option&gt;
&lt;/select&gt;
&lt;script&gt;
  const selectElement = document.getElementById(&quot;colorSelect&quot;);

  selectElement.addEventListener(&quot;change&quot;, (event) =&gt; {
    console.log(`선택한 색상: ${event.target.value}`);
  });
&lt;/script&gt;</code></pre>
<p>사용자가 드롭다운에서 색상을 선택하면 change 이벤트가 발생하여 선택한 값이 콘솔에 출력됩니다.</p>
<p>✅ 사용 예제 2: 체크박스 상태 변경</p>
<pre><code class="language-html">&lt;label&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;agreeCheckbox&quot; /&gt;
  동의합니다
&lt;/label&gt;
&lt;script&gt;
  const checkbox = document.getElementById(&quot;agreeCheckbox&quot;);

  checkbox.addEventListener(&quot;change&quot;, (event) =&gt; {
    if (event.target.checked) {
      console.log(&quot;동의가 선택되었습니다.&quot;);
    } else {
      console.log(&quot;동의가 해제되었습니다.&quot;);
    }
  });
&lt;/script&gt;</code></pre>
<p>체크박스가 선택되거나 해제될 때 change 이벤트가 발생하며, 상태에 따라 다른 메시지가 출력됩니다.</p>
<p>✅ 사용 예제 3: 입력 필드 값 변경</p>
<pre><code class="language-html">&lt;label for=&quot;nameInput&quot;&gt;이름을 입력하세요:&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;nameInput&quot; /&gt;
&lt;script&gt;
  const inputField = document.getElementById(&quot;nameInput&quot;);

  inputField.addEventListener(&quot;change&quot;, (event) =&gt; {
    console.log(`입력한 이름: ${event.target.value}`);
  });
&lt;/script&gt;</code></pre>
<p>사용자가 입력 필드에 값을 입력하고 포커스를 다른 곳으로 옮길 때 change 이벤트가 발생하여 입력된 값이 출력됩니다.</p>
<p>🔑 change 이벤트의 특징: </p>
<ol>
<li>포커스를 잃을 때만 발생: 실시간으로 값 변경을 처리하려면 input 이벤트를 사용하세요.</li>
<li>폼 요소에 주로 사용: select, input, textarea, checkbox, radio 등에서 유용.</li>
</ol>
<h3 id="이벤트-핸들링-방법-정리">이벤트 핸들링 방법 정리</h3>
<p>JavaScript에서 이벤트 핸들링은 사용자가 웹 페이지에서 발생시키는 이벤트(클릭, 키보드 입력 등)를 처리하는 방법입니다. 
주요 방식은 아래 세 가지입니다.</p>
<h4 id="1️⃣-인라인-이벤트-핸들러">1️⃣ 인라인 이벤트 핸들러</h4>
<p>HTML 태그 안에 이벤트 처리 코드를 직접 작성하는 방식입니다.
HTML 태그 안에 on이벤트 직접 작성</p>
<pre><code class="language-html">&lt;button onclick=&quot;alert(&#39;버튼 클릭!&#39;)&quot;&gt;클릭&lt;/button&gt;</code></pre>
<p>장점: 간단하고 빠르게 작성 가능.
단점: HTML과 JavaScript가 섞여 있어 유지보수가 어려움.
복잡한 작업에는 부적합.</p>
<h4 id="2️⃣-dom-요소의-핸들러-속성">2️⃣ DOM 요소의 핸들러 속성</h4>
<p>JavaScript에서 특정 요소의 이벤트 속성에 함수 연결.
<code>DOM요소.on이벤트명 = 함수;</code></p>
<pre><code class="language-javascript">const button = document.querySelector(&quot;button&quot;);
button.onclick = () =&gt; {
  alert(&quot;버튼 클릭!&quot;);
};</code></pre>
<p>장점 : HTML과 JavaScript 분리 → 코드가 깔끔해짐.
단점 : 하나의 이벤트에 하나의 핸들러만 설정 가능. (기존 핸들러를 덮어씀)</p>
<h4 id="3️⃣-addeventlistener-방식-추천">3️⃣ addEventListener 방식 (추천)</h4>
<p>이벤트에 여러 개의 핸들러를 추가 가능하며, 가장 유연하고 권장되는 방식입니다.</p>
<pre><code class="language-javascript">const button = document.querySelector(&quot;button&quot;);
button.addEventListener(&quot;click&quot;, () =&gt; {
  alert(&quot;첫 번째 핸들러 실행!&quot;);
});
button.addEventListener(&quot;click&quot;, () =&gt; {
  alert(&quot;두 번째 핸들러 실행!&quot;);
}); </code></pre>
<p>장점: 하나의 이벤트에 여러 핸들러 추가 가능.
다양한 이벤트 처리 시나리오에 대응 가능.
HTML과 JavaScript 완전히 분리 → 유지보수에 유리.</p>
<p>단점: 문법이 조금 더 복잡.</p>
<p>3가지 방식 정리하면,</p>
<ol>
<li>선언적 함수 : 간단한 전역 함수에 적합.</li>
<li>함수 표현식 : 콜백 함수나 선언 이후에 호출해야 하는 함수에 적합.</li>
<li>화살표 함수: 간결한 문법과 this를 사용하지 않는 상황에 적합.
각 방식의 특성을 이해하고 적절히 사용해 보세요! 😊</li>
</ol>
<h2 id="웹-스토리지web-storage">웹 스토리지(Web Storage)</h2>
<p>웹 스토리지는 웹 브라우저에서 데이터를 클라이언트(사용자 기기)에 저장할 수 있도록 하는 기술입니다. </p>
<p>이를 통해 사용자는 데이터를 서버로 보내지 않고도 로컬에 저장하고 나중에 재사용할 수 있습니다.</p>
<h3 id="웹-스토리지의-특징">웹 스토리지의 특징</h3>
<ol>
<li><p>데이터를 키(Key)-값(Value) 쌍으로 저장합니다.</p>
</li>
<li><p>모든 데이터는 문자열 형태로 저장됩니다.
복잡한 데이터(객체, 배열 등)는 JSON 형식으로 변환해서 저장해야 합니다.</p>
</li>
<li><p>두 가지 종류가 있습니다:
로컬 스토리지(Local Storage)
세션 스토리지(Session Storage)</p>
</li>
</ol>
<h3 id="로컬-스토리지local-storage">로컬 스토리지(Local Storage)</h3>
<p>특징</p>
<ol>
<li>영구적으로 데이터가 저장됩니다.</li>
<li>브라우저를 닫아도 데이터가 유지됩니다.</li>
<li>같은 도메인 내에서만 데이터에 접근 가능합니다.</li>
<li>사용자가 직접 삭제하기 전까지 데이터가 유지됩니다.</li>
</ol>
<pre><code class="language-javascript">// 데이터 저장
localStorage.setItem(&quot;key&quot;, &quot;value&quot;);

// 데이터 가져오기
let value = localStorage.getItem(&quot;key&quot;);

// 특정 데이터 삭제
localStorage.removeItem(&quot;key&quot;);

// 모든 데이터 삭제
localStorage.clear();</code></pre>
<h3 id="세션-스토리지session-storage">세션 스토리지(Session Storage)</h3>
<p>특징</p>
<ol>
<li>데이터가 현재 세션(탭) 동안만 저장됩니다.</li>
<li>브라우저 탭을 닫으면 데이터가 삭제됩니다.</li>
<li>같은 탭 내에서만 데이터 공유가 가능합니다.</li>
</ol>
<pre><code class="language-javascript">// 데이터 저장
sessionStorage.setItem(&quot;key&quot;, &quot;value&quot;);

// 데이터 가져오기
let value = sessionStorage.getItem(&quot;key&quot;);

// 특정 데이터 삭제
sessionStorage.removeItem(&quot;key&quot;);

// 모든 데이터 삭제
sessionStorage.clear();</code></pre>
<p>쉽게 비유로 설명하면,</p>
<ol>
<li>로컬 스토리지 : 메모장처럼 데이터를 오래 보관하는 공간.</li>
<li>세션 스토리지 : 종이 노트처럼 열려 있는 동안만 데이터를 저장하는 공간.</li>
</ol>
<p>웹 스토리지를 활용하면 사용자의 브라우저에 데이터를 저장하고, 효율적으로 관리할 수 있습니다. 상황에 따라 적합한 저장 방식을 선택해서 사용해 보세요!</p>
<h2 id="json-javascript-object-notation">JSON (JavaScript Object Notation)</h2>
<p>JSON은 경량의 데이터 교환 형식으로, 데이터를 효율적으로 전송하고 저장할 때 사용됩니다.</p>
<h3 id="json의-특징">JSON의 특징</h3>
<ol>
<li>데이터를 키-값 쌍으로 이루어진 텍스트 기반 형식으로 저장합니다.</li>
<li>텍스트로만 구성되어 빠르게 전송되고, 여러 시스템 간 호환성이 좋습니다.</li>
<li>특정 프로그래밍 언어에 종속되지 않아서 대부분의 언어(JavaScript, Python, Java, C++ 등)에서 사용할 수 있습니다.</li>
<li>공개 API를 통해 데이터를 주고받을 때 많이 사용됩니다.</li>
</ol>
<h1 id="challenges--solutions">Challenges &amp; Solutions</h1>
<h1 id="results">Results</h1>
<h1 id="what-i-learned--insights">What I Learned &amp; Insights</h1>
<p>직접 모두 작성해야 하는 것은 아닙니다.</p>
<p><strong>하지만 남이 작성한 것을 이해할 수 있어야 합니다.
또 남이 작성한 것을 고칠 수 있어야 합니다.</strong>
모르면 고칠 수 없습니다.</p>
<p>데이터분석이나 머신러닝 지식이 더 중요합니다.
나머지는 라이브러리가 다 해줍니다.</p>
<p>웹은 프로그래밍적인 사고가 필요합니다.</p>
<p><strong>어려울수록 몸값은 올라갑니다.</strong></p>
<h1 id="conclusion">Conclusion</h1>
<p>아는 만큼 보입니다.
이전에는 하나의 사이트로 보여지는 부분만 봤다면</p>
<p>이제는 어떻게 구성됐는지
어떤 기능들을 넣었는지 보게 됐습니다.</p>
]]></description>
        </item>
    </channel>
</rss>