<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>여행하는개발자</title>
    <link>https://starstoryus.tistory.com/</link>
    <description>코딩하며 세상을 탐험하는 이야기</description>
    <language>ko</language>
    <pubDate>Wed, 11 Mar 2026 07:51:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>스타스토리.</managingEditor>
    <image>
      <title>여행하는개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/6268556/attach/e083d9bf201b42b78a239704a877256b</url>
      <link>https://starstoryus.tistory.com</link>
    </image>
    <item>
      <title>데이터 파이프라인 구축: 배치에서 실시간까지</title>
      <link>https://starstoryus.tistory.com/59</link>
      <description>&lt;!-- wp:paragraph --&gt;
&lt;p&gt;데이터가 비즈니스의 핵심 자산이 된 시대, 효율적인 데이터 파이프라인은 필수입니다. ETL부터 스트리밍까지 현대적인 데이터 파이프라인 구축 방법을 알아봅니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;데이터 파이프라인이란?&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;데이터를 소스에서 추출(Extract)하고, 필요한 형태로 변환(Transform)한 후, 목적지에 적재(Load)하는 일련의 프로세스입니다. ETL 또는 ELT라고도 합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;배치 vs 스트리밍&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;배치 처리&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 정해진 주기로 대량 데이터 처리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도구&lt;/strong&gt;: Apache Spark, dbt, Airflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: 일간 리포트, 데이터 웨어하우스 적재&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;스트리밍&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 실시간 또는 준실시간 데이터 처리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도구&lt;/strong&gt;: Apache Kafka, Apache Flink, Spark Streaming&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: 실시간 대시보드, 이상 탐지, 알림&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;핵심 도구&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;Apache Airflow&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;워크플로우 오케스트레이션 도구로, DAG(방향성 비순환 그래프)로 파이프라인을 정의합니다. 스케줄링, 모니터링, 재실행 기능을 제공합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;dbt (data build tool)&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;SQL 기반 데이터 변환 도구로, 데이터 엔지니어와 분석가 모두 사용할 수 있습니다. 버전 관리, 테스트, 문서화를 지원합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;Apache Kafka&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;분산 이벤트 스트리밍 플랫폼으로, 대용량 실시간 데이터 처리의 표준입니다. Producer-Consumer 모델로 동작합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;모던 데이터 스택&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list {&quot;ordered&quot;:true} --&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ingestion&lt;/strong&gt;: Fivetran, Airbyte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: Snowflake, BigQuery, Databricks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transformation&lt;/strong&gt;: dbt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orchestration&lt;/strong&gt;: Airflow, Dagster&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visualization&lt;/strong&gt;: Looker, Metabase&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;베스트 프랙티스&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;멱등성&lt;/strong&gt;: 같은 입력에 항상 같은 결과&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;재실행 가능&lt;/strong&gt;: 실패 시 특정 시점부터 재실행&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;모니터링&lt;/strong&gt;: 데이터 품질 검사와 알림 설정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;문서화&lt;/strong&gt;: 데이터 리니지와 스키마 문서화&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;좋은 데이터 파이프라인은 신뢰할 수 있는 데이터를 적시에 제공합니다. 비즈니스 요구사항에 맞는 도구와 패턴을 선택하여 견고한 데이터 인프라를 구축하세요.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;</description>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/59</guid>
      <comments>https://starstoryus.tistory.com/59#entry59comment</comments>
      <pubDate>Mon, 16 Feb 2026 22:08:10 +0900</pubDate>
    </item>
    <item>
      <title>슈코드라, 알프스 끝자락에서 발견한 고요</title>
      <link>https://starstoryus.tistory.com/58</link>
      <description>&lt;!-- wp:image {&quot;id&quot;:333,&quot;sizeSlug&quot;:&quot;large&quot;} --&gt;&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img src=&quot;https://www.starstory.us/wp-content/uploads/2026/02/266_1.webp&quot; alt=&quot;슈코드라 풍경&quot; class=&quot;wp-image-333&quot;/&gt;&lt;/figure&gt;&lt;!-- /wp:image --&gt;

&lt;p&gt;알바니아 여행의 마지막 목적지, 슈코드라. 이 도시는 발칸 반도에서 가장 오래된 도시 중 하나다. 2,000년이 넘는 역사가 슈코드라 호수의 물결처럼 유유히 흐르고 있었다.&lt;/p&gt;

&lt;p&gt;알바니아 알프스의 관문이라 불리는 이곳에서 나는 여행의 마지막을 맞이했다. 그리고 묘한 감정에 사로잡혔다. 끝이 다가올수록 오히려 마음이 고요해지는 이상한 평화.&lt;/p&gt;

&lt;!-- wp:image {&quot;id&quot;:334,&quot;sizeSlug&quot;:&quot;large&quot;} --&gt;&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img src=&quot;https://www.starstory.us/wp-content/uploads/2026/02/266_2.webp&quot; alt=&quot;슈코드라 호수&quot; class=&quot;wp-image-334&quot;/&gt;&lt;/figure&gt;&lt;!-- /wp:image --&gt;

&lt;p&gt;40대에 들어서면 끝을 의식하게 된다. 커리어의 끝, 부모님 세대의 끝, 어쩌면 나 자신의 유한함까지. 젊을 때는 생각조차 하지 않았던 것들이 어느 날 문득 고개를 든다.&lt;/p&gt;

&lt;p&gt;하지만 슈코드라에서 나는 끝에 대한 새로운 시각을 얻었다. 로자파 성에 올라 도시를 내려다보았을 때, 끝이란 막다른 벽이 아니라 새로운 지평선이 펼쳐지는 경계선이라는 것을.&lt;/p&gt;

&lt;!-- wp:image {&quot;id&quot;:335,&quot;sizeSlug&quot;:&quot;large&quot;} --&gt;&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img src=&quot;https://www.starstory.us/wp-content/uploads/2026/02/266_3.webp&quot; alt=&quot;슈코드라 성채&quot; class=&quot;wp-image-335&quot;/&gt;&lt;/figure&gt;&lt;!-- /wp:image --&gt;

&lt;p&gt;슈코드라 호수는 발칸 반도에서 가장 큰 호수다. 알바니아와 몬테네그로에 걸쳐 있어, 한쪽에서 바라보면 건너편이 다른 나라다. 경계 위의 평화, 그것이 이 호수가 품고 있는 이야기였다.&lt;/p&gt;

&lt;p&gt;호수 위로 석양이 내려앉았다. 물 위에 비친 붉은 빛이 하늘과 땅, 물과 산의 경계를 지워버렸다. 모든 것이 하나로 녹아드는 순간이었다.&lt;/p&gt;

&lt;!-- wp:image {&quot;id&quot;:336,&quot;sizeSlug&quot;:&quot;large&quot;} --&gt;&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img src=&quot;https://www.starstory.us/wp-content/uploads/2026/02/266_4.webp&quot; alt=&quot;슈코드라 저녁&quot; class=&quot;wp-image-336&quot;/&gt;&lt;/figure&gt;&lt;!-- /wp:image --&gt;

&lt;p&gt;마지막 밤, 구시가지의 작은 광장에 앉았다. 자전거를 탄 아이들이 지나가고, 노인들이 벤치에서 담소를 나누었다. 특별할 것 없는 일상의 풍경. 하지만 그 평범함이 그 어느 때보다 아름다웠다.&lt;/p&gt;

&lt;p&gt;알바니아에서의 여정이 끝나가고 있었다. 티라나의 색, 베라트의 창문, 지로카스트라의 돌, 사란다의 바다, 그리고 슈코드라의 고요. 각각의 도시가 나에게 던진 질문과 건넨 위로가 마음속에 차곡차곡 쌓였다.&lt;/p&gt;

&lt;p&gt;여행은 끝나지만, 여행이 내 안에 심어준 것들은 이제 시작이다.&lt;/p&gt;

&lt;p&gt;슈코드라의 고요가 마지막으로 속삭였다. &lt;em&gt;&quot;모든 끝은 새로운 시작이야. 고요 속에서 네 다음 여정을 준비해.&quot;&lt;/em&gt;&lt;/p&gt;</description>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/58</guid>
      <comments>https://starstoryus.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 16 Feb 2026 22:06:20 +0900</pubDate>
    </item>
    <item>
      <title>API 게이트웨이 설계: 마이크로서비스의 관문</title>
      <link>https://starstoryus.tistory.com/57</link>
      <description>&lt;!-- wp:paragraph --&gt;
&lt;p&gt;마이크로서비스 아키텍처에서 API 게이트웨이는 필수 컴포넌트입니다. 클라이언트와 백엔드 서비스 사이의 단일 진입점으로서 다양한 횡단 관심사를 처리합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;API 게이트웨이의 역할&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;라우팅&lt;/strong&gt;: 요청을 적절한 백엔드 서비스로 전달&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인증/인가&lt;/strong&gt;: JWT 검증, OAuth 처리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;: API 남용 방지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로깅/모니터링&lt;/strong&gt;: 중앙화된 요청 추적&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;변환&lt;/strong&gt;: 요청/응답 형식 변환&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;캐싱&lt;/strong&gt;: 응답 캐싱으로 백엔드 부하 감소&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;주요 솔루션&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;Kong&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: Lua 기반, 플러그인 아키텍처, 높은 확장성&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: 대규모 엔터프라이즈, 복잡한 요구사항&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;AWS API Gateway&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 서버리스, Lambda 통합, 관리형&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: AWS 환경, 서버리스 아키텍처&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;Traefik&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 클라우드 네이티브, 자동 설정, Let's Encrypt 통합&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: Kubernetes, Docker 환경&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;NGINX&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 검증된 성능, 리버스 프록시 + API 게이트웨이&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적합&lt;/strong&gt;: 기존 NGINX 사용 환경, 간단한 요구사항&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;설계 패턴&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;BFF (Backend for Frontend)&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;클라이언트 유형별(웹, 모바일, IoT)로 전용 게이트웨이를 두어 각 클라이언트에 최적화된 API를 제공합니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading {&quot;level&quot;:3} --&gt;
&lt;h3&gt;API Composition&lt;/h3&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;여러 마이크로서비스의 데이터를 조합하여 단일 응답으로 반환합니다. 클라이언트의 다중 호출을 줄여줍니다.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;

&lt;!-- wp:heading --&gt;
&lt;h2&gt;주의점&lt;/h2&gt;
&lt;!-- /wp:heading --&gt;

&lt;!-- wp:list --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;단일 장애점&lt;/strong&gt;: 고가용성 구성 필수&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;지연 추가&lt;/strong&gt;: 홉이 늘어나므로 최적화 필요&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;복잡성&lt;/strong&gt;: 과도한 로직을 게이트웨이에 넣지 않기&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- /wp:list --&gt;

&lt;!-- wp:paragraph --&gt;
&lt;p&gt;API 게이트웨이는 마이크로서비스의 복잡성을 숨기고 일관된 API를 제공하는 핵심 인프라입니다. 요구사항에 맞는 솔루션을 선택하고, 적절한 패턴을 적용하세요.&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;</description>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/57</guid>
      <comments>https://starstoryus.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 16 Feb 2026 22:05:34 +0900</pubDate>
    </item>
    <item>
      <title>Qwen3-Coder: AI 코딩의 미래, 에이전트적 기능으로 개발을 혁신하다!</title>
      <link>https://starstoryus.tistory.com/55</link>
      <description>&lt;div&gt;
&lt;style&gt;
/* 전체 포스트 컨테이너 스타일 */
.post-container-st {
    font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
    line-height: 1.8; /* 줄간격으로 가독성 향상 */
    color: #333;
    word-break: keep-all; /* 단어 단위로 줄바꿈하여 가독성 향상 */
}

/* 포스트 제목 스타일 */
.post-container-st h2 {
    font-size: 28px;
    font-weight: 700;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 2px solid #000;
    line-height: 1.4;
}

/* 작성자, 날짜 등 메타 정보 스타일 */
.post-container-st .meta-info {
    font-size: 14px;
    color: #888;
    margin-bottom: 40px;
    text-align: right;
}

/* 서론( 도입부 ) 스타일 */
.post-container-st .intro-paragraph {
    font-size: 17px;
    background-color: #f9f9f9;
    border-left: 5px solid #0d6efd; /* 포인트 컬러 */
    padding: 25px;
    margin-bottom: 40px;
    font-weight: 500;
    line-height: 1.9;
}

/* 본문 소제목 스타일 */
.post-container-st h3 {
    font-size: 22px;
    font-weight: 600;
    color: #1a4a9c; /* 포인트 컬러 */
    margin-top: 50px;
    margin-bottom: 20px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eee;
}

/* 본문 단락 스타일 */
.post-container-st p {
    font-size: 16px;
    margin-bottom: 20px;
    text-align: justify; /* 양쪽 정렬로 깔끔하게 */
}

/* 본문 내 강조(strong) 태그 스타일 */
.post-container-st strong {
    color: #0d6efd;
    font-weight: 600;
}

/* 인용구 또는 강조하고 싶은 문단 스타일 */
.post-container-st blockquote {
    margin: 30px 0;
    padding: 20px;
    background-color: #f8f9fa;
    border: 1px solid #e9ecef;
    border-radius: 5px;
    font-size: 16px;
    font-style: italic;
    color: #555;
    border-left: 5px solid #6c757d;
}

/* 결론 부분 스타일 */
.post-container-st .conclusion {
    margin-top: 50px;
    padding: 30px;
    background-color: #f2f6ff;
    border-top: 2px solid #0d6efd;
}

/* 댓글 유도 문구 스타일 */
.post-container-st .comment-prompt {
    margin-top: 40px;
    padding: 20px;
    text-align: center;
    font-size: 17px;
    font-weight: 500;
    background-color: #f9f9f9;
    border-radius: 8px;
}

/* 모바일 화면 대응 */
@media (max-width: 768px) {
    .post-container-st h2 { font-size: 24px; }
    .post-container-st h3 { font-size: 20px; }
    .post-container-st p, .post-container-st .intro-paragraph { font-size: 15px; }
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;post-container-st&quot;&gt;
&lt;p class=&quot;meta-info&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;intro-paragraph&quot; data-ke-size=&quot;size16&quot;&gt;혹시 코딩하다가 막혔을 때, &quot;이거 AI가 대신해줄 수 없을까?&quot; 하고 생각했던 적 없어? 난 솔직히 한두 번이 아니야. 복잡한 코드 짜느라 밤새워 삽질하고, 사소한 버그 하나 잡느라 개고생했던 경험, 개발자라면 다들 공감할 거야. 그런데 이제는 이런 고민이 조금씩 줄어들 것 같아! 바로 &lt;b&gt;Qwen3-Coder&lt;/b&gt; 같은 녀석들 덕분이지. 최근에 공개된 이 AI 모델이 개발자들 사이에서 꽤 화제더라고. 과연 Qwen3-Coder가 어떤 기능을 가지고 있고, 우리 개발 생활에 어떤 변화를 가져올지, 그리고 이 녀석을 어떻게 활용할 수 있을지 함께 알아보자!&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;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tv5L3/btsPwrHgN6T/h7KJjtKml7a282U5qoLHN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tv5L3/btsPwrHgN6T/h7KJjtKml7a282U5qoLHN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tv5L3/btsPwrHgN6T/h7KJjtKml7a282U5qoLHN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftv5L3%2FbtsPwrHgN6T%2Fh7KJjtKml7a282U5qoLHN0%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;Qwen3-Coder, 단순 코드 생성을 넘어선 '에이전트'의 탄생&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Qwen3-Coder가 기존 코드 생성 AI 모델들과 차별화되는 가장 큰 부분은 바로 &lt;b&gt;'에이전트적(agentic) 기능'&lt;/b&gt;이야. [cite_start]단순히 코드를 툭 던져주는 게 아니라, 마치 실제 개발자처럼 문제 해결 과정을 주도하고, 여러 도구를 활용하며, 심지어는 자기 학습을 통해 성능을 개선하는 능력까지 갖췄다는 거지. [cite: 1] [cite_start]첫 주력 버전인 &lt;b&gt;Qwen3-Coder-480B-A35B-Instruct&lt;/b&gt;는 무려 4800억 개의 파라미터를 가지고 있고, 그중 350억 개가 실제로 작동하는 Mixture-of-Experts 구조를 채택하고 있어. [cite: 1] [cite_start]게다가 256K 토큰의 긴 문맥을 기본으로 지원하고, 야른(Yarn) 기반 확장 기법을 사용하면 100만 토큰까지도 확장이 가능하다고 하니, 정말 어마어마하지 않아? [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]이 모델은 Agentic Coding, Browser-Use, Tool-Use 같은 핵심 벤치마크에서 오픈 모델 중 최고 수준의 성과를 보여줬고, 심지어는 Claude Sonnet 4와 비교될 만한 코드 및 에이전트 작업 품질을 자랑한다고 해. [cite: 1] 이 정도면 단순한 코드 도우미를 넘어선 진정한 'AI 동료'라고 불러도 손색없을 것 같아. 개인적으로는 복잡한 프로젝트에서 초기 설계 단계에 큰 도움을 받을 수 있을 것 같다는 기대감이 들더라.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&quot;복잡한 코딩 문제 앞에서 혼자 끙끙 앓았던 경험, 다들 있지 않아? 이제는 AI와 함께 고민하고 해결할 수 있는 시대가 온 것 같아. 이 변화가 얼마나 놀라운 혁신을 가져올지 정말 기대돼!&quot;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드 강화학습(Code RL)의 혁신: Qwen3-Coder의 학습 비결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]Qwen3-Coder가 이렇게 뛰어난 성능을 보이는 데에는 특별한 학습 과정이 숨겨져 있어. [cite: 1] [cite_start]다른 모델들이 단순히 코드 생성에 초점을 맞추는 것과 달리, Qwen3-Coder는 실제 환경에서 다양한 코딩 태스크를 중심으로 &lt;b&gt;코드 강화학습(Code RL)&lt;/b&gt;의 학습 범위를 대폭 확장했어. [cite: 1] [cite_start]이게 무슨 말이냐면, 코드를 생성하는 것에서 그치는 게 아니라, 그 코드를 실행해보고 결과를 확인하고, 또 그 결과에 따라 스스로 학습하고 개선한다는 뜻이야. [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]이들은 풀기 어렵지만 검증하기 쉬운 테스트 케이스를 자동으로 확장해서 고품질 학습 인스턴스를 대량으로 생성했대. [cite: 1] [cite_start]그 결과 코드 실행 성공률과 다른 태스크 성과가 크게 향상됐다고 해. [cite: 1] 내가 생각했을 땐, 우리가 코딩을 하면서 끊임없이 시행착오를 겪고 디버깅을 하면서 실력이 느는 것과 비슷한 원리인 것 같아. AI도 이런 과정을 거쳐서 '진짜 개발 능력'을 키운다는 게 정말 신기하지? [cite_start]소프트웨어 엔지니어링의 실제 태스크(SWE-Bench 등)는 여러 단계의 상호작용, 도구 사용, 피드백 수신, 의사결정 등을 요구하는데, Qwen3-Coder는 에이전트 RL을 도입해서 다회차 툴 상호작용을 통해 실환경 문제 해결 능력을 집중적으로 강화했다고 하더라. [cite: 1]&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Qwen Code CLI와 다양한 개발 도구와의 연동: Qwen3-Coder 활용법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무리 좋은 기술도 쓰기 어려우면 그림의 떡이잖아? [cite_start]그런데 &lt;b&gt;Qwen3-Coder&lt;/b&gt;는 개발자들이 쉽게 접근하고 활용할 수 있도록 다양한 방법을 제공하고 있어. [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]우선, &lt;b&gt;Qwen Code CLI 도구&lt;/b&gt;가 오픈소스로 공개됐어. [cite: 1] [cite_start]이건 Gemini Code를 기반으로 해서 Qwen-Coder 전용 파서와 툴을 추가로 지원한다고 해. [cite: 1] [cite_start]Node.js 20+ 환경만 있으면 npm을 통해 쉽게 설치하고 실행할 수 있으니, 나 같은 일반 개발자들도 부담 없이 써볼 수 있을 것 같아. [cite: 1] [cite_start]환경변수나 .env 파일로 설정해서 OpenAI SDK 프로토콜을 지원하는 다양한 LLM 인프라에서 활용할 수 있다는 점도 큰 장점이지. [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]게다가 &lt;b&gt;Qwen3-Coder&lt;/b&gt;는 Claude Code 환경에서도 활용할 수 있고, Alibaba Cloud Model Studio에서 API 키를 발급받아 연동 설치도 가능하대. [cite: 1] [cite_start]프록시 API나 claude-code-config 패키지를 통해서 다양한 백엔드 모델 선택과 설정도 손쉽게 할 수 있다고 하니, 기존에 사용하던 개발 환경에 Qwen3-Coder를 녹여 넣는 게 어렵지 않을 거야. [cite: 1] [cite_start]Cline 개발 환경에서도 설정해서 사용할 수 있고, 심지어 파이썬 OpenAI SDK를 이용해 &lt;b&gt;Qwen API&lt;/b&gt;로 대화 기반 코드 생성을 시연할 수도 있다고 하니, 활용 범위가 정말 넓은 것 같아. [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]다양한 활용 사례도 제공하는데, 물리 기반 굴뚝 철거 시뮬레이션, Qwen + Cline 통합 사용 예시, Qwen Chat 기반 웹 개발, 유명 인용구를 활용한 타자 속도 측정, 회전 하이퍼큐브 내 바운싱 볼 시뮬레이션, 태양계 환경 모의 실험, 그리고 DUET 게임 생성 등 정말 다채로운 코딩 및 시뮬레이션 사례들을 보여주고 있더라. [cite: 1] 이런 예시들을 보면 &lt;b&gt;Qwen3-Coder&lt;/b&gt;가 단순히 코드를 만들어내는 것을 넘어 실제 개발 프로세스 전반에 걸쳐 혁신적인 도움을 줄 수 있다는 걸 알 수 있어.&lt;/p&gt;
&lt;div class=&quot;conclusion&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론: Qwen3-Coder, 개발자의 미래를 재정의하다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[cite_start]지금까지 &lt;b&gt;Qwen3-Coder&lt;/b&gt;가 어떤 모델인지, 그리고 어떻게 활용할 수 있는지 자세히 알아봤어. [cite: 1] [cite_start]4800억 파라미터의 거대한 규모, 256K 토큰을 넘어서는 긴 문맥 처리 능력, 그리고 무엇보다 에이전트적 기능과 강화 학습을 통한 자가 개선 능력까지. [cite: 1] [cite_start]이 모델은 단순히 코드를 &quot;생성&quot;하는 것을 넘어, 코딩 문제 자체를 &quot;해결&quot;하는 AI 동료로서 우리의 개발 환경을 완전히 바꿔 놓을 잠재력을 가지고 있다고 생각해. [cite: 1]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 Qwen3-Coder를 써보면서 개발 과정에서 겪는 수많은 시행착오를 줄이고, 더 창의적인 문제 해결에 집중할 수 있게 되기를 바라. 물론 아직은 초기 단계의 기술이지만, 앞으로 Qwen3-Coder가 더 다양한 모델 크기로 출시되고, 자가 개선 능력이 더욱 발전한다면 소프트웨어 개발의 미래는 지금과는 완전히 다른 모습이 될 거야. 이 놀라운 기술의 발전에 우리 개발자들이 어떻게 적응하고 활용해나갈지, 정말 기대돼!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;comment-prompt&quot;&gt;Qwen3-Coder에 대해 어떻게 생각해? 네 생각에 이 기술이 개발자들에게 어떤 영향을 줄 것 같아?&lt;br /&gt;혹시 더 좋은 활용법이나 의견이 있다면 댓글로 알려줘!&lt;/div&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>AI 개발</category>
      <category>Qwen Code CLI</category>
      <category>Qwen3-Coder</category>
      <category>에이전트 코딩</category>
      <category>코드 강화학습</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/55</guid>
      <comments>https://starstoryus.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 24 Jul 2025 08:00:26 +0900</pubDate>
    </item>
    <item>
      <title>'캡틴' 손흥민의 미래, 토트넘 잔류냐 새로운 도전이냐 (현지 반응 총정리)</title>
      <link>https://starstoryus.tistory.com/54</link>
      <description>&lt;div&gt;
&lt;style&gt;
/* 전체 포스트 컨테이너 스타일 */
.post-container-st {
    font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
    line-height: 1.8; /* 줄간격으로 가독성 향상 */
    color: #333;
    word-break: keep-all; /* 단어 단위로 줄바꿈하여 가독성 향상 */
}

/* 포스트 제목 스타일 */
.post-container-st h2 {
    font-size: 28px;
    font-weight: 700;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 2px solid #000;
    line-height: 1.4;
}

/* 작성자, 날짜 등 메타 정보 스타일 */
.post-container-st .meta-info {
    font-size: 14px;
    color: #888;
    margin-bottom: 40px;
    text-align: right;
}

/* 서론( 도입부 ) 스타일 */
.post-container-st .intro-paragraph {
    font-size: 17px;
    background-color: #f9f9f9;
    border-left: 5px solid #0d6efd; /* 포인트 컬러 */
    padding: 25px;
    margin-bottom: 40px;
    font-weight: 500;
    line-height: 1.9;
}

/* 본문 소제목 스타일 */
.post-container-st h3 {
    font-size: 22px;
    font-weight: 600;
    color: #1a4a9c; /* 포인트 컬러 */
    margin-top: 50px;
    margin-bottom: 20px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eee;
}

/* 본문 단락 스타일 */
.post-container-st p {
    font-size: 16px;
    margin-bottom: 20px;
    text-align: justify; /* 양쪽 정렬로 깔끔하게 */
}

/* 본문 내 강조(strong) 태그 스타일 */
.post-container-st strong {
    color: #0d6efd;
    font-weight: 600;
}

/* 인용구 또는 강조하고 싶은 문단 스타일 */
.post-container-st blockquote {
    margin: 30px 0;
    padding: 20px;
    background-color: #f8f9fa;
    border: 1px solid #e9ecef;
    border-radius: 5px;
    font-size: 16px;
    font-style: italic;
    color: #555;
    border-left: 5px solid #6c757d;
}

/* 결론 부분 스타일 */
.post-container-st .conclusion {
    margin-top: 50px;
    padding: 30px;
    background-color: #f2f6ff;
    border-top: 2px solid #0d6efd;
}

/* 댓글 유도 문구 스타일 */
.post-container-st .comment-prompt {
    margin-top: 40px;
    padding: 20px;
    text-align: center;
    font-size: 17px;
    font-weight: 500;
    background-color: #f9f9f9;
    border-radius: 8px;
}

/* 모바일 화면 대응 */
@media (max-width: 768px) {
    .post-container-st h2 { font-size: 24px; }
    .post-container-st h3 { font-size: 20px; }
    .post-container-st p, .post-container-st .intro-paragraph { font-size: 15px; }
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;post-container-st&quot;&gt;
&lt;p class=&quot;intro-paragraph&quot; data-ke-size=&quot;size16&quot;&gt;요즘 축구 좋아하는 친구들 만나면 무조건 나오는 얘기가 있지? 바로 우리 '캡틴' 손흥민의 거취 문제 말이야. 토트넘의 심장이자 상징인 선수가 팀을 떠날 수도 있다는 소식에 다들 밤잠 설치는 거, 나도 마찬가지야. 어제도 새벽에 관련 기사들 찾아보다가 '아니, 이건 또 무슨 소리야?' 하면서 깜짝 놀랐다니까. 손흥민이 정말 토트넘 유니폼 말고 다른 팀 유니폼을 입은 모습, 상상이나 가? 그런데 이번엔 그냥 뜬구름 잡는 소문이 아니라, 베팅 사이트 배당률까지 등장하면서 이적설이 훨씬 구체적으로 느껴지는 것 같아. 그래서 오늘은 이 &lt;b&gt;손흥민 이적&lt;/b&gt; 설의 A to Z, 뜬소문과 팩트를 탈탈 털어서 속 시원하게 정리해 보려고 해. 다들 나만 믿고 따라와!&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;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPuLI/btsPn2UOT3G/Zy59O3BcyikJTreJGlFLD0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPuLI/btsPn2UOT3G/Zy59O3BcyikJTreJGlFLD0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPuLI/btsPn2UOT3G/Zy59O3BcyikJTreJGlFLD0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPuLI%2FbtsPn2UOT3G%2FZy59O3BcyikJTreJGlFLD0%2Fimg.webp&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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;'사우디행 배당률 1위?' 구체화되는 이적설의 실체&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 이적설이 그 어느 때보다 뜨거운 이유는 바로 '구체성' 때문이야. 영국 매체 '데일리메일'에서 보도한 내용이 아주 결정적이었지. 스카이벳이라는 베팅 사이트의 배당률을 공개했는데, 손흥민의 차기 행선지 1순위로 꼽힌 곳이 바로 &lt;b&gt;사우디아라비아 프로리그&lt;/b&gt;였어. 배당률이 4/9라는데, 이건 '꽤 가능성이 높다'고 보는 거거든. 호날두, 네이마르 같은 슈퍼스타들이 사우디로 향했던 걸 생각하면 아예 불가능한 시나리오는 아니지. 토트넘이 2026년까지 계약을 연장하긴 했지만, 1년 연장 옵션을 발동한 거라 구단 입장에선 '지금이 손흥민을 팔아 현금을 확보할 마지막 기회'라고 생각할 수도 있다는 분석도 나오고 있어. 게다가 2순위가 어딘지 알아? 바로 '스페셜 원' 무리뉴 감독이 있는 페네르바체(터키)야. 배당률이 15/8로, 스승과 제자의 재회라는 드라마틱한 스토리가 팬들을 더 설레게, 아니 불안하게 만들고 있지. 그 외에도 MLS(미국), 친정팀 레버쿠젠은 물론이고 심지어 맨유나 &lt;b&gt;리버풀&lt;/b&gt; 같은 빅클럽 이름까지 거론되니, 팬들 마음이 롤러코스터를 탈 수밖에 없는 상황이야.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&quot;토트넘은 지난 10년 동안 손흥민의 헌신에 빚을 졌다. 이제는 그가 원하는 길을 열어주어야 할 때일지도 모른다.&quot; 영국 현지 팬들의 목소리처럼, 정말 이별의 시간이 다가오는 걸까?&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&quot;떠날 의사 없다&quot;&amp;hellip; 이적설에 찬물 끼얹는 현지 보도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 그런데 여기서 반전이 있어. 한쪽에서 불을 지피면 다른 한쪽에선 불을 끄는 게 이적 시장의 묘미 아니겠어? 영국의 또 다른 매체 '투더레인앤백'에서는 전혀 다른 주장을 내놨어. 결론부터 말하면 '손흥민은 올여름 토트넘을 떠날 가능성이 낮다'는 거야. 이 매체에 따르면, 손흥민이 사우디나 MLS 클럽과 접촉한 건 맞지만, 그게 자신의 커리어에 최선의 선택일지 확신하지 못하고 있대. 가장 중요한 포인트는 이거야. &lt;b&gt;토트넘 경영진과 레비 회장이 손흥민의 미래를 전적으로 그의 결정에 맡기고 있다&lt;/b&gt;는 점! 심지어 손흥민은 팀에 더 오래 머물 수 있는 새로운 장기 계약에도 긍정적이라는 말까지 나왔어. 많은 팬들이 이번 &lt;b&gt;손흥민 이적&lt;/b&gt; 설에 가슴을 졸이지만, 오히려 현지에서는 잔류 가능성에 무게를 두는 목소리도 만만치 않게 나오고 있다는 거지. 이건 정말 우리에게 희소식 아닐까?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;새 감독의 '확고한 신뢰'와 레비의 '현실적 계산'&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 부임한 토마스 프랭크 감독의 생각은 어떨까? 이것도 아주 중요한 변수야. 영국 'TBR' 보도에 따르면, 프랭크 감독은 이미 손흥민에 대한 마음을 정했대. 바로 &lt;b&gt;'손흥민의 리더십에 계속 의지하겠다'&lt;/b&gt;는 거야. 레비 회장에게 '손흥민은 무조건 남아야 한다'는 의사를 분명히 전달했고, 레비 회장 역시 손흥민의 잔류 의지를 존중할 준비가 되어 있다는 거지. 과거 LAFC와 이적 논의가 있었을 때 레비 회장이 5500만 파운드(약 960억 원)라는, 30대 선수에게는 다소 비현실적인 이적료를 불렀다는 사실도 이런 기조를 뒷받침해. 구단 입장에서 손흥민은 단순한 선수가 아니야. 그의 유니폼 판매량, 한국 팬들을 통한 막대한 상업적 가치를 절대 무시할 수 없거든. 새 감독과 구단 수뇌부의 입장을 종합해 보면, 이번 &lt;b&gt;손흥민 이적&lt;/b&gt;은 현실화되기 어려워 보인다는 결론에 이르게 돼. 챔피언스리그에 다시 나가는 중요한 시즌을 앞두고 주장 완장을 찬 핵심 선수를 내보낸다는 건 상식적으로도 납득하기 어렵지.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;레전드를 위한 '존중', 그리고 가장 현실적인 시나리오&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 이 모든 논의는 하나의 단어로 귀결되는 것 같아. 바로 '존중(Respect)'. '토트넘핫스퍼뉴스'라는 매체의 분석이 내 마음을 가장 울렸는데, 한번 들어봐. &quot;손흥민의 이적 가능성은 토트넘이 얼마를 받을 수 있느냐의 문제가 아니다. 그가 팀을 위해 얼마나 헌신했는지를 생각해야 한다.&quot; 케인이 우승을 위해 떠나고, 수많은 선수가 오고 가는 동안에도 손흥민은 묵묵히 팀을 지켰어. 17년 만의 우승을 위해 싸웠고, 상업적으로도 구단에 막대한 이익을 안겨줬지. 구단이 그를 영입할 때 쓴 2200만 파운드와는 비교도 안 될 만큼 말이야. 그래서 이 매체는 토트넘이 손흥민을 제대로 대우해야 하며, 그가 어떤 선택을 하든(한 시즌 더 뛰든, 사우디로 가든) 지지해야 한다고 주장해. 나도 이 의견에 전적으로 동의해. 그의 다음 시즌 역할은 아마 모든 경기를 풀타임으로 뛰기보다는, 챔피언스리그 같은 중요한 경기에 집중하는 식으로 관리받게 될 가능성이 커. 그렇게 한 시즌 더 유럽 최고의 무대에서 자신의 가치를 증명한 뒤, 미래를 결정하는 것이 가장 합리적인 시나리오 아닐까? 결국 &lt;b&gt;손흥민 이적&lt;/b&gt; 문제는 돈을 넘어선, 레전드에 대한 '존중'의 문제로 봐야 한다는 거지.&lt;/p&gt;
&lt;div class=&quot;conclusion&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론: 격랑 속 손흥민, 그러나 열쇠는 그 자신에게 있다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 손흥민을 둘러싼 뜨거운 이적설들을 다각도로 살펴봤어. 사우디행 배당률 1위라는 충격적인 소식부터, 떠날 의사가 없다는 반박 보도, 그리고 새 감독과 구단의 신뢰까지. 정말 하루가 다르게 새로운 소식이 쏟아져 나와서 정신이 없을 지경이야. 하지만 여러 정보를 종합해 볼 때, 내 생각은 이래. 올여름 &lt;b&gt;손흥민 이적&lt;/b&gt; 가능성은 현실적으로 높지 않아. 특히 챔피언스리그 복귀라는 큰 목표를 앞두고 주장인 그가 팀을 떠나는 그림은 쉽게 그려지지 않아.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 축구계에 '절대'라는 건 없으니, 앞으로 어떤 변수가 생길지는 아무도 모르지. 하지만 분명한 건, 이제 이적의 칼자루는 구단이 아니라 손흥민 자신이 쥐고 있다는 거야. 그가 어떤 선택을 하든, 지난 10년간 우리에게 주었던 수많은 감동과 기쁨을 생각하며 그의 결정을 존중하고 응원해 주는 것이 진정한 팬의 자세가 아닐까? 부디 이번 이적설이 단순한 해프닝으로 끝나고, 다음 시즌에도 토트넘 유니폼을 입고 멋지게 그라운드를 누비는 '캡틴 손'의 모습을 볼 수 있기를 간절히 바라.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;comment-prompt&quot;&gt;요동치는 이적설의 중심에 선 손흥민, 과연 그의 최종 선택은 어디를 향할까요?&lt;br /&gt;여러분의 소중한 의견을 댓글로 남겨주세요!&lt;/div&gt;
&lt;/div&gt;</description>
      <category>라이프</category>
      <category>리버풀 이적설</category>
      <category>사우디 이적설</category>
      <category>손흥민</category>
      <category>손흥민 이적</category>
      <category>토트넘</category>
      <category>프리미어리그</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/54</guid>
      <comments>https://starstoryus.tistory.com/54#entry54comment</comments>
      <pubDate>Thu, 17 Jul 2025 21:20:01 +0900</pubDate>
    </item>
    <item>
      <title>AWS 신상 AI 개발툴 Kiro, 진짜 실무에서 쓸만할까? (솔직 후기)</title>
      <link>https://starstoryus.tistory.com/53</link>
      <description>&lt;div&gt;
&lt;style&gt;
/* 전체 포스트 컨테이너 스타일 */
.post-container-st {
    font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
    line-height: 1.8; /* 줄간격으로 가독성 향상 */
    color: #333;
    word-break: keep-all; /* 단어 단위로 줄바꿈하여 가독성 향상 */
}

/* 포스트 제목 스타일 */
.post-container-st h2 {
    font-size: 28px;
    font-weight: 700;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 2px solid #000;
    line-height: 1.4;
}

/* 작성자, 날짜 등 메타 정보 스타일 */
.post-container-st .meta-info {
    font-size: 14px;
    color: #888;
    margin-bottom: 40px;
    text-align: right;
}

/* 서론( 도입부 ) 스타일 */
.post-container-st .intro-paragraph {
    font-size: 17px;
    background-color: #f9f9f9;
    border-left: 5px solid #0d6efd; /* 포인트 컬러 */
    padding: 25px;
    margin-bottom: 40px;
    font-weight: 500;
    line-height: 1.9;
}

/* 본문 소제목 스타일 */
.post-container-st h3 {
    font-size: 22px;
    font-weight: 600;
    color: #1a4a9c; /* 포인트 컬러 */
    margin-top: 50px;
    margin-bottom: 20px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eee;
}

/* 본문 단락 스타일 */
.post-container-st p {
    font-size: 16px;
    margin-bottom: 20px;
    text-align: justify; /* 양쪽 정렬로 깔끔하게 */
}

/* 본문 내 강조(strong) 태그 스타일 */
.post-container-st strong {
    color: #0d6efd;
    font-weight: 600;
}

/* 인용구 또는 강조하고 싶은 문단 스타일 */
.post-container-st blockquote {
    margin: 30px 0;
    padding: 20px;
    background-color: #f8f9fa;
    border: 1px solid #e9ecef;
    border-radius: 5px;
    font-size: 16px;
    font-style: italic;
    color: #555;
    border-left: 5px solid #6c757d;
}

/* 결론 부분 스타일 */
.post-container-st .conclusion {
    margin-top: 50px;
    padding: 30px;
    background-color: #f2f6ff;
    border-top: 2px solid #0d6efd;
}

/* 댓글 유도 문구 스타일 */
.post-container-st .comment-prompt {
    margin-top: 40px;
    padding: 20px;
    text-align: center;
    font-size: 17px;
    font-weight: 500;
    background-color: #f9f9f9;
    border-radius: 8px;
}

/* 모바일 화면 대응 */
@media (max-width: 768px) {
    .post-container-st h2 { font-size: 24px; }
    .post-container-st h3 { font-size: 20px; }
    .post-container-st p, .post-container-st .intro-paragraph { font-size: 15px; }
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;post-container-st&quot;&gt;
&lt;p class=&quot;intro-paragraph&quot; data-ke-size=&quot;size16&quot;&gt;개발자라면 누구나 한 번쯤 이런 경험 있지 않아? 분명 내 컴퓨터에선 마법처럼 돌아가던 AI 앱인데, 막상 실서버에 올리려고 보면 한숨부터 나오는 거 말이야. &quot;이게 왜 안 되지?&quot;를 반복하다 보면 '프로토타입은 프로토타입일 뿐인가'하는 자괴감마저 들 때가 있어. 요구사항은 자꾸 바뀌고, 내가 짠 코드가 처음 기획과 얼마나 달라졌는지 추적하기도 어렵고. 이런 고민, 나만 하는 건 아닐 거야. 그래서 오늘은 이런 우리들의 '개발 현타'를 해결해 줄지도 모르는, 조금은 특별한 녀석에 대해 이야기해 보려고 해. 바로 AWS에서 최근 공개한 **Kiro**라는 새로운 AI 통합 개발 환경(IDE)이야.&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/8W7oZ/btsPmTEo1aZ/A0cimNcKxAtxVtqH71psEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8W7oZ/btsPmTEo1aZ/A0cimNcKxAtxVtqH71psEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8W7oZ/btsPmTEo1aZ/A0cimNcKxAtxVtqH71psEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8W7oZ%2FbtsPmTEo1aZ%2FA0cimNcKxAtxVtqH71psEK%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;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;'코딩 좀 대신해 줘'를 넘어선 진짜 '협업' 파트너, Kiro&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 AI 코딩 툴, 정말 많잖아. 솔직히 '또 AI 개발 도구야?'라고 생각할 수도 있어. 나도 처음엔 그랬으니까. 하지만 **Kiro**는 조금 다른 방향을 보고 있는 것 같아. 단순히 코드 자동 완성을 넘어서 '스펙 기반 개발(Spec-driven development)'이라는 개념을 전면에 내세우고 있거든. 이건 그냥 '야, 이 기능 만들어줘'하고 던지는 게 아니라, 내가 만들고 싶은 기능의 요구사항, 즉 '스펙'을 명확하게 정의하면 AI 에이전트가 그 설계도를 기반으로 체계적으로 코드를 만들어나가는 방식이야. 개발 초기에 명확하지 않았던 요구사항들을 구체화하고, 그 설계에 따라 움직이니 중간에 길이 꼬이거나 '이게 맞나?' 싶은 순간이 확 줄어드는 거지. 이건 단순한 코딩 조수가 아니라, 내 의도를 이해하고 함께 설계하며 나아가는 '개발 파트너'에 더 가까운 느낌이었어. 많은 사람들이 AI 코딩 툴은 그저 복잡한 로직을 대신 짜주는 도구라고 오해하는데, Kiro는 개발의 시작점인 '설계' 단계부터 깊숙이 관여한다는 점에서 근본적인 차이가 있는 것 같아.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설계도가 코드가 되는 마법: Kiro 스펙(Speck) 파헤치기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kiro의 핵심 기능 중 하나가 바로 '&lt;b&gt;Kiro 스펙(Speck)&lt;/b&gt;'이야. 이게 진짜 물건인데, 개발자가 겪는 가장 큰 고통 중 하나인 '요구사항과 구현의 불일치' 문제를 정면으로 겨냥하고 있어. 예를 들어, 내가 운영하는 쇼핑몰에 '제품 리뷰 시스템'을 추가하고 싶다고 가정해 보자. 예전 같았으면 기획서 뒤적이며 데이터베이스 스키마 짜고, API 엔드포인트 설계하고, 프론트엔드 컴포넌트 만들고... 할 일이 태산이었을 거야.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Kiro에서는 그냥 &quot;제품 검토 시스템 추가&quot;라고 한 줄만 입력하면 돼. 그러면 Kiro가 EARS(Easy Approach to Requirements Syntax)라는 표기법에 맞춰서 '사용자는 리뷰를 볼 수 있어야 한다', '리뷰를 작성할 수 있어야 한다', '별점으로 필터링할 수 있어야 한다' 같은 구체적인 사용자 스토리와 엣지 케이스까지 고려한 인수 기준들을 쫙 뽑아줘. 내가 놓칠 수 있는 부분까지 꼼꼼하게 챙겨주는 거지. 그 다음 단계는 더 놀라워. 이 스펙을 기반으로 데이터 흐름도, 타입스크립트 인터페이스, DB 스키마, API 엔드포인트까지 포함된 기술 설계 문서를 만들어줘. 마지막으로 이 설계에 따라 필요한 코드 구현 작업을 하위 작업들로 나누고, 종속성까지 고려해서 순서대로 정렬해 줘. 각 작업에는 단위 테스트, 통합 테스트, 로딩 상태 처리, 모바일 반응형 디자인까지 포함되어 있어. 이건 뭐, 거의 시니어 개발자가 신입 개발자에게 업무 지시 내리듯이 체계적으로 일을 던져주는 수준이야. 덕분에 개발자는 큰 그림을 놓치지 않고, 눈앞의 작업에만 집중할 수 있게 되는 거지.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;요구사항 정의, 기술 설계, 코드 구현으로 이어지는 이 일련의 과정이 하나의 워크플로우 안에서 유기적으로 연결된다는 것. 이게 바로 Kiro 스펙의 가장 큰 매력이 아닐까? 더 이상 설계 따로, 코드 따로 노는 일은 없겠다는 생각이 들었어.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;내 뒤를 지켜주는 든든한 사수: Kiro 후크(Hook)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자라면 커밋하기 직전, 머릿속으로 수십 가지를 체크하잖아. '아, 테스트 코드 고쳤나?', 'README 파일도 업데이트해야 하는데...', '혹시 코드에 API 키 같은 민감 정보가 들어가진 않았나?' 이런 것들 말이야. 이런 반복적이고 귀찮지만 꼭 해야 하는 작업들을 자동화해주는 기능이 바로 '&lt;b&gt;Kiro 후크(Hook)&lt;/b&gt;'야.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치 경험 많은 사수 한 명이 내 어깨너머로 코드를 봐주는 느낌이랄까? 예를 들어, 내가 리액트 컴포넌트 파일을 저장하면, 후크가 자동으로 관련 테스트 파일을 업데이트해줘. API 엔드포인트를 수정하면, 관련 문서를 최신화해주고. 심지어 커밋 직전에 소스 코드에 자격 증명 정보가 유출되진 않았는지 스캔해주는 보안 후크를 설정할 수도 있어. 팀 전체가 동일한 코딩 표준과 품질 검사를 공유하게 되니까, 코드 리뷰 때 '이건 왜 이렇게 짜셨어요?' 같은 불필요한 논쟁을 줄이고 더 본질적인 문제에 집중할 수 있게 도와줘. 이런 든든한 지원군이 뒤에 있으니, 개발자는 오롯이 창의적인 문제 해결에만 집중할 수 있게 되는 거야.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래서, 어떻게 시작하는데? (설치 가이드 및 추가 정보)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;와, 이거 좀 괜찮은데?&quot;라는 생각이 들었다면, 직접 써보는 게 제일 빠르겠지? 다행히도 **Kiro**는 현재 미리보기(Preview) 기간이라 무료로 사용해 볼 수 있어. 공식 홈페이지에서 Mac, Windows, Linux용 버전을 다운로드할 수 있고, 구글이나 깃허브 계정으로 간편하게 로그인할 수 있어. VS Code 기반이라 기존에 사용하던 설정이나 플러그인도 대부분 그대로 쓸 수 있다는 점도 큰 장점이야.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 사용하는 사람들을 위해 실습 튜토리얼도 잘 준비되어 있으니, 겁먹지 말고 한번 따라 해보는 걸 추천해. 스펙을 작성하는 것부터 시작해서 실제 앱을 배포하는 전체 과정을 경험해 볼 수 있어. 아, 그리고 지금 'Code with Kiro Hackathon'이라는 이벤트도 진행 중이더라고. **Kiro**를 사용해서 만든 앱을 제출하면 최대 10만 달러의 상금도 준다니, 실력 있는 개발자라면 한번 도전해볼 만하지 않을까? (2025년 8월 25일 마감이니 서둘러야 해!)&lt;/p&gt;
&lt;div class=&quot;conclusion&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론: 단순 코더를 넘어 '소프트웨어 설계자'로&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 AWS의 새로운 Agentic IDE, Kiro에 대해 내 경험을 바탕으로 솔직하게 이야기해 봤어. 정리하자면, Kiro는 단순히 코드 몇 줄 찍어주는 걸 넘어서, 개발의 전체적인 흐름, 즉 &amp;lsquo;설계-구현-검증&amp;rsquo;이라는 큰 그림을 함께 그려나가는 파트너에 가깝다는 느낌을 받았어. 특히 'Kiro 스펙'과 'Kiro 후크' 기능은 프로토타입과 실제 프로덕션 코드 사이의 간극을 줄여주고, 개발자가 더 중요한 문제에 집중할 수 있도록 도와주는 강력한 무기가 될 수 있겠더라고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 아직 미리보기 버전이고, 모든 상황에 완벽한 만병통치약은 아닐 수도 있어. 인간과 기계가 소프트웨어를 함께 만드는 방식은 여전히 발전해나가야 할 길이 멀지. 하지만 Kiro는 그 방향으로 나아가는 매우 의미 있는 한 걸음이라고 생각해. 단순 코더가 아니라, 소프트웨어의 구조를 고민하고 설계하는 진짜 '개발자'로 성장하고 싶다면, Kiro와 함께 첫걸음을 내디뎌 보는 건 어떨까?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;comment-prompt&quot;&gt;프로토타입과 프로덕션의 간극을 줄여줄 Kiro, 여러분은 어떻게 생각하시나요?&lt;br /&gt;직접 사용해 보셨거나, 기대되는 점이 있다면 자유롭게 의견을 나눠주세요!&lt;/div&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>agentic ide</category>
      <category>ai 개발 도구</category>
      <category>aws</category>
      <category>KIRO</category>
      <category>kiro 스펙</category>
      <category>kiro 후크</category>
      <category>개발 생산성</category>
      <category>스펙 기반 개발</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/53</guid>
      <comments>https://starstoryus.tistory.com/53#entry53comment</comments>
      <pubDate>Thu, 17 Jul 2025 20:53:14 +0900</pubDate>
    </item>
    <item>
      <title>개념 없는 AI 신조어는 이제 그만! 우리 팀을 살리는 명확한 용어 사용법</title>
      <link>https://starstoryus.tistory.com/52</link>
      <description>&lt;div&gt;
&lt;style&gt;
/* 전체 포스트 컨테이너 스타일 */
.post-container-st {
    font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
    line-height: 1.8; /* 줄간격으로 가독성 향상 */
    color: #333;
    word-break: keep-all; /* 단어 단위로 줄바꿈하여 가독성 향상 */
}

/* 포스트 제목 스타일 */
.post-container-st h2 {
    font-size: 28px;
    font-weight: 700;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 2px solid #000;
    line-height: 1.4;
}

/* 작성자, 날짜 등 메타 정보 스타일 */
.post-container-st .meta-info {
    font-size: 14px;
    color: #888;
    margin-bottom: 40px;
    text-align: right;
}

/* 서론( 도입부 ) 스타일 */
.post-container-st .intro-paragraph {
    font-size: 17px;
    background-color: #f9f9f9;
    border-left: 5px solid #0d6efd; /* 포인트 컬러 */
    padding: 25px;
    margin-bottom: 40px;
    font-weight: 500;
    line-height: 1.9;
}

/* 본문 소제목 스타일 */
.post-container-st h3 {
    font-size: 22px;
    font-weight: 600;
    color: #1a4a9c; /* 포인트 컬러 */
    margin-top: 50px;
    margin-bottom: 20px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eee;
}

/* 본문 단락 스타일 */
.post-container-st p {
    font-size: 16px;
    margin-bottom: 20px;
    text-align: justify; /* 양쪽 정렬로 깔끔하게 */
}

/* 본문 내 강조(strong) 태그 스타일 */
.post-container-st strong {
    color: #0d6efd;
    font-weight: 600;
}

/* 인용구 또는 강조하고 싶은 문단 스타일 */
.post-container-st blockquote {
    margin: 30px 0;
    padding: 20px;
    background-color: #f8f9fa;
    border: 1px solid #e9ecef;
    border-radius: 5px;
    font-size: 16px;
    font-style: italic;
    color: #555;
    border-left: 5px solid #6c757d;
}

/* 결론 부분 스타일 */
.post-container-st .conclusion {
    margin-top: 50px;
    padding: 30px;
    background-color: #f2f6ff;
    border-top: 2px solid #0d6efd;
}

/* 댓글 유도 문구 스타일 */
.post-container-st .comment-prompt {
    margin-top: 40px;
    padding: 20px;
    text-align: center;
    font-size: 17px;
    font-weight: 500;
    background-color: #f9f9f9;
    border-radius: 8px;
}

/* 모바일 화면 대응 */
@media (max-width: 768px) {
    .post-container-st h2 { font-size: 24px; }
    .post-container-st h3 { font-size: 20px; }
    .post-container-st p, .post-container-st .intro-paragraph { font-size: 15px; }
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;post-container-st&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AI 신조어, 아는 척은 이제 그만! 개념 모르면 벌어지는 일들&lt;/h2&gt;
&lt;div class=&quot;meta-info&quot;&gt;작성일: 2025년 7월 17일&lt;/div&gt;
&lt;p class=&quot;intro-paragraph&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요, IT 트렌드를 누구보다 솔직하고 쉽게 파헤치는 블로거입니다. 혹시 최근 회의나 스터디에서 '소버린 AI'니, '에이전틱 AI' 같은 말들이 오갈 때, 나만 모르는 것 같아 조용히 고개만 끄덕였던 경험 없으신가요? 솔직히 고백하자면, 저도 그런 적이 꽤 많습니다. 하루가 다르게 새로운 &lt;b&gt;AI 신조어&lt;/b&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/cg5F8i/btsPnfHfM7J/weUzqvkq9Eo31Xqve25qo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg5F8i/btsPnfHfM7J/weUzqvkq9Eo31Xqve25qo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg5F8i/btsPnfHfM7J/weUzqvkq9Eo31Xqve25qo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg5F8i%2FbtsPnfHfM7J%2FweUzqvkq9Eo31Xqve25qo1%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;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;'있어 보이는' 말의 함정: 개념 없는 신조어가 만드는 혼란&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 기술이 세상을 바꾸기 시작하면, 언제나 새로운 말이 먼저 생겨나기 마련이야. 그 말에는 시대의 변화, 기대감, 그리고 때로는 막연한 두려움까지 담겨있지. 최근 AI 분야는 그야말로 신조어의 홍수 시대라고 할 수 있어. '소버린 AI(Sovereign AI)', '에이전틱 AI(Agentic AI)', 심지어 '자율성 부채(Autonomy Debt)', '가디언 에이전트(Guardian Agent)' 같은 용어까지 등장했어. 듣기만 하면 벌써 엄청난 미래가 펼쳐질 것 같지 않아?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 진짜 문제는 여기서부터 시작돼. &lt;b&gt;말이 개념을 한참 앞질러 달려갈 때 발생하는 혼란&lt;/b&gt;이야. 각자 머릿속에 그리는 그림이 전부 다른 거지. 예를 들어볼게. A팀장은 '에이전틱 AI'를 도입하자고 하면서 단순히 반복 업무를 자동화하는 봇 정도로 생각해. 반면, 개발자인 B는 스스로 데이터를 분석하고, 다른 AI와 협업하며, 새로운 해결책까지 제안하는 완전한 자율 에이전트를 상상하지. 둘은 같은 단어를 썼지만, 실제로는 전혀 다른 목표와 기대를 하고 있는 거야. 이런 '동상이몽'이 모여서 프로젝트를 진행하면 어떻게 될까? 결과는 보나 마나 뻔해.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;결국 &quot;에이전트 기반 솔루션 도입!&quot;이라는 거창한 슬로건만 남고, 실제 결과물은 기존 시스템과 별반 다를 바 없는 '에이전트 워싱(Agent-washing)'으로 끝날 가능성이 커. 이건 단순히 웃어넘길 문제가 아니야. 혼란은 불신을 낳고, 혁신을 향한 동력마저 갉아먹게 되거든. 이런 비극의 시작은 바로, 실체 없는 &lt;b&gt;AI 신조어&lt;/b&gt;를 무분별하게 사용하는 데서 비롯되는 거야.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;말에 '영혼'을 불어넣는 작업: 우리는 무엇을 해야 할까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 해서 &quot;어려우니까 새로운 용어는 쓰지 말자!&quot;라고 할 수는 없는 노릇이지. 기술은 계속 발전할 테고, 그걸 표현할 새로운 단어는 반드시 필요하니까. 중요한 건 &lt;b&gt;'어떻게' 사용하느냐&lt;/b&gt;야. 최근 한 언론 기사에서 제시한 해법이 내 마음에 정말 와닿았어. 바로 말에 '개념'이라는 영혼을 불어넣는 작업이 필요하다는 거야.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째로, &lt;b&gt;개념을 명확하게 정의하는 일&lt;/b&gt;이 시급해. 이건 단순히 사전에 나오는 딱딱한 정의를 말하는 게 아니야. 그 용어가 왜 만들어졌는지, 어떤 기술적, 사회적 배경에서 태어났는지, 그리고 가장 중요하게는 '어떤 문제를 해결하기 위한 것인지' 그 철학과 취지를 분명히 해야 한다는 거지. 솔직히, 어떤 개념을 남에게 쉽게 설명하지 못한다면 그건 나 자신도 제대로 이해하지 못했다는 신호 아닐까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째는 &lt;b&gt;용어의 탄생 배경과 목적을 투명하게 공유하고 토론하는 문화&lt;/b&gt;를 만들어야 해. 어떤 기업이 새로운 AI 기술을 발표하면서 멋진 이름을 붙였다면, 그걸 비밀스러운 마케팅 용어처럼 포장할 게 아니야. &quot;우리는 기존의 A라는 문제를 해결할 수 없어서, B라는 새로운 접근법을 고안했고, 이것을 C라는 이름으로 부르기로 했습니다&quot;라고 솔직하게 소통해야 한다는 거지. 이런 공개적인 토론의 장이 마련될 때, 왜곡된 해석이나 오해가 끼어들 틈이 줄어들게 돼. 뜬구름 잡는 듯한 &lt;b&gt;AI 신조어&lt;/b&gt;에 대한 집단 지성을 발휘하는 거지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, &lt;b&gt;개념을 실제 구현 가능한 구조와 반드시 연결&lt;/b&gt;해야 해. 말로만 '에이전틱 워크플로우'라고 외칠 게 아니라, 그 워크플로우가 구체적으로 어떤 단계로 이루어지고, 어떤 도구와 지표를 사용하며, 기존 방식과 비교했을 때 어떤 기준에서 '에이전트적'이라고 부를 수 있는지를 명확하게 보여줘야 한다는 거야. 개념이 실제 사례와 만날 때 비로소 뜬구름이 아니라 손에 잡히는 현실이 될 수 있어.&lt;/p&gt;
&lt;div class=&quot;conclusion&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론: 말은 방향이다, 우리가 가야 할 길을 비추는 나침반&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 '말이 우리가 가야 할 방향이 된다'는 문장이 모든 것을 말해준다고 생각해. 우리가 지금 무심코 사용하는 &lt;b&gt;AI 신조어&lt;/b&gt; 하나하나가 우리 팀, 우리 회사, 더 나아가 우리 사회가 AI 기술을 바라보는 관점과 나아갈 방향을 결정하고 있는지도 몰라. 새로운 말을 만드는 것은 혁신의 과정에서 자연스러운 일이야. 하지만 그 말에 '개념'이라는 명확한 의미와 '실행'이라는 구체적인 실체를 불어넣는 일을 게을리한다면, 우리는 결국 말에 끌려다니는 신세가 될 뿐이겠지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 쓰면서 나 자신도 많이 반성하게 됐어. 혹시 나도 개념은 제대로 이해하지 못한 채, 그저 있어 보이기 위해 최신 용어를 소비하고 있지는 않았는지 말이야. 이제부터라도 모르는 용어가 나오면, &quot;그게 정확히 어떤 의미인가요? 좀 더 쉽게 설명해주실 수 있나요?&quot;라고 용기 내어 물어보는 자세가 필요할 것 같아. 허세보다 솔직함이, 결국 우리 모두를 더 나은 방향으로 이끌 것이라 믿어.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;comment-prompt&quot;&gt;여러분은 최근 어떤 AI 용어 때문에 혼란스러웠나요?&lt;br /&gt;댓글로 여러분의 경험과 생각을 자유롭게 공유해주세요! 함께 이야기 나누며 개념을 정립해봐요.&lt;/div&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>ai 안전성</category>
      <category>AI 윤리</category>
      <category>개발 가이드</category>
      <category>기술 문서</category>
      <category>생성형 AI</category>
      <category>소버린 ai</category>
      <category>에이전트 ai</category>
      <category>자율 ai</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/52</guid>
      <comments>https://starstoryus.tistory.com/52#entry52comment</comments>
      <pubDate>Thu, 17 Jul 2025 20:28:58 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch 8.18 LOOKUP JOIN 완벽 가이드: 이제 SQL처럼 JOIN 하세요</title>
      <link>https://starstoryus.tistory.com/51</link>
      <description>&lt;div style=&quot;color: #444; line-height: 1.7; max-width: 800px; margin: 0 auto; font-size: 16px; font-family: 'Noto Sans KR', sans-serif; box-sizing: border-box;&quot;&gt;
&lt;div style=&quot;background-color: #f3e5f5; padding: 15px; border-radius: 8px; font-style: italic; margin-bottom: 25px; font-size: 15px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;핵심 요약:&lt;/b&gt; 본 문서는 Elasticsearch 8.18의 혁신적인 기능인 ES|QL의 &lt;b&gt;LOOKUP JOIN&lt;/b&gt;을 심층적으로 다룬다. 새로운 'lookup' 인덱스 모드 설정부터 기본 및 복합 조인 쿼리, 보안 및 인프라 모니터링 등 고급 활용 사례, 그리고 기존 ENRICH 방식과의 비교 분석까지, SQL 스타일의 데이터 조인을 마스터하는 데 필요한 모든 것을 제공한다.&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xascG/btsOYOwbKH1/VCiCofeH8fCqKO4cdTtERK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xascG/btsOYOwbKH1/VCiCofeH8fCqKO4cdTtERK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xascG/btsOYOwbKH1/VCiCofeH8fCqKO4cdTtERK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxascG%2FbtsOYOwbKH1%2FVCiCofeH8fCqKO4cdTtERK%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch는 오랫동안 강력한 검색 및 집계 기능을 제공해왔지만, 서로 다른 인덱스의 데이터를 실시간으로 연결하는 데에는 한계가 있었다. Elasticsearch 8.18에서 ES|QL에 도입된 &lt;b&gt;LOOKUP JOIN&lt;/b&gt; 기능은 이러한 패러다임을 완전히 바꾸는 혁신이다. 이제 사용자들은 데이터 인덱싱 시점에 모든 정보를 보강할 필요 없이, 쿼리 시점에 SQL처럼 간단하게 데이터를 조인하여 컨텍스트를 풍부하게 만들 수 있다. 이는 데이터 상관관계 분석, 보안 이벤트 조사, 자산 정보 병합 등 다양한 시나리오에서 운영 효율성을 극대화한다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. LOOKUP JOIN의 핵심: 새로운 'lookup' 인덱스 모드&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;LOOKUP JOIN을 사용하기 위해서는 먼저 참조 데이터를 저장할 특별한 인덱스를 생성해야 한다. 이 인덱스는 &lt;code&gt;&quot;index.mode&quot;: &quot;lookup&quot;&lt;/code&gt; 설정을 통해 최적화되며, 조인 성능을 극대화한다.&lt;/p&gt;
&lt;div style=&quot;position: relative; margin: 20px 0;&quot;&gt;
&lt;pre class=&quot;puppet&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 20px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# 1. 'lookup' 모드로 인덱스 생성
PUT my_asset_lookup
{
  &quot;settings&quot;: {
    &quot;index.mode&quot;: &quot;lookup&quot;,
    &quot;number_of_shards&quot;: 1
  },
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;ip_address&quot;: { &quot;type&quot;: &quot;ip&quot; },
      &quot;environment&quot;: { &quot;type&quot;: &quot;keyword&quot; },
      &quot;team&quot;: { &quot;type&quot;: &quot;keyword&quot; },
      &quot;criticality&quot;: { &quot;type&quot;: &quot;keyword&quot; }
    }
  }
}

# 2. 참조 데이터 색인
POST my_asset_lookup/_bulk
{&quot;index&quot;:{&quot;_id&quot;:&quot;1&quot;}}
{&quot;ip_address&quot;:&quot;192.168.1.100&quot;,&quot;environment&quot;:&quot;production&quot;,&quot;team&quot;:&quot;backend&quot;,&quot;criticality&quot;:&quot;high&quot;}
{&quot;index&quot;:{&quot;_id&quot;:&quot;2&quot;}}
{&quot;ip_address&quot;:&quot;192.168.1.101&quot;,&quot;environment&quot;:&quot;staging&quot;,&quot;team&quot;:&quot;frontend&quot;,&quot;criticality&quot;:&quot;medium&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;button style=&quot;position: absolute; top: 10px; right: 10px; background: #6c757d; color: white; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; font-size: 12px;&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. ES|QL LOOKUP JOIN 기본 및 복합 활용법&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;ES|QL의 직관적인 문법을 통해 로그 데이터와 방금 생성한 참조 데이터를 손쉽게 조인할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;2.1. 기본 LOOKUP JOIN&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;웹 로그(&lt;code&gt;kibana_sample_data_logs&lt;/code&gt;)의 `clientip` 필드를 자산 정보(&lt;code&gt;my_asset_lookup&lt;/code&gt;)의 `ip_address` 필드와 조인하여 에러가 발생한 IP의 환경 및 담당 팀 정보를 보강한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;FROM kibana_sample_data_logs
| WHERE response.keyword != &quot;200&quot;
| LOOKUP JOIN my_asset_lookup ON clientip = ip_address
| STATS error_count = COUNT(*) BY response.keyword, environment, team
| SORT error_count DESC&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;2.2. 복합 조건 및 다중 JOIN&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;하나의 쿼리 내에서 여러 `LOOKUP JOIN`을 사용하여 보안 이벤트에 자산 정보와 사용자 정보를 동시에 보강하고, 실패한 로그인 시도가 10회를 초과하는 심각한 상황을 분석한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;FROM security_events
| WHERE event.action == &quot;login_failed&quot;
| LOOKUP JOIN asset_lookup ON source.ip = asset_ip
| LOOKUP JOIN user_lookup ON user.name = username
| STATS failed_attempts = COUNT(*) BY asset.criticality, user.department, source.ip
| WHERE failed_attempts &amp;gt; 10
| SORT failed_attempts DESC&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 고급 활용 사례: 보안, 인프라, APM 분석&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;LOOKUP JOIN은 다양한 운영 시나리오에서 데이터 분석의 깊이를 더한다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 15px 20px; padding: 0; list-style-type: '✔️ ';&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;보안 분석:&lt;/b&gt; 방화벽 로그와 최신 위협 인텔리전스 데이터를 실시간으로 조인하여 알려진 악성 IP로부터의 공격을 즉시 식별한다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;인프라 모니터링:&lt;/b&gt; CPU 사용량이 급증한 서버의 메트릭 데이터를 자산 관리 데이터(CMDB)와 조인하여 해당 서버의 중요도, 담당 팀, 관리자 정보를 즉시 파악하고 신속하게 대응한다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;애플리케이션 성능 분석:&lt;/b&gt; APM 트레이스 데이터와 배포 이력 데이터를 조인하여 특정 배포 버전이 에러율이나 응답 시간에 미친 영향을 정확히 분석한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. ENRICH 프로세서 vs. LOOKUP JOIN 비교&lt;/b&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #ede7f6; border-left: 4px solid #9575cd; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;&quot;&gt;&lt;b&gt;  핵심 차이점&lt;/b&gt;&lt;br /&gt;&lt;b&gt;ENRICH&lt;/b&gt;는 데이터 &lt;b&gt;인덱싱 시점&lt;/b&gt;에 데이터를 보강한다. 참조 데이터가 변경될 때마다 정책을 재실행해야 하는 번거로움이 있다. 반면, &lt;b&gt;LOOKUP JOIN&lt;/b&gt;은 &lt;b&gt;쿼리 시점&lt;/b&gt;에 데이터를 보강하므로, 참조 데이터가 실시간으로 변경되어도 항상 최신 정보를 사용하여 분석할 수 있다.&lt;/div&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin-bottom: 20px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background-color: #f3e5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #e1bee7; text-align: left;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #e1bee7; text-align: left;&quot;&gt;ENRICH Processor (기존)&lt;/th&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #e1bee7; text-align: left; background-color: #e1bee7; color: #6a1b9a;&quot;&gt;ES|QL LOOKUP JOIN (신규)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;실행 시점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;인덱싱 시점&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7; font-weight: bold;&quot;&gt;쿼리 시점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;데이터 변경&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;정적 데이터에 적합&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7; font-weight: bold;&quot;&gt;동적/실시간 데이터에 최적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;유연성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;낮음 (파이프라인 사전 정의)&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7; font-weight: bold;&quot;&gt;높음 (쿼리에서 즉시 사용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7;&quot;&gt;높음 (정책 생성/실행 필요)&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #e1bee7; font-weight: bold;&quot;&gt;낮음 (SQL과 유사)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 실시간 데이터 관리 및 성능 최적화&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;LOOKUP JOIN의 가장 큰 장점은 참조 데이터의 실시간성을 보장한다는 것이다. 외부 CMDB나 자산 관리 시스템의 변경 사항을 주기적으로 동기화하거나, 실시간으로 개별 문서를 업데이트하여 항상 최신 상태의 컨텍스트를 유지할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# Python을 이용한 동적 데이터 관리
from datetime import datetime

class DynamicLookupManager:
    def __init__(self, es_client):
        self.es = es_client
    
    def sync_from_cmdb(self, cmdb_api_endpoint):
        cmdb_data = self._fetch_cmdb_data(cmdb_api_endpoint)
        # CMDB 데이터를 Elasticsearch Bulk API로 일괄 업데이트
        self.es.bulk(body=self._create_bulk_ops(cmdb_data))

# CMDB와 동기화된 최신 자산 정보로 즉시 조인 가능
# FROM ... | LOOKUP JOIN asset_lookup ...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Lookup 인덱스의 성능을 최적으로 유지하기 위해 단일 샤드를 사용하고, 조인 키는 `keyword` 타입을 사용하는 것이 권장된다. 또한, Kibana UI를 통해 CSV 파일을 업로드하여 비전문가도 손쉽게 Lookup 인덱스를 생성하고 관리할 수 있다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론 및 향후 로드맵&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch 8.18의 &lt;b&gt;LOOKUP JOIN&lt;/b&gt;은 NoSQL의 유연성과 관계형 데이터베이스의 강력한 데이터 연결성을 결합한 게임 체인저이다. 이 기능을 통해 사용자들은 복잡한 데이터 파이프라인 없이도 실시간으로 데이터를 보강하고, 더 깊이 있는 인사이트를 발견할 수 있게 되었다.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;향후 로드맵에는 `INNER JOIN`, 서브쿼리, 일반 인덱스와의 조인 등 더욱 강력한 기능들이 포함되어 있어, Elasticsearch가 진정한 통합 분석 플랫폼으로 발전하는 데 핵심적인 역할을 할 것으로 기대된다. 지금 바로 Elasticsearch 8.18에서 LOOKUP JOIN을 경험하고 데이터 분석의 새로운 가능성을 탐험해보길 바란다.&lt;/p&gt;
&lt;script&gt;
        function copyCode(button) {
            const pre = button.parentElement.querySelector('pre');
            const code = pre.querySelector('code');
            const text = code.innerText;
            navigator.clipboard.writeText(text).then(() =&gt; {
                button.innerText = 'Copied!';
                setTimeout(() =&gt; { button.innerText = 'Copy'; }, 2000);
            }).catch(err =&gt; { console.error('Failed to copy: ', err); });
        }
    &lt;/script&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>data enrichment</category>
      <category>elasticsearch 8.18</category>
      <category>es|ql</category>
      <category>lookup index</category>
      <category>lookup join</category>
      <category>observability</category>
      <category>security analytics</category>
      <category>SQL Join</category>
      <category>데이터 보강</category>
      <category>데이터 상관관계 분석</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/51</guid>
      <comments>https://starstoryus.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 1 Jul 2025 10:27:49 +0900</pubDate>
    </item>
    <item>
      <title>GenAI Connector로 Elastic Observability에 조직의 지식 주입하기</title>
      <link>https://starstoryus.tistory.com/50</link>
      <description>&lt;div style=&quot;color: #444; line-height: 1.7; max-width: 800px; margin: 0 auto; font-size: 16px; font-family: 'Noto Sans KR', sans-serif; box-sizing: border-box;&quot;&gt;
&lt;div style=&quot;background-color: #f3e5f5; padding: 15px; border-radius: 8px; font-style: italic; margin-bottom: 25px; font-size: 15px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;핵심 요약:&lt;/b&gt; 본 문서는 Elastic Observability AI Assistant를 조직의 내부 데이터(런북, 기술 문서, 과거 인시던트)와 통합하여 차세대 지능형 관찰 가능성 플랫폼을 구축하는 방법을 상세히 다룬다. Knowledge Base 설계, GenAI Connector 설정, 자동화된 지식 수집, AI 기반 하이브리드 검색, 그리고 해결된 인시던트로부터 학습하는 동적 업데이트 파이프라인 구축까지 전 과정을 안내한다.&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uoANi/btsOXiyfBaE/3qQTBMIVHRdHD7exCmK5Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uoANi/btsOXiyfBaE/3qQTBMIVHRdHD7exCmK5Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uoANi/btsOXiyfBaE/3qQTBMIVHRdHD7exCmK5Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuoANi%2FbtsOXiyfBaE%2F3qQTBMIVHRdHD7exCmK5Tk%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Observability의 AI Assistant는 그 자체로 강력한 도구이지만, 조직 내부의 축적된 지식과 결합될 때 그 잠재력이 폭발적으로 증가한다. 일반적인 LLM이 제공할 수 없는, 우리 조직만의 컨텍스트를 이해하는 AI를 구축하는 것이 핵심이다. 이 가이드는 기술 문서, 런북, 과거 인시던트 해결 기록을 &lt;b&gt;Knowledge Base&lt;/b&gt;로 구축하고, &lt;b&gt;GenAI Connector&lt;/b&gt;를 통해 외부 LLM과 연동하여 모든 엔지니어가 조직 최고의 전문가처럼 문제를 해결할 수 있는 지능형 근본 원인 분석(RCA) 시스템을 구축하는 방법을 제시한다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1단계: 지능형 Knowledge Base 설계 및 구축&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;성공적인 Knowledge Base의 첫걸음은 잘 설계된 인덱스에서 시작된다. 키워드 검색을 위한 커스텀 분석기와 의미 검색을 위한 벡터 필드를 모두 포함하는 것이 중요하다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. 런북 및 기술 문서 인덱스&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;기술 용어 동의어 처리, 벡터 필드 등을 포함한 인덱스 매핑을 정의한다.&lt;/p&gt;
&lt;div style=&quot;position: relative; margin: 20px 0;&quot;&gt;
&lt;pre class=&quot;cs&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 20px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;PUT knowledge-base-runbooks
{
  &quot;settings&quot;: {
    &quot;analysis&quot;: {
      &quot;analyzer&quot;: {
        &quot;technical_content_analyzer&quot;: {
          &quot;type&quot;: &quot;custom&quot;,
          &quot;tokenizer&quot;: &quot;standard&quot;,
          &quot;filter&quot;: [&quot;lowercase&quot;, &quot;stop&quot;, &quot;snowball&quot;, &quot;technical_synonyms&quot;]
        }
      },
      &quot;filter&quot;: {
        &quot;technical_synonyms&quot;: {
          &quot;type&quot;: &quot;synonym&quot;,
          &quot;synonyms&quot;: [&quot;cpu,processor&quot;, &quot;memory,ram&quot;, &quot;db,database&quot;, &quot;api,endpoint&quot;]
        }
      }
    }
  },
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;title&quot;: { &quot;type&quot;: &quot;text&quot;, &quot;analyzer&quot;: &quot;technical_content_analyzer&quot; },
      &quot;content&quot;: { &quot;type&quot;: &quot;text&quot;, &quot;analyzer&quot;: &quot;technical_content_analyzer&quot; },
      &quot;content_vector&quot;: {
        &quot;type&quot;: &quot;dense_vector&quot;,
        &quot;dims&quot;: 1536,
        &quot;index&quot;: true,
        &quot;similarity&quot;: &quot;cosine&quot;
      },
      &quot;service_names&quot;: { &quot;type&quot;: &quot;keyword&quot; },
      &quot;tags&quot;: { &quot;type&quot;: &quot;keyword&quot; }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;button style=&quot;position: absolute; top: 10px; right: 10px; background: #6c757d; color: white; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; font-size: 12px;&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. 과거 인시던트 인덱스&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;과거의 문제 해결 기록은 미래의 문제를 해결하는 데 가장 중요한 자산이다. 유사 인시던트 검색을 위해 벡터 필드를 포함하여 설계한다.&lt;/p&gt;
&lt;pre class=&quot;cs&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;PUT knowledge-base-incidents
{
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;incident_id&quot;: { &quot;type&quot;: &quot;keyword&quot; },
      &quot;description&quot;: { &quot;type&quot;: &quot;text&quot;, &quot;analyzer&quot;: &quot;technical_content_analyzer&quot; },
      &quot;description_vector&quot;: {
        &quot;type&quot;: &quot;dense_vector&quot;,
        &quot;dims&quot;: 1536,
        &quot;index&quot;: true,
        &quot;similarity&quot;: &quot;cosine&quot;
      },
      &quot;root_cause&quot;: { &quot;type&quot;: &quot;text&quot; },
      &quot;solution&quot;: { &quot;type&quot;: &quot;text&quot; },
      &quot;affected_services&quot;: { &quot;type&quot;: &quot;keyword&quot; }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2단계: GenAI Connector 및 추론 모델 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch와 외부 LLM(예: Azure OpenAI)을 연결하기 위해 GenAI Connector와 Inference Endpoint를 설정한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #ede7f6; border-left: 4px solid #9575cd; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;&quot;&gt;&lt;b&gt;  API 키 관리&lt;/b&gt;&lt;br /&gt;실제 프로덕션 환경에서는 API 키를 직접 코드에 하드코딩하는 대신, Elasticsearch Keystore나 환경 변수 등 안전한 방법을 사용하여 관리해야 한다.&lt;/div&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# 1. GenAI Connector 설정
PUT _connector/azure-openai-kb-connector
{
  &quot;name&quot;: &quot;Azure OpenAI Knowledge Base Connector&quot;,
  &quot;service_type&quot;: &quot;azureopenai&quot;,
  &quot;configuration&quot;: { &quot;api_key&quot;: &quot;...&quot;, &quot;resource_name&quot;: &quot;...&quot;, &quot;deployment_id&quot;: &quot;...&quot; }
}

# 2. Embedding 모델 설정
PUT _inference/text_embedding/azure-openai-embeddings
{
  &quot;service&quot;: &quot;azureopenai&quot;,
  &quot;service_settings&quot;: { &quot;api_key&quot;: &quot;...&quot;, &quot;deployment_id&quot;: &quot;text-embedding-ada-002&quot; }
}

# 3. Completion 모델 설정
PUT _inference/completion/azure-openai-completion
{
  &quot;service&quot;: &quot;azureopenai&quot;,
  &quot;service_settings&quot;: { &quot;api_key&quot;: &quot;...&quot;, &quot;deployment_id&quot;: &quot;gpt-4-deployment&quot; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3단계: 자동화된 지식 수집 및 임베딩&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Git 저장소에 저장된 마크다운 형식의 런북을 주기적으로 수집하고, 임베딩을 생성하여 Elasticsearch에 인덱싱하는 자동화 파이프라인을 구축한다.&lt;/p&gt;
&lt;div style=&quot;position: relative; margin: 20px 0;&quot;&gt;
&lt;pre class=&quot;ruby&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 20px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# Python을 이용한 자동 인덱싱 파이프라인
import os
from elasticsearch import Elasticsearch
from pathlib import Path

class KnowledgeBaseIngester:
    def __init__(self, es_client, embedding_model_id):
        self.es = es_client
        self.embedding_model_id = embedding_model_id

    def ingest_runbooks_from_git(self, repo_path, index_name=&quot;knowledge-base-runbooks&quot;):
        for file_path in Path(repo_path).rglob(&quot;*.md&quot;):
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
            
            # YAML frontmatter에서 메타데이터 추출
            metadata = self._extract_metadata(content) 
            
            # Inference API를 호출하여 콘텐츠 벡터 생성
            embedding_response = self.es.inference.inference(
                inference_id=self.embedding_model_id,
                body={&quot;input&quot;: content}
            )
            content_vector = embedding_response['text_embedding'][0]['embedding']
            
            # Elasticsearch에 문서 인덱싱
            doc = {**metadata, &quot;content&quot;: content, &quot;content_vector&quot;: content_vector}
            self.es.index(index=index_name, body=doc, id=str(file_path))

# 사용 예제
es = Elasticsearch(...)
ingester = KnowledgeBaseIngester(es, &quot;azure-openai-embeddings&quot;)
ingester.ingest_runbooks_from_git(&quot;/path/to/your/runbooks-repo&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;button style=&quot;position: absolute; top: 10px; right: 10px; background: #6c757d; color: white; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; font-size: 12px;&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4단계: AI 기반 하이브리드 검색 및 요약&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사용자의 질문이나 인시던트 컨텍스트가 주어졌을 때, 의미 기반의 벡터 검색과 정확성 높은 키워드 검색을 결합한 하이브리드 검색을 수행한다. 검색된 결과는 다시 LLM에 전달되어 사용자에게 맞춤형 요약과 해결책을 제시한다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;class IntelligentKnowledgeSearch:
    def search_relevant_knowledge(self, query, context=None):
        # 1. 쿼리 임베딩 생성
        query_vector = self._get_embedding(query)
        
        # 2. 하이브리드 검색 쿼리 구성 (벡터 + 키워드)
        search_body = {
            &quot;query&quot;: {
                &quot;bool&quot;: {
                    &quot;should&quot;: [
                        { &quot;script_score&quot;: { &quot;query&quot;: {&quot;match_all&quot;: {}}, &quot;script&quot;: { &quot;source&quot;: &quot;cosineSimilarity(params.query_vector, 'content_vector') + 1.0&quot;, &quot;params&quot;: {&quot;query_vector&quot;: query_vector} }}},
                        { &quot;multi_match&quot;: { &quot;query&quot;: query, &quot;fields&quot;: [&quot;title^3&quot;, &quot;content&quot;] }}
                    ],
                    &quot;filter&quot;: self._create_context_filters(context) # 서비스 이름, 에러 타입 등으로 필터링
                }
            }
        }
        
        # 3. 검색 실행
        search_response = self.es.search(index=&quot;knowledge-base-*&quot;, body=search_body)
        
        # 4. LLM을 통한 검색 결과 요약 및 답변 생성
        ai_summary = self._summarize_with_ai(search_response, query)
        return ai_summary
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5단계: 통합 근본 원인 분석(RCA) 및 자연어 알람&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;새로운 인시던트가 발생했을 때, 시스템은 자동으로 관련 런북과 과거 유사 인시던트를 검색하고, 이를 바탕으로 LLM이 종합적인 분석을 수행하여 사람이 이해하기 쉬운 '자연어 알람'을 생성한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #f5f5f5; color: #555; padding: 15px; border-radius: 8px; overflow-x: auto; border: 1px solid #ddd; font-size: 14px;&quot;&gt;&lt;b&gt;[자연어 알람 예시]&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;Critical: 'payment-service' DB 연결 장애 발생&lt;/b&gt;&lt;br /&gt;&lt;b&gt;[What]&lt;/b&gt; 결제 서비스에서 DB 연결 타임아웃 에러율이 45%로 급증했습니다.&lt;br /&gt;&lt;b&gt;[Why]&lt;/b&gt; 과거 유사 인시던트(INC-2024-0156) 분석 결과, 트래픽 급증으로 인한 DB 연결 풀 고갈이 유력한 원인입니다.&lt;br /&gt;&lt;b&gt;[Impact]&lt;/b&gt; 현재 모든 결제 기능이 실패하고 있습니다.&lt;br /&gt;&lt;b&gt;[Action]&lt;/b&gt; 즉시 '데이터베이스 연결 문제 해결 가이드' 런북에 따라 연결 풀 상태를 확인하고, 1단계 조치(연결 풀 확장)를 수행해 주세요.&lt;/div&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6단계: 지속적인 학습 (피드백 루프)&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;인시던트가 해결되면, 그 해결 과정과 근본 원인, 교훈 등을 AI가 요약하여 새로운 지식으로 'knowledge-base-incidents' 인덱스에 자동으로 추가한다. 이로써 시스템은 시간이 지남에 따라 더욱 똑똑해지는 자기 학습(Self-Learning) 능력을 갖추게 된다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Observability AI Assistant와 Knowledge Base의 통합은 단순한 정보 검색을 넘어, 조직의 집단 지성을 활용하는 '지능형 운영 동반자'를 만드는 과정이다. 이 시스템을 통해 얻을 수 있는 핵심적인 이점은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 15px 20px; padding: 0; list-style-type: '  ';&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;지능형 RCA:&lt;/b&gt; 조직의 컨텍스트를 이해하는 AI를 통해 더 빠르고 정확한 근본 원인 분석이 가능하다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;엔지니어 역량 상향 평준화:&lt;/b&gt; 신입 엔지니어도 숙련된 전문가의 노하우를 활용하여 문제를 해결할 수 있다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;지속적인 학습 및 성장:&lt;/b&gt; 모든 인시던트 해결 경험이 자산화되어 시스템이 스스로 발전한다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;통합 플랫폼:&lt;/b&gt; 흩어져 있던 기술 문서, 런북, 과거 인시던트 정보가 단일 플랫폼에서 관리되고 활용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;지금 바로 여러분의 조직에 잠들어 있는 지식을 깨워 차세대 관찰 가능성 플랫폼을 구축해보길 바란다.&lt;/p&gt;
&lt;script&gt;
        function copyCode(button) {
            const pre = button.parentElement.querySelector('pre');
            const code = pre.querySelector('code');
            const text = code.innerText;
            navigator.clipboard.writeText(text).then(() =&gt; {
                button.innerText = 'Copied!';
                setTimeout(() =&gt; { button.innerText = 'Copy'; }, 2000);
            }).catch(err =&gt; { console.error('Failed to copy: ', err); });
        }
    &lt;/script&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>ai assistant</category>
      <category>azure openai</category>
      <category>elastic observability</category>
      <category>GenAI</category>
      <category>hybrid search</category>
      <category>knowledge base</category>
      <category>rag (retrieval-augmented generation)</category>
      <category>root cause analysis (rca)</category>
      <category>runbook automation</category>
      <category>Vector Search</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/50</guid>
      <comments>https://starstoryus.tistory.com/50#entry50comment</comments>
      <pubDate>Tue, 1 Jul 2025 10:17:05 +0900</pubDate>
    </item>
    <item>
      <title>Elastic Observability 완벽 가이드: 로그, 메트릭, 트레이스 통합</title>
      <link>https://starstoryus.tistory.com/49</link>
      <description>&lt;div style=&quot;color: #444; line-height: 1.7; max-width: 800px; margin: 0 auto; font-size: 16px; font-family: 'Noto Sans KR', sans-serif; box-sizing: border-box;&quot;&gt;
&lt;div style=&quot;background-color: #f3e5f5; padding: 15px; border-radius: 8px; font-style: italic; margin-bottom: 25px; font-size: 15px; border: 1px solid #e1bee7;&quot;&gt;&lt;b&gt;핵심 요약:&lt;/b&gt; 본 문서는 Elastic Observability 플랫폼의 모든 것을 다루는 포괄적인 가이드이다. LogsDB, AI Assistant, Universal Profiling 등 핵심 기능부터 OpenTelemetry 네이티브 통합, 쿠버네티스 및 클라우드 환경 설정, SLO 및 합성 모니터링 구현까지, 차세대 관찰 가능성 플랫폼을 구축하고 운영하는 데 필요한 모든 기술적 지식과 실제 예제를 제공한다.&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TWdW9/btsOZvXb3qS/F80Nw73clmfdlpactFWTS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TWdW9/btsOZvXb3qS/F80Nw73clmfdlpactFWTS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TWdW9/btsOZvXb3qS/F80Nw73clmfdlpactFWTS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTWdW9%2FbtsOZvXb3qS%2FF80Nw73clmfdlpactFWTS1%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;현대의 분산 시스템과 하이브리드 클라우드 환경은 전례 없는 복잡성을 야기하며, 기존의 사일로화된 모니터링 방식으로는 효과적인 대응이 어렵다. &lt;b&gt;Elastic Observability&lt;/b&gt;는 이러한 문제를 해결하기 위해 로그, 메트릭, 트레이스를 단일 통합 데이터 저장소에서 유기적으로 분석하는 차세대 관찰 가능성 플랫폼이다. OpenTelemetry 우선 아키텍처와 AI 기반 분석을 통해, 개발자와 운영팀은 시스템의 상태를 깊이 있게 이해하고 문제를 신속하게 해결하며, 안정적인 서비스를 제공할 수 있다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Elastic Observability의 핵심 기능&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Observability는 네 가지 강력한 핵심 기능을 중심으로 구축되었다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. LogsDB: 혁신적인 로그 관리&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;스마트 인덱스 정렬, 고급 압축, 합성 `_source` 기술을 통해 로그 저장 공간을 최대 65% 절약하고, 페타바이트 규모의 로그도 별도 아카이브 계층 없이 즉시 검색 가능한 상태로 유지하여 TCO를 획기적으로 절감한다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. AI Assistant: 지능형 관찰 가능성&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;로그, 메트릭, 트레이스 전반에 걸쳐 컨텍스트를 이해하고, 자연어 쿼리를 통해 복잡한 분석을 수행한다. 자동 이상 탐지 및 Google Cloud, Azure 등 클라우드 네이티브 AI 서비스와 연동하여 지능적인 문제 해결을 지원한다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.3. Universal Profiling: 연속적인 성능 프로파일링&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Java, .NET, Python, Go 등 다양한 언어에 대해 코드 레벨의 CPU 및 메모리 사용량을 지속적으로 프로파일링한다. OpenTelemetry 표준을 준수하며, 플레임그래프 시각화를 통해 성능 병목 지점을 직관적으로 식별할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;1.4. LLM Observability: 생성형 AI 모니터링&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Azure OpenAI와 통합하여 GPT, Claude와 같은 LLM의 성능을 추적한다. 프롬프트 입출력, 비용, 지연 시간 등을 모니터링하여 GenAI 애플리케이션의 효율성을 최적화하고 전체 스택에 대한 관찰 가능성을 확보한다.&lt;/p&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 기본 환경 설정 및 데이터 수집&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Observability는 Elastic Cloud와 Self-Hosted 환경을 모두 지원한다. 다음은 Self-Hosted 환경을 위한 `docker-compose.yml` 예제이다.&lt;/p&gt;
&lt;div style=&quot;position: relative; margin: 20px 0;&quot;&gt;
&lt;pre class=&quot;vim&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 20px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
    ports: [&quot;9200:9200&quot;]
  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports: [&quot;5601:5601&quot;]
    depends_on: [elasticsearch]
  apm-server:
    image: docker.elastic.co/apm/apm-server:8.17.0
    environment:
      - output.elasticsearch.hosts=[&quot;http://elasticsearch:9200&quot;]
    ports: [&quot;8200:8200&quot;]
    depends_on: [elasticsearch]&lt;/code&gt;&lt;/pre&gt;
&lt;button style=&quot;position: absolute; top: 10px; right: 10px; background: #6c757d; color: white; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; font-size: 12px;&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #ede7f6; border-left: 4px solid #9575cd; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;&quot;&gt;&lt;b&gt;  OpenTelemetry 통합&lt;/b&gt;&lt;br /&gt;Elastic은 OpenTelemetry를 네이티브로 지원하며, &lt;b&gt;Elastic Distribution for OpenTelemetry Collector&lt;/b&gt;를 통해 데이터 수집을 표준화한다. 아래는 OTel Collector 설정 예시로, gRPC/HTTP를 통해 로그, 메트릭, 트레이스를 수신하고 Elasticsearch로 전송하는 파이프라인을 정의한다.&lt;/div&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# otel-collector-config.yaml
receivers:
  otlp:
    protocols: { grpc: {}, http: {} }
processors:
  batch: {}
exporters:
  elasticsearch/traces:
    endpoints: [&quot;https://your-es-endpoint:9243&quot;]
    api_key: &quot;your-api-key&quot;
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [elasticsearch/traces]
    logs:
      # ... logs pipeline
    metrics:
      # ... metrics pipeline&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 애플리케이션 및 인프라 통합&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;플랫폼 설정 후, 실제 애플리케이션과 인프라에 에이전트를 설치하여 데이터를 수집한다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;3.1. 애플리케이션 계측 (Java 예제)&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;OpenTelemetry SDK를 사용하여 애플리케이션 코드 내에서 직접 커스텀 메트릭과 트레이스 스팬(Span)을 생성할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;// 주문 생성 시 카운터 증가 및 스팬 기록
orderCounter.increment();
Span span = Span.current();
span.setAttribute(&quot;order.id&quot;, request.getId());
try {
    // Business Logic
    span.setStatus(StatusCode.OK);
} catch (Exception e) {
    span.setStatus(StatusCode.ERROR, e.getMessage());
    span.recordException(e);
    throw e;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;3.2. Kubernetes 환경 통합&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Agent를 DaemonSet으로 배포하여 Kubernetes 클러스터의 모든 노드에서 로그와 메트릭을 자동으로 수집하고, 관련 메타데이터를 풍부하게 추가한다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;# elastic-agent-k8s-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: elastic-agent
  namespace: kube-system
spec:
  template:
    spec:
      containers:
      - name: elastic-agent
        image: docker.elastic.co/beats/elastic-agent:8.17.0
        # ... volume mounts and env configuration
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 고급 기능 활용&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 수집이 완료되면, Elastic의 강력한 고급 기능들을 활용하여 시스템을 심층적으로 분석할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;4.1. AI Assistant를 통한 자연어 쿼리&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;복잡한 KQL(Kibana Query Language) 대신, 일반적인 언어로 질문하여 원하는 분석 결과를 얻을 수 있다.&lt;/p&gt;
&lt;div style=&quot;background-color: #f5f5f5; color: #555; padding: 15px; border-radius: 8px; overflow-x: auto; border: 1px solid #ddd; font-size: 14px;&quot;&gt;&lt;code&gt;&quot;지난 1시간 동안 500 에러를 반환한 서비스는 무엇이며, 해당 서비스의 CPU 사용량과 연관된 트레이스를 보여줘.&quot;&lt;/code&gt;&lt;/div&gt;
&lt;h3 style=&quot;font-size: 20px; color: #8e24aa; margin: 25px 0 10px;&quot; data-ke-size=&quot;size23&quot;&gt;4.2. SLO 설정 및 합성 모니터링&lt;/h3&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서비스 수준 목표(SLO)를 설정하여 서비스의 신뢰성을 정량적으로 측정하고, Elastic Synthetics를 사용하여 실제 사용자 경험과 동일한 시나리오를 주기적으로 테스트하여 잠재적인 문제를 사전에 발견한다.&lt;/p&gt;
&lt;pre class=&quot;dart&quot; style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'D2Coding', 'Consolas', monospace; font-size: 14px;&quot;&gt;&lt;code&gt;// SLO 설정: 주문 서비스 가용성 99.9% 목표
PUT .slo-observability.sli-v3.1/order-service-availability
{
  &quot;name&quot;: &quot;주문 서비스 가용성&quot;,
  &quot;indicator&quot;: { &quot;type&quot;: &quot;sli.apm.transactionDuration&quot;, &quot;params&quot;: { /* ... */ } },
  &quot;objective&quot;: { &quot;target&quot;: 0.999 }
}

// Synthetic Monitoring: 주문 프로세스 테스트
import { journey, step, expect } from '@elastic/synthetics';
journey('주문 프로세스 모니터링', ({ page }) =&amp;gt; {
    step('홈페이지 로드', async () =&amp;gt; { /* ... */ });
    step('상품 검색 및 장바구니 추가', async () =&amp;gt; { /* ... */ });
    step('주문 완료', async () =&amp;gt; { /* ... */ });
});&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 운영, 최적화 및 보안&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;장기적인 운영을 위해 데이터 계층화(ILM), 리소스 모니터링, 접근 제어(RBAC) 설정이 필수적이다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 15px 20px; padding: 0; list-style-type: '✔️ ';&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;데이터 계층 관리 (ILM):&lt;/b&gt; Hot-Warm-Cold-Frozen 데이터 티어를 활용하여 비용과 성능의 균형을 맞춘다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;리소스 모니터링:&lt;/b&gt; 클러스터, 인덱스, 노드의 상태를 지속적으로 모니터링하여 성능 병목을 예방한다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;역할 기반 접근 제어 (RBAC):&lt;/b&gt; 사용자 역할에 따라 데이터 접근 권한을 세분화하여 보안을 강화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-size: 24px; color: #6a1b9a; margin: 35px 0 15px; padding-bottom: 8px; border-bottom: 2px solid #e1bee7;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론 및 향후 전망&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elastic Observability는 단순히 데이터를 수집하고 시각화하는 것을 넘어, AI 기반의 자동화된 인사이트를 제공하여 복잡한 현대 시스템의 운영 방식을 근본적으로 혁신한다. LogsDB를 통한 비용 효율성, OpenTelemetry를 통한 개방성, AI Assistant를 통한 지능성을 모두 갖춘 Elastic Observability는 미래 지향적인 관찰 가능성 플랫폼의 표준을 제시한다.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로 예측 분석, 자동 복구, 엣지 컴퓨팅 지원 등 더욱 강력한 AI 통합과 자동화 기능이 추가될 것으로 기대된다. 지금 바로 Elastic Observability를 도입하여 AI 기반 인사이트로 시스템의 안정성과 성능을 극대화하길 바란다.  &lt;/p&gt;
&lt;script&gt;
        function copyCode(button) {
            const pre = button.parentElement.querySelector('pre');
            const code = pre.querySelector('code');
            const text = code.innerText;
            navigator.clipboard.writeText(text).then(() =&gt; {
                button.innerText = 'Copied!';
                setTimeout(() =&gt; { button.innerText = 'Copy'; }, 2000);
            }).catch(err =&gt; { console.error('Failed to copy: ', err); });
        }
    &lt;/script&gt;
&lt;/div&gt;</description>
      <category>기술</category>
      <category>ai assistant</category>
      <category>apm</category>
      <category>elastic observability</category>
      <category>kubernetes monitoring</category>
      <category>logsdb</category>
      <category>opentelemetry</category>
      <category>universal profiling</category>
      <category>로그</category>
      <category>메트릭</category>
      <category>트레이스</category>
      <author>스타스토리.</author>
      <guid isPermaLink="true">https://starstoryus.tistory.com/49</guid>
      <comments>https://starstoryus.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 1 Jul 2025 10:13:00 +0900</pubDate>
    </item>
  </channel>
</rss>