<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데이터 활용과 투자이야기</title>
    <link>https://logmario.tistory.com/</link>
    <description>데이터를 다루는 여러가지 기술들 저장하고,
나만의 투자 모델을 만들어 가는 과정을 기록하는 곳입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 17:11:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>로그마리오</managingEditor>
    <image>
      <title>데이터 활용과 투자이야기</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2705354A56C037B92A</url>
      <link>https://logmario.tistory.com</link>
    </image>
    <item>
      <title>AI Agent 구축</title>
      <link>https://logmario.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;###&amp;nbsp;기술세션&amp;nbsp;|&amp;nbsp;AI에이전트&amp;nbsp;시스템&amp;nbsp;구축&amp;nbsp;및&amp;nbsp;관리를&amp;nbsp;위한&amp;nbsp;통합&amp;nbsp;플랫폼&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Mosaic&amp;nbsp;AI&amp;nbsp;개요&lt;br /&gt;-&amp;nbsp;ai&amp;nbsp;builder&amp;nbsp;(&amp;nbsp;노코드기반&amp;nbsp;)&lt;br /&gt;-&amp;nbsp;AI&amp;nbsp;playground&amp;nbsp;:&amp;nbsp;개발&amp;nbsp;설정하는&amp;nbsp;곳&lt;br /&gt;-&amp;nbsp;AI&amp;nbsp;시스템&amp;nbsp;평가&amp;nbsp;:&amp;nbsp;문제점&amp;nbsp;확인후&amp;nbsp;수정후&amp;nbsp;재배포,&amp;nbsp;AI&amp;nbsp;Judge&lt;br /&gt;-&amp;nbsp;MLflow&amp;nbsp;Tracing을&amp;nbsp;통해&amp;nbsp;디버깅,&amp;nbsp;로깅으로&amp;nbsp;추적&lt;br /&gt;-&amp;nbsp;Agent&amp;nbsp;Evalution&amp;nbsp;리뷰앱&amp;nbsp;:&amp;nbsp;이해관계자와&amp;nbsp;빠른&amp;nbsp;피드백에&amp;nbsp;도움&lt;br /&gt;-&amp;nbsp;Mosaic&amp;nbsp;AI&amp;nbsp;게이트웨이&lt;br /&gt;-&amp;nbsp;AI/BI&amp;nbsp;대시보드,&amp;nbsp;레이크하우스&amp;nbsp;모니터링&amp;nbsp;(운영관점)&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;기술세션&amp;nbsp;|&amp;nbsp;LLMOps&amp;nbsp;in&amp;nbsp;Databricks:&amp;nbsp;AI&amp;nbsp;Agent를&amp;nbsp;Production&amp;nbsp;환경에&amp;nbsp;배포하기&amp;nbsp;위한&amp;nbsp;고려사항&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;FACTSET&amp;nbsp;FQL&amp;nbsp;을&amp;nbsp;자연어로&amp;nbsp;생성하는&amp;nbsp;프로젝트&amp;nbsp;사례&lt;br /&gt;-&amp;nbsp;GPT4&amp;nbsp;:&amp;nbsp;59%,&amp;nbsp;15s&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;85%,&amp;nbsp;6s&lt;br /&gt;-&amp;nbsp;Mosaic&amp;nbsp;AI&amp;nbsp;Model&amp;nbsp;Training&amp;nbsp;(&amp;nbsp;모델&amp;nbsp;학습후&amp;nbsp;배포&amp;nbsp;)&lt;br /&gt;-&amp;nbsp;모델&amp;nbsp;배포&amp;nbsp;3가지&amp;nbsp;:&amp;nbsp;custom&amp;nbsp;Models&amp;nbsp;데이터브릭스&amp;nbsp;자체적&amp;nbsp;기능&amp;nbsp;/&amp;nbsp;Foundation&amp;nbsp;Models&amp;nbsp;메타와&amp;nbsp;직접적인&amp;nbsp;구현&amp;nbsp;가능한&amp;nbsp;기능들&amp;nbsp;/&amp;nbsp;External&amp;nbsp;Models&amp;nbsp;상용AI모델을&amp;nbsp;사용할&amp;nbsp;때&lt;br /&gt;-&amp;nbsp;Governance&amp;nbsp;:&amp;nbsp;limit&amp;nbsp;공격적&amp;nbsp;요청수를&amp;nbsp;제한하여&amp;nbsp;리스크&amp;nbsp;관리&lt;br /&gt;-&amp;nbsp;13&amp;nbsp;RAG&amp;nbsp;:&amp;nbsp;적절한&amp;nbsp;문서를&amp;nbsp;탐색하는&amp;nbsp;것이&amp;nbsp;key,&amp;nbsp;벡터DB를&amp;nbsp;많이&amp;nbsp;활용함&lt;br /&gt;&amp;nbsp;&amp;nbsp;Anthropic과&amp;nbsp;협업해서&amp;nbsp;개발한&amp;nbsp;기능임&lt;br /&gt;&amp;nbsp;&amp;nbsp;Delta&amp;nbsp;Table&amp;nbsp;특징&amp;nbsp;:&amp;nbsp;vector에&amp;nbsp;컬럼을&amp;nbsp;추가해서&amp;nbsp;활용가능&lt;br /&gt;-&amp;nbsp;23&amp;nbsp;OpenAI&amp;nbsp;/&amp;nbsp;Rang&amp;nbsp;Chain&amp;nbsp;:&amp;nbsp;데이터브릭스에서&amp;nbsp;자체&amp;nbsp;개발한&amp;nbsp;텍스트기반&amp;nbsp;SQL구성&amp;nbsp;Genie라고함&lt;br /&gt;-&amp;nbsp;33&amp;nbsp;Tool&amp;nbsp;Calling&amp;nbsp;:&amp;nbsp;tool&amp;nbsp;또는&amp;nbsp;지정된&amp;nbsp;함수를&amp;nbsp;이용하면&amp;nbsp;할루시네이션을&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있음&lt;br /&gt;-&amp;nbsp;AI&amp;nbsp;Playground에서&amp;nbsp;바로&amp;nbsp;응답을&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;-&amp;nbsp;평가&amp;nbsp;Metric을&amp;nbsp;제공을&amp;nbsp;하고&amp;nbsp;있음&lt;br /&gt;-&amp;nbsp;평가는&amp;nbsp;개발단계에서&amp;nbsp;평가&amp;nbsp;/&amp;nbsp;배포후&amp;nbsp;단계에서&amp;nbsp;성능을&amp;nbsp;평가&amp;nbsp;이렇게&amp;nbsp;2가지로&amp;nbsp;구분됨&lt;br /&gt;-&amp;nbsp;MLflow&amp;nbsp;Trace&amp;nbsp;UI에서&amp;nbsp;테이블로&amp;nbsp;저장된&amp;nbsp;로그를&amp;nbsp;보는&amp;nbsp;화면을&amp;nbsp;제공함&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;파트너&amp;nbsp;스폰서&amp;nbsp;세션&amp;nbsp;|&amp;nbsp;KT&amp;nbsp;-&amp;nbsp;Databricks를&amp;nbsp;활용한&amp;nbsp;네트워크&amp;nbsp;기지국&amp;nbsp;전력&amp;nbsp;제어&amp;nbsp;모델&amp;nbsp;개발&amp;nbsp;사례&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;01&amp;nbsp;Intro&lt;br /&gt;-&amp;nbsp;02&amp;nbsp;기지국&amp;nbsp;트래픽&amp;nbsp;수요예측&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;무선&amp;nbsp;네트워크&amp;nbsp;풀질&amp;nbsp;관리&amp;nbsp;/&amp;nbsp;네트워크&amp;nbsp;안정성&amp;nbsp;확보&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Uplink&amp;nbsp;:&amp;nbsp;사진&amp;nbsp;업로드,&amp;nbsp;음성&amp;nbsp;전송,&amp;nbsp;메시지&amp;nbsp;보내기&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Downlink&amp;nbsp;:&amp;nbsp;유튜브&amp;nbsp;영상&amp;nbsp;시청,&amp;nbsp;음악&amp;nbsp;감상,&amp;nbsp;웹&amp;nbsp;서핑&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;트랙픽&amp;nbsp;수요&amp;nbsp;=&amp;nbsp;Uplink&amp;nbsp;수요&amp;nbsp;+&amp;nbsp;Downlink&amp;nbsp;수요&lt;br /&gt;-&amp;nbsp;03&amp;nbsp;기지국&amp;nbsp;트래픽&amp;nbsp;수요&amp;nbsp;예측&amp;nbsp;모델링&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시간적&amp;nbsp;특징&amp;nbsp;/&amp;nbsp;공간적&amp;nbsp;특징&amp;nbsp;/&amp;nbsp;이벤트&amp;nbsp;변수&amp;nbsp;/&amp;nbsp;log&amp;nbsp;변서(과거&amp;nbsp;트래픽&amp;nbsp;평균)&lt;br /&gt;-&amp;nbsp;04&amp;nbsp;databricks&amp;nbsp;datapipeliine&amp;nbsp;구성&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;MLOps&amp;nbsp;Workflow&amp;nbsp;구성하는&amp;nbsp;단위별로&amp;nbsp;Python&amp;nbsp;Script&amp;nbsp;구성&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;변동성이&amp;nbsp;많은&amp;nbsp;KT같은&amp;nbsp;회사는&amp;nbsp;모니터링이&amp;nbsp;중요했다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;파트너&amp;nbsp;스폰서&amp;nbsp;세션&amp;nbsp;|&amp;nbsp;AWS&amp;nbsp;=&amp;nbsp;Better&amp;nbsp;Together&amp;nbsp;Databricks&amp;nbsp;on&amp;nbsp;AWS&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;생산성&amp;nbsp;강화&amp;nbsp;:&amp;nbsp;다양한&amp;nbsp;배경&amp;nbsp;이미지/영상&amp;nbsp;생성,&amp;nbsp;프로모션&amp;nbsp;활용&lt;br /&gt;-&amp;nbsp;운영&amp;nbsp;개선&amp;nbsp;:&amp;nbsp;DDI&amp;nbsp;EDS와&amp;nbsp;Amazon&amp;nbsp;Bedrock&amp;nbsp;통합&amp;nbsp;시연&amp;nbsp;데모&lt;br /&gt;-&amp;nbsp;창의/창조&amp;nbsp;:&amp;nbsp;AI&amp;nbsp;기반&amp;nbsp;디지털&amp;nbsp;휴먼&amp;nbsp;구성&lt;br /&gt;-&amp;nbsp;고객&amp;nbsp;경험&amp;nbsp;강화&amp;nbsp;:&amp;nbsp;쇼핑&amp;nbsp;어시스턴트&amp;nbsp;amazon&lt;br /&gt;&amp;nbsp;&amp;nbsp;사용자가&amp;nbsp;무슨&amp;nbsp;상품을&amp;nbsp;살지&amp;nbsp;물어보고&amp;nbsp;AI가&amp;nbsp;대답해서&amp;nbsp;원하는&amp;nbsp;물건을&amp;nbsp;찾아갈&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;도와줌&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Agent&amp;nbsp;와&amp;nbsp;Agentic&amp;nbsp;차이&amp;nbsp;:&amp;nbsp;추론이&amp;nbsp;있으면&amp;nbsp;Agentic&lt;br /&gt;-&amp;nbsp;Agentic&amp;nbsp;AI&amp;nbsp;Use&amp;nbsp;case&amp;nbsp;1&amp;nbsp;:&amp;nbsp;RAG&lt;br /&gt;-&amp;nbsp;Agentic&amp;nbsp;AI&amp;nbsp;Use&amp;nbsp;case&amp;nbsp;2&amp;nbsp;:&amp;nbsp;Text2SQL&lt;br /&gt;-&amp;nbsp;Agentic&amp;nbsp;AI&amp;nbsp;Use&amp;nbsp;case&amp;nbsp;3&amp;nbsp;:&amp;nbsp;Text2Image&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;기술&amp;nbsp;세션&amp;nbsp;|&amp;nbsp;Databricks&amp;nbsp;관리형&amp;nbsp;MLflow:&amp;nbsp;AI&amp;nbsp;모델,&amp;nbsp;LLM과&amp;nbsp;생성형&amp;nbsp;AI의&amp;nbsp;혁신적&amp;nbsp;관리&amp;nbsp;플랫폼&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;MLflow&amp;nbsp;Components&amp;nbsp;:&amp;nbsp;1.Tracking&amp;nbsp;/&amp;nbsp;2.Project&amp;nbsp;/&amp;nbsp;3.Models&amp;nbsp;/&amp;nbsp;4.Model&amp;nbsp;Registry&lt;br /&gt;-&amp;nbsp;1.&amp;nbsp;ML워크플로우를&amp;nbsp;더욱&amp;nbsp;관리하기&amp;nbsp;쉽게&amp;nbsp;만들기&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실험&amp;nbsp;및&amp;nbsp;실행관리&amp;nbsp;/&amp;nbsp;Custom&amp;nbsp;Logging&amp;nbsp;/&amp;nbsp;Auto&amp;nbsp;logging&amp;nbsp;&lt;br /&gt;-&amp;nbsp;3.&amp;nbsp;MLflow&amp;nbsp;Models&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉토리&amp;nbsp;구조로&amp;nbsp;관리함&lt;br /&gt;-&amp;nbsp;4.&amp;nbsp;A&amp;nbsp;centralized&amp;nbsp;model&amp;nbsp;store&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;하나의&amp;nbsp;협업&amp;nbsp;허브&amp;nbsp;/&amp;nbsp;수명&amp;nbsp;주기&amp;nbsp;관리&amp;nbsp;/&amp;nbsp;가시성&amp;nbsp;및&amp;nbsp;거버넌스&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;catalog.schema.model&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Databricks&amp;nbsp;AutoML&amp;nbsp;소개&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;모두를&amp;nbsp;위한&amp;nbsp;빠르고&amp;nbsp;간소화된&amp;nbsp;머신&amp;nbsp;러닝&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;데이터팀의&amp;nbsp;통제력을&amp;nbsp;유지하면서&amp;nbsp;역량을&amp;nbsp;강화할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;A&amp;nbsp;glass-box&amp;nbsp;솔루션&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;LLM-as-a-judge&amp;nbsp;:&amp;nbsp;평가&amp;nbsp;및&amp;nbsp;디버깅&amp;nbsp;전후&amp;nbsp;비교&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;고객사례&amp;nbsp;|&amp;nbsp;&amp;nbsp;KCD의&amp;nbsp;Text2SQL&amp;nbsp;AI&amp;nbsp;Agent를&amp;nbsp;활용한&amp;nbsp;데이터&amp;nbsp;민주화&amp;nbsp;구축&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;문제&amp;nbsp;:&amp;nbsp;작은&amp;nbsp;조직의&amp;nbsp;회사가&amp;nbsp;cashnote&amp;nbsp;서비스를&amp;nbsp;운영하면서&amp;nbsp;점점&amp;nbsp;확장되면서&amp;nbsp;문제가&amp;nbsp;생김&lt;br /&gt;-&amp;nbsp;Product&amp;nbsp;Overview&amp;nbsp;:&amp;nbsp;KCD의&amp;nbsp;데이터&amp;nbsp;민주화&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;데이터분석팀의&amp;nbsp;생산성을&amp;nbsp;확보하고&amp;nbsp;전문적인&amp;nbsp;기술&amp;nbsp;지식이&amp;nbsp;없는&amp;nbsp;누구나&amp;nbsp;데이터&amp;nbsp;기반&amp;nbsp;의사결정&lt;br /&gt;-&amp;nbsp;unity&amp;nbsp;Cattalog&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;것은&amp;nbsp;회사의&amp;nbsp;비즈니스를&amp;nbsp;깊이&amp;nbsp;이해하고,&amp;nbsp;그에&amp;nbsp;맞춰&amp;nbsp;data&amp;nbsp;ontology를&amp;nbsp;잘&amp;nbsp;설계하는&amp;nbsp;것&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이후에는&amp;nbsp;Text2SQL&amp;nbsp;프로세스를&amp;nbsp;효과적으로&amp;nbsp;운영하기&amp;nbsp;위해&amp;nbsp;온톨로지&amp;nbsp;기반하여&amp;nbsp;테이블&amp;nbsp;구조를&amp;nbsp;단순화하고&amp;nbsp;정교하게&amp;nbsp;다듬는&amp;nbsp;것이&amp;nbsp;핵심&lt;br /&gt;-&amp;nbsp;Text2SQL&amp;nbsp;:&amp;nbsp;Just&amp;nbsp;Use&amp;nbsp;the&amp;nbsp;AI/BI&amp;nbsp;Genie&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프롬프트&amp;nbsp;최적화&amp;nbsp;:&amp;nbsp;스키마&amp;nbsp;및&amp;nbsp;테이블&amp;nbsp;정보&amp;nbsp;전달&amp;nbsp;방식&amp;nbsp;개선&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;보안&amp;nbsp;강화&amp;nbsp;:&amp;nbsp;테이블&amp;nbsp;접근과&amp;nbsp;LLM&amp;nbsp;프롬프트&amp;nbsp;내&amp;nbsp;데이터&amp;nbsp;보호&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실행&amp;nbsp;시간&amp;nbsp;단축&amp;nbsp;:&amp;nbsp;외부의&amp;nbsp;복수&amp;nbsp;API호출로&amp;nbsp;인한&amp;nbsp;지연&amp;nbsp;최소화&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;할루시네이션&amp;nbsp;문제&amp;nbsp;해결&amp;nbsp;:&amp;nbsp;사용자&amp;nbsp;경험&amp;nbsp;침&amp;nbsp;신뢰성&amp;nbsp;보장&lt;br /&gt;-&amp;nbsp;효과&amp;nbsp;:&amp;nbsp;비용&amp;nbsp;10%,&amp;nbsp;해결해준&amp;nbsp;비율&amp;nbsp;54%해소&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;###&amp;nbsp;고객사례&amp;nbsp;|&amp;nbsp;&amp;nbsp;Bagelcode의&amp;nbsp;데이터&amp;nbsp;에이전트&amp;nbsp;DAVIS와&amp;nbsp;지니를&amp;nbsp;활용한&amp;nbsp;데이터&amp;nbsp;기반&amp;nbsp;의사&amp;nbsp;결정&amp;nbsp;가속화&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;포커스&amp;nbsp;:&amp;nbsp;빠른&amp;nbsp;의사&amp;nbsp;결정&amp;nbsp;(ex,&amp;nbsp;광고&amp;nbsp;집행)&lt;br /&gt;-&amp;nbsp;데이터&amp;nbsp;기반&amp;nbsp;의사&amp;nbsp;결정을&amp;nbsp;더&amp;nbsp;바르게&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없을까&amp;nbsp;?&lt;br /&gt;-&amp;nbsp;DAVIS&amp;nbsp;:&amp;nbsp;자연어&amp;nbsp;기반&amp;nbsp;데이터&amp;nbsp;서비스&lt;br /&gt;&amp;nbsp;&amp;nbsp;접근성&amp;nbsp;/&amp;nbsp;사용성&amp;nbsp;/&amp;nbsp;빠른&amp;nbsp;구현&lt;br /&gt;-&amp;nbsp;기능&amp;nbsp;소개&amp;nbsp;:&amp;nbsp;SQL&amp;nbsp;Queries&amp;nbsp;/&amp;nbsp;Tablau&amp;nbsp;Dashborad&amp;nbsp;접속하지도&amp;nbsp;않고&amp;nbsp;데이터&amp;nbsp;받아옴&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Genie&amp;nbsp;더&amp;nbsp;똑똑하게&amp;nbsp;만들기&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Stay&amp;nbsp;Focused&lt;br /&gt;-&amp;nbsp;단일&amp;nbsp;게임에&amp;nbsp;대한&amp;nbsp;데이터&amp;nbsp;구조&lt;br /&gt;-&amp;nbsp;Mart&amp;nbsp;Table만&amp;nbsp;사용해서&amp;nbsp;Genie를&amp;nbsp;구축하기로&amp;nbsp;집중함&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Plan&amp;nbsp;to&amp;nbsp;iterate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Genie의&amp;nbsp;역질문&amp;nbsp;수집하기&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Build&amp;nbsp;on&amp;nbsp;well-annotated&amp;nbsp;Tables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;dbt&amp;nbsp;모델&amp;nbsp;(&amp;nbsp;.sql+.yml)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;당신의&amp;nbsp;역할은&amp;nbsp;dbt모델에&amp;nbsp;들어갈&amp;nbsp;yml파일을&amp;nbsp;만드는&amp;nbsp;것입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Python/Spark</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/52</guid>
      <comments>https://logmario.tistory.com/52#entry52comment</comments>
      <pubDate>Wed, 30 Apr 2025 06:53:29 +0900</pubDate>
    </item>
    <item>
      <title>vscode 확장기능 continue</title>
      <link>https://logmario.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Studio Code에서 Continue 확장 프로그램을 설치하고 Groq Open API를 설정하는 방법을 자세히 알려드리겠습니다. 이 설정을 통해 GitHub Copilot과 같은 유료 AI 코딩 도구 대신 무료로 강력한 AI 코딩 지원을 받을 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Groq 계정 설정하기&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Groq 콘솔(&lt;a href=&quot;https://console.groq.com)%EC%97%90&quot;&gt;https://console.groq.com)에&lt;/a&gt; 접속합니다[1][2][4].&lt;/li&gt;
&lt;li&gt;계정을 생성하거나 기존 계정으로 로그인합니다[1][2][4].&lt;/li&gt;
&lt;li&gt;API 키 섹션으로 이동합니다[1][2][4].&lt;/li&gt;
&lt;li&gt;새 API 키를 생성합니다[1][2][4].&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중요&lt;/b&gt;: API 키는 한 번만 표시되므로 즉시 복사하여 안전한 곳에 저장해 두세요[1][2][4].&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Continue 확장 프로그램 설치하기&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Visual Studio Code를 엽니다[1][2].&lt;/li&gt;
&lt;li&gt;확장 마켓플레이스에서 &quot;Continue&quot;를 검색합니다[1][2].&lt;/li&gt;
&lt;li&gt;해당 확장 프로그램을 설치합니다[1][2].&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Continue 확장 프로그램 설정하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Continue 확장 프로그램은 최근에 설정 파일 형식이 변경되었습니다. 현재는 &lt;code&gt;config.yaml&lt;/code&gt; 또는 &lt;code&gt;config.json&lt;/code&gt; 형식을 사용합니다[1][5]. 두 가지 방법으로 설정할 수 있습니다:&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;YAML 형식으로 설정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;config.yaml&lt;/code&gt; 파일에 다음과 같이 설정합니다:&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;models:
  - name: Llama 3.3 70b Versatile
    provider: groq
    model: llama-3.3-70b-versatile
    apiKey: &amp;lt;YOUR_GROQ_API_KEY&amp;gt;
    roles:
      - chat&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;JSON 형식으로 설정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;config.json&lt;/code&gt; 파일에 다음과 같이 설정합니다:&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;{
  &quot;models&quot;: [
    {
      &quot;title&quot;: &quot;Llama 3.3 70b Versatile&quot;,
      &quot;provider&quot;: &quot;groq&quot;,
      &quot;model&quot;: &quot;llama-3.3-70b-versatile&quot;,
      &quot;apiKey&quot;: &quot;&amp;lt;YOUR_GROQ_API_KEY&amp;gt;&quot;
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 경우 모두 `` 부분을 앞서 저장해둔 Groq API 키로 교체하세요[5].&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Continue 확장 프로그램 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 완료한 후에는 다음과 같이 사용할 수 있습니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;코드 에디터에서 코드를 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command + L&lt;/code&gt; (또는 시스템에 맞는 단축키)를 눌러 Continue를 엽니다[1].&lt;/li&gt;
&lt;li&gt;질문을 하거나, 코드 리뷰를 요청하거나, 솔루션을 생성할 수 있습니다[1].&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주의사항 및 팁&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Groq는 현재 가장 빠른 모델 실행 플랫폼 중 하나로, GitHub Copilot보다 더 빠른 응답 속도를 제공합니다[2].&lt;/li&gt;
&lt;li&gt;Llama 3 모델은 코딩에 특히 뛰어난 성능을 보입니다[2].&lt;/li&gt;
&lt;li&gt;리팩터 모드(&lt;code&gt;cmd + I&lt;/code&gt;)를 사용할 때 API 기본 URL 문제가 발생할 수 있습니다. 이 경우 &lt;code&gt;apiBase&lt;/code&gt;를 &lt;code&gt;https://api.groq.com/openai/v1/chat&lt;/code&gt;로 설정하면 해결될 수 있습니다[3].&lt;/li&gt;
&lt;li&gt;메시지를 너무 많이 보내면 속도 제한이 걸릴 수 있으므로 주의하세요[2].&lt;/li&gt;
&lt;li&gt;Continue는 오픈 소스이며 커뮤니티 지원이 활발합니다[2].&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정을 통해 GitHub Copilot과 같은 유료 서비스 없이도 강력한 AI 코딩 지원을 무료로 이용할 수 있습니다. 특히 Groq의 Llama 3 모델은 코딩에 매우 뛰어난 성능을 보이며, 빠른 응답 속도로 개발 생산성을 크게 향상시킬 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Citations:&lt;br /&gt;[1] &lt;a href=&quot;https://dev.to/royged/no-copilot-no-problem-get-free-ai-in-vscode-now-1a1g&quot;&gt;https://dev.to/royged/no-copilot-no-problem-get-free-ai-in-vscode-now-1a1g&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;https://www.youtube.com/watch?v=1VY4A5fG4ZY&quot;&gt;https://www.youtube.com/watch?v=1VY4A5fG4ZY&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;https://github.com/continuedev/continue/issues/1186&quot;&gt;https://github.com/continuedev/continue/issues/1186&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;https://dev.to/dani_avila7/lightning-fast-code-assistant-with-groq-in-vscode-4eme&quot;&gt;https://dev.to/dani_avila7/lightning-fast-code-assistant-with-groq-in-vscode-4eme&lt;/a&gt;&lt;br /&gt;[5] &lt;a href=&quot;https://docs.continue.dev/customize/model-providers/more/groq&quot;&gt;https://docs.continue.dev/customize/model-providers/more/groq&lt;/a&gt;&lt;br /&gt;[6] &lt;a href=&quot;https://www.youtube.com/watch?v=cohxfQAANdw&quot;&gt;https://www.youtube.com/watch?v=cohxfQAANdw&lt;/a&gt;&lt;br /&gt;[7] &lt;a href=&quot;https://www.continue.dev&quot;&gt;https://www.continue.dev&lt;/a&gt;&lt;br /&gt;[8] &lt;a href=&quot;https://github.com/continuedev/continue/issues/3697&quot;&gt;https://github.com/continuedev/continue/issues/3697&lt;/a&gt;&lt;br /&gt;[9] &lt;a href=&quot;https://anpigon.tistory.com/465&quot;&gt;https://anpigon.tistory.com/465&lt;/a&gt;&lt;br /&gt;[10] &lt;a href=&quot;https://anpigon.tistory.com/444&quot;&gt;https://anpigon.tistory.com/444&lt;/a&gt;&lt;br /&gt;[11] &lt;a href=&quot;https://github.com/continuedev/continue/blob/main/extensions/vscode/config_schema.json&quot;&gt;https://github.com/continuedev/continue/blob/main/extensions/vscode/config_schema.json&lt;/a&gt;&lt;br /&gt;[12] &lt;a href=&quot;https://docs.continue.dev/customize/tutorials/llama3.1&quot;&gt;https://docs.continue.dev/customize/tutorials/llama3.1&lt;/a&gt;&lt;br /&gt;[13] &lt;a href=&quot;https://www.youtube.com/watch?v=rsJqHDuJWSI&quot;&gt;https://www.youtube.com/watch?v=rsJqHDuJWSI&lt;/a&gt;&lt;br /&gt;[14] &lt;a href=&quot;https://www.reddit.com/r/vscode/comments/1i3cwd4/this_is_definitely_the_fastest_version_of_ai/&quot;&gt;https://www.reddit.com/r/vscode/comments/1i3cwd4/this_is_definitely_the_fastest_version_of_ai/&lt;/a&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perplexity로부터의 답변: pplx.ai/share&lt;/p&gt;</description>
      <category>AI_Agent</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/51</guid>
      <comments>https://logmario.tistory.com/51#entry51comment</comments>
      <pubDate>Sun, 13 Apr 2025 11:32:13 +0900</pubDate>
    </item>
    <item>
      <title>Solactive US Big Tech Top 7 Plus Price Return Index 차트만들기_파이썬</title>
      <link>https://logmario.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744443450301&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests

# Solactive API 엔드포인트 및 클라이언트 ID 설정
BASE_URL = &quot;https://clients.solactive.com/api/rest/v1/indices&quot;
CLIENT_ID = &quot;your_client_id&quot;  # Solactive에서 제공받은 클라이언트 ID
ISIN = &quot;DE000SL0J6Z8&quot;

def fetch_index_data():
    try:
        # API 요청 URL 구성
        url = f&quot;{BASE_URL}/{CLIENT_ID}/{ISIN}/index&quot;
        
        # GET 요청 보내기
        response = requests.get(url)
        
        # 응답 데이터 확인
        if response.status_code == 200:
            data = response.json()
            print(&quot;Index Data:&quot;)
            print(data)
        else:
            print(f&quot;Failed to fetch data. HTTP Status Code: {response.status_code}&quot;)
    except Exception as e:
        print(f&quot;An error occurred: {e}&quot;)

# 실행
fetch_index_data()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/파이썬_자동매매</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/50</guid>
      <comments>https://logmario.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 12 Apr 2025 16:37:37 +0900</pubDate>
    </item>
    <item>
      <title>jupyterlab의 초기화하는 법</title>
      <link>https://logmario.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JupyterLab을&amp;nbsp;초기화하는&amp;nbsp;방법은&amp;nbsp;여러&amp;nbsp;가지가&amp;nbsp;있습니다.&amp;nbsp;문제&amp;nbsp;해결을&amp;nbsp;위한&amp;nbsp;다양한&amp;nbsp;초기화&amp;nbsp;방법을&amp;nbsp;아래에&amp;nbsp;설명해&amp;nbsp;드리겠습니다. &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;JupyterLab&amp;nbsp;초기화&amp;nbsp;방법 &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;1.&amp;nbsp;설정&amp;nbsp;파일&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;JupyterLab의&amp;nbsp;설정&amp;nbsp;파일을&amp;nbsp;초기화하면&amp;nbsp;권한&amp;nbsp;문제&amp;nbsp;등&amp;nbsp;여러&amp;nbsp;이슈가&amp;nbsp;해결될&amp;nbsp;수&amp;nbsp;있습니다: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;jupyter&amp;nbsp;lab&amp;nbsp;clean &lt;br /&gt;jupyter&amp;nbsp;lab&amp;nbsp;build &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;명령어들은&amp;nbsp;JupyterLab의&amp;nbsp;빌드&amp;nbsp;파일과&amp;nbsp;캐시를&amp;nbsp;정리하고&amp;nbsp;다시&amp;nbsp;빌드합니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;2.&amp;nbsp;설정&amp;nbsp;디렉토리&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;Jupyter&amp;nbsp;설정&amp;nbsp;디렉토리의&amp;nbsp;위치를&amp;nbsp;확인하고&amp;nbsp;초기화할&amp;nbsp;수&amp;nbsp;있습니다: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;설정&amp;nbsp;디렉토리&amp;nbsp;위치&amp;nbsp;확인 &lt;br /&gt;jupyter&amp;nbsp;--paths &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;설정&amp;nbsp;디렉토리&amp;nbsp;백업&amp;nbsp;및&amp;nbsp;초기화 &lt;br /&gt;mv&amp;nbsp;~/.jupyter&amp;nbsp;~/.jupyter_backup &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;이후&amp;nbsp;JupyterLab을&amp;nbsp;다시&amp;nbsp;실행하면&amp;nbsp;새로운&amp;nbsp;설정&amp;nbsp;파일이&amp;nbsp;생성됩니다. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;3.&amp;nbsp;확장&amp;nbsp;프로그램&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;설치된&amp;nbsp;확장&amp;nbsp;프로그램이&amp;nbsp;문제를&amp;nbsp;일으킬&amp;nbsp;수&amp;nbsp;있습니다: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;확장&amp;nbsp;프로그램&amp;nbsp;목록&amp;nbsp;확인 &lt;br /&gt;jupyter&amp;nbsp;labextension&amp;nbsp;list &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;모든&amp;nbsp;확장&amp;nbsp;프로그램&amp;nbsp;제거 &lt;br /&gt;jupyter&amp;nbsp;labextension&amp;nbsp;uninstall&amp;nbsp;@jupyterlab/extension-name &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;여러&amp;nbsp;확장&amp;nbsp;프로그램이&amp;nbsp;있다면&amp;nbsp;하나씩&amp;nbsp;제거해&amp;nbsp;보세요. &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;4.&amp;nbsp;완전&amp;nbsp;재설치 &lt;br /&gt;&lt;br /&gt;JupyterLab을&amp;nbsp;완전히&amp;nbsp;제거하고&amp;nbsp;재설치하는&amp;nbsp;방법: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;제거 &lt;br /&gt;pip&amp;nbsp;uninstall&amp;nbsp;jupyterlab &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;캐시&amp;nbsp;파일&amp;nbsp;정리 &lt;br /&gt;rm&amp;nbsp;-rf&amp;nbsp;~/.jupyter/lab &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;재설치 &lt;br /&gt;pip&amp;nbsp;install&amp;nbsp;jupyterlab &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;5.&amp;nbsp;데이터베이스&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;JupyterLab의&amp;nbsp;내부&amp;nbsp;데이터베이스를&amp;nbsp;초기화: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;데이터베이스&amp;nbsp;위치&amp;nbsp;확인 &lt;br /&gt;jupyter&amp;nbsp;lab&amp;nbsp;path &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;데이터베이스&amp;nbsp;초기화 &lt;br /&gt;jupyter&amp;nbsp;lab&amp;nbsp;--reset-db &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;6.&amp;nbsp;환경&amp;nbsp;변수&amp;nbsp;설정&amp;nbsp;및&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;환경&amp;nbsp;변수를&amp;nbsp;설정하여&amp;nbsp;JupyterLab의&amp;nbsp;동작을&amp;nbsp;초기화: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;런타임&amp;nbsp;디렉토리&amp;nbsp;변경 &lt;br /&gt;export&amp;nbsp;JUPYTER_RUNTIME_DIR=~/jupyter_runtime &lt;br /&gt;export&amp;nbsp;JUPYTER_DATA_DIR=~/jupyter_data &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;디렉토리&amp;nbsp;생성 &lt;br /&gt;mkdir&amp;nbsp;-p&amp;nbsp;~/jupyter_runtime&amp;nbsp;~/jupyter_data &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;권한&amp;nbsp;설정 &lt;br /&gt;chmod&amp;nbsp;755&amp;nbsp;~/jupyter_runtime&amp;nbsp;~/jupyter_data &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;7.&amp;nbsp;사용자&amp;nbsp;설정&amp;nbsp;파일&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;사용자별&amp;nbsp;설정&amp;nbsp;파일을&amp;nbsp;초기화: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;설정&amp;nbsp;파일&amp;nbsp;위치&amp;nbsp;확인 &lt;br /&gt;jupyter&amp;nbsp;--config-dir &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;설정&amp;nbsp;파일&amp;nbsp;초기화 &lt;br /&gt;rm&amp;nbsp;-rf&amp;nbsp;~/.jupyter/lab/user-settings/* &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;###&amp;nbsp;8.&amp;nbsp;커널&amp;nbsp;초기화 &lt;br /&gt;&lt;br /&gt;Jupyter&amp;nbsp;커널을&amp;nbsp;초기화: &lt;br /&gt;&lt;br /&gt;```bash &lt;br /&gt;#&amp;nbsp;커널&amp;nbsp;목록&amp;nbsp;확인 &lt;br /&gt;jupyter&amp;nbsp;kernelspec&amp;nbsp;list &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;특정&amp;nbsp;커널&amp;nbsp;제거 &lt;br /&gt;jupyter&amp;nbsp;kernelspec&amp;nbsp;uninstall&amp;nbsp;kernel_name &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;새&amp;nbsp;커널&amp;nbsp;설치 &lt;br /&gt;python&amp;nbsp;-m&amp;nbsp;ipykernel&amp;nbsp;install&amp;nbsp;--user&amp;nbsp;--name=new_kernel &lt;br /&gt;``` &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;&lt;br /&gt;문제&amp;nbsp;해결&amp;nbsp;후에는&amp;nbsp;JupyterLab을&amp;nbsp;다시&amp;nbsp;시작하여&amp;nbsp;정상&amp;nbsp;작동하는지&amp;nbsp;확인하세요.&amp;nbsp;초기화&amp;nbsp;후에도&amp;nbsp;문제가&amp;nbsp;지속된다면,&amp;nbsp;시스템&amp;nbsp;로그를&amp;nbsp;확인하거나&amp;nbsp;더&amp;nbsp;구체적인&amp;nbsp;오류&amp;nbsp;메시지를&amp;nbsp;분석하여&amp;nbsp;추가적인&amp;nbsp;문제&amp;nbsp;해결&amp;nbsp;방법을&amp;nbsp;찾아볼&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;=======================================================&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(base)&amp;nbsp;jovyan@66ff31e068a0:~$&amp;nbsp;ps&amp;nbsp;-ef&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;jupyter &lt;br /&gt;jovyan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;0&amp;nbsp;14:17&amp;nbsp;?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00:02&amp;nbsp;/opt/conda/bin/python3.11&amp;nbsp;/opt/conda/bin/jupyter-lab &lt;br /&gt;jovyan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1134&amp;nbsp;&amp;nbsp;&amp;nbsp;616&amp;nbsp;&amp;nbsp;0&amp;nbsp;14:24&amp;nbsp;pts/1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00:00&amp;nbsp;grep&amp;nbsp;--color=auto&amp;nbsp;jupyter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;======================================================= &lt;br /&gt;(base)&amp;nbsp;jovyan@66ff31e068a0:~$&amp;nbsp;jupyter-lab&amp;nbsp;clean &lt;br /&gt;[LabCleanApp]&amp;nbsp;Cleaning&amp;nbsp;/opt/conda/share/jupyter/lab... &lt;br /&gt;[LabCleanApp]&amp;nbsp;staging&amp;nbsp;not&amp;nbsp;present,&amp;nbsp;skipping... &lt;br /&gt;[LabCleanApp]&amp;nbsp;Success!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=======================================================&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(base)&amp;nbsp;jovyan@66ff31e068a0:~$&amp;nbsp;jupyter-lab&amp;nbsp;build &lt;br /&gt;[LabBuildApp]&amp;nbsp;JupyterLab&amp;nbsp;4.0.7 &lt;br /&gt;[LabBuildApp]&amp;nbsp;Building&amp;nbsp;in&amp;nbsp;/opt/conda/share/jupyter/lab &lt;br /&gt;[LabBuildApp]&amp;nbsp;Building&amp;nbsp;jupyterlab&amp;nbsp;assets&amp;nbsp;(production,&amp;nbsp;minimized) &lt;br /&gt;[LabBuildApp]&amp;nbsp;WARNING&amp;nbsp;|&amp;nbsp;The&amp;nbsp;extension&amp;nbsp;&quot;nbdime-jupyterlab&quot;&amp;nbsp;is&amp;nbsp;outdated. &lt;br /&gt;&lt;br /&gt;(base)&amp;nbsp;jovyan@66ff31e068a0:~$&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=======================================================&lt;/p&gt;</description>
      <category>Python/Jupyter notebook</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/49</guid>
      <comments>https://logmario.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 8 Apr 2025 23:12:48 +0900</pubDate>
    </item>
    <item>
      <title>docker 세팅</title>
      <link>https://logmario.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;.env&lt;/p&gt;
&lt;pre id=&quot;code_1743347665353&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;OPENSEARCH_INITIAL_ADMIN_PASSWORD=Naver12#$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;docker-compose.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1743347685081&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: '3'
services:

  jupyter:
    image: jupyter/all-spark-notebook
    ports:
      - &quot;8887:8888&quot;  # jupyter 접속포트
      - &quot;4041:4040&quot;  # spark 접속포트
    volumes:
      - C:\Users\SUN\Documents\sop_folder\jupyter:/home/jovyan
    networks:
      - opensearch-net

  opensearch-node1:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - &quot;OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m&quot;
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
    networks:
      - opensearch-net

  opensearch-node2:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - &quot;OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m&quot;
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch-data2:/usr/share/opensearch/data
    networks:
      - opensearch-net

  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:latest
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    expose:
      - &quot;5601&quot;
    environment:
      OPENSEARCH_HOSTS: '[&quot;https://opensearch-node1:9200&quot;,&quot;https://opensearch-node2:9200&quot;]'
    networks:
      - opensearch-net

volumes:
  opensearch-data1:
  opensearch-data2:

networks:
  opensearch-net:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.env 파일과 docker-compose.yaml파일이 있는 곳에&lt;br /&gt;jupyter폴더 만들기&lt;/p&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/48</guid>
      <comments>https://logmario.tistory.com/48#entry48comment</comments>
      <pubDate>Mon, 31 Mar 2025 00:16:04 +0900</pubDate>
    </item>
    <item>
      <title>[airflow] [성공] 텍스트파일을 N만큼 파일수를 분할해서 저장</title>
      <link>https://logmario.tistory.com/47</link>
      <description>&lt;pre id=&quot;code_1739889896778&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from airflow import DAG
import pendulum
from airflow.operators.python import PythonOperator
from airflow.providers.sftp.operators.sftp import SFTPHook, SFTPOperator
import math

def split_file(input_file, n):
    # 입력 파일 읽기
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.readlines()
    
    # 전체 라인 수
    total_lines = len(content)
    
    # 각 파일에 들어갈 라인 수 계산
    lines_per_file = math.ceil(total_lines / n)
    
    # 파일 분할 및 저장
    for i in range(n):
        start = i * lines_per_file
        end = min((i + 1) * lines_per_file, total_lines)
        
        # 새 파일명 생성 (원본 파일명_001.txt 형식)
        # output_file = f&quot;{input_file.rsplit('.', 1)[0]}_{i+1:03d}.{input_file.rsplit('.', 1)[1]}&quot;
        output_file = f&quot;{input_file.rsplit('.', 1)[0]}_{i:03d}.{input_file.rsplit('.', 1)[1]}&quot;
        
        # 파일 저장
        with open(output_file, 'w', encoding='utf-8') as file:
            file.writelines(content[start:end])
        
        print(f&quot;파일 저장 완료: {output_file}&quot;)

with DAG(
        dag_id='hynix_pluto_split_file',
        start_date=pendulum.datetime(2024, 7, 1, tz='Asia/Seoul'),
        schedule=None,
        catchup=False
) as dag:
    
    split_file_op = PythonOperator(
        task_id='split_file_op',
        python_callable=split_file,
        op_kwargs={
            'input_file':'/opt/airflow/dags/TbCorona19CountStatus.csv',
            'n': 10
            }
    )

split_file_op&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/47</guid>
      <comments>https://logmario.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 18 Feb 2025 23:45:12 +0900</pubDate>
    </item>
    <item>
      <title>[airflow] 일반 텍스트 파일을 N개수로 나누는 파이썬 로직</title>
      <link>https://logmario.tistory.com/46</link>
      <description>&lt;pre id=&quot;code_1739888428641&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math

def split_file(input_file, n):
    # 입력 파일 읽기
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.readlines()
    
    # 전체 라인 수
    total_lines = len(content)
    
    # 각 파일에 들어갈 라인 수 계산
    lines_per_file = math.ceil(total_lines / n)
    
    # 파일 분할 및 저장
    for i in range(n):
        start = i * lines_per_file
        end = min((i + 1) * lines_per_file, total_lines)
        
        # 새 파일명 생성 (원본 파일명_001.txt 형식)
        output_file = f&quot;{input_file.rsplit('.', 1)[0]}_{i+1:03d}.{input_file.rsplit('.', 1)[1]}&quot;
        
        # 파일 저장
        with open(output_file, 'w', encoding='utf-8') as file:
            file.writelines(content[start:end])
        
        print(f&quot;파일 저장 완료: {output_file}&quot;)

# 사용 예시
input_file = &quot;example.txt&quot;  # 분할할 원본 파일명
n = 5  # 분할할 파일 수

split_file(input_file, n)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/46</guid>
      <comments>https://logmario.tistory.com/46#entry46comment</comments>
      <pubDate>Tue, 18 Feb 2025 23:21:13 +0900</pubDate>
    </item>
    <item>
      <title>[airfow] tsv파일을 10개 파일로 나누는 로직</title>
      <link>https://logmario.tistory.com/45</link>
      <description>&lt;pre id=&quot;code_1739888096160&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from airflow import DAG
import pendulum
from airflow.operators.python import PythonOperator
from airflow.providers.sftp.operators.sftp import SFTPHook, SFTPOperator
import csv
import math

def split_tsv(input_file, output_prefix, n):
    # TSV 파일 읽기
    with open(input_file, 'r', encoding='utf-8') as file:
        reader = csv.reader(file, delimiter='\t')
        data = list(reader)
    
    # 헤더와 데이터 분리
    header = data[0]
    rows = data[1:]
    
    # 각 파일에 들어갈 행 수 계산
    total_rows = len(rows)
    rows_per_file = math.ceil(total_rows / n)
    
    # 파일 분할 및 저장
    for i in range(n):
        start = i * rows_per_file
        end = min((i + 1) * rows_per_file, total_rows)
        
        output_file = f&quot;{output_prefix}_{i+1}&quot;
        
        with open(output_file, 'w', encoding='utf-8', newline='') as file:
            writer = csv.writer(file, delimiter='\t')
            writer.writerow(header)
            writer.writerows(rows[start:end])
        
        print(f&quot;파일 저장 완료: {output_file}&quot;)

# 사용 예시
# input_file = &quot;TbCorona19CountStatus.csv&quot;  # 입력 TSV 파일 이름
# output_prefix = &quot;output&quot;  # 출력 파일 접두사
# n = 1  # 분할할 파일 수


with DAG(
        dag_id='hynix_pluto',
        start_date=pendulum.datetime(2024, 7, 1, tz='Asia/Seoul'),
        schedule=None,
        catchup=False
) as dag:
    
    split_tsv_op = PythonOperator(
        task_id='split_tsv_op',
        python_callable=split_tsv,
        op_kwargs={
            'input_file':'/opt/airflow/dags/one_tsv_file_1.tsv',
            'output_prefix':'/opt/airflow/dags/sp/total_split',
            'n': 10
            }
    )

split_tsv_op&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/45</guid>
      <comments>https://logmario.tistory.com/45#entry45comment</comments>
      <pubDate>Tue, 18 Feb 2025 23:15:39 +0900</pubDate>
    </item>
    <item>
      <title>[airflow] csv 파일을 tsv파일로 변환</title>
      <link>https://logmario.tistory.com/44</link>
      <description>&lt;pre id=&quot;code_1739887155961&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from airflow import DAG
import pendulum
from airflow.operators.python import PythonOperator
from airflow.providers.sftp.operators.sftp import SFTPHook, SFTPOperator
import csv
import math

def split_tsv(input_file, output_prefix, n):
    # TSV 파일 읽기
    with open(input_file, 'r', encoding='utf-8') as file:
        reader = csv.reader(file, delimiter=',')
        data = list(reader)
    
    # 헤더와 데이터 분리
    header = data[0]
    rows = data[1:]
    
    # 각 파일에 들어갈 행 수 계산
    total_rows = len(rows)
    rows_per_file = math.ceil(total_rows / n)
    
    # 파일 분할 및 저장
    for i in range(n):
        start = i * rows_per_file
        end = min((i + 1) * rows_per_file, total_rows)
        
        output_file = f&quot;{output_prefix}_{i+1}.tsv&quot;
        
        with open(output_file, 'w', encoding='utf-8', newline='') as file:
            writer = csv.writer(file, delimiter='\t')
            writer.writerow(header)
            writer.writerows(rows[start:end])
        
        print(f&quot;파일 저장 완료: {output_file}&quot;)

# 사용 예시
# input_file = &quot;TbCorona19CountStatus.csv&quot;  # 입력 TSV 파일 이름
# output_prefix = &quot;output&quot;  # 출력 파일 접두사
# n = 1  # 분할할 파일 수


with DAG(
        dag_id='hynix_pluto',
        start_date=pendulum.datetime(2024, 7, 1, tz='Asia/Seoul'),
        schedule=None,
        catchup=False
) as dag:
    
    split_tsv_op = PythonOperator(
        task_id='split_tsv_op',
        python_callable=split_tsv,
        op_kwargs={
            'input_file':'/opt/airflow/dags/TbCorona19CountStatus.csv',
            'output_prefix':'/opt/airflow/dags/one_tsv_file',
            'n': 1
            }
    )

split_tsv_op&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/44</guid>
      <comments>https://logmario.tistory.com/44#entry44comment</comments>
      <pubDate>Tue, 18 Feb 2025 22:59:36 +0900</pubDate>
    </item>
    <item>
      <title>n개의 수만큼 파일을 분할 하는 파이썬로직</title>
      <link>https://logmario.tistory.com/43</link>
      <description>&lt;pre id=&quot;code_1739873971192&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import csv
import math

def split_tsv(input_file, output_prefix, n):
    # TSV 파일 읽기
    with open(input_file, 'r', encoding='utf-8') as file:
        reader = csv.reader(file, delimiter='\t')
        data = list(reader)
    
    # 헤더와 데이터 분리
    header = data[0]
    rows = data[1:]
    
    # 각 파일에 들어갈 행 수 계산
    total_rows = len(rows)
    rows_per_file = math.ceil(total_rows / n)
    
    # 파일 분할 및 저장
    for i in range(n):
        start = i * rows_per_file
        end = min((i + 1) * rows_per_file, total_rows)
        
        output_file = f&quot;{output_prefix}_{i+1}.tsv&quot;
        
        with open(output_file, 'w', encoding='utf-8', newline='') as file:
            writer = csv.writer(file, delimiter='\t')
            writer.writerow(header)
            writer.writerows(rows[start:end])
        
        print(f&quot;파일 저장 완료: {output_file}&quot;)

# 사용 예시
input_file = &quot;input.tsv&quot;  # 입력 TSV 파일 이름
output_prefix = &quot;output&quot;  # 출력 파일 접두사
n = 3  # 분할할 파일 수

split_tsv(input_file, output_prefix, n)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python/Airflow</category>
      <author>로그마리오</author>
      <guid isPermaLink="true">https://logmario.tistory.com/43</guid>
      <comments>https://logmario.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 18 Feb 2025 19:19:44 +0900</pubDate>
    </item>
  </channel>
</rss>