<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>WE</title>
    <link>https://joon-coding.tistory.com/</link>
    <description>Web Everything</description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 13:14:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SCOTTI</managingEditor>
    <item>
      <title>[메타코드 AI] 6주차 학습 일지: .NET Universe 2026 &amp;amp; 딥러닝(CNN, RNN, 추천시스템) &amp;amp; Cloudflare Zero Trust</title>
      <link>https://joon-coding.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 6주차에는 3월 12일 진행된 .NET Universe 2026 컨퍼런스에 참석하여 .NET 생태계의 AI 최신 동향을 파악했습니다. 아울러 메타코드에서는 CNN, RNN 등 핵심 딥러닝 모델과 추천 시스템의 원리를 학습했으며, 개인 포트폴리오를 위한 외부 GPU 서버 환경 구축을 위해 Cloudflare Zero Trust를 직접 세팅해보았습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. .NET Universe 2026 참관 후기: AI 시대의 .NET 방향성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 13개의 세션을 통해 .NET 개발자가 AI 시대에 어떻게 대응해야 하는지 깊이 있는 인사이트를 얻을 수 있었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;선택과 집중:&lt;/b&gt; 백엔드 관점에서 JAVA보다 C#이 익숙했기에, 새로운 언어를 배우기보다 .NET을 심도 있게 공부해 AI를 잘 활용하는 개발자가 되겠다는 방향성을 확고히 했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Agent AI의 확신:&lt;/b&gt; Visual Studio의 기능 지원과 .NET의 발전 로드맵이 명확히 'Agent AI'를 향하고 있다는 사실을 확인했습니다. 특히 MCP(Model Context Protocol) Server 지원 기능이 인상적이었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시니어의 조언:&lt;/b&gt; 10~20년 차 선배님들이 AI를 적극 도입하는 모습을 보며 자극을 받았고, &quot;주니어일수록 전체적인 서비스 운영 아키텍처에 관심을 가져라&quot;는 메가존클라우드 김유신 발표자님의 조언이 큰 힘이 되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 딥러닝 모델 핵심 정리 (CNN, RNN, Autoencoder)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;■ CNN (Convolutional Neural Network)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지의 윤곽과 패턴을 추출하여 사물을 인식하는 모델로, 분류 및 객체 탐지에 탁월합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;b&gt;작동 방식:&lt;/b&gt; 하위 레이어에서 선/각도 등 기초 특징을 추출하고, 상위 레이어에서 이를 조합해 고차원 패턴을 식별합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 기법:&lt;/b&gt; 이미지 크기를 조절하는 &lt;b&gt;Padding&lt;/b&gt;과 &lt;b&gt;Stride&lt;/b&gt;, 그리고 특징의 위치가 변해도 동일하게 인식하게 해주는 &lt;b&gt;Pooling&lt;/b&gt; 과정을 거칩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Flatten:&lt;/b&gt; 추출된 다차원 특징맵을 1차원 벡터로 변환하여 완전 연결 레이어(FC Layer)에 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;■ RNN &amp;amp; LSTM&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속적인 시계열 데이터를 처리하며 이전 시점의 출력을 기억하는 모델입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;b&gt;RNN의 한계:&lt;/b&gt; 시퀀스가 길어질수록 기울기 소실(Vanishing Gradient) 문제가 발생하여 장기 의존성 처리가 어렵습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LSTM의 해결책:&lt;/b&gt; &lt;b&gt;Cell State&lt;/b&gt;를 통해 정보를 오래 보존하며, Forget/Input/Output 게이트를 통해 어떤 정보를 잊고 기억할지 정교하게 제어합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;■&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;LSTM (Long Short-Term Memory)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN의 기울기 소실 및 폭발 문제를 극복하기 위해 고안된 구조로 셀 상태(Cell State)라는 장기 기억 장치를 도입한 것이 핵심입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Forget Gate:&lt;/b&gt; 과거의 셀 상태에서 어떤 정보를 버릴지 결정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Input Gate:&lt;/b&gt; 현재 들어온 새로운 정보 중 어떤 것을 셀 상태에 추가할지 결정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cell State Update:&lt;/b&gt; 이전 상태에서 잊을 정보는 지우고 새로운 정보를 추가하여 장기 기억을 업데이트합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Output Gate:&lt;/b&gt; 업데이트된 셀 상태를 바탕으로 어떤 정보를 은닉 상태(단기 기억)로 내보낼지 결정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;■ Autoencoder&lt;/b&gt;&lt;/h4&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 추천 시스템의 원리와 벡터화&lt;/b&gt;&lt;/h3&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;협업 필터링:&lt;/b&gt; 비슷한 취향의 사용자가 좋아한 아이템을 추천(유저 기반)하거나, 특정 아이템과 유사한 아이템을 추천(아이템 기반)합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;콘텐츠 기반 필터링:&lt;/b&gt; 아이템 자체의 메타데이터(장르, 배우 등)를 분석하여 유사한 것을 추천합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수치화 기법:&lt;/b&gt; 범주형 데이터를 위한 &lt;b&gt;원-핫 인코딩&lt;/b&gt;과 단어의 중요도를 계산하는 &lt;b&gt;TF-IDF&lt;/b&gt;를 활용해 특징 벡터를 생성하고, 코사인 유사도 등으로 거리를 측정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Cloudflare Zero Trust를 활용한 GPU 서버 구축&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트폴리오(음성 주문 시스템, 수어 학습 앱) 제작을 위해 로컬 GPU(RTX 3060)를 외부에서 안정적으로 활용할 수 있도록 세팅했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;아키텍처:&lt;/b&gt; 메인 서버는 Oracle Cloud(OCI)에 배포하고, AI 연산이 필요한 경우에만 &lt;b&gt;Cloudflare Tunnel&lt;/b&gt;을 통해 로컬 GPU 자원을 호출하는 하이브리드 구조를 채택했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;학습 성과:&lt;/b&gt; 터널링 세팅을 통해 도메인 연결 및 보안 네트워크 환경을 구축했으며, HTTP/2와 QUIC 등 최신 네트워크 이론을 실제 환경에 적용해보는 계기가 되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 세부 학습 정리 자료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세한 기술 구현 과정과 이론은 아래 개별 포스팅에 정리해 두었습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; padding: 10px;&quot;&gt;&lt;a href=&quot;https://joon-coding.tistory.com/200&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Zero Trust 실전 세팅&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; padding: 10px;&quot;&gt;&lt;a href=&quot;https://joon-coding.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Zero Trust 기술 개념 정리&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; padding: 10px;&quot;&gt;&lt;a href=&quot;https://joon-coding.tistory.com/202&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HTTP/2 다중화 이론 분석&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; padding: 10px;&quot;&gt;&lt;a href=&quot;https://joon-coding.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;QUIC 프로토콜의 특징&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/메타코드 LLM 부트캠프</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/204</guid>
      <comments>https://joon-coding.tistory.com/204#entry204comment</comments>
      <pubDate>Sat, 14 Mar 2026 15:50:38 +0900</pubDate>
    </item>
    <item>
      <title>QUIC (UDP 기반) 이론</title>
      <link>https://joon-coding.tistory.com/203</link>
      <description>&lt;style&gt;
    .quic-post {
        line-height: 1.8;
        color: #333;
        font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, system-ui, Roboto, sans-serif;
        max-width: 800px;
        margin: 0 auto;
    }
    .quic-post h2 {
        border-left: 6px solid #ff6b6b;
        padding-left: 15px;
        margin-top: 45px;
        color: #c92a2a;
        font-size: 1.6em;
    }
    .quic-post h3 {
        color: #495057;
        border-bottom: 2px solid #f1f3f5;
        padding-bottom: 8px;
        margin-top: 35px;
        font-size: 1.3em;
    }
    .quic-post p {
        margin-bottom: 18px;
    }
    .quic-post .highlight {
        background-color: #fff3bf;
        font-weight: bold;
        padding: 2px 5px;
        border-radius: 3px;
    }
    .quic-post .info-box {
        background-color: #f8f9fa;
        border: 1px solid #dee2e6;
        padding: 20px;
        margin: 25px 0;
        border-radius: 10px;
    }
    .quic-post .info-box strong {
        color: #1971c2;
        display: block;
        margin-bottom: 10px;
        font-size: 1.1em;
    }
    .quic-post table {
        width: 100%;
        border-collapse: collapse;
        margin: 25px 0;
        font-size: 0.95em;
    }
    .quic-post th, .quic-post td {
        border: 1px solid #ebedef;
        padding: 14px;
        text-align: left;
    }
    .quic-post th {
        background-color: #343a40;
        color: white;
    }
    .quic-post tr:nth-child(even) {
        background-color: #f8f9fa;
    }
    .quic-post .example-tag {
        display: inline-block;
        background-color: #e7f5ff;
        color: #1864ab;
        padding: 2px 8px;
        border-radius: 4px;
        font-size: 0.85em;
        font-weight: bold;
        margin-bottom: 10px;
    }
&lt;/style&gt;

&lt;div class=&quot;quic-post&quot;&gt;
    &lt;h1&gt;차세대 웹의 심장: QUIC(UDP 기반) 프로토콜 심층 분석&lt;/h1&gt;
    
    &lt;p&gt;기존의 TCP가 가진 수십 년 된 한계를 깨부수기 위해 등장한 &lt;strong&gt;QUIC&lt;/strong&gt;은 이제 현대 웹(HTTP/3)의 표준으로 자리 잡았습니다. 단순히 빠른 것을 넘어, 왜 QUIC이 혁신적인지 그 핵심 기술들을 자세히 살펴보겠습니다.&lt;/p&gt;

    &lt;hr&gt;

    &lt;h2&gt;1. HOLB(Head-of-Line Blocking) 해결: 독립적 스트림&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;HOLB(선두 차단)&lt;/strong&gt;는 줄 맨 앞의 패킷이 유실되면 뒤에 있는 모든 패킷이 도착했음에도 불구하고 대기해야 하는 현상을 말합니다.&lt;/p&gt;
    
    &lt;div class=&quot;info-box&quot;&gt;
        &lt;strong&gt;어떻게 해결했나요?&lt;/strong&gt;
        &lt;p&gt;TCP는 모든 데이터를 하나의 거대한 '덩어리'로 보지만, QUIC은 UDP 위에서 각 데이터를 &lt;span class=&quot;highlight&quot;&gt;독립적인 스트림&lt;/span&gt;으로 관리합니다. 한 차선(스트림)에서 사고가 나더라도 다른 차선의 차들은 멈추지 않고 목적지까지 달릴 수 있는 구조입니다.&lt;/p&gt;
    &lt;/div&gt;
    

    &lt;h2&gt;2. 연결의 초고속화: 0-RTT / 1-RTT 핸드쉐이크&lt;/h2&gt;
    &lt;p&gt;데이터 전송 전 서버와 인사를 나누는 과정인 핸드쉐이크 시간을 극적으로 단축했습니다.&lt;/p&gt;
    
    &lt;h3&gt;1-RTT (첫 번째 연결)&lt;/h3&gt;
    &lt;p&gt;TCP와 TLS 설정을 각각 하던 과거와 달리, QUIC은 이를 하나로 통합했습니다. 단 한 번의 왕복(1-RTT)만으로 연결과 암호화 설정을 모두 마칩니다.&lt;/p&gt;

    &lt;h3&gt;0-RTT (재연결)&lt;/h3&gt;
    &lt;p&gt;한 번 접속했던 서버라면 서버 정보를 기억해 두었다가, &lt;span class=&quot;highlight&quot;&gt;인사도 생략하고 첫 패킷부터 실제 데이터를 실어 보냅니다.&lt;/span&gt; 사용자 입장에서는 클릭과 동시에 데이터가 오기 시작하는 셈입니다.&lt;/p&gt;
    

    &lt;h2&gt;3. QUIC의 생성 및 식별 기준: Connection ID&lt;/h2&gt;
    &lt;p&gt;네트워크 환경이 바뀌어도 연결이 끊기지 않는 비결은 바로 연결을 정의하는 &lt;strong&gt;'기준'&lt;/strong&gt;에 있습니다.&lt;/p&gt;

    &lt;div class=&quot;example-tag&quot;&gt;핵심 차이점&lt;/div&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;기존 TCP:&lt;/strong&gt; IP 주소와 포트 번호를 기준으로 연결을 확인합니다. Wi-Fi에서 LTE로 바뀌면 IP가 변하므로 연결이 끊깁니다.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;QUIC:&lt;/strong&gt; IP와 상관없이 무작위로 생성된 고유한 &lt;span class=&quot;highlight&quot;&gt;Connection ID(CID)&lt;/span&gt;를 기준으로 합니다.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;덕분에 이동 중에 IP가 수시로 바뀌어도 사용자는 스트리밍이나 게임이 끊기는 현상을 겪지 않게 됩니다(연결 마이그레이션).&lt;/p&gt;
    

    &lt;h2&gt;4. 기술 요약 비교&lt;/h2&gt;
    &lt;table&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;비교 항목&lt;/th&gt;
                &lt;th&gt;기존 TCP (HTTP/2)&lt;/th&gt;
                &lt;th&gt;QUIC (HTTP/3)&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;기반 프로토콜&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;TCP (경직된 구조)&lt;/td&gt;
                &lt;td&gt;UDP (유연하고 가벼움)&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;HOLB 현상&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;전체 스트림 차단 발생&lt;/td&gt;
                &lt;td&gt;&lt;strong&gt;문제 스트림만 영향&lt;/strong&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;핸드쉐이크 지연&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;2~3 RTT 소요&lt;/td&gt;
                &lt;td&gt;&lt;strong&gt;0~1 RTT로 단축&lt;/strong&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;이동성 지원&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;IP 변경 시 연결 끊김&lt;/td&gt;
                &lt;td&gt;&lt;strong&gt;Connection ID로 유지&lt;/strong&gt;&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;div class=&quot;info-box&quot; style=&quot;border-left: 5px solid #1971c2;&quot;&gt;
        &lt;strong&gt;Cloudflare와 Go/Rust의 시너지&lt;/strong&gt;
        &lt;p&gt;QUIC은 복잡한 암호화와 스트림 관리가 필요해 CPU 부하가 높을 수 있습니다. Cloudflare는 &lt;strong&gt;Go와 Rust&lt;/strong&gt; 엔진을 사용해 데이터가 흐르는 찰나의 순간에만 CPU 리소스를 효율적으로 할당함으로써, QUIC의 고성능을 저비용으로 완벽하게 구현하고 있습니다.&lt;/p&gt;
    &lt;/div&gt;

    &lt;p style=&quot;text-align: center; color: #868e96; margin-top: 40px;&quot;&gt;&lt;em&gt;&quot;HTTP/2가 도로를 넓혔다면, QUIC은 신호등을 없애고 직진하게 만든 혁신입니다.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>공부/네트워크</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/203</guid>
      <comments>https://joon-coding.tistory.com/203#entry203comment</comments>
      <pubDate>Sat, 14 Mar 2026 09:21:34 +0900</pubDate>
    </item>
    <item>
      <title>HTTP/2 다중화(Multiplexing) 이론</title>
      <link>https://joon-coding.tistory.com/202</link>
      <description>&lt;style&gt;
    .tech-post {
        line-height: 1.8;
        color: #333;
        font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, system-ui, Roboto, sans-serif;
    }
    .tech-post h2 {
        border-left: 5px solid #007bff;
        padding-left: 15px;
        margin-top: 40px;
        color: #0056b3;
    }
    .tech-post h3 {
        background-color: #f1f3f5;
        padding: 10px;
        border-radius: 5px;
        margin-top: 30px;
    }
    .tech-post p {
        margin-bottom: 20px;
    }
    .tech-post table {
        width: 100%;
        border-collapse: collapse;
        margin: 20px 0;
    }
    .tech-post th, .tech-post td {
        border: 1px solid #dee2e6;
        padding: 12px;
        text-align: left;
    }
    .tech-post th {
        background-color: #f8f9fa;
        color: #333;
    }
    .tech-post .highlight {
        background-color: #fff3bf;
        font-weight: bold;
        padding: 2px 4px;
    }
    .tech-post .info-box {
        background-color: #e7f5ff;
        border-left: 4px solid #339af0;
        padding: 20px;
        margin: 20px 0;
        border-radius: 0 5px 5px 0;
    }
&lt;/style&gt;

&lt;div class=&quot;tech-post&quot;&gt;
    &lt;h1&gt;웹 성능의 혁신: HTTP/2 다중화와 QUIC 기술 완벽 정리&lt;/h1&gt;
    
    &lt;p&gt;현대의 웹 환경에서 '속도'는 사용자 경험의 핵심입니다. 오늘은 과거 웹 통신의 고질적인 문제를 해결한 &lt;strong&gt;HTTP/2 다중화(Multiplexing)&lt;/strong&gt;와 차세대 표준인 &lt;strong&gt;QUIC(UDP 기반)&lt;/strong&gt; 기술에 대해 자세히 알아보겠습니다.&lt;/p&gt;

    &lt;hr&gt;

    &lt;h2&gt;1. HTTP/2 다중화(Multiplexing): 과거의 병목을 뚫다&lt;/h2&gt;
    
    &lt;h3&gt;기존 HTTP/1.1의 문제점: HOLB (Head-of-Line Blocking)&lt;/h3&gt;
    &lt;p&gt;HTTP/1.1은 한 번에 하나의 요청만 처리할 수 있는 순차적 구조였습니다. 만약 큰 용량의 파일이 전송 중이라면, 뒤에 있는 작은 파일들은 앞 작업이 끝날 때까지 대기해야 하는 &lt;span class=&quot;highlight&quot;&gt;선두 차단(HOLB)&lt;/span&gt; 현상이 발생했습니다.&lt;/p&gt;

    &lt;h3&gt;HTTP/2의 해결책&lt;/h3&gt;
    &lt;p&gt;HTTP/2는 데이터를 텍스트가 아닌 &lt;strong&gt;바이너리 프레임(Binary Frame)&lt;/strong&gt; 단위로 쪼개어 전송합니다. 각 프레임에는 고유 ID가 부여되어 하나의 TCP 연결 안에서 여러 데이터를 뒤섞어 보낼 수 있습니다.&lt;/p&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;/ul&gt;

    &lt;h2&gt;2. QUIC (UDP 기반): TCP의 한계를 넘어서&lt;/h2&gt;
    
    &lt;p&gt;HTTP/2도 결국 TCP 기반이었기에, 패킷 하나만 유실되어도 전체 연결이 멈추는 한계가 있었습니다. 이를 해결하기 위해 구글이 제안한 것이 바로 &lt;strong&gt;QUIC&lt;/strong&gt;입니다.&lt;/p&gt;

    &lt;div class=&quot;info-box&quot;&gt;
        &lt;strong&gt;QUIC의 핵심 특징:&lt;/strong&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;0-RTT 연결:&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; Wi-Fi에서 LTE로 바뀌어도 연결이 끊기지 않습니다.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h2&gt;3. 기술 비교 및 타임라인&lt;/h2&gt;

    &lt;table&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;HTTP/2 (다중화)&lt;/th&gt;
                &lt;th&gt;QUIC (UDP 기반)&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;표준화 시기&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;2015년 (RFC 7540)&lt;/td&gt;
                &lt;td&gt;2021년 (RFC 9000)&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;기반 프로토콜&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;TCP&lt;/td&gt;
                &lt;td&gt;UDP&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;strong&gt;주요 성과&lt;/strong&gt;&lt;/td&gt;
                &lt;td&gt;동시 전송(Multiplexing) 구현&lt;/td&gt;
                &lt;td&gt;연결 지연 시간(Latency) 최소화&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;h2&gt;4. Cloudflare의 Go/Rust 엔진 리소스 할당&lt;/h2&gt;
    &lt;p&gt;Cloudflare와 같은 최신 인프라에서는 Go와 Rust로 작성된 엔진을 사용합니다. 이는 단순히 언어의 속도 때문만이 아니라, &lt;strong&gt;Cloudflare의 이벤트 기반 아키텍처(V8 Isolate)&lt;/strong&gt;와 이들 언어의 &lt;strong&gt;낮은 오버헤드&lt;/strong&gt;가 결합된 결과입니다.&lt;/p&gt;
    &lt;p&gt;덕분에 데이터가 실제로 오갈 때만 CPU 리소스를 할당하는 극도의 효율성을 보여주며, 이는 곧 비용 절감과 성능 향상으로 이어집니다.&lt;/p&gt;

    &lt;p&gt;웹 기술은 더 빠른 응답과 안정적인 연결을 향해 계속 진화하고 있습니다. 여러분의 서비스에는 어떤 기술이 적용되어 있는지 확인해 보세요!&lt;/p&gt;
&lt;/div&gt;</description>
      <category>공부/네트워크</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/202</guid>
      <comments>https://joon-coding.tistory.com/202#entry202comment</comments>
      <pubDate>Sat, 14 Mar 2026 09:20:46 +0900</pubDate>
    </item>
    <item>
      <title>Cloudflare Zero Trust 기술 심층 정리</title>
      <link>https://joon-coding.tistory.com/201</link>
      <description>&lt;div class=&quot;cloudflare-post&quot; style=&quot;font-family: 'Noto Sans KR', sans-serif; line-height: 1.8; color: #333;&quot;&gt;

    &lt;div style=&quot;background-color: #f38020; color: white; padding: 40px 20px; text-align: center; border-radius: 10px; margin-bottom: 30px;&quot;&gt;
        &lt;h1 style=&quot;margin: 0; font-size: 28px; font-weight: bold;&quot;&gt;Cloudflare Zero Trust 기술 심층 정리&lt;/h1&gt;
        &lt;p style=&quot;margin: 10px 0 0; opacity: 0.9;&quot;&gt;&quot;아무도 믿지 말고, 모든 연결을 검증하라&quot;&lt;/p&gt;
    &lt;/div&gt;

    &lt;h2 style=&quot;border-left: 5px solid #f38020; padding-left: 15px; color: #f38020; margin-top: 40px;&quot;&gt;1. 서비스 정의 및 발전&lt;/h2&gt;
    &lt;ul style=&quot;list-style-type: none; padding-left: 0;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;개념:&lt;/strong&gt; 사용자 신원과 기기 상태를 매번 확인하는 보안 모델입니다.&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;역사:&lt;/strong&gt; 2018년 Access 출시를 시작으로, 2020년 통합 SASE 플랫폼인 Cloudflare One으로 완성되었습니다.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 30px 0;&quot;&gt;

    &lt;h2 style=&quot;border-left: 5px solid #f38020; padding-left: 15px; color: #f38020;&quot;&gt;2. 핵심 기술: 아웃바운드(Outbound) 터널링&lt;/h2&gt;
    &lt;p&gt;전통적인 서버 운영과 달리 Cloudflare Tunnel은 내부에서 외부로 먼저 접속을 시도합니다.&lt;/p&gt;
    
    &lt;div style=&quot;background-color: #f9f9f9; padding: 20px; border-radius: 8px; border: 1px dashed #ccc;&quot;&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px;&quot;&gt;
            &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;원리:&lt;/strong&gt; 에이전트(cloudflared)가 외부 에지 서버를 향해 먼저 연결을 맺습니다.&lt;/li&gt;
            &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;NAT 테이블 활용:&lt;/strong&gt; 로컬 기기가 외부로 패킷을 보내면 공유기는 NAT 테이블에 연결 정보를 기록합니다.&lt;/li&gt;
            &lt;li style=&quot;margin-bottom: 0;&quot;&gt;&lt;strong&gt;포트포워딩 불필요:&lt;/strong&gt; 나간 연결에 대한 응답은 안전하다고 판단하여 자동 통과시키므로 별도의 포트 개방이 필요 없습니다.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;h2 style=&quot;border-left: 5px solid #f38020; padding-left: 15px; color: #f38020; margin-top: 40px;&quot;&gt;3. 데이터 전송 효율: HTTP/2 &amp; QUIC&lt;/h2&gt;
    &lt;p&gt;현대적인 프로토콜을 사용하여 대량의 요청을 효율적으로 처리합니다.&lt;/p&gt;
    
    &lt;table style=&quot;width: 100%; border-collapse: collapse; margin-top: 15px;&quot;&gt;
        &lt;tr style=&quot;background-color: #fff4eb;&quot;&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 12px; text-align: left;&quot;&gt;기술&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid #ddd; padding: 12px; text-align: left;&quot;&gt;특징 및 효과&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 12px; font-weight: bold;&quot;&gt;HTTP/2 Multiplexing&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 12px;&quot;&gt;하나의 터널 안에 수천 개의 가상 스트림을 생성하여 병렬 전송합니다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 12px; font-weight: bold;&quot;&gt;QUIC (UDP)&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid #ddd; padding: 12px;&quot;&gt;지연 시간을 줄이고 패킷 손실 시 해당 스트림만 영향받도록 설계되었습니다.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;

    &lt;h2 style=&quot;border-left: 5px solid #f38020; padding-left: 15px; color: #f38020; margin-top: 40px;&quot;&gt;4. 고가용성: 복수 터널(Multiple Tunnels)&lt;/h2&gt;
    &lt;p&gt;단일 연결의 취약점을 극복하기 위한 다중화 전략을 사용합니다.&lt;/p&gt;
    &lt;blockquote style=&quot;border-left: 4px solid #f38020; background: #fff8f3; margin: 15px 0; padding: 15px;&quot;&gt;
        하나의 토큰으로 여러 대의 서버에서 터널을 동시 실행할 수 있습니다. 특정 서버에 문제가 생겨도 에지 서버가 이를 즉시 감지하여 살아있는 다른 터널로 데이터를 우회시킵니다.
    &lt;/blockquote&gt;

    &lt;h2 style=&quot;border-left: 5px solid #f38020; padding-left: 15px; color: #f38020; margin-top: 40px;&quot;&gt;5. 자원 최적화 및 에지 분산&lt;/h2&gt;
    &lt;ul style=&quot;padding-left: 20px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;비동기 이벤트:&lt;/strong&gt; Go와 Rust 기반 엔진으로 실제 통신 시에만 리소스를 사용합니다.&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;Anycast 네트워크:&lt;/strong&gt; 전 세계 데이터 센터가 동일한 IP를 공유하여 가장 가까운 지점에서 처리합니다.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 40px 0;&quot;&gt;

    &lt;h2 style=&quot;text-align: center; color: #333; margin-bottom: 30px;&quot;&gt;자주 묻는 질문 (Q&amp;A)&lt;/h2&gt;
    
    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;div style=&quot;font-weight: bold; color: #f38020;&quot;&gt;Q1. 터널 연결 시 전기세나 CPU 부하가 심하지 않나요?&lt;/div&gt;
        &lt;div style=&quot;background: #f1f1f1; padding: 15px; border-radius: 5px; margin-top: 5px;&quot;&gt;
            아니요. 유휴 상태에서는 메모리 20-50MB 정도로 매우 가볍게 동작하며, 실제 데이터가 오갈 때만 자원을 할당합니다.
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;div style=&quot;font-weight: bold; color: #f38020;&quot;&gt;Q2. 이중 공유기 환경에서도 작동하나요?&lt;/div&gt;
        &lt;div style=&quot;background: #f1f1f1; padding: 15px; border-radius: 5px; margin-top: 5px;&quot;&gt;
            네, 아웃바운드 방식은 내부에서 밖으로 먼저 나가기 때문에 NAT 계층 수와 상관없이 연결이 성립됩니다.
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;div style=&quot;font-weight: bold; color: #f38020;&quot;&gt;Q3. UDP 기반 QUIC은 보안상 취약하지 않나요?&lt;/div&gt;
        &lt;div style=&quot;background: #f1f1f1; padding: 15px; border-radius: 5px; margin-top: 5px;&quot;&gt;
            오히려 더 안전합니다. TLS 1.3 암호화가 기본 내장되어 있으며 기존 TCP보다 연결 탈취가 훨씬 어렵습니다.
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;div style=&quot;font-weight: bold; color: #f38020;&quot;&gt;Q4. 무료 사용자도 여러 개의 터널을 만들 수 있나요?&lt;/div&gt;
        &lt;div style=&quot;background: #f1f1f1; padding: 15px; border-radius: 5px; margin-top: 5px;&quot;&gt;
            네, 무료 플랜에서도 다중 터널 생성이 가능하여 개인 프로젝트나 소규모 서버 운영에 충분합니다.
        &lt;/div&gt;
    &lt;/div&gt;

&lt;/div&gt;</description>
      <category>공부/네트워크</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/201</guid>
      <comments>https://joon-coding.tistory.com/201#entry201comment</comments>
      <pubDate>Sat, 14 Mar 2026 09:06:02 +0900</pubDate>
    </item>
    <item>
      <title>공유 오피스에서 로컬 GPU 서버 외부로 공유하기: Cloudflare Zero Trust + Ollama 가이드</title>
      <link>https://joon-coding.tistory.com/200</link>
      <description>&lt;div style=&quot;line-height: 1.8; font-family: 'Noto Sans KR', sans-serif; color: #333;&quot;&gt;
&lt;p style=&quot;margin-top: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;현재 작업 중인 공간은 공유 오피스로, 네트워크 제어권이 없어 &lt;b&gt;포트 포워딩(Port Forwarding)&lt;/b&gt;이 불가능한 환경이었습니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트 배포 환경인 오라클 클라우드(OCI)는 GPU가 없어 AI 모델 서빙에 한계가 있었죠.&lt;/p&gt;
&lt;p style=&quot;margin-top: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 공유기 설정 없이도 내부 자원을 외부로 연결해 주는 &lt;b&gt;Cloudflare Zero Trust&lt;/b&gt;를 활용해 보았습니다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #f1f4f9; padding: 10px; border-left: 5px solid #0051c3; margin-top: 40px;&quot; data-ke-size=&quot;size26&quot;&gt;1. 왜 Cloudflare Zero Trust인가?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;네트워크 제약:&lt;/b&gt; 공유 오피스 공용 네트워크 사용으로 인한 포트 포워딩 불가.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자원 부족:&lt;/b&gt; 오라클 클라우드 프리티어의 GPU 부재.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안성:&lt;/b&gt; 내 PC의 IP를 직접 노출하지 않고 Cloudflare의 Edge 서버를 통해 안전하게 연결.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cloudflare Tunnel(cloudflared)을 사용하면 내 컴퓨터가 클라우드플레어 서버와 먼저 연결을 맺고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 사용자는 그 서버에 접속하는 방식이라 방화벽 문제를 깔끔하게 해결할 수 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #f1f4f9; padding: 10px; border-left: 5px solid #0051c3; margin-top: 40px;&quot; data-ke-size=&quot;size26&quot;&gt;2. 구축 과정 (도메인 구매부터 터널링까지)&lt;/h2&gt;
&lt;h3 style=&quot;color: #0051c3;&quot; data-ke-size=&quot;size23&quot;&gt;Step 1: 도메인 구매 및 등록&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cloudflare를 통해 약 10달러에 &lt;code&gt;.com&lt;/code&gt; 도메인을 구매하고 대시보드에 등록했습니다. 터널링을 위해서는 관리가 용이한 전용 도메인이 필요합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #0051c3;&quot; data-ke-size=&quot;size23&quot;&gt;Step 2: cloudflared 설치 및 터널 생성&lt;/h3&gt;
&lt;div style=&quot;background-color: #282c34; color: #abb2bf; padding: 15px; border-radius: 5px; font-family: 'Courier New', monospace;&quot;&gt;# 1. 터널 로그인 및 도메인 인증&lt;br /&gt;cloudflared tunnel login&lt;br /&gt;&lt;br /&gt;# 2. 터널 생성 (이름은 자유롭게)&lt;br /&gt;cloudflared tunnel create my-ollama&lt;br /&gt;&lt;br /&gt;# 3. 터널 실행&lt;br /&gt;cloudflared tunnel run my-ollama&lt;/div&gt;
&lt;h3 style=&quot;color: #0051c3;&quot; data-ke-size=&quot;size23&quot;&gt;Step 3: Public Hostname 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Zero Trust 대시보드(Access &amp;gt; Tunnels)에서 외부에서 접속할 주소를 로컬 포트와 매핑합니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 10px 0; text-align: left;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #eee;&quot;&gt;
&lt;th style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;설정값&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;Subdomain&lt;/td&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;ollama(아무거나 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;Service Type&lt;/td&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;HTTP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;URL&lt;/td&gt;
&lt;td style=&quot;padding: 10px; border: 1px solid #ddd;&quot;&gt;localhost:11434(기본포트)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;background-color: #f1f4f9; padding: 10px; border-left: 5px solid #0051c3; margin-top: 40px;&quot; data-ke-size=&quot;size26&quot;&gt;3. 테스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결된 ollama가 정상적으로 외부에서 실행되는지 CMD로 간단히 테스트를 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773390213803&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://{yourDomain}/api/generate -d &quot;{\&quot;model\&quot;: \&quot;minimax-m2.5:cloud\&quot;, \&quot;prompt\&quot;: \&quot;터널 테스트 중이야. 응답이 오면 성공이야!\&quot;, \&quot;stream\&quot;: false}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*응답&lt;/p&gt;
&lt;pre id=&quot;code_1773390245274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{&quot;model&quot;:&quot;minimax-m2.5:cloud&quot;,&quot;remote_model&quot;:&quot;minimax-m2.5&quot;,&quot;remote_host&quot;:&quot;https://ollama.com:443&quot;,&quot;created_at&quot;:&quot;2026-03-13T08:21:12.027955341Z&quot;,&quot;response&quot;:&quot;응답을 잘 받았어요!隧 tunnel 테스트가 성공적으로 진행되고 있네요. 추가적인 도움이 필요하시면 말씀해 주세요.&quot;,&quot;thinking&quot;:&quot;The user says: \&quot;터널 테스트 중이야. 응답이 오면 성공이야!\&quot; which is Korean. It translates to: \&quot;I'm in the tunnel test. If I get a response, it's success!\&quot;\n\nThe user seems to be indicating that they are in a tunnel test (maybe network tunnel?) and that receiving a response indicates success. This is probably a test to check connectivity. So the assistant should respond acknowledging that they received the message. Should respond in Korean presumably, as the user wrote in Korean. So answer: \&quot;응답이 제대로 도착했네요! 테스트 성공입니다.\&quot; or something like \&quot;테스트 성공! 응답을 받았어요.\&quot;\n\nWe need to see if there's any policy violation. It's a simple test. There's no content requiring special handling. It's allowed. There's no disallowed content. So we can respond. There's no request for disallowed content. This is straightforward. Use Korean as the user used Korean. So respond accordingly. Maybe ask if they need anything else.\n\nWe should keep answer short and clear. Possibly ask if they need further assistance.&quot;,&quot;done&quot;:true,&quot;done_reason&quot;:&quot;stop&quot;,&quot;total_duration&quot;:4584016490,&quot;prompt_eval_count&quot;:53,&quot;eval_count&quot;:246}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 답변이 오는걸 확인하였습니다.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #fff4f4; padding: 10px; border-left: 5px solid #ff4d4f; margin-top: 40px;&quot; data-ke-size=&quot;size26&quot;&gt;3. 트러블슈팅: 403 Forbidden 에러 해결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결 후 가장 큰 문제는 외부 접근 시 발생하는 &lt;b&gt;403 에러&lt;/b&gt;였습니다. 원인은 Ollama의 기본 보안 정책이었습니다.&lt;/p&gt;
&lt;blockquote style=&quot;border-left: 5px solid #ccc; padding: 10px 20px; margin: 20px 0; background-color: #fafafa;&quot; data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;원인:&lt;/b&gt; Ollama는 기본적으로 &lt;code&gt;127.0.0.1&lt;/code&gt;(로컬) 요청만 허용합니다. 터널을 통한 외부 접속을 허용하려면 환경 변수 수정이 필수입니다.&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #d32f2f;&quot; data-ke-size=&quot;size23&quot;&gt;해결 방법 (Windows 기준)&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;시스템 환경 변수 설정:&lt;/b&gt;&lt;br /&gt;- &lt;code&gt;OLLAMA_HOST&lt;/code&gt; : &lt;code&gt;0.0.0.0&lt;/code&gt; 추가&lt;br /&gt;- &lt;code&gt;OLLAMA_ORIGINS&lt;/code&gt; : &lt;code&gt;*&lt;/code&gt; 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ollama 서비스 완전 재시작:&lt;/b&gt; 작업 표시줄 트레이에서 종료 후 다시 실행. (설정 반영까지 약간의 대기 시간이 필요할 수 있습니다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;background-color: #f1f4f9; padding: 10px; border-left: 5px solid #0051c3; margin-top: 40px;&quot; data-ke-size=&quot;size26&quot;&gt;4. 마치며: 클라우드와 로컬의 하이브리드 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법을 통해 도메인 하나만으로 내 컴퓨터의 GPU 자원을 어디서든 끌어다 쓸 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 자원을 빌려 쓰는 것을 넘어, &lt;b&gt;오라클 클라우드(메인)와 로컬 PC(연산)를 2중화&lt;/b&gt;하여 서버 안정성을 확보하는 아키텍처를 프로젝트에 적용할 수 있을 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #666; font-style: italic;&quot; data-ke-size=&quot;size16&quot;&gt;사무실의 제약 사항이 오히려 더 효율적인 개발 환경을 구축하게 만든 좋은 계기가 되었습니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>공부/네트워크</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/200</guid>
      <comments>https://joon-coding.tistory.com/200#entry200comment</comments>
      <pubDate>Fri, 13 Mar 2026 17:14:00 +0900</pubDate>
    </item>
    <item>
      <title>[메타코드 AI LLM 부트캠프] 5주차 학습 일지: 머신러닝 비지도학습, 앙상블, 차원 축소, 클래스 불균형, 이상치 탐지 및 자동화 기계학습</title>
      <link>https://joon-coding.tistory.com/199</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번 주는 미뤄두었던 5주차 머신러닝 강의를 마무리하고, 이어서 7주차 학습을 진행했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5주차에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;비지도 학습과 앙상블&lt;/b&gt;을 공부했었고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;7주차에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PyTorch 사용법과 인공신경망(Deep Learning)&lt;/b&gt;의 기초를 다루었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 비지도 학습과 군집화&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;군집화&lt;/h3&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;핵심 원리: 군집 간 분산은 최대화하고, 군집 내 분산은 최소화합니다.&lt;/li&gt;
&lt;li&gt;특징: 지도학습이 결정 경계를 찾는 것이라면, 군집화는 유사한 데이터들의 묶음을 형성하는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;2&quot; data-ke-size=&quot;size23&quot;&gt;군집화 평가 지표 요약&lt;/h3&gt;
&lt;h4 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size20&quot;&gt;외부 지표 (정답 레이블이 있는 경우)&lt;/h4&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;예측한 군집 결과가 실제 정답(Ground Truth)과 얼마나 일치하는지 비교하여 평가합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;RI (Rand Index, 란드 지수)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,1,0,0&quot;&gt;개념:&lt;/b&gt; 전체 데이터에서 가능한 모든 두 데이터의 쌍을 조사하여, 정답에서의 관계(같은 군집 여부)와 예측된 관계가 일치하는 쌍의 비율입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,1,1,0&quot;&gt;한계:&lt;/b&gt; 군집의 개수가 많아지거나 무작위로 군집을 할당하더라도, '&lt;b&gt;우연히&lt;/b&gt;' 관계가 일치하는 쌍이 발생하여 &lt;b data-index-in-node=&quot;58&quot; data-path-to-node=&quot;5,2,0&quot;&gt;점수가 실제보다 높게 부풀려지는 경향&lt;/b&gt;이 있습니다. 이로 인해 객관적인 성능 평가에 한계가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;ARI (Adjusted Rand Index, 수정 란드 지수)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,1,0,0&quot;&gt;개념:&lt;/b&gt; RI에서 '&lt;b&gt;우연히 일치할 확률&lt;/b&gt;'을 제외하여 보정한 지표입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,1,1,0&quot;&gt;특징:&lt;/b&gt; 무작위 군집화의 경우 0점 근처의 값을 가지며, 1에 가까울수록 완벽한 일치를 의미합니다. 군집화 평가에서 RI보다 더 권장되는 지표입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size20&quot;&gt;내부 지표 (정답 레이블이 없는 경우)&lt;/h4&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;데이터 자체의 구조적 특징(응집도와 분리도)을 바탕으로 군집이 잘 나누어졌는지 평가합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;실루엣 계수 (Silhouette Coefficient)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,0,0&quot;&gt;개념:&lt;/b&gt; 개별 데이터가 자신이 속한 군집 내에서는 얼마나 가깝고(응집도), 인접한 다른 군집과는 얼마나 먼지(분리도)를 계산합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,0&quot;&gt;값의 해석:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,1,0,0&quot;&gt;1에 가까울수록:&lt;/b&gt; 군집화가 매우 잘 된 상태입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,1,1,0&quot;&gt;0 근처:&lt;/b&gt; 군집 간 경계가 모호한 상태입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,1,2,0&quot;&gt;음수:&lt;/b&gt; 데이터가 엉뚱한 군집에 할당되었음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 군집화 모형 및 거리 정의&lt;/h3&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;h2 data-ke-size=&quot;size26&quot;&gt;2. 차원 축소&lt;/h2&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;차원의 저주: 차원이 증가할수록 데이터 공간의 부피가 기하급수적으로 커져 데이터 밀도가 희박해집니다. 이로 인해 모델 학습이 어려워지고 더 많은 데이터를 요구하게 됩니다.&lt;/li&gt;
&lt;li&gt;차원 축소 방법: 불필요한 변수를 아예 제거하는 변수 선택법과 기존 변수들을 조합하여 새로운 핵심 변수를 생성하는 특성 추출법이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 알고리즘&lt;/h3&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;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 모델 검증 및 교차 검증&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 과대적합이나 과소적합되지 않고, 새로운 데이터에도 잘 동작하도록 검증하는 과정입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;편향 분산 트레이드 오프&lt;/h3&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;교차 검증&lt;/h3&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;K겹 교차검증: 전체 데이터를 중복되지 않게 나누어, 반복해서 학습과 검증을 수행하고 그 평균으로 성능을 평가합니다.&lt;/li&gt;
&lt;li&gt;중첩 K겹 교차검증: 하이퍼파라미터 튜닝과 성능 평가를 분리합니다. 튜닝 과정이 최종 테스트 데이터에 영향을 주는 데이터 누수를 방지하여 모델의 진짜 일반화 성능을 측정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 앙상블&lt;/h2&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;배깅: 학습 데이터에서 복원 추출을 통해 여러 개의 데이터 셋을 만들고, 각각 모델을 학습시켜 결과를 투표나 평균으로 집계합니다. 분산을 줄여 과대적합을 방지합니다. 랜덤 포레스트가 대표적이며, 데이터뿐만 아니라 변수도 무작위로 추출하여 개별 트리 간의 상관관계를 낮춰 성능을 극대화합니다.&lt;/li&gt;
&lt;li&gt;부스팅: 이전 모델이 틀린 오차나 예측값에 가중치를 부여하여, 다음 모델이 그 단점을 보완하도록 순차적으로 학습합니다. 편향을 줄여 예측 정확도를 높입니다.&lt;/li&gt;
&lt;li&gt;스태킹: 원본 데이터로 여러 기본 모델들을 학습시켜 예측값을 뽑아내고, 이 예측값들을 다시 새로운 입력 데이터로 삼아 메타 모델을 학습시켜 최종 예측을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 클래스 불균형&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 문제에서 정상 데이터는 매우 많고 이상 데이터는 매우 적은 경우 발생합니다. 이때는 단순 정확도가 아닌 정밀도와 재현율을 함께 고려하는 F1 스코어를 사용해야 합니다. F1 스코어는 정밀도와 재현율의 곱을 정밀도와 재현율의 합으로 나눈 뒤 2를 곱하여 계산합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&lt;/h3&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;SMOTE: 소수 클래스 데이터 간의 거리를 계산해 그 선상에 가상의 데이터를 생성하는 오버샘플링 기법입니다. 겹치는 영역에 데이터가 생성될 수 있는 단점이 있어, 이를 보완한 기법들이 함께 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 이상치 탐지 및 자동화 기계학습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;이상치 탐지는 불균형이 극심하고 소수 클래스의 명확한 패턴을 규정하기 어려울 때 정상 데이터의 경계를 학습하여 벗어나는 것을 찾습니다. 분류는 두 클래스 모두 충분한 데이터와 명확한 특징이 있을 때 사용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아이솔레이션 포레스트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;데이터 전처리, 특성 추출, 알고리즘 선택, 하이퍼파라미터 튜닝 등 기계학습 모델 개발의 전체 과정을 자동화하여 효율성과 접근성을 높이는 기술입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. 인공신경망과 딥러닝 (ANN &amp;amp; DNN)&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;퍼셉트론과 다층 퍼셉트론 (MLP)&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가장 기본적인 형태인 퍼셉트론에서 시작해, 은닉층(Hidden Layer)이 추가된 다층 퍼셉트론으로 확장되는 과정을 배웠습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;활성화 함수 (Activation Function):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;신경망에 비선형성을 주입하여 복잡한 문제를 풀 수 있게 해주었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출력층의 해석:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;회귀 문제에서는 주로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예측값&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그대로를 출력하지만, 분류 문제에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;확률값&lt;/b&gt;으로 해석하여 클래스를 결정하곤 했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;가중치 업데이트와 역전파 (Backpropagation)&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&lt;b&gt;경사하강법 (Gradient Descent):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수의 최솟값을 찾기 위해 기울기를 따라 이동하는 최적화 알고리즘이었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;역전파:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;출력층에서 입력층 방향으로 오차 정보를 전달하며 각 레이어의 가중치를 효율적으로 업데이트하는 방식이었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최적화 알고리즘 (Optimizer):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Local Minimum에 빠지는 문제를 해결하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Adam, Nadam, AdaDelta&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 발전된 알고리즘을 사용했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;DNN (Deep Neural Network)의 특징&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;은닉층이 깊은 신경망인 DNN은 강력한 성능을 내지만 여러 문제점도 안고 있었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기울기 소실 (Gradient Vanishing):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;층이 깊어질수록 기울기가 0에 수렴해 학습이 안 되는 문제인데, 이를 해결하기 위해 ReLU 함수나 배치 정규화를 활용했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;과적합 방지:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;드랍아웃(Dropout), 조기 종료(Early Stopping), 데이터 증강 등의 기법을 적용했었습니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/199</guid>
      <comments>https://joon-coding.tistory.com/199#entry199comment</comments>
      <pubDate>Tue, 10 Mar 2026 19:07:18 +0900</pubDate>
    </item>
    <item>
      <title>[메타코드 AI LLM 부트캠프] 4주차 학습 일지: 6주차 딥러닝 과제 &amp;amp; 4주차 머신러닝 분류 학습</title>
      <link>https://joon-coding.tistory.com/198</link>
      <description>&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 주간 학습 회고&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주는 지난주에 이어 6주 차 과제물 제출과 밀려있던 4주 차 강의 학습을 진행습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 장례 일정이 있어 하루 정도 학습을 진행하지 못했고 과제물의 양도 생각보다 많아 완료까지 4일이 걸렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나씩 차근차근 해결하며 과제를 무사히 제출한 뒤 남은 금 토 일요일 동안 4주 차 강의를 수강했습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4주 차 강의는 회귀분석과 머신러닝의 지도학습 분류 문제 등을 다루었으며 분량이 약 20시간에 달해 걱정이 앞습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이론 실습 심화이론 실습으로 이어지는 반복적인 커리큘럼 덕분에 공통된 내용을 여러 번 점검하며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수월하게 이해도를 높일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 머신러닝 분류 심화 부분에서 아쉬움이 남았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론과 수학적 증명에만 치우친 설명 탓에 개발자 입장에서는 이것이 왜 필요한지 어떻게 쓰이는지에 대한 맥락을 잡기 어려웠다. 예를 들어 하이퍼플레인을 설명할 때 p 차원에서의 하이퍼플레인은 p-1 차원에서의 평평한 어핀 공간이라는 수학적 정의와 수식부터 쏟아져 나와 당혹스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 하이퍼플레인은 차원에 따라 데이터를 분류하는 기준선으로 직관적으로 이해하고 넘어갔으며 깊은 수학적 증명은 추후 필요할 때 다시 찾아보는 방향으로 학습을 마무리했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 회귀분석 핵심 정리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관계와 상관계수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;상관관계:&lt;/b&gt; 독립변수와 종속변수가 함께 변하는 경향성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인과관계:&lt;/b&gt; 독립변수가 원인이 되어 종속변수라는 결과를 일으키는 명확한 관계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스피어만 상관계수:&lt;/b&gt; 데이터의 순위를 기반으로 비선형적이거나 서열적인 관계 측정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;피어슨 상관계수:&lt;/b&gt; 두 변수 간의 선형적인 관계 강도 측정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;회귀 분석의 기초&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;회귀분석:&lt;/b&gt; 독립변수를 통해 종속변수를 예측하거나 관계를 모델링하는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최소제곱법:&lt;/b&gt; 예측선과 실제값 사이의 잔차 제곱합을 최소로 만들어 최적의 가중치를 찾는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오차:&lt;/b&gt; 모집단에서 실제값과 이론적인 회귀선 사이의 차이&lt;/li&gt;
&lt;li&gt;&lt;b&gt;잔차:&lt;/b&gt; 표본 데이터에서 실제값과 모델이 예측한 값의 차이&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결정계수:&lt;/b&gt; 모델의 설명력을 나타내며 전체 변동 중 모델이 설명하는 변동의 비율&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;규제 모델&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;벌점 회귀:&lt;/b&gt; 가중치의 크기를 제한하여 모델의 과적합을 방지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;L1 규제 라쏘:&lt;/b&gt; 중요하지 않은 변수의 가중치를 0으로 만들어 변수 선택 효과가 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;L2 규제 릿지:&lt;/b&gt; 가중치를 전체적으로 작게 만들지만 0으로 만들지는 않아 다중공선성 해결에 유리함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 머신러닝 및 분류 모델 핵심 정리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;머신러닝 기초 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방법론 유형:&lt;/b&gt; 지도학습 비지도학습 강화학습&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지도학습 모델:&lt;/b&gt; KNN 의사결정나무 SVM 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;분류 문제 평가 지표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;혼동행렬:&lt;/b&gt; 예측값과 실제값을 4가지 기준으로 비교하는 지표&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정확도:&lt;/b&gt; 전체 예측 중 실제로 맞춘 비율&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오분류율:&lt;/b&gt; 전체 예측 중 틀린 비율&lt;/li&gt;
&lt;li&gt;&lt;b&gt;민감도 재현율:&lt;/b&gt; 실제 참인 데이터 중 모델이 참으로 예측한 비율&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특이도:&lt;/b&gt; 실제 거짓인 데이터 중 모델이 거짓으로 예측한 비율&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ROC 곡선:&lt;/b&gt; 모든 임계값을 고려한 분류 성능 지표&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AUC:&lt;/b&gt; ROC 곡선 아래의 면적을 수치화한 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변수 표준화와 정규화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;표준화:&lt;/b&gt; 변수를 평균에서 빼고 표준편차로 나누어 평균 0 표준편차 1로 만드는 과정 주로 거리 기반 알고리즘에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정규화:&lt;/b&gt; 최솟값과 최댓값을 이용해 데이터를 0과 1 사이의 범위로 압축하는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 알고리즘 요약&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;KNN:&lt;/b&gt; 새로운 데이터와 가장 가까운 K개의 이웃을 찾아 다수결로 분류하는 알고리즘&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SVM:&lt;/b&gt; 분류 기준선인 하이퍼플레인을 긋고 서포트 벡터와의 마진을 최대화하여 과적합을 방지하는 알고리즘&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커널 트릭:&lt;/b&gt; 비선형 데이터를 분류하기 위해 적은 연산량으로 차원을 높여 계산하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의사결정나무:&lt;/b&gt; 불순도를 줄이는 방향으로 여러 개의 경계선을 만들어 데이터를 분류하며 이진 분류와 다중 분류에 모두 사용됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;나이브 베이즈:&lt;/b&gt; 변수들이 서로 독립적이라는 가정하에 베이즈 정리를 활용하여 새로운 증거 데이터 가 주어졌을 때 가설의 확률을 업데이트하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로지스틱 회귀와 확률 추정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;로지스틱 회귀:&lt;/b&gt; 분류 문제에 대해 시그모이드 함수를 사용하여 0 또는 1 사이의 확률값으로 결과를 출력하는 모델&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오즈:&lt;/b&gt; 실패 확률 대비 성공 확률의 비율&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최대우도추정법 MLE:&lt;/b&gt; 관측된 결과가 일어날 가능성을 가장 높게 만드는 최적의 파라미터를 찾는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최대사후확률 MAP:&lt;/b&gt; 사람의 사전 지식과 관측 데이터를 조합하여 최종 결과를 추정하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>공부/메타코드 LLM 부트캠프</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/198</guid>
      <comments>https://joon-coding.tistory.com/198#entry198comment</comments>
      <pubDate>Mon, 9 Mar 2026 13:47:08 +0900</pubDate>
    </item>
    <item>
      <title>[메타코드 AI LLM 부트캠프] 3주차 학습 일지: 정보처리기사 필기 합격  &amp;amp; 머신러닝 수요예측 프로젝트와 딥러닝 입문</title>
      <link>https://joon-coding.tistory.com/197</link>
      <description>&lt;div style=&quot;font-family: 'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: auto;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2주차에 이어 3주차 월요일부터 수요일까지는 정보처리기사 필기시험 준비에 매진했습니다.&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;주말(토, 일)을 이용해 AI LLM 6주차 학습을 달렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 순서대로라면 4주차를 들어야 하지만 6주차로 건너뛴 이유가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습이 '이론 -&amp;gt; 실습'이 반복되는 구조 속에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6주차가 머신러닝을 최종적으로 마무리하고 딥러닝으로 넘어가는 중요한 기점이었기 때문입니다.&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;h3 style=&quot;background-color: #f4f7f6; padding: 10px; border-left: 5px solid #0056b3; margin-top: 30px;&quot; data-ke-size=&quot;size23&quot;&gt;1. 실전 머신러닝: 수요 예측 모델 프로젝트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 실습 프로젝트의 핵심 목표는 &lt;b&gt;이커머스 도메인에서 특정 농산물의 특정 일자별 가격(원/kg)을 예측하는 것&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝의 전체 프로세스인 &lt;code&gt;목표설정 &amp;rarr; 데이터 전처리 &amp;rarr; EDA(탐색적 데이터 분석) &amp;rarr; 학습 &amp;rarr; 예측&lt;/code&gt;의 과정을 학습을 통해 직접 경험해 보았습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;데이터 전처리 (Data Preprocessing)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특정 농산물 필터링:&lt;/b&gt; 원본 데이터에 존재하는 11개 품종 중 예측 대상인 7개(배추, 무, 마늘, 양파, 대파, 건고추, 깻잎) 데이터만 필터링하여 분석 대상을 명확히 했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;불필요한 데이터 제거:&lt;/b&gt; 기본 정보에는 거래량과 가격이 혼재되어 있었으나, 목적에 맞게 불필요한 '거래량(kg)' 정보는 과감히 제거했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;영문 변수화 및 함수화:&lt;/b&gt; 한글 컬럼명은 인코딩이나 폰트 에러를 유발할 수 있어 영문(cabbage, radish, garlic 등)으로 매핑하여 변경했습니다또한 동일한 전처리 작업은 &lt;code&gt;load_data_set&lt;/code&gt; 함수로 모듈화하여 작업 편의성과 재사용성을 극대화했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;EDA (탐색적 데이터 분석)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 모델링 전 데이터의 이해도를 높이고 이상치(Anomaly)를 파악하기 위해 EDA를 수행했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 타입(Type) 확인 및 시간순 정렬을 통해 시계열 데이터 흐름을 점검했습니다.&lt;/li&gt;
&lt;li&gt;기초 기술 통계량(describe)과 결측치(Null) 여부를 파악해 데이터의 정상 여부를 점검했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 시각화:&lt;/b&gt; 일자별 가격 변동 트렌드를 시각화하고, 변동성이 큰 품목의 경우 이동평균(Rolling Mean)을 적용해 노이즈를 줄여가며 패턴을 확인했습니다.&lt;/li&gt;
&lt;li&gt;상관관계 분석을 통해 '배추와 무'처럼 서로 상관계수가 높은 품종의 패턴을 파악했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;모델 학습 및 피처 엔지니어링&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;알고리즘 모델 (Prophet) vs 머신러닝 모델:&lt;/b&gt; 페이스북에서 만든 Prophet 같은 시계열 알고리즘은 피처(Feature) 데이터가 없어도 자기상관성을 기반으로 간편하게 훈련 및 예측 테스트가 가능해 머신러닝 대비 공수가 적습니다. 반면 머신러닝 모델(LGBM, XGBoost 등)은 피처의 질이 모델 성능을 좌우합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Feature Engineering:&lt;/b&gt; 날짜 정보로부터 연, 월, 주말 여부, 공휴일 여부를 파생 변수로 추출하고, 시계열 특성을 반영하기 위해 과거 7일, 14일 전의 데이터(Lag Feature)와 이동평균/표준편차를 모델의 Input으로 추가했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예측 결과값 사후처리 (Post-processing):&lt;/b&gt; 비즈니스 도메인 지식을 활용해 모델 성능(MdAPE 지표)을 대폭 높였습니다. 예를 들어, 시장 거래가 쉬는 일요일이나 공휴일의 예측값을 강제로 '0'으로 치환하는 후처리를 진행해 오차율을 낮췄습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;모델 성능 개선 및 대시보드 구축&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 모델의 한계를 극복하기 위해 &lt;b&gt;Voting Regressor(Average Model)&lt;/b&gt;를 사용하여 모델 간의 분산을 줄이고 안정적인 예측을 만들었습니다.&lt;/li&gt;
&lt;li&gt;나아가 여러 베이스 모델(RandomForest, LGBM, XGBoost)의 예측 결과를 새로운 피처로 삼아 최종 메타 모델로 예측하는 &lt;b&gt;Stacking Regressor&lt;/b&gt;를 도입하여 성능을 고도화했습니다.&lt;/li&gt;
&lt;li&gt;마지막으로 &lt;b&gt;Streamlit&lt;/b&gt;을 활용해 개발한 예측 모델을 인터랙티브한 웹 대시보드로 배포(Deploy)하는 파이프라인까지 성공적으로 마무리했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #f4f7f6; padding: 10px; border-left: 5px solid #0056b3; margin-top: 40px;&quot; data-ke-size=&quot;size23&quot;&gt;2. 딥러닝 입문 (Introduction to Deep Learning)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트를 마무리한 뒤, 본격적으로 딥러닝 기초 이론 학습에 들어갔습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;AI, 머신러닝, 딥러닝의 차이점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인공지능(AI):&lt;/b&gt; 사람의 지능적인 일을 기계가 대신해 주는 가장 포괄적인 개념입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;머신러닝(ML):&lt;/b&gt; 프로그래머가 모든 규칙을 정해주지 않아도, 데이터로부터 모델 스스로 규칙을 찾아내는 인공지능의 한 분야입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;딥러닝(DL):&lt;/b&gt; 뇌 신경망을 모방한 인공신경망(Artificial Neural Network) 구조를 기반으로 방대한 데이터를 학습하고 복잡한 패턴을 판단하는 머신러닝의 하위 분야입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #0056b3; margin-top: 20px;&quot; data-ke-size=&quot;size20&quot;&gt;핵심 이론 요약&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;텐서(Tensor):&lt;/b&gt; PyTorch 딥러닝 환경에서 데이터를 담고 다차원 행렬 연산을 수행하는 가장 기본적인 데이터 구조입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;손실 함수 (Loss Function):&lt;/b&gt; 모델의 예측값과 실제 정답의 차이(Error)를 계산합니다. 학습의 최종 목적은 이 Loss Function을 최소화하는 파라미터(가중치)를 찾는 것입니다. 회귀 예측에는 주로 &lt;b&gt;MSE(Mean Squared Error)&lt;/b&gt; 를, 다중 분류 예측에는 Softmax 확률을 활용한 &lt;b&gt;Cross Entropy&lt;/b&gt;를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;경사하강법 (Gradient Descent):&lt;/b&gt; Loss 함수의 최소점(Minimum)을 찾기 위해 현재 위치의 기울기(Gradient)를 미분으로 구하고, 학습률(Learning Rate)만큼 반대 방향으로 스텝을 이동하여 가중치를 최적화하는 기법입니다. 속도와 보폭을 유동적으로 조절하기 위해 RMSProp, Momentum, Adam 등 발전된 Optimizer에 대해서도 학습했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역전파 알고리즘 (Backpropagation):&lt;/b&gt; 순전파(Feed Forward)로 얻어낸 예측값의 Loss를 바탕으로 가중치를 업데이트할 때, 출력층부터 입력층으로 역방향으로 진행하며 미분값(Gradient)을 계산하는 방법론입니다. &lt;b&gt;Chain Rule(연쇄 법칙)&lt;/b&gt;을 사용하여 각 은닉층의 파라미터를 효율적으로 업데이트하는 원리를 배웠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr style=&quot;border: 0; border-top: 1px solid #ccc; margin: 30px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #333;&quot; data-ke-size=&quot;size23&quot;&gt;마무리하며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론과 실습이 적절히 조화된 알찬 3주차였습니다! 정보처리기사 자격증 합격이라는 좋은 소식과 함께,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실전 시계열 데이터를 다루며 '피처 엔지니어링'과 '사후 처리(Post-processing)'가 모델 성능에 얼마나 큰 영향을 미치는지 알 수 있었습니다. 앞으로 이어질 딥러닝 심화 과정과 파이토치(PyTorch) 실습이 더욱 기대됩니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>공부/메타코드 LLM 부트캠프</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/197</guid>
      <comments>https://joon-coding.tistory.com/197#entry197comment</comments>
      <pubDate>Sun, 1 Mar 2026 20:26:29 +0900</pubDate>
    </item>
    <item>
      <title>[메타코드 AI LLM 부트캠프] 2주차 학습 일지: 데이터 분석의 기초, 머신러닝 입문까지</title>
      <link>https://joon-coding.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주는 2주 차 학습 기간이었지만, 지난주에 1~2주 차 분량을 몰아서 학습했기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커리큘럼상 &lt;b&gt;3주 차 내용&lt;/b&gt;에 해당하는 &lt;b&gt;데이터의 이해, 확률과 통계, 머신러닝 모델링의 기초&lt;/b&gt;를 집중적으로 학습했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 다음 주 예정된 정보처리기사 시험 대비 학습도 병행하며 바쁜 한 주를 보냈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난주에는 수식 이해가 어려워 개념 위주로 넘어갔던 부분들이 있었는데, 이번 주는 실습 코드와 이론 요약이 잘 어우러져 있어 데이터 분석의 전체적인 흐름을 잡는 데 큰 도움이 되었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 데이터의 이해: 분석의 관점을 넓히다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1, 2주 차 과정에서 Pandas나 시각화 라이브러리 사용법과 같은 '도구' 사용법에 집중했다면, 이번 파트에서는 &lt;b&gt;데이터 분석을 어떤 관점으로 바라보고 진행해야 하는지&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;b&gt;데이터의 정의와 구조:&lt;/b&gt; 데이터는 단순히 숫자의 나열이 아니라 과거의 흔적이며, 의사결정을 위한 재료입니다. 데이터는 구조에 따라 &lt;b&gt;정형(Structured)&lt;/b&gt;, &lt;b&gt;반정형&lt;/b&gt;, &lt;b&gt;비정형(Unstructured)&lt;/b&gt;으로 나뉘며, 속성에 따라 정성적(범주형) 데이터와 정량적(수치형) 데이터로 구분된다는 점을 명확히 했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 전처리 (Preprocessing):&lt;/b&gt; &quot;Garbage in, Garbage out&quot;이라는 말처럼 데이터 품질이 분석 결과에 직결된다는 점을 배웠습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;결측치(Missing Value):&lt;/b&gt; 단순 제거뿐만 아니라 k-NN 등을 활용한 대체 방법 학습.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상치(Outlier):&lt;/b&gt; Box plot이나 IQR을 이용한 식별뿐만 아니라, &lt;b&gt;LoF(Local Outlier Factor)&lt;/b&gt;와 같이 주변 밀도를 고려한 탐지 방법 학습.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 랭글링(Data Wrangling):&lt;/b&gt; 원시 데이터를 분석 가능한 형태로 만드는 과정으로, 탐색, 구조화, 정제, 보완 등의 6단계를 거친다는 점을 체계적으로 정리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;탐색적 데이터 분석(EDA):&lt;/b&gt; 단순히 평균이나 분산을 구하는 것을 넘어, &quot;데이터가 무엇을 말하려 하는지&quot;를 파악하기 위해 데이터를 시각화하고 뜯어보는 과정의 중요성을 배웠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 확률과 통계: 이론에서 실습으로&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난주 학습했던 확률과 통계 이론이 요약 정리되어 있었고, 무엇보다 파이썬 실습 코드를 통해 실제 데이터에 어떻게 적용하는지 배울 수 있어 유익했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;모집단과 표본:&lt;/b&gt; 전수 조사가 불가능한 현실에서 표본을 통해 모집단을 &lt;b&gt;추론(Inference)&lt;/b&gt;하는 과정을 이해했습니다. 특히 표본 추출 시 발생할 수 있는 편향(Bias) 문제와 이를 해결하기 위한 다양한 추출법(단순 임의, 층화, 계통 추출 등)을 다뤘습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확률 분포:&lt;/b&gt; 데이터가 특정 패턴(분포)을 따른다고 가정할 때 논리적인 추정이 가능해짐을 배웠습니다. 특히 정규분포와 표준 정규분포(Z-score)를 이용해 특정 값이 나타날 확률을 계산하는 실습을 진행했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추정과 검정:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;추정:&lt;/b&gt; 점 추정과 구간 추정(신뢰 구간)의 차이를 이해하고, 신뢰 수준 95%의 의미(반복 샘플링 시 모수를 포함할 확률)를 명확히 했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가설 검정:&lt;/b&gt; 귀무가설(H0)과 대립가설(H1)을 설정하고, &lt;b&gt;p-value(유의 확률)&lt;/b&gt;를 통해 가설을 기각할지 채택할지를 판단하는 과정을 익혔습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;T-test &amp;amp; ANOVA:&lt;/b&gt; 두 집단 간의 평균 비교(T-test)와 세 개 이상 집단 간의 차이 검정(ANOVA)을 실습하며, 데이터의 그룹 간 차이를 통계적으로 입증하는 방법을 학습했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 머신러닝 모델링의 기초: 원리와 튜닝&lt;/h3&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;&lt;b&gt;머신러닝의 사상:&lt;/b&gt; 머신러닝은 데이터를 통해 알고리즘을 학습시켜 모델을 생성하는 과정입니다. 이는 마치 줄기세포가 분화하여 장기가 되는 것과 유사하며, 단순한 규칙들의 상호작용이 놀라운 성능(창발성)을 발휘한다는 개념이 인상 깊었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의사결정 나무 (Decision Tree):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;'스무고개'와 유사한 방식으로, 데이터의 불순도(Impurity, 엔트로피, 지니 계수 등)가 낮아지는 방향으로 데이터를 분할하며 학습합니다.&lt;/li&gt;
&lt;li&gt;해석이 용이하다는 장점이 있지만, 너무 깊게 학습하면 노이즈까지 학습하는 &lt;b&gt;과적합(Overfitting)&lt;/b&gt; 문제가 발생할 수 있음을 확인했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;앙상블 (Ensemble) 기법:&lt;/b&gt; 단일 모델의 한계를 극복하기 위해 여러 모델을 합치는 기법입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Bagging:&lt;/b&gt; 데이터를 복원 추출(Bootstrap)하여 여러 모델을 병렬로 학습시키고 결과를 합치는 방식 (예: Random Forest).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Boosting:&lt;/b&gt; 이전 모델이 틀린 오차(Residual)에 가중치를 두어 순차적으로 학습하며 성능을 높이는 방식 (예: XGBoost, Gradient Boosting).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하이퍼파라미터 튜닝 &amp;amp; XAI:&lt;/b&gt; 모델의 성능을 최적화하기 위해 Grid-Search 등을 통해 최적의 옵션(하이퍼파라미터)을 찾는 방법을 실습했습니다. 또한, 모델이 왜 그런 예측을 했는지 설명하는 &lt;b&gt;XAI(설명 가능한 AI)&lt;/b&gt;의 개념과 Feature Importance, SHAP 등을 통해 변수 중요도를 파악하는 법도 배웠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 학습 총평&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주는 데이터 분석의 &lt;b&gt;'Why(왜 분석하는가)'&lt;/b&gt;와 &lt;b&gt;'How(어떻게 모델링하는가)'&lt;/b&gt;를 연결하는 중요한 주간이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 이해 파트는 기존에 배웠던 내용과 중복되어 수월했지만, 머신러닝 파트에서는 모델의 작동 원리와 하이퍼파라미터 튜닝, 그리고 앙상블 기법으로 이어지는 흐름을 잡는 것이 핵심이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 주는 정보처리기사 시험 준비와 함께 4주차 학습 분량을 학습할 예정입니다.&lt;/p&gt;</description>
      <category>공부/메타코드 LLM 부트캠프</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/196</guid>
      <comments>https://joon-coding.tistory.com/196#entry196comment</comments>
      <pubDate>Wed, 18 Feb 2026 21:39:53 +0900</pubDate>
    </item>
    <item>
      <title>[메타코드 AI LLM 부트캠프] 1주차 학습 일지: 수학과 통계, 그리고 데이터 분석 입문</title>
      <link>https://joon-coding.tistory.com/195</link>
      <description>&lt;blockquote style=&quot;border-left: 5px solid #eaeaea; padding-left: 15px; background-color: #f9f9f9; padding: 15px; margin-bottom: 20px;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이번 주차 학습 요약&lt;/b&gt;&lt;br /&gt;- 학습 기간: 2월 둘째 주 (2월 초 퇴사 후 본격적인 전업 학습 시작)&lt;br /&gt;- 핵심 목표: 밀린 학습량 소화 및 기초 수학/통계 뼈대 세우기&lt;br /&gt;- 주요 파트: 고등수학/선형대수 기초, Pandas 전처리, 시각화, 통계 입문&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 자체는 1월 둘째 주부터 시작했지만, 퇴사 일정으로 인해 본격적인 몰입은 2월 둘째 주인 이번 주부터 시작되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안은 과제 제출 위주로 부분 학습을 하다 보니 진도가 많이 밀려있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇보다 AI 응용 개발의 뼈대가 되는 고등 수학과 선형대수에 대한 이해도가 낮아, 진도를 무작정 빼기보다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분의 기초부터 다시 다잡기로 했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 학습의 첫 단추: 고등 수학과 선형대수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 부딪힌 난관은 수학이었습니다. 당장 모든 것을 깊게 파고들기보다는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트캠프 초반 1~2주 차 진도를 따라가기 위해 꼭 필요한 기초 체력을 기르는 데 집중했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;학습 채널:&lt;/b&gt; 유튜브 채널 '혁펜하임'과 '3blue1brown'을 활용했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;학습 전략 (이틀 단기 집중):&lt;/b&gt; 선형대수는 주차별로 필요한 양이 다르기 때문에 당장 필요한 수준까지만 학습 범위를 좁혔습니다. 통계 이론의 핵심 개념을 직관적으로 이해하고, 복잡한 수식에 눈을 익숙하게 만드는 것을 최우선 목표로 삼았습니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 기초 데이터 분석: 코드 연습부터 실무 응용까지&lt;/h2&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;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 전처리 (Pandas):&lt;/b&gt; &lt;code&gt;pd.read_csv&lt;/code&gt;를 활용한 데이터 불러오기 및 데이터 타입 이해부터 시작했습니다. 결측치(NA) 처리, 컬럼 변경 및 삭제, 인덱싱과 필터링을 다루었으며, 데이터 병합(Combining), 그룹화(Grouping), 피벗(Pivot) 등 전처리의 뼈대를 잡았습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 시각화:&lt;/b&gt; Bar, Line, Scatter, Pie, Histogram 등 다양한 차트 시각화 방법을 배웠습니다. 특히 축 업데이트나 수직선, 주석 추가 등을 통해 차트의 디테일을 다듬는 방법이 유익했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마케팅 데이터 분석 실무 연습:&lt;/b&gt; 기여도(Attribution), 전환 기간(Conversion window) 등 마케팅 지표를 직접 정의해 보았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 이번 주차에 학습한 내용을 바탕으로 구성해 본 데이터 전처리 및 시각화 기본 예제입니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import pandas as pd
import plotly.express as px

# 1. 데이터 불러오기 및 결측치 처리
df = pd.read_csv('marketing_data.csv')
df = df.dropna(subset=['conversion_rate'])

# 2. Grouping을 활용한 캠페인별 평균 전환율 계산
grouped_df = df.groupby('campaign_type')['conversion_rate'].mean().reset_index()

# 3. Plotly를 활용한 데이터 시각화 (Bar chart)
fig = px.bar(
    grouped_df, 
    x='campaign_type', 
    y='conversion_rate', 
    title='캠페인 종류별 평균 전환율'
)

# 4. 차트 디테일 추가 (목표 전환율 수직선)
fig.add_hline(y=5.0, line_dash=&quot;dash&quot;, line_color=&quot;red&quot;, annotation_text=&quot;목표 전환율(5%)&quot;)
fig.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 통계 입문: 낯선 이론을 실무 코드로 연결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주차의 가장 큰 산이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강사님께서 중심, 산포, 형태 등 기초 통계량부터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일원/이원 분산 분석(ANOVA), 회귀 분석, 각종 확률 분포(정규, 카이제곱, t분포, F분포 등)와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설 검정 절차를 최대한 쉽게 풀어서 설명해 주셨습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 가장 답답했던 점은 '이 복잡한 이론이 실제 실무에서 어떻게 쓰이는가?'를 당장 확인할 수 없다는 것이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 AI를 곁에 두고 적극적으로 질문하며 돌파구를 찾았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 이론으로만 배우던 조건부 확률 수식이나 가설 검정 개념들이 파이썬 코드로 어떻게 구현되는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 눈으로 확인하며 학습을 보완했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 독립표본 t-검정을 파이썬 &lt;code&gt;scipy&lt;/code&gt; 라이브러리로 구현해 본 예제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 수식 없이도 함수 하나로 유의확률(p-value)을 도출할 수 있다는 점이 흥미로웠습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from scipy import stats

# 두 마케팅 그룹 간의 구매액 비교 (독립표본 t-검정)
group_a_sales = [120, 135, 122, 140, 128] # 기존 마케팅 전략
group_b_sales = [145, 150, 142, 155, 148] # 신규 마케팅 전략

# t-statistic과 p-value 계산
t_stat, p_value = stats.ttest_ind(group_a_sales, group_b_sales)

print(f&quot;P-value: {p_value:.4f}&quot;)

if p_value &amp;lt; 0.05:
    print(&quot;두 그룹 간 유의미한 매출 차이가 존재합니다. (귀무가설 기각)&quot;)
else:
    print(&quot;두 그룹 간 유의미한 매출 차이가 없습니다. (귀무가설 채택)&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;나만의 통계 학습법:&lt;/b&gt; 통계 이론 강의를 수강한 뒤, 이해가 안 가는 부분은 AI에게 &quot;이 이론이 실무 코드로 어떻게 적용돼? 예시를 보여줘&quot;라고 질문했습니다. 이후 출력된 코드를 직접 보며 실무에서의 활용 방식과 동작 원리를 파악하는 식으로 학습을 진행했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1주차 마무리 회고&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밀린 진도를 빼느라 정신없는 한 주였지만, 수학과 통계라는 막막했던 벽을 '개념 이해'와 '코드 적용'이라는 두 가지 무기로 조금씩 허물어가는 느낌이 듭니다. 남은 부트캠프 기간도 이 학습 템포를 유지하며 탄탄하게 기본기를 다져보겠습니다.&lt;/p&gt;</description>
      <category>공부/메타코드 LLM 부트캠프</category>
      <author>SCOTTI</author>
      <guid isPermaLink="true">https://joon-coding.tistory.com/195</guid>
      <comments>https://joon-coding.tistory.com/195#entry195comment</comments>
      <pubDate>Sat, 14 Feb 2026 18:50:00 +0900</pubDate>
    </item>
  </channel>
</rss>