<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CtrlMan</title>
    <link>https://stella47.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 19 May 2026 00:14:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bu_ctrlMan</managingEditor>
    <item>
      <title>DJI FPV 조종기3 으로 FPV simulator 해보기</title>
      <link>https://stella47.tistory.com/639</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 준비물&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DJI FPV 조종기3 (한화 약 20만원)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데스크탑 or 노트북&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FPV simulator 구매 (제품별로 다르나 5천원 ~ 2만원 대)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 컴퓨터에 DJI FPV 조종기 인식시키기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DJI Assistant 를 설치한다. (&lt;a href=&quot;https://www.dji.com/kr/downloads/softwares/dji-assistant-2-consumer-drones-series&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 조종기3을 최신 펌웨어로 업데이트 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. FPV Simulator 를 구매하여 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 종류를 구매/설치해볼 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;가격&lt;br /&gt;(26.05.04 기준)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details/FPV_Freerider_demo?id=com.Freeride.Freerider_FREE&amp;amp;hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FPV Freerider Demo&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: right;&quot;&gt;(무료)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;a href=&quot;https://store.steampowered.com/app/854250/FPV_Freerider/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FPV&amp;nbsp;Freerider&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: right;&quot;&gt;6,500 원&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;a href=&quot;https://store.steampowered.com/app/641780/The_Drone_Racing_League_Simulator/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;The&amp;nbsp;Drone&amp;nbsp;Racing&amp;nbsp;League&amp;nbsp;Simulator&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: right;&quot;&gt;10,500 원&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;a href=&quot;https://store.steampowered.com/app/410340/Liftoff_FPV_Drone_Racing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Liftoff&amp;reg;:&amp;nbsp;FPV&amp;nbsp;Drone&amp;nbsp;Racing&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: right;&quot;&gt;25,000 ~ 46,300 원&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 FPV Freerider Demo 와 DRL 을 설치했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Freerider Demo는 DJI FPV 조종기 3이 인식되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DRL 은 자동으로 인식되며, 조종기 캘리브레이션을 수행할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>UAV</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/639</guid>
      <comments>https://stella47.tistory.com/639#entry639comment</comments>
      <pubDate>Mon, 4 May 2026 13:45:03 +0900</pubDate>
    </item>
    <item>
      <title>에이전틱 프로그래밍 데모 해보기 (2/2, Google Gemini)</title>
      <link>https://stella47.tistory.com/637</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 글에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://stella47.tistory.com/636&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;로컬 LLM을 이용하여 에이전틱 프로그래밍 데모 해보기&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; 를 진행해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 문제가 있었는데, 테스트로 xeyes 를 만들어보라고 했을 때, llama3.1:8b 모델은 경량이라 그런지 하는 시늉만 하는 느낌이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Google Gemini 를 연동하여 해보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제점 발견 : llama 모델의 한계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;llama 모델이 시늉만 한다는 내역을 아래와 같이 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 코드로 에이전트를 통해서 xeyes 프로그램을 생성하도록 실행시켜보았다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775975082264&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
from crewai import Agent, Task, Crew, LLM

# 1. 로컬 Ollama 환경 설정
# Ollama는 기본적으로 11434 포트에서 OpenAI와 호환되는 로컬 API 서버를 제공합니다.
os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;ollama&quot; # 로컬 환경이므로 임의의 문자열을 넣으면 됩니다.

# 가지고 계신 8B 모델의 정확한 이름으로 변경하세요 (예: 'llama3', 'gemma:7b', 'phi3' 등)
target_model = &quot;llama3.1:8b&quot; 

llm = LLM(
    model=target_model,
    base_url=&quot;http://localhost:11434&quot;,
    temperature=0.1
)

# 2. 에이전트 정의
developer = Agent(
    role='GUI 프로그래밍 전문가',
    goal='요구사항을 완벽히 준수하는 파이썬 코드를 작성합니다.',
    backstory='당신은 특히 tkinter의 Canvas 위젯 작업 시 &quot;이전 프레임 삭제(delete)&quot;와 &quot;정확한 좌표 계산&quot;을 가장 중요하게 생각합니다.',
    llm=llm
)

reviewer = Agent(
    role='코드 품질 및 로직 검수관',
    goal='작성된 코드에서 불필요한 기능(코 등)이 포함되었는지, 화면 초기화 로직이 있는지 검사합니다.',
    backstory='당신은 사용자의 요구사항에 없는 기능이 추가되는 것을 극도로 싫어하며, 리소스 낭비(초기화 누락)를 찾아내는 전문가입니다.',
    llm=llm
)

# 3. 작업 정의 (문제를 명시적으로 해결하도록 지시)
coding_task = Task(
    description='''
    파이썬 tkinter를 이용해 xeyes를 만드세요.
    [필수 해결 과제]
    1. 화면 갱신 시 반드시 canvas.delete(&quot;all&quot;)을 호출하여 잔상이 남지 않게 하세요.
    2. '두 눈(흰자)'과 '두 눈동자(검은색)'만 그리세요. 코(Nose)나 입 등 다른 얼굴 부위는 절대로 그리지 마세요.
    3. 눈동자는 반드시 눈(흰자)의 영역 안에서만 움직여야 합니다. (삼각함수 사용)
    ''',
    expected_output='버그가 수정된 파이썬 소스 코드',
    agent=developer
)

review_task = Task(
    description='''
    전달받은 코드를 검토하세요. 
    - canvas.delete(&quot;all&quot;) 혹은 유사한 초기화 코드가 없다면 다시 작성하도록 지시하세요.
    - 코(Nose)를 그리는 코드가 포함되어 있다면 즉시 삭제하세요.
    - 모든 검토가 끝나면 최종 코드를 'fixed_xeyes.py'로 저장하세요.
    ''',
    expected_output='최종 검수 완료된 파이썬 코드',
    output_file='fixed_xeyes.py',
    agent=reviewer,
    context=[coding_task]
)

# 4. 실행
crew = Crew(
    agents=[developer, reviewer],
    tasks=[coding_task, review_task],
    verbose=True
)

crew.kickoff()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;llama3.1:8b의 결과물&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스 움직임에 눈이 따라다니지 않는다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 생성 결과에 따라서는 실행 조차 되지 않는 경우가 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4QXf/dJMcacJwflF/FI7OJ9J2mb0X4KImSWr7zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4QXf/dJMcacJwflF/FI7OJ9J2mb0X4KImSWr7zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4QXf/dJMcacJwflF/FI7OJ9J2mb0X4KImSWr7zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4QXf%2FdJMcacJwflF%2FFI7OJ9J2mb0X4KImSWr7zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;468&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 코드는 아래 접은 글을 펼쳐서 확인 할 수 있다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775975423043&quot; class=&quot;crystal&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# ```python
import tkinter as tk
import math

class Xeyes:
    def __init__(self):
        self.root = tk.Tk()
        self.canvas = tk.Canvas(self.root, width=400, height=400)
        self.canvas.pack()

        self.eye_radius = 50
        self.pupil_radius = 10
        self.eye_x = 200
        self.eye_y = 150

    def update(self):
        self.canvas.delete(&quot;all&quot;) # 초기화 코드 추가
        self.canvas.create_oval(self.eye_x - self.eye_radius, self.eye_y - self.eye_radius,
                                self.eye_x + self.eye_radius, self.eye_y + self.eye_radius)
        self.canvas.create_oval(self.eye_x - self.pupil_radius, self.eye_y - self.pupil_radius,
                                self.eye_x + self.pupil_radius, self.eye_y + self.pupil_radius)

    def move_pupil(self):
        angle = 0
        x = self.eye_x + (self.eye_radius - self.pupil_radius) * math.cos(angle)
        y = self.eye_y + (self.eye_radius - self.pupil_radius) * math.sin(angle)
        self.canvas.create_oval(x - self.pupil_radius, y - self.pupil_radius,
                                x + self.pupil_radius, y + self.pupil_radius)

    def run(self):
        self.root.after(1000 // 60, self.update)
        self.move_pupil()
        self.root.mainloop()

xeyes = Xeyes()
xeyes.run()
# ```&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gemini 연동하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gemini 연동에 필요한 구글 SDK 패키지를 추가로 설치해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어로 설치하도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1775975391125&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install langchain-google-genai&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gemini API Key 획득하기&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;Google AI Studio 접속:&lt;/b&gt; &lt;a href=&quot;https://aistudio.google.com/&quot; data-ved=&quot;0CAAQ_4QMahgKEwjxx9XkreeTAxUAAAAAHQAAAAAQ7gI&quot; data-hveid=&quot;0&quot;&gt;Google AI Studio (aistudio.google.com)&lt;/a&gt;에 Google 계정으로 로그인합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;API 키 생성:&lt;/b&gt; 좌측 메뉴에서 **'Get API key'**를 클릭한 후, &lt;b data-index-in-node=&quot;44&quot; data-path-to-node=&quot;6,1,0&quot;&gt;'Create API key'&lt;/b&gt; 버튼을 누릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0&quot;&gt;프로젝트 선택:&lt;/b&gt; 새로운 Google Cloud 프로젝트를 생성하거나 기존 프로젝트를 선택하여 키를 발급받습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,3,0&quot;&gt;키 복사:&lt;/b&gt; 생성된 AIzaSy... 로 시작하는 문자열을 복사해 둡니다. 이 키는 절대 외부에 노출되지 않도록 주의해야 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gemini 를 연동하기 위한 코드 수정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 코드의 상단을 아래와 같이 바꾼다.&lt;/p&gt;
&lt;pre id=&quot;code_1775975542191&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. Google Gemini 환경 설정
# 발급받은 구글 API 키를 환경 변수에 등록합니다.
os.environ[&quot;GEMINI_API_KEY&quot;] = &quot;AIza*****&quot;

# CrewAI 내부의 LiteLLM 라우터를 통해 Gemini를 호출합니다.
# 모델 이름 앞에 'gemini/'를 붙여주는 것이 핵심입니다.
llm = LLM(
    # model=&quot;gemini/gemini-2.5-pro&quot;, # 가장 똑똑하고 추론 능력이 뛰어난 Pro 모델 (복잡한 코딩, 아키텍처 설계용)
    model=&quot;gemini/gemini-2.5-flash&quot;, # 빠르고 가성비가 좋은 Flash 모델 (가벼운 스크립트, 데모 테스트용)
    temperature=0.1
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드는 아래의 접은 글을 펼쳐서 확인할 수 있다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775975649195&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
from crewai import Agent, Task, Crew, LLM

# 1. Google Gemini 환경 설정
# 발급받은 구글 API 키를 환경 변수에 등록합니다.
os.environ[&quot;GEMINI_API_KEY&quot;] = &quot;AIza****&quot;

# CrewAI 내부의 LiteLLM 라우터를 통해 Gemini를 호출합니다.
# 모델 이름 앞에 'gemini/'를 붙여주는 것이 핵심입니다.
llm = LLM(
    # model=&quot;gemini/gemini-2.5-pro&quot;, # 가장 똑똑하고 추론 능력이 뛰어난 Pro 모델 (복잡한 코딩, 아키텍처 설계용)
    model=&quot;gemini/gemini-2.5-flash&quot;, # 빠르고 가성비가 좋은 Flash 모델 (가벼운 스크립트, 데모 테스트용)
    temperature=0.1
)

# 2. 에이전트 정의
developer = Agent(
    role='GUI 프로그래밍 전문가',
    goal='요구사항을 완벽히 준수하는 파이썬 코드를 작성합니다.',
    backstory='당신은 특히 tkinter의 Canvas 위젯 작업 시 &quot;이전 프레임 삭제(delete)&quot;와 &quot;정확한 좌표 계산&quot;을 가장 중요하게 생각합니다.',
    llm=llm
)

reviewer = Agent(
    role='코드 품질 및 로직 검수관',
    goal='작성된 코드에서 불필요한 기능(코 등)이 포함되었는지, 화면 초기화 로직이 있는지 검사합니다.',
    backstory='당신은 사용자의 요구사항에 없는 기능이 추가되는 것을 극도로 싫어하며, 리소스 낭비(초기화 누락)를 찾아내는 전문가입니다.',
    llm=llm
)

# 3. 작업 정의 (문제를 명시적으로 해결하도록 지시)
coding_task = Task(
    description='''
    파이썬 tkinter를 이용해 xeyes를 만드세요.
    [필수 해결 과제]
    1. 화면 갱신 시 반드시 canvas.delete(&quot;all&quot;)을 호출하여 잔상이 남지 않게 하세요.
    2. '두 눈(흰자)'과 '두 눈동자(검은색)'만 그리세요. 코(Nose)나 입 등 다른 얼굴 부위는 절대로 그리지 마세요.
    3. 눈동자는 반드시 눈(흰자)의 영역 안에서만 움직여야 합니다. (삼각함수 사용)
    ''',
    expected_output='버그가 수정된 파이썬 소스 코드',
    agent=developer
)

review_task = Task(
    description='''
    전달받은 코드를 검토하세요. 
    - canvas.delete(&quot;all&quot;) 혹은 유사한 초기화 코드가 없다면 다시 작성하도록 지시하세요.
    - 코(Nose)를 그리는 코드가 포함되어 있다면 즉시 삭제하세요.
    - 모든 검토가 끝나면 최종 코드를 'fixed_xeyes.py'로 저장하세요.
    ''',
    expected_output='최종 검수 완료된 파이썬 코드',
    output_file='fixed_xeyes.py',
    agent=reviewer,
    context=[coding_task]
)

# 4. 실행
crew = Crew(
    agents=[developer, reviewer],
    tasks=[coding_task, review_task],
    verbose=True
)

crew.kickoff()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드를 실행하면 아래의 결과를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스가 위치한 곳으로 눈동자가 움직이는 것을 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb2Zhj/dJMcaadQ4Fl/tDNd7NZMHydHI9E59QDFZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb2Zhj/dJMcaadQ4Fl/tDNd7NZMHydHI9E59QDFZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb2Zhj/dJMcaadQ4Fl/tDNd7NZMHydHI9E59QDFZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb2Zhj%2FdJMcaadQ4Fl%2FtDNd7NZMHydHI9E59QDFZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;318&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gemini가 생성하는 코드가 확실히 더 괜찮은 품질의 코드를 생성하는 것을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gemini가 생성한 코드는 아래 접은 글을 펼치면 나온다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775975829151&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 제시된 코드를 검토한 결과, 다음 사항을 확인했습니다.

# 1.  **`canvas.delete(&quot;all&quot;)` 호출**: `draw_eyes` 함수 내에서 `self.canvas.delete(&quot;all&quot;)`이 명확하게 호출되어 이전 프레임을 지우고 잔상이 남지 않도록 합니다. 초기화 로직이 올바르게 구현되어 있습니다.
# 2.  **코(Nose) 그리는 코드 포함 여부**: 코드를 면밀히 검토한 결과, 눈(흰자위)과 눈동자(검은색)를 그리는 코드 외에 코를 포함한 다른 얼굴 부위를 그리는 코드는 일절 포함되어 있지 않습니다. 불필요한 기능이 추가되지 않았습니다.

# 제시된 코드는 모든 검토 기준을 완벽하게 충족합니다. 따라서 수정할 부분이 없습니다.

# ```python
import tkinter as tk
import math

class XEyesApp:
    def __init__(self, master):
        self.master = master
        master.title(&quot;xeyes&quot;)
        master.resizable(False, False) # 창 크기 조절 방지

        # 캔버스 설정
        self.canvas_width = 400
        self.canvas_height = 250
        self.canvas = tk.Canvas(master, width=self.canvas_width, height=self.canvas_height, bg=&quot;lightgray&quot;)
        self.canvas.pack()

        # 눈(흰자) 및 눈동자(검은색) 파라미터 설정
        self.eye_radius = 60      # 흰자위의 반지름
        self.pupil_radius = 25    # 눈동자의 반지름
        self.eye_offset_x = 80    # 캔버스 중앙에서 각 눈의 중심까지의 수평 거리
        self.eye_offset_y = 0     # 캔버스 중앙에서 각 눈의 중심까지의 수직 거리 (현재는 중앙)

        # 캔버스 중앙 좌표 계산
        self.center_x = self.canvas_width / 2
        self.center_y = self.canvas_height / 2

        # 각 눈의 중심 좌표 계산
        self.left_eye_center = (self.center_x - self.eye_offset_x, self.center_y - self.eye_offset_y)
        self.right_eye_center = (self.center_x + self.eye_offset_x, self.center_y - self.eye_offset_y)

        # 눈동자가 눈(흰자) 영역을 벗어나지 않도록 하는 최대 이동 거리 계산
        # 눈동자 중심이 눈의 중심으로부터 이 거리 이상 떨어질 수 없습니다.
        self.max_pupil_dist = self.eye_radius - self.pupil_radius

        # 초기 마우스 위치 (캔버스 중앙으로 설정)
        self.mouse_x = self.center_x
        self.mouse_y = self.center_y

        # 마우스 움직임 이벤트 바인딩
        self.canvas.bind(&quot;&amp;lt;Motion&amp;gt;&quot;, self.on_mouse_move)
        
        # 초기 화면 그리기
        self.draw_eyes()

    def on_mouse_move(self, event):
        &quot;&quot;&quot;마우스 움직임 이벤트 핸들러&quot;&quot;&quot;
        self.mouse_x = event.x
        self.mouse_y = event.y
        self.draw_eyes() # 마우스가 움직일 때마다 눈을 다시 그립니다.

    def draw_eyes(self):
        &quot;&quot;&quot;눈과 눈동자를 그리는 함수&quot;&quot;&quot;
        # 1. 화면 갱신 시 반드시 canvas.delete(&quot;all&quot;)을 호출하여 잔상이 남지 않게 하세요.
        self.canvas.delete(&quot;all&quot;)

        # 왼쪽 눈 그리기
        self._draw_single_eye(self.left_eye_center[0], self.left_eye_center[1])
        # 오른쪽 눈 그리기
        self._draw_single_eye(self.right_eye_center[0], self.right_eye_center[1])

    def _draw_single_eye(self, eye_cx, eye_cy):
        &quot;&quot;&quot;단일 눈(흰자)과 눈동자를 그리는 헬퍼 함수&quot;&quot;&quot;
        # 2. '두 눈(흰자)'만 그립니다.
        # 흰자위 그리기 (흰색 타원)
        self.canvas.create_oval(
            eye_cx - self.eye_radius, eye_cy - self.eye_radius,
            eye_cx + self.eye_radius, eye_cy + self.eye_radius,
            fill=&quot;white&quot;, outline=&quot;black&quot;, width=2
        )

        # 3. 눈동자는 반드시 눈(흰자)의 영역 안에서만 움직여야 합니다. (삼각함수 사용)
        # 눈의 중심에서 마우스 위치까지의 벡터 계산
        dx = self.mouse_x - eye_cx
        dy = self.mouse_y - eye_cy
        
        # 눈의 중심에서 마우스까지의 거리 계산
        dist_to_mouse = math.sqrt(dx**2 + dy**2)

        # 눈동자가 눈(흰자) 영역을 벗어나지 않도록 실제 이동 거리 제한
        # 마우스가 멀리 있어도 눈동자는 max_pupil_dist 이상 움직이지 않습니다.
        actual_pupil_dist = min(dist_to_mouse, self.max_pupil_dist)

        # 눈의 중심에서 마우스까지의 각도 계산 (삼각함수 사용)
        # math.atan2(y, x)는 x축 양의 방향과 점 (x, y) 사이의 각도를 라디안으로 반환합니다.
        angle = math.atan2(dy, dx)

        # 삼각함수를 사용하여 눈동자의 중심 좌표 계산
        pupil_cx = eye_cx + actual_pupil_dist * math.cos(angle)
        pupil_cy = eye_cy + actual_pupil_dist * math.sin(angle)

        # 2. '두 눈동자(검은색)'만 그립니다.
        # 눈동자 그리기 (검은색 타원)
        self.canvas.create_oval(
            pupil_cx - self.pupil_radius, pupil_cy - self.pupil_radius,
            pupil_cx + self.pupil_radius, pupil_cy + self.pupil_radius,
            fill=&quot;black&quot;, outline=&quot;black&quot;
        )

# 메인 실행 블록
if __name__ == &quot;__main__&quot;:
    root = tk.Tk()
    app = XEyesApp(root)
    root.mainloop()
# ```&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/637</guid>
      <comments>https://stella47.tistory.com/637#entry637comment</comments>
      <pubDate>Sun, 12 Apr 2026 15:37:13 +0900</pubDate>
    </item>
    <item>
      <title>에이전틱 프로그래밍 데모 해보기 (1/2, local LLM - Ollama)</title>
      <link>https://stella47.tistory.com/636</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;본 글은 에이전틱 프로그래밍을 체험하기 위해서 로컬 LLM을 세팅하고 데모를 해보는 글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 작성하기 위해서 Gemini 의 도움을 받았음을 알립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;에이전트 프레임워크, crewai 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 가상환경 설치하기 (Anacodna 설치)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Anaconda 웹 사이트에 가서 설치하자. (&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.anaconda.com/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 Anaconda를 설치하는 방법은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.anaconda.com/docs/getting-started/anaconda/install/linux-install&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;본 링크&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;를 참고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어를 입력하여 Anaconda 최신 배포버전을 설치한다 (글 작성 시기의 최신은 `25.12.02 배포이다.)&lt;/p&gt;
&lt;pre id=&quot;code_1775972075341&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://repo.anaconda.com/archive/Anaconda3-2025.12-2-Linux-x86_64.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 위 파일을 다운로드 받은 곳으로 가서 아래의 명령어를 입력하여 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775972108841&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash ~/Anaconda3-2025.12-2-Linux-x86_64.sh&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;yes를 입력하여 사용 약관에 동의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로, 기본 설치 위치에 대해 동의한다면 Enter 를 입력한다. 별도 원하는 위치가 있다면 절대 경로를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;conda 를 초기화한다면 이번에도 yes를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었다면 아래의 명령어를 입력하여 설치가 효력이 발생하도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1775972260017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 필요한 라이브러리 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 가상환경에서 아래의 명령어를 통해서 필수 라이브러리를 설치하자.&lt;/p&gt;
&lt;pre id=&quot;code_1775971896391&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install crewai langchain-openai&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로컬 LLM 세팅하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Docker 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 해본다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Ollama 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커를 통해서 Ollama 컨테이너를 생성/실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지가 없다면 알아서 다운로드 받아서 컨테이너를 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775970540603&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Terminal.1
docker run -d --gpus=all -p 11434:11434 --name ollama ollama/ollama&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력한 명령어를 설명하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-d&lt;/b&gt; : 백그라운드로 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;--gpus=all&lt;/b&gt; : 해당 컨테이너가 사용할 GPU 를 할당한다. (모두 할당함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-p [HostPort:ContainerPort]&lt;/b&gt; : 호스트-컨테이너의 포트를 포워딩한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;--name [ContainerName]&lt;/b&gt; : 컨테이너의 이름을 별도로 할당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ollama/ollama : 로컬에 설치되어있는 이미지의 이름으로, 이 이미지를 컨테이너로 생성/실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;llama3.1:8b 모델을 다운받고 컨테이너에 접속한다. (전체 용량은 4.9GB 정도이다.)&lt;/p&gt;
&lt;pre id=&quot;code_1775970520058&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Teminal.1
docker exec -it ollama ollama run llama3.1:8b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 새 터미널을 생성한 후, 아래의 코드를 실행해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1775972334271&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python main_llama.py&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;main.py 코드는 아래와 같다. 접은 글을 펼치면 코드가 나온다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775972388328&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# main_llama.py
import os
from crewai import Agent, Task, Crew, LLM

# 1. 로컬 Ollama 환경 설정
# Ollama는 기본적으로 11434 포트에서 OpenAI와 호환되는 로컬 API 서버를 제공합니다.
os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;ollama&quot; # 로컬 환경이므로 임의의 문자열을 넣으면 됩니다.

# 가지고 계신 8B 모델의 정확한 이름으로 변경하세요 (예: 'llama3', 'gemma:7b', 'phi3' 등)
target_model = &quot;llama3.1:8b&quot; 

llm = LLM(
    model=target_model,
    base_url=&quot;http://localhost:11434/v1&quot;, # Ollama의 로컬 엔드포인트 주소
    temperature=0.2
)

# --------------------------------------------------
# 2. 에이전트 정의 (The Agent)
# 에이전트에게 페르소나와 목표를 부여합니다.
# --------------------------------------------------
code_reviewer = Agent(
    role='시니어 소프트웨어 아키텍트',
    goal='주어진 코드의 구조적 결함을 찾고, 엄격한 코딩 스타일 가이드를 강제(Enforce)합니다.',
    backstory='당신은 20년 경력의 깐깐한 개발자입니다. 가독성이 떨어지거나 비효율적인 로직, 스타일 가이드를 어긴 코드를 보면 반드시 짚고 넘어갑니다. 항상 구체적인 개선 코드를 함께 제시합니다.',
    verbose=True, # 에이전트가 생각하는 과정을 콘솔에 출력
    allow_delegation=False, # 다른 에이전트에게 업무 위임 금지
    llm=llm
)

# --------------------------------------------------
# 3. 작업 정의 (The Task)
# 에이전트가 달성해야 할 구체적인 임무를 설명합니다.
# --------------------------------------------------

# 리뷰할 샘플 코드 (일부러 비효율적이고 스타일이 엉망인 코드)
sample_code = &quot;&quot;&quot;
def calc( a,b ):
    res=0
    for i in range(b): res+=a
    return res
print(calc( 5, 3 ))
&quot;&quot;&quot;

review_task = Task(
    description=f'다음 파이썬 코드를 분석하고 개선점을 제안하세요:\n\n{sample_code}\n\n결과물에는 발견된 문제점, 코딩 스타일 위반 사항, 그리고 리팩토링된 최종 코드가 포함되어야 합니다.',
    expected_output='문제점 분석 및 PEP8 스타일 가이드가 적용된 리팩토링 코드 보고서',
    agent=code_reviewer
)

# --------------------------------------------------
# 4. 크루 구성 및 실행 (The Crew)
# 에이전트와 작업을 묶어서 실행을 지시합니다.
# --------------------------------------------------
crew = Crew(
    agents=[code_reviewer],
    tasks=[review_task],
    verbose=True
)

print(&quot;  에이전트가 코드 리뷰를 시작합니다...\n&quot;)
result = crew.kickoff()

print(&quot;\n==============================================&quot;)
print(&quot;  최종 결과물:&quot;)
print(&quot;==============================================&quot;)
print(result)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해서 터미널에 아래의 결과물을 획득 할 수 있다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1775972728947&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  에이전트가 코드 리뷰를 시작합니다...

╭────────────────────────   Crew Execution Started ────────────────────────╮
│                                                                           │
│  Crew Execution Started                                                   │
│  Name: crew                                                               │
│  ID: 
│                                                                           │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

╭─────────────────────────────   Task Started ─────────────────────────────╮
│                                                                           │
│  Task Started                                                             │
│  Name: 다음 파이썬 코드를 분석하고 개선점을 제안하세요:                   │
│                                                                           │
│                                                                           │
│  def calc( a,b ):                                                         │
│      res=0                                                                │
│      for i in range(b): res+=a                                            │
│      return res                                                           │
│  print(calc( 5, 3 ))                                                      │
│                                                                           │
│                                                                           │
│  결과물에는 발견된 문제점, 코딩 스타일 위반 사항, 그리고 리팩토링된 최종  │
│  코드가 포함되어야 합니다.                                                │
│  ID:                               │
│                                                                           │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

╭────────────────────────────   Agent Started ─────────────────────────────╮
│                                                                           │
│  Agent: 시니어 소프트웨어 아키텍트                                        │
│                                                                           │
│  Task: 다음 파이썬 코드를 분석하고 개선점을 제안하세요:                   │
│                                                                           │
│                                                                           │
│  def calc( a,b ):                                                         │
│      res=0                                                                │
│      for i in range(b): res+=a                                            │
│      return res                                                           │
│  print(calc( 5, 3 ))                                                      │
│                                                                           │
│                                                                           │
│  결과물에는 발견된 문제점, 코딩 스타일 위반 사항, 그리고 리팩토링된 최종  │
│  코드가 포함되어야 합니다.                                                │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

╭────────────────────────── ✅ Agent Final Answer ──────────────────────────╮
│                                                                           │
│  Agent: 시니어 소프트웨어 아키텍트                                        │
│                                                                           │
│  Final Answer:                                                            │
│  **문제점 분석 및 리팩토링 코드 보고서**                                  │
│                                                                           │
│  ### 문제점 분석                                                          │
│                                                                           │
│  *   함수 이름 `calc`는 너무 짧고 의미가 모호합니다. 더 자세한 설명이     │
│  필요합니다.                                                              │
│  *   변수 이름 `a`, `b`은 의미를 명확하게 나타내지 않습니다. 더 자세한    │
│  설명이 필요합니다.                                                       │
│  *   로직은 간단하지만, `for` 루프를 사용하여 반복을 수행하는 것은        │
│  비효율적입니다. 더 빠른 방법으로 계산할 수 있습니다.                     │
│  *   함수 내에서 변수 `res`는 초기화가 너무 늦습니다. 초기화 시점에 바로  │
│  할당해도 됩니다.                                                         │
│                                                                           │
│  ### PEP8 스타일 가이드 위반 사항                                         │
│                                                                           │
│  *   함수 이름과 변수 이름이 영어로만 구성되어 있지 않습니다. PEP         │
│  8에서는 영어로만 사용하는 것을 권장합니다.                               │
│  *   함수 내에서 공백이 부족합니다. PEP 8에서는 공백을 적절히 사용하여    │
│  코드의 가독성을 높이는 것이 중요합니다.                                  │
│                                                                           │
│  ### 리팩토링된 최종 코드                                                 │
│                                                                           │
│  ```python                                                                │
│  def calculate_sum(a: int, b: int) -&amp;gt; int:                                │
│      &quot;&quot;&quot;                                                                  │
│      두 수를 더한 합을 반환한다.                                          │
│                                                                           │
│      Args:                                                                │
│          a (int): 첫 번째 숫자                                            │
│          b (int): 두 번째 숫자                                            │
│                                                                           │
│      Returns:                                                             │
│          int: 두 수의 합                                                  │
│      &quot;&quot;&quot;                                                                  │
│      return a * b                                                         │
│                                                                           │
│  print(calculate_sum(5, 3))                                               │
│  ```                                                                      │
│                                                                           │
│  ### 개선된 점                                                            │
│                                                                           │
│  *   함수 이름 `calculate_sum`은 더 자세하고 의미가 명확합니다.           │
│  *   변수 이름 `a`, `b`도 더 자세하게 설명되어 있습니다.                  │
│  *   로직이 더 빠르게 수행됩니다. `for` 루프 대신 곱셈을 사용하여 두      │
│  수의 합을 계산합니다.                                                    │
│  *   변수 `res`는 초기화 시점에 바로 할당됩니다.                          │
│                                                                           │
│  ### 참고                                                                 │
│                                                                           │
│  *   PEP 8은 파이썬 코딩 스타일 가이드입니다. 더 자세한 내용은 [PEP       │
│  8](https://www.python.org/dev/peps/pep-0008/)을 참조하세요.              │
│  *   리팩토링된 코드는 더 가독성 있고 유지보수하기 쉬운 코드를            │
│  제공합니다.                                                              │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

╭───────────────────────────   Task Completion ────────────────────────────╮
│                                                                           │
│  Task Completed                                                           │
│  Name: 다음 파이썬 코드를 분석하고 개선점을 제안하세요:                   │
│                                                                           │
│                                                                           │
│  def calc( a,b ):                                                         │
│      res=0                                                                │
│      for i in range(b): res+=a                                            │
│      return res                                                           │
│  print(calc( 5, 3 ))                                                      │
│                                                                           │
│                                                                           │
│  결과물에는 발견된 문제점, 코딩 스타일 위반 사항, 그리고 리팩토링된 최종  │
│  코드가 포함되어야 합니다.                                                │
│  Agent: 시니어 소프트웨어 아키텍트                                        │
│                                                                           │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯


==============================================
  최종 결과물:
==============================================
**문제점 분석 및 리팩토링 코드 보고서**

### 문제점 분석

*   함수 이름 `calc`는 너무 짧고 의미가 모호합니다. 더 자세한 설명이 필요합니다.
*   변수 이름 `a`, `b`은 의미를 명확하게 나타내지 않습니다. 더 자세한 설명이 필요합니다.
*   로직은 간단하지만, `for` 루프를 사용하여 반복을 수행하는 것은 비효율적입니다. 더 빠른 방법으로 계산할 수 있습니다.
*   함수 내에서 변수 `res`는 초기화가 너무 늦습니다. 초기화 시점에 바로 할당해도 됩니다.

### PEP8 스타일 가이드 위반 사항

*   함수 이름과 변수 이름이 영어로만 구성되어 있지 않습니다. PEP 8에서는 영어로만 사용하는 것을 권장합니다.
*   함수 내에서 공백이 부족합니다. PEP 8에서는 공백을 적절히 사용하여 코드의 가독성을 높이는 것이 중요합니다.

### 리팩토링된 최종 코드

```python
def calculate_sum(a: int, b: int) -&amp;gt; int:
    &quot;&quot;&quot;
    두 수를 더한 합을 반환한다.
    
    Args:
        a (int): 첫 번째 숫자
        b (int): 두 번째 숫자
        
    Returns:
        int: 두 수의 합
    &quot;&quot;&quot;
    return a * b

print(calculate_sum(5, 3))
```

### 개선된 점

*   함수 이름 `calculate_sum`은 더 자세하고 의미가 명확합니다.
*   변수 이름 `a`, `b`도 더 자세하게 설명되어 있습니다.
*   로직이 더 빠르게 수행됩니다. `for` 루프 대신 곱셈을 사용하여 두 수의 합을 계산합니다.
*   변수 `res`는 초기화 시점에 바로 할당됩니다.

### 참고

*   PEP 8은 파이썬 코딩 스타일 가이드입니다. 더 자세한 내용은 [PEP 8](https://www.python.org/dev/peps/pep-0008/)을 참조하세요.
*   리팩토링된 코드는 더 가독성 있고 유지보수하기 쉬운 코드를 제공합니다.
╭───────────────────────────── Crew Completion ─────────────────────────────╮
│                                                                           │
│  Crew Execution Completed                                                 │
│  Name: crew                                                               │
│  ID: 
│  Final Output: **문제점 분석 및 리팩토링 코드 보고서**                    │
│                                                                           │
│  ### 문제점 분석                                                          │
│                                                                           │
│  *   함수 이름 `calc`는 너무 짧고 의미가 모호합니다. 더 자세한 설명이     │
│  필요합니다.                                                              │
│  *   변수 이름 `a`, `b`은 의미를 명확하게 나타내지 않습니다. 더 자세한    │
│  설명이 필요합니다.                                                       │
│  *   로직은 간단하지만, `for` 루프를 사용하여 반복을 수행하는 것은        │
│  비효율적입니다. 더 빠른 방법으로 계산할 수 있습니다.                     │
│  *   함수 내에서 변수 `res`는 초기화가 너무 늦습니다. 초기화 시점에 바로  │
│  할당해도 됩니다.                                                         │
│                                                                           │
│  ### PEP8 스타일 가이드 위반 사항                                         │
│                                                                           │
│  *   함수 이름과 변수 이름이 영어로만 구성되어 있지 않습니다. PEP         │
│  8에서는 영어로만 사용하는 것을 권장합니다.                               │
│  *   함수 내에서 공백이 부족합니다. PEP 8에서는 공백을 적절히 사용하여    │
│  코드의 가독성을 높이는 것이 중요합니다.                                  │
│                                                                           │
│  ### 리팩토링된 최종 코드                                                 │
│                                                                           │
│  ```python                                                                │
│  def calculate_sum(a: int, b: int) -&amp;gt; int:                                │
│      &quot;&quot;&quot;                                                                  │
│      두 수를 더한 합을 반환한다.                                          │
│                                                                           │
│      Args:                                                                │
│          a (int): 첫 번째 숫자                                            │
│          b (int): 두 번째 숫자                                            │
│                                                                           │
│      Returns:                                                             │
│          int: 두 수의 합                                                  │
│      &quot;&quot;&quot;                                                                  │
│      return a * b                                                         │
│                                                                           │
│  print(calculate_sum(5, 3))                                               │
│  ```                                                                      │
│                                                                           │
│  ### 개선된 점                                                            │
│                                                                           │
│  *   함수 이름 `calculate_sum`은 더 자세하고 의미가 명확합니다.           │
│  *   변수 이름 `a`, `b`도 더 자세하게 설명되어 있습니다.                  │
│  *   로직이 더 빠르게 수행됩니다. `for` 루프 대신 곱셈을 사용하여 두      │
│  수의 합을 계산합니다.                                                    │
│  *   변수 `res`는 초기화 시점에 바로 할당됩니다.                          │
│                                                                           │
│  ### 참고                                                                 │
│                                                                           │
│  *   PEP 8은 파이썬 코딩 스타일 가이드입니다. 더 자세한 내용은 [PEP       │
│  8](https://www.python.org/dev/peps/pep-0008/)을 참조하세요.              │
│  *   리팩토링된 코드는 더 가독성 있고 유지보수하기 쉬운 코드를            │
│  제공합니다.                                                              │
│                                                                           │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

╭───────────────────────────── Tracing Status ──────────────────────────────╮
│                                                                           │
│  Info: Tracing is disabled.                                               │
│                                                                           │
│  To enable tracing, do any one of these:                                  │
│  &amp;bull; Set tracing=True in your Crew/Flow code                                │
│  &amp;bull; Set CREWAI_TRACING_ENABLED=true in your project's .env file            │
│  &amp;bull; Run: crewai traces enable                                              │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://boramchan-corgi.tistory.com/46&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://boramchan-corgi.tistory.com/46&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/636</guid>
      <comments>https://stella47.tistory.com/636#entry636comment</comments>
      <pubDate>Sun, 12 Apr 2026 14:45:38 +0900</pubDate>
    </item>
    <item>
      <title>Docker Image/Container 확인/실행/삭제 방법</title>
      <link>https://stella47.tistory.com/635</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;혼자서 docker 를 이래저래 해보는데, 명령어가 기억이 안나서 정리하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker Container 생성/시작하기&lt;/h3&gt;
&lt;pre id=&quot;code_1775968204929&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker container create # 컨테이너 생성하기
docker container start # 생성된 컨테이너 실행하기
docker container run # 컨테이너 생성 &amp;amp; 실행하기
docker run # 컨테이너 생성 &amp;amp; 실행하기
docker container stop # 컨테이너 정지하기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 컨테이너 주요 실행 옵션&lt;/h3&gt;
&lt;pre id=&quot;code_1775969299773&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run [Options] [ImageName:TagName] [arguments] # 명령어 포맷
docker run -d -p 11434:11434 --name my_container -it -rm ubuntu # 명령어 예시
docker attach [Container ID/Name] # 현재 실행 중인 컨테이너를 쉘의 표준 입력으로 연결하기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-d&lt;/b&gt; : (Detached) 컨테이너를 백그라운드에서 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-p&lt;/b&gt; : (Pulished) 호스트-컨테이너의 포트 포워딩 한다. 호스트 포트:컨테이너 포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;--name&lt;/b&gt; : 생성하는 컨테이너의 이름을 부여한다. 안하면 자동생성 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-it&lt;/b&gt; : 컨테이너의 터미널 환경에 대화형으로 접속 (i / interactive : 컨테이너의 표준 입출력을 키보드/화면으로 연결, t / tty : CLI를 에뮬레이션)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;--rm&lt;/b&gt; : 컨테이너 종료 시 자동 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로컬에 설치된 Docker Image 보기&lt;/h3&gt;
&lt;pre id=&quot;code_1775967110955&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image list # 로컬 이미지 정보 보기
docker images # 로컬 이미지 정보 보기
docker images -q # 로컬 이미지 ID 리스트 보기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 중인 Container 보기&lt;/h3&gt;
&lt;pre id=&quot;code_1775968463631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container list # 실행 중인 컨테이너 보기
docker ps # 실행 중인 컨테이너 보기
docker ps -a # 모든 컨테이너 정보 보기 (실행/종료 모두)
docker ps -q # 모든 컨테이너 ID만 보기 (실행/종료 모두)&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;Image 삭제하기&lt;/p&gt;
&lt;pre id=&quot;code_1775967661089&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker rmi [이미지 ID] [이미지 ID] # 이미지 여러 개 삭제
docker rmi $(docker image -q) # 실행 중인 이미지 모두 삭제
docker rmi -f [이미지 ID] # 이미지 삭제 및 실행 중인 컨테이너도 중지&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;Container 정지하기&lt;/p&gt;
&lt;pre id=&quot;code_1775968496044&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop [컨테이너 ID], [컨테이너 ID] # 컨테이너 여러 개 중지
docker rm [컨테이너 ID], [컨테이너 ID] # 컨테이너 여러 개 삭제
docker rm `docker ps -aq` # 실행 중인 컨테이너 모두 중지&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@hopeless/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://brunch.co.kr/@hopeless/10&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://daunje0.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://daunje0.tistory.com/66&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hongl.tistory.com/117&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hongl.tistory.com/117&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/635</guid>
      <comments>https://stella47.tistory.com/635#entry635comment</comments>
      <pubDate>Sun, 12 Apr 2026 13:23:27 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 에서 windows 의 4분할 화면 쓰는 방법</title>
      <link>https://stella47.tistory.com/634</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ubuntu 는 화살키로 2분할해서밖에 프로그램을 볼 수 없는데, windows 처럼 4분할을 쓰는 방법은 없을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 24.04 에서 확인해보았다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Extension Manager 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어를 입력하여 GNOME 확장프로그램 관리자를 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775964820792&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install gnome-shell-extension-manager -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Extension Manager 실행하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 검색 창을 켜서 (windows 키 클릭) Extension Manager 를 실행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot from 2026-04-12 12-34-05.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7DF6u/dJMcah47cCm/0qiKFPO81RXDJRkkThq0T1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7DF6u/dJMcah47cCm/0qiKFPO81RXDJRkkThq0T1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7DF6u/dJMcah47cCm/0qiKFPO81RXDJRkkThq0T1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7DF6u%2FdJMcah47cCm%2F0qiKFPO81RXDJRkkThq0T1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;232&quot; data-filename=&quot;Screenshot from 2026-04-12 12-34-05.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;WinTile 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Extension Manager 에서 &lt;b&gt;Browse&lt;/b&gt;를 선택한 후, 아래에 먼저 뜨는 WinTile 의 &lt;b&gt;Install&lt;/b&gt; 버튼을 누르자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot from 2026-04-12 12-34-40.png&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ZkPw/dJMcah47cCo/KV3o1Pk7JW21ckOryY2PsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ZkPw/dJMcah47cCo/KV3o1Pk7JW21ckOryY2PsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ZkPw/dJMcah47cCo/KV3o1Pk7JW21ckOryY2PsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ZkPw%2FdJMcah47cCo%2FKV3o1Pk7JW21ckOryY2PsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;610&quot; height=&quot;602&quot; data-filename=&quot;Screenshot from 2026-04-12 12-34-40.png&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 이후 별도의 팝업이나 반응이 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 창이나 선택 한 다음에, Windows 키 + 화살표 키를 눌러서 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 4분할로 움직이는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/634</guid>
      <comments>https://stella47.tistory.com/634#entry634comment</comments>
      <pubDate>Sun, 12 Apr 2026 12:30:37 +0900</pubDate>
    </item>
    <item>
      <title>WARNING: Unable to detect NVIDIA/AMD GPU on Docker</title>
      <link>https://stella47.tistory.com/633</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 오류 발생에 대한 해결이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Ollama 설치를 하면 GPU 인식을 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. NVIDIA Container Toolkit 은 있어서 nvidia-smi 명령어는 동작한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjy1dm/dJMcahqh4aw/GNaramW3gPGzan256ltlzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjy1dm/dJMcahqh4aw/GNaramW3gPGzan256ltlzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjy1dm/dJMcahqh4aw/GNaramW3gPGzan256ltlzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjy1dm%2FdJMcahqh4aw%2FGNaramW3gPGzan256ltlzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;926&quot; height=&quot;267&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[해결방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 콘솔에서 아래의 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1774446506058&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install pciutils lshw&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;이후에 다시 Ollama를 설치하면 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/633</guid>
      <comments>https://stella47.tistory.com/633#entry633comment</comments>
      <pubDate>Wed, 25 Mar 2026 22:49:39 +0900</pubDate>
    </item>
    <item>
      <title>설치한 Nvidia드라이버, Docker 에서 그냥 쓰기 : NVIDIA Container Toolkit</title>
      <link>https://stella47.tistory.com/632</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;본 글은 아래의 Nvidia 공식 문서를 참고합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774442028363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Overview &amp;mdash; NVIDIA Container Toolkit&quot; data-og-description=&quot;Overview The NVIDIA Container Toolkit is a collection of libraries and utilities enabling users to build and run GPU-accelerated containers. It currently includes: The NVIDIA Container Runtime (nvidia-container-runtime) The NVIDIA Container Toolkit CLI (nv&quot; data-og-host=&quot;docs.nvidia.com&quot; data-og-source-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&quot; data-og-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Overview &amp;mdash; NVIDIA Container Toolkit&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Overview The NVIDIA Container Toolkit is a collection of libraries and utilities enabling users to build and run GPU-accelerated containers. It currently includes: The NVIDIA Container Runtime (nvidia-container-runtime) The NVIDIA Container Toolkit CLI (nv&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 컴퓨터에서 설치해서 쓰고 있는 Nvidia 드라이버를 docker 에서도 사용하기 위해서는 Container Toolkit을 설치해야한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Nvidia Container Toolkit 설치하기 [1]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성자의 운영체제는 Ubuntu 24.04 이므로, 이에 맞추어 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 아래의 설명에 따라서 사전요구조건들을 설치한다.&lt;/h4&gt;
&lt;pre id=&quot;code_1774442676555&quot; class=&quot;vim&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y --no-install-recommends \
   ca-certificates \
   curl \
   gnupg2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 툴 저장소를 연결한다.&lt;/h4&gt;
&lt;pre id=&quot;code_1774442686234&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  &amp;amp;&amp;amp; curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 저장소로부터 패키지 리스트를 업데이트 한다.&lt;/h4&gt;
&lt;pre id=&quot;code_1774442702707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. NVIDIA Containter Toolkit 패키지를 설치한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Toolkit 버전은 다를 수 있으니 이는 확인하고 설치하자&lt;/p&gt;
&lt;pre id=&quot;code_1774442720107&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.0-1
  sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치한 Container Toolkit을 Docker 에 연동하기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;0. 사전 조건&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NVIDIA Container Toolkit 이 지원하는 Containter Engine 이 설치되어있어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 앞서 NVIDIA Containter Toolkit 을 설치해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. nvidia-ctk 명령어로 container runtime 을 구성한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;--runtime&lt;/span&gt; 옵션의 docker 가 사용자가 설치한 Container Engine 이다.&lt;/p&gt;
&lt;pre id=&quot;code_1774442932348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nvidia-ctk runtime configure --runtime=docker&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;nvidia-ctk&lt;/span&gt; 명령어는 호스트 컴퓨터의 &lt;span style=&quot;color: #006dd7;&quot;&gt;/etc/docker/daemon.json&lt;/span&gt; 파일을 수정한다. 해당 파일을 업데이트함으로서, Docker가 NVIDIA Container Runtime 을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Docker daemon을 재시작한다.&lt;/h4&gt;
&lt;pre id=&quot;code_1774443083042&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart docker&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 가 NVIDIA GPU Driver 를 쓸 수 있는지 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후에 nvidia-smi 라는 명령어로 설치된 NVIDIA 드라이버의 버전과 GPU 정보를 얻어봄으로서 정상적으로 설치되었음을 확인하곤 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 방법으로 확인해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. (Optional) Ubuntu 24.04 이미지 다운로드&lt;/h4&gt;
&lt;pre id=&quot;code_1774443241121&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull ubuntu:24.04&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 이미지가 잘 내려받아졌음을 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1774443315544&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 결과는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCHqVS/dJMcabDBHda/hOkmEnz62Vzvgb5cfpM5xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCHqVS/dJMcabDBHda/hOkmEnz62Vzvgb5cfpM5xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCHqVS/dJMcabDBHda/hOkmEnz62Vzvgb5cfpM5xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCHqVS%2FdJMcabDBHda%2FhOkmEnz62Vzvgb5cfpM5xK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;188&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. nvidia-smi 입력해보기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지 방법이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) nvidia-smi 만 띄워보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 이미지를 컨테이너에 올리고 nvidia-smi 만 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1774443439046&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run --rm --runtime=nvidia --gpus all ubuntu:24.04 nvidia-smi&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) docker 이미지를 불러와서 터미널 형태로 열고, 해당 터미널에서 입력해보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어를 입력하여 컨테이너를 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1774443522685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it --gpus all ubuntu:24.04 /bin/bash&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;이후 나타난 터미널 콘솔에 nvidia-smi 를 입력하면 아래와 같은 결과를 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/enfiEm/dJMcacoYwDc/QMbMc4fyok5zhqMajzvjo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/enfiEm/dJMcacoYwDc/QMbMc4fyok5zhqMajzvjo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enfiEm/dJMcacoYwDc/QMbMc4fyok5zhqMajzvjo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FenfiEm%2FdJMcacoYwDc%2FQMbMc4fyok5zhqMajzvjo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;913&quot; height=&quot;208&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-the-nvidia-container-toolkit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Installing&amp;nbsp;the&amp;nbsp;NVIDIA&amp;nbsp;Container&amp;nbsp;Toolkit&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html#running-a-sample-workload&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Running&amp;nbsp;a&amp;nbsp;Sample&amp;nbsp;Workload&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>SW</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/632</guid>
      <comments>https://stella47.tistory.com/632#entry632comment</comments>
      <pubDate>Wed, 25 Mar 2026 22:31:02 +0900</pubDate>
    </item>
    <item>
      <title>식물 조명 세팅 (부제 : 살려야 한다)</title>
      <link>https://stella47.tistory.com/630</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;튤립과 후리지아를 작년 말 겨울부터 심어서 키우고 있었다.&lt;br /&gt;하지만 최근 해가 잘 드는 부모님 집의 후리지아가 꽃대를 틔우고 있는 것을 봤는데, 그에 비해 내 후리지아는 기운이 없었다.&lt;br /&gt;번뜩 떠올라서 웃자람을 해결하고 꽃을 보기 위해 인공 조명을 세팅하기 시작했다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;앞선 포스팅으로부터, 조명 별 조도를 계측한 바 있다. (&lt;b&gt;&lt;a href=&quot;https://stella47.tistory.com/629&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;링크&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;)&lt;br /&gt;이를 바탕으로, T5 조명을 주력으로 한 조명을 세팅해보았다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;[이전 조명 세팅]&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 조명 구성 : 3 x 10W USB 적/청색 바 조명 (30W)&lt;br /&gt;- 환경 구성 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;3면 반사판 세팅&lt;/li&gt;
&lt;li&gt;조명 바를 직경 30cm 원으로 2면에 둘러놓음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 조명 거리 : 식물과 약 5~15cm&lt;br /&gt;- 설정 거리에서의 조도 : 5cm 거리에서 8000 lux&lt;br /&gt;&lt;br /&gt;열심히 세팅했으나, 조도가 잘 나오지 않아서 오래 쬐어줘야할 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ5jV4/dJMcahpTSxA/fVjiINWSUD23b4WNuU6i70/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ5jV4/dJMcahpTSxA/fVjiINWSUD23b4WNuU6i70/tfile.jpg&quot; data-alt=&quot;이전 조명 세팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ5jV4/dJMcahpTSxA/fVjiINWSUD23b4WNuU6i70/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ5jV4%2FdJMcahpTSxA%2FfVjiINWSUD23b4WNuU6i70%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;756&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이전 조명 세팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;[현재 조명 세팅]&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 조명 구성 : 5 x 9W T5 60cm 3000K (45W) + 2 x 10W USB 적/청색 바 조명 (20W) &lt;br /&gt;- 환경 구성 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;3면 반사판 세팅&lt;/li&gt;
&lt;li&gt;조명 바를 직경 30cm 원으로 2면에 둘러놓음&lt;/li&gt;
&lt;li&gt;식물 상단에 T5 조명을 병렬로 배치&lt;/li&gt;
&lt;li&gt;조명과의 거리를 위해, 화분 높이를 올렸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 조명 거리 : 식물과 약 15cm (T5) + 5~15cm (바 조명)&lt;br /&gt;- 설정 거리에서의 조도 : 16000 lux (바 조명 끄고 T5 만 있어도 이정도가 나온다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;적/청색 조명은 보기에 너무 이상해서 반사판을 덧대어두었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;뉴스에서 나온 대마/양귀비 키우는 마약사범 보도 시에 저런 조명의 사용을 보여준 바 있다. (오인하여 신고당하기 딱 좋다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PKydL/dJMcabpHJKf/PvfrNkTQvfLsKaIfb1RuV1/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PKydL/dJMcabpHJKf/PvfrNkTQvfLsKaIfb1RuV1/tfile.jpg&quot; data-alt=&quot;전체 세팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PKydL/dJMcabpHJKf/PvfrNkTQvfLsKaIfb1RuV1/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPKydL%2FdJMcabpHJKf%2FPvfrNkTQvfLsKaIfb1RuV1%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;527&quot; height=&quot;703&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전체 세팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E4UJF/dJMcagR4clJ/LWIjYr2tuNzCJAzaLab381/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E4UJF/dJMcagR4clJ/LWIjYr2tuNzCJAzaLab381/tfile.jpg&quot; data-alt=&quot;수국, 조명-잎대와의 거리가 15cm 이며, 16000 lux 가량이 나온다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E4UJF/dJMcagR4clJ/LWIjYr2tuNzCJAzaLab381/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE4UJF%2FdJMcagR4clJ%2FLWIjYr2tuNzCJAzaLab381%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수국, 조명-잎대와의 거리가 15cm 이며, 16000 lux 가량이 나온다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beOuJU/dJMcabpHJKi/sk4GMA2nCvlSXPFO0jumXK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beOuJU/dJMcabpHJKi/sk4GMA2nCvlSXPFO0jumXK/tfile.jpg&quot; data-alt=&quot;튤립을 살리고자 바 조명과 T5 조명을 세팅했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beOuJU/dJMcabpHJKi/sk4GMA2nCvlSXPFO0jumXK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeOuJU%2FdJMcabpHJKi%2Fsk4GMA2nCvlSXPFO0jumXK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;튤립을 살리고자 바 조명과 T5 조명을 세팅했다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로의 경과를 지켜봐야겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;참고로 이전 세팅한지 2일차만에 튤립 잎이 펴지기 시작했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이전엔 줄기만 자라는 '웃자람' 현상이 심했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;*** EOF ***&lt;/p&gt;</description>
      <category>잡담</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/630</guid>
      <comments>https://stella47.tistory.com/630#entry630comment</comments>
      <pubDate>Sat, 21 Feb 2026 18:10:25 +0900</pubDate>
    </item>
    <item>
      <title>일부 조명 별 조도 계측</title>
      <link>https://stella47.tistory.com/629</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가진 조명 중에 적합한 조명을 찾기 위해서, 거리 별로 조도를 계측해보고자 했다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;시험 결과&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: center;&quot;&gt;&lt;b&gt;제품명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;&lt;b&gt;가격&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;&lt;b&gt;소모전력&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(W)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;&lt;b&gt;5cm 거리&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Lux)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: center;&quot;&gt;&lt;b&gt;10 cm 거리&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Lux)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: justify;&quot;&gt;LED 조명 바가 4개인 적/청색 조명&lt;br /&gt;(바 1개만 측정함, LED 0.12W x 21 ea x 4 bar)&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;1만원&lt;br /&gt;(USB 전원 별도)&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: justify;&quot;&gt;4500&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: justify;&quot;&gt;1500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: justify;&quot;&gt;T5 60cm 3000K (LED 0.17W x 54 ea)&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;3~5천원&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: justify;&quot;&gt;8500&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: justify;&quot;&gt;4500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: justify;&quot;&gt;T5 60cm 6500K (커버 제거)&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;3~5천원&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: justify;&quot;&gt;13000&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: justify;&quot;&gt;7500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: justify;&quot;&gt;T5 60cm 3000K&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;3~5천원&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: justify;&quot;&gt;8000&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: justify;&quot;&gt;4000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 39.5349%; text-align: justify;&quot;&gt;T5 60cm 6500K (커버 제거)&lt;/td&gt;
&lt;td style=&quot;width: 11.279%; text-align: center;&quot;&gt;3~5천원&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 18.0233%; text-align: justify;&quot;&gt;13000&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; text-align: justify;&quot;&gt;6000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- T5 조명은 커버를 열면 조도량이 확실히 좋아진다. 하지만 커버를 벗기면 눈이 부시다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;시험 방법&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 스마트폰 조도계 어플을 켠다.&lt;br /&gt;2. 조명이 조도계를 마주보고 조도가 최대가 되는 각도로 조명을 조정한다.&lt;br /&gt;3. 5cm, 10cm 거리에서 조도를 측정한다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;시험해본 조명&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;제품 1 : LED 조명 바가 4개인 적/청색 조명 (USB type, 10W) &lt;a href=&quot;https://www.coupang.com/vp/products/9276631358?itemId=27461686372&amp;amp;vendorItemId=94426955889&amp;amp;sourceType=srp_product_ads&amp;amp;clickEventId=13d758a0-0f01-11f1-b0fd-da0f580eeffa&amp;amp;korePlacement=15&amp;amp;koreSubPlacement=6&amp;amp;clickEventId=13d758a0-0f01-11f1-b0fd-da0f580eeffa&amp;amp;korePlacement=15&amp;amp;koreSubPlacement=6&amp;amp;traceId=mlw2kjb4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;구매링크&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;- 바 별로 청색 7개, 적색 14개의 LED가 실장되어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;- 아무리 찾아도 안나오던데, USB 테스터로 계측해본 결과는 최대 조도일 때 10W 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WNfhG/dJMcaiPOV3q/U74KIgsbWksq2KY7QFUJN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WNfhG/dJMcaiPOV3q/U74KIgsbWksq2KY7QFUJN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WNfhG/dJMcaiPOV3q/U74KIgsbWksq2KY7QFUJN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWNfhG%2FdJMcaiPOV3q%2FU74KIgsbWksq2KY7QFUJN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;472&quot; height=&quot;528&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;1101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;제품 2 : T5 60cm 조명 (220V, 9W)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://spaceled.co.kr/product/detail.html?product_no=2101&amp;amp;cate_no=143&amp;amp;display_group=1&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;구매링크&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 제품에 붙은 설명 상, 0.17W LED 가 54 ea 가 실장되어있다 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSFgSJ/dJMcafyRDEx/z3wawZPUCvb05bmKAti3s0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSFgSJ/dJMcafyRDEx/z3wawZPUCvb05bmKAti3s0/img.jpg&quot; data-alt=&quot;T5 LED 조명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSFgSJ/dJMcafyRDEx/z3wawZPUCvb05bmKAti3s0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSFgSJ%2FdJMcafyRDEx%2Fz3wawZPUCvb05bmKAti3s0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;447&quot; height=&quot;447&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;T5 LED 조명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발광부를 열어보면 다음과 같다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsndp5/dJMcaiPOWQI/1zRCKaVc4CouYaKgsa5cgk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsndp5/dJMcaiPOWQI/1zRCKaVc4CouYaKgsa5cgk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsndp5/dJMcaiPOWQI/1zRCKaVc4CouYaKgsa5cgk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdsndp5%2FdJMcaiPOWQI%2F1zRCKaVc4CouYaKgsa5cgk%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;458&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>잡담</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/629</guid>
      <comments>https://stella47.tistory.com/629#entry629comment</comments>
      <pubDate>Sat, 21 Feb 2026 13:50:58 +0900</pubDate>
    </item>
    <item>
      <title>식물이 필요한 빛의 양 계산하기</title>
      <link>https://stella47.tistory.com/628</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;튤립과 후리지아를 키우는데, 집이 북향이라 식물이 꽃도 안피고 시들시들하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식물에 필요한 아래의 항목을 정리하려고 한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;식물에 필요한 빛의 특성&lt;/li&gt;
&lt;li&gt;식물이 요구하는 광량 계산하기&lt;/li&gt;
&lt;li&gt;광원에서 나오는 광량 계측하기&lt;/li&gt;
&lt;li&gt;용어 정리&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 식물에 필요한 빛의 특성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빛의 파장 별로 미치는 작용은 다음[4]과 같다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IGkAj/dJMcafyPYOj/77QEfFSHb5yudfvUJNJRt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IGkAj/dJMcafyPYOj/77QEfFSHb5yudfvUJNJRt0/img.png&quot; data-alt=&quot;파장이 식물에 미치는 작용효과 [4]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IGkAj/dJMcafyPYOj/77QEfFSHb5yudfvUJNJRt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIGkAj%2FdJMcafyPYOj%2F77QEfFSHb5yudfvUJNJRt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;357&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파장이 식물에 미치는 작용효과 [4]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 표에 따르면, 655nm의 적색광과 430nm의 청색광이 엽록소의 작용과 광합성 작용을 극대화 하는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 겨냥하여 적색광과 청색광을 조합한 식물용 조명들을 다양하게 판매하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 식물이 요구하는 광량 계산하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신이 키우는 식물의 광보상점과 광포화점, 혹은 필요 광량을 나타내는 테이블에서 찾아보도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 테이블[5]에서 토마토와 [7] 에서 토마토와 튤립을 찾아보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;1764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vCOPV/dJMcaivvm83/2d1qI0KV18WFqV4kM0QK70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vCOPV/dJMcaivvm83/2d1qI0KV18WFqV4kM0QK70/img.jpg&quot; data-alt=&quot;식물 별 광보상점과 광포화점 [5]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vCOPV/dJMcaivvm83/2d1qI0KV18WFqV4kM0QK70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvCOPV%2FdJMcaivvm83%2F2d1qI0KV18WFqV4kM0QK70%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;721&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;1764&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;식물 별 광보상점과 광포화점 [5]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwCvUU/dJMcaaxwiMt/M8LlpL1rK5r1peb1OkYKg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwCvUU/dJMcaaxwiMt/M8LlpL1rK5r1peb1OkYKg1/img.jpg&quot; data-alt=&quot;식물 별 추천 광량 범위 [10]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwCvUU/dJMcaaxwiMt/M8LlpL1rK5r1peb1OkYKg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwCvUU%2FdJMcaaxwiMt%2FM8LlpL1rK5r1peb1OkYKg1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;446&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;식물 별 추천 광량 범위 [10]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 [5] 으로부터, 토마토는 광보상점 35 umol/m2/s, 광포화점 810 umol/m2/s 임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 [7] 으로부터 아래의 일일 광량이 좋다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 화분에 빽빽히 심은 튤립 (Forced Tulip)은 4 - 8 moles/day (92 - 184 umol/m2/s, 10K - 20K lux, 적청 LED 기준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 토마토는 10 - 20 moles/day (232 - 463 umol/m2/s, 26K-52K lux, 적청 LED 기준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DLI (moles/day) &amp;lt;-&amp;gt; PPFD (umol/m2/s) 변환&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 단위가 다르므로, 하루 중 12시간 동안 단위 면적에 1 moles 의 일일 광량이 가해진다고 가정하여 환산하는 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1 mole/day&lt;/b&gt; x (1,000,000 umol/mole) / (12 hrs x 60 min x 60 sec / 1 day) = &lt;b&gt;23.15 umol/m2/s&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;100 umol/m2/s&lt;/b&gt; = &lt;b&gt;4.320 moles/day&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Lux &amp;lt;-&amp;gt; PPFD 변환 [8, 9]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광원에 따라 다르나, 대략 다음과 같다고 한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;광원 종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;10000 lux 당 umol/m2/s&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;1 umol/m2/s 당 1 lux&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;햇볕 (6500K) [8]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;230&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;형광등&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;134.93&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;적색+청색 LED (450/650nm)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;887.31&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;적색 LED (650nm)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;768.5&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;청색 LED (450nm)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;115.52&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;3000k LED&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;190.27&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 광원에서 나오는 광량 계측하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 용어 정리 [1,2]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 읽기에 앞서, 많이 사용하는 단어를 정리하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lux&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빛의 조도를 나타내는 단위이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한 낮은 대략 10,000 lux 까지 올라간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;DLI&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Day Light Integral, 일일 광자 누적량)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 하루동안 받는 빛의 양을 누적한 값이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 단위는 moles/day 단위이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- DLI = 평균 PPFD [umol/m2/s] x (일조 시간 [hr] x (3600 [sec/hr])) / 10^6 [umol/mol]&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DLA&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Day Light Amount, 일일 광자 총량)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 인공 조명에 의해 생성한 일일 광자 총량이다.&lt;br /&gt;- DLA = PPFD [umol/m2/s] x (일조 시간 [hr] x (3600 [sec/hr])) / 10^6 [umol/mol]&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PAR&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Photo-synthetic Active Radiation / 광합성 활성 방사선)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- PAR는 광합성에 사용할 수 있는 400nm - 700nm 파장의 전자기파이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PPF&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Photo-synthetic Photon Flux / 광합성 광자 흐)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어떤 광원에 의해 생성되는 단위 시간당 PAR 양이다.&lt;br /&gt;- 단위는 umol/s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PPFD&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Photo-synthetic Photon Flux Density / 광합성 광자 밀도)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어떤 광원에 의해 생성되는 단위 면적 및 단위 시간 당 PAR 양이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단순히 밝다고 해서 광합성 효율이 높은 것은 아니며, PAR에 한정한 광량 밀도이다.&lt;br /&gt;- 단위는 umol/m2/s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PPE&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Photo-synthetic Photon Efficiency, 광합성 광자 효율)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 조명기구의 효율을 나타내는 지표이며, 단위 에너지 에 대해 방출되는 PAR 를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단위는 umol/J&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 효율은 조명기구의 소모전력과 PPF 값을 안다면, PPE = PPF/W 으로 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;광보상점&lt;/b&gt;, Light Compensation Point&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 식물의 호흡속도와 광합성 속도가 일치할 때의 빛의 세기(광도) 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 호흡에 의한 이산화탄소 방출과 광합성에 의한 이산화탄소 흡수량이 같은 광도이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;광포화점&lt;/b&gt;, Light Saturation Point&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 식물의 광합성량이 더이상 증가하지 않을 때의 빛의 세기이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgqVeL/dJMb99STB59/BUmT6DBP5rIFwzGrE53UGk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgqVeL/dJMb99STB59/BUmT6DBP5rIFwzGrE53UGk/img.gif&quot; data-alt=&quot;조도에 따른 양지/음지 식물의 탄산가스 흡수/배출량&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgqVeL/dJMb99STB59/BUmT6DBP5rIFwzGrE53UGk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bgqVeL/dJMb99STB59/BUmT6DBP5rIFwzGrE53UGk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;280&quot; height=&quot;240&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;조도에 따른 양지/음지 식물의 탄산가스 흡수/배출량&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] PAR, PPF, PPFD, PFD의 차이점 이해하기,&amp;nbsp;&lt;a href=&quot;https://www.uprtek.com/ko/blogs/untangling-par-ppf-ppfd-pfd&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.uprtek.com/ko/blogs/untangling-par-ppf-ppfd-pfd&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] Grow Light의 PAR, PPF, PPFD 및 PPE 이해,&amp;nbsp;&lt;a href=&quot;https://vantenled.com/ko/understanding-the-par-ppf-ppfd-and-ppe-in-grow-light/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://vantenled.com/ko/understanding-the-par-ppf-ppfd-and-ppe-in-grow-light/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3] &lt;a href=&quot;http://www.cyberschool.co.kr/html/text/bio/bio511.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.cyberschool.co.kr/html/text/bio/bio511.htm&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4] &lt;a href=&quot;https://wonkwang.dcollection.net/public_resource/pdf/000001993318_20260219222329.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wonkwang.dcollection.net/public_resource/pdf/000001993318_20260219222329.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[5] &lt;a href=&quot;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=540599&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=540599&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[6] &lt;a href=&quot;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=384929&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=384929&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[7] Typical PPFD and DLI values per crop,&amp;nbsp;&lt;a href=&quot;https://www.horti-growlight.com/en/typical-ppfd-and-dli-values-per-crop&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.horti-growlight.com/en/typical-ppfd-and-dli-values-per-crop&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[8] &lt;a href=&quot;https://www.waveformlighting.com/horticulture/convert-lux-to-ppfd-online-calculator&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.waveformlighting.com/horticulture/convert-lux-to-ppfd-online-calculator&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[9] &lt;a href=&quot;https://www.apogeeinstruments.com/conversion-ppfd-to-lux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.apogeeinstruments.com/conversion-ppfd-to-lux/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[10] &lt;a href=&quot;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=384929&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gall.dcinside.com/board/view/?id=tree&amp;amp;no=384929&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** EOF ***&lt;/p&gt;</description>
      <category>잡담</category>
      <author>bu_ctrlMan</author>
      <guid isPermaLink="true">https://stella47.tistory.com/628</guid>
      <comments>https://stella47.tistory.com/628#entry628comment</comments>
      <pubDate>Thu, 19 Feb 2026 23:18:50 +0900</pubDate>
    </item>
  </channel>
</rss>