<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>5동9층9호</title>
    <link>https://bj-lee.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 12:16:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bj-lee</managingEditor>
    <image>
      <title>5동9층9호</title>
      <url>https://tistory1.daumcdn.net/tistory/4336737/attach/77c6cca3f8774a208ac208912d3325f6</url>
      <link>https://bj-lee.tistory.com</link>
    </image>
    <item>
      <title>spring boot 와 Opentelemetry</title>
      <link>https://bj-lee.tistory.com/34</link>
      <description>&lt;h1&gt;Spring Boot 4.0.1 OpenTelemetry Integration Guide&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요 (Overview)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 &lt;b&gt;Spring Boot 4.0.1&lt;/b&gt; 환경에서 &lt;b&gt;OpenTelemetry (OTel)&lt;/b&gt; 를 활용하여 Observability(가시성)를 확보하기 위한 아키텍처 및 구현 가이드를 다루려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Spring Boot 4.0&lt;/b&gt;부터는 &lt;code&gt;spring-boot-starter-opentelemetry&lt;/code&gt;가 공식 도입되어, 기존 Spring Boot 3.x에서 여러 의존성(&lt;code&gt;micrometer-tracing-bridge-otel&lt;/code&gt;, &lt;code&gt;opentelemetry-exporter-otlp&lt;/code&gt; 등)을 조합하던 방식이 &lt;b&gt;단일 Starter 의존성&lt;/b&gt;으로 대폭 간소화되었습니다. 특히 &lt;b&gt;4.0.1&lt;/b&gt; 버전에서는 OTLP 로그 내보내기(Log Export) 관련 버그가 수정되어 더욱 안정적인 통합을 지원합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 목표&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&gt;Simplified Setup:&lt;/b&gt; 단일 Starter로 Tracing, Metrics, Logging 자동 구성.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Distributed Tracing:&lt;/b&gt; 마이크로서비스 간 요청 흐름 시각화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Standardization:&lt;/b&gt; OTLP(OpenTelemetry Protocol) 기반의 데이터 전송 표준화.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 아키텍처 설계 (Architecture)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로덕션 레벨의 아키텍처는 애플리케이션이 직접 백엔드(Jaeger, Prometheus 등)로 데이터를 전송하는 것이 아니라, &lt;b&gt;OpenTelemetry Collector&lt;/b&gt;를 경유하는 것을 권장합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ezBJKR/dJMcabbQEDv/HT1Ex4xLKzogfhIwu644V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ezBJKR/dJMcabbQEDv/HT1Ex4xLKzogfhIwu644V0/img.png&quot; data-alt=&quot;OTEL 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ezBJKR/dJMcabbQEDv/HT1Ex4xLKzogfhIwu644V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezBJKR%2FdJMcabbQEDv%2FHT1Ex4xLKzogfhIwu644V0%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;1694&quot; height=&quot;586&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OTEL 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 의존성 설정 (Dependencies)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot 4.0.1에서는 &lt;code&gt;spring-boot-starter-opentelemetry&lt;/code&gt; 하나만 추가하면 필요한 Micrometer Tracing Bridge와 OTLP Exporter가 모두 자동으로 구성됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;build.gradle&lt;/h3&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;plugins {
    id 'java'
    id 'org.springframework.boot' version '4.0.1'
    id 'io.spring.dependency-management' version '1.1.7'
}

dependencies {
    // 1. Web &amp;amp; Actuator (Health check, Metrics endpoint)
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    // 2. OpenTelemetry Official Starter (New in Spring Boot 4)
    // Tracing, Metrics, Logging via OTLP are auto-configured.
    implementation 'org.springframework.boot:spring-boot-starter-opentelemetry'

    // 3. AOP (For @NewSpan annotation support if needed)
    implementation 'org.springframework.boot:spring-boot-starter-aop'
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 애플리케이션 설정 (Configuration)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot 4에서는 &lt;code&gt;management.opentelemetry.*&lt;/code&gt; 네임스페이스를 통해 통합 설정이 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;application.yml&lt;/h3&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;spring:
  application:
    name: payment-service

management:
  endpoints:
    web:
      exposure:
        include: health, info, metrics, prometheus

  # Spring Boot 4 OpenTelemetry Configuration
  opentelemetry:
    tracing:
      export:
        enabled: true
        # endpoint: http://localhost:4318/v1/traces (기본값)
    logging:
      export:
        enabled: true # 4.0.1에서 안정화됨
        # endpoint: http://localhost:4318/v1/logs (기본값)

  # Sampling 설정 (기존 tracing 네임스페이스 유지)
  tracing:
    sampling:
      probability: 1.0 # 개발환경 1.0, 운영환경 0.1 이하 권장
    propagation:
      type: w3c # W3C TraceContext 표준 사용

logging:
  pattern:
    # 콘솔 로그에 TraceID/SpanID 표시 (디버깅용)
    level: &quot;%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 커스텀 추적 구현 (Custom Tracing)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비즈니스 로직 내부의 세부 구간을 추적하기 위한 방법은 기존과 동일하게 Micrometer Tracing API를 사용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 A: 어노테이션 기반 (@NewSpan)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 간결한 방식입니다.&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;import io.micrometer.tracing.annotation.NewSpan;
import io.micrometer.tracing.annotation.SpanTag;
import org.springframework.stereotype.Service;

@Service
public class PaymentService {

    @NewSpan(&quot;process-payment&quot;) // Span 이름
    public void processPayment(@SpanTag(&quot;payment.id&quot;) String paymentId) {
        // 비즈니스 로직 수행
        validate(paymentId);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 B: 프로그래매틱 방식 (Tracer Bean)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;io.micrometer.tracing.Tracer&lt;/code&gt;를 주입받아 사용합니다. (OTel API를 직접 쓰지 않고 Micrometer 파사드를 쓰는 것이 Spring Boot의 권장 사항입니다.)&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;import io.micrometer.tracing.Span;
import io.micrometer.tracing.Tracer;
import org.springframework.stereotype.Component;

@Component
public class ManualTracer {

    private final Tracer tracer;

    public ManualTracer(Tracer tracer) {
        this.tracer = tracer;
    }

    public void complicatedLogic() {
        Span newSpan = this.tracer.nextSpan().name(&quot;complex-calculation&quot;);

        try (Tracer.SpanInScope ws = this.tracer.withSpan(newSpan.start())) {
            newSpan.tag(&quot;calculation.type&quot;, &quot;tax&quot;);
            doCalculations();
        } finally {
            newSpan.end();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 로컬 테스트 환경 (Docker Compose)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OTLP 데이터를 수신할 Collector와 백엔드 서비스를 구성합니다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;version: &quot;3&quot;
services:
  # 1. OpenTelemetry Collector
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    command: [&quot;--config=/etc/otel-collector-config.yaml&quot;]
    volumes:
      - ./otel-config.yaml:/etc/otel-collector-config.yaml
    ports:
      - &quot;4317:4317&quot; # OTLP gRPC
      - &quot;4318:4318&quot; # OTLP HTTP (Spring Boot Default)

  # 2. Jaeger (Tracing)
  jaeger:
    image: jaegertracing/all-in-one:latest
    ports:
      - &quot;16686:16686&quot;

  # 3. Prometheus (Metrics)
  prometheus:
    image: prom/prometheus:latest
    ports:
      - &quot;9090:9090&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 마이그레이션 가이드 (From 3.x to 4.x)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;의존성 삭제:&lt;/b&gt; &lt;code&gt;micrometer-tracing-bridge-otel&lt;/code&gt;, &lt;code&gt;opentelemetry-exporter-otlp&lt;/code&gt; 제거.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존성 추가:&lt;/b&gt; &lt;code&gt;spring-boot-starter-opentelemetry&lt;/code&gt; 추가.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로퍼티 변경:&lt;/b&gt; &lt;code&gt;management.otlp.tracing.*&lt;/code&gt; -&amp;gt; &lt;code&gt;management.opentelemetry.tracing.export.*&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. TraceId 이용하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 1: Tracer 빈을 이용한 추출 (가장 권장)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot가 자동 설정해준 Tracer 빈을 주입받아 현재 Span의 컨텍스트에서 직접 추출합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;import io.micrometer.tracing.Tracer;
import org.springframework.stereotype.Service;

@Service
public class BusinessService {

    private final Tracer tracer;

    public BusinessService(Tracer tracer) {
        this.tracer = tracer;
    }

    public String getTraceId() {
        // 현재 활성화된 Span이 없을 수 있으므로 null 체크가 필요합니다.
        if (tracer.currentSpan() != null) {
            return tracer.currentSpan().context().traceId();
        }
        return &quot;no-trace-id&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 2: MDC(Mapped Diagnostic Context)에서 추출&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Micrometer Tracing은 로그 연동을 위해 자동으로 traceId를 SLF4J의 MDC에 넣어줍니다. 별도의 빈 주입 없이 빠르게 가져올 때 유용합니다.&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;import org.slf4j.MDC;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping(&quot;/trace&quot;)
    public String trace() {
        // application.yml 설정에 의해 &quot;traceId&quot; 키로 자동 저장됨
        return MDC.get(&quot;traceId&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 잘못된 내용이 있으면 댓글 부탁드립니다.&lt;/p&gt;</description>
      <category>ㄱㅐㅂㅏㄹ/Spring</category>
      <category>openTelemetry</category>
      <category>otel</category>
      <category>otlp</category>
      <category>Spring</category>
      <category>spring boot 4</category>
      <category>springboot</category>
      <category>tracing</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/34</guid>
      <comments>https://bj-lee.tistory.com/34#entry34comment</comments>
      <pubDate>Mon, 12 Jan 2026 21:48:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 내 주식 전략, 진짜 돈이 될까? Pandas로 초간단 백테스팅 구현하기</title>
      <link>https://bj-lee.tistory.com/33</link>
      <description>&lt;p&gt;주식 자동매매 봇을 만들기 전 가장 중요한 단계는 백테스팅(Backtesting)입니다. &amp;quot;지난달에 이 전략을 썼다면 얼마를 벌었을까?&amp;quot;를 검증하지 않고 실전에&lt;br&gt;  투입하는 것은 도박과 같습니다. 오늘은 복잡한 라이브러리 없이, Python Pandas만으로 이동평균선(MA) 전략을 검증하는 방법을 소개합니다.  &lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;백테스팅, 왜 필수인가?  &lt;/p&gt;
&lt;p&gt;많은 초보자가 &amp;quot;황금 전략&amp;quot;을 떠올리고 바로 매매 봇부터 만듭니다. 하지만 막상 돌려보면 수수료와 슬리피지(Slippage) 때문에 계좌가 녹아내리는 경우가&lt;br&gt;태반입니다.&lt;br&gt;백테스팅은 과거 데이터(Historical Data)를 통해 내 전략의 승률, 최대 낙폭(MDD), 수익률을 미리 확인하여 &amp;#39;맷집&amp;#39;을 키우는 과정입니다.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;p&gt;데이터 준비 (yfinance)  &lt;/p&gt;
&lt;p&gt;미국 주식 데이터는 yfinance 라이브러리를 쓰면 무료로, 아주 쉽게 구할 수 있습니다.  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 import yfinance as yf  
2  
3 # 애플(AAPL)의 2024년 데이터 가져오기  
4 df = yf.download(&amp;quot;AAPL&amp;quot;, start=&amp;quot;2024-01-01&amp;quot;, end=&amp;quot;2024-12-31&amp;quot;)  
5 print(df.head())  &lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;p&gt;전략 구현: 골든크로스 (Golden Cross)  &lt;/p&gt;
&lt;p&gt;가장 기초적인 전략인 &amp;#39;골든크로스&amp;#39;를 코드로 구현해 봅시다.&lt;br&gt;* 매수: 5일 이동평균선이 20일 이동평균선을 뚫고 올라갈 때&lt;br&gt;* 매도: 5일 이동평균선이 20일 이동평균선 아래로 내려갈 때  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 import pandas as pd  
2 import numpy as np  
3  
4 # 1. 이동평균선 계산  
5 df\[&amp;#39;MA5&amp;#39;\] = df\[&amp;#39;Close&amp;#39;\].rolling(window=5).mean()  
6 df\[&amp;#39;MA20&amp;#39;\] = df\[&amp;#39;Close&amp;#39;\].rolling(window=20).mean()  
7  
8 # 2. 매매 신호 생성 (1: 매수 유지, 0: 현금 보유)  
9 # MA5가 MA20보다 크면 주식을 보유한다고 가정  
10 df\[&amp;#39;Signal&amp;#39;\] = np.where(df\[&amp;#39;MA5&amp;#39;\] &amp;gt; df\[&amp;#39;MA20&amp;#39;\], 1, 0)  
11  
12 # 3. 포지션 변화 확인 (1이면 매수 진입, -1이면 매도 청산)  
13 df\[&amp;#39;Position&amp;#39;\] = df\[&amp;#39;Signal&amp;#39;\].diff()  &lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;p&gt;수익률 계산 (누적 수익률)  &lt;/p&gt;
&lt;p&gt;이제 이 신호대로 매매했을 때의 수익률을 계산해 봅니다.&lt;br&gt;(단순화를 위해 수수료는 제외했습니다. 실전에서는 0.25% 정도를 차감해야 합니다.)  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 # 내일의 수익률을 미리 계산 (오늘 신호 보고 내일 시가에 산다고 가정하거나, 종가 매수 가정)  
2 # 여기서는 간단히 &amp;#39;보유 기간 동안의 변동폭&amp;#39;을 수익률로 계산  
3 df\[&amp;#39;Daily\_Return&amp;#39;\] = df\[&amp;#39;Close&amp;#39;\].pct\_change()  
4  
5 # 전략 수익률 = 주가 등락률 × 내 포지션(1 or 0)  
6 # shift(1)은 &amp;#39;어제 나온 신호로 오늘 수익을 먹는다&amp;#39;는 의미 (미래 참조 방지)  
7 df\[&amp;#39;Strategy\_Return&amp;#39;\] = df\[&amp;#39;Daily\_Return&amp;#39;\] \* df\[&amp;#39;Signal&amp;#39;\].shift(1)  
8  
9 # 누적 수익률 계산  
10 df\[&amp;#39;Cumulative\_Strategy\_Return&amp;#39;\] = (1 + df\[&amp;#39;Strategy\_Return&amp;#39;\]).cumprod()  
11 df\[&amp;#39;Cumulative\_BuyHold\_Return&amp;#39;\] = (1 + df\[&amp;#39;Daily\_Return&amp;#39;\]).cumprod()  
12  
13 print(f&amp;quot;전략 최종 수익률: {df\[&amp;#39;Cumulative\_Strategy\_Return&amp;#39;\].iloc\[-1\]:.2f}&amp;quot;)  
14 print(f&amp;quot;존버(Buy&amp;amp;Hold) 수익률: {df\[&amp;#39;Cumulative\_BuyHold\_Return&amp;#39;\].iloc\[-1\]:.2f}&amp;quot;)  &lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;[Backtest Report] AAPL Golden Cross Strategy (2024)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
    1 [INFO] 백테스팅 시작: AAPL (Apple Inc.)
    2 [INFO] 기간: 2024-01-01 ~ 2024-12-31
    3 [INFO] 초기 자본: $10,000
    4 [INFO] 데이터 수집 중... 완료.
    5
    6 --------------------------------------------------
    7 [SIGNAL] 2024-01-18: GOLDEN CROSS 발생
    8 &amp;gt;&amp;gt; 매수 진입 | 가격: $188.63
    9
   10 [SIGNAL] 2024-04-12: DEAD CROSS 발생
   11 &amp;gt;&amp;gt; 매도 청산 | 가격: $176.55 | 수익률: -6.40%
   12
   13 [SIGNAL] 2024-05-08: GOLDEN CROSS 발생
   14 &amp;gt;&amp;gt; 매수 진입 | 가격: $182.74
   15
   16 [SIGNAL] 2024-08-05: DEAD CROSS 발생
   17 &amp;gt;&amp;gt; 매도 청산 | 가격: $209.27 | 수익률: +14.52%
   18
   19 [SIGNAL] 2024-08-28: GOLDEN CROSS 발생
   20 &amp;gt;&amp;gt; 매수 진입 | 가격: $226.49
   21 --------------------------------------------------
   22
   23 [FINAL PERFORMANCE REPORT]
   24 - 최종 자산: $12,450.32
   25 - 누적 수익률: +24.50%
   26 - 단순 보유(Buy &amp;amp; Hold) 수익률: +31.18%
   27 - 전략 승률: 66.7% (2승 1패)
   28 - 최대 낙폭(MDD): -12.45%
   29 - 총 매매 횟수: 3회
   30
   31 [분석 결과]
   32 2024년 애플(AAPL)의 경우, 단순 골든크로스 전략보다는 사서 들고 있는 전략이 더 높은 수익률을 기록했습니다.
   33 이는 주가가 박스권을 횡보할 때 발생하는 잦은 손절(Whipsaw) 때문으로 분석됩니다.
   34 수익률 개선을 위해 변동성 필터를 추가할 필요가 있습니다.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt; &amp;quot;코드를 실행하면 위와 같은 리포트가 출력됩니다. 결과를 보니 단순히 보유하는 것보다 수익률이 낮게 나왔네요. 왜 그럴까요?&amp;quot; ...&lt;br&gt; 계속 확인해보고 포스팅할 예정입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;p&gt;결론 및 시사점  &lt;/p&gt;
&lt;p&gt;직접 돌려보면 놀라운 사실을 알게 됩니다. &amp;quot;그냥 사서 들고 있는 게(Buy &amp;amp; Hold) 더 수익률이 좋을 때가 많다&amp;quot;는 것입니다.&lt;br&gt;이처럼 백테스팅은 대박을 꿈꾸기보다는, 내 전략의 허점을 찾고 MDD(최대 낙폭)를 관리하는 데 그 목적이 있습니다. 다음 편에서는 이 결과에 &amp;#39;변동성 돌파&lt;br&gt;전략&amp;#39;을 섞어 수익률을 개선하는 방법을 다뤄보겠습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>ㄱㅐㅂㅏㄹ</category>
      <category>pandas</category>
      <category>Python</category>
      <category>yfinance</category>
      <category>백테스팅</category>
      <category>알고리즘트레이딩</category>
      <category>주식자동매매</category>
      <category>파이썬</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/33</guid>
      <comments>https://bj-lee.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 4 Jan 2026 14:50:34 +0900</pubDate>
    </item>
    <item>
      <title>[DevOps] Sonarqube로 코드 품질과 커버리지, 두 마리 토끼 잡기 (실무 적용 가이드)</title>
      <link>https://bj-lee.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드 품질의 확보&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 지속적인 코드 품질을 확보하기 위해서는 시큐어 코딩(Secure Coding) 이란 명명아래 소스 코드에 존재할 수 있는 잠재적인 불안요소(보안 취약점)를 제거하나, 그런 것들을 고려하여 기능을 설계 및 구현하는 등의 행위가 확보되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국은 일찍이 시큐어 코딩을 의무화했고, 우리나라도 2012년부터 의무제로 시행되어 공공기관의 정보화 사업 중 일부를 대상으로 시행되고 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 Sonarqube인가? (단순한 린트 툴이 아닙니다)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 분이 Sonarqube를 단순히 &quot;조금 더 깐깐한 린트(Lint) 도구&quot; 정도로 생각합니다. 하지만 Sonarqube의 진가는 '시각화'와 '추이 관리'에 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드 스멜(Code Smell)의 시각화: 잠재적인 버그 가능성이 있는 코드를 직관적으로 보여줍니다.&lt;/li&gt;
&lt;li&gt;Quality Gate (품질 관문): &quot;테스트 커버리지 80% 미만이면 배포 금지!&quot;와 같이 강력한 품질 정책을 파이프라인에 심을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핵심 기능 1: 정적 분석 (Static Analysis)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sonarqube는 코드를 실행하지 않고도 버그를 찾아냅니다. (NullPointerException 가능성, 자원 해제 누락 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무 활용 팁:&lt;br /&gt;처음 도입하면 수천 개의 'Code Smell'이 떠서 팀원들이 좌절할 수 있습니다. 이때 중요한 것은 '선택과 집중'입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;New Code(신규 코드) 정책: &quot;기존 코드는 건드리지 말고, 오늘부터 작성하는 새 코드만큼은 깨끗하게 유지하자&quot;는 정책으로 시작하세요. Sonarqube&lt;br /&gt;대시보드에서 'Leak Period' 설정을 통해 이를 쉽게 관리할 수 있습니다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;핵심 기능 2: 코드 커버리지 (Coverage) 측정JaCoCo와 연동:&lt;br /&gt;Java/Spring 환경이라면 JaCoCo 플러그인과 연동이 필수입니다. 빌드 시 생성된 jacoco.xml 리포트를 Sonarqube가 읽어가서 그래프로 그려줍니다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;Sonarqube 도입 후 달라진 점&lt;/li&gt;
&lt;li&gt;(이 부분에 JaCoCo 설정 Gradle/Maven 코드를 살짝 넣어주면 좋습니다)&lt;/li&gt;
&lt;li&gt;&quot;테스트 코드 작성해 주세요&quot;라고 백번 말하는 것보다, PR(Pull Request) 화면에 &quot;커버리지 70% (통과 실패 ❌)&quot; 딱지를 붙이는 게 훨씬 효과적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;코드 리뷰 시간 단축: 띄어쓰기나 단순한 문법 오류는 봇(Bot)이 잡아주니, 리뷰어는 비즈니스 로직에만 집중할 수 있게 되었습니다.&lt;/li&gt;
&lt;li&gt;테스트 작성의 생활화: Quality Gate 통과를 위해 개발자들이 스스로 테스트 코드를 챙기기 시작했습니다.&lt;/li&gt;
&lt;li&gt;심리적 안정감: 배포 전, 최소한의 안전장치를 거쳤다는 확신이 생깁니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;    1 plugins {
    2     id 'jacoco'
    3     id 'org.sonarqube' version '4.4.1.3373'
    4 }
    5
    6 jacoco {
    7     toolVersion = &quot;0.8.11&quot;
    8 }
    9
   10 tasks.named('test') {
   11     useJUnitPlatform()
   12     finalizedBy 'jacocoTestReport' // 테스트 끝나면 리포트 생성
   13 }
   14
   15 jacocoTestReport {
   16     reports {
   17         xml.required = true // 소나큐브는 XML 리포트를 읽습니다
   18     }
   19     dependsOn test // 리포트 생성 전 테스트 필수
   20 }
   21
   22 sonarqube {
   23     properties {
   24         property &quot;sonar.projectKey&quot;, &quot;my-project-key&quot;
   25         property &quot;sonar.host.url&quot;, &quot;http://your-sonarqube-server:9000&quot;
   26         property &quot;sonar.login&quot;, &quot;your-token&quot;
   27         property &quot;sonar.coverage.jacoco.xmlReportPaths&quot;, &quot;build/reports/jacoco/test/jacocoTestReport.xml&quot;
   28     }
   29 }
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예전 글)&lt;br /&gt;앞서 말한 시큐어코딩은 IDE 제품별 저마다의 플러그인을 지원하여 쉽게 확인할 수 있다. 여기에서는 그 결과를 UI 적으로 확인하여 정보를 공유할 수 있도록 하는 가시화 툴인 sonarqube 에 대해 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sonarqube 는 &lt;b&gt;지속적인 코드 품질을 확보&lt;/b&gt;하기 위한 UI 기반의 가시화 툴이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[주요기능]&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지속적인 코드의 Inspection&lt;/li&gt;
&lt;li&gt;다양한 언어의 지원으로 단일 Point에서 확인(UI)&lt;/li&gt;
&lt;li&gt;다양한 빌드 시스템 지원(Jenkins 등)&lt;/li&gt;
&lt;li&gt;품질 요구사항 반영 가능(Test Coverage 비율, Bug 레벨 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서는 Java(11) + gradle(6.6. + jenkins(일부) 를 활용하여 SonarQube 를 이용하는 케이스에 대해 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.sonarqube.org/downloads/&quot;&gt;https://www.sonarqube.org/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Download | SonarQube&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Maximum Application Security Maximum value across branches &amp;amp; PRs Download License key will be needed to activate docker pull sonarqube:8.5.1-developer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.sonarqube.org%5D(https://www.sonarqube.org/downloads/)&quot;&gt;www.sonarqube.org](https://www.sonarqube.org/downloads/)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 SonarQube 는 elasticsearch, Embedded database 를 사용하며 안정적인 사용을 위해 DB 는 별도의 엔진을 사용하도록 권고된다. 그리고 안정적인 사용을 위해 LTS 버전으로 테스트를 했고, 다운로드 후 아래의 순서에 따라 준비할 수있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1T7BQ/btqOSx9b72e/kKC6gUBXfeuagZhRxiM0YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1T7BQ/btqOSx9b72e/kKC6gUBXfeuagZhRxiM0YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1T7BQ/btqOSx9b72e/kKC6gUBXfeuagZhRxiM0YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1T7BQ%2FbtqOSx9b72e%2FkKC6gUBXfeuagZhRxiM0YK%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;972&quot; height=&quot;496&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;InstallNTService.bat &amp;gt; StartNTService.bat &amp;gt; StartSonar.bat 순서로 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결정보는 &lt;a href=&quot;http://localhost:9000&quot;&gt;http://localhost:9000&lt;/a&gt; 이고 admin/admin 으로 접속한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1652&quot; data-origin-height=&quot;1226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crvzrP/btqOSyG21bX/3WM03F9OUKHL7PBtuOqkVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crvzrP/btqOSyG21bX/3WM03F9OUKHL7PBtuOqkVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crvzrP/btqOSyG21bX/3WM03F9OUKHL7PBtuOqkVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrvzrP%2FbtqOSyG21bX%2F3WM03F9OUKHL7PBtuOqkVk%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;1652&quot; height=&quot;1226&quot; data-origin-width=&quot;1652&quot; data-origin-height=&quot;1226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 접속화면이고 로그인 후 새로운 프로젝트를 생성하면 튜토리얼에 따라 몇가지 작업(토큰생성 등) 을 진행한 후에 ready 상태가 된다. &lt;b&gt;해당 토큰은 추후 연동을 위한 값으로 사용되므로 기억해야한다.(재발급 가능)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zpQsn/btqOFh1uHtH/N1n3QtJciNMx35HkWTxSi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpQsn/btqOFh1uHtH/N1n3QtJciNMx35HkWTxSi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpQsn/btqOFh1uHtH/N1n3QtJciNMx35HkWTxSi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzpQsn%2FbtqOFh1uHtH%2FN1n3QtJciNMx35HkWTxSi0%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;826&quot; height=&quot;439&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 프로젝트를 생성하고 `Set Up` 이 되면 token 을 생성하고, 프로젝트의 언어 및 build 기술을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 진행결과에 따라 gradle 설정 방법이 나오고 해당 부분을 프로젝트에 적용해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JBuQi/btqOCddZZLk/WVS7qPjktltpluS3JCx7SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JBuQi/btqOCddZZLk/WVS7qPjktltpluS3JCx7SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JBuQi/btqOCddZZLk/WVS7qPjktltpluS3JCx7SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJBuQi%2FbtqOCddZZLk%2FWVS7qPjktltpluS3JCx7SK%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;1584&quot; height=&quot;564&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UM0qa/btqOCdyhkFP/07XSHh0w9ylF5YmAdQ3KJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UM0qa/btqOCdyhkFP/07XSHh0w9ylF5YmAdQ3KJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UM0qa/btqOCdyhkFP/07XSHh0w9ylF5YmAdQ3KJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUM0qa%2FbtqOCdyhkFP%2F07XSHh0w9ylF5YmAdQ3KJk%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;1588&quot; height=&quot;1169&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle 에서 sonarqube 플러그인 사용을 위한 선언 추가&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;# build.gradle 파일의 내용
plugins {
    id &quot;org.sonarqube&quot; version &quot;2.7&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러그인을 통한 sonarqube 에 결과 올리는 명령어&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;./gradlew sonarqube \ -Dsonar.projectKey=sonarqube_test_project \ -Dsonar.host.url=&lt;a href=&quot;http://localhost:9000&quot;&gt;http://localhost:9000&lt;/a&gt; \ -Dsonar.login=위에서 발급받은 token 값 입력&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;build.gradle 을 통해 sonarqube 플러그인을 실행하는 경우의 gradle task&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;sonarqube { properties { property &quot;sonar.host.url&quot;, &quot;&lt;a href=&quot;http://localhost:9000/&quot;&gt;http://localhost:9000&lt;/a&gt;&quot; property &quot;sonar.login&quot;, &quot;token 설정값&quot; property &quot;sonar.projectKey&quot;, &quot;sonarqube_test_project&quot; // optional property &quot;sonar.sourceEncoding&quot;, &quot;UTF-8&quot; } }&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;sonarqube 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDE 에 있는 sonarqube 플러그인은 품질측정을 위해 upload 하는게 아닌 sonarqube 의 체크 룰을 local 에 적용하기 위한 기능을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 플러그인 이나 명령어를 실행하면 UI 를 통해 결과를 확인할 수 있는데 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4Ilj/btqOMpj64oS/fqNfROvt6QIKSr6IIBANf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4Ilj/btqOMpj64oS/fqNfROvt6QIKSr6IIBANf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4Ilj/btqOMpj64oS/fqNfROvt6QIKSr6IIBANf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4Ilj%2FbtqOMpj64oS%2FfqNfROvt6QIKSr6IIBANf1%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;1257&quot; height=&quot;347&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle task 를 실행시킨 모습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 gradle task 를 타고 실행하게 되어 있고 main/test 에 대한 java, resources 에 대한 compile, process, classes task 를 실행한다. 그 이후 Coverage 를 위한 test Task 를 수행하여 sonarqube 에 반영하게 되는 절차를 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 실행 결과가 반영된 sonarqube 화면이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zyul9/btqOFjSASKp/oJ6DTLmrqCHvKOSKgMWZf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zyul9/btqOFjSASKp/oJ6DTLmrqCHvKOSKgMWZf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zyul9/btqOFjSASKp/oJ6DTLmrqCHvKOSKgMWZf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzyul9%2FbtqOFjSASKp%2FoJ6DTLmrqCHvKOSKgMWZf1%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;1198&quot; height=&quot;743&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 해당 프로젝트의 상세화면에서 New Code, Overall Code 를 확인할 수 있는데 이는 지속적인 품질관리를 위해 기존과 달리 새로 반영된 Code 에 대한 측정결과에 전체 코드에 대한 측정결과를 확인할 수 있게 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1iFDp/btqON9OBoeF/WbH81xaAIA9cRjXmftiD21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1iFDp/btqON9OBoeF/WbH81xaAIA9cRjXmftiD21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1iFDp/btqON9OBoeF/WbH81xaAIA9cRjXmftiD21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1iFDp%2FbtqON9OBoeF%2FWbH81xaAIA9cRjXmftiD21%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;1184&quot; height=&quot;861&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;/figure&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;'Overall Code' 에서는 각 항목별 내용에 대한 결과를 전체적으로 확인할 수 있고 각 항목의 내용은 아래와 같이 구성된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bugs(버그) - 코드의 신뢰성. 코드에서 잘못된 것을 나타냄&lt;/li&gt;
&lt;li&gt;Vulnerabilities(취약점)&lt;/li&gt;
&lt;li&gt;Security Hotspots(보안 핫스팟) - 취약성이 존재하는지 여부를 평가하기 위해 수동 검토가 필요한 보안에 민감한 코드에 대한 정보&lt;/li&gt;
&lt;li&gt;Code Coverage 비율 및 전체 단위 테스트 수&lt;/li&gt;
&lt;li&gt;전체 라인중 중복된 라인 및 블럭에 대한 비율&lt;/li&gt;
&lt;li&gt;Code Smells - 유지관리에 관련해서 코드에서 더 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Issues&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Issues 메뉴는 현재 프로젝트 기준으로 모든 issue 를 확인할 수 있는데 Filter 를 통해 원하는 항목에 대한 품질을 확인할 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중 Bug, Code Smell 등의 항목은 IDE 에서 지원하는 FindBug, SonarLint 등의 inspection 도구를 통해도 확인할 수 있는데 각 Inspection 도구마다 필수체크 룰 외의 항목은 상이할 수 있으니, 프로젝트의 기준에 맞게 설정하여 진행하여야 한다. 보통 Major 이상의 이슈는 없이 가는게 보통이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nVKjO/btqOKZlHnFy/XcKKJYcTaDs5cgkJyWVbiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nVKjO/btqOKZlHnFy/XcKKJYcTaDs5cgkJyWVbiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nVKjO/btqOKZlHnFy/XcKKJYcTaDs5cgkJyWVbiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnVKjO%2FbtqOKZlHnFy%2FXcKKJYcTaDs5cgkJyWVbiK%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;1206&quot; height=&quot;654&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 화면은 Issues 항목 중 하나이며 Code Smell 기준 Blocker 로 측정된 항목이다. 해당 화면에 표출된 분석 지표를 통해서 코드의 품질을 확보해야 하며 위의 예는 test case 에서의 assertion 이 없을 경우에 나타난다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 코드의 추적(Coverage)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;spring-boot 기준으로 간단한 컨트롤러를 작성한다. 아래의 코드 작성 후 sonarqube 를 수행하면 위에 설명한 각종 정보를 확인할 수 있는데 신뢰성이나 보안 역시 중요하지만 커버리지는 branch coverage 를 우선하여 품질을 검토한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sonarqube 에서는 Branch coverage 를 Condition coverage 라 표현한다.&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@RestController
@RequestMapping(&quot;/sample&quot;)
public class SampleController {

    @GetMapping(&quot;test&quot;)
    public String test1(@RequestParam String param1) {
        if(&quot;test&quot;.equals(param1)) {
            return &quot;test&quot;;
        } else {
            return &quot;no test&quot;;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 경우 2건의 conditions cover 가 필요한데 하나는 param1 이 &quot;test&quot; 인 경우와 또 하나는 그렇지 않은 경우이다. 해당 2건의 조건에 대한 Test 가 작성되어 있으면 Cover 가 되었다고 판단되며 커버율이 올라간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 위의 조건 중 if(&quot;test&quot;.equals(param1)) 에 대한 Cover Test 케이스이다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;class SampleControllerTest {

    @Test
    void whenParam1Equal_Test_ThenReturn_Test() {
        SampleController sampleController = new SampleController();
        Assertions.assertEquals(&quot;test&quot;, sampleController.test1(&quot;test&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 결과를 sonarqube 에 반영하기 위해서는 추가로 jacoco 라는 플러그인을 사용해야 하며 build.gradle 에 관련 정보를 추가하여 아래처럼 구성해야 한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;plugins { id 'org.springframework.boot' version '2.4.0' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' // sonarqube 플러그인 지정 id 'org.sonarqube' version '2.7' // jacoco 플러그인 지정 id 'jacoco' } // jacoco의 기본설정은 html 만 생성하게 되어있으나 xml 추가를 위한 설정 jacocoTestReport { dependsOn tasks.test reports { xml.enabled(true) html.enabled(true) xml.destination(new File(&quot;build/reports/jacoco.xml&quot;)) } } sonarqube { properties { property &quot;sonar.host.url&quot;, &quot;&lt;a href=&quot;http://localhost:9000/&quot;&gt;http://localhost:9000&lt;/a&gt;&quot; property &quot;sonar.projectKey&quot;, &quot;sonarqube_test_project&quot; property &quot;sonar.login&quot;, &quot;b933f78a65f288ecbd7a159a41dd2eb205594685&quot; // jacoco 에서 생성된 xml 을 report 로 올리기 위한 설정 property &quot;sonar.coverage.jacoco.xmlReportPaths&quot;, &quot;build/reports/jacoco.xml&quot; } } // sonarqube task 수행시 clean, jacocoTestReport 를 우선 실행하기 위한 설정 tasks[&quot;sonarqube&quot;].dependsOn(clean, jacocoTestReport)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성 후에 sonarqube task 를 실행하면 clean, jacocoTestReport 를 선 수행한 후 해당 결과로 생성된 jacoco.xml 파일이 sonarqube 에 반영되어 아래와 같은 결과를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdMHPA/btqOMpEndye/WWgbkbefUyNZjaUURFRzq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdMHPA/btqOMpEndye/WWgbkbefUyNZjaUURFRzq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdMHPA/btqOMpEndye/WWgbkbefUyNZjaUURFRzq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdMHPA%2FbtqOMpEndye%2FWWgbkbefUyNZjaUURFRzq0%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;1261&quot; height=&quot;405&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xu7nV/btqOMoZMykL/mANckrokYuXsZBm8UewbxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xu7nV/btqOMoZMykL/mANckrokYuXsZBm8UewbxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xu7nV/btqOMoZMykL/mANckrokYuXsZBm8UewbxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxu7nV%2FbtqOMoZMykL%2FmANckrokYuXsZBm8UewbxK%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;889&quot; height=&quot;149&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mfGeP/btqOS8Bla2B/IKFFSIcEy6EsKWhPvLxiS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfGeP/btqOS8Bla2B/IKFFSIcEy6EsKWhPvLxiS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfGeP/btqOS8Bla2B/IKFFSIcEy6EsKWhPvLxiS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfGeP%2FbtqOS8Bla2B%2FIKFFSIcEy6EsKWhPvLxiS0%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;1208&quot; height=&quot;794&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 실행한 단위 테스트 결과에 따라 Coverage 가 50.0% 로 변경되었고 상세화면은 아래처럼 확인 가능하다. 아래화면은 Coverage 중 Condition Coverage(Branch coverage) 의 상세 화면이며 앞서 작성한 Test 코드가 커버한 main 의 소스코드가 표현되어 어느 condition 이 테스트가 되었는지 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w5hm6/btqOCc7d8Ni/BUIH5O7Ukwb0MigkfwV1f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w5hm6/btqOCc7d8Ni/BUIH5O7Ukwb0MigkfwV1f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w5hm6/btqOCc7d8Ni/BUIH5O7Ukwb0MigkfwV1f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw5hm6%2FbtqOCc7d8Ni%2FBUIH5O7Ukwb0MigkfwV1f1%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;1221&quot; height=&quot;845&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의 품질을 확보하는 과정은 개발자의 지속적인 노력이 필요하며 이 노력은 개발팀의 전체적인 규약이나 약속에 따라 방향성이 좌우된다. Test 코드를 작성하는 과정은 일반적인 개발 과정의 배수만큼 노력이 들지만 이를 일반적인 개발 과정의 일부로 받아들여야 그 만큼의 코드 품질이 확보된다고 생각한다. 리펙토링이나 클린코드나 결국 코드 품질 이슈에 대한 대응을 위한 방법들이며 Sonarqube 의 공식 홈페이지에 따르면 아래와 같은 방법으로 Clean Code 를 권고하고 있다. (&lt;a href=&quot;https://docs.sonarqube.org/latest/user-guide/clean-as-you-code/&quot;&gt;Clean as You Code | SonarQube Docs&lt;/a&gt;)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Focus on New Code - 새로 추가된 코드 기준으로 우선 검증&lt;/li&gt;
&lt;li&gt;Personal Responsibility - 개인의 책임. 개인이 현재 작업 중인 새로운 코드의 품질 확보&lt;/li&gt;
&lt;li&gt;Quality Gate - 출시할 준비가 되었을 경우&lt;/li&gt;
&lt;li&gt;Pull Request Analysis - 풀 리퀘스트 분석 및 데코레이션을 사용하여 병합하기 전에 코드가 표준을 충족하는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;코드 품질은 프로젝트 마무리 때에 몰아서 하면 프로젝트의 실패로 이어질 수 있으니 초기부터 지속적인 관리가 필요하다.&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;</description>
      <category>ㄱㅐㅂㅏㄹ/OSS(Open Source Software)</category>
      <category>anlyze</category>
      <category>coverage</category>
      <category>inspect code</category>
      <category>sonarqube</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/7</guid>
      <comments>https://bj-lee.tistory.com/7#entry7comment</comments>
      <pubDate>Sun, 4 Jan 2026 14:45:03 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] EC2 대신 Fargate를 도입해야 할까? 비용 분석 및 실무 사용기</title>
      <link>https://bj-lee.tistory.com/22</link>
      <description>&lt;p&gt;  AWS에서 컨테이너 서비스를 구축할 때 가장 큰 고민은 &amp;quot;EC2 모드로 할 것인가, Fargate 모드로 할 것인가?&amp;quot;입니다. 직접 서비스를 운영하며 느꼈던 장단점과, 많은 분이 오해하고 있는 비용 효율성에 대해 정리해 드립니다.&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Fargate란 무엇인가? (EC2와 차이점)&lt;/p&gt;
&lt;p&gt;가장 쉽게 설명하면 &amp;quot;서버 관리의 주도권&amp;quot;이 누구에게 있느냐의 차이입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EC2 Launch Type: 내가 직접 서버(Node)를 띄우고, 그 위에 컨테이너를 올립니다. OS 패치, 오토 스케일링 설정, 보안 그룹 관리 등을 직접 해야 합니다.&lt;/li&gt;
&lt;li&gt;Fargate Launch Type: AWS가 서버를 관리해 줍니다. 나는 &amp;quot;CPU 2GB, 메모리 4GB 주세요&amp;quot;라고 주문만 하면 컨테이너가 뜹니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;p&gt;비용 분석: Fargate는 정말 비싼가?&lt;/p&gt;
&lt;p&gt;&amp;quot;Fargate는 편한 대신 비싸다&amp;quot;는 인식이 있습니다. 반은 맞고 반은 틀립니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;24시간 풀로 돌아가는 대규모 클러스터: EC2(Reserved Instances/Savings Plans)가 더 저렴합니다.&lt;/li&gt;
&lt;li&gt;트래픽이 들쭉날쭉하거나, 개발/테스트 환경, 배치 작업: Fargate가 유리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;실제 경험상 Fargate가 비용 효율적인 구간:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;유휴 자원(빈 공간)이 많은 경우: EC2는 꽉 채워 쓰지 않아도 인스턴스 비용을 다 내지만, Fargate는 딱 쓴 만큼만 냅니다.&lt;/li&gt;
&lt;li&gt;운영 인건비: 서버 관리(OS 업데이트, 에이전트 관리)에 들어가는 엔지니어의 시간을 돈으로 환산하면 Fargate가 압도적으로 저렴합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;p&gt;실무 도입 시 겪었던 이슈와 해결 팁&lt;/p&gt;
&lt;p&gt;Fargate를 처음 도입할 때 가장 당황했던 포인트들과 해결책입니다.&lt;/p&gt;
&lt;p&gt;A. 로그 확인이 어렵다?&lt;br&gt;EC2는 접속해서 로그 파일을 까보면 되지만, Fargate는 서버에 접속할 수 없습니다(기본적으로).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;해결: awslogs 드라이버를 사용하여 CloudWatch Logs로 로그를 쏘는 설정이 필수입니다. 최근에는 ECS Exec 기능을 통해 Fargate 컨테이너 내부로 쉘 접속도 가능해져 디버깅이 쉬워졌습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;B. 이미지가 너무 크면 느리다&lt;br&gt;Fargate는 매번 새로운 VM 위에서 컨테이너를 띄우는 방식이므로, 도커 이미지를 다운로드(Pull)하는 시간이 곧 부팅 시간입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;해결: 이미지를 최대한 경량화(Alpine 리눅스 사용 등)하고, 불필요한 레이어를 줄여야 빠른 스케일 아웃이 가능합니다. 그렇지만 대비시간은 늦기는 합니다..^^;;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C. Timezone 설정&lt;br&gt;기본적으로 UTC 시간을 따릅니다. 한국 시간(KST)이 필요하다면 Dockerfile에서 설정하거나, 환경 변수 TZ=Asia/Seoul을 주입해야 합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;&lt;p&gt;결론: 언제 Fargate를 써야 할까?&lt;/p&gt;
&lt;p&gt;이런 경우 Fargate를 강력 추천합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;인프라 전담 엔지니어(DevOps)가 따로 없는 소규모 팀&lt;/li&gt;
&lt;li&gt;트래픽 예측이 어렵거나 급격히 변하는 서비스&lt;/li&gt;
&lt;li&gt;CI/CD 파이프라인용 일회성 빌드 에이전트&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이런 경우 EC2를 고려하세요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU가 필요한 고성능 컴퓨팅 작업 (Fargate GPU는 제한적/비쌈)&lt;/li&gt;
&lt;li&gt;이미 예약 인스턴스(RI)를 많이 구매해 둔 경우&lt;/li&gt;
&lt;li&gt;커널 레벨의 튜닝이 필요한 특수 목적 애플리케이션&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;   아래는 제가 만든건 아니지만, 실제 적용되어 있던 json 의 형태입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;    1 {
    2   &amp;quot;family&amp;quot;: &amp;quot;alpha-squad-api-task&amp;quot;,
    3   &amp;quot;networkMode&amp;quot;: &amp;quot;awsvpc&amp;quot;,
    4   &amp;quot;requiresCompatibilities&amp;quot;: [
    5     &amp;quot;FARGATE&amp;quot;
    6   ],
    7   &amp;quot;cpu&amp;quot;: &amp;quot;256&amp;quot;,
    8   &amp;quot;memory&amp;quot;: &amp;quot;512&amp;quot;,
    9   &amp;quot;containerDefinitions&amp;quot;: [
   10     {
   11       &amp;quot;name&amp;quot;: &amp;quot;api-container&amp;quot;,
   12       &amp;quot;image&amp;quot;: &amp;quot;YOUR_ACCOUNT_ID.dkr.ecr.ap-northeast-2.amazonaws.com/alpha-squad:latest&amp;quot;,
   13       &amp;quot;portMappings&amp;quot;: [
   14         {
   15           &amp;quot;containerPort&amp;quot;: 8080,
   16           &amp;quot;hostPort&amp;quot;: 8080,
   17           &amp;quot;protocol&amp;quot;: &amp;quot;tcp&amp;quot;
   18         }
   19       ],
   20       &amp;quot;environment&amp;quot;: [
   21         {
   22           &amp;quot;name&amp;quot;: &amp;quot;TZ&amp;quot;,
   23           &amp;quot;value&amp;quot;: &amp;quot;Asia/Seoul&amp;quot;
   24         },
   25         {
   26           &amp;quot;name&amp;quot;: &amp;quot;SPRING_PROFILES_ACTIVE&amp;quot;,
   27           &amp;quot;value&amp;quot;: &amp;quot;prod&amp;quot;
   28         }
   29       ],
   30       &amp;quot;logConfiguration&amp;quot;: {
   31         &amp;quot;logDriver&amp;quot;: &amp;quot;awslogs&amp;quot;,
   32         &amp;quot;options&amp;quot;: {
   33           &amp;quot;awslogs-group&amp;quot;: &amp;quot;/ecs/alpha-squad-api&amp;quot;,
   34           &amp;quot;awslogs-region&amp;quot;: &amp;quot;ap-northeast-2&amp;quot;,
   35           &amp;quot;awslogs-stream-prefix&amp;quot;: &amp;quot;ecs&amp;quot;
   36         }
   37       },
   38       &amp;quot;essential&amp;quot;: true
   39     }
   40   ]
   41 }&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;cpu &amp;amp; memory: Fargate는 CPU와 메모리 조합이 정해져 있습니다. 위 설정(256, 512)은 가장 저렴한 최소 사양 조합입니다.&lt;/li&gt;
&lt;li&gt;networkMode: Fargate는 반드시 awsvpc 모드를 사용해야 합니다. 각 태스크가 고유한 ENI(탄력적 네트워크 인터페이스)를 할당받아 보안 그룹 제어가 정교해집니다.&lt;/li&gt;
&lt;li&gt;logConfiguration: 서버에 접속할 수 없는 Fargate 특성상, awslogs 드라이버를 통해 CloudWatch Logs로 로그를 보내는 작업은 필수입니다.&lt;/li&gt;
&lt;li&gt;environment (TZ): 본문에서 언급한 대로 시스템 타임존을 한국 시간으로 맞추기 위해 환경변수를 주입한 예시입니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ㄱㅐㅂㅏㄹ</category>
      <category>AWS</category>
      <category>devops</category>
      <category>EC2</category>
      <category>fargate</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/22</guid>
      <comments>https://bj-lee.tistory.com/22#entry22comment</comments>
      <pubDate>Sun, 4 Jan 2026 14:40:08 +0900</pubDate>
    </item>
    <item>
      <title>[Java/Spring] 인터페이스/추상클래스 JSON 변환이 안될 때? Jackson 다형성(Polymorphism) 완벽 해결법</title>
      <link>https://bj-lee.tistory.com/21</link>
      <description>&lt;p&gt; API 개발을 하다 보면 추상 클래스나 인터페이스를 상속받은 여러 하위 클래스를 하나의 리스트로 주고받아야 할 때가 있습니다. 하지만 이를 아무 설정 없이&lt;br&gt;  JSON으로 변환하고 다시 객체로 받으려 하면, Jackson 라이브러리는 하위 클래스 중 어떤 것으로 변환해야 할지 몰라 에러를 발생시킵니다.  &lt;/p&gt;
&lt;p&gt;  오늘은 실무에서 반드시 마주하게 되는 Jackson의 다형성 처리 방법을 정리해 보겠습니다.  &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;  왜 에러가 발생할까?  &lt;/p&gt;
&lt;p&gt;  자바에서는 상속 관계가 명확하지만, JSON은 단순한 텍스트 구조입니다.  &lt;/p&gt;
&lt;p&gt;  예를 들어, 알림(Notification)이라는 추상 클래스를 이메일과 SMS 알림이 상속받고 있다고 가정해 봅시다. 이를 리스트로 만들어 JSON으로 변환하면 다음과 같이&lt;br&gt;  보입니다.  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  \[  
    { &amp;quot;receiver&amp;quot;: &amp;quot;userA&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;이메일 내용&amp;quot;, &amp;quot;subject&amp;quot;: &amp;quot;제목&amp;quot; },  
    { &amp;quot;receiver&amp;quot;: &amp;quot;userB&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;SMS 내용&amp;quot;, &amp;quot;phoneNumber&amp;quot;: &amp;quot;010-0000-0000&amp;quot; }  
  \]  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;  이 데이터를 다시 자바 객체로 역직렬화하려고 하면, Jackson은 각 요소가 이메일인지 SMS인지 구별할 방법이 없습니다. 결과적으로 에러가 발생하거나, 데이터가&lt;br&gt;  누락된 채 변환되어 버립니다.  &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;  해결 방법: 타입 힌트 제공  &lt;/p&gt;
&lt;p&gt;  Jackson에서 제공하는 어노테이션을 사용하면 JSON 데이터에 &amp;quot;이 객체는 어떤 클래스다&amp;quot;라는 표식을 남길 수 있습니다.  &lt;/p&gt;
&lt;p&gt;  상세 코드 예시  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  import com.fasterxml.jackson.annotation.JsonSubTypes;  
  import com.fasterxml.jackson.annotation.JsonTypeInfo;  
  import lombok.Getter;  
  import lombok.NoArgsConstructor;  

  @JsonTypeInfo(  
      use = JsonTypeInfo.Id.NAME,  
      include = JsonTypeInfo.As.PROPERTY,  
      property = &amp;quot;type&amp;quot;,  
      visible = true  
  )  
  @JsonSubTypes({  
      @JsonSubTypes.Type(value = EmailNotification.class, name = &amp;quot;EMAIL&amp;quot;),  
      @JsonSubTypes.Type(value = SmsNotification.class, name = &amp;quot;SMS&amp;quot;)  
  })  
  @Getter  
  @NoArgsConstructor  
  public abstract class Notification {  
      private String receiver;  
      private String content;  
      private String type;  
  }  

  @Getter  
  @NoArgsConstructor  
  public class EmailNotification extends Notification {  
      private String subject;  
  }  

  @Getter  
  @NoArgsConstructor  
  public class SmsNotification extends Notification {  
      private String phoneNumber;  
  }  &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;  변환된 JSON 결과물  &lt;/p&gt;
&lt;p&gt;  이제 Jackson은 자동으로 type 필드를 추가하며, 이를 통해 정확한 하위 클래스를 찾아냅니다.  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  {  
    &amp;quot;type&amp;quot;: &amp;quot;EMAIL&amp;quot;,  
    &amp;quot;receiver&amp;quot;: &amp;quot;userA&amp;quot;,  
    &amp;quot;content&amp;quot;: &amp;quot;이메일 내용&amp;quot;,  
    &amp;quot;subject&amp;quot;: &amp;quot;제목&amp;quot;  
  }  &lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;p&gt;  실무자를 위한 보안 팁  &lt;/p&gt;
&lt;p&gt;  주의할 점은 전체 패키지 경로를 노출하는 설정을 피하는 것입니다.  &lt;/p&gt;
&lt;p&gt;   * 패키지 경로 노출의 위험성: JSON에 실제 클래스 경로가 포함되면 보안상 취약할 수 있습니다.&lt;br&gt;   * 해결책: 해커가 클래스 경로를 조작하여 공격하는 것을 방지하기 위해 별칭 방식을 사용해야 합니다.  &lt;/p&gt;
&lt;p&gt;  권장 사항: 별칭을 사용하는 방식을 선택하고, 허용할 클래스 리스트를 명시하는 화이트리스트 방식을 사용하시기 바랍니다.  &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;  요약 및 결론  &lt;/p&gt;
&lt;p&gt;  Jackson의 다형성 처리는 유연한 API 설계를 위해 필수적인 기술입니다.  &lt;/p&gt;
&lt;p&gt;   * 구분 필드 지정: 어떤 필드명으로 타입을 구분할지 결정합니다.&lt;br&gt;   * 클래스 매핑: 실제 하위 클래스들과 별칭을 연결합니다.&lt;br&gt;   * 보안 강화: 전체 클래스 경로 노출보다는 별칭 사용을 적극 권장합니다.&lt;/p&gt;</description>
      <category>ㄱㅐㅂㅏㄹ/Spring</category>
      <category>Jackson</category>
      <category>jackson deserialize</category>
      <category>jackson interface deserialize</category>
      <category>spring jackson</category>
      <category>springboot</category>
      <category>백엔드개발</category>
      <category>역직렬화</category>
      <category>직렬화</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/21</guid>
      <comments>https://bj-lee.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 4 Jan 2026 14:11:46 +0900</pubDate>
    </item>
    <item>
      <title>[CES 2026 프리뷰] 생성형을 넘어 '행동'하는 AI로</title>
      <link>https://bj-lee.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서론: 2026년, AI 패러다임의 거대한 전환&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;SE-ddf012e8-3b32-42fd-898d-f51f5117d937&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-ddf012e8-3b32-42fd-898d-f51f5117d937&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ddf012e8-3b32-42fd-898d-f51f5117d937&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-2361b5e5-4cf3-40f9-987d-ebd896124e8b&quot;&gt;
&lt;p id=&quot;SE-fda08300-38ff-40b2-bbe4-418761c59e25&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2026년 새해가 밝았다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-28f162e7-dc36-4a24-9421-d1749eccdc3b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IT 업계의 시선은 이미 다음 주, 미국 라스베이거스에서 개최될 세계 최대 가전&amp;middot;IT 전시회 **'CES 2026'**으로 쏠려 있다. 매년 CES는 그 해의 기술 트렌드를 관통하는 키워드를 제시해 왔다. 2024년과 2025년이 '생성형 AI(Generative AI)'의 가능성을 탐색하고 확산하는 시기였다면, 2026년은 명확히 **'에이전틱 AI(Agentic AI, 에이전트 AI)'**가 주인공이 될 전망이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8027852e-d26f-4a31-a0ad-e855010f8c37&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-97ddbd13-07c0-4a0f-9a3a-af859020e423&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순히 텍스트나 이미지를 만들어내는 것을 넘어, 스스로 판단하고 도구를 사용하여 물리적&amp;middot;디지털 과업을 완수하는 '행동하는 AI'. 이번 포스팅에서는 CES 2026의 핵심 화두인 에이전틱 AI의 개념과 이를 구현하는 기술, 그리고 우리가 주목해야 할 관전 포인트를 심층 분석한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-03112da6-83f4-421f-80ab-ff8ec8ab6c91&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-03112da6-83f4-421f-80ab-ff8ec8ab6c91&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-03112da6-83f4-421f-80ab-ff8ec8ab6c91&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b2dd9c7b-99ae-4968-a908-c3e7b44f2d73&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-b2dd9c7b-99ae-4968-a908-c3e7b44f2d73&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b2dd9c7b-99ae-4968-a908-c3e7b44f2d73&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-ba93dcc5-b314-49c4-8fe5-18329e8a5525&quot;&gt;
&lt;p id=&quot;SE-bea68a93-068c-4345-9f13-95bf37cf5018&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 정의: 에이전틱 AI(Agentic AI)란 무엇인가?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-bfb0271f-fc15-421c-8d45-fdf51ba57ba9&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-bfb0271f-fc15-421c-8d45-fdf51ba57ba9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-bfb0271f-fc15-421c-8d45-fdf51ba57ba9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a3d558c5-0198-4f6e-99f8-339dd13fa8f7&quot;&gt;
&lt;p id=&quot;SE-3a13af45-10ef-46f6-a635-15ae8b90ae60&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리는 지난 2년간 거대언어모델(LLM)의 비약적인 발전을 목격했다. 하지만 기존의 LLM은 챗봇 창 안에서 답변을 생성하는 수동적인 역할에 머무는 경우가 많았다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-af40d2ab-19e8-4510-bacf-6416820e3639&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-4cbfbd3c-4a57-41ad-a193-7dda5b9a9cbb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;에이전틱 AI&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 기존 AI의 한계를 뛰어넘는 개념이다. 사용자가 모호한 목표를 제시하더라도, AI가 스스로 세부 계획을 수립하고(Planning), 필요한 도구(API, 소프트웨어, 로봇 팔 등)를 선택하여(Tool Use), 최종 결과를 수행하는(Execution) 자율적인 시스템을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fcf8b027-d16a-40b3-8c79-9135e042c917&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기존 AI (Chatbot):&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;비행기 표 예매 사이트 알려줘.&quot; (정보 제공)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;에이전틱 AI:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;다음 주 도쿄 출장 일정 잡아줘.&quot; &amp;rarr; 사용자의 캘린더 확인, 항공권 최저가 검색 및 결제, 호텔 예약, 현지 교통편 어레인지까지 스스로 수행. (행동 및 완결)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-69230365-af52-4417-8b9d-222dd582cf64&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f182bd05-83ef-4afe-a133-de59fad4e62f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전문가들은 이번 CES 2026이 '대화형 AI(Chat AI)'에서 '행동형 AI(Action AI)'로 넘어가는 변곡점이 될 것으로 보고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-6bdc227d-6d4e-4583-acc3-18293fe0ec76&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-6bdc227d-6d4e-4583-acc3-18293fe0ec76&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-6bdc227d-6d4e-4583-acc3-18293fe0ec76&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2761e69a-56b5-4a63-8c7a-bc6c30feb55e&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-2761e69a-56b5-4a63-8c7a-bc6c30feb55e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2761e69a-56b5-4a63-8c7a-bc6c30feb55e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-299e9877-69af-4405-b7cd-a9be53ebe072&quot;&gt;
&lt;p id=&quot;SE-e299c27e-0e14-478d-9681-0d7a66be3865&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. CES 2026의 핵심 전장: 한국 기업 약진과 기술 격전&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3c9e3f90-16d8-4bc2-9f75-3900860fe5a0&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-3c9e3f90-16d8-4bc2-9f75-3900860fe5a0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-3c9e3f90-16d8-4bc2-9f75-3900860fe5a0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-2b95660b-d213-470e-b29e-2dc6033ae2e4&quot;&gt;
&lt;p id=&quot;SE-75489ed9-a3b2-4738-944e-4042bb50b3fd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CES 2026 혁신상 수상 결과는 한국 기업들의 기술적 우위를 증명했다. 전체 혁신상 수상 기업 중 약 60%가 한국 기업이라는 점은 고무적이다. 특히 삼성전자, LG전자 등 대기업뿐만 아니라 딥테크 스타트업들이 에이전틱 AI 생태계의 주도권을 잡기 위해 나섰다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-39423f19-669f-4959-85e9-2d800de7d0f3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7d07ab48-08be-4604-aa7f-a84cb64320ee&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;① 삼성전자와 LG전자: 'AI 집사'의 완성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1813c458-a049-4564-a15c-3bb450a5fbba&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가전 업계의 화두는 단연 '초개인화된 AI 에이전트'다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-81f3152c-940d-4300-abd9-c144cec61c44&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;삼성전자:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 자사의 AI 플랫폼 '스마트싱스'에 고도화된 에이전트 기능을 탑재, 기기 간 연결을 넘어 사용자의 생활 패턴을 예측하고 선제적으로 가전을 제어하는 기술을 선보인다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LG전자:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; '공감지능(Affectionate Intelligence)'을 앞세워, 사용자의 감정과 맥락을 이해하는 AI 에이전트 로봇을 공개할 예정이다. 이는 단순한 명령 수행을 넘어 정서적 교감까지 가능한 단계로의 진화를 의미한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-39b378df-4293-485e-96de-e5d707d6e00e&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-138c715d-7a66-483e-a2ea-101e92e4de26&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;② 모빌리티(SDV): 움직이는 AI 에이전트&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f5214cee-1ce3-4339-bbdf-0c70eb6a3458&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-585e8850-70bc-4362-9d55-25a47f90c136&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현대차그룹을 비롯한 모빌리티 기업들은 자동차를 '소프트웨어 중심 자동차(SDV)'로 정의하고, 차량 자체를 하나의 거대한 AI 에이전트로 탈바꿈시켰다. CES 2026에서는 차량 내 인포테인먼트 시스템이 운전자의 스케줄 관리, 차량 상태 진단, 자율주행 경로 최적화를 능동적으로 수행하는 기술이 대거 시연될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-880b2f48-0c50-428f-9957-32a92046852a&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-880b2f48-0c50-428f-9957-32a92046852a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-880b2f48-0c50-428f-9957-32a92046852a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-965f7f1d-869c-42ed-b638-9dde24b6ffab&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-965f7f1d-869c-42ed-b638-9dde24b6ffab&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-965f7f1d-869c-42ed-b638-9dde24b6ffab&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-688870f4-c12c-446f-98ef-86b94ed657c3&quot;&gt;
&lt;p id=&quot;SE-7b985a53-6b8f-4fbf-98d5-2f4995fa673f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 기술적 기반: 온디바이스 AI와 로보틱스의 결합&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-cc385d5c-d848-4a34-9f91-8c0df85dc6f0&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-cc385d5c-d848-4a34-9f91-8c0df85dc6f0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-cc385d5c-d848-4a34-9f91-8c0df85dc6f0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-0be1a2d7-7c95-40be-9a31-2fa474e4f0d8&quot;&gt;
&lt;p id=&quot;SE-43199bb0-b9c2-462b-9ceb-e29efd68fc0c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에이전틱 AI가 실생활에 적용되기 위해서는 두 가지 핵심 기술의 뒷받침이 필수적이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7ffdedc0-e103-40dc-831b-ac0b71b36d99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-12245b22-4198-436e-9957-6ad570e6bc06&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;① 온디바이스 AI (On-Device AI)의 필수화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6a221d70-7a51-4688-b9d4-4260d575ab08&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-c4f72173-08e9-40ea-8e78-6c539d75a8e6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI가 실시간으로 판단하고 행동하기 위해서는 클라우드를 거치지 않고 기기 자체에서 연산을 처리하는 '온디바이스 AI'가 필수적이다. 인터넷 연결 없이도 보안성을 유지하며 빠른 응답 속도를 보장해야 하기 때문이다. 이에 따라 인텔, 퀄컴, 삼성전자 등이 선보일 차세대 NPU(신경망처리장치) 칩셋 성능 경쟁도 이번 CES의 주요 관전 포인트다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-acb31b95-1603-4cd8-8e3b-18d713966f69&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-30c06844-73ab-4a43-b480-331ee1c113d0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;② 휴머노이드 로봇의 실용화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d18ae2e8-bb0e-450f-95cb-06801cef51ca&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-8d2d3daa-4bd2-4480-92c8-dda8d4b62a73&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에이전틱 AI의 '물리적 신체'가 될 휴머노이드 로봇 기술도 비약적으로 발전했다. 테슬라의 옵티머스, 현대차의 보스턴 다이내믹스 등이 선보일 로봇들은 이제 걷거나 춤추는 퍼포먼스를 넘어, 설거지를 하거나 물건을 정리하는 등 인간의 노동을 대체하는 '유틸리티' 기능을 강조할 것이다. 에이전틱 AI가 두뇌라면, 로보틱스는 그 손발이 되어 물리적 세계에 개입하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-98640146-6aec-4a3c-9a61-c671a873ad5b&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-98640146-6aec-4a3c-9a61-c671a873ad5b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-98640146-6aec-4a3c-9a61-c671a873ad5b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-d58ead27-72a4-40b7-9955-d89f9631b1d4&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-d58ead27-72a4-40b7-9955-d89f9631b1d4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-d58ead27-72a4-40b7-9955-d89f9631b1d4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-cd36e7a3-932d-44e5-ae53-bf6db89e1502&quot;&gt;
&lt;p id=&quot;SE-6c96a238-8397-4bf8-907c-a0469ca59292&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4. 시사점 및 전망: '편리'를 넘어 '위임'의 시대로&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-4e4bdf68-0022-4db8-9506-1859afbe7b8c&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-4e4bdf68-0022-4db8-9506-1859afbe7b8c&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-4e4bdf68-0022-4db8-9506-1859afbe7b8c&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-b571addb-6df6-40e0-b505-ef49d132621f&quot;&gt;
&lt;p id=&quot;SE-48153601-96a5-4d78-a08d-d97997c085ab&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CES 2026을 기점으로 우리는 AI에게 업무를 '보조'받는 단계를 지나, 업무를 완전히 **'위임(Delegation)'**하는 시대로 진입하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0fcf493a-2306-4041-85cb-0f3b01dc2b0b&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-1c48ece4-3a0e-4a37-b443-7fa5bea6ae50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 기업에게는 엄청난 생산성 향상을, 개인에게는 시간의 자유를 의미한다. 하지만 동시에 해결해야 할 과제도 명확하다. AI가 자율적으로 행동할 때 발생할 수 있는 오작동(Hallucination)에 대한 안전장치, 그리고 AI의 행동에 대한 책임 소재를 명확히 하는 법적&amp;middot;윤리적 논의가 기술 발전 속도에 맞춰 진행되어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-88639a5d-34dc-440e-8381-62d2d95d68b4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-55a7657a-840e-4312-8b82-fe322f37d3dc&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;결론적으로,&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; CES 2026은 AI 거품론을 잠재우고 '돈이 되는 AI', '실질적 효용을 주는 AI'를 증명하는 자리가 될 것이다. 투자자라면 에이전틱 AI를 구현하는 소프트웨어 기업뿐만 아니라, 이를 구동할 하드웨어(반도체, 로봇 부품) 밸류체인에 주목할 필요가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9c4a316c-3152-4f14-b91c-e3977387d797&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-d8287506-559e-419b-ae68-a52ac531c8a5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[마무리 요약]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpBnUa/dJMcafL1m4m/KdZnkCk3mLtqsyS2ZMq08K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpBnUa/dJMcafL1m4m/KdZnkCk3mLtqsyS2ZMq08K/img.png&quot; data-alt=&quot;CES 2026 에 대표 주제들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpBnUa/dJMcafL1m4m/KdZnkCk3mLtqsyS2ZMq08K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpBnUa%2FdJMcafL1m4m%2FKdZnkCk3mLtqsyS2ZMq08K%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; alt=&quot;CES 2026 에 대표 주제들&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CES 2026 에 대표 주제들&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CES 2026의 핵심:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 생성형 AI를 넘어 자율적으로 행동하는 '에이전틱 AI'의 대두.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;주요 플레이어:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 혁신상을 휩쓴 한국 기업(삼성, LG, 스타트업)들의 기술 리더십 주목.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기술 트렌드:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 온디바이스 AI와 로보틱스의 결합으로 AI의 물리적 영향력 확대.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;전망:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 보조(Assistant)에서 위임(Agent)으로의 패러다임 시프트 본격화.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9434c150-68c5-49e1-88fe-b97569467db7&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-9434c150-68c5-49e1-88fe-b97569467db7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9434c150-68c5-49e1-88fe-b97569467db7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9d43a7f0-c12b-4ac0-ad9c-45518e884063&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-9d43a7f0-c12b-4ac0-ad9c-45518e884063&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9d43a7f0-c12b-4ac0-ad9c-45518e884063&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-6464883b-abae-45cd-94b8-69cd55d14b2e&quot;&gt;
&lt;p id=&quot;SE-ba6a31f1-f3e8-498e-aa3c-ef64222c50ff&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;이 글은 &lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;CES 2026 프리뷰&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt; 분석글이며, 특정 종목에 대한 투자 권유가 아닙니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <category>AI</category>
      <category>CES</category>
      <category>sdv</category>
      <category>삼성전자</category>
      <category>삼전</category>
      <category>엘전</category>
      <category>엘지</category>
      <category>현대차</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/32</guid>
      <comments>https://bj-lee.tistory.com/32#entry32comment</comments>
      <pubDate>Thu, 1 Jan 2026 22:04:40 +0900</pubDate>
    </item>
    <item>
      <title>나 대신 주식 매매하는 AI 군단(Alpha Squad) 만들기</title>
      <link>https://bj-lee.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-293a5ff6-c70e-4a0d-8e5d-86691ce7e64f&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-293a5ff6-c70e-4a0d-8e5d-86691ce7e64f&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-293a5ff6-c70e-4a0d-8e5d-86691ce7e64f&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-54c2420a-41d1-40d5-a216-20b46bfe5238&quot;&gt;
&lt;p id=&quot;SE-7de1a2a9-bb46-4f09-a088-b31f9b82b87a&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0095e9;&quot;&gt;&lt;b&gt;DAY 1&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b76d68dd-782c-44ff-b72d-b1b7ec920e77&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-b76d68dd-782c-44ff-b72d-b1b7ec920e77&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b76d68dd-782c-44ff-b72d-b1b7ec920e77&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-1aefb4b0-e69b-4382-b9e0-f97352708f20&quot;&gt;
&lt;p id=&quot;SE-51a48c77-f3b0-48bd-89e3-942b66fd3850&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;&lt;b&gt;주식 매매하는 AI 군단(Alpha Squad)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2b17a675-9200-455e-9d38-554eadc68802&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-2b17a675-9200-455e-9d38-554eadc68802&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2b17a675-9200-455e-9d38-554eadc68802&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2765a580-48fb-45d4-9ebf-bce55d69d51d&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-2765a580-48fb-45d4-9ebf-bce55d69d51d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2765a580-48fb-45d4-9ebf-bce55d69d51d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-c7ba63cd-dbf4-49f4-a238-b7ffd5dbbed1&quot;&gt;
&lt;p id=&quot;SE-feed55bb-3275-42f0-b843-c61f09c08326&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프롤로그: 왜 우리는 모니터 앞에서 늙어야 하는가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9f0c9bad-713e-4842-af0e-1cc2ff5a0a71&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-9f0c9bad-713e-4842-af0e-1cc2ff5a0a71&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9f0c9bad-713e-4842-af0e-1cc2ff5a0a71&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-85fb6666-e656-4874-a20a-476421998102&quot;&gt;
&lt;p id=&quot;SE-eb39a827-6e9f-4b9b-b036-715392305cc0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-115db304-9383-4743-8093-fc40394cfde2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2026년이 찾아왔습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-60ffed11-48ee-4019-bed3-f65c9d366793&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 올해는 다를꺼야!! 라며 시작한게 있습니다. 그 내용을 공유할까 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-33ba8006-45f5-4ea7-bbec-0784e61c70c8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-cabc2424-df92-443e-8933-8771a2c22fb5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직장인 투자자에게 '단타(Day Trading)'는 금단의 영역입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-77bba76d-d0fd-4221-8292-9f04f24e8787&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상사는 업무를 지시하고, 회의는 끊이지 않는데, 주식 시장은 나를 기다려주지 않습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ff3311ef-084b-47cb-bb75-b7cac2671630&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특히 밤새 열리는 미국 시장(Nasdaq)을 보려면 잠을 포기해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-63897d81-9044-4d5d-b333-ee3d3b3e49e8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-72c966c7-1e73-4a5f-869f-8a95c93c7619&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-72c966c7-1e73-4a5f-869f-8a95c93c7619&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-72c966c7-1e73-4a5f-869f-8a95c93c7619&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-72c966c7-1e73-4a5f-869f-8a95c93c7619&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-72c966c7-1e73-4a5f-869f-8a95c93c7619&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ylfyt/dJMcaiu95e0/1oXr9mhtuS8gzJ8y2GZRc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ylfyt/dJMcaiu95e0/1oXr9mhtuS8gzJ8y2GZRc1/img.png&quot; data-alt=&quot;미국장 하는 아저씨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ylfyt/dJMcaiu95e0/1oXr9mhtuS8gzJ8y2GZRc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fylfyt%2FdJMcaiu95e0%2F1oXr9mhtuS8gzJ8y2GZRc1%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; alt=&quot;미국장 하는 아저씨&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;936&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;미국장 하는 아저씨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&quot;내가 일할 때 나 대신 차트를 보고, 내가 잘 때 나 대신 매매하는 &lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-dfad073a-be6c-4acb-8d8a-f35b0731fe3f&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-dfad073a-be6c-4acb-8d8a-f35b0731fe3f&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-dfad073a-be6c-4acb-8d8a-f35b0731fe3f&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;SE-883e2664-8264-4056-918b-5936c9326a76&quot;&gt;
&lt;p id=&quot;SE-e098d057-0ab1-4ed8-babb-e37003d34279&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;'지능형 에이전트'가 있다면?&quot;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-68d8cdae-eb65-4e9a-adc2-3ec651f2b422&quot;&gt;
&lt;p id=&quot;SE-33ce4fcb-0d50-4be0-b0d6-9e6825c531dd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777;&quot;&gt;나름 개발자인 나인데 말이야..&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a402693a-091b-45ac-b6d3-281c4f69fa30&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-a402693a-091b-45ac-b6d3-281c4f69fa30&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a402693a-091b-45ac-b6d3-281c4f69fa30&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-85aefd92-8e96-4318-9e09-273718528d04&quot;&gt;
&lt;p id=&quot;SE-c74c2dfe-542e-44bb-8bb7-53fbaf6e89e7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f68d4734-88f9-4b51-b456-4b3a4ab073c6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그런데, 단순한&amp;nbsp;매수&amp;nbsp;봇을 만들고 싶지는 않았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e1ef88d7-6627-4f17-9f0b-c65deb9a2981&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;뉴스를 읽고(News Reader), 차트를 분석하며(Analyst), 리스크를 계산하고(Risk Manager), 서로 토론하여 의사결정을 내리는(Leader) 그런 팀을 만들고 싶었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-25937dc4-3b59-4d6d-9b95-240426cec8ee&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-d304b5e8-cf08-4a92-96aa-a16ddb7a36a5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아무래도 저의 업무가 개발영역이다보니 AI 를 접할 일이 많았고 &lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;-나도 모르는 사이- &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;이미 저의 삶에 깊게 관여하고 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b09781ec-3f5d-41af-8594-6fea07cb8399&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ad3a829c-1006-450e-954f-177c65db7804&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-ad3a829c-1006-450e-954f-177c65db7804&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ad3a829c-1006-450e-954f-177c65db7804&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-80c0379a-f88a-4c5e-96b4-ee10c16dba72&quot;&gt;
&lt;p id=&quot;SE-87b18ef5-e218-40e7-8023-b994a0ca9209&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 시작했습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-523f855a-bc6f-4336-bceb-7bf88f3792d3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드명 Azrael Project입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d167d7a3-e3e3-4dd8-9029-4e2eaf04579b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;Azreal 은 제가 게임에서 주로 사용하는 케릭터명이기도 합니다. ^^&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-90a880bb-029b-49c2-8ff8-33f3a878afdc&quot; data-a11y-title=&quot;스티커&quot; data-compid=&quot;SE-90a880bb-029b-49c2-8ff8-33f3a878afdc&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-90a880bb-029b-49c2-8ff8-33f3a878afdc&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CBgID/dJMcaiu95eW/grMXE6MVaQuldS2nWI0DI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CBgID/dJMcaiu95eW/grMXE6MVaQuldS2nWI0DI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CBgID/dJMcaiu95eW/grMXE6MVaQuldS2nWI0DI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCBgID%2FdJMcaiu95eW%2FgrMXE6MVaQuldS2nWI0DI1%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;370&quot; height=&quot;320&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a06bd309-8c9d-4bb2-8d3f-ad9954890fb7&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-a06bd309-8c9d-4bb2-8d3f-ad9954890fb7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a06bd309-8c9d-4bb2-8d3f-ad9954890fb7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-53a8f4ed-a394-4182-a802-21d72c6eea7f&quot;&gt;
&lt;p id=&quot;SE-b6a50013-e1ec-43bb-a579-93718abdffb6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-97668b56-dc09-49ca-99a0-625e10d64709&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7e7950ea-5e08-465a-99ee-a3793ed99d05&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-61c2d5ba-cc1a-4201-895b-9c1414f2abb9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-89296927-da99-45ef-ae3d-727f4f776ccb&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-89296927-da99-45ef-ae3d-727f4f776ccb&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-89296927-da99-45ef-ae3d-727f4f776ccb&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-d072931a-ac47-4586-a5dc-63070cd966d0&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-d072931a-ac47-4586-a5dc-63070cd966d0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-d072931a-ac47-4586-a5dc-63070cd966d0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-2e7f0594-8d1f-4107-ae9e-4a18b0fa29b1&quot;&gt;
&lt;p id=&quot;SE-e86a811b-6686-41e0-afd5-13c8112311e9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로젝트&amp;nbsp;준비&amp;nbsp;(Setup&amp;nbsp;&amp;amp;&amp;nbsp;Configuration)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-635df107-cee9-4d4f-a004-46289a628a58&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-635df107-cee9-4d4f-a004-46289a628a58&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-635df107-cee9-4d4f-a004-46289a628a58&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-da8ff02f-2b42-4b08-9354-2a1275566dd5&quot;&gt;
&lt;p id=&quot;SE-505f91c0-7cf2-4723-9cf6-2be6403130dd&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f1b370f7-68b3-492c-a55e-1dcd73af8dcf&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-5b763d21-cd46-4a7d-bb75-0492a3d1c98f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;이 프로젝트는 Python 기반이며, &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a8892b63-bd95-4432-8a82-263e4659a0c9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;LLM(Google Gemini)의 추론 능력과 한국투자증권(KIS)의 Open API 로 설계를 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-338c6a80-90e3-419b-adc4-247ad57391a0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-703ec150-f884-41f5-be7b-ea9b23affa8b&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-703ec150-f884-41f5-be7b-ea9b23affa8b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-703ec150-f884-41f5-be7b-ea9b23affa8b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-17d0f400-46d0-4982-a0b9-82a6de4280fb&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-17d0f400-46d0-4982-a0b9-82a6de4280fb&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-17d0f400-46d0-4982-a0b9-82a6de4280fb&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-4c920384-55e7-413e-a57a-bc8285a720ce&quot;&gt;
&lt;p id=&quot;SE-6873aaff-0745-4771-a0ac-f6d53eab0cdd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;디렉토리 구조는 깔끔한 monorepo 형태로 구성하고자 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6a4e6d4a-4c80-4202-8e92-9079fd95ec3b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;사실 실제는 아래보다 더 많은 구성이 되어 있지만 아래가 핵심입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-432f90df-2784-45d7-9fae-e26289d244be&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-432f90df-2784-45d7-9fae-e26289d244be&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-432f90df-2784-45d7-9fae-e26289d244be&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;Azrael/
├── config/                 # 설정 파일 (API Key, 페르소나 정의)
│   ├── config.yaml         # KIS API 및 Gemini Key
│   └── personas.yaml       # 전담분야별 전문가들의 성격 및 역할 정의
├── common/                 # 공통 유틸리티 (로거, Gemini 클라이언트)
├── trading_system/         # 핵심 트레이딩 엔진
│   ├── agents/             # 투자팀 고유 영역별 판단 시스템 (Leader, Screener, Sniper...)
│   ├── broker_api/         # 증권사 연동 Agent (KIS Agent)
│   └── core/               # 가상 장부(PaperTrader), 리포터
├── main.py                 # 실행 진입점 (CLI)
└── requirements.txt        # 의존성 패키지&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ba2e6585-8a62-45e9-97f7-217dd2d8ce1d&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-ba2e6585-8a62-45e9-97f7-217dd2d8ce1d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ba2e6585-8a62-45e9-97f7-217dd2d8ce1d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-730d4c70-aec3-4e8e-8967-30096426bcf3&quot;&gt;
&lt;p id=&quot;SE-36799d62-c391-4396-9e9e-66c5a9b9f44b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;핵심 설정 파일은 보안이 생명이므로 ..!!&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a975dd9f-c16a-46dd-8e01-f89d567ae547&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-a975dd9f-c16a-46dd-8e01-f89d567ae547&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a975dd9f-c16a-46dd-8e01-f89d567ae547&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;kis_api:
  app_key: &quot;YOUR_KIS_APP_KEY&quot;
  base_url: &quot;https://openapi.koreainvestment.com:9443&quot; # 실전투자용, 모의투자는 주소 다름
  is_simulation: false  # 실전/모의 투자 선택

google_api_key: &quot;YOUR_GEMINI_API_KEY&quot;

common:
  timezone: &quot;Asia/Seoul&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c37f4787-d25b-4f08-adf6-8c323f4e683b&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-c37f4787-d25b-4f08-adf6-8c323f4e683b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c37f4787-d25b-4f08-adf6-8c323f4e683b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-d5c9a796-cdee-4686-a346-2f4236b8f9d4&quot;&gt;
&lt;p id=&quot;SE-283924f0-724c-4006-9db3-bfb42ef17a18&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-4cd6bd3a-f4da-4cc2-9dfb-38fb06646815&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;가상 환경은 python 을 이용하여 venv 로 했고 아래와 같은 lib 들을 사용했습니다&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-97eda774-351f-4c36-a420-73c945cd07f7&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-97eda774-351f-4c36-a420-73c945cd07f7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-97eda774-351f-4c36-a420-73c945cd07f7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;pandas
numpy
pyyaml
yfinance
requests
google-generativeai
matplotlib
mplfinance
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8e9acb9e-5821-4960-88fb-ff7b2d84ba08&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-8e9acb9e-5821-4960-88fb-ff7b2d84ba08&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8e9acb9e-5821-4960-88fb-ff7b2d84ba08&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-860831c6-f641-411d-a8c1-30070fe6ca4e&quot;&gt;
&lt;p id=&quot;SE-ce9c642c-d5ac-4cd1-9490-877d2df32e66&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-4000d5ab-5bf1-4701-b535-74f33f4c4a34&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-4000d5ab-5bf1-4701-b535-74f33f4c4a34&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-4000d5ab-5bf1-4701-b535-74f33f4c4a34&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3797d583-7126-4245-8f2f-533453c76572&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-3797d583-7126-4245-8f2f-533453c76572&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-3797d583-7126-4245-8f2f-533453c76572&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-9c2156d4-0ef0-4010-b4dd-a218a83f7bb3&quot;&gt;
&lt;p id=&quot;SE-c3e0c483-c24f-4629-a392-3a5cf9cfb90c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;시스템 아키텍처: &quot;The Alpha Squad&quot;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b3bc782b-46ab-4425-b8d4-45aa356a1bb0&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-b3bc782b-46ab-4425-b8d4-45aa356a1bb0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b3bc782b-46ab-4425-b8d4-45aa356a1bb0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;SE-7b470085-b5c8-4a29-98f2-7486fa72fc77&quot;&gt;
&lt;p id=&quot;SE-46cfea7d-b45b-4ce3-a9a0-2cd09f18d305&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그래서 최종 시스템 아키텍처는 대략 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7f7c6cbe-835d-4248-96a5-f44d375dc225&quot;&gt;
&lt;p id=&quot;SE-c5870a5a-f665-41da-b1c0-efb9fa46784d&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a6573809-a124-4ca2-968d-13fee8887e69&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-a6573809-a124-4ca2-968d-13fee8887e69&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a6573809-a124-4ca2-968d-13fee8887e69&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a6573809-a124-4ca2-968d-13fee8887e69&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-a6573809-a124-4ca2-968d-13fee8887e69&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-4b623e17-47a0-49bc-8aa7-719df00e1968&quot;&gt;
&lt;p id=&quot;SE-822d9921-41e7-4baf-b615-45106ffc8c38&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-d763bf1e-c225-440c-a51c-e4dc77dd76e4&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-d763bf1e-c225-440c-a51c-e4dc77dd76e4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-d763bf1e-c225-440c-a51c-e4dc77dd76e4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a91113a2-3280-4ec9-9dee-2d4de0e602aa&quot;&gt;
&lt;p id=&quot;SE-ea0ffaa2-5c3e-46ae-ac7a-af46d5344e7f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;처음에는 단일 LLM 으로 구성해서 테스트 코드를 돌려봤습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-486ad7e3-086c-4f36-a6df-c08e6d28df89&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;동일한 종목으로 시도했고, 결과는 매번 새로웠(?) 습니다..&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c843f0a4-e865-4cfb-ba5d-635d58f722d0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-69d013e5-8e96-4b0c-826d-2e267c8688d0&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-69d013e5-8e96-4b0c-826d-2e267c8688d0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-69d013e5-8e96-4b0c-826d-2e267c8688d0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-69d013e5-8e96-4b0c-826d-2e267c8688d0&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-69d013e5-8e96-4b0c-826d-2e267c8688d0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rfror/dJMcabJC8tp/iZnTsFiMHCXMLKKNBngI0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rfror/dJMcabJC8tp/iZnTsFiMHCXMLKKNBngI0K/img.png&quot; data-alt=&quot;AI 의 할루시네이션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rfror/dJMcabJC8tp/iZnTsFiMHCXMLKKNBngI0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frfror%2FdJMcabJC8tp%2FiZnTsFiMHCXMLKKNBngI0K%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; alt=&quot;AI 의 할루시네이션&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;511&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI 의 할루시네이션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1ee98ee3-b068-4f1d-99e4-a8c484dc0a9a&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-1ee98ee3-b068-4f1d-99e4-a8c484dc0a9a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-1ee98ee3-b068-4f1d-99e4-a8c484dc0a9a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a52b0363-f770-457a-91cd-5c272029407e&quot;&gt;
&lt;p id=&quot;SE-11c1cbd4-e6e9-4472-92dd-551e5f54da6d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b9a82877-8367-4e1a-b603-bd83b125247b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cee896d8-2d10-4477-91ae-933de8e19fa0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8cc39fa7-441e-4808-aa61-6674f437a288&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-a0eba87a-d757-45d7-aba6-4a7e6a8bf3aa&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;넌 대체 왜그러니? 너 똑똑하다며! 이래서 믿고 투자를 맡기겠어!?&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ae08908c-1f8d-4c10-b8b2-aeaaf0f5a057&quot; data-a11y-title=&quot;스티커&quot; data-compid=&quot;SE-ae08908c-1f8d-4c10-b8b2-aeaaf0f5a057&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ae08908c-1f8d-4c10-b8b2-aeaaf0f5a057&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oQk15/dJMcabJC8tn/HR234ZEDVhw3mGiiJTmW31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oQk15/dJMcabJC8tn/HR234ZEDVhw3mGiiJTmW31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oQk15/dJMcabJC8tn/HR234ZEDVhw3mGiiJTmW31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoQk15%2FdJMcabJC8tn%2FHR234ZEDVhw3mGiiJTmW31%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;370&quot; height=&quot;320&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1507a435-8907-4c71-af75-eb094a719cd1&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-1507a435-8907-4c71-af75-eb094a719cd1&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-1507a435-8907-4c71-af75-eb094a719cd1&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e836c6aa-75d5-4789-9334-766c7742d3bb&quot;&gt;
&lt;p id=&quot;SE-6a828b96-51be-463d-aa68-f59c5694e891&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;이제는 공공연하게도 아시는 것 처럼 모든 AI는 환각(Hallucination)이 발생합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-55b01cc8-3350-49e1-9999-43c53b141435&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;fator 수치가 AI 마다 있어서 질문할때마다 여러 후보군 중 하나를 선택하는 알고리즘과&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6480fdd5-1317-4439-bfac-1b5c9e0a1bb2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; 이를 조절하는 하이퍼파라미터라 하는 설정값 때문입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e5c14915-2863-43e0-aa06-8981f68d3308&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;즉, 한놈에게 시키면 계속 변덕을 부리거나 두루뭉술한 답변만 내놓습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2ebbb203-58c4-44b1-a026-74d4884090ff&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;그래서 대안을 마련해야 했고, 저는 단일 LLM이 아닌 팀으로 하면 되겠네? 였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-de1a2bb9-1a57-4f49-a3b7-754dd7a6eac6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;마치 어벤져스 어셈블 처럼요!!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3d67c61e-42df-469a-9c1c-8bfb525db136&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e0fb4808-9c97-4fdb-8684-88bceb4eb88d&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-e0fb4808-9c97-4fdb-8684-88bceb4eb88d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e0fb4808-9c97-4fdb-8684-88bceb4eb88d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e0fb4808-9c97-4fdb-8684-88bceb4eb88d&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-e0fb4808-9c97-4fdb-8684-88bceb4eb88d&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pifyW/dJMb99LM2Yg/nvN9G1Gtxw3lWe6gKAhsG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pifyW/dJMb99LM2Yg/nvN9G1Gtxw3lWe6gKAhsG0/img.png&quot; data-alt=&quot;AI 투자팀 어셈블~!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pifyW/dJMb99LM2Yg/nvN9G1Gtxw3lWe6gKAhsG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpifyW%2FdJMb99LM2Yg%2FnvN9G1Gtxw3lWe6gKAhsG0%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; alt=&quot;AI 투자팀 어셈블~!!&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;511&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI 투자팀 어셈블~!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-be15b66c-6ab8-4993-97a7-42d59bb529d7&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-be15b66c-6ab8-4993-97a7-42d59bb529d7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-be15b66c-6ab8-4993-97a7-42d59bb529d7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-0eef32ae-53ce-4dde-9898-d011f82f1d4a&quot;&gt;
&lt;p id=&quot;SE-aa73a337-4860-48d0-8dff-ec56bf0cc92b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;짜짠~!!!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a5d65dd0-b05f-4fb6-9a9b-5969b6b18d6c&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-4d2f0e48-c511-4300-af39-ae3d8aea3c51&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;Azrael 프로젝트는 그렇게 역할을 쪼개어 **9명의 전문가 팀(Alpha Squad)**을 구성했고, &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-50254044-2cb6-40d3-9b53-f13ff3db96b5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;추가로 나중에 한명이 더 추가됐습니다. ^_^&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-410c329f-c5cb-4811-a7cd-86548468c28c&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-ea9f20d8-24ca-4f81-8450-3376e07c642f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2048ce9d-9796-4254-9554-22bbac827c91&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-2048ce9d-9796-4254-9554-22bbac827c91&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2048ce9d-9796-4254-9554-22bbac827c91&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-c07a7c3e-bbc6-42cd-8e73-e40288440a72&quot;&gt;
&lt;p id=&quot;SE-07b67fb9-10c9-4ab1-b620-3924daa3df98&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;알파스쿼드의 주요 페르소나를 몇 소개해 드릴께요.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5731c134-52a4-491c-95f9-d67e798fb713&quot;&gt;
&lt;p id=&quot;SE-12cd1b83-7876-49c9-b4c4-ea6ec49065b4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-edd3f622-c6bf-4fb6-abfe-7084e1bc655b&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-edd3f622-c6bf-4fb6-abfe-7084e1bc655b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-edd3f622-c6bf-4fb6-abfe-7084e1bc655b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-00060bd1-6265-4f99-ae4e-d31f394d25df&quot;&gt;
&lt;p id=&quot;SE-d879807f-45d3-4e3c-89bf-90ab5c97e24c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;이들은 `config/personas.yaml`에 정의되어 있으며, &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f3a9ecd1-d6b4-497f-965f-7d9e9cad3730&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;각자 다른 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff0010;&quot;&gt;&lt;b&gt;AI Temperature(창의성 지수)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;를 가집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1659737e-43c4-4830-aa7e-04af3173fa4d&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-1999fc2c-c35e-4691-8890-2eff3f9ecebb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #00b3f2;&quot;&gt;&lt;b&gt; ️&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #00b3f2;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff9300;&quot;&gt;&lt;b&gt;News Scout (뉴스 정찰병)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a1fc94e1-d2ec-4a6e-b949-3cba925719ae&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 임무: 장 시작 전 Google Search를 통해 시장 분위기(Sentiment)를 파악합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-933a55e8-acc5-4286-9553-383f84af3c32&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * Instruction: &quot;Fed 금리 결정, 전쟁 이슈 등 거시적 악재를 찾아라.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1e272145-1d6d-404a-9611-ded2b155a7e0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f469e4c9-47da-447c-ab6f-b15b1ea6f79c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;2. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt; ️&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff9300;&quot;&gt;&lt;b&gt;Gatekeeper (문지기 / Ticker Screener)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-51e97249-8f0f-474a-81b7-c5129cf666c3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 성격: 냉소적, 보수적 (Temp: 0.0)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a0d00065-4ebd-421c-985c-5dee791b49a4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 임무: 거래량 부족, 동전주, 관리종목 등 '위험한 놈'들을 입구컷합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d9809575-94a9-45b8-9e6a-418c8ef28088&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 대사: &quot;이 종목은 거래량이 너무 적어. 탈락.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-25ab156a-1981-4da5-9697-abe3ae2e1033&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-bc66f6a3-fbf1-4f03-b80f-03788fa2ed19&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;3. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff9300;&quot;&gt;&lt;b&gt; Sniper (저격수 / Trade Planner)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-aa1234b3-2e01-4b62-b99d-8548f2a79548&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 성격: 침착함, 정밀함 (Temp: 0.1)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-28988291-df37-48f8-8407-ef6033295739&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 임무: 살아남은 종목의 차트를 현미경처럼 분석하여 '진입가', '손절가', '목표가'를 1원 단위로 제시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-131de754-6a93-4576-8d91-207b33107689&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 대사: &quot;187.50불에 지정가 매수. 추격 매수는 금지한다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b75f6fab-1bac-4051-aa86-15d8aac5f72e&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-b8ef3c76-4af5-4612-b8fb-6efcfe7c1b6f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;4. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff9300;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #ff9300;&quot;&gt;&lt;b&gt; Leader (CIO)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-48599e89-4163-4b3f-9a3b-bc0c241665ae&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt; * 임무: 이들의 보고를 취합하여 자금을 배분하고, 최종 매수 버튼을 누릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e1aad8f4-921d-4e60-b1ad-f3fdd683ba52&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f9abc21d-6289-49f1-bd7a-5d871a65b4b4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c9b8d5e1-60de-4735-a5d8-e752fdef50f9&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-c9b8d5e1-60de-4735-a5d8-e752fdef50f9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c9b8d5e1-60de-4735-a5d8-e752fdef50f9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-44804ba5-016d-4046-9a99-b532dc756a05&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-44804ba5-016d-4046-9a99-b532dc756a05&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-44804ba5-016d-4046-9a99-b532dc756a05&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-908384c4-ff49-4b7b-aa0e-12fd6b0ecb50&quot;&gt;
&lt;p id=&quot;SE-bf52268c-429c-4075-8b3b-b1c343a7083c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;Workflow: Azreal 의 하루&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b05d73d8-a1e6-43ad-813d-59333052e810&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-b05d73d8-a1e6-43ad-813d-59333052e810&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b05d73d8-a1e6-43ad-813d-59333052e810&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-b05d73d8-a1e6-43ad-813d-59333052e810&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-b05d73d8-a1e6-43ad-813d-59333052e810&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8fsYE/dJMcaiu95eY/q8it30rZ5RzjB69OdfCxV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8fsYE/dJMcaiu95eY/q8it30rZ5RzjB69OdfCxV1/img.png&quot; data-alt=&quot;AI 투자팀 어셈블~!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8fsYE/dJMcaiu95eY/q8it30rZ5RzjB69OdfCxV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8fsYE%2FdJMcaiu95eY%2Fq8it30rZ5RzjB69OdfCxV1%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; alt=&quot;AI 투자팀 어셈블~!!&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;511&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI 투자팀 어셈블~!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7d3b272c-48c6-42cf-8d7b-daac2e47d2a4&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-7d3b272c-48c6-42cf-8d7b-daac2e47d2a4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-7d3b272c-48c6-42cf-8d7b-daac2e47d2a4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-0ddec7c7-343d-43fe-b205-2a3b9188139d&quot;&gt;
&lt;p id=&quot;SE-ee9f0d23-5870-4b54-a1fa-cfde9ad75827&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Azrael은 다음과 같은 흐름으로 하루를 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a222711b-e534-4920-a7c7-464e676798de&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-a222711b-e534-4920-a7c7-464e676798de&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a222711b-e534-4920-a7c7-464e676798de&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;1.  **09:00 (Start Day):**
    *   Leader 기상.
    *   News Scout가 &quot;오늘 기술주 분위기 안 좋음&quot; 보고.
    *   Kis Agent가 관심 종목(NVDA, MSFT 등) 데이터 수집.
2.  **09:05 (Analysis):**
    *   Gatekeeper가 거래량 부족 종목 필터링.
    *   Sniper가 남은 종목의 매수 타점 계산.
    *   Leader가 가상 장부(Paper Ledger)에 매수 기록.
3.  **09:10 ~ 15:20 (Monitoring):**
    *   **Watcher Mode** 진입. 1분마다 시세 확인.
    *   목표가 도달 시 익절, 손절가 이탈 시 손절.
4.  **15:20 (EOD Judgement):**
    *   장 종료 10분 전, 아직 안 팔린 종목에 대해 **&quot;종가 심판&quot;** 진행.
    *   Leader가 Gemini에게 묻습니다. **&quot;지금 수익률 0%인데 뉴스도 없어. 가져갈까(HOLD) 팔까(SELL)?&quot;**
    *   AI 판단에 따라 오버나잇(Swing) 하거나 전량 매도(Day Trading) 처리.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8e7af4d3-b693-4eb6-bc3c-dcd7d76ab839&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-8e7af4d3-b693-4eb6-bc3c-dcd7d76ab839&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8e7af4d3-b693-4eb6-bc3c-dcd7d76ab839&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-69b263a6-17cf-407f-8254-b7c673117dfa&quot;&gt;
&lt;p id=&quot;SE-fb89e524-0325-4ee6-8221-a24088f966a2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;물론, 오버나잇 전략이나 매도 전략은 미리 개별 페르소나들의 구현에 정의되어 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-05d959b9-0e30-4af3-baf7-fd10a953d583&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;초기 전략이라 구멍이 많을 수 밖에 없을 거라고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-be2e5265-5233-4846-9cce-3d3d3a7cc4be&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;그래서, 매일 기록을 쌓아가면서 수정계획을 갖고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-87930d84-e6da-4b58-b47e-45cc832e6da1&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-54005cb6-c40f-4f1b-9c13-82007f37a8e1&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-4b8575e7-5605-4ec9-82e9-cfb5c87023ab&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5a43c2c0-72af-440b-b366-9d8acf70a08c&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-5a43c2c0-72af-440b-b366-9d8acf70a08c&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5a43c2c0-72af-440b-b366-9d8acf70a08c&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-09d52cc3-5b1a-4dd0-93dc-f676fb694cc0&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-09d52cc3-5b1a-4dd0-93dc-f676fb694cc0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-09d52cc3-5b1a-4dd0-93dc-f676fb694cc0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-3b12ef77-9dc4-41d0-b4f4-fadbd420c14c&quot;&gt;
&lt;p id=&quot;SE-d701ae5a-fa39-4978-bb65-315710763df3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;시뮬레이션 결과 (Simulation Log)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-27fc47ae-f0ef-4608-a69f-4be87ceeeb45&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-27fc47ae-f0ef-4608-a69f-4be87ceeeb45&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-27fc47ae-f0ef-4608-a69f-4be87ceeeb45&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-8259466b-1c0d-40c6-9c2c-0eeebd8393a9&quot;&gt;
&lt;p id=&quot;SE-10fdd27d-01c6-406a-a2be-a41ffa1dbae8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-2238f992-5050-4282-b645-b685fe9ca48f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;개발하면서 시뮬레이션 결과는 엣지 케이스가 생각보다 많아서 멀구나..였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7aa0c7bd-66df-486c-be91-e160f6f3d8a6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;아래는 구현된 프로젝트에서 남긴 log 의 일부이고&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4e7a7d6d-9583-4497-9950-d4927481b58c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;시험 대상은 2025년 12월 31일 프리마켓이였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-475bb8ad-89be-4293-ae5a-4b6143baea35&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-92b0393b-cd36-4edf-8ad8-b94682eb91d6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;[Gatekeeper Report]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b337ae0c-02ef-403d-b0b2-713410985e8b&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-b337ae0c-02ef-403d-b0b2-713410985e8b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b337ae0c-02ef-403d-b0b2-713410985e8b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;SE-dad49760-6eb6-4490-b4f3-b9aac9c9b50f&quot;&gt;
&lt;p id=&quot;SE-38abff63-fa32-48b3-8184-57988e1c0733&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;NVDA:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; 거래량이 평소보다 적지만(193만 주), 시총을 고려할 때 통과(Pass). &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;MSFT:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; 거래량 극히 저조. 탈락(Fail).&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b9fc8bb2-4c54-4787-96f2-c492f3ffb176&quot;&gt;
&lt;p id=&quot;SE-62a41cf2-fdcc-4e2f-93fe-8492d4499aee&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출처 입력&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-bd2ead5d-1707-47ec-9dc8-1c4a5e50397d&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-bd2ead5d-1707-47ec-9dc8-1c4a5e50397d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-bd2ead5d-1707-47ec-9dc8-1c4a5e50397d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e70a95da-266a-4ad7-90c5-5e600df16dd6&quot;&gt;
&lt;p id=&quot;SE-bbdee151-10dc-42fa-9307-70b7b7969a6b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;[Sniper Report]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c3c8ab96-94ab-4cd4-9073-c42f2610e01d&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-c3c8ab96-94ab-4cd4-9073-c42f2610e01d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c3c8ab96-94ab-4cd4-9073-c42f2610e01d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;SE-db8dc0fb-9089-4ecf-9444-9c571ca99cb8&quot;&gt;
&lt;p id=&quot;SE-71bd5989-011a-4c11-a64c-5b6cfde97276&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;NVDA 분석:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; 상승 추세이나 볼린저 밴드 상단 터치. 눌림목 매수 유효. &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;진입가:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; $187.26 &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;목표가:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; $193.98 &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;손절가:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; $181.30&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9611c8b1-00f6-41e5-9c0d-6dd4d0ab7ca4&quot;&gt;
&lt;p id=&quot;SE-c00ccbdf-51d6-4e84-9f01-cb76c645805b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출처 입력&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c462b863-ce54-43a6-a949-9dfd5b483989&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-c462b863-ce54-43a6-a949-9dfd5b483989&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c462b863-ce54-43a6-a949-9dfd5b483989&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-0603163e-c4cf-4064-8e03-6d14c45de612&quot;&gt;
&lt;p id=&quot;SE-47626fc0-9b3a-4249-bf92-34cb3491db5d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;[Execution]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8f127745-f7d5-432b-920c-a1b7bf28cbd0&quot; data-a11y-title=&quot;표&quot; data-compid=&quot;SE-8f127745-f7d5-432b-920c-a1b7bf28cbd0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8f127745-f7d5-432b-920c-a1b7bf28cbd0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&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 id=&quot;SE-2aed4c0e-343a-4789-b942-1a8654876183&quot;&gt;
&lt;td id=&quot;SE-bcd09085-66b1-4769-9115-9c972be6ce99&quot; style=&quot;background-color: #0a0a0a;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;div id=&quot;SE-2ed6e4ca-a07c-4dd5-a154-8efba1b2c635&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #0a0a0a; color: #d4d4d4;&quot;&gt;[PaperTrade] Signal Detected: Buy NVDA @ 187.26 [PaperTrade] BOUGHT NVDA : 5 shares @ 187.26 (TP: 193.98, SL: 181.3)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&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;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f3f9122b-4fe4-4b84-8ad3-8ca719f94173&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-f3f9122b-4fe4-4b84-8ad3-8ca719f94173&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f3f9122b-4fe4-4b84-8ad3-8ca719f94173&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;[PaperTrade] BOUGHT NVDA : 5 shares @ 187.26 (TP: 193.98, SL: 181.3)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5dab82a8-8877-4df4-af89-acae84537806&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-5dab82a8-8877-4df4-af89-acae84537806&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5dab82a8-8877-4df4-af89-acae84537806&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-4028ec03-384f-4451-a97d-9803b4091268&quot;&gt;
&lt;p id=&quot;SE-25602161-9274-4f14-af23-22193c83c104&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;보시는 것 처럼, 장초반에 당연히 적을 수 밖에 없는 거래량을 생각하지 못했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-78227d27-6f2f-4f32-96f8-eb3def4c574d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Gatekeeper 는 정확한 판단으로 탈락시켰지만 이러면 살 종목이 ....&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3a3468a5-e3ed-4287-b222-9b81aa180671&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;그래서 최근 거래일의 거래량 정보를 반영하도록 수정도 하고&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-65ee8b42-de3b-499c-b0fd-b71f82b1428c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;..&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5f9b5d2e-1c1a-4838-851b-63ae3b4ee3d7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;또 다른 문제가 계속 생겼습니다. 하지만!! 시작이 반이라 했죠. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fbb0e142-f1d7-4e0f-8cd6-f46c2cbd17a3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;이제 시작일 뿐입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f2929cc3-f8e6-4086-9cca-1009b90f6e9f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-0d4320a3-9dbb-4543-86cf-1a1c4db8be8c&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f797d63d-fda9-47bf-a3b3-b705b453f5e7&quot; data-a11y-title=&quot;인용구&quot; data-compid=&quot;SE-f797d63d-fda9-47bf-a3b3-b705b453f5e7&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f797d63d-fda9-47bf-a3b3-b705b453f5e7&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-d087df0c-3770-4195-aa6e-d44851c96547&quot;&gt;
&lt;p id=&quot;SE-f0b4f36e-f888-4729-b9d4-dfb72b874640&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;존버는 승리한다. (응??) &lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;계속 지켜보고 고치다 보면 잘 되겠죠? 훗&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;- 내 마음 中&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b1b990c4-4259-4c7c-9d19-88c294f21d27&quot;&gt;
&lt;p id=&quot;SE-6a0d7b17-544b-4d76-80b8-7119f3083360&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;단순하게 실행은 dry-run 과 live 모드로 구분을 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;SE-b9e892fd-6406-4157-a863-f94ce100def8&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-b9e892fd-6406-4157-a863-f94ce100def8&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b9e892fd-6406-4157-a863-f94ce100def8&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-a21ba819-3fbb-4ec8-8497-ce65198bfd3c&quot;&gt;
&lt;p id=&quot;SE-3fdfb5a1-7e8e-4380-94e5-74d613fad193&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;당분간은 paper 모드로 시도해보면서 결과를 축적할 생각입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-66c0d143-3edd-4143-8911-80fd30195503&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7e533221-b201-4bc5-a6fe-391c1081b0c5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-fd8780f1-8ae2-4a69-bcde-00f53c4c5c79&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-fd8780f1-8ae2-4a69-bcde-00f53c4c5c79&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-fd8780f1-8ae2-4a69-bcde-00f53c4c5c79&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-eeb918f6-022a-4fca-9083-4a1477ac98e7&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-eeb918f6-022a-4fca-9083-4a1477ac98e7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-eeb918f6-022a-4fca-9083-4a1477ac98e7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a6af99bb-116c-46e8-92c0-ef9c6188d67a&quot;&gt;
&lt;p id=&quot;SE-5f8e3515-797a-4229-915a-98c4a666a13f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0dfc9208-991d-4031-9591-f61c9a3ffe44&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-0dfc9208-991d-4031-9591-f61c9a3ffe44&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-0dfc9208-991d-4031-9591-f61c9a3ffe44&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e076bb08-103b-40eb-a3a6-4764074e97a5&quot;&gt;
&lt;p id=&quot;SE-aee71884-148f-48a7-ab8e-ce49ad7c8fa2&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9ac66326-f8a5-4741-a2b7-0963377a0056&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;처음엔 &quot;파이썬으로 주식이나 사볼까?&quot;로 시작했지만, 결과물은 나만의 투자 철학을 대변하는 AI 팀이 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b0119aa6-a836-4ccb-b4ea-485edcad933a&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-0d863c8f-8254-443f-b1c0-2600716bf1d4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;이&amp;nbsp;시스템의&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;장점(사람의 가장 큰 단점이죠.)은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffef34; color: #000000;&quot;&gt;&lt;b&gt;**&quot;뇌동매매를 하지 않는다&quot;**&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;는&amp;nbsp;것입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-32ee05a3-3797-448c-91ec-91029f7d4778&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;AI는 감정에 휘둘리지 않고, 정해진 원칙(Persona)대로만 움직입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2f5a4d43-92c5-4eed-92dc-028cae960e9e&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-a60424aa-afff-4619-81bc-0ac9c69df704&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;2026년,&amp;nbsp;Azrael 과&amp;nbsp;함께&amp;nbsp;시장을&amp;nbsp;이겨보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fba8f600-c335-4d80-a1a1-d933d185ba90&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-13fa9567-3aa0-493e-ae2a-706a57b28b1d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;다들 2026년 새해 복 많이 받으세요!!&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <category>AI</category>
      <category>미국주식</category>
      <category>자동매매</category>
      <category>주식</category>
      <category>프로젝트</category>
      <category>한국투자증권</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/31</guid>
      <comments>https://bj-lee.tistory.com/31#entry31comment</comments>
      <pubDate>Thu, 1 Jan 2026 00:58:30 +0900</pubDate>
    </item>
    <item>
      <title>산타 랠리의 역설: 거래량이 말랐을 때 주가가 폭발하는 진짜 이유</title>
      <link>https://bj-lee.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-14a74e73-9fb2-42bb-af57-e2ab6dec84ae&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-14a74e73-9fb2-42bb-af57-e2ab6dec84ae&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-14a74e73-9fb2-42bb-af57-e2ab6dec84ae&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-bd603c26-1d02-4d3c-9307-dce18ce97fbc&quot;&gt;
&lt;p id=&quot;SE-a4570a46-a4ae-485f-bd31-5ecbe60d72e7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;미국도 연말엔 세금 정산하느라 바쁘고, 휴가 가서 거래량도 없을 텐데 주가가 오를까요?&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-962aaf50-5efd-4757-9286-3f96c0247e8b&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-64dc4c8f-e52a-405f-9691-384b0b63d355&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많은 투자자분들이 연말 '산타 랠리(Santa Claus Rally)'에 대해 갖는 합리적인 의구심입니다. 상식적으로 생각하면, 시장 참여자가 줄어드는 휴가 시즌에는 증시가 조용해야 맞습니다. 하지만 월스트리트의 역사는 정반대의 결과를 보여줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-48048b8d-fb3f-4f8c-aefd-1314b51f91fc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-27e0ffb8-5850-4efe-8a02-8b85f66700ff&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘은 오로지 저의 시각으로, 악조건 속에 숨겨진 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;산타 랠리의 구조적 비밀&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 파헤쳐 봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-dae27a76-84c5-42c4-8a73-6e4da43805c2&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-dae27a76-84c5-42c4-8a73-6e4da43805c2&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-dae27a76-84c5-42c4-8a73-6e4da43805c2&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0e66767c-392c-4360-b672-69a50c33964e&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-0e66767c-392c-4360-b672-69a50c33964e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-0e66767c-392c-4360-b672-69a50c33964e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-9eb8df73-d8df-416d-9c6e-04db778e022f&quot;&gt;
&lt;p id=&quot;SE-f57f6fed-a488-4794-a435-415748420b9e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 매도 압력의 실종 (Selling Exhaustion)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8a10a468-5d75-48ce-b6d4-4d5e9895ba8f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e28e174f-81df-430c-8c79-d948c2543992&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많은 분이 &quot;세금 때문에 주식을 팔 것&quot;이라고 걱정합니다. 맞습니다. 미국 투자자들은 절세(Tax-loss harvesting)를 위해 손실 난 주식을 팝니다. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하지만 그들은 12월 말까지 기다리지 않습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-82e1fa0c-59ba-4a46-b212-02b0c024d86c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스마트 머니와 기관들은 보통 11월 말부터 12월 중순 사이에 매도 처리를 완료합니다. 즉, 산타 랠리 기간(한 해의 마지막 5거래일 + 새해 첫 2거래일)이 도래했을 때는 **'팔 사람은 이미 다 팔고 떠난 상태'**가 됩니다. 누르는 힘(매도)이 사라지니, 작은 힘(매수)으로도 주가가 튀어 오르는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8eb4ba33-5571-42a4-a7a4-a1fd24e64ff8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e03bd21c-58f8-4ca1-9a19-5afd027d766a&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e9d62828-7331-4e03-92fa-6fc698ee5f54&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 텅 빈 호가창의 마법 (Thin Market)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c6bece1d-a94e-4cc3-a64a-dc3825fcbf21&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-30ac7f3f-bed9-4e7b-b7b0-abb6277ee4dc&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;유동성이 적다&quot;는 것은 양날의 검입니다. 거래량이 풍부할 때는 100억 원을 사야 주가가 1% 오르지만, 모두가 휴가를 떠나 호가창이 얇아진(Thin Liquidity) 상태에서는 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;10억 원만 들어와도 주가가 1% 급등&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-14255985-ac47-445f-835f-fbf7ce1aa469&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기관들은 휴가를 떠났지만, 연말 보너스를 받은 개인 투자자들의 낙관적인 매수세가 텅 빈 시장에 들어오면 시세는 평소보다 훨씬 가볍고 빠르게 반응합니다. 이것이 유동성 부족이 만드는 역설적인 급등입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b4e26438-e1d4-49ea-bedd-5f03ba1fff62&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-587e0eec-fd7b-4727-93ca-2f8c3718f768&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9cbc8c57-0d46-457e-85dc-b917a6544852&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 기관의 성적표 관리 (Window Dressing)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4001b90f-006e-45c6-a784-2d06f05a163b&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-6044690a-6cce-4505-a4f4-e97bccb12d0d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;펀드 매니저들은 연말 결산 보고서에 자신들의 포트폴리오를 '예쁘게' 보여주고 싶어 합니다. 수익률이 저조한 종목은 숨기고, 시장을 주도한 인기 종목(예: 엔비디아, 테슬라 등)을 보유한 것처럼 보이기 위해 연말 직전에 해당 종목들을 집중 매수합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-388db79a-9595-454f-894b-ef36ddb47a67&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 **윈도우 드레싱(Window Dressing)**이라고 합니다. 이 인위적인 막판 매수세가 지수를 견인하는 강력한 동력이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-62509511-5ff7-4c51-b491-05dc52ae240c&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-6a03aa6a-1dc4-4862-a05b-859c866dc969&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-76cd2f83-100e-46f4-b93e-8335a832fd72&quot; data-a11y-title=&quot;구분선&quot; data-compid=&quot;SE-76cd2f83-100e-46f4-b93e-8335a832fd72&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-76cd2f83-100e-46f4-b93e-8335a832fd72&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-64d82a7b-cce0-4423-b586-9e62c38a8867&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-64d82a7b-cce0-4423-b586-9e62c38a8867&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-64d82a7b-cce0-4423-b586-9e62c38a8867&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-dd27db3d-1b77-4004-8847-7a53d9653530&quot;&gt;
&lt;p id=&quot;SE-d6fcf815-4464-44fe-89d4-f0e8f2bca053&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 데이터는 거짓말을 하지 않습니다&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4cbc7ad0-09b2-4689-9dd1-459b10b46138&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-52b3da3b-6bc7-402b-86fd-55fa9f743cc9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역사적으로(1950년 이후), S&amp;amp;P 500 지수는 산타 랠리 기간(7거래일) 동안 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;약 79%의 확률로 상승&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;했습니다. 평균 수익률은 1.3%입니다. 이는 단순한 우연이라기보다, 위에서 언급한 수급 공백과 심리가 만들어낸 구조적인 패턴입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3d4da4a1-da83-4c2f-a8f9-4f02a9fcb992&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-bce0d72c-e95c-4cbf-a990-f7da5b9535fa&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9588e8aa-784f-4142-aa58-7894d7a8e2e9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 투자자를 위한 Action Plan&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-098af24d-224b-479a-addb-4a882a193386&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-04aceb31-5609-446e-9cc0-6eb47365a7f5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;산타 랠리는 크리스마스 선물이 아닙니다. 철저한 확률 게임입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-34b3c438-9e10-4db2-ba9a-76e4236d03da&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;진입 적기:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 크리스마스 전후, 거래량이 줄어들며 시장이 소강상태를 보일 때가 기회입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;경고 신호:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 만약 이 기간에 산타 랠리가 오지 않고 주가가 하락한다면? 월가 격언을 기억하십시오. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&quot;산타가 오지 않으면, 곰(하락장)이 찾아온다.&quot;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이는 내년 시장이 어려울 수 있다는 강력한 선행 지표가 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;SE-a479d3e9-f4b3-4de6-8407-380bdd4beaf3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-b43b8d39-b852-42aa-a93a-eeca8d7984e6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;img style=&quot;text-align: center; caret-color: transparent; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dna/cf5zHH/dJMcabQlZW9/AAAAAAAAAAAAAAAAAAAAAHtUuPNexm93hS2FMh15M0-gjPsdIAuldg81htneMeaz/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1767193199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=uFWjJLHmaWpnepWF2JlEyABljvM%3D&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;562&quot; data-is-animation=&quot;false&quot; /&gt;
&lt;div id=&quot;SE-dea06053-83cc-4fd8-b4b4-d187515fd9ff&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-dea06053-83cc-4fd8-b4b4-d187515fd9ff&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-dea06053-83cc-4fd8-b4b4-d187515fd9ff&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-497c3465-e5bb-401b-a8ac-6afaa7676e53&quot;&gt;
&lt;p id=&quot;SE-9cb7980b-464f-42f2-9ca6-d16e268f1809&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;최근 10년(2014년~2024년)간 S&amp;amp;P 500 지수 기준, &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;'산타 랠리(Santa Claus Rally)'&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; 기간의 등락률을 AI를 이용하여 뽑았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;7년의 파티, 그리고 숙취:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 미장의 지난 7년간 산타는 매년 선물을 주고 갔지만, 작년(23-24 시즌)에는 빈손으로 돌아갔습니다. 이는 올해(2025년) 시장에 대한 일종의 '경고'였을 수도 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;작지만 확실한 수익:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 상승한 해의 평균 수익률은 약 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;+0.9%&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 내외입니다. &quot;대박&quot;이라기보다는 **&quot;짧은 기간 동안 높은 확률로 얻는 보너스&quot;**에 가깝습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;역발상 투자:&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 그래프에서 보시다시피, 2년 연속 하락(14, 15년) 후에는 긴 상승장이 찾아왔습니다. 작년의 하락이 오히려 올해 산타 랠리의 기대감을 높이는 요소가 될 수도 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-b74c1cd4-a950-4c52-bd40-736654263233&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-68f4e16a-e807-49e3-a286-822d590954cb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고: 산타 랠리 기간은 매년 마지막 5거래일 + 새해 첫 2거래일, 총 7거래일을 기준으로 산출했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-586baf53-2229-4034-984e-867e1b50055b&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-586baf53-2229-4034-984e-867e1b50055b&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-586baf53-2229-4034-984e-867e1b50055b&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-586baf53-2229-4034-984e-867e1b50055b&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-586baf53-2229-4034-984e-867e1b50055b&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYH3bd/dJMcahpv8Of/ktOLjKULZQGlLWQrgQrTY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYH3bd/dJMcahpv8Of/ktOLjKULZQGlLWQrgQrTY1/img.jpg&quot; data-alt=&quot;산타랠리 조선일보 기사 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYH3bd/dJMcahpv8Of/ktOLjKULZQGlLWQrgQrTY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYH3bd%2FdJMcahpv8Of%2FktOLjKULZQGlLWQrgQrTY1%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; alt=&quot;산타랠리 조선일보 기사 중&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;620&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;산타랠리 조선일보 기사 중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;SE-35585a6f-5632-430f-89f9-82f50b4f2098&quot;&gt;
&lt;p id=&quot;SE-78cb17bb-9c8d-4221-ab5d-a26da7780ef3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;SE-6ada804c-444e-48f5-a179-4780d68be1ea&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시장이 조용하다고 해서 기회가 없는 것은 아닙니다. 오히려 모두가 방심한 그 '고요함' 속에 수익의 기회가 숨어 있습니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <category>S&amp;amp;P</category>
      <category>미국주식</category>
      <category>산타랠리</category>
      <category>투자인사이트</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/28</guid>
      <comments>https://bj-lee.tistory.com/28#entry28comment</comments>
      <pubDate>Sat, 27 Dec 2025 20:23:10 +0900</pubDate>
    </item>
    <item>
      <title>체감온도 영하 20도? 이 노래 하나면 바로 '인간 핫팩' 등극!  </title>
      <link>https://bj-lee.tistory.com/27</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biRRt3/dJMcacPgfwh/SekakCwPxOQaUzoHJAvcdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biRRt3/dJMcacPgfwh/SekakCwPxOQaUzoHJAvcdk/img.png&quot; data-alt=&quot;추운 겨울 따뜻한 실내 분위기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biRRt3/dJMcacPgfwh/SekakCwPxOQaUzoHJAvcdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiRRt3%2FdJMcacPgfwh%2FSekakCwPxOQaUzoHJAvcdk%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; alt=&quot;추운 겨울 따뜻한 실내 분위기&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;추운 겨울 따뜻한 실내 분위기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;와, 오늘 진짜 역대급 추위 아니었나요?!  &lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분! 오늘 출근길, 등굣길 다들 무사하셨나요? 저는 문밖을 나서는 순간 '아, 이건 그냥 추운 게 아니라 아픈 거다' 싶더라고요. 뉴스 보니까 체감 온도가 영하 20도까지 떨어졌다는데, 정말 롱패딩을 뚫고 들어오는 칼바람에 정신이 하나도 없었습니다. 다들 꽁꽁 얼어붙은 몸 녹이느라 고생 많으셨어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 우리가 누구입니까? 이깟 추위에 질 수 없죠! 몸은 추워도 마음만은 뜨겁게 불태워야 하지 않겠어요?   이렇게 뼛속까지 시린 날에는 분위기를 확 바꿔줄 강력한 음악 처방이 필요합니다. 그래서 제가 오늘 여러분의 언 마음을 순식간에 녹여버릴, 성능 확실한 '음악 보일러' 하나를 들고 왔습니다! 준비되셨나요?&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오늘의 강력 추천곡: 아이유 (IU) - '겨울잠 (Winter Sleep)'&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 같은 날, 제가 자신 있게 꺼내든 카드는 바로 '국힙원탑' 아니죠, '감성원탑' **아이유의 '겨울잠'**입니다! &quot;에이, 활기차게 가자더니 웬 잔잔한 발라드?&quot; 하시는 분들 계시죠? 천만의 말씀! 이 노래가 가진 내공은 상상 이상이거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 곡은 아이유가 20대를 마무리하며 발표한 [조각집] 앨범의 첫 번째 트랙인데요. 화려한 악기 소리 다 빼고, 오직 담백한 피아노 선율과 아이유의 목소리만으로 꽉 채웠습니다. 그런데 그 힘이 얼마나 대단한지, 첫 소절 듣는 순간 차가웠던 공기가 따뜻하게 바뀌는 마법을 경험하게 된다니까요?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 하필 이 추운 날 '겨울잠'이어야 할까요?&lt;/h3&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; 밖에서 오들오들 떨다가 따뜻한 실내에 들어왔을 때의 그 노곤한 느낌 아시죠? 이 노래가 딱 그렇습니다. 아이유 특유의 숨소리 섞인, 약간은 쓸쓸한 듯하면서도 한없이 다정한 목소리가 얼어붙은 우리 마음을 포근한 이불처럼 감싸줍니다. 듣고 있으면 마치 성능 좋은 난로 옆에 앉아있는 것처럼 마음의 온도가 1도, 2도 올라가는 게 느껴지실 거예요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘째, '혼자가 아니다'라는 강력한 위로의 메시지 때문입니다.&lt;/b&gt; 추운 겨울은 유독 사람을 외롭게 만들잖아요. 이 곡은 아이유가 먼저 떠난 소중한 존재들을 그리워하며 직접 쓴 곡이에요. 가만히 가사를 곱씹어 보면, 차가운 계절 속에 홀로 남겨진 것 같은 외로움을 다독여주는 힘이 있습니다. &lt;i&gt;&quot;네가 깊은 잠을 자는 동안, 내가 곁을 지킬게&quot;&lt;/i&gt; 같은 가사는 이 혹독한 추위 속에서 나를 지켜주는 든든한 지원군을 만난 기분이 들게 하죠. 겉으로는 잔잔해 보여도, 그 안에 담긴 감정의 에너지는 엄청나게 뜨겁습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/SmQhRHS9-YA?si=6NGUdsC3-L03mzJt&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오늘 이 노래, 200% 즐기는 꿀팁!  &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 들어도 좋지만, 오늘 같은 날엔 이렇게 한번 들어보세요!&lt;/p&gt;
&lt;ol style=&quot;line-height: 1.8;&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;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;/p&gt;</description>
      <category>감성충전</category>
      <category>겨울노래추천</category>
      <category>아이유 IU</category>
      <category>역대급한파</category>
      <category>오늘날씨</category>
      <category>필청트랙</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/27</guid>
      <comments>https://bj-lee.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 26 Dec 2025 22:48:22 +0900</pubDate>
    </item>
    <item>
      <title>당신이 몰랐던 크리스마스의 '이교도적' 기원: 동지, 로마, 그리고 오딘</title>
      <link>https://bj-lee.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;우리가 몰랐던 크리스마스의 이면: 로마의 태양신과 북유럽의 오딘&quot;&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[인문학 산책] 당신이 몰랐던 크리스마스의 '이교도적' 기원: 동지, 로마, 그리고 오딘&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거리마다 캐럴이 울려 퍼지고, 구세군 냄비의 종소리가 들리는 12월 24일입니다. 우리는 오늘을 아기 예수의 탄생일로 기념하며 축복을 나눕니다. 하지만 시간을 거슬러 올라가면, 이 날짜에는 예수의 탄생보다 훨씬 더 오래된 인류의 두려움과 희망, 그리고 신화가 얽혀 있다는 사실을 알고 계신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 우리가 당연하게 여기는 크리스마스의 풍경 속에 숨겨진, 조금은 낯설고 매혹적인 고대의 이야기를 꺼내보려 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 12월 25일은 원래 '태양'의 생일이었다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 성경 그 어디에도 예수가 12월 25일에 태어났다는 기록은 없습니다. 목자들이 양을 치고 있었다는 묘사로 미루어 보아, 오히려 따뜻한 봄이나 가을이었을 것이라는 추측이 지배적이죠. 그렇다면 왜 하필 12월 25일일까요?&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;994&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsxu0v/dJMcabpgcbX/5QT9fPb3pIkSd0iKNrblIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsxu0v/dJMcabpgcbX/5QT9fPb3pIkSd0iKNrblIk/img.png&quot; data-alt=&quot;크리스마스와 고대 신화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsxu0v/dJMcabpgcbX/5QT9fPb3pIkSd0iKNrblIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdsxu0v%2FdJMcabpgcbX%2F5QT9fPb3pIkSd0iKNrblIk%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; alt=&quot;크리스마스와 고대 신화1&quot; loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;550&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;550&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;그 답은 고대 로마에 있습니다. 로마인들에게 12월 말은 &lt;b&gt;'사투르날리아(Saturnalia)'&lt;/b&gt;라는 거대한 축제 기간이었습니다. 농경의 신 사투르누스에게 제사를 지내며, 노예와 주인이 자리를 바꾸고 선물을 교환하며 먹고 마시는, 일종의 '해방구'였던 셈입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 12월 25일은 로마의 태양신 &lt;b&gt;'솔 인빅투스(Sol Invictus, 정복되지 않는 태양)'&lt;/b&gt;의 탄생일이었습니다. 이날은 일 년 중 밤이 가장 긴 &lt;b&gt;동지(冬至)&lt;/b&gt; 무렵입니다. 고대인들에게 해가 가장 짧아지는 동지는 곧 '빛의 죽음'과 같았습니다. 하지만 동지가 지나면 태양은 다시 길어지며 부활합니다. 즉, 12월 25일은 태양이 다시 살아나는 날, 어둠을 이기고 빛이 승리하는 날이었던 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기독교가 로마에 공인되면서, 교회는 이교도들의 가장 큰 축제인 동지 축제를 배척하기보다 포용하는 전략을 택했습니다. &quot;세상의 빛&quot;으로 오신 예수의 의미를 태양의 부활과 중첩시킨 것이죠. 그렇게 태양신의 생일은 성탄절이 되었습니다.&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;우리가 아는 빨간 옷의 산타클로스는 1930년대 코카콜라 마케팅이 정립한 이미지라는 것은 널리 알려진 사실입니다. 성 니콜라오 주교라는 실존 모델도 있지만, 산타가 '하늘을 나는 썰매'를 타고 '굴뚝'으로 들어와 '선물'을 준다는 설정은 북유럽 신화에서 기원합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doTIOU/dJMcabCNIcy/GdLkHze8XVsJhwNx78qaO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doTIOU/dJMcabCNIcy/GdLkHze8XVsJhwNx78qaO0/img.png&quot; data-alt=&quot;크리스마스와 고대 신화2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doTIOU/dJMcabCNIcy/GdLkHze8XVsJhwNx78qaO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoTIOU%2FdJMcabCNIcy%2FGdLkHze8XVsJhwNx78qaO0%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; alt=&quot;크리스마스와 고대 신화2&quot; loading=&quot;lazy&quot; width=&quot;988&quot; height=&quot;526&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크리스마스와 고대 신화2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;북유럽의 바이킹들은 12월 중순부터 1월 초까지 &lt;b&gt;'율(Yule)'&lt;/b&gt;이라는 축제를 즐겼습니다. 이 시기 북유럽의 겨울은 춥고 어두웠습니다. 사람들은 밤하늘을 가로지르는 거대한 폭풍과 유령들의 행진, 즉 &lt;b&gt;'와일드 헌트(The Wild Hunt)'&lt;/b&gt;가 일어난다고 믿었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 행진을 이끄는 존재가 바로 북유럽 최고의 신, &lt;b&gt;오딘(Odin)&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;긴 흰 수염을 휘날리는 노인&lt;/li&gt;
&lt;li&gt;다리가 여덟 개 달린 말 '슬레이프니르'를 타고 밤하늘을 비행&lt;/li&gt;
&lt;li&gt;사람들은 오딘의 말이 쉴 수 있도록 장화나 나막신에 당근과 건초를 넣어두었고(양말의 기원), 오딘은 그 보답으로 사탕이나 선물을 남겼습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FMl8M/dJMcag5bKve/VK6zH54AZ0yqHHEWcCAHKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FMl8M/dJMcag5bKve/VK6zH54AZ0yqHHEWcCAHKK/img.png&quot; data-alt=&quot;크리스마스와 고대 신화3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FMl8M/dJMcag5bKve/VK6zH54AZ0yqHHEWcCAHKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFMl8M%2FdJMcag5bKve%2FVK6zH54AZ0yqHHEWcCAHKK%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; alt=&quot;크리스마스와 고대 신화3&quot; loading=&quot;lazy&quot; width=&quot;692&quot; height=&quot;570&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크리스마스와 고대 신화3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굴뚝을 타고 내려오는 전설 또한 고대 게르만족이 집의 난로(Hearth)를 신성시하던 풍습에서 유래했습니다. 무시무시한 전쟁의 신 오딘이 아이들에게 선물을 주는 인자한 할아버지로 변모한 과정, 흥미롭지 않나요?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 크리스마스 트리: 죽지 않는 생명에 대한 경외&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집 안에 나무를 들여놓고 장식하는 풍습 역시 기독교 이전의 것입니다. 고대인들에게 겨울은 모든 생명이 죽어가는 공포의 시간이었습니다. 하지만 전나무나 소나무 같은 상록수(Evergreen)는 한겨울에도 푸른 잎을 유지했습니다.&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;을 상징하는 고대의 토템이었던 셈입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/weYWj/dJMcafZu6ET/UItSagPjkCNwfoQ5S56KM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/weYWj/dJMcafZu6ET/UItSagPjkCNwfoQ5S56KM0/img.png&quot; data-alt=&quot;크리스마스와 고대 신화4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/weYWj/dJMcafZu6ET/UItSagPjkCNwfoQ5S56KM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FweYWj%2FdJMcafZu6ET%2FUItSagPjkCNwfoQ5S56KM0%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; alt=&quot;크리스마스와 고대 신화4&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;526&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크리스마스와 고대 신화4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 마치며: 어둠 속에서 불을 밝히는 마음&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크리스마스의 기원이 이교도의 축제였다고 해서 그 의미가 퇴색되는 것은 아닙니다. 오히려 더 깊은 울림을 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수천 년 전 로마인이든, 북유럽의 바이킹이든, 2025년의 우리든, 인간은 본능적으로 &lt;b&gt;'어둠'&lt;/b&gt;을 두려워하고 &lt;b&gt;'빛'&lt;/b&gt;을 갈구합니다. 일 년 중 가장 밤이 긴 시간에, 서로의 체온을 나누고 불을 밝히며 &quot;우리는 아직 살아있고, 곧 봄이 올 거야&quot;라고 확인하는 의식. 그것이 크리스마스의 본질 아닐까요?&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;</description>
      <category>로마신화</category>
      <category>북유럽신화</category>
      <category>산타</category>
      <category>크리스마스</category>
      <author>bj-lee</author>
      <guid isPermaLink="true">https://bj-lee.tistory.com/26</guid>
      <comments>https://bj-lee.tistory.com/26#entry26comment</comments>
      <pubDate>Thu, 25 Dec 2025 00:18:17 +0900</pubDate>
    </item>
  </channel>
</rss>