<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>my_yeahjinly</title>
        <link>https://velog.io/</link>
        <description>안녕하세요, 코딩과 잡다한 얘기도 좋아해요.</description>
        <lastBuildDate>Fri, 02 Jan 2026 13:57:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>my_yeahjinly</title>
            <url>https://velog.velcdn.com/images/my_yeahjinly_log/profile/bd2fca21-fa02-410f-b0a1-4174dcfca188/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. my_yeahjinly. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/my_yeahjinly_log" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[일오갓생 Day10] 나의 방향설정 :  나는 누구인가 ]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day10-%ED%9A%8C%EA%B3%A0-%EB%B0%8F-%EB%B0%A9%ED%96%A5%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day10-%ED%9A%8C%EA%B3%A0-%EB%B0%8F-%EB%B0%A9%ED%96%A5%EC%84%A4%EC%A0%95</guid>
            <pubDate>Fri, 02 Jan 2026 13:57:44 GMT</pubDate>
            <description><![CDATA[<p>안녕하십니까
일오갓생 Day10의 마지막 여정까지 끝까지 완주하였다.
이런 나한테 잘했다고 축하하고 싶다.</p>
<p>2025년 12월 24일부터 2026년 1월 2일까지, 딱 열 번. 하루에 한번 “오늘의 일오갓생(15분갓생) 글 써야지~” 라고 벨로그를 매일 들어가서 글을 쓴 내가 조금 웃기고, 조금 대견하기도 하다. SQL 기초로 시작해서, 책 이야기, 웹 서비스 구조, AI 헬스케어 역량, 의료데이터, 그리고 프론트엔드 HTML/CSS까지. 나름 한 방향으로 이어진 10일치 일기 내지 로그를 쌓았다는 사실이 단번에 눈에 들어온다. 맨날 글 쓰는거.. 내가 처음 벨로그 쓰기 시작했을때 다짐했던 마음이기도 했는데 이렇게까지 정성을 들이고 갓생의 컨셉에 맞게 글을 쓰다보니 꽤나 재미있다는 마음이 들었다. 매일 글 읽어주시고 댓글 써주신 분들 모두 감사합니다 🙇🏻‍♀️ 그리고 자주 찾아와 주시는 분들까지 이 글을 읽으시는 모든 분들께 무한한 감사를 드립니다.</p>
<p>그런 의미로 오늘은 내가 지금 어디까지 왔는지 회고하는 에세이 형식으로 가보겠읍니다.
​
​
​
​</p>
<h1 id="오프닝--10일의-여행-🌄">오프닝 : 10일의 여행 🌄</h1>
<p>​</p>
<h2 id="day1--day3--시작의-방향을-잡다">Day1 ~ Day3 : 시작의 방향을 잡다</h2>
<p>​
<strong>Day1</strong>은 일오갓생 챌린지의 포문을 열며 SQL 기초랑 TIL을 쓰며그냥 오늘 배운 것을 기억하며 버리지 말자는 마음으로 시작했는데, 지금 보니 이때 이미 AI헬스케어부트캠프에서 배우는 걸 의료데이터 공부기록 남기고, 취업 로그랑 연결해서 기록하는 방향으로 잡혀 있었던 것 같다.
​
​
<strong>Day2</strong>는 부욱(book) 
크리스마스날에는 책 이야기로 나의 세계관을 확장시켜 나갔다. 공부 얘기만 하지 않고, 내가 뭘 읽고 생각하는 사람인지까지 같이 보여준 덕분에, 이 시리즈가 그냥 과제 정리가 아니라 “컬럼월드”답게 조금은 입체적인 기록이 된 것 같다.
​
​
<strong>Day3</strong>에서는 웹 서비스와 데이터베이스를 묶어서 본격적으로 서비스 구조 + 데이터를 같이 바라보기 시작했다. 크리스마스 다음 날, 어제의 추억은 가슴에, 오늘의 구조는 벨로그에 저장한다는 말로 시작했던 걸 떠올리면, 그때부터 이미 삶 = 데이터 로그라는 내 세계관이 살짝 드러나 있었던 것 같다.
​
​</p>
<h2 id="day4--day5--ai-헬스케어-개발자라는-정체성">Day4 ~ Day5 : AI 헬스케어 개발자라는 정체성</h2>
<p>​
<strong>Day4</strong>는 이 시리즈에서 처음으로 AI 헬스케어 개발자가 되기 위한 역량을 정면으로 꺼낸 날이다. 파이썬, 전처리, 시각화, 머신러닝·딥러닝, 선형대수와 미적분 같은 수학, 그리고 의료 도메인까지, 부트캠프에서 경험한 것들을 한 번에 정리하면서 “내가 실제로 뭘 할 줄 알고, 뭐가 아직 부족한지”를 꽤 솔직하게 적어 두었다. 이 글 덕분에 컬럼월드는 더 이상 단순히 공부 노트가 아니라, AI 헬스케어 개발자로 성장하는 과정을 보여주는 로그로 성격이 바뀌기 시작했다.
​
​
<strong>Day5</strong>는 분위기가 확 달라진, 약간 진지하고 묵직한 날이었다. 좋은 의료데이터가 무엇인지, 숫자 뒤에 있는 환자를 상상하는 연습이 왜 필요한지, 이상치를 지우기 전에 한 번 더 망설이게 된 이유를 길게 풀어냈다. “내가 만지는 건 결국 사람 이야기다”라는 문장을 써 놓고 나서, 이후에 의료데이터를 열어볼 때마다 진짜로 손이 한 번 더 멈추기 시작했다는 게, 이 10일 동안 생긴 가장 큰 변화 중 하나인 것 같다.
​
​</p>
<h2 id="day6--day9--프론트엔드와-2026-맞이하기">Day6 ~ Day9 : 프론트엔드와 2026 맞이하기</h2>
<p>​
<strong>Day6</strong>부터 <strong>Day9</strong>까지는 HTML, CSS, DOM 같은 프론트엔드 기초 개념들을 두 편으로 나눠 정리하면서, AI 헬스케어 개발자 = 데이터만 보는 사람이 아니라 그 데이터들을 어떻게 보여줄 것인지 고민해 보는 쪽으로 시선이 옮겨졌다.
태그, 구조, 스타일을 하나하나 해부하면서도, 이걸 나중에 어떤 헬스케어 서비스 화면에 녹여낼지 상상해보기도 했다.
​
​
​</p>
<h1 id="10일이-말해-주는-나">10일이 말해 주는 나</h1>
<p>돌아보면, 이 10일이라는 기간이 거창한 기간은 아니지만, 내 방향성을 꽤 선명하게 드러내 준 시간이었다.
​
일오갓생 Day 시리즈는 여기서 마무리하지만, 아마 내 벨로그의 일상은 이 10일을 기점으로 조금은 달라질 것 같다. 앞으로는
​
헬스케어 프로젝트를 직접 해보며 쌓는 삽질 로그(?),</p>
<p>의료데이터를 전처리할 때마다 부딪히는 윤리적 고민,</p>
<p>HTML/CSS 위에 진짜 헬스케어 서비스를 하나씩 올려보는 과정</p>
<p>을 더 자주, 더 솔직하게 적어보려고 한다. 언젠가 일오갓생 Day10 회고를 했던 이때를 다시 읽으면서, 지금의 고민이 너무 애송이처럼 귀엽게 느껴질 정도로 멀리 와 있기를, 그래서 또 한 번 웃으면서 새로운 시리즈를 시작하는 나였으면 좋겠습니다.</p>
<p>으하하하 이것으로 나의 회고는 끝! 일오갓생 시리즈도 정말 끝! 그렇다고 벨로그 안쓰는거 아님! 계속 <strong><em>킵고잉 할 예정</em></strong>  🤠 🐴</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day10] HTML/CSS (flexbox, 반응형 디자인 등),  회고]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day10</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day10</guid>
            <pubDate>Fri, 02 Jan 2026 13:46:31 GMT</pubDate>
            <description><![CDATA[<h2 id="1-position--요소의-배치-기준-정하기">1. Position : 요소의 배치 기준 정하기</h2>
<p>​
position이란
요소를 어디에, 무엇을 기준으로 배치할지 결정합니다. 기본 배치 흐름을 벗어나거나 조정할 때 필수적으로 사용됩니다.
​
​</p>
<p>개념 : *<em>top, left, right, bottom *</em>속성과 함께 사용하여 위치를 세밀하게 조정합니다.</p>
<p>위에서(top) 얼마 떨어져! 왼쪽(left), 오른쪽(right)으로 얼마 떨어져! 밑으로(bottom) 얼마 떨어지랑게!
이렇게 위 왼오 아래 세부적으로 조정할수도 있지만 내가 보고 있는 화면을 기준으로 위치 조정을 할 수도 있습니다.
​
​</p>
<ul>
<li><strong>relative (상대 위치):</strong></li>
</ul>
<p>요소의 원래 위치를 기준으로 이동합니다.
즉, 원래 있어야 할 자리를 기준점으로 top, left로 살짝 밀어 놓아 배치하는 것입니다.
이동하더라도 다른 요소들의 배치에 영향을 주지 않습니다.
문서 흐름에서는 여전히 <strong>제자리</strong>가 되는 것으로 의미합니다.
<strong>레이아웃</strong> 상에서 차지하는 공간은 그대로라서, 다른 요소 입장에서는 <em><strong>쟤는 여전히 원래 그 자리에 있는 것처럼</strong></em>  취급됩니다.
​
​</p>
<ul>
<li><strong>absolute (절대 위치):</strong></li>
</ul>
<p>absolute를 쓰면, 레이아웃에서 쏙 빠져나와 내가 기준을 정해 그에 대해서 위치를 설정한 값으로 배치가 됩니다. </p>
<p>그리고 CSS에서 조상–부모–자식이라는 말이 나오게 되는데 그 이유는 HTML 요소들이 <strong>트리 구조(계층 구조)</strong>로 쌓이기 때문입니다.</p>
<p>body (조상)
└── div (부모)
​   └── p (자식)
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ └── span (자식)</p>
<p>그래서 어쨋거나 절대 위치의 어디 기준으로 할지를 먼저 정해야합니다. 이때 기준은 다음과 같이 세웁니다.</p>
<ol>
<li><p>가장 가까운 조상 중에서 position: relative / absolute / fixed가 설정된 요소입니다.</p>
</li>
<li><p>그런 조상이 하나도 없으면, 화면 최상단 쪽(보통 body나 뷰포트)을 기준으로 삼습니다.
​</p>
</li>
</ol>
<p>그래서 실무에서는 헷갈리지 않으려고, <strong>보통 부모에 릴레이티브(relative) 주고, 자식에게 앱솔루트(absolute)를 준다</strong> 라고 얘기한다 합니다~!
​
​</p>
<ul>
<li><strong>fixed (고정 위치):</strong></li>
</ul>
<p><strong>뷰포트(Viewport, 브라우저 화면)</strong>를 기준으로 고정됩니다.
페이지를 스크롤해도 항상 같은 위치에 노출되어야 할때 사용합니다.
​
​
​</p>
<h2 id="2-flexbox--유연한-박스">2. Flexbox : 유연한 박스</h2>
<p>여러 박스를 가로 또는 세로로 유연하게 배치하기 위한 레이아웃 입니다.</p>
<p>부모 요소에 <strong>display: flex;</strong> 를 선언하면 자식 요소들이 자동으로 <strong>Flex Item</strong>이 됩니다.</p>
<p>이게 무슨 말이냐,,!
예시를 들어보자면 저희 물류 센터가보면 택배들을 이동시켜주는 컨테이너가 있잖아요. 그 컨테이너처럼 박스들을 줄 맞춰 세우는 전용 모드를 Flexbox라고 이해하시면 됩니다.</p>
<p><strong>부모</strong>에 <strong>display: flex;</strong>를 켜면 → 부모는 박스들을 줄 세우는 관리자(Flex 컨테이너)가 되고,</p>
<p>그 안의 <strong>자식들</strong> → <strong>줄 서는 대상(Flex 아이템)</strong>이 되어서, 가로/세로/정렬/간격을 유연하게 조절할 수 있게 됩니다.</p>
<p>예제로 간단히 살펴보면</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/274fec71-65fa-475e-a38c-83b446a40de9/image.png" alt=""></p>
<p>실행하면 다음과 같이 나옵니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/eaae0c75-ef2a-432d-bcd8-7a5c06a6eb76/image.png" alt=""></p>
<p>큰 화면에 컨테이너 위에 박스있는 것처럼 보이지 않나요ㅎ,,
​
​
​</p>
<h2 id="3-반응형-디자인-responsive-design--어떤-화면에서도-알잘딱">3. 반응형 디자인 (Responsive Design) : 어떤 화면에서도 알잘딱</h2>
<p>사용자의 기기(데스크톱, 태블릿, 모바일)나 화면 크기에 따라 레이아웃이 자연스럽게 변하도록 만드는 디자인 방식입니다.</p>
<p>고정된 px 단위 대신 환경에 따라 변하는 단위를 사용합니다.
상대적인 기준을 하므로 반응형 디자인이 가능합니다.</p>
<ul>
<li><p>** % ** : 부모 요소의 크기를 기준으로 하는 백분율 단위</p>
</li>
<li><p><strong>vw</strong> / <strong>vh</strong> : 뷰포트의 너비(Width)와 높이(Height)를 기준으로 하는 단위</p>
</li>
</ul>
<ul>
<li><strong>rem</strong> : 최상위 요소(html)의 폰트 크기를 기준으로 하는 상대 단위</li>
</ul>
<p>그리고 어떤 스타일을 어느때 적용하라는 규칙도 적용 가능합니다.</p>
<ul>
<li>📱 조건부 스타일 : Media Query
화면이 이 조건일 때, 이 스타일을 적용</li>
</ul>
<p>예시)
<strong>@media (max-width: 600px) { ... }</strong>
는 화면 너비가 600px 이하일 때 내부 스타일을 적용합니다.
코드는 style 안에 쓰면 됩니당</p>
<p>이에 대한 활용처는 모바일 화면에서 가로로 배치된 메뉴(flex-direction: row)를 세로로(column) 쌓이도록 변경하도록 할때 사용됩니다.</p>
<p>이런 프론트엔드는 화면에 어떻게 보여줄지 꾸밈의 정도라고 생각이 된다. 그래서 요즘 빠르게 변화하고 진화중인 생성형 AI를 통한 도움을 받을 수 있다.
​
그래서 난 이 부트캠프를 하기 전에는 GPT나 Gemini를 잘 쓰지 않았고, 만약 쓴다고 한들 무료 버전으로 쓰고 있다가 생성형 AI에 관해서 책을 권유해주셔서 문득 궁금해져서 추천받은 책을 읽으러 갔었다. 제목은 &quot;아는 만큼 보이는 AI&quot;라는 책이다.
재미있게 훌훌읽어서 한 2시간?도 안되서 다 읽었던 것 같다.
​
이렇게 빨리 읽을 수 있었던건 아마 수학과 코딩에 깊게 모르는 일반인/비개발자도 AI를 기술에 휘둘리지 않고 이해하고 쓰게끔 돕는 교양형 입문서이기에 그럴수 있었지 않았을까
​
챗봇이나 이미지·영상 생성, 단백질 구조 예측, 추천 시스템 등 요즘 AI가 쓰이는 대표적인 사례들을 먼저 보여주고, 그 뒤에 AI가 대략 어떻게 돌아가는지, 어떤 한계와 위험이 있는지 설명하는 구조로 되어 있어. 무조건 이해하면서 봐야지~ 보다는 아 이러한 사례에 대해서 구조적으로 어떻게 돌아가는지 대강 틀이 잡혔다. 
​
특히 여러 사례들을 보면서 인상 깊었던 부분이 있었다.
바로 챗GPT의 환각 현상에 관한 유명한 일화를 얘기한 부분이다.
그 일화는 바로 &#39;세종대왕의 맥북 프로 던짐 사건&#39;에 대해서 챗GPT가 얘기를 해준다는 것이다!! 그것도 실제 있었던 역사적 사건인 양 아는 척하며 답한다는 내용이 유명해져서 밈으로도 되었다고 한다.
이걸 보고선 난 순간 피식 😏 속으로 웃어버렸다.</p>
<p>혹시나 지금도 이 환각 현상을 볼 수 있나 방금 챗GPT 무료님에게 가서 물어보았다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/0c8806bd-e2a3-45e0-870e-0632499fd0ac/image.png" alt=""></p>
<p>하지만 지금은 환각이라는걸 인지하고 이렇게 재미없게 말해버린다능,,</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bfaa18f6-c0be-45fc-8208-ba7501d85a37/image.png" alt="">
[출처 : &quot;아는 만큼 보이는 AI&quot; 책의 페이지 142]</p>
<p>그냥 좀 황당하게 웃겨서 찍어보았습니다.. 이 멍텅구리한 모습을 이젠 못보다니,, 좀 아쉽구만 크흡</p>
<p>어쨋거나 저쨋거나 GPT도 이렇게 발전하는데! 그에 맞춰서 나도 열심히 발전하도록 새해에 정신 다 잡고! 해보겠습니다.
​
​
이상 오늘의 수업 정리와 회고였습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day9] 프론트엔드 첫걸음- HTML,CSS의 기초 개념 2]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day9-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EC%B2%AB%EA%B1%B8%EC%9D%8C-HTMLCSS%EC%9D%98-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90-2</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day9-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EC%B2%AB%EA%B1%B8%EC%9D%8C-HTMLCSS%EC%9D%98-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90-2</guid>
            <pubDate>Thu, 01 Jan 2026 14:51:43 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 
드디어 2026년 병오년이 찾아왔습니다. 다들 연휴에 잘 쉬고 계시는 중이신가요??
저는 잠깐 밥먹으러 나갔다가 들어왔는데 날씨가 엄청 추운 것도 모자라서 칼바람까지 불어 덜덜덜 떨면서 돌아다녔습니다. 오늘 떡국 한그릇 드셨을까요!??
본가에 있으니 밥을 두둑히 먹고 또 과일까지 계속 먹으니 배가 터지기 직전까지 먹고서는 제 배를 보고선 후딱 자제력 모드 on 할려구요..
붉은 말의 해의 첫 날 답게 제가 지금 먹고 있는 음식들도 붉은 색을 띄고 있더라구요</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/6c66cdb1-69e7-4ea3-ba34-13c9599fbda8/image.png" alt=""></p>
<p>글쓰면서 이것만 먹고! 오늘 과일은 (<em>조금의 간식은 흐린눈~</em>) 끝하면서 저번에 배운 것에 이어서 HTML/CSS 기초 개념의 두번째 시간을 가져보도록 하겠습니다.</p>
<p>오늘의 키워드</p>
<ol>
<li>CSS 박스 모델 : 프론트 엔드 화면는 박스로 경계 📦 🫥</li>
<li>스타일 및 외부 자원 : 👾 <em>폰트</em> 내 마음대로 바꾸기</li>
<li>레이아웃과 출력 특성</li>
</ol>
<h1 id="1-css-박스-모델--프론트-엔드-화면는-박스로-경계-📦-🫥">1. CSS 박스 모델 : 프론트 엔드 화면는 박스로 경계 📦 🫥</h1>
<p>CSS 박스 모델 (Box Model)
모든 HTML 요소는 사각형의 &#39;박스&#39; 형태로 취급됩니다. 이 구조를 이해하는 것이 레이아웃의 시작입니다. 사진으로 보면 다음과 같습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/a3988cec-9387-4041-946c-4b60b610ecd9/image.png" alt=""></p>
<p>콘텐츠를 중심으로 안쪽 여백(Padding), 테두리(Border), 바깥쪽 여백(Margin)이 감싸고 있는 구조입니다. 이와 관련된 개념은 4가지 정도 됩니다.</p>
<ol>
<li><p>Content: 글자나 이미지가 들어가는 실제 영역을 말합니다.</p>
</li>
<li><p>Padding: 테두리(Border)와 내용(Content) 사이의 안쪽 여백을 조절하여 요소 내부의 답답함을 해소하고, 가독성을 높이기 위해 존재합니다. Padding이 커지면 박스의 크기도 커집니다.</p>
</li>
<li><p>Border: 박스의 테두리를 나타내며 두께나 스타일, 색상 지정이 가능합니다.</p>
</li>
<li><p>Margin: 테두리 밖의 바깥쪽 여백으로 다른 요소와의 거리를 조절하기 위해 존재합니다. 즉 Padding과 유사한 점을 가지고 있습니다. Border를 중심으로 안쪽은 Padding이, 바깥쪽은 Margin이 크기 조절을 하며 형태를 더 고급스럽게 만들 수 있습니다. 여백이 적절히 배치된 디자인은 정보의 우선순위를 명확하게 하고, 시각적으로 안정감을 줍니다.</p>
</li>
</ol>
<h3 id="css-박스-모델-코드">CSS 박스 모델 코드</h3>
<p>.box {
  width: 200px; -----&gt; /* 너비 <em>/
  padding: 20px; -----&gt; /</em> 안쪽 여백 <em>/
  border: 5px solid black; -----&gt; /</em> 테두리 <em>/
  margin: 50px;    -----&gt; /</em> 바깥쪽 여백 */
}</p>
<h1 id="2-스타일-및-외부-파일--👾--폰트--내-마음대로-바꾸기">2. 스타일 및 외부 파일 : 👾,  <em>폰트</em>  내 마음대로 바꾸기</h1>
<h2 id="스타일-및-외부-파일---폰트는-font-family-코드-사용하기">스타일 및 외부 파일 - 폰트는 font-family 코드 사용하기</h2>
<p>font-family는 font 하나만 있는게 아니라 여러개 설정해서 대체 글꼴을 지정합니다. 
그럼 이런 생각을 해볼 수 있습니다. 그냥.. 폰트 하나로 통일하면 안되나,,? 그게 더 깔꼼해 보이자나!! 라고 생각이 들겁니다(<em>제가 그래요ㅎ</em>)
.
.</p>
<p>예를 들어서 HTML에서 폰트 불러오기를 해보겠습니다.
먼저, HTML의 <head> 태그 안에 구글 폰트 서버에서 폰트를 가져오는 코드를 넣습니다. (&#39;Single Day&#39;라는 폰트 하나만 사용)</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bf56e144-56d5-40d4-a0fe-d85cafb6ab17/image.png" alt=""></p>
<p>CSS에서 사용하기
이제 불러온 폰트 이름을 font-family 뒤에 딱 하나만 적어주면 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/31f5bd5d-da46-4bd2-8044-0f01d6ff0124/image.png" alt=""></p>
<p>  이렇게 구글 폰트 서버에 폰트 하나만 가져오는 코드를 실행하는게 어찌보면 &quot;사용자 컴퓨터에 있든 없든 무조건 이 폰트 하나만 나오게 하고 싶다&quot;라는 뜻이기도 합니다. 이렇게 웹에서 받아오는 폰트를 &quot;웹 폰트&quot;라고도 합니다.
  근데 만약 사용자가 인터넷이 불안정한 곳에 있어서 인터넷 연결이 끊기기라도 한다면.. 
<strong>혹시나 웹 폰트를 못 받아오면?</strong>
<strong>글자가 아예 안 보이거나, 브라우저 기본 폰트(보통 명조체)가 튀어나옵니다.</strong></p>
<p> 그래서 폰트 하나만 쓰고 싶더라도, 최소한의 <strong>보험(Fallback)</strong>을 들어주는 것이 좋습니다.</p>
<p>  <img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/1e03c3bc-4443-45ab-b149-d50f1d2d033e/image.png" alt="">
브라우저는 왼쪽부터 차례대로 확인하기에</p>
<p><strong>나눔고딕</strong> : 오, 이 컴퓨터에 나눔고딕이 있나? 있으면 이걸로 보여줘야지!</p>
<p><strong>Arial</strong> : 어? 나눔고딕이 없네? 그럼 대신 Arial이 있는지 찾아보자.</p>
<p><strong>sans-serif</strong> : Arial도 없다고? 알겠어. 그럼 이 컴퓨터에 있는 고딕 계열(sans-serif) 폰트 중 아무거나 골라서 보여줄게. 이거시 최종 보험입니다.</p>
<p>맨 마지막에 적는 sans-serif나 serif는 특정 폰트 이름이 아니라 <strong>폰트의 종류(묶음)</strong>를 말합니다.</p>
<ul>
<li><p>sans-serif : 고딕체처럼 삐침이 없고 깔끔한 글꼴 모음 (모던하고 읽기 편함)</p>
</li>
<li><p>serif : 바탕체처럼 글자 끝에 삐침이 있는 장식적인 글꼴 모음 (약간 격식 있는 느낌)</p>
</li>
</ul>
<p><strong>TIP!!!</strong>
<strong>웹 폰트(Google Fonts 등)</strong>를 사용하면 사용자의 컴퓨터에 폰트가 없어도 인터넷에서 실시간으로 다운로드해 보여줄 수 있습니다. 하지만 이 경우에도 네트워크 오류를 대비해 마지막엔 꼭 sans-serif 같은 보험을 들어주는 것이 좋습니다.  </p>
<p>사용자의 컴퓨터에 폰트가 없을 경우를 대비해 <strong>Fallback(대체 폰트)</strong>을 설정하는 것이 관례입니다. font-family: &quot;나눔고딕&quot;, Arial, sans-serif;</p>
<h2 id="스타일-및-외부-파일--👾">스타일 및 외부 파일 : 👾</h2>
<p>아이콘도 웹 화면에 보이게 만들 수 있습니다.
보통 Font Awesome이나 Google Symbols 같은 라이브러리를 사용합니다.
저는 Font Awesome를 이용해서 간단한 아이콘을 만들어 보도록 하겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/1315a583-a8f4-403c-bd36-1f3dee0df46a/image.png" alt=""></p>
<p>  이 코드를 실행하면 다음과 같은 화면이 나옵니다.(귀염뽐짝)</p>
<p>  <img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/1a13d549-33b3-4dc8-abc0-ae95491be467/image.png" alt=""></p>
<h2 id="스타일-및-외부-파일--외부-스타일-시트-external-css">스타일 및 외부 파일 : 외부 스타일 시트 (External CSS)</h2>
<p>HTML 내부에 쓰는 것보다 관리하기 편하도록 별도의 .css 파일을 만들어 연결합니다. 예시를 들면 이렇게 head 안에 link로 연결해서 사용합니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/fc8ba136-4fc2-45b8-89ae-acd8c28c4b01/image.png" alt=""></p>
<p>외부 스타일 시트를 사용하는 이유는 <strong>관리가 편하고 효율적</strong>이기 때문입니다. 비유해보자면 모든 요리 기구에 사용 설명서를 일일이 붙여두는(하나의 파일로 CSS적인 요소들 관리) 대신 별도의 <strong>주방 매뉴얼 책자</strong>를 한 권 만들어 관리하는 것과 같습니다.</p>
<p>이 외부 스타일 시트를 사용하면 이점이 있습니다.</p>
<ol>
<li><p>유지보수의 편리함 (한 번에 다 바꾸기)
만약 웹사이트에 페이지가 100장인데, 모든 제목의 색상을 빨강에서 파랑으로 바꿔야 한다고 가정해 보도록 하겠습니다.
근데 그 코드가 HTML 안에 스타일이 있다면..? 100개의 파일을 다 열어서 일일이 수정해야 합니다. (daaam 지옥의 시작...)
but, 외부 CSS를 사용한다면 style.css 파일 하나만 수정하면 100장의 페이지가 동시에 바뀝니다.</p>
</li>
<li><p>코드의 가독성 (HTML은 구조만, CSS는 디자인만)
HTML 파일 안에 디자인 코드까지 섞여 있으면 코드가 수천 줄로 늘어나 가독성이 떨어집니다. 외부 CSS를 쓰면 HTML은 웹사이트의 <strong>구조(뼈대)</strong>에만 집중할 수 있어 코드가 훨씬 깔끔해집니다.</p>
</li>
<li><p>웹사이트 로딩 속도 향상 (캐싱)
사용자가 웹사이트의 첫 페이지를 방문할 때 브라우저는 외부 CSS 파일을 다운로드하여 저장(캐싱)해 둡니다. 그 후 다른 페이지로 이동할 때는 이미 저장된 CSS 파일을 재사용하기 때문에, 페이지를 새로 읽어오는 속도가 훨씬 빨라집니다.</p>
</li>
</ol>
<p>💡 요약하자면?</p>
<p><strong>수정할 때</strong> ---&gt; 한 곳만 고치면 끝!</p>
<p><strong>볼 때</strong> ---&gt; 코드가 깨끗해서 한눈에 들어옴!</p>
<p><strong>속도</strong> ---&gt; 사용자가 느끼기에 더 빠름!</p>
<h2 id="3-레이아웃과-출력-특성">3. 레이아웃과 출력 특성</h2>
<ul>
<li>레이아웃 (Layout)</li>
</ul>
<p>레이아웃이란  <strong>화면 어디에, 어떻게 배치하는가?</strong> 에 대한 전체적인 설계를 말합니다.</p>
<p>배치와 구조: Block 요소들을 쌓아서 메뉴를 만들고, Inline-block을 이용해 상품 이미지를 가로로 나열하는 등 전체적인 판을 짜는 행위입니다.</p>
<p>비유를 하자면 성격이 다른 사람들을 모아서 적재적소에 배치해 팀을 꾸리는 설계도에 해당합니다.
.
.
.</p>
<ul>
<li>출력 특성 (Display Property)</li>
</ul>
<p>출력 특성이란 <strong>이 요소가 화면에 어떤 성질로 나타나는가?</strong> 에 대한 고유의 성질을 말합니다.</p>
<p>이 태그가 Block인지, Inline인지 결정되어 있는 상태입니다. 여기서 display 속성은 
  바로 출력 특성을 결정하는 도구입니다.</p>
<p>비유를 해보자면 세상에는 두 종류의 부품과 마법 지팡이가 있다고 해봅시다.</p>
<p>Block(레고 블록): 이 부품은 덩치가 커서 무조건 한 줄을 혼자 다 써요. 옆에 다른 블록을 놓으려고 해도 &quot;저뤼 가!!!!&quot; 하고 밀어내서 다음 블록은 아래에 쌓아야 하죠</p>
<p>Inline(글자 스티커): 이 부품은 아주 작고 얇아요. 그래서 옆으로 나란히 착착 붙일 수 있어요. 자기가 적힌 글자만큼만 자리를 차지합니다.</p>
<p>여기서 display라는 마법 지팡이가 등장합니다.
 <strong>레고 블록(Block)아, 너 이제부터 스티커(Inline)처럼 행동해!</strong> 라고 주문을 걸면, 덩치 큰 블록도 옆으로 나란히 설 수 있게 성격이 바뀌는 거예요.</p>
<p>근데 처음부터 성격을 정할때 잘 하면 되지 왜 성격을 바꿔서 레이아웃을 잡나요?</p>
<ul>
<li>가끔 이런 문제가 생겨요. 나는 글자 스티커(Inline) 3개를 나란히 붙이고 싶은데, 이 스티커들은 너무 작아서 가로/세로 길이를 내 마음대로 조절할 수가 없네?</li>
</ul>
<p>그럴 때 마법(display: inline-block)을 부립니다. *<em>스티커들아! 너희 성격은 그대로 해서 옆으로 나란히 서되, 몸집은 레고 블록처럼 내가 정해주는 대로 커져라 뿅! 🧚🏻 🧚🏻‍♀️ 🧚🏻‍♂️ *</em></p>
<p>그러면 우리는 <strong>옆으로 나란히 있으면서도 크기가 큼직큼직한 예쁜 메뉴 버튼(레이아웃)</strong>을 만들 수 있게 되는 겁니다.
.
.
.</p>
<p>코드로 살짝,, 봐보겠습니다. (이것만 하면 끝!!)
이 코드를 실행하면 왜 우리가 굳이 성격을 바꿔서 사용하는지 바로 무릎을 탁 치게 되실 거예요!  
먼저 head 부분에는 레고 블록, 글자 스티커, 마법의 스티커 3가지로 나누어 적어둡니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/8e444817-fa0a-454e-a8d9-036560c6a968/image.png" alt=""></p>
<p> body부분에는 이렇게 적어 줍니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f79fcde0-11d7-45b5-80e3-5c1872253b6d/image.png" alt=""></p>
<p>그 다음 실행을 해보면,,?
 <img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f3f5d560-fac8-4d88-9273-830811bbfa40/image.png" alt=""></p>
<p>  요로콩 볼 수 있습니다. 😳 🫢 🫣</p>
<p> 이렇게 기본 HTML/CSS는 여기서 마무리 하도록 하겠습니다..
 긴 글을 읽으신 모든 분들께 무한한 감사를 드립니다. 우리 모두 수고했다..</p>
<p>  아 저의 TALKTALK TIME을 가져볼려고 하는데요
  원래 이 HTML/CSS 내용을 정리를 오늘 하겠다는 생각을 못하고,
  어떤 주제로 글을 쓸까 생각하다가 자문을 구한 분의 조언을 받아들일려고 했습니다. 제가 읽었던 책에 관한 리뷰를 해보면 좋을 것 같은데 어떻느냐 라고 얘기해주셔서 너무 좋은 생각이다 생각하고 저녁 먹고 돌아와서 글을 쓸려니까 갑자기 순식간에 스쳐지나간 생각이 있었습니다. 프론트앤드 관련해서 내용을 정리하는 것...
그래서 조금만 쓰고 책 리뷰 해야징~ 했는데 이렇게 오래 걸리고(거의 2시간 30분 넘게 걸림) 양이 많을 줄 몰랐습니다..... 흑
저의 조언을 해주신 그분한테 감사인사를 드립니다. 그분은 바로바로 ✋🏻 지수온니 🤚🏻
저의 책 리뷰는 &quot;아는 만큼 보이는 AI&quot;를 할 예정입니다. 내일 기대해 주십쇼
내일이 드디어 일오갓생 10일 프로젝트의 마지막 남이네요.
마지막 주제에 대한 소스를 주신 덕분에 내일은 수월하게 글을 쓸 것 같습니다. 다음 편을 기대해 주세요!! 그렇다고 너무 기대하진 마셔요!!
  -Thanks to &quot;갓디듀&quot; 🫶🏼- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day8] 올해를 마무리 지으며 26년 맞이하기]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day8-HTMLCSS-%EC%98%AC%ED%95%B4%EB%A5%BC-%EB%A7%88%EB%AC%B4%EB%A6%AC-%EC%A7%80%EC%9C%BC%EB%A9%B0-26%EB%85%84-%EB%A7%9E%EC%9D%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day8-HTMLCSS-%EC%98%AC%ED%95%B4%EB%A5%BC-%EB%A7%88%EB%AC%B4%EB%A6%AC-%EC%A7%80%EC%9C%BC%EB%A9%B0-26%EB%85%84-%EB%A7%9E%EC%9D%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 31 Dec 2025 14:02:07 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 25년도의 시간도 얼마 남지 않았습니다.
올해의 저를 돌이켜보면 참 다사다난했던 것 같습니다.</p>
<p>올해 초에는 저번 시간에 말했던 금형 자동화 웹 플랫폼 구축 협업이 있어 매일매일 구축할 생각에 설레서 
잠을 못잤던 시기가 있었고, 그 다음에 언어 공부를 하고 싶어서 어학연수나 워홀을 떠나자!! 
하고 마음 맞는 친구와 함께 몇 년동안 돈을 조금씩 모았던 것을 꼬깃꼬깃 꺼내 해외로 나갈 준비를 했었습니다. 바로 해외로 나가기에는 좀 그러니(<em>집안사정과 여러 상황들이 있어서,,</em>) 일단은 해외에 잠깐 나가보자! 
우리끼리 한달 살이 해보자! 해서 기획했던 게 바로 호주 한 달 살이 컨텐츠였습니다. 왜 호주냐구요??
아무래도 영어를 사용하는 나라 중에서 억양이라던가 문화 이런 것을 종합적으로 판단해서 정했습니다.
거의 맨날 만나서(<em>운동도, 공부도, 노는 것도 함께 했었기에</em>) 같이 붙어있다보니 얼른 우리가 한국을 떠나고 싶다! 떠나는 날만 기대하며 공부도 열심히 하였습니다.</p>
<p>그렇게 해서 3월달에 호주로 떠나게 되었고,,
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bc018e71-61f6-43f3-9a22-f86fa2e5cc6d/image.png" alt="">
첫 2주 동안 묵었던 숙소에 도착해서 정신없이 하루가 지나고 그랬었습니다.
처음 도착해서 며칠은 어떻게 지냈는지 기억이 잘 안나네뇨... 적응하는 시기를 거치니 저녁에 밥 먹고나서 잠깐 산책도 하게 되고, 아침 일찍 일어나서 시리얼 먹고 바로 조깅도 하러 가며 갓-생을 살기도 했습니다.
특히 날씨랑 하늘이 너무 좋더라구요??
오후에는 자외선이 좀 쎄서 그늘에 있을 때랑 햇빛이 있는 곳에 온도 차이가 좀 심해 선크림을 두둑히 발라도 집 오면 피부색 두톤 낮아져있고 그러더라고요 ㅎㅎ
그래도 밤에 별을 마음껏 볼 수 있는 점이 좋았습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/7170820a-c33b-4dfd-b863-86553710151b/image.png" alt="">
너무 기쁜 나머지 선글라스 다리 한쪽 없애버렸습니다 ㅎ</p>
<p>선글라스 조심히 들고 왔다고 생각했는데,, 한쪽 다리는 어디에 갔다가 팔았는지
.
.
.
그리고 저 없어진 다리처럼 제 마음도 삭막하게 변해버렸습니다.</p>
<p>호주 한달살이 하면서 친구랑 대판 싸우고 거의 손절 직전까지 갔었죠. 하하하
ㅋㅋㅋㅋㅋㅋㅋㅋㅌㅋ
ㅌㅋㅌㅋㅋㅌㅋ
...</p>
<p>네</p>
<p>그렇습니다.</p>
<p>14살 때부터 알던 친구였는데 (<em>고딩때부터 20살 극초반까지는 연락 안 하긴 함</em>) 아니 이렇게 오래 보고 알던 친구인데도 이렇게 사소한 거에 하루종일 분위기 안좋고 말도 안하고 화나있는게 너무 현타가 왔습니다. 풀어도 푼 것 같지 않고 그 친구도 그렇고 저도 처음 해외살이 경험을 이렇게 하다보니 알게 모르게 스트레스가 쌓이고 있었나 봅니다..
그래서 계획하고 있던 어학연수나 워홀은 한국 오자마자 깔끔하게 접었습니다.
물론 그 친구는 워홀이라고 가자 왜 갑자기 안갈려고 하느냐 이 얘기를 호주에 있을 때도 말을 했었는데
그냥,,,,, 그 친구랑 가다간 외국에서 그 친구와 의절하고 안좋은 상황으로 끝날거 같은 예감이 들어서~~ 둘러둘러 얘기하고 그랬습니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/467c8961-1983-4298-ab55-c4ee7ddb1984/image.png" alt="">
아주 그냥 멘붕이여~ 멘붕마트~
여기 마트에서 먹거리 사서 갈려니까 한국 사람이신가요?? 질문하셔서 네!! 한국사람이에요 그러고
스몰 토크도 하면서 담소를 나누었습니다. 그러다가 한 15분정도 얘기하고 헤어질때 판박이 껌 손에 쥐어 주시면서 좋은 여행 되시라고 하신 사쟌님,,,!!! 너무 감사합니다.</p>
<p>그리고 호주는 3월부터 4월까지가 축제나 공휴일이 좀 많은 달이더라구요
제가 아마 아까 보여드렸던 첫 숙소 다음에 묵었던 숙소 근처에서 라마단 한 달 금식이 끝난 뒤  무슬림들이 함께 모여 예배·가족 모임·자선·음식 나눔을 즐기는 최대 명절인 <strong>라마단 축제</strong>가 열렸었고, 
3월 마지막 금요일에는 <strong>Good Friday</strong>인 예수님 돌아가시기 마지막 금요일부터 4월 1일에 <strong>Easter Day</strong>인 예수님 부활하시는 날을 이스터 홀리데이라고 하더라구요. 이러한 공휴일도 맞이하였습니다!! 
그리고 저희가 한국으로 돌아가기 전날인 4월25일에 <strong>ANZAC day</strong>라고 세계 대전에 참전하시는 분들을 기리는 날도 경험했습니다. 한달이라는 시간동안 무척 많이 경험을 하고 돌아온 느낌이었습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/27b09e7d-050a-447a-bf83-8d62e857a7dc/image.png" alt="">
마지막 날 사진입니다. 어때요 풍경 끝내주져!!</p>
<p>이렇게 얘기하다 보니까 하여튼 얘기하다가 딴 얘기로 빠졌는데 다시 본론으로 돌아와서 </p>
<p>하여튼 이런 다양한 경험을 하고 좋았지만 친구와의 관계는 좋지  않았어서
다시 한국 돌아와서 정말 많은 고민을 했습니다.
아 나는 뭐 먹고 살지부터 좀 우울한 시기??를 보냈었습니다. 그러다가 아 이렇게 살지 말고
내가 하고 싶은 걸 해보자~ 라는 생각으로 대학교 학과 공부하면서 
내가 혼자 공부했던 코딩에 대해서 좀 더 파보자~~하고 생각하게 되고,
혼자 공부하다가 지금 AI헬스케어 부트캠프까지 온 것 같습니다. (<em>뜬금없지만 저희 동기분들 애정합니두, _
_다른 기수분들두용</em>)</p>
<p>전 지금 하고 있는 수업이 도움이 꽤나 많이 되었습니다. 제가 배우고 싶었던 머신러닝이나 
딥러닝도 배울 수 있는 기회도 있었고, 또 여러 사람들과 친해져서 이쪽 IT 관련해서 일을 하고자 
원하시는 분들이 나중에 정말 IT 일을 하러 사회에 나가서 만난다면 무척 반가울 것 같습니다.
동기 분들이 아니라도 다른 기수 분들이나 저희 OZ코딩스쿨 관련해서 인연이 되었던 분들도 나중에 사회에서 만나도 반가울 듯 싶습니다.</p>
<p>아 맞다 그리고 저 언어 학습 앱 듀오링고 꾸준히 해서
오늘 100일 연속 학습 달성했어요!!!!
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d65f93aa-0b46-4b1e-aa2f-c51e0b29bf6a/image.png" alt="">
ㅎㅎㅎㅎ 갓생 덕분에 힘내면서 달려왔습니다.
100일이 아니라 200일 300일 학습이 이어지길~~</p>
<p>이렇게 저의 25년도 회고와 시간순으로 해서 일기 형식으로 글을 써보았습니다.
저희 끝까지 파이팅해봐요!! ✊🏻</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/24386053-f9c9-4481-a4a8-4f21cde7822a/image.png" alt="">
이 글을 보고 계시는 분들 모두다 25년도 잘 마무리하시고, 2026년 병오년 붉은 말의 기운을 받아 하시는 모든 일이 거침없이 질주하는 한 해 되시길 기원합니다.
으하하하 
호핳
새해 복 많이 받으세요~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day7] 내가 원하는 웹 페이지 만들기 ]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day7</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day7</guid>
            <pubDate>Tue, 30 Dec 2025 14:09:46 GMT</pubDate>
            <description><![CDATA[<p>유과 사탕같이 엄청 딱딱한 사탕인데 맛의 종류가 다양해서 하나 먹고 오랫동안 녹여먹기 좋은 대만 사탕? 이여요 ㅎ</p>
<p>안녕하세요! 오늘은 다른 말 덧붙이지 않고 본론부터 들어가보도록 하겠습니다.</p>
<p>거의 1년전쯤에 스마트 금형 공장 품질관리 웹 플랫폼을 기획했던 경험이 있는데
웹의 첫 페이지가 다음과 같은 화면이었습니다.(<em>다른 팀원들에게는 말 안하고 올려도 되겠지? ㅎ</em>)</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/b3945ec7-eb67-4d96-9365-0f99031a9537/image.png" alt="">
저기 투박하게 가린건 그,,브랜드명같은거,,라서 지웠습니다.</p>
<p>하여튼 금형 관련 제품 품질과 공정 스케쥴링, 품질관리, 문서중앙화, 협업까지 가능하도록 하였다. 당시 PLC를 통해 현장의 온도 감지를 하여 일정 온도 이상이 되면 알람이 가게 모드버스 통신이란걸 해주었고, 그리고 금형을 만들면 제품이 스크레치가 나거나, 빵꾸가 뚫리거나 하는 비정상적인 제품을 실시간으로 판별하여 제품의 공정 과정을 웹 화면으로 모니터링하여 품질관리를 하였다. 생산,품질,설비 관리를 하도록 웹 플랫폼을 구상하였다고 생각해주면 됩니다.</p>
<p>그래서 이때는 CSS/Javascript의 언어를 사용했었다. 아 화면 구상을 할 때 잠깐 피그마라는 디자인 AI 툴도 이용했었습니다.</p>
<p>이번에 내가 만들어 보고 싶은 웹 화면이 있어서 이번에는 피그마 -&gt; HTML/CSS 언어로 바꾸어서 만들었습니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/82e820f8-8db8-4a77-b647-6090d1af2194/image.png" alt="">
이 화면은 처음 웹 들어갔을 때 보여지는 첫 화면입니다. 사진처럼 나는 의료 관련해서 환자를 관리하고 진료 일정과 검사 결과를 만드는 웹을 만들어보고 싶었습니다.
하지만 아직 정적인 화면일 뿐이며 실제 동작하고 있지는 않습니다. 동작하지 않은데 왜 보여주는거야? 생각할수도 있지만, 이 페이지는 단 많은 시간이 걸리지 않고 완성이 되었기 때문입니다. 내가 약 1년전에 한 페이지 만들 때에는 며칠씩 소요가 됐었는데 지금과 같은 방식으로 하니까 너무 쉽게 만들어버렸습니다. </p>
<p>실제로 밑에 있는 사진.. 화면 구성하는데 거의 일주일,,? 아니 그 이상 걸렸던거 같습니다. 초안 -&gt; 수정 -&gt; 수정 -&gt; 최종 수정.. 이렇게 하루종인 수정할 코드만 붙잡고 있었다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/cc123bc4-1ffd-4109-8f71-0075f70f0440/image.png" alt="">
어때요 피그마 -&gt; HTML/CSS로 짠 화면이랑 되게 비슷하죠,,흑ㅎ극</p>
<p>그래도 저는 처음부터 끝까지 코드를 짜는 것도 무척 의미가 있다고 생각합니다.
내가 낳은(?) 코드라서 애정이 더 듬뿍 담겨져 있는 것 같습니다.</p>
<p>하여튼 전 오늘도 데이콘 딥러닝 공부와 오늘 오즈에서 특강 해주신 내용을 바탕으로 저의 앞으로 미래가 어떻게 될지 좀 생각해보면서 이만 물러나도록 하겠습니다. 🙌🏻 🙌🏻</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day6] 프론트엔드 첫걸음- HTML,CSS의 기초 개념 1]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day6-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-HTMLCSS%EC%9D%98-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day6-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-HTMLCSS%EC%9D%98-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Mon, 29 Dec 2025 14:34:06 GMT</pubDate>
            <description><![CDATA[<p>주말에 젭에 잠깐 들어가서 후딱 벨로그 글만 쓰고 나갈려고 했는데 
다들 어딘가에 숨어있더라구요,,,?
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/6a7ffd24-9209-4534-8daf-4ad6b076b6eb/image.png" alt="">
지금 사진에 몇 명의 사람이 있을까요~? 맞추면 능력자 ㅎㅎ
.
.
.</p>
<p>*<em>오늘의 키워드 *</em> </p>
<ol>
<li>HTML(HyperText Markup Language) : Hyper + Text ~ = 댕쩌는 텍스트 마크업 언어</li>
<li>DOM (Document Object Model) : 기본이 되는 뼈대 🤖</li>
<li>CSS(Cascading Style Sheets)란? : 멋들어진 스타일 고르기</li>
</ol>
<h2 id="1-htmlhypertext-markup-language--hyper--text---댕쩌는-텍스트-마크업-언어">1. HTML(HyperText Markup Language) : Hyper + Text ~ = 댕쩌는 텍스트 마크업 언어</h2>
<p>HTML(HyperText Markup Language)이란?
<strong>웹 페이지의 구조</strong>를 정의하는 <strong>마크업 언어</strong>입니다. 
문서의 제목, 단락, 링크, 이미지 등을 태그를 사용하여 표현을 합니다.</p>
<p>여기서 <strong>마크업 언어(Markup Language)</strong>는 무슨 의미냐면
<strong>문서</strong>의 <strong>구조와 표현 방식</strong>을 정의하기 위해 태그(tag)를 사용하는 언어입니다.
<strong>HTML</strong>은 브라우저에서 사용자가 보는 화면을 만들기 때문에 <strong>프론트엔드</strong>(사용자가 보는 화면단을 말함)의 대표적인 마크업 언어라고 할 수 있습니다. 그렇지만 마크업 언어 자체는 프론트엔드뿐만 아니라 백엔드, 데이터 처리, 문서 작성 등 다양한 분야에서 폭넓게 활용됩니다. <em>(고로 프론트엔드에서만 쓰이지 않는다~)</em></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ee618777-b579-4697-9aaf-6582045f1b41/image.png" alt="">
구글 딱 처음에 들어가서 개발자 도구를 눌러서 확인해보면 오른쪽에 있는 코드처럼 웹 페이지의 구조를 정의하는 코드를 볼 수 있습니다. </p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/3d9bf693-ea0e-456e-86dc-92b01b518c24/image.png" alt=""></p>
<p>이런 식의 코드가 다 html입니다.</p>
<p><strong>예제 코드:</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;내 첫 HTML 페이지&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;안녕하세요!&lt;/h1&gt;
  &lt;p&gt;이것은 단락입니다.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>.</p>
<p><strong>HTML의 기본 구조</strong></p>
<ul>
<li><code>&lt;!DOCTYPE html&gt;</code> : HTML5 문서임을 선언함</li>
<li><code>&lt;html&gt;</code> : HTML 문서의 루트 요소</li>
<li><code>&lt;head&gt;</code> : 메타데이터, 제목, CSS, 스크립트 등을 포함</li>
<li><code>&lt;body&gt;</code> : 실제 화면에 표시되는 콘텐츠</li>
</ul>
<p><strong>주요 HTML 태그</strong></p>
<ul>
<li>제목: <code>&lt;h1&gt;</code> ~ <code>&lt;h6&gt;</code></li>
<li>단락: <code>&lt;p&gt;</code></li>
<li>구분선: <code>&lt;hr&gt;</code></li>
<li>리스트: <code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;li&gt;</code></li>
<li>테이블: <code>&lt;table&gt;</code>, <code>&lt;tr&gt;</code>, <code>&lt;td&gt;</code></li>
<li>이미지: <code>&lt;img src=&quot;&quot; alt=&quot;&quot;&gt;</code></li>
<li>링크: <code>&lt;a href=&quot;&quot;&gt;&lt;/a&gt;</code></li>
<li>폼: <code>&lt;form&gt;</code>, <code>&lt;input&gt;</code>, <code>&lt;button&gt;</code></li>
</ul>
<p><strong>HTML Attribute(속성)</strong>
속성은 태그에 추가 정보를 제공합니다.</p>
<ul>
<li><code>href</code> : 링크 주소 지정</li>
<li><code>src</code> : 이미지 경로 지정</li>
<li><code>alt</code> : 이미지 대체 텍스트</li>
<li><code>class</code> : CSS 스타일링을 위한 클래스명</li>
<li><code>id</code> : 고유 식별자</li>
</ul>
<p><strong>폼 검증</strong></p>
<ul>
<li><code>required</code> : 필수 입력 필드</li>
<li><code>type</code> : 입력 타입 지정 (email, text 등)</li>
<li><code>pattern</code> : 정규표현식을 이용한 입력 형식 검증</li>
</ul>
<p><strong>HTML 속성 예제:</strong></p>
<pre><code class="language-html">&lt;!-- 링크와 이미지 예제 --&gt;
&lt;a href=&quot;https://google.com&quot;&gt;구글로 이동&lt;/a&gt;
&lt;img src=&quot;cat.jpg&quot; alt=&quot;고양이 사진&quot; width=&quot;300&quot;&gt;

&lt;!-- 폼 예제 --&gt;
&lt;form&gt;
  &lt;label for=&quot;email&quot;&gt;이메일:&lt;/label&gt;
  &lt;input type=&quot;email&quot; id=&quot;email&quot; required&gt;
  &lt;button type=&quot;submit&quot;&gt;제출&lt;/button&gt;
&lt;/form&gt;</code></pre>
<p>.
.
.</p>
<h2 id="2-dom-document-object-model--기본이-되는-뼈대-🤖">2. DOM (Document Object Model) : 기본이 되는 뼈대 🤖</h2>
<p>HTML 문서를 트리 구조로 표현한 객체 모델입니다. 브라우저가 HTML 파일을 읽으면 각 태그를 JavaScript가 이해할 수 있는 객체(Object)로 변환합니다(이 과정을 파싱(Parsing)이라고함). JavaScript를 통해 웹 페이지를 동적으로 조작할 수 있게 해줍니다</p>
<p>저희 VSCode에서 다음 사진과 같은 익스플로어를 설치해주고
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/52233a76-2baa-4f50-a918-643323afb3c3/image.png" alt="">
파일 제목을 지을 때 .html 파일로 만들어 줍니다. 그럼 파일이 html에 사용되는 코드구나 인식하게 됩니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/80157a5d-6725-44b7-b9cb-8edf7d170aa8/image.png" alt="">
그 다음에 느낌표(!) + Enter 누르면 다음과 위에 사진처럼 기본 틀이 나옵니다. </p>
<p>이것에 대한 DOM 트리는
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ce539e2d-ee6d-477f-a7d0-0bc7e54286db/image.png" alt="">
이렇게 나타낼 수 있습니다.</p>
<p>간단한 노드 설명을 하면,</p>
<ul>
<li><p>document: 최상위 문서 객체</p>
</li>
<li><p>html: 루트 요소, lang=&quot;en&quot; 속성을 가짐</p>
</li>
<li><p>head: 메타데이터를 포함하는 영역</p>
</li>
<li><p>meta (charset): 문자 인코딩 설정</p>
</li>
<li><p>meta (viewport): 반응형 디자인을 위한 뷰포트 설정</p>
</li>
<li><p>title: 문서 제목 (&quot;Document&quot;)</p>
</li>
<li><p>body: 실제 콘텐츠 영역 (현재 비어있음)</p>
</li>
</ul>
<p>이제 여기서 JavaScript를 사용하면 이 DOM 트리에 동적으로 요소를 추가하거나 수정할 수 있습니다.
.
.
.</p>
<h2 id="3-csscascading-style-sheets란--멋들어진-스타일-고르기">3. CSS(Cascading Style Sheets)란? : 멋들어진 스타일 고르기</h2>
<p>CSS (Cascading Style Sheets)는 HTML의 시각적 스타일을 정의하는 언어입니다.
HTML이 웹 페이지의 구조를 만든다면, CSS는 그 구조에 옷을 입히는 역할을 합니다.</p>
<p>CSS로 할 수 있는 것들:</p>
<ol>
<li><p>색상: 글자 색, 배경색 변경</p>
</li>
<li><p>크기: 폰트 크기, 요소의 너비/높이 조절</p>
</li>
<li><p>간격: 여백(margin, padding) 설정</p>
</li>
<li><p>위치: 요소의 배치와 정렬</p>
</li>
<li><p>레이아웃: Flexbox, Grid를 이용한 페이지 구조</p>
</li>
<li><p>애니메이션: 움직이는 효과</p>
</li>
<li><p>반응형: 다양한 화면 크기에 맞게 조절</p>
</li>
</ol>
<p>.
.</p>
<p><strong>CSS 예제</strong></p>
<pre><code class="language-css">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;CSS 예제&lt;/title&gt;
  &lt;style&gt;
    /* CSS예제 코드*/
    h1 {
      color: blue;           /* 파란색 글자 */
      font-size: 32px;       /* 32픽셀 크기 */
    }

    .highlight {
      background-color: yellow;  /* 노란색 배경 */
      padding: 10px;             /* 안쪽 여백 */
    }

    #header {                   /* id가 header인 것만 선택 */
      text-align: center;       /* 텍스트를 가운데 정렬 */
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;파란색 제목&lt;/h1&gt;
  &lt;p class=&quot;highlight&quot;&gt;노란색 배경&lt;/p&gt;
  &lt;div id=&quot;header&quot;&gt;가운데 정렬&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p>실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/106ea785-c447-4253-ab50-92025513e26e/image.png" alt="">
이런 결과를 얻을 수 있습니다.</p>
<p>그리고 저는 이걸 바탕으로 할일을 나타내주는 화면을 구상해보았습니다. CSS적인 부분은 빼고선 진행했습니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/4511a139-8d2b-47b6-a837-8e00d240a37c/image.png" alt=""></p>
<p>이 코드를 바탕으로 화면을 생성하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/14dc4030-5a51-49fa-8469-765f55b09bc6/image.png" alt="">
<strong>코드 8~12줄</strong>은 이미지 크기 설정 관련된 코드입니다. 너비 300px, 높이는 자동 조정, 모서리는 10px만큼 둥글게 처리하도록 구성했습니다.</p>
<p><strong>코드 15줄~32줄</strong>은 실제 화면에 표시될 내용이 들어가는 영역입니다.
<strong>h1 ~ /h1 코드</strong>는 가장 큰 제목에 들어갈 글을 쓴 것이고,
<strong>p ~ /p 코드</strong>는 일반 텍스트를 표시입니다.
<strong>details ~ /details 코드</strong>는 클릭하면 내용이 펼쳐지고 접히는 인터랙티브 요소입니다. 토글 만드는 기능을 뜻합니다.
<strong>summary ~ /summary 코드</strong>는 detail 요소의 제목을 담당하는 코드입니다. 
<strong>코드 25 ~ 28줄</strong>은 li ~ /li 코드로 제목 바로 밑에 작성이 되는 코드들입니다.
img src=&quot;2222.jpeg&quot; alt=&quot;카피바라&quot; --&gt; 이미지 삽입 관련 코드로 &quot;2222.jpeg&quot; 파일을 표시하며, 이미지가 로드되지 않으면 &quot;카피바라&quot;라는 대체 텍스트가 표시됩니다.
.
.</p>
<p>이제 토글을 클릭하면</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/2482017f-61bd-4338-a4b2-457f80addc97/image.png" alt=""></p>
<p>제가 코드를 짠 오늘의 할 일이 보입니다. </p>
<p>HTML 관련해서 영상 참고는 &quot;생활코딩&quot;이라는 유튜버..? 분이십니다.
<a href="https://www.youtube.com/watch?v=OGFgdro160I&amp;list=PLuHgQVnccGMDUzDDCKW-pCZQY-MMCX5yB&amp;index=1">생활코딩 HTML</a>
내용도 10분 내외로 길지 않고 기초부터 차근차근 가르쳐 주십니다.</p>
<h2 id="결론">결론</h2>
<p>오늘 HTML/CSS의 기초를 다져봤습니다!!</p>
<p>HTML은 웹 페이지의 뼈대를, CSS는 멋진 옷을 입히는 역할을 한다는 걸 배웠어요. 
좀 더 공부하다 보면은 버튼도 만들고 화면 구성도 멋들어지게 만들 수 있는 날이 올 수 있기를,,,!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day5] 좋은 의료데이터란 무엇일까? 데이터 뒤에 있는 환자를 상상하는 연습]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day5-%EC%A2%8B%EC%9D%80-%EC%9D%98%EB%A3%8C%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%99%98%EC%9E%90%EB%A5%BC-%EC%83%81%EC%83%81%ED%95%98%EB%8A%94-%EC%97%B0%EC%8A%B5</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day5-%EC%A2%8B%EC%9D%80-%EC%9D%98%EB%A3%8C%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%99%98%EC%9E%90%EB%A5%BC-%EC%83%81%EC%83%81%ED%95%98%EB%8A%94-%EC%97%B0%EC%8A%B5</guid>
            <pubDate>Sun, 28 Dec 2025 13:19:36 GMT</pubDate>
            <description><![CDATA[<p>의료 데이터를 처음 다루어 보면서 느낀건, “이건 그냥 숫자가 아니구나”였다. 쇼핑 로그나 웹 서비스 로그처럼 한 번의 클릭, 한 번의 이탈로 끝나는 데이터가 아니라, 누군가의 병력과 약, 검사 결과, 심지어는 삶의 방향이 담긴 기록이라는 걸 조금씩 깨닫게 됐다. 
의료정보는 법적으로도 가장 민감한 정보로 분류되고, 별도 동의 없이 함부로 수집·이용할 수 없을 정도로 보호받는 정보이다. 그래서 의료데이터를 다루는 일은, 단순히 AI 모델을 잘 돌리는 일이 아니라 그 사람의 프라이버시와 존엄을 함께 들고 있는 일에 가깝다.
.
.
.</p>
<p>처음 의료 데이터의 이상치 처리를 배웠을 때는, Kaggle에 있는 데이터를 다루는 것처럼 기준을 정해서 자르고, 결측은 적당한 값으로 채우면 된다고 생각했다. 그런데 의료데이터를 전처리하면서부터는 같은 작업을 하기 전에 사고 회로를 한번 더 걸쳐서 진행한다.
이 수치는 정말 <strong>잘못 찍힌 값일</strong>까, 아니면 드물지만 실제로 존재하는.. 상태가 매우 나쁜 혹은 매우 특이한 환자일까. 치료 과정에서 생긴 극단적인 수치 변화를 노이즈라고 지워버리는 순간 그 사람에게 일어난 중요한 변화를 통째로 지워버리는 건 아닐까 하는 생각이 들었다. 
의료데이터는 통계적으로 예외처럼 보이는 값 하나가, 임상적으로는 가장 중요한 신호일 수 있기 때문이다.
.
.
.
윤리적인 문제도 자연스럽게 따라왔다. 의료데이터는 가명처리를 한다고 끝이 아니라, 다른 데이터와 결합되면 다시 개인이 식별될 위험이 있고, 그때 발생하는 피해는 어떨지 감도 안잡힌다. 
그래서 연구자와 개발자는 “법적으로만 문제 없으면 된다”에서 안일한 생각을 하지 말고, 이 데이터가 누군가의 삶이기도 하고, 데이터가 다른 사람에게 어떤 영향을 줄 수 있는지까지 상상해야 한다. 
인공지능에 활용되는 헬스 데이터 윤리를 다루는 글들을 보면, 데이터를 처리하는 사람, 알고리즘을 만드는 사람, 그 결과를 쓰는 사람이 각각 어떤 책임을 져야 하는지 원칙을 세우려는 시도가 계속되고 있다. 나도 코드를 짤 때 이 모델이 나의 생각대로 작동하지 않고 다른 방향으로 쓰이거나 틀리기라도 했을 때, 누구에게 어떤 일이 생길까? 라는 질문을 머릿속에서 생각해 보려고 한다.
.
.
.</p>
<p>그렇다면 좋은 의료데이터는 무엇일까. 단순히 <strong>양이 많고 컬럼이 많은 데이터</strong>가 아니라, <strong>정확성,일관성,대표성</strong>을 갖춘 데이터여야 된다고 생각한다. 특정 연령,성별,지역 환자만 과도하게 모여 있으면, 그 데이터로 학습한 AI는 다른 집단에서 성능이 떨어지고, 그 결과로 건강 불평등을 더 키울 수도 있다. 
라벨이 부정확하거나 기록이 누락된 데이터는 모델의 성능을 떨어뜨릴 뿐 아니라, 잘못된 판단을 가진 AI를 만들어 내기 쉽다. AI 모델의 질병 진단과 예측 도구가 되려면, 그 뒤에 있는 데이터가 임상의의 판단과 꾸준히 비교, 점검되면서 업데이트되는 과정도 중요해진다.
.
.
.
그래서 요즘은 의료데이터를 볼 때마다, 이 숫자 뒤에는 어떤 사람이 있었을까?? 를 떠올리려고 한다. 
이상치를 삭제할지 말지, 가명처리된 데이터를 어떻게 쓸지, 데이터 편향을 줄이기 위해 무엇을 더 수집해야 할지 고민하는 순간마다, 그 데이터 하나를 한 사람의 삶의 궤적으로 상상해 본다. 
의료데이터를 대하는 태도가 결국 AI 헬스케어 개발자의 정체성을 결정한다고 생각하기에 AI가 아무리 똑똑해져도, 데이터 속 사람을 잊지 않는 개발자로 남기 위해서 오늘도 열심히 내가 해야 할 숙제들을 해야겠다. (<em>사실 그 숙제는 몇 주전부터 밀려있었는데 이제 그 쌓여있는 숙제들을 좀 끝내놔야될 것 같다.,. <a href="https://dacon.io/hackathon">데이콘</a> 빠샤,,</em> <em>머신러닝 공부할 때 내 기력을 다 뺏어가서 딥러닝 공부를 못하게 만들워 떼잉</em>)
.
.
지금부터 하는 얘기는 살짝 사담이다.
지금 글쓰면서 당이 떨어져 두바이 초콜릿을 꺼냈다.
이 친구의 출처는 일주일 전에 놀러간 곳에서 두바이 유명 가게가 있다길래 냉큼 가서 초콜릿 두개를 사서 모셔왔다. (초콜릿, 스프레드, 면의 종류 자신이 선택) 한 개는 언니주고 나머지 하나는 어제 친구랑 있을때 같이 먹었는데 너무 맛있어서 정말 기절할뻔
같이 먹은 친구들도 스프레드가 무슨 전복내장같다고 비주얼 대박이라고 얘기함
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d871bfe7-9a26-4dde-9d34-db47635c6933/image.png" alt="">
이건 피스타치오 초콜릿 + 피스타치오 스프레드 + 건면의 조합이다. 위에 금도 뿌려주셔서
두바이에 사시는(?) 부자분들이 👳‍♂️ 👳 먹을 것 같은 비주얼.. 
나중에 또 가서 종류별로 담아서 사고싶다. 너무 맛있어요 흑흑 </p>
<p>끝마치면서
오늘 글의 내용은 사실 코딩 관련해서 글을 정리한다기 보다는 데이터를 다룰 때의 중요성을 생각하며
글을 작성해보았다. 이러한 생각도 한번쯤 필요한 부분이지 않을까 해서 정리했으니 난 이제 데이콘 딥러닝 공부하러.. 가보도록 하겠습니다 총총 😵‍💫</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day4] AI 헬스케어 개발자가 되기 위한 역량]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day4-AI-%ED%97%AC%EC%8A%A4%EC%BC%80%EC%96%B4-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%97%AD%EB%9F%89</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day4-AI-%ED%97%AC%EC%8A%A4%EC%BC%80%EC%96%B4-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%97%AD%EB%9F%89</guid>
            <pubDate>Sat, 27 Dec 2025 09:31:26 GMT</pubDate>
            <description><![CDATA[<p>저희 이번년도 9월부터 시작된 부트캠프는 Python 기초부터 시작해서 헬스케어 데이터를 불러오고 전처리하며 그 이후에는 시각화도 해보며 인사이트를 뽑아낼 수 있는 데이터 분석 역량을 키워나갔다.</p>
<p>기본적인 머신러닝과 딥러닝의 다양한 모델로 학습시키고, 이를 헬스케어 문제에 적용해보기도 했다.</p>
<p>그러면서 수학적인 부분에서는 선형대수학이라던지, 코딩할때 DecisionTree같은 예측 모델을 사용하던지, 미니 프로젝트를 진행하면서 의료 데이터들의 이상치 판별과 질병 예측할때 필요한 도메인 지식이라던지 이런 세 가지 역량은 내가 지금 AI 헬스케어 개발자를 준비하면서 꼭 중요한 요소라고 생각을 한다.
수학, 코딩, 그리고 도메인 지식중에 단 하나라도 중요하지 않는게 없다.</p>
<p>이걸 수업들으면서 정말 뼈저리게 느꼈다.. 껄껄
근데 이 세가지를 매일 공부하기에는 몸이 3개라도 부족할 것 같다.
공부하면서 운동도 해줘야하고, 건강한 식습관도 해야되기에
귀차니즘 대마왕인 나는 하나에만 몰두하기에도 벅차다.
그리고 지금 컬럼월드 벨로그도 운영(??)을 하고 있기에
내 할일을 좀 하다보면 하루가 금방 간다.</p>
<p>어쨋거나 코딩, 수학, 도메인 지식. 이 세 역량이 중요하다는걸 깨달았으니 각각 어떻게 공부를 하고 있는지 정리해보면</p>
<ol>
<li>코드를 손에 익히기</li>
</ol>
<ul>
<li>이론을 들을 때 이해가 됐어도 그걸 바탕으로 코드를 처음부터 끝까지 짜라고 하면 턱 막힌다. 그래서 직접 코드를 써보며 이해해보는 시간을 꼭 가졌었다.</li>
</ul>
<ol start="2">
<li>수학</li>
</ol>
<ul>
<li>그 공부하다 보면 엔트로피, 선형대수학 등등 뭔가 대학 생활을 했을 때 공부했던 개념들이 좀 보였었다. 물론 난 기계시스템공학과를 나왔어서 개념이 익숙하더라도 이게 다른 분야에서 같은 개념을 쓸 때에는 쓰이는 의미가 조금씩 다를 수 있다. 
그럼에도 익숙한 내용들이 나올 때마다 속으로 좀 반가운 마음이 들었다.</li>
</ul>
<ol start="3">
<li>도메인 지식</li>
</ol>
<ul>
<li>앞서 말했다시피 난 공대중에 하나인 기계과 관련해서 공부했단 보니까 의료 관련해서는 티비나 유튜브로 의학 관련 영상을 보는 것 외에는 모르기 때문에 난 이 역량이 가장 약하다고 생각을 했다. 그래서 미니 프로젝트를 진행하거나 할 때 도메인 지식이 있으신 분들의 말씀을 잘 귀담아 들어서 내용을 정리하고 그랬다. 그래도 여전히 백지 상태처럼 이 분야에 대해서 잘 알지 못한다고 생각한다...</li>
</ul>
<p>.
.
.
.
.
.
.</p>
<p>아 &quot;나만의 컬럼월드”의 취지가 공부 기록을 남겨서 사람들과 소통하고 싶은 마음이 전부였는데, 어느 순간부터는 내가 어떤 개발자가 되고 싶은지를 생각하게 된다. 그래서 요즘은 AI 헬스케어 공부 이야기뿐 아니라, 내가 지금 배우고 있는 언어인 스페인어와 스페인의 의료 AI에 관해서 아는 지식의 한해서 글을 써볼려고 한다.</p>
<p>일단 스페인어를 선택한 이유는 처음 접했을 때 영어랑 좀 비슷해보여서 선택했다. 아무래도 지금 1X년 동안 영어의 바짓가랭이를 붙잡고 있기에 스페인어를 봤을때 친숙한 느낌이었다. 
그리고 스페인은 유럽에서 임상시험 강국으로 꼽히고, AI 기반 의료 시스템을 빠르게 도입하는 나라 중 하나다. 실제로 발렌시아주처럼 유방암 검진 프로그램에 AI를 본격적으로 적용해 연간 검진 대상을 크게 늘리면서도 진단의 질을 유지하려는 시도들이 진행되고 있다. 정부 차원에서도 AI를 국민보건 시스템에 통합하고, 의료진 교육과 현장 적용 역량을 강화하겠다는 전략을 내놓으며 디지털 헬스케어 전환에 속도를 내고 있다. 이런 흐름을 보다 보면, AI 의료라는 같은 주제를 두고도 한국과는 또 다른 실험이 이루어지는 하나의 거대한 현장으로 스페인이 보인다.</p>
<p>스페인어 공부가 그냥 취미가 아니라, 스페인 의료 기사나 논문을 내가 직접 읽어보고 싶어서 공부하는 것도 있다.</p>
<p>그리고 한국의 AI 의료는 기술과 시장 성장 속도는 빠르지만, 현장 적용과 규제 측면에서는 여전히 과제도 큰 단계라고 볼 수 있어. 전체적으로 기술과 데이터 인프라는 강한데, 제도와 현장 수용성이 따라가야 하는 상황 정도로 정리할 수 있다.</p>
<p>하지만 그 들어보니까 대학 병원에서 수술할 때 로봇팔을 이용해서 수술을 하는 사례가 있다고 들었다. 점차 이런 여러 기술들을 의료 현장에 도입하면 나중에 내가 아팠을 때에도 도움을 크게 받을 수 있지 않을까 생각이 든다.</p>
<p>한국에서는 의료 데이터나 인프라, 스페인은 임상이나 현장 실험 문화에서 강점이 있어 보인다. 그래서 나는 두 나라의 시각을 다 이해할 수 있는 개발자가 되고 싶다!</p>
<p>으하하</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day3] 웹 서비스, 그와 관련된 데이터베이스]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day3-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B7%B8%EC%99%80-%EA%B4%80%EB%A0%A8%EB%90%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day3-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B7%B8%EC%99%80-%EA%B4%80%EB%A0%A8%EB%90%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Fri, 26 Dec 2025 13:59:43 GMT</pubDate>
            <description><![CDATA[<p>Today&#39;s 2025년 마지막 금요일 🙌🏻
2025.12.26일 입니다.
크리스마스 다음 날인 12월 26일, 다들 즐거운 추억 <strong>로그(Log)</strong>는 잘 남기셨나요? 어제의 행복했던 데이터는 가슴 속에 저장하고, 오늘은 벨로그에 미래의 나를 위한 웹 서비스 구조 데이터를 저장해 보려 합니다. 며칠전에 공부한 내용을 정리해볼게요. [일오갓생 Day1]이랑 이어집니다!</p>
<p>못보신 분들을 위해 링크 남겨두도록 하겠습니다.
<a href="https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day1">[일오갓생 Day1] SQL 기초(SQLite), TIL</a></p>
<h3 id="핵심-키워드">핵심 키워드</h3>
<ol>
<li><p>클라이언트-서버 모델: 요청하는 쪽과 응답하는 역할의 분리 </p>
</li>
<li><p>HTTP/HTTPS: 웹에서 데이터를 주고받기 위한 약속된 통신 규칙 </p>
</li>
<li><p>REST API: 자원을 중심으로 설계된 효율적인 인터페이스 방식 </p>
</li>
<li><p>RDBMS: 데이터를 표 형태로 관리하는 관계형 데이터베이스 시스템
.
.
.
.</p>
</li>
</ol>
<h2 id="1-클라이언트---서버-모델--역할의-명확한-분리">1. 클라이언트 - 서버 모델 : 역할의 명확한 분리</h2>
<p>웹 서비스의 가장 기본은 역할을 나누는 것입니다. 
그 역할은 클라이언트와 서버로 크게 나눌수 있습니다.</p>
<p><strong>클라이언트(Client)</strong> : 사용자의 행동을 받아 서버에 무언가를 해달라고 요청하는 프로그램입니다. </p>
<p><strong>서버(Server)</strong> : 클라이언트의 요청을 대기하고 있다가 이를 처리하여 결과를 응답으로 돌려줍니다. </p>
<p>역할은 <strong>왜</strong> 나눌까? : 역할을 분리함으로써 각 기술을 독립적으로 발전시키고, 데이터와 기능을 중앙에서 효율적으로 관리하기 위해서입니다. 
.
.
.</p>
<h2 id="2-httphttps--웹에서-데이터를-주고받기-위한-약속된-통신-규칙">2. HTTP/HTTPS : 웹에서 데이터를 주고받기 위한 약속된 통신 규칙</h2>
<p>컴퓨터끼리 대화하려면 왜 공통된 규칙(프로토콜)이 필요할까요? 단순히 데이터를 보낸다는 행위만으로는 데이터를 받는 쪽에서 그 데이터가 무엇인지, 어디서 왔는지, 그리고 온전한 상태인지를 해석할 방법이 없어 웹에서 데이터를 주고받기 위해서는 통신 규칙이 꼭 필요합니다.</p>
<p>🌐 대화의 형식을 맞추기 위해서는 HTTP이 필요합니다. 🌐
만약 전 세계 사람들이 각자 자기 나라 언어로만 말한다면 소통이 불가능할겁니다.이는 컴퓨터도 마찬가지입니다. A라는 컴퓨터는 데이터를 텍스트로 보내고, B라는 컴퓨터는 이미지로만 해석하려고 한다면 통신은 안될겁니다.</p>
<p><strong>실생활 예시</strong> 
식당에 가서 <strong>주문</strong>을 한다고 가정해 봅시다.
나(<strong>클라이언트</strong>)는 여기 비빔밥 하나 주세요!라고 요청합니다.</p>
<p>점원(<strong>서버</strong>)은 그 말을 듣고 주방에 전달해 음식을 가져다주거나, 재료가 없으면 &quot;품절입니다&quot;라고 응답합니다.</p>
<p>여기서 <strong>&#39;말(언어)&#39;</strong>이라는 규칙이 없다면 어떨까요? 손님은 손짓만 하고 점원은 춤을 춘다면 주문은 영원히 이뤄지지 않을 것입니다. HTTP는 바로 이 &#39;주문하는 방식과 메뉴판의 형식&#39;을 통일한 약속입니다.</p>
<p>🔒 내 비밀번호가 공공재가 되지 않으려면 HTTPS가 필요하다. 🔒 
HTTP는 정보를 평문(누구나 읽을 수 있는 상태)으로 전달합니다.만약 우리가 로그인을 할 때 HTTP를 사용한다면, 해커는 중간에서 마치 남의 엽서를 훔쳐보듯 우리의 아이디와 비밀번호를 너무나 쉽게 읽을 수 있습니다. 그렇게 되면 우리의 소중한 개인정보는 공공정보가 되어버리겠죠?</p>
<p>*<em>실생활 예시 *</em>
엽서 vs 봉인된 편지</p>
<p>HTTP는 정보를 평문(누구나 읽을 수 있는 상태)으로 전달합니다. 그리고 HTTP는 <strong>엽서</strong>라고 말할수 있습니다. 엽서는 우체부나 중간에 거치는 사람들이 내용을 슬쩍 볼 수 있죠. 중요한 개인정보를 엽서에 적어 보내기는 매우 위험합니다.</p>
<p>그래서 등장한게 HTTP + S(ecurity) = HTTPS입니다.
HTTPS는 내용을 암호화해서 <strong>튼튼한 금고</strong>에 넣어 보내는 것과 같습니다. 설령 중간에 누군가 이 금고를 훔쳐 가더라도, 열쇠(복호화 키)가 없으면 안의 내용을 절대 확인할 수 없습니다.</p>
<p>💡 요약하자면
HTTP는 우리 이런 형식으로 대화하자!라는 소통의 약속이고,</p>
<p>HTTPS는 그 대화 내용에 암호화라는 자물쇠를 채워 안전하게 만드는 기술입니다.</p>
<p>오늘날의 웹 서비스에서는 개인정보 보호와 보안을 위해 HTTPS 사용이 선택이 아닌 필수가 되었습니다.
.
.
.</p>
<h2 id="3-rest-api-자원을-중심으로-설계된-효율적인-인터페이스-방식">3. REST API: 자원을 중심으로 설계된 효율적인 인터페이스 방식</h2>
<p>API(Application Programming Interface)는 프로그램과 프로그램이 소통하는 약속입니다. 앞서 HTTP가 대화를 하기 위한 공통 언어라고 했다면, API는 그 언어를 사용해 <strong>&quot;무엇을 요청할 수 있는지 그 규칙과 약속&quot;</strong>입니다</p>
<p>우리가 리모컨 버튼으로 가전제품을 조작하듯, 클라이언트는 서버가 미리 설계해 둔 API 형식을 통해 데이터를 요청하게 됩니다. 
특히 REST API는 웹의 기본 원칙을 충실히 따르므로 사람들이 가장 많이 쓰는 설계 방식입니다. 이 방식은 데이터나 파일 같은 대상을 <strong>자원(Resource)</strong>으로 정의하고, 이를 복수형 명사 형태의 URL로 식별합니다.
.
.
.</p>
<p>여기에 <strong>무엇</strong>을 하고 싶은지 나타내는 <strong>HTTP 메서드</strong>를 <strong>결합</strong>하여 어떤 자원을 어떻게 처리할지를 표현합니다. 
예를 들어 GET / users는 사용자 목록 조회, DELETE / orders/ 123은 특정 주문 삭제를 의미하므로 주소만 봐도 그 의도를 명확히 알 수 있습니다. 
이러한 <strong>일관된 규칙</strong>은 백엔드와 프론트엔드 사이의 명확한 계약이 되어, 서로 다른 환경에서도 효율적인 협업을 가능하게 합니다. 단순한 기능을 넘어, 관례적으로 로그인은 POST /auth/login처럼 표현하며 CRUD를 벗어나는 복잡한 행위까지도 체계적으로 관리할 수 있습니다.</p>
<p>주소만 봐도 어떤 데이터를 어떻게 처리하려는지 명확히 알 수 있어 효율적인 장점이 있습니다.
.
.
.</p>
<h2 id="4-rdbms-데이터를-표-형태로-관리하는-관계형-데이터베이스-시스템">4. RDBMS: 데이터를 표 형태로 관리하는 관계형 데이터베이스 시스템</h2>
<p>서비스에서 발생하는 모든 데이터는 단순히 어딘가에 적어두는 것이 아니라, 언제든** 빠르고 정확하게** 꺼내 쓸 수 있도록 데이터베이스에 <strong>안전하게 저장</strong>되어야 합니다. </p>
<p>그중에서도 RDBMS(관계형 데이터베이스)는 MySQL이나 PostgreSQL처럼 이러한 관계형 데이터를 실제로 관리하는 소프트웨어를 뜻합니다.</p>
<p>RDB가 키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스인데 이를 관리하는(MS) 단어가 합쳐져서 RDBMS라고 부릅니다.
.
.
.</p>
<p>RDBMS(관계형 데이터베이스 관리 시스템이 많이 쓰이고 중요한 이유에 대해서 정리해 보자면,</p>
<p>① 데이터의 구조화와 관계 설정 (Relationships)</p>
<ul>
<li>서로 다른 테이블 간의 <strong>관계</strong>를 맺을 수 있다는 점입니다. 예를 들어, 사용자 테이블과 주문 테이블이 있을 때, <strong>외래 키(Foreign Key)</strong>를 사용해 1번 사용자가 A 상품을 주문했다는 정보를 
중복 없이 체계적으로 연결할 수 있습니다. 이는 데이터가 늘어나도 복잡해지지 않게 관리해 줍니다.
.
.</li>
</ul>
<p>② 데이터 무결성과 신뢰성 (Data Integrity)</p>
<ul>
<li>데이터가 서로 꼬이거나 잘못 입력되는 것을 방지합니다. 숫자가 들어가야 할 칸에 글자가 들어오지 못하게 막거나, 반드시 있어야 하는 필수 정보가 빠지지 않도록 규칙을 강제합니다. 이를 통해 우리는 항상 &quot;<strong>데이터베이스에 들어있는 정보는 정확하다</strong>&quot;는 믿음을 가질 수 있습니다.
.
.</li>
</ul>
<p>③ SQL을 통한 효율적인 데이터 활용</p>
<ul>
<li>RDBMS는 <strong>SQL(Structured Query Language)</strong>이라는 표준 언어를 사용합니다. 
SELECT, INSERT, UPDATE 같은 직관적인 명령어를 통해 수백만 개의 데이터 중 
내가 원하는 정보만 아주 빠르게 찾아내거나 수정할 수 있습니다. 
특히 SQLite 같은 경량 RDBMS는 별도의 설치 없이도 파일 하나로 이 모든 기능을 로컬 환경에서 간편하게 구현할 수 있게 해줍니다.
.
.
.<h2 id="결론-😎">결론 😎</h2>
웹 서비스는 결국 <strong>사용자의 의도를 데이터로 바꾸어 안전하게 전달하고, 이를 체계적으로 저장과 처리를 하고, 다시 화면으로 보여주는 과정</strong>입니다.</li>
</ul>
<p>왜 이렇게 복잡하게 나뉘어서 진행할까요? 
그것은 각 기술을 독립적으로 발전시키고 유지보수를 효율적으로 하기 위해서입니다. 내가 작성하는 코드 한 줄이 클라이언트에서 서버로, 그리고 데이터베이스까지 어떻게 흘러가는지 그 <strong>전체 흐름(Flow)</strong>을 이해할 때 비로소 더 견고하고 효율적인 서비스를 설계할 수 있고 좀 더 직관적으로 보이기 쉽게 되기 때문입니다.</p>
<p>아 그리고 약간의 TMI? 이기는 한데 제가 맨날 언어 공부를 하는 앱이 하나 있습니다.
오늘 공부하고 있는 언어가 스페인어인데
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/604c8290-1848-4ef6-a25d-12365d5add99/image.png" alt="">
이게 스코어가 올라가면 올라갈수록 난이도가 상승한단 말이에요?!
근데 오늘 공부할려는데 스코어 8에서 9로 넘어가는 일종의 시험(?)같은걸 진행했습니다.</p>
<p>다행히,, 좀 긴 사투 끝에
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bd0151e6-2521-4184-a65e-7fe4b370d36e/image.png" alt="">
스코어 9로 넘어가게 되었습니다 😎 🤠 😆</p>
<p>Yo estudio códigos. (저는 코딩 공부합니다<del>)
Me gusta el café. (저는 커피를 좋아합니다</del>)</p>
<p>아직 기초적인 문장만 구사할 수 있지만(사실 이 마저도 자주 틀림)
언젠간 외국어를 능통하는 시기가 오지 않을까 라는 생각으로 조금씩 하고 있습니다 ㅎ</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/7c04c17a-398d-4fb2-a065-16d3ba972645/image.png" alt="">
이제 곧 연속 학습 100일째 달성이 코앞까지 다가왔습니다.
전에 몇 개월 하다가 귀찮아서 안들어 갔다가 최근에 다시 시작했는데
친구랑 같이 할겸 좀 열심히 꾸준히 했으면 좋겠어요 🥹</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day2] book북 ]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day2-book%EB%B6%81</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day2-book%EB%B6%81</guid>
            <pubDate>Thu, 25 Dec 2025 07:25:14 GMT</pubDate>
            <description><![CDATA[<pre><code>      /\
     /  \
    /    \
   /      \
  /________\
     /  \              _   _
    /    \            ((___)) 
   /  /\  \           [ 0 0 ]            
  /  /__\  \           \   /           
 /__________\          &#39;m m&#39;         
      ||            Merry Xmas!                 </code></pre><p> ★ ━━━━━━━━━━━━━━━━ ★</p>
<pre><code>메 리  크 리 스 마 스 !
M E R R Y   X M A S</code></pre><p> ★ ━━━━━━━━━━━━━━━━ ★</p>
<h2 id="미래를-여는-헬스케어-솔루션">미래를 여는 헬스케어 솔루션</h2>
<ul>
<li>모든 의료제공자를 위한 생활습관의학 진료 지침서</li>
</ul>
<p>AI 헬스케어 부트캠프에서 공부하면서 느낀 점은, 기술만큼이나 <strong>헬스케어 도메인에 대한 이해</strong>가 중요하다는 점인 것 같습니다. 의료 데이터 AI 프로젝트를 진행하다 보면 단순히 모델을 개발하는 것을 넘어서, 실제 의료 현장에서 어떤 문제를 해결해야 하는지 알아야 합니다.</p>
<p>이 책은 548쪽에 달하는 방대한 분량으로, <strong>생활습관의학(Lifestyle Medicine)</strong>의 관점에서 헬스케어 솔루션을 다루고 있습니다. 의료 AI 개발자를 꿈꾸는 저의 입장에서 의료 현장의 실제 니즈를 이해하는 데 큰 도움이 되었습니다.</p>
<h3 id="책의-구성과-핵심-내용">책의 구성과 핵심 내용</h3>
<p>책은 총 9장으로 구성되어 있으며, 1장과 3~7장에서는 <strong>최적의 영양</strong>, <strong>신체활동</strong> 등 <strong>건강한 생활습관</strong>을 실천하는 데 필요한 <strong>과학적 근거</strong>들을 체계적으로 검토합니다. </p>
<p>특히 인상 깊었던 부분은 오늘날 주요 사망 원인인 만성질환들이 대부분 <strong>생활습관과 밀접한 연관</strong>이 있다는 점입니다. 이는 곧 예방 중심의 헬스케어 AI 솔루션 개발의 중요성을 시사합니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/98aca32d-cb60-465f-a435-38cf9bb5378f/image.png" alt="">
&quot;<strong>미래를 여는 헬스케어 솔루션</strong>&quot; 책의 일부분 
이 구절을 보고선 운동의 필요성에 대해서 뼈저리게 느꼈다..
맨날 앉아있고 잘 움직이지도 않는 나에게 일종의 경각심을 주었다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/2f66b6e9-3f1d-4f10-8d04-dc73cfe4826e/image.png" alt="">
&quot;<strong>미래를 여는 헬스케어 솔루션</strong>&quot; 책의 일부분 
사진보면 아무래도 사람들간의 소통도 건강 측정하는데 도움이 될 수 있다. 소통하면서 환자의 건강상태를 체크하는 과정이 필요할 수 있다. 평소 걸음걸이 수라던지 칼로리 소모, 식이섬유 섭취, 물 섭취 등등 관리할 수 있는 어플리케이션을 제공한다면 사람들의 건강 관리를 할 수 있는 좋은 매개체가 될 수 있을 것이다.</p>
<p>아 요즘 청소년시기에 유해물질(담배, 약물) 접하는 경우가 <strong>심각하게 늘고있다고 한다</strong>. 실제로 미국에서 35세 이상 성인이 흡연으로 인해서 연간 사망자 수는 <strong>48만명</strong>이라고 합니다. (출처: 2014 Surgeon General&#39;s Report, Table 12.4 page 660.) 
폐암으로 인한 사망은 29% 약 <strong>14만명</strong>, 심장 질환은 33% 약 <strong>16만명</strong>이 매년 돌아가신다고 합니다.
실제로 저는 몇 달전에 진행한 프로젝트에서 흡연 예측 관련 프로젝트를 진행했었는데 흡연자들의 건강 지표는 비흡연자에 비해 다른 질병에도 노출되는 가능성이 상당히 높은 것으로 확인되었던 것 같습니다. 
금연을 원하시는 분들을 위한 해결책으로는 니코틴 대체요법과 비니코틴 대체요법으로 나눠서 금연 전략을 다양하게 갖추고 있다고 합니다.</p>
<h3 id="헬스케어-ai-개발자에게-주는-인사이트">헬스케어 AI 개발자에게 주는 인사이트</h3>
<p>의료 데이터 AI 프로젝트를 진행하다 보면, 질병 진단이나 치료에만 초점을 맞추기 쉽습니다. 
왜냐하면 객관적인 지표로 객관적인 판단하여 진단과 치료를 할 수 있기 때문입니다. 
하지만 이 책을 읽으면서 우연하게 갑자기 발생하는 질병에 대해서 건강검진이나 의료진 분들이 환자와의 소통에서도 질병 판단에 중요한 부분으로 작용합니다. 이러한 영역에서 AI헬스케어가 큰 역활을 해줄 수 있다는 점입니다. 저는 모든 사람들이 적절한 관리를 통해 윤택한 삶을 살도록 AI헬스케어 관련해서 공부를 열심히 해보도록 하겠습니다.. <em>(잘 될지는 모르겠지만,,!)</em></p>
<p>이 책은 <strong>오즈코딩스쿨 AI 헬스케어 과정</strong>이나 <strong>의료 AI 개발자 취업을 준비하는 분</strong>들이 한번 읽어보시면 좋을 것 같습니다. 물론 <strong>생활습관의학</strong> 관련해서 관심 있으신 분들도 추천합니다.  기술뿐만 아니라 헬스케어 도메인에 대한 깊은 이해가 경쟁력있는 사회에서 좋은 밑거름이 되지 않을까.... 라는 생각을 해봅네다! </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[일오갓생 Day1] SQL 기초(SQLite), TIL]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day1</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EC%9D%BC%EC%98%A4%EA%B0%93%EC%83%9D-Day1</guid>
            <pubDate>Wed, 24 Dec 2025 13:28:16 GMT</pubDate>
            <description><![CDATA[<h3 id="일오갓생-챌린지-start">일오갓생 챌린지 START</h3>
<blockquote>
<p>**&quot;작은 습관이 인생을 바꾼다.&quot; **</p>
</blockquote>
<pre><code>하루 15분, 10일의 기적을 통해
자신을 성장시키는 시간을 가져보려고 합니다!!</code></pre><h3 id="하루-15분-연휴에도-나를-성장시키는-습관">하루 15분, 연휴에도 나를 성장시키는 습관</h3>
<p>오즈코딩스쿨 AI헬스케어에서 일오갓생 챌린지를 진행한다고 하여 이 시리즈를 기획하였다. 
2025년 12월 24일부터 2026년 1월 2일까지 총 10일간 진행되는 일오갓생 챌린지는 
AI 헬스케어 캠프 수강생들이 연휴에도 꾸준히 학습하고 성장할 수 있도록 돕는 일종의 프로그램이다.</p>
<p><strong>작은 습관</strong>이 <strong>인생</strong>을 바꾼다는 말들은 예전부터 있었다.
*<em>&#39;천 리 길도 한 걸음부터&#39; *</em>라는 속담에서도 보시다시피 아무리 먼 길이나 큰 목표라도 작은 한 걸음이더라도 이러한 노력들이 헛되이지 않는다는 의미를 내제하고 있는 것 같다. (<em>내 취약점인 외국어도 매일 조금씩 공부하고 있다. 이 내용은 나중에 기회되면 풀겠소이다)</em></p>
<p>일오갓생 Day1 에서는 오늘 공부한 내용과 개념들을 정리해볼려고 합니다.</p>
<h3 id="오늘의-핵심-키워드">오늘의 핵심 키워드</h3>
<ul>
<li><strong>Data, Information, Knowledge</strong></li>
<li><strong>Database &amp; RDBMS</strong></li>
<li><strong>Table, Row, Column</strong></li>
<li><strong>Foreign Key &amp; Primary Key</strong></li>
<li><strong>SQL &amp; SQLite</strong></li>
<li><strong>Relational Database 구조</strong></li>
</ul>
<hr>
<h2 id="본론">본론</h2>
<h3 id="1-data란-무엇인가">1. Data란 무엇인가?</h3>
<p>데이터베이스를 이해하기 전에, 먼저 Data의 개념부터 정리해야 한다.</p>
<ul>
<li><strong>Data(데이터)</strong>: 가공되지 않은 원시 정보. 예를 들어 &quot;25&quot;, &quot;2025-12-18&quot; 같은 단순한 값</li>
<li><strong>Information(정보)</strong>: 데이터에 의미가 부여된 것. 예: &quot;나이 25살&quot;, &quot;오늘 날짜 2025-12-18&quot;</li>
<li><strong>Knowledge(지식)</strong>: 정보를 통해 얻은 통찰. 예: &quot;25살은 젊은 나이다&quot;</li>
</ul>
<p>웹 서비스에서 데이터는 사용자 정보, 주문 내역, 게시글 등 다양한 형태로 존재한다. 이런 데이터를 체계적으로 저장하고 관리하기 위해 우리는 <strong>Database</strong>를 사용한다.</p>
<h3 id="2-database의-필요성">2. Database의 필요성</h3>
<p>데이터베이스는 데이터를 효율적으로 저장, 검색, 수정, 삭제할 수 있게 해주는 시스템이다. 웹 서비스의 핵심 요소 중 하나로:</p>
<ul>
<li>대량의 데이터를 안정적으로 보관</li>
<li>빠른 검색과 조회</li>
<li>데이터 간의 관계 설정</li>
<li>동시 다발적인 접근 처리</li>
</ul>
<p>이러한 기능들이 필요하기 때문에 데이터베이스는 필수적이다.</p>
<h3 id="3-relational-database-관계형-데이터베이스">3. Relational Database (관계형 데이터베이스)</h3>
<p>Relational Database는 데이터를 <strong>테이블(Table)</strong> 형태로 저장하며, 테이블 간의 관계를 설정할 수 있는 데이터베이스다.</p>
<h4 id="핵심-구성-요소">핵심 구성 요소:</h4>
<p><strong>Table (테이블)</strong></p>
<ul>
<li>데이터를 저장하는 기본 단위</li>
<li>예: users 테이블, orders 테이블</li>
</ul>
<p><strong>Row (행)</strong></p>
<ul>
<li>테이블의 각 레코드, 하나의 데이터 항목</li>
<li>예: 한 명의 사용자 정보</li>
</ul>
<p><strong>Column (열)</strong></p>
<ul>
<li>데이터의 속성</li>
<li>예: id, name, email</li>
</ul>
<p><strong>Relationship (관계)</strong></p>
<ul>
<li>테이블 간의 연결</li>
<li>Foreign Key를 통해 구현</li>
</ul>
<h4 id="실제-예시">실제 예시:</h4>
<p><strong>users 테이블:</strong></p>
<pre><code>id | name    | email
---|---------|------------------
1  | alex    | alex@example.com
2  | bob     | bob@google.com
3  | charlie | charlie@example.com</code></pre><p><strong>orders 테이블:</strong></p>
<pre><code>id | userid | product | amount
---|--------|---------|-------
1  | 3      | apple   | 2
2  | 1      | banana  | 5</code></pre><p>이 예시에서 orders 테이블의 <code>userid</code>는 users 테이블의 <code>id</code>를 참조하는 <strong>Foreign Key</strong>다.</p>
<h3 id="4-primary-key-vs-foreign-key">4. Primary Key vs Foreign Key</h3>
<p><strong>Primary Key (기본 키)</strong></p>
<ul>
<li>각 레코드를 고유하게 식별하는 값</li>
<li>중복될 수 없고, NULL일 수 없음</li>
<li>예: users 테이블의 id</li>
</ul>
<p><strong>Foreign Key (외래 키)</strong></p>
<ul>
<li>다른 테이블의 Primary Key를 참조</li>
<li>테이블 간의 관계를 설정</li>
<li>예: orders 테이블의 userid → users 테이블의 id</li>
</ul>
<p>이러한 관계 설정을 통해 데이터의 무결성을 유지하고, 효율적인 데이터 관리가 가능해진다.</p>
<h3 id="5-rdbms와-sql">5. RDBMS와 SQL</h3>
<p><strong>RDBMS (Relational Database Management System)</strong></p>
<ul>
<li>관계형 데이터베이스를 관리하는 시스템</li>
<li>대표적인 예: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server</li>
</ul>
<p><strong>SQL (Structured Query Language)</strong></p>
<ul>
<li>데이터베이스와 소통하기 위한 언어</li>
<li>데이터를 조회, 삽입, 수정, 삭제하는 명령어</li>
</ul>
<h4 id="sql의-기본-명령어">SQL의 기본 명령어:</h4>
<p><strong>조회 (Read)</strong></p>
<pre><code class="language-sql">SELECT * FROM users</code></pre>
<p><strong>삽입 (Create)</strong></p>
<pre><code class="language-sql">INSERT INTO users (name, email) VALUES (&#39;alex&#39;, &#39;alex@test.com&#39;)</code></pre>
<p><strong>수정 (Update)</strong></p>
<pre><code class="language-sql">UPDATE users SET email = &#39;bob@test.com&#39; WHERE id = 1</code></pre>
<p><strong>삭제 (Delete)</strong></p>
<pre><code class="language-sql">DELETE FROM users WHERE id = 1</code></pre>
<p>이는 CRUD (Create, Read, Update, Delete) 작업의 기본이 된다.</p>
<h3 id="6-sqlite-실습">6. SQLite 실습</h3>
<p>SQLite는 가볍고 파일 기반으로 작동하는 RDBMS로, 학습 및 소규모 프로젝트에 적합하다. Python과 함께 사용하면 간단하게 데이터베이스를 다룰 수 있다.</p>
<h4 id="python으로-sqlite-사용하기">Python으로 SQLite 사용하기:</h4>
<pre><code class="language-python">import sqlite3

# DB 연결
conn = sqlite3.connect(&#39;example.db&#39;)
cursor = conn.cursor()

# 테이블 생성
cursor.execute(&#39;&#39;&#39;
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT
)
&#39;&#39;&#39;)

# 데이터 삽입
cursor.execute(&quot;INSERT INTO users (name) VALUES (?)&quot;, (&#39;alex&#39;,))
cursor.execute(&quot;INSERT INTO users (name) VALUES (?)&quot;, (&#39;bob&#39;,))

# 변경사항 저장
conn.commit()

# 데이터 조회
cursor.execute(&quot;SELECT id, name FROM users&quot;)
rows = cursor.fetchall()
for row in rows:
    print(row)

# 연결 종료
conn.close()</code></pre>
<p>DB Browser for SQLite 같은 GUI 도구를 사용하면 시각적으로 데이터를 확인하고 관리할 수 있어 학습에 큰 도움이 된다.</p>
<hr>
<h2 id="결론">결론</h2>
<p>헬스케어가 AI를 접목시키는 분야가 블루오션이라는 얘기를 몇 달전에 들었을때 솔깃했다.
그런데 비전공자인 내가 헬스케어AI관련해서 할수있을까? 해서 서치를 해보던 시기가 6월~8월이었다.</p>
<p>이러다가 우연한 계기로 알게된 오즈코딩스쿨 AI헬스케어부트캠프이다. 
지금 이 과정을 거의 3개월 정도 된 것 같다. 지금 열심히 코드 공부하고, 백그라운드 실력을 키우고 있다.</p>
<p>하루하루 시간가는지 모르고 계속 앉아서 노트북이랑 싸움을 하고 있다.
이러다가 노트북이랑 정드는게 아닌지,,</p>
<hr>
<p>#AI헬스케어부트캠프 #의료데이터AI #의료데이터프로젝트 #헬스케어AI개발자 #오즈코딩스쿨AI헬스케어 #의료AI개발자취업 #의료데이터공부방법 #의료데이터실습후기 #AI개발자과정 #실무프로젝트기반학습</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[openCV : 인공지능 핵심 눈(vision)]]></title>
            <link>https://velog.io/@my_yeahjinly_log/openCV-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%95%B5%EC%8B%AC-%EB%88%88vision</link>
            <guid>https://velog.io/@my_yeahjinly_log/openCV-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%95%B5%EC%8B%AC-%EB%88%88vision</guid>
            <pubDate>Thu, 18 Dec 2025 01:12:45 GMT</pubDate>
            <description><![CDATA[<p><strong>내 컴퓨터에  👀눈을 달아준다고? OpenCV의 마법</strong></p>
<p>안녕하세요! 오늘은 인공지능 시대의 핵심 기술 중 하나인 컴퓨터비전과 이를 가능하게 하는 마법의 도구 openCV에 대한 내용입니다.</p>
<p>컴퓨터는 원래 숫자만 아는 똑똑한 계산기였어요. 하지만 이제 컴퓨터도 사람처럼 사진을 보고 &quot;이건 귀여운 고양이네!&quot;, &quot;앞에 차가 지나가고 있어!&quot;라고 말할 수록 하는 기술을 <strong>컴퓨터 비전</strong>이라고 부릅니다. 그리고 이 기술을 우리가 아주 쉽게 사용할 수 있도록 미리 만들어진 도구 상자가 바로 <strong>OpenCV</strong>랍니다.</p>
<p>오늘은 이 도구 상자를 어떻게 설치하고, 어떤 신기한 일들을 할 수 있는지 핵심만 쏙쏙 뽑아 소개해 드릴게요!</p>
<p>오늘의 키워드입니다.</p>
<ol>
<li><p>컴퓨터비전 : 기계에게 시력을 선물해 눈으로 세상을 보고 정보를 이해하는 기술</p>
</li>
<li><p>OpenCV : 누구나 쉽게 쓸 수 있도록 만들어진 가장 유명한 오픈 소스 도구 상자</p>
</li>
<li><p>이미지처리 : 사진 속에 숨겨진 숫자의 비밀</p>
</li>
</ol>
<h2 id="1-컴퓨터-비전-기계에게-시력을-선물해-눈으로-세상을-보고-정보를-이해하는-기술">1. 컴퓨터 비전: 기계에게 시력을 선물해 눈으로 세상을 보고 정보를 이해하는 기술</h2>
<p>컴퓨터 비전의 목표는 기계가 사진이나 비디오를 보고 스스로 의사 결정을 내리게 하는 걸 뜻합니다. 마치 우리가 눈으로 앞을 보고 걷는 것과 같죠! </p>
<p>주요 작업 방법은 다음과 같습니다.</p>
<ul>
<li><p>이미지 분류: 사진 속에 있는 게 &quot;고양이&quot;인지 &quot;개&quot;인지 맞히는 거예요. </p>
</li>
<li><p>객체 검출: 물체가 어디에 있는지 네모 칸으로 딱 표시해 주는 기술이죠. </p>
</li>
<li><p>객체 추적: 비디오에서 움직이는 자동차나 사람의 경로를 끝까지 따라가는 기능이에요. </p>
</li>
</ul>
<h2 id="2-opencv-누구나-쉽게-쓸-수-있도록-만들어진-가장-유명한-오픈-소스-도구-상자">2. OpenCV: 누구나 쉽게 쓸 수 있도록 만들어진 가장 유명한 오픈 소스 도구 상자</h2>
<p>OpenCV는 실시간 비전 앱을 만들기 위해 C++로 태어났지만, 파이썬과 아주 친해서 공부하기 정말 좋아요. </p>
<ul>
<li><p>성능이 최고예요: 핵심 기능이 C/C++로 되어 있어 엄청나게 빠르고 효율적이에요. </p>
</li>
<li><p>어디서든 쓸 수 있어요: 윈도우, 리눅스, 안드로이드, 아이폰까지 모든 곳에서 작동한답니다. </p>
</li>
<li><p>무엇을 하나요?: 이미지 읽기/쓰기, 필터링, 특징점 찾기, 심지어 딥러닝(AI) 모델을 실행하는 것까지 못 하는 게 없어요. </p>
</li>
</ul>
<h2 id="3-이미지-처리-사진-속에-숨겨진-숫자의-비밀">3. 이미지 처리: 사진 속에 숨겨진 숫자의 비밀</h2>
<p>우리 눈에는 예쁜 풍경화지만, 컴퓨터는 모든 사진을 숫자 격자판으로 읽습니다. </p>
<ul>
<li><p>픽셀(Pixel): 이미지를 이루는 가장 작은 점이에요. 이 점 하나하나가 밝기 숫자를 가지고 있죠. </p>
</li>
<li><p>흑백(Gray Scale): 0(검은색)부터 255(흰색)까지의 숫자 하나로 밝기만 표현해요. </p>
</li>
<li><p>컬러(BGR): 파랑, 초록, 빨강 세 개의 채널이 합쳐져 색을 만들어요.  조심할 점! OpenCV는 RGB가 아니라 BGR 순서로 숫자를 저장해요.</p>
</li>
</ul>
<h2 id="💻-코드-리뷰-직접-해보는-이미지-처리-기초">💻 [코드 리뷰] 직접 해보는 이미지 처리 기초</h2>
<p> 이제 배운 내용을 코드로 직접 써보도록 하겠습니다.</p>
<p> <img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/0af2b7fb-b46e-483d-b019-f58175ba070a/image.png" alt=""></p>
<p>이걸 visual studio code에서 실행시켜줍니다. 이때 설치가 되어있어야 되는 도구가 있습니다. opencv-python(필수), opencv-python-headless(보조 도구, 선택), numpy(필수), pillow(선택), matplotlib(필수), packaging(선택), six(선택), tornado(선택) 이렇게 있습니다</p>
<p>어쨋거나 필수 3가지만 설치하셔도 됩니다. 이렇게 다 해서 실행을 시켜준다면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/5d401b47-d1eb-4a5d-8514-4c095d678c77/image.png" alt="">
원본 침팬치사진이</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/30f80cbe-f2b5-4e7c-aeb2-16d7df5da880/image.png" alt="">
gray scale된 사진을 볼 수 있습니다.</p>
<p>아 그냥 흑백 사진보는 것 같다구요?</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/edc84347-e399-4cd8-9be4-66b586dc37fa/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/580e1641-f12c-42e6-986c-5c5a33d2511a/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f38123d8-e17b-4d6f-8fda-d141e073de14/image.png" alt=""></p>
<p>이번엔 원본 + 3가지 (mean blur, gaussian blur, median blur)를 보실수 있는 코드입니다.
실행하시면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/2b6b1efb-2229-486c-b30c-53198e1a7941/image.png" alt=""></p>
<p>이런 사진을 볼 수 있습니다.</p>
<h3 id="결론---나만의-기계의-스마트한-눈을-가져보세요">결론 - 나만의 기계의 스마트한 눈을 가져보세요!</h3>
<p>오늘 우리는 컴퓨터가 어떻게 세상을 보는지, 그리고 OpenCV라는 도구 상자를 어떻게 사용하는지 알아보았습니다.</p>
<ul>
<li><p>컴퓨터에게 사진은 <strong>숫자로 이루어진 격자(픽셀)</strong>이다! </p>
</li>
<li><p>OpenCV 함수들을 이용해 사진을 읽고, 자르고, 흑백으로 만들고, 글씨도 쓸 수 있다! </p>
</li>
<li><p>이미지 처리를 할때 이제 숫자로 바꿔서 여러 기술로 사용될 수 있습니다.</p>
</li>
</ul>
<p>컴퓨터 비전은 자율주행 자동차, 얼굴 인식 결제 등 우리 삶 곳곳에 이미 들어와 있습니다. 여러분도 오늘 배운 기초 코드를 시작으로 세상을 이롭게 하는 멋진 &#39;디지털 눈&#39;을 만들어보시는 건 어떨까요?</p>
<p>자료 찾아보다가 openCV에 얼굴 인식을 합친 영상이 있드래요??</p>
<p><a href="https://youtu.be/zw3hxrybXr8?si=ub0ujENWGSK7Nlyu">https://youtu.be/zw3hxrybXr8?si=ub0ujENWGSK7Nlyu</a></p>
<p>오 내가 배운걸 이런식으로 써먹을수도 있겠구나~ 신기해서
이렇게 공유해봅니다. 😎</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[딥러닝 기초 : 텐서부터 최신 모델 정리]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-%ED%85%90%EC%84%9C%EB%B6%80%ED%84%B0-%EC%B5%9C%EC%8B%A0-%EB%AA%A8%EB%8D%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-%ED%85%90%EC%84%9C%EB%B6%80%ED%84%B0-%EC%B5%9C%EC%8B%A0-%EB%AA%A8%EB%8D%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 08 Dec 2025 16:46:21 GMT</pubDate>
            <description><![CDATA[<p>이번 포스팅에서는 딥러닝과 그중에서 파이토치(PyTorch)를 활용한 기초 과정과 주요 모델들에 대해 살펴보겠습니다. 이미지 인식 분야(ILSVRC)의 발전사를 따라가다 보면 딥러닝 네트워크가 어떻게 깊어지는지 볼 수 있습니다. </p>
<p>이미지 인식 분야(ILSVRC)의 발전사</p>
<ol>
<li><strong>AlexNet (2012): 딥러닝의 빅뱅, 전설의 시작</strong></li>
</ol>
<p>&quot;기존 강자들을 제치고 압도적인 1위 달성&quot; 
8개의 레이어만으로 당시 16.4%라는 놀라운 오차율을 기록하며 딥러닝의 부흥을 알린 상징적인 모델입니다.</p>
<ol start="2">
<li><strong>VGGNet (2014): &quot;깊을수록 좋다&quot; 심플함의 미학</strong></li>
</ol>
<p>&quot;작은 3x3 필터로 쌓아 올린 견고한 성&quot; 
모델의 깊이(Depth)가 성능의 핵심임을 증명했습니다. 3x3 필터를 반복 사용하는 단순한 구조로 16~19층까지 깊이를 늘려, 지금도 널리 사랑받는 스테디셀러입니다.</p>
<ol start="3">
<li><strong>GoogLeNet (Inception, 2014): 효율성의 극치, 인셉션의 마법</strong></li>
</ol>
<p>&quot;옆으로 넓히고 위로 깊게, 가성비 끝판왕&quot; 
인셉션 모듈과 1x1 컨볼루션을 활용해 연산량은 확 줄이고 깊이는 22층까지 늘렸습니다. 파라미터 다이어트에 성공한 똑똑한 모델입니다.</p>
<ol start="4">
<li><strong>ResNet (2015): 마의 152층을 뚫다, 인간을 뛰어넘은 혁명</strong></li>
</ol>
<p>&quot;지름길(Skip Connection)을 내어 한계를 돌파하다&quot; 
층이 깊어지면 학습이 안 되던 고질병을 &#39;잔차 학습&#39;으로 해결했습니다. 무려 152층을 쌓아 올리며 오차율 3.57%를 기록, 드디어 사람의 인식 능력을 뛰어넘었습니다.</p>
<ol start="5">
<li><strong>DenseNet (2017): 모든 층을 연결하라, 빽빽한 연결의 힘</strong></li>
</ol>
<p>&quot;정보의 흐름을 꽉 잡은 그물망 구조&quot; 
ResNet을 발전시켜 모든 레이어가 서로 정보를 주고받도록 설계했습니다. 정보의 흐름을 극대화하여 파라미터 효율을 극한으로 끌어올린 모델입니다.</p>
<p>이러한 모델들의 발전 과정을 이해하면, 파이토치로 구현할 기초 신경망이 어떤 원리로 동작하는지 더 깊이 이해할 수 있습니다.</p>
<p>딥러닝에 대해서 알기 전에, 용어 정리부터 하겠습니다.</p>
<h4 id="--딥러닝-vs-머신러닝의-차이점">- 딥러닝 vs 머신러닝의 차이점</h4>
<p>*<em>딥러닝(Definition of Deep Learning)이란? *</em></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/4f1ac33a-c320-407d-b767-a18a0b3da13e/image.png" alt=""></p>
<p>&quot;머신러닝의 부분집합이자, 인간의 뇌를 모방한 심층 신경망&quot;</p>
<p>딥러닝(Deep Learning)은 머신러닝(Machine Learning)의 하위 개념입니다. 인공신경망(Artificial Neural Network)을 기초로 하여, 여러 비선형 변환 기법의 조합을 통해 높은 수준의 추상화(abstractions)를 시도하는 기계 학습 알고리즘의 집합입니다.</p>
<p>여기서 <strong>딥(Deep)</strong>이라는 단어는 신경망의 층(Layer)이 깊다는 것을 의미합니다. 입력층(Input)과 출력층(Output) 사이에 있는 <strong>은닉층(Hidden Layer)</strong>을 여러 겹 쌓아 올려, 데이터에 내재된 복잡한 패턴과 특징을 컴퓨터가 스스로 학습하게 만드는 것이 핵심입니다.</p>
<p>딥러닝과 머신러닝의 차이
: <strong>누가 특징(Feature)을 추출하는가?</strong>에 있습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/cfc3371b-5d15-4b51-a770-087a5eb28bdf/image.png" alt=""></p>
<p>① 머신러닝 (Machine Learning)</p>
<ul>
<li><p>특징 추출 (Feature Extraction) : 사람이 개입합니다. 데이터를 컴퓨터가 이해할 수 있도록 사람이 직접 가공하고 특징을 정의해(Hand-crafted) 주어야 합니다.</p>
</li>
<li><p>작동 방식 : 사람이 정제한 데이터를 알고리즘에 입력하면, 알고리즘이 이를 바탕으로 학습합니다.</p>
</li>
<li><p>예시 : 스팸 메일 필터 (특정 단어 빈도수 등을 사람이 지정)</p>
</li>
</ul>
<p>② 딥러닝 (Deep Learning)</p>
<ul>
<li><p>특징 추출 (Feature Extraction) : 기계가 스스로 합니다. 데이터(Raw Data)를 그대로 넣어주면, 네트워크가 학습 과정에서 스스로 중요한 특징을 찾아냅니다. (End-to-End Learning)</p>
</li>
<li><p>작동 방식 : 데이터의 양이 많을수록 성능이 비약적으로 향상되지만, 그만큼 고성능 GPU와 긴 학습 시간이 필요합니다.</p>
</li>
<li><p>예시 : 알파고, 자율주행, 이미지 인식 (고양이 사진을 주면 귀, 털, 눈의 특징을 스스로 파악)</p>
</li>
</ul>
<ol start="3">
<li>한눈에 보는 비교 요약</li>
</ol>
<table>
<thead>
<tr>
<th align="left">비교 항목</th>
<th align="center">머신러닝 (Machine Learning)</th>
<th align="right">딥러닝 (Deep Learning)</th>
</tr>
</thead>
<tbody><tr>
<td align="left">데이터 양</td>
<td align="center">적은 양의 데이터로도 어느 정도 성능 발휘</td>
<td align="right">방대한 양의 데이터(Big Data)가 필수적</td>
</tr>
<tr>
<td align="left">하드웨어</td>
<td align="center">일반 CPU로도 학습 가능</td>
<td align="right">고성능 GPU(병렬 연산)가 필수적</td>
</tr>
<tr>
<td align="left">특징 추출</td>
<td align="center">사람이 직접 선택 (Manual)</td>
<td align="right">알고리즘이 자동 추출 (Automatic)</td>
</tr>
<tr>
<td align="left">해석 가능성</td>
<td align="center">결과에 대한 원인 분석이 비교적 쉬움기</td>
<td align="right">내부가 복잡하여 해석이 어려움 (Black Box)</td>
</tr>
<tr>
<td align="left">학습 시간</td>
<td align="center">비교적 짧음</td>
<td align="right">매우 김 (몇 시간 ~ 며칠)</td>
</tr>
</tbody></table>
<p>이렇게만 보면 머신러닝과 딥러닝은 조금 차이가 있습니다.
머신러닝은 사람이 직접 특징을 찾아줘야 됩니다. 데이터가 복잡해질수록 사람이 찾을 수 있는 특징에는 한계가 생기는 겁니다. 그래서 이 한계점을 딥러닝이 해결을 해주는 역할을 합니다.</p>
<p>왜 우리는 딥러닝을 배워야 할까요?</p>
<ol>
<li><p>데이터가 폭발하는 시대 (Big Data) 데이터의 양이 늘어날수록 전통적인 머신러닝 모델의 성능은 정체되지만, 딥러닝 모델의 성능은 계속해서 향상됩니다.</p>
</li>
<li><p>하드웨어의 발전 (GPU) 과거에는 연산량이 너무 많아 불가능했던 심층 신경망 학습이, 강력한 GPU의 등장으로 가능해졌습니다.</p>
</li>
<li><p>압도적인 성과 (SOTA) 이미지 인식, 자연어 처리(ChatGPT), 음성 인식 등 복잡한 문제에서 딥러닝은 인간의 수준을 뛰어넘는 성능(State Of The Art)을 보여주고 있습니다.</p>
</li>
</ol>
<p>결국, <strong>데이터가 넘쳐나고 컴퓨터가 똑똑해진 지금, 가장 강력한 도구인 딥러닝을 배우는 것은 필수</strong>라고 할 수 있습니다.</p>
<p>그렇다면 이 강력한 딥러닝을 구현하기 위한 도구, <strong>파이토치(PyTorch)</strong>의 기초부터 시작해보도록 하겠습니다.</p>
<p>핵심 키워드는 다음과 같이 정리할 수 있습니다.</p>
<ol>
<li>Tensor (텐서): 파이토치의 핵심 자료형, 텐서의 <strong>생성</strong>과 <strong>연산법</strong>을 익힙니다.</li>
<li>Autograd (자동 미분): 딥러닝 학습의 필수 과정인 <strong>역전파</strong>를 알아서 계산해주는 자동 미분 기능을 실습합니다.</li>
<li>Neural Networks (신경망): <strong>torch.nn</strong> 패키지를 활용해 레고 블록을 쌓듯 나만의 신경망 모델을 설계합니다.</li>
<li>Training Classifier (분류기 학습): <strong>CIFAR-10</strong> 데이터셋으로 CNN 모델을 직접 학습시켜 실전 이미지 분류기를 구현합니다.</li>
</ol>
<h2 id="1-1-tensor-텐서">1-1. Tensor (텐서)</h2>
<p>먼저 텐서를 생성하고, 초기화를 해줘야합니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/1802fb18-0e73-4b29-bc08-3897abaf6f65/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/462f4b86-1323-40a5-9c8a-616f290b69b8/image.png" alt=""></p>
<h2 id="1-2-operations-텐서-연산">1-2. Operations (텐서 연산)</h2>
<p>텐서 간의 덧셈 연산은 여러 가지 문법을 지원합니다. 상황에 맞게 편한 방식을 사용하면 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/956bc541-e704-4ec9-a8bc-7b867309cba8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/2a00544f-fa9f-4a8d-baea-41d5d3c98cba/image.png" alt=""></p>
<p>인덱싱(Indexing)이나 크기 변경(Resizing)도 가능합니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/953b187c-ac1f-498f-a6f6-db04abfe038b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/42c0b2a7-96ff-4c8f-a453-15197be390d1/image.png" alt=""></p>
<h2 id="1-3-numpy와의-변환-bridge">1-3. NumPy와의 변환 (Bridge)</h2>
<p>파이토치 텐서와 넘파이 배열은 메모리를 공유하기 때문에 변환이 매우 쉽고 빠릅니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/e3f476cc-47dd-4bfb-9d62-2bb57bfcff9d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/b58c8104-b12b-42e6-9594-f6da126827ae/image.png" alt=""></p>
<p>이와 반대로 넘파이에서 텐서로 변환하는 것도 가능합니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/c55b4734-072f-4a11-a520-05d2b14061c9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/6c17acd2-3103-4b4f-b1b0-3ba30873bb0b/image.png" alt=""></p>
<h2 id="2-autograd-자동-미분">2. Autograd (자동 미분)</h2>
<p>딥러닝 학습의 핵심은 <strong>역전파(Backpropagation)</strong>입니다. 파이토치의 autograd 패키지는 텐서의 모든 연산에 대해 자동으로 미분을 계산해줍니다.</p>
<p>requires_grad=True로 설정하면, 해당 텐서에서 이루어진 모든 연산을 추적합니다.</p>
<p>![](<a href="https://velog.velcdn.com/images/my_yeahjinly_log/post/5e5421fe-d1f4-4db1-bb4b-33d41442ad42/image.png">https://velog.velcdn.com/images/my_yeahjinly_log/post/5e5421fe-d1f4-4db1-bb4b-33d41442ad42/image.png</a></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/a2468c1f-d575-40d9-b94f-f6e463885ac7/image.png" alt=""></p>
<p>이 과정을 통해 우리가 직접 복잡한 미분 공식을 풀지 않아도, 파이토치가 알아서 기울기를 계산해 줍니다.</p>
<h2 id="3neural-networks-신경망">3.Neural Networks (신경망)</h2>
<p>이제 torch.nn 패키지를 사용하여 실제 신경망을 정의하고 학습시켜 보겠습니다.</p>
<ol>
<li>네트워크 정의 (Define the Network)
nn.Module을 상속받아 클래스 형태로 모델을 정의합니다.</li>
</ol>
<p>![](<a href="https://velog.velcdn.com/images/my_yeahjinly_log/post/b9584968-6a94-4e36-93d0-e9e918243a80/image.png">https://velog.velcdn.com/images/my_yeahjinly_log/post/b9584968-6a94-4e36-93d0-e9e918243a80/image.png</a></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d46c4fc9-c775-4f2c-bdde-ade7b4790495/image.png" alt=""></p>
<ol start="2">
<li>손실 함수와 옵티마이저 (Loss &amp; Optimizer)
모델이 얼마나 틀렸는지 계산할 손실 함수와, 가중치를 업데이트할 옵티마이저를 정의합니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/0c81dbc0-1387-4b77-bc57-0b9fbd0efb57/image.png" alt=""></p>
<ol start="3">
<li>학습 루프 (Training Loop)
데이터를 반복해서 모델에 넣고, 오차를 계산하고, 가중치를 수정하는 실제 학습 과정입니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/e4daf83c-d300-4fea-b036-241d57f45ecb/image.png" alt=""></p>
<p>오늘 포스팅에서는 <strong>딥러닝의 역사적인 주요 모델들(AlexNet ~ DenseNet)</strong>부터 시작해 딥러닝과 머신러닝의 차이, 그리고 <strong>파이토치(PyTorch)</strong>를 이용한 실제 구현 기초까지 알아보았습니다.</p>
<p><strong>모델의 진화</strong>: 딥러닝 모델은 더 깊게(Deep), 더 효율적으로 발전해 왔습니다.</p>
<p><strong>파이토치의 핵심</strong>:</p>
<p><strong>Tensor</strong>: GPU 연산이 가능한 기본 데이터 구조</p>
<p><strong>Autograd</strong>: 복잡한 미분을 알아서 해주는 자동 미분 시스템</p>
<p><strong>nn.Module</strong>: 레고 블록처럼 쌓아 올리는 신경망 구조</p>
<p>이 기초 과정은 앞으로 우리가 만들게 될 복잡한 AI 모델의 중요한 내용이 되지 않을까 생각합니다.
그래서 다음에 기회가 된다면 딥러닝 관련한 내용을 이야기해보도록 하겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/cee67bb0-81e5-4f81-86e2-d2c89da25287/image.png" alt=""></p>
<p>평일에 어김없이 노트북을 보고 있는데 바깥 노을진 풍경이 너무 이뻐서 창문 열고 찍어보았습니다!!
사진 색 보정을 했는데 제 눈으로 본 색감이 나오진 않녜여,, 내 손이 덩-손인 탓인가? 🕴🏻🌿
요즘 5시가 좀 지나면 해가 지면서 어둑어둑해지면서 그와 동시에 바깥에서 한기가 안으로 들어와 너무 추워집니다...  이불속으로 뛰쳐들어가서 귤을 까먹고 쉬고 싶은 마음이 듭니다,, 
얘기하다 보니까 같이 수업듣는 분들 중에 저랑 나이가 같은 칭구 한명이 있는데 그 친구가 귤 껍질로 예술 작품을 만든게 생각나네여
애니알못이라 무슨 캐릭터인지는 지금도 모르는데 약간 이마에,,,,,, 톱(??)같은거 꼽고 다니던데 훌쩍 💦 아직 못(안)본 애니가 수두룩 빽빽하다.. 나약하다 반성해야듸</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 7일차 - 앙상블 학습 ② Boosting 계열]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-7%EC%9D%BC%EC%B0%A8-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Boosting-%EA%B3%84%EC%97%B4</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-7%EC%9D%BC%EC%B0%A8-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Boosting-%EA%B3%84%EC%97%B4</guid>
            <pubDate>Thu, 20 Nov 2025 17:35:03 GMT</pubDate>
            <description><![CDATA[<p>앙앙앙 ૮ •.• ა
앙상블!!!
<a href="https://youtu.be/3IKj9VeeYXM?si=inVctZGzrLWFufJw">앙상블 - 시카고 뮤지컬 공연 영상</a></p>
<p>오늘의 키워드</p>
<ol>
<li>Boosting : 머신러닝, 혼자가 아닌 팀으로 일하기</li>
<li>AdaBoost : 잘못 분류된 데이터에 가중치 주기</li>
<li>Gradient Boosting : 잔차 학습하기</li>
<li>과적합 제어 및 하이퍼파라미터 전략</li>
</ol>
<h2 id="1-🚀-부스팅boosting--머신러닝-혼자가-아닌-팀으로-일하기">1. 🚀 부스팅(Boosting) : 머신러닝, 혼자가 아닌 팀으로 일하기</h2>
<p>안녕하세요! 오늘은 인공지능이 문제를 풀 때 <strong>&#39;팀워크&#39;</strong>를 발휘하는 마법 같은 방법, 바로 앙상블 학습 중에서도 특히 강력한 부스팅(Boosting) 계열을 아주 쉽게 설명해 드릴게요. 마치 약한 친구들을 모아 최강의 팀을 만드는 과정과 같아요!</p>
<ol>
<li>🤝 부스팅 vs. 배깅: 팀워크의 스타일 차이
앙상블 학습은 여러 개의 약한 모델(Weak Learner)을 모아 하나의 강력한 모델(Strong Learner)을 만드는 전략입니다. 팀워크에도 스타일이 있죠.</li>
</ol>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="center">비유</th>
<th align="right">핵심</th>
</tr>
</thead>
<tbody><tr>
<td align="left">배깅 (Bagging)</td>
<td align="center">여러 명이 동시에 문제를 풀고 답을 평균</td>
<td align="right">병렬 학습  (각자 알아서 풀고 취합)</td>
</tr>
<tr>
<td align="left">부스팅 (Boosting)</td>
<td align="center">첫 번째 사람이 틀린 문제를 두 번째 사람이 집중해서 풀기</td>
<td align="right">순차적 학습  (이전 모델의 실수를 다음 모델이 보완)</td>
</tr>
</tbody></table>
<p>부스팅의 아이디어: 수학 문제집을 푸는 것과 같아요.
단계별로 나타내자면</p>
<p>1단계. 처음엔 쉬운 문제부터 풀기 (약한 학습기 1).
2단계. 틀린 문제를 표시하고 다시 풀기 (약한 학습기 2).
3단계. 또 틀린 문제에 더 집중하기 (약한 학습기 3).
4단계. 결론 ➡️  결국 모든 문제를 풀 수 있게 됩니다.</p>
<h2 id="2-🎯-adaboost-잘못-분류된-데이터에-가중치-주기">2. 🎯 AdaBoost: 잘못 분류된 데이터에 가중치 주기</h2>
<p>AdaBoost는 Adaptive(적응적으로)로 어렵게 분류된 샘플에 가중치를 높여가며 학습하는 최초의 실용적인 부스팅 알고리즘입니다.</p>
<p>핵심 원리 (가중치 업데이트)</p>
<p>AdaBoost는 다음 두 가지를 활용합니다:</p>
<ol>
<li>데이터 가중치 (Data Weights): 다음 모델에게 &quot;이 데이터는 중요해! 틀리면 안 돼!&quot;라고 알려주는 역할입니다.</li>
</ol>
<ul>
<li>맞은 데이터: 가중치 감소합니다.</li>
<li>틀린 데이터: 가중치 증가. $\rightarrow$ 다음 모델은 가중치가 큰 데이터에 더 집중합니다.</li>
</ul>
<ol start="2">
<li>모델 신뢰도 (Model Confidence): 각 약한 학습기가 얼마나 믿을 만한지를 나타내는 값입니다.</li>
</ol>
<ul>
<li>에러율이 낮을수록 (정확할수록): 신뢰도 높다.</li>
<li>최종 예측: 정확한 모델(신뢰도 높은 모델)의 의견을 더 중요하게 반영하여 가중 투표로 결합합니다.</li>
</ul>
<p>✨ AdaBoost 알고리즘 단계 </p>
<table>
<thead>
<tr>
<th align="left">단계</th>
<th align="center">설명</th>
<th align="right">공식</th>
</tr>
</thead>
<tbody><tr>
<td align="left">초기화</td>
<td align="center">모든 샘플의 가중치를 동일하게 설정합니다</td>
<td align="right">$w_i = 1/N$</td>
</tr>
<tr>
<td align="left">오차 계산</td>
<td align="center">$t$번째 약한 분류기가 틀린 샘플들의 가중치 합을 계산합니다.</td>
<td align="right">$\epsilon_t = \sum_i w_i \cdot \mathbb{I}(y_i \neq h_t(x_i))$</td>
</tr>
<tr>
<td align="left">분류기 중요도</td>
<td align="center">오차가 작을수록 (정확할수록) 이 모델의 신뢰도($\alpha_t$)는 커집니다34.</td>
<td align="right">$\alpha_t = 0.5 \cdot \log((1-\epsilon_t) / \epsilon_t)$</td>
</tr>
<tr>
<td align="left">가중치 업데이트</td>
<td align="center">틀린 샘플은 가중치를 증가($e^{\alpha_t}$), 맞은 샘플은 감소($e^{-\alpha_t}$)시킵니다36.</td>
<td align="right">맞은 경우: $w_{t+1}(i) = w_t(i) \times e^{-\alpha_t}$ 37틀린 경우: $w_{t+1}(i) = w_t(i) \times e^{\alpha_t}$ 38</td>
</tr>
<tr>
<td align="left">정규화</td>
<td align="center">다음 학습을 위해 모든 가중치의 합을 1로 만듭니다.</td>
<td align="right">$W_{\text{new}} = W / \sum W$</td>
</tr>
<tr>
<td align="left">최종 예측</td>
<td align="center">모든 약한 학습기의 예측을 신뢰도($\alpha_t$)만큼 가중 투표합니다41.</td>
<td align="right">$H(x) = \text{sign}(\sum_{t=1}^T \alpha_t \cdot h_t(x))$</td>
</tr>
</tbody></table>
<h2 id="3-📉-gradient-boosting-gbm-잔차를-학습하기">3. 📉 Gradient Boosting (GBM): <strong>&#39;잔차&#39;</strong>를 학습하기</h2>
<p>AdaBoost가 분류에 집중했다면, Gradient Boosting은 잔차(Residual), 즉 <strong>&#39;오차&#39;</strong>를 학습하는 방식으로 더욱 일반화된 부스팅 알고리즘입니다.</p>
<p>핵심 원리 (잔차 학습)</p>
<ol>
<li><p>1차 모델로 예측: 첫 번째 모델이 예측을 합니다 (예: 78.75점).</p>
</li>
<li><p>잔차 계산: 실제값과 예측값의 차이(오차)를 계산합니다. (예: 실제 95점 - 예측 78.75점 = 오차 +16.25점) .</p>
</li>
<li><p>잔차 학습: 두 번째 모델은 이 오차(잔차) +16.25점을 예측하도록 학습합니다.</p>
</li>
<li><p>최종 예측: 초기 예측에 각 모델의 잔차 예측값을 합산합니다.</p>
</li>
</ol>
<p>➡️ 경사하강법과의 연결: 잔차(오차)를 학습하는 것은 사실 손실 함수(Loss Function)를 최소화하는 <strong>경사하강법(Gradient Descent)</strong>의 원리를 적용하는 것과 같습니다.</p>
<p>✨ GBM 알고리즘 단계 (코드로 보는 공식)</p>
<table>
<thead>
<tr>
<th align="left">혁신 요소</th>
<th align="center">GBM</th>
<th align="center">XGBoost</th>
<th align="right">비유</th>
</tr>
</thead>
<tbody><tr>
<td align="left">수학적 근거</td>
<td align="center">1차 미분 (방향만 알려줌)</td>
<td align="center">1차 + 2차 미분 (방향 + 곡률)</td>
<td align="right">브레이크: 급브레이크 vs. 거리 계산 후 적절한 브레이크기화</td>
</tr>
<tr>
<td align="left">학습 속도</td>
<td align="center">느림 (순차 처리)</td>
<td align="center">매우 빠름 (병렬 처리 지원)</td>
<td align="right">요리: 혼자 하나씩 vs. 여러 명이 동시에</td>
</tr>
<tr>
<td align="left">과적합 제어</td>
<td align="center">기본 수준</td>
<td align="center">강력한 정규화 ($\gamma, \lambda$ 등) 내장</td>
<td align="right">학생 평가: 시험 점수만 vs. 이해도/응용력 종합 평가</td>
</tr>
<tr>
<td align="left">결측치 처리</td>
<td align="center">사전 전처리 필수</td>
<td align="center">자동 처리 (최적의 방향을 학습)</td>
<td align="right">설문조사: 빈칸 에러 vs. 빈칸 자동 처리</td>
</tr>
<tr>
<td align="left">트리 최적화</td>
<td align="center">Pre-pruning (미리 제한)</td>
<td align="center">Post-pruning (다 자란 후 불필요한 가지 제거)</td>
<td align="right">나무 관리: 성장 중 강제 중단 vs. 다 자란 후 불필요한 가지치기</td>
</tr>
<tr>
<td align="left">이걸보면 XGBoost는 GBM보다 더 빠르고 , 더 정확하며 , 대용량 데이터와 실전 환경(경진대회, 프로덕션)에 가장 적합한 알고리즘이라고 판단이 됩니다.</td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<h2 id="4-과적합-제어-및-하이퍼파라미터-전략">4. 과적합 제어 및 하이퍼파라미터 전략</h2>
<p>아무리 좋은 모델이라도 과적합이 되면 소용이 없습니다. 훈련 데이터는 100점이지만, 테스트 데이터에서는 엉터리가 되면 안됩니다. 이를 막는 전략이 4가지 있습니다.</p>
<table>
<thead>
<tr>
<th align="left">전략</th>
<th align="center">설명</th>
<th align="right">XGBoost 파라미터</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Learning Rate</td>
<td align="center">각 모델의 기여도를 작게($\eta=0.01\sim0.1$) 만들어 천천히 학습 (Shrinkage)81818181.</td>
<td align="right">learning_rate (eta)</td>
</tr>
<tr>
<td align="left">Tree 제약</td>
<td align="center">트리가 너무 깊어지거나 복잡해지는 것을 막습니다.</td>
<td align="right">max_depth, min_samples_split</td>
</tr>
<tr>
<td align="left">Subsampling</td>
<td align="center">각 모델을 학습할 때 데이터나 특성의 일부만 사</td>
<td align="right">subsample, colsample_bytree</td>
</tr>
<tr>
<td align="left">Early Stopping</td>
<td align="center">검증 데이터 성능이 더 이상 개선되지 않으면 학습을 중단하여 최적의 반복 횟수를 찾습니다.</td>
<td align="right">early_stopping_rounds</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 6일차 - 앙상블 학습 ① Bagging과 Random Forest]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-6%EA%B0%95-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Bagging%EA%B3%BC-Random-Forest</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-6%EA%B0%95-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Bagging%EA%B3%BC-Random-Forest</guid>
            <pubDate>Thu, 20 Nov 2025 09:05:23 GMT</pubDate>
            <description><![CDATA[<p><strong>🌲 숲은 나무보다 강하다: Bagging과 Random Forest 쉽게 이해하기</strong>
안녕하세요! 머신러닝을 공부하다 보면 앙상블(Ensemble)이라는 말을 정말 자주 듣게 됩니다. 혹시 &quot;여러 전문가에게 의견을 구하면 더 좋은 결론이 나온다&quot;는 이야기 들어보셨나요? 앙상블 학습이 바로 그 아이디어에서 출발합니다.</p>
<p>한 명의 천재적인 모델(예: Decision Tree)도 훌륭하지만, 가끔은 훈련 데이터에 너무 집착(과적합)하거나 데이터가 조금만 바뀌어도 예측이 널뛰는(불안정성) 문제를 보이곤 합니다.</p>
<p>이를 해결할 수 있는게 바로 앙상블(Ensemble)!!
그 OOT에서 🎬 영화 추천을 받을 때도 앙상블의 원리가 숨어 있습니다.</p>
<p><strong>알고리즘 1 (장르 기반)</strong>: 당신은 액션을 좋아하니, 이 영화는 4.5점일 것입니다.</p>
<p><strong>단일 모델의 한계</strong>: 한 가지 기준(장르)만으로 예측하면 편향되거나 놓치는 부분이 생깁니다. 액션 영화라도 스토리가 별로일 수 있죠.
이를 앙상블을 이용해 집단 지성을 발휘하면 좀 더 나은 결과를 얻을 수 있습니다.</p>
<p><strong>여러 알고리즘의 결합</strong>: 장르, 감독, 출연 배우, 그리고 다른 사용자들의 평가 패턴까지 여러 분석 결과를 종합하여 이 영화는 4.3점이며, 당신에게 92% 확률로 추천합니다.</p>
<p>🔑 오늘 배울 내용 핵심 키워드</p>
<ol>
<li>앙상블(Ensemble): 여러 개의 모델을 결합하여 더 강력하고 안정적인 하나의 모델을 만드는 기법입니다. </li>
<li>배깅(Bagging): Bootstrap Aggregating의 줄임말, 자기 자신의 부츠끈(bootstrap)을 잡아당겨 자신을 들어올린다는 불가능한 일 + 여러 모델의 예측을 하나로 합치는 과정(Aggregating) = 같은 데이터에서 다른 관점을 가진 여러 모델을 만들고,이들의 집단 지성을 활용하자!</li>
<li>OOB(Out-of-Bag): 부트스트랩 샘플링 시 선택되지 않은 데이터들(약 36.8%)을 말하며, 이를 공짜 검증 세트처럼 활용할 수 있습니다. </li>
<li>랜덤 포레스트(Random Forest): 배깅에 &#39;특성 무작위 선택&#39;을 추가하여, 각 트리의 다양성을 극대화하고 상관관계를 낮춘 매우 강력한 앙상블 모델입니다.</li>
</ol>
<h2 id="2-🛠️-집단-지성을-만드는-마법-bagging-배깅">2. 🛠️ 집단 지성을 만드는 마법: Bagging (배깅)</h2>
<p>: Bagging은 Bootstrap Aggregating의 줄임말입니다. 이는 불안정한 Decision Tree의 약점인 분산(Variance)을 줄이는데 탁월한 효과를 보입니다.</p>
<ol>
<li>🧳 Bootstrap(부트스트랩): 다양한 모델의 재료 만들기
&#39;부트스트랩&#39;은 스스로의 부츠끈을 당겨 몸을 들어 올린다는 뜻처럼, 하나의 데이터셋에서 여러 개의 새로운 데이터셋을 &#39;마법처럼&#39; 만들어낸다는 의미를 담고 있습니다.</li>
</ol>
<p>원리: 복원 추출</p>
<p>원본 데이터에서 하나의 샘플을 뽑고, 그 샘플을 다시 주머니에 넣어(복원) 다음에 또 뽑습니다.</p>
<p>결과적으로 새로 만들어진 데이터셋(Bootstrap Sample)에는 같은 샘플이 여러 번 중복될 수도 있고 , 어떤 샘플은 한 번도 선택되지 않을 수도 있습니다.</p>
<p>이렇게 데이터의 강조점이 조금씩 다른 여러 개의 데이터셋이 만들어지면, 이를 학습한 개별 모델들은 서로 조금씩 다른 패턴을 학습하게 됩니다.</p>
<ol start="2">
<li>🗳️ Aggregating(집계): 최종 결정 내리기
각각의 부트스트랩 샘플로 학습된 여러 개의 모델(Decision Tree)이 새로운 데이터에 대해 예측을 내놓으면, 그 예측들을 모아 최종 결론을 냅니다.</li>
</ol>
<p>분류 문제: 모델들의 예측 중 가장 많은 표를 받은 클래스를 최종 예측으로 정합니다. 투표나 다수결의 원칙을 생각하시면 됩니다.</p>
<p>회귀 문제: 모델들의 예측값을 평균 냅니다.</p>
<h2 id="3-🎁-oob-out-of-bag-error-공짜-검증-데이터">3. 🎁 OOB (Out-of-Bag) Error: 공짜 검증 데이터</h2>
<p>부트스트랩 샘플링의 놀라운 결과 중 하나는, 원본 데이터의 약 <strong>36.8%</strong>는 어떤 특정 부트스트랩 샘플에도 선택되지 않고 남는다는 것입니다.</p>
<p>이 남은 36.8%의 데이터를 OOB 샘플이라고 부릅니다.</p>
<p>우리는 이 OOB 샘플을, 별도로 데이터를 나누거나 교차 검증(Cross-validation)을 할 필요 없이 , 모델의 성능을 평가하는 공짜 검증 데이터처럼 사용할 수 있습니다. 이는 데이터를 100% 학습에 활용하면서도 검증을 수행하는 매우 효율적인 방법입니다.</p>
<p>수학적으로 나타내면 다음과 같습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/67db9c56-76e2-4e0b-a787-f767adbfe5dc/image.png" alt=""></p>
<h3 id="💻-bagging-구현-실습">💻 Bagging 구현 실습</h3>
<ul>
<li><strong>Python으로 Bootstrap 구현하기</strong>
다음 코드는 원본 데이터에서 복원 추출을 통해 부트스트랩 샘플을 만들고, OOB 샘플의 비율이 실제로 약 36.8%에 가까워지는지 실험적으로 확인하는 과정입니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/406a8fca-6304-4130-93b2-eae22f9ba325/image.png" alt="">
코드를 실행하면 다음과 같이 나옵니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/b23c77b3-0c6d-46d4-8353-1f67a814458a/image.png" alt=""></p>
<p>여기서 OBB비율을 보고싶으시면 다음 코드를 실행하면 됩니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/109dec9b-adbf-4274-af04-d8c6ff59efab/image.png" alt="">
실행하면 이렇게 보여집니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bf7b15e5-d4df-45b6-8acb-eebbe3b61a13/image.png" alt=""></p>
<p><strong>- 간단하게  Bagging Classifier 구현</strong>
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bbd2f1b0-3869-4b5a-a37b-da3cb6e65e27/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/25b5e971-0b92-49a5-95da-5e8254b535a3/image.png" alt="">
실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/57e7e5ba-b7fc-494d-80e5-c1fd03734a23/image.png" alt="">
이런 결과를 확인할 수 있습니다.</p>
<p><strong>- scikit-learn으로 Bagging 사용하기</strong>
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/c33759eb-93d0-4017-808d-78baabc84002/image.png" alt="">
실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/495577d3-c4a6-465a-9753-9a6b85d6c343/image.png" alt="">
이런 결과를 얻을 수 있습니다.</p>
<h2 id="4-bagging의-진화-random-forest-랜덤-포레스트">4. Bagging의 진화: Random Forest (랜덤 포레스트)</h2>
<p>: Bagging은 분산 감소에 효과적이지만, 모든 Decision Tree가 비슷한 예측을 하는 <strong>&#39;트리 간 높은 상관관계&#39;</strong>라는 한계를 가지고 있습니다. 마치 모두가 같은 시험지를 보았기 때문에, 한 명이 틀리면 다른 사람들도 비슷한 문제를 틀릴 가능성이 높은 것과 같습니다.</p>
<p>Random Forest는 이 문제를 해결하기 위해 Bagging에 <strong>&#39;특성(Feature) 무작위 선택&#39;</strong>이라는 아이디어를 추가하여 한 단계 더 진화한 모델입니다.</p>
<ol>
<li><p><strong>이중 무작위성 (Double Randomness)</strong>
Random Forest는 두 가지 측면에서 무작위성을 부여하여 개별 트리의 다양성을 극대화합니다.</p>
<ul>
<li>데이터 무작위성(Bagging): Bootstrap 샘플링을 통해 각 트리가 다른 데이터 부분집합으로 학습됩니다.</li>
</ul>
</li>
</ol>
<ul>
<li>특성 무작위성 (Feature Randomness): Decision Tree의 각 노드에서 최적의 분할 기준을 찾을 때, 전체 특성($p$개) 중에서 <strong>무작위로 선택된 일부 특성($m$개)</strong>만을 고려합니다 ($m \ll p$)</li>
</ul>
<ol start="2">
<li><strong>상관관계 감소와 분산 억제</strong>
특성 무작위 선택은 트리의 상관관계를 크게 낮춥니다. </li>
</ol>
<ul>
<li>만약 데이터에 매우 강력한 예측 변수(예: 주택 가격 예측의 &#39;면적&#39;)가 있어 모든 트리가 이를 최상위 노드에서 사용하려 한다면 , 트리들의 구조가 비슷해져 앙상블 효과가 떨어집니다.</li>
<li>Random Forest는 특성 무작위 선택 덕분에 이 강력한 특성이 선택되지 않을 기회를 부여합니다. 그 결과, 각 트리는 다른 특성들을 사용해 다양한 관점의 예측을 만들어내고, 트리 간 상관관계($\rho$)가 낮아져 전체 앙상블의 분산이 훨씬 더 효과적으로 감소하게 됩니다.</li>
</ul>
<blockquote>
<p>$$\text{Var}(\text{앙상블}) = \rho \sigma^2 + \frac{(1-\rho)\sigma^2}{M}$$</p>
</blockquote>
<p>이 공식에서 $\rho$ (상관계수)를 낮추면 앙상블의 분산이 확 줄어드는 것을 알 수 있습니다.</p>
<ol start="3">
<li>핵심 하이퍼파라미터: $\text{max_features}$
특성 무작위 선택에서 몇 개의 특성을 고려할지 정하는 파라미터가 max_features입니다. </li>
</ol>
<table>
<thead>
<tr>
<th align="left">설정값</th>
<th align="center">의미</th>
<th align="right">권장 사용 경우</th>
</tr>
</thead>
<tbody><tr>
<td align="left">sqrt,auto</td>
<td align="center">$\sqrt{p}$ ($\text{p}$: 전체 특성 수의 제곱근)</td>
<td align="right">분류 문제 (기본값)</td>
</tr>
<tr>
<td align="left">0.33 또는 p/3</td>
<td align="center">전체 특성의 $1/3$</td>
<td align="right">회귀 문제</td>
</tr>
<tr>
<td align="left">None, 1.0</td>
<td align="center">모든 특성</td>
<td align="right">일반 Bagging과 동일해짐</td>
</tr>
</tbody></table>
<p><strong>- Random Forest 구현 실습 및 활용</strong>
: scikit-learn을 이용한 Random Forest Classifier
Random Forest는 기본적으로 Bagging을 포함하고 있으며, max_features를 지정하여 특성 무작위성을 추가합니다. 또한, oob_score=True를 설정하면 OOB 점수를 확인할 수 있습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/1debda91-44e8-4fa5-a49f-a544fe330500/image.png" alt="">
실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/5dd9b148-17a0-431c-8e18-6781caa20df5/image.png" alt=""></p>
<p>이런 결과를 얻을 수 있게 됩니다.</p>
<p><strong>- Feature Importance (특성 중요도)</strong>
Random Forest의 큰 장점 중 하나는 각 특성이 예측에 얼마나 기여했는지 (변수 중요도)를 계산해 제공한다는 것입니다. 이는 트리를 분할할 때 해당 특성으로 인해 불순도(Impurity)가 얼마나 감소했는지를 기준으로 계산됩니다.</p>
<p>코드로 Feature Importance 추출 및 시각화해보면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f1ef0d57-ce57-4afd-9524-e0dcc3599590/image.png" alt=""></p>
<p>이 코드를 실행하면 
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/13ea7bc9-59f4-4a3e-bafd-c11bdeb26c7d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/3013068e-32c4-47fd-b3d7-b3d2af951e9f/image.png" alt=""></p>
<p>이런 결과를 얻을 수 있습니다.</p>
<h4 id="📌-핵심-요약-bagging-vs-random-forest">📌 핵심 요약: Bagging vs Random Forest</h4>
<table>
<thead>
<tr>
<th align="left">특성</th>
<th align="center">Bagging (일반)</th>
<th align="right">Random Forest</th>
</tr>
</thead>
<tbody><tr>
<td align="left">기본 아이디어</td>
<td align="center">Bootstrap + Aggregating</td>
<td align="right">Bootstrap + Feature Randomness + Aggregating</td>
</tr>
<tr>
<td align="left">무작위성</td>
<td align="center">데이터 차원만 무작위 (Bootstrap)</td>
<td align="right">이중 무작위성 (데이터 + 특성)</td>
</tr>
<tr>
<td align="left">특성 선택</td>
<td align="center">각 노드에서 모든 특성 고려</td>
<td align="right">각 노드에서 일부 특성만 무작위 선택 ($\text{max_features} &lt; 1.0$)</td>
</tr>
<tr>
<td align="left">트리 상관관계</td>
<td align="center">중간 (강력한 특성에 지배될 수 있음)</td>
<td align="right">낮음 (다양성이 극대화됨)</td>
</tr>
<tr>
<td align="left">주요 효과</td>
<td align="center">분산 감소 (Variance Reduction)</td>
<td align="right">분산 감소 및 과적합에 매우 강함</td>
</tr>
</tbody></table>
<p>Random Forest는 일반 Bagging의 한계(트리 간 상관관계)를 극복하여 실무에서 가장 강력하고 안정적인 베이스라인 모델로 사용됩니다.</p>
<p>이렇게 정리를 해보니 분량이 꽤 나왔네요 ^^&amp;
그래더 이렇게 한번 정리를 하면 생각정리도 꽤 되고 좋습니다.
Bagging을 끝으로 
NCT U(엔시티 유) - &#39;Baggy Jeans&#39; 댄스 영상으로 마치겠습니다.😎👖
<a href="https://youtu.be/Ggbo54ljN6s?si=EBDna6jZAIKqfjSh">&#39;Baggy Jeans&#39; Dance Practice</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 5일차 - SVM 심화: Hard/Soft Margin과 Kernel Methods]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-5%EC%9D%BC%EC%B0%A8-SVM-%EC%8B%AC%ED%99%94-HardSoft-Margin%EA%B3%BC-Kernel-Methods</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-5%EC%9D%BC%EC%B0%A8-SVM-%EC%8B%AC%ED%99%94-HardSoft-Margin%EA%B3%BC-Kernel-Methods</guid>
            <pubDate>Sat, 15 Nov 2025 18:56:44 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 오늘 다룰 주제는 바로 <strong>Support Vector Machine(SVM) 심화</strong>입니다. 이름은 많이 들어봤는데, 막상 C나 gamma 같은 하이퍼파라미터를 조정하려고 하면 &quot;이게 정확히 뭘 하는 거였지?&quot; 하고 헷갈릴 때가 많죠.
이걸 타파하여 Support Vector Machine 완벽 마스터가 되도록 해봅시다.</p>
<p>📚 오늘 배울 내용 키워드 요약</p>
<ol>
<li>Hard Margin vs Soft Margin: 완벽함을 추구하는 SVM과 현실과 타협하는 SVM </li>
<li>C 파라미터: 마진의 너비와 오류(Slack) 사이의 줄다리기를 조절하는 값 </li>
<li>커널 트릭 (Kernel Trick): 직선으로 못 나누면? 데이터를 더 높은 차원으로 보내서 나누는 마법 </li>
<li>실무자를 위한 마지막 조언 (Tips &amp; Tricks)</li>
</ol>
<h2 id="1-hard-margin-vs-soft-margin-완벽함을-추구하는-svm과-현실과-타협하는-svm">1. Hard Margin vs Soft Margin: 완벽함을 추구하는 SVM과 현실과 타협하는 SVM</h2>
<p>Hard Margin SVM은 이름 그대로 아주 &#39;딱딱한&#39; 녀석입니다.</p>
<h3 id="hard-margin-svm란">Hard Margin SVM란,</h3>
<p>모든 데이터 포인트를 완벽하게 분류해야 합니다. 
<strong>Hard Margin SVM : 단 하나의 오류도 용납 못 한디.</strong></p>
<p>문제점:</p>
<ol>
<li><p>Outlier(이상치)에 극도로 민감합니다. 단 하나의 이상치 때문에 전체 경계선이 확 휘어버릴 수 있습니다.  <img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ebd2ae5d-02f2-4f3e-8a2e-805643efa05a/image.png" alt=""></p>
</li>
<li><p>현실 데이터에 적용이 불가능합니다. 현실의 데이터는 대부분 노이즈가 껴있고 완벽하게 분리되지 않습니다.</p>
</li>
<li><p>과적합 위험이 있습니다. Training 데이터에 지나치게 최적화가 됩니다.</p>
</li>
</ol>
<p><strong>Soft Margin SVM: &quot;현실을 받아들일게... 조금은 봐줄게&quot;</strong>
그래서 등장한 것이 바로 Soft Margin SVM입니다. 
실무에서는 거의 항상 Soft Margin SVM 사용이 됩니다여.</p>
<h3 id="soft-margin-svm란">Soft Margin SVM란,</h3>
<p>일부 오분류(margin을 침범하는 것)를 허용하면서 마진을 최대화합니다. 핵심은 Slack Variable (슬랙 변수, ξ) 라는 &#39;봐주는 정도&#39;를 도입을 한 것입니다. 패널티(ξ)를 부과하는 소프트 마진 접근하는 것이 key-point.</p>
<p>ξ(슬랙 변수)의 값에 따라서 분류가 잘 되었는지 판단할 수 있습니다.</p>
<p>ξ = 0 : 완벽! 마진 밖에 잘 있습니다.
0 &lt; ξ &lt; 1 : 봐줄 만함. 마진 안쪽에 있지만, 분류는 맞았습니다. 
ξ &gt;= 1 : 문제! 마진을 넘어 아예 반대편으로 가버렸습니다. (오분류)</p>
<h2 id="2-c-파라미터-마진의-너비와-오류slack-사이의-줄다리기를-조절하는-값">2. C 파라미터: 마진의 너비와 오류(Slack) 사이의 줄다리기를 조절하는 값</h2>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/769057f2-9959-46ad-9080-58b5d82b8a98/image.png" alt="">
C가 클수록 오분류에 대한 페널티가 커집니다.
Soft Margin SVM은 두 가지 목표 사이에서 줄다리기를 합니다.</p>
<ol>
<li>마진은 최대한 넓게 (Underfitting 방향, 1/2{||w||}^2$ 최소화) </li>
<li>오류(Slack)는 최대한 적게 (Overfitting 방향,  Σξ 최소화) 
C 파라미터 (The Trade-off)는 핵심 인자로서 이 둘 사이의 균형을 잡아주는 역할을 합니다.</li>
</ol>
<p>C가 작을 때 (C $\to$ 0) 25* &quot;난 마진이 넓은 게 좋아. 오류(Slack)는 좀 있어도 돼.&quot; 26* 결과: 넓은 마진, 단순한 경계, 오류를 많이 허용 (Underfitting 위험)</p>
<p>C가 클 때 (C $\to$ $\infty$) 28* &quot;오류(Slack) 절대 안 돼! 마진이 좁아져도 상관없어.&quot; 29* 결과: 좁은 마진, 복잡한 경계, 오류를 거의 불허 (Overfitting 위험, Hard Margin과 비슷해짐)
보통 실무에 계신 분들은 C=1.0 정도에서 시작해서 값을 조절하는 것이 일반적입니다.</p>
<h2 id="3-커널-트릭-kernel-trick-직선으로-못-나누면-데이터를-더-높은-차원으로-보내서-나누는-마법">3. 커널 트릭 (Kernel Trick): 직선으로 못 나누면? 데이터를 더 높은 차원으로 보내서 나누는 마법</h2>
<p>지금까지의 SVM은 선형(Linear), 즉 직선으로만 데이터를 나눌 수 있었습니다. 하지만 만약 데이터가 비선형 그래프라면,,,?
이때 등장하는 마법이 바로 <strong>커널 트릭(Kernel Trick)</strong>입니다. 원리는 데이터를 고차원(e.g., 3D)으로 &#39;매핑&#39;해서 선형(평면)으로 분리할 수 있게 만듭니다. 커널 함수($K$)**는 이 &#39;고차원에서의 내적&#39;을, &#39;저차원에서 간단히 계산&#39;할 수 있게 해주는 마법 같은 모델입니다.</p>
<h3 id="🌀-주요-커널-함수들">🌀 주요 커널 함수들</h3>
<ol>
<li>Linear Kernel: 선형 분류</li>
<li>Polynomial Kernel: 다항식 경계</li>
<li>RBF (Gaussian) Kernel: 비선형 분류의 강자이자, 실무에서의 기본 선택 핵심 파라미터는 γ (gamma)입니다.</li>
</ol>
<p><strong>γ 값에 따라 변화되는 것</strong>
<strong>γ가 작을 때(0.1)</strong> &quot;내 영향력은 아주 넓어!&quot; (조금만 멀어져도 exp안의 값이 0에 가까워짐)
결과: 넓은 영향 범위, 부드러운 경계 (Underfitting 가능) </p>
<p><strong>γ가 클 때 (100)</strong> &quot;난 내 주변(아주 가까운 곳)에만 영향을 줄 거야!&quot;
결과: 좁은 영향 범위, 데이터 포인트 하나하나에 민감하게 반응하는 복잡한 경계 (Overfitting 위험)</p>
<ol start="4">
<li>Sigmoid Kernel: 신경망과 유사 특수한 경우에만 사용</li>
</ol>
<p><strong>실무 Tip: 시도 순서</strong></p>
<ol>
<li>Linear Kernel: 가장 먼저 시도 (baseline)</li>
<li>RBF Kernel: Linear가 부족하면 시도</li>
<li>Polynomial: 도메인 지식이 있을 때</li>
<li>Sigmoid: 특별한 이유가 있을 때만 시도</li>
</ol>
<h2 id="4-실무자를-위한-마지막-조언-tips--tricks">4. 실무자를 위한 마지막 조언 (Tips &amp; Tricks)</h2>
<ol>
<li>데이터 전처리 (필수!)</li>
</ol>
<ul>
<li>정규화/스케일링 : RBF, Polynomial 커널 사용 시 필수입니다. Linear 커널도 해주면 수렴 속도에 도움이 됩니다.</li>
<li>불균형 처리 : 데이터 클래스가 불균형하다면 svm.SVC(class_weight=&#39;balanced&#39;) 옵션을 사용하세요.</li>
</ul>
<ol start="2">
<li>파라미터 튜닝 순서</li>
</ol>
<ul>
<li>Linear Kernel : 무조건 가장 먼저 시도합니다. 데이터가 고차원이거나(예:텍스트) 샘플 수에 비해 특징이 많으면 Linear가 RBF보다 성능이 좋을 때가 많습니다.</li>
<li>RBF Kernel : Linear가 부족하면 RBF를 시도합니다.</li>
<li>C, γ 튜닝 : C와 gamma는 로그 스케일( 0.01, 0.1, 1, 10, 100)로 탐색하는 것이 효율적입니다. </li>
</ul>
<ol start="3">
<li>과적합 판단</li>
</ol>
<ul>
<li>학습(Train) 데이터 성능은 100점인데 테스트(Test) 성능이 낮으면 과적합입니다. 이때는 C를 줄이거나 γ를 줄여서 모델을 더 단순하게 만들어야 합니다. </li>
<li>또 다른 꿀팁은 Support Vector의 수를 보는 것입니다. Support Vector가 전체 데이터의 50%를 넘어가는 등 너무 많다면, 모델이 과적합되었을 가능성이 큽니다.</li>
</ul>
<ol start="4">
<li>대용량 데이터</li>
</ol>
<ul>
<li>SVM은 샘플 수가 많아지면 학습 속도가 매우 느려집니다.</li>
<li>이때는 LinearSVC 또는 SGDClassifier인 확률적 경사 하강법을 사용하는 것이 훨씬 효율적입니다.</li>
</ul>
<h4 id="실전-전략">실전 전략</h4>
<p>• 데이터 정규화는 필수
• Linear → RBF 순서로 시도
• Grid Search + Cross-validation으로 최적화
• Support Vector 수로 과적합 판단
• 실습 코드를 단계별로 이해하며 적용</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/e5c3f022-f3c4-430c-91dc-123fc6077e50/image.png" alt="">
사람이 몇 명이 있는 걸까요~?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 4일차 - Support Vector Machine (SVM)]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-4%EC%9D%BC%EC%B0%A8-Support-Vector-Machine-SVM</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-4%EC%9D%BC%EC%B0%A8-Support-Vector-Machine-SVM</guid>
            <pubDate>Sat, 15 Nov 2025 18:12:06 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 머신러닝을 공부하다 보면 꼭 만나게 되는 모델인 SVM(Support Vector Machine)은 이름부터 서포트, 벡터, 머신… 뭔가 강력해 보이는데, 막상 원리를 파고들면 수식이 많아서 지레 겁먹기 쉬운 친구이기도 합니다. 저도 처음엔 그냥 분류하는 모델 중 하나라고만 생각했는데, 왜 SVM이 오랫동안 사랑받아왔는지 그 핵심 아이디어를 알고 나니 정말 매력적인 모델이라는 걸 깨달았습니다.</p>
<p><strong>📍 오늘 이야기의 핵심 키워드</strong></p>
<ol>
<li><p>최대 마진 (Maximal Margin) : SVM이 추구하는 단 하나의 목표,  경계선과 데이터 사이의 거리를 최대로!</p>
</li>
<li><p>SVM (Support Vector Machine) : 데이터를 가장 잘 나누는 최적의 경계선을 찾는 알고리즘</p>
</li>
<li><p>서포트 벡터 (Support Vectors) : 이 경계선을 결정하는 가장 중요한 핵심 데이터들 </p>
</li>
<li><p>결정 경계 (Decision Boundary) : 두 그룹을 나누는 기준선 </p>
</li>
<li><p>라그랑주 듀얼 (Lagrange Dual Formulation) : 커널 트릭 (Kernel Trick)으로 직선으로 나눌 수 없는 데이터들을 마법처럼 나눠주는 비결</p>
</li>
<li><p>가장 &#39;안전한&#39; 경계선 긋기 (Maximal Margin)
자, 우리에게 빨간 점과 파란 사각형을 나누는 임무가 주어졌다고 해봅시다. </p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f34977f6-b5f5-420d-b849-1f93cec9ea79/image.png" alt=""></p>
<p>어떻게 선을 그으시겠어요? 사실 두 그룹을 나누는 선은 무한히 많이 그릴 수 있죠.</p>
<p>하지만 SVM은 그중에서도 <strong>가장 좋은 선</strong>을 찾고 싶어 합니다. 그럼 대체 &#39;좋은 선&#39;이란 뭘까요?</p>
<p>나쁜 선: 데이터에 너무 아슬아슬하게 붙어있는 선. 이런 선은 나중에 새로운 데이터가 조금만 다르게 들어와도 잘못 분류할 위험(Overfitting)이 큽니다. </p>
<p>좋은 선 (SVM이 찾는 선): 양쪽 그룹의 데이터로부터 최대한 멀리 떨어져 &#39;안전거리(Margin)&#39;를 확보한 선입니다. </p>
<p>SVM은 이 &#39;안전거리&#39;, 즉 마진(Margin)을 최대화  하는 것을 유일한 목표로 삼습니다. 마진이 넓을수록 새로운 데이터가 들어와도 안정적으로 분류할 수 있으니까요. 이걸 바로 <strong>&#39;Maximal Margin Classifier&#39;</strong>라고 부릅니다. </p>
<ol start="2">
<li>경계선을 결정하는 핵심 용병, 서포트 벡터 (Support Vectors)
그럼 이 최대 마진은 어떻게 정해질까요? 여기서 SVM의 이름이기도 한 <strong>서포트 벡터(Support Vectors)</strong>가 등장합니다. 
서포트 벡터란, 우리가 그린 결정 경계선과 가장 가까이에 있는, 즉, 마진 경계선 위에 정확히 위치한 데이터들을 말합니다. 비유하자면, 이 서포트 벡터들은 마진이라는 다리를 떠받치는 기둥 같은 존재예요. 이 서포트 벡터들만이 경계선을 결정하는 데 영향을 준다는 사실입니다. 경계선에서 멀리 떨어져 있는 나머지 90<del>95%의 평범한 데이터들은 아무리 많아도 경계선 위치에 1도 영향을 주지 않습니다. SVM은 전체 데이터의 5</del>10% 정도밖에 안되는 이 핵심 용병(서포트 벡터)들만 붙잡고  &quot;너희들로부터 가장 멀리 떨어지는 선을 그릴게!&quot;라고 말하는 것과 같습니다.
그 두 클래스로 나누는 선(또는 평면(3D) 또는 초평면(고차원))을 Decision Boundary (결정 경계)라고 합니다.</li>
</ol>
<p>수학이 마법을 부리는 순간 (Dual &amp; Kernel)좋아요, 마진을 최대로 하고 서포트 벡터가 중요하다는 건 알겠어요. 근데 그걸 컴퓨터가 어떻게 찾죠?
당연히 수학으로 풉니다. SVM은 마진을 최대로 하라!는 목표를 ||w|| (w의 크기)를 최소화하는 수학 문제로 바꿔서 풉니다. 마진의 폭이 2/||w||라서, ||w||가 작아질수록 마진은 커지거든요!
그런데 여기서 똑똑한 수학자들이 한 가지 묘안을 더 냅니다. 바로 <strong>&#39;라그랑주 듀얼(Lagrange Dual Formulation)&#39;</strong>이라는 방법인데요.</p>
<p>이게 왜 필요하냐면, </p>
<ol>
<li><p>고차원 데이터에 엄청나게 효율적입니다.
우리가 다루는 데이터가(키, 몸무게)처럼 2차원(d=2)이면 좋겠지만, 만약 수만 픽셀짜리 이미지 데이터라면 d가 수만 개가 됩니다. 기존의 Primal 방식은 이 d의 개수에 따라 계산량이 폭증하는데, Dual 방식은 데이터의 개수(n)에만 의존해요. 특징(차원)이 100만 개라도 데이터가 1000개뿐이라면(d &gt;&gt; n), Dual 방식이 압도적으로 빠릅니다. </p>
</li>
<li><p>커널 트릭이라는 마법을 쓸 수 있게 해줍니다. 
만약 데이터가 직선(선형)으로 도저히 나눌 수 없는 복잡한 형태라면 어떡할까요? 커널 트릭은 이 데이터들을 더 높은 차원(예: 2D -&gt; 3D)으로 순간이동시켜서, 그곳에서는 깔끔하게 평면으로 나눌 수 있게 해줍니다. Dual 방식은 이 커널 트릭을 적용하기에 완벽한 형태를 갖추고 있죠. </p>
</li>
</ol>
<h3 id="svm-전체-과정-요약">SVM 전체 과정 요약</h3>
<p>1단계: 데이터를 보고 최적화 문제 설정
↓
2단계: 문제를 Dual 형태로 변환 (커널 트릭 준비) 
↓
3단계: 최적화 알고리즘으로 해결
↓
4단계: Support Vector 찾기
↓
5단계: 경계선 완성!</p>
<p>전체 내용 정리
Part 1: SVM의 핵심
• Margin을 최대한 크게 만드는 경계선 찾기
• 큰 Margin = 좋은 일반화 성능</p>
<p>Part 2: 핵심 아이디어
• Support Vector: Margin 위의 핵심 데이터
• 최적화 문제로 최적의 경계선 찾기</p>
<p>Part 3: 더 강력하게
• 커널 트릭: 비선형 문제 해결
• Dual 문제: 커널 트릭을 사용하기 위해 필요</p>
<p>Part 4: 작동 원리
• Lagrangian: 문제를 변환하는 방법
• α 값으로 Support Vector 찾기</p>
<p>Scikit-learn으로 SVM 사용는 실습
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/b6bdb68f-3a1b-490c-aa33-7fc52bfeed00/image.png" alt="">
실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/4238d661-c4a2-4ba7-9465-43041d851de2/image.png" alt="">
이러한 결과를 얻을 수 있습니다. 클래스가 0과 1로 나뉘는걸 볼 수 있습니다.
X_test에 총 30개의 데이터가 있었기 때문에(test_size=0.3), 모델도 30개의 답(예측값)을 순서대로 쫙 내놓은 거예요. 그 결과로 출력값은 <strong>&quot;학습을 마친 모델이, 처음 보는 테스트 데이터(X_test)가 어떤 클래스(0 또는 1)에 속할지 예측한 결과&quot;</strong>입니다.</p>
<p>이 예측값(predictions)이 있으니, 이제 우리는 실제 정답(y_test)과 비교해서 모델이 얼마나 잘 맞혔는지 <strong>채점</strong>을 할 수 있겠죠? 그게 바로 모델의 성능 평가가 됩니다!
model.predict()로 모델의 예측 답안을 봤다면, 다음 코드는 모델이 &quot;어떻게 그런 답을 낼 수 있었는지&quot; 그 근거가 되는 <strong>핵심 증거 자료</strong>를 보여주는 시각화 과정이에요.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/53ccebd0-cdee-4784-aae3-40b5bed378c4/image.png" alt="">
실행하면 
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d39f19be-fba5-4fce-b352-cd7dcf10b57e/image.png" alt="">
이러한 결과를 얻게 됩니다.
위에 print문은 핵심 데이터(서포트 벡터)들의 실제 좌표값과 중요한 점이 총 몇 개인지 개수를 알려줍니다.
그리고 시각화에서는 그 점들이 어디에 있는지 확인시켜 줍니다. 이 코드를 실행하면, 전체 데이터 중에서 유독 검은색 테두리가 쳐진 특별한 점들이 보일 겁니다.</p>
<p>바로 그 점들이 SVM이 분류 경계선을 결정하기 위해 기둥으로 삼은 서포트 벡터입니다. 이 시각화를 통해 &quot;아, 정말로 두 그룹의 경계선에 가장 아슬아슬하게 붙어있는 점들(서포트 벡터)을 이용해서 경계선을 만드는구나!&quot;라는 SVM의 핵심 원리를 직접 눈으로 검증할 수 있게 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/be026a0c-d4a5-4be6-b9ad-96faf286a647/image.png" alt="">
오늘 내과 진료 보고 왔다가 약국 들려서 약 처방 받는데 텐텐이 눈앞에 보여서 flex- 손으로 여러개 칵 집어서
계산해벌임 나름 므찐 어른 흉내 내봄</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 3일차 - 최적화 및 하이퍼파라미터 튜닝]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-3%EC%9D%BC%EC%B0%A8-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%ED%95%98%EC%9D%B4%ED%8D%BC%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%ED%8A%9C%EB%8B%9D</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-3%EC%9D%BC%EC%B0%A8-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%ED%95%98%EC%9D%B4%ED%8D%BC%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%ED%8A%9C%EB%8B%9D</guid>
            <pubDate>Sat, 15 Nov 2025 17:23:48 GMT</pubDate>
            <description><![CDATA[<p>머신러닝 모델을 만들기만 하는 게 아니라, 모델의 성능을 &#39;최고로 끌어올리는&#39; 3가지 키워드 알려드리도록 하겠습니다.</p>
<ol>
<li><p>경사하강법 변형 : Batch, Batch Size, Learning Rate, Epoch
Batch GD, Mini-batch GD, SGD</p>
</li>
<li><p>하이퍼파라미터 튜닝(Tuning) : 최고의 레시피 찾기. </p>
</li>
<li><p>교차 검증(Cross Validation) : 내 모델의 점수, 정말 믿을 수 있을까?</p>
</li>
</ol>
<h2 id="🧠-1-경사-하강법-변형--더-빠르고-더-똑똑하게-안정적인-최적화">🧠 1. 경사 하강법 변형 : 더 빠르고, 더 똑똑하게! 안정적인 최적화</h2>
<p>저희 전에 배웠던 경사하강법은 목표가 Loss를 최소화하는 Weight 찾기였습니다. Loss가 줄어드는 방향으로 Weight를 업데이트를 하는 것이죠.
비유를 하자면 안개 낀 산에서 가장 낮은 지점(최저 Loss)을 찾는 과정과 같아요.
문제점이라면 등산가는 산 전체(모든 데이터)를 다 보고 딱 한 걸음을 떼는 방식이라 안정적이지만, 데이터가 100만 개면 한 걸음 떼는 데 1주일이 걸릴 수도 있어요. 너무 느리고, 메모리 부족이 생길 수 있습니다.</p>
<p>또한 등산가는 계속 내리막으로만 걸어서 이 작은 웅덩이(Local Minimum)에 도착했습니다.
안개가 껴서 주변밖에 안 보이기 때문에, 등산가는 &quot;사방이 다 오르막이네? 내가 드디어 가장 낮은 바닥에 도착했구나!&quot;라고 착각하고 그 자리에 멈춥니다.</p>
<p>하지만 실제로는 진짜 계곡(Global Minimum)이 저 멀리 있는데도 말이죠. 이것이 바로 &quot;Local Minimum에 갇힌&quot; 상태입니다.</p>
<p>이를 해결하기 위해 3가지 삼총사가 등장합니다.</p>
<ol>
<li><strong>미니배치 (Mini-batch)</strong> : 산 전체를 다 보는 대신, 훈련 데이터를 작은 묶음(Mini-batch) (32개, 64개)으로 나눕니다. 그리고 그 작은 묶음 하나를 보고 한 걸음, 다음 묶음을 보고 또 한 걸음... 이렇게 총총총 걸어 내려가는 방식입니다. 가장 현실적이고 표준적인 방법입니다. 속도와 안정성 둘 다 잡았죠! 사실 요즘 SGD라고 하면 이 미니배치방식을 말하는 경우가 많습니다. 이것의 단점은 전체가 아닌 일부만 보고 걸으니, Batch 방식보다는 방향이 약간 불안정(지그재그)할 수 있습니다. 하지만 이 약간의 노이즈가 오히려 안 좋은 지점(Local Minimum)을 탈출하게 도와주기도 합니다.
또한, 32개, 64개씩 묶는 방법 말고, 산을 내려가기 전에 산 전체 지형(모든 훈련 데이터)을 다 둘러보고 가장 완벽하게 내려갈 수 있는 방향을 딱 정해서, <strong>&#39;딱 한 걸음&#39;</strong>만 크게 내딛는 방식도 있습니다. 배치 경사 하강법 (Batch Gradient Descent)이라고 하는데요.
이는 방향이 매우 정확하고 안정적이지만 데이터가 100만 개라면, 100만 개를 다 계산해야 겨우 &#39;한 걸음&#39;을 뗄 수 있어서 방대한 양을 처리해야 된다면 엄청나게 느리고, 메모리도 어마어마하게 필요합니다. </li>
</ol>
<p>여기서 전문 용어 Batch, Batch Size, Learning Rate, Epoch가 등장합니다..!
Batch (배치)
정의: Gradient 계산에 사용할 데이터의 묶음</p>
<blockquote>
<p>전체 데이터를 작은 그룹으로 나눈 것 </p>
</blockquote>
<p><strong>Batch Size (배치 크기)</strong>
정의: 한 Batch에 포함된 샘플의 개수
보통 시작 개수는 64 또는 128
GPU 메모리 부족하면: 32로 줄이고
GPU 여유 있으면: 256까지 늘려서 사용 가능합니다.</p>
<p><strong>Learning Rate (학습률)</strong>
정의: Weight를 업데이트할 때의 보폭 (스텝 크기)</p>
<blockquote>
<p>공식에서 gradient에 곱해지는 값</p>
</blockquote>
<p><strong>Epoch (에포크)</strong>
정의: 전체 데이터를 한 번 모두 학습한 것</p>
<blockquote>
<p>모든 Batch를 한 번씩 처리 = 1 Epoch = 전체 데이터를 한 번 본 것</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">용어</th>
<th align="center">조절 대상</th>
<th align="center">값이 크면</th>
<th align="right">값이 작으면</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Batch Size</td>
<td align="center">한 번에 처리할 데이터 양</td>
<td align="center">빠름, 메모리 많이 사용 안정적, 일반화 나쁨</td>
<td align="right">느림, 메모리 적게 사용, 불안정,일반화 좋음</td>
</tr>
<tr>
<td align="left">Learning Rate</td>
<td align="center">Weight 변화 보폭</td>
<td align="center">빠른 학습, 불안정, 발산 가능</td>
<td align="right">안정적 학습 너무 느림</td>
</tr>
<tr>
<td align="left">Epoch</td>
<td align="center">전체 데이터를 몇 번 볼지</td>
<td align="center">학습 충분, Overfitting 위험</td>
<td align="right">학습 부족 Underfitting</td>
</tr>
</tbody></table>
<p>이 용어들의 관계를 이해하자면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d1486fc5-0e57-45fb-8bb9-618fcc63d818/image.png" alt="">
이렇게 정리할 수 있습니다.</p>
<ol start="2">
<li><strong>모멘텀 (Momentum)</strong> : 관성을 이용하는 방식이에요. 내리막길에서 눈덩이를 굴리듯이, 같은 방향으로 계속 가면 가속도가 붙어서 더 빨리 내려가요. 작은 언덕(Local Minimum) 정도는 관성으로 휙 넘어갈 수도 있죠. </li>
</ol>
<p>머신러닝에서 Momentum는 Scikit-learn의 SGDClassifier/SGDRegressor에서 사용하고, momentum 파라미터로 조절 가능합니다.</p>
<ol start="3">
<li><strong>Adam</strong> : 현존 <strong>&#39;최강의 네비게이션&#39;</strong>입니다. 모멘텀의 관성  + 적응적 학습률 (파라미터마다 보폭을 알아서 조절) 이 합쳐진 끝판왕이죠. 요즘은 대부분 Adam을 기본으로 쓸 만큼 성능이 좋습니다.</li>
</ol>
<p>머신러닝에서 사용할 때에는 Scikit-learn의 SGDClassifier, SGDRegressor 등에서
다양한 optimizer 지원 가능하고,Neural Network 모델(MLPClassifier 등)에서 Adam 사용이 가능합니다.</p>
<p><strong>최적화 (Optimizer) 비교 정리</strong>
언제 무엇을 쓸까?</p>
<p>| Optimizer | 특징 | 장점 | 단점 | 추천 상황 |
| :------ | :------: | :------: | ------: |
| SGD | 기본 GD | 간단, 이론적 | 느림, 튜닝 필요 | 작은 문제, 선형 모델 |
| SGD + Momentum | 관성 추가 | 빠름, 안정 | 튜닝 필요 | 일반적인 ML 문제 |
| Adam | 적응적 LR | 빠름, 자동 조절, 튜닝 불필요 | 메모리 약간 많음 | 복잡한 모델Neural Network |</p>
<h2 id="🍰-2-하이퍼파라미터-튜닝--최고의-레시피-찾기">🍰 2. 하이퍼파라미터 튜닝 : 최고의 레시피 찾기.</h2>
<p>모델을 &#39;고기&#39;라고 비유해 보겠습니다.</p>
<ul>
<li>파라미터 (Parameter): 고기 요리 중에 맛을 보며 조절하는 것 (소금 얼마나, 불 얼마나)</li>
<li>하이퍼파라미터 (Hyperparameter): <strong>&#39;요리 시작 전&#39;</strong>에 미리 정해주는 &#39;레시피&#39; 값입니다.  (e.g., 온도(Learning Rate), 굽는 시간(Epochs), 레시피(C, penalty) )
이 &#39;레시피&#39;에 따라 케이크 맛(모델 성능)이 천차만별로 변합니다.
최적값을 찾는 방식은 3가지로 나뉩니다.</li>
</ul>
<ol>
<li>Manual Search (수동)
: 직접 여러 값 시도</li>
</ol>
<ul>
<li>시간 오래 걸림</li>
<li>경험 필요</li>
<li>체계적이지 않음</li>
</ul>
<ol start="2">
<li>Grid Search (격자 탐색)
: 모든 조합을 체계적으로 시도</li>
</ol>
<ul>
<li>빠짐없이 탐색</li>
<li>재현 가능</li>
<li>시간 많이 걸림</li>
<li>파라미터 개수가 늘어나면 조합이 기하급수적으로 증가(차원 저주 🧙🏿 Curse of Dimensionality)</li>
</ul>
<ol start="3">
<li>Random Search (랜덤 탐색)
: 무작위로 조합 시도</li>
</ol>
<ul>
<li>시간 대비 훨씬 효율적 </li>
<li>중요한 파라미터에 더 집중</li>
<li>Grid Search보다 빠름</li>
</ul>
<h1 id="📊-3-cross-validation-심화--이-점수-믿을-수-있어">📊 3. Cross Validation 심화 : 이 점수, 믿을 수 있어?</h1>
<p>전에 배웠던 Cross Validation에 대해 간략하게 설명해드리겠습니다.
모델을 만들고 테스트 데이터로 95점이 나왔어요. &quot;와! 잘 만들었다!&quot;... 과연 그럴까요?
문제점은 딱 한 번 본 시험(Train/Test Split) 점수이 &#39;운&#39;으로 작용할 수 있어요. 하필 테스트 세트가 너무 쉬운 문제만 모여있었을 수도 있죠. 이때 해결책은 K-Fold 교차 검증 (CV) &quot;시험 한 번으로 끝내지 말고, <strong>&#39;데이터로 k번의 모의고사&#39;</strong>를 보고 그 점수들의 평균을 내자!&quot;는 원리입니다.
이는 모든 데이터가 Train/Test로 사용되고, 평균으로 안정적 평가가 가능하며 표준편차로 분산도 확인이 가능하다는 이점이 있습니다.</p>
<p>이 K-Fold에 대해 중요한 원리가 포함되어야 합니다.</p>
<ol>
<li><p>Stratified K-Fold : 만약 우리 데이터가 양성 900개, 악성 100개처럼 불균형하다면? 일반 K-Fold를 쓰면, 운이 나쁘면 어떤 폴드에는 악성 환자가 0명일 수도 있습니다. Stratified K-Fold는 이걸 방지하기 위해, 5개의 모든 폴드에 양성과 악성 비율을 9:1로 똑같이 맞춰서 나눠줍니다.  분류 문제에서는 그냥 K-Fold가 아니라 Stratified K-Fold를 쓰는 것이 표준입니다!</p>
</li>
<li><p>Time Series Split (시계열 분할) : 주가, 날씨 등 시계열 데이터는 절대 섞으면 안 돼요. <strong>미래 데이터로 과거를 예측</strong>하는 말도 안 되는 일이 생기기 때문이죠. TimeSeriesSplit은 항상 <strong>과거 데이터로만 학습(Train)</strong>하고 <strong>미래 데이터로만 평가(Test)</strong>하게 보장해줍니다.</p>
</li>
<li><p>데이터 누수 (Data Leakage) :  이건 정말 정말 큰일 나는 실수입니다. 왜 잘못됐을까 봐보면 시험 문제(Test Fold)의 정보(평균, 표준편차)를 공부(Train Fold)할 때 이미 다 봐버렸어요.  점수가 99점... 이렇게 비정상적으로 높게 나옵니다. 이건 뭐..사기져! 이를 방지하기 위해선 CV 반복문 안에서, 매번 Train Fold로만 스케일러를 fit해야 합니다.</p>
</li>
</ol>
<p>🚀 3일차 요약
오늘 머신러닝 심화 3일차에 3가지 핵심 기술을 배우면서, 우리는 드디어 모델을 대충 돌려보는 수준을 넘어 모델의 성능을 제대로 관리하고 신뢰할 수 있게 되었습니다.</p>
<ol>
<li>최적화: 이젠 Adam으로 빠르고 안정적이게! </li>
<li>튜닝: Random/Grid Search로 최적의 레시피를! </li>
<li>검증: Stratified K-Fold로 믿을 수 있는 점수를! </li>
</ol>
<p>워후!
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/6e9eb273-3a6b-47d6-a82b-98515318c9de/image.png" alt="">
<em>출처:인스타그램 artlamp_org</em>
새벽 2:22분에 블로그 쓸려니 살짝 정신 나가있는 상-태. 하지만 글은 잘 썼으리라 믿음니다.흐하하하</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 심화 2일차 - SVD, K-means, Mean Shift, DBSCAN]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-2%EC%9D%BC%EC%B0%A8-SVD-K-means-Mean-Shift-DBSCAN</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%AC%ED%99%94-2%EC%9D%BC%EC%B0%A8-SVD-K-means-Mean-Shift-DBSCAN</guid>
            <pubDate>Sat, 15 Nov 2025 14:36:01 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터의-본질을-찾아서">&quot;데이터의 본질을 찾아서&quot;</h2>
<p><strong>- SVD, 고급 군집화 기법</strong></p>
<p>오늘의 키워드를 말씀드리겠습니다.</p>
<ol>
<li>SVD</li>
<li>특잇값 분해를 이용한 차원 축소 및 압축</li>
</ol>
<ul>
<li>Truncated SVD</li>
<li>이미지 압축</li>
</ul>
<ol start="3">
<li>고급 군집화 </li>
</ol>
<ul>
<li>Mean Shift </li>
<li>DBSCAN</li>
</ul>
<h2 id="🔍-1-svd란">🔍 1. SVD란?</h2>
<p>SVD는 Singular Value Decomposition의 약자예요. 한국말로는 특잇값 분해라고 부릅니다.
어떤 행렬이든 3개의 행렬로 분해할 수 있다! 숫자를 소인수분해 하듯이 행렬을 분해하는 겁니다.
식으로 나타내면,
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d7607580-1367-4cd2-92b5-35daccc7b536/image.png" alt=""></p>
<p><strong>SVD의 직관적인 의미</strong>
성적표를 예로 들면,
100명의 학생이 10개 과목 시험을 봤다면 총 1000개의 점수(숫자)가 있겠죠. 하지만 SVD로 분해하면, 이 데이터를 3개의 학습 유형만으로 90% 설명이 가능할 수 있어요.
U : 학생들의 <strong>학습 유형</strong>
Σ : 각 학습 유형의 <strong>중요도</strong>
V^T : 과목들의 <strong>과목 특성</strong></p>
<p>이렇게 데이터가 많은 성적표를 간단한 패턴으로 설명할 수 있게 됩니다.</p>
<h2 id="2📉-svd-특잇값-분해를-이용한-차원-축소-및-압축">2.📉 SVD (특잇값 분해)를 이용한 차원 축소 및 압축</h2>
<p>SVD는 행렬 분해 기술 중 하나로, 어떤 행렬이든 세 개의 행렬로 분해하여 데이터의 본질적인 패턴을 찾고 압축하는 데 사용되는 것이라 앞서 설명 드렸습니다.</p>
<h4 id="truncated-svd">Truncated SVD</h4>
<p>Truncated SVD (절단된 SVD)를 이용한 압축SVD의 핵심은 특잇값이 작은 패턴은 데이터에 미치는 영향이 적다는 것입니다.
원리: 상위 k개의 큰 특잇값만 남기고 나머지 특잇값과 이에 대응하는 벡터를 버려 행렬을 근사적으로 재구성합니다.
압축 효과: 1000 X 1000 크기의 이미지 행렬을 예로 들 때, k=3만 사용해도 원본 300만 개의 값을 약 6,009개로 줄일 수 있습니다. (약 99.8% 감소)
활용: 상위 몇 개의 특잇값만으로도 이미지나 데이터의 <strong>대부분의 정보(에너지)</strong>를 유지할 수 있어 이미지 파일 크기를 대폭 줄이는 데 사용됩니다.
크기를 다시 정리해보면,
Full SVD vs Truncated SVD (k=3)
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/6c0e630e-6ab5-425a-b238-a4717adc4c14/image.png" alt=""></p>
<p><strong>행렬곱 확인</strong>
Uk (1000×3) × Σk (3×3) × VkT (3×1000)
= (1000×3) × (3×1000)
= 1000 × 1000
→ 여전히 원본과 같은 크기로 복원됨!</p>
<p><strong>왜 이렇게 줄일 수 있는가?</strong>
특잇값 대부분은 매우 작기 때문
예: [850, 320, 95, 12, 3, 1, 0.5, 0.2, ...]
앞의 3개 합: 850 + 320 + 95 = 1265
나머지 997개 합: 약 20
→ 상위 3개가
<strong>전체</strong>의 <strong>98%</strong>!</p>
<p>즉, 상위 3개 특잇값만 사용한다 = 행렬을 구성하는&#39;<strong>중요한 패턴 3개만 남긴다</strong>&#39;</p>
<p>실습 코드
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/0c895b44-3322-47e7-a2cf-870e9105b5f8/image.png" alt="">
실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/f47c083f-b0fc-4154-bf61-313fdd16d4ed/image.png" alt=""></p>
<h4 id="이미지-압축">이미지 압축</h4>
<p>SVD로 이미지 파일 크기 줄이는 것을 말합니다.
SVD를 이용한 이미지 압축은 이미지를 수많은 패턴의 합으로 분해한 뒤, 가장 중요도가 높은 패턴만 남겨 원본과 유사하게 재구성하는 <strong>손실 압축 방식</strong>입니다.
이에 대한 장점과 단점을 표로 나타내면</p>
<table>
<thead>
<tr>
<th align="left">장점</th>
<th align="center">단점</th>
</tr>
</thead>
<tbody><tr>
<td align="left">파일 크기 대폭 감소</td>
<td align="center">완벽한 복원은 불가</td>
</tr>
<tr>
<td align="left">중요한 특징 보존</td>
<td align="center">손실 압축 방식</td>
</tr>
<tr>
<td align="left">k 조절로 압축률 조정</td>
<td align="center">JPEG보다 효율은 낮음</td>
</tr>
</tbody></table>
<p>이는 JPEG의 기본 원리와 같습니다. 실제로 JPEG는 SVD와 비슷한 <strong>이산 코사인 변환(DCT)</strong>을 사용하지만, 근본적인 아이디어는 <strong>&#39;데이터의 중요하지 않은 성분을 버린다&#39;</strong>는 점에서 유사합니다. SVD 압축은 실전에서 의료 영상, 위성 이미지 등 특정 분야에서 데이터의 핵심적인 정보를 효율적으로 보존하면서 압축률을 세밀하게 조절할 수 있어 유용하게 활용될 수 있습니다.</p>
<p>실습 코드
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/09f66a38-928f-4998-8230-b89e4191fa72/image.png" alt="">
실행할때, 사진을 같은 위치상에 놔주셔야 합니다!
예를 들어서 주피터에서 실행하는거면 주피터에 사진을 올려주세용
저는 쿼카 사진을 압축해보도록 하겠습니다.
코드를 실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/70ac60d2-998c-4cf5-9e59-0b987462d86a/image.png" alt=""></p>
<p>이렇게 사진이 압축되는걸 확인할 수 있습니다.</p>
<h2 id="3-고급-군집화-mean-shift--dbscan">3. 고급 군집화 (Mean Shift &amp; DBSCAN)</h2>
<p>저희 1일차에서 K-means와 Hierarchical를 배워보았습니다.
이 두가지 방법의 한계는 K-means는 K를 미리 알아야하고,
Hierarchical는 큰 데이터에 쓰이면 느리다는 한계점을 가지고 있습니다.
그리고 두가지 다 노이즈/이상치에 약하고,복잡한 모양 군집 어렵다는 문제점이 있죠.
이런 한계를 극복하는 하기 위해 두가지가 출동합니다! Mean Shift, DBSCAN 이 녀석들입니다.</p>
<h3 id="mean-shift-평균-이동">Mean Shift (평균 이동)</h3>
<p>데이터의 <strong>밀도 경사(Density Gradient)</strong>를 따라 각 점을 가장 밀도가 높은 지점(군집 중심)으로 이동시켜 군집을 형성하는 방법입니다.</p>
<p>작동 원리:</p>
<ol>
<li>초기화 : 각 점 주변에 <strong>윈도우(반경 = bandwidth)</strong>를 설정합니다.</li>
<li>윈도우 설정 : 윈도우 내 점들의 <strong>평균 위치(무게 중심)</strong>를 계산합니다.</li>
<li>Mean Shift : 현재 위치를 평균 위치로 이동(Shift)합니다.</li>
<li>반복 및 군집 할당 : 수렴할 때까지 반복하며, 같은 곳으로 수렴한 점들을 하나의 군집으로 할당합니다.</li>
</ol>
<p>장점: </p>
<ol>
<li>K(군집 수)를 미리 지정할 필요가 없다.</li>
<li>복잡한 모양의 군집도 가능하다. </li>
<li>이상치를 자동 분리하는 경향이 있다.</li>
</ol>
<p>단점: </p>
<ol>
<li>Bandwidth 선택이 매우 중요하다. </li>
<li>계산 비용이 높다. </li>
<li>고차원에서 느리다.</li>
</ol>
<p>실습해보면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/3ab9f4f9-ad7a-4b49-9a4a-aa124d0e7235/image.png" alt="">
이 코드를 실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/afa926ae-843e-4f59-aa4d-2f0955ef5edc/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ba5a0b21-963e-42a4-9641-515a7c4d6c33/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d2ad938d-a6fb-40eb-a28a-b8b4fcf60198/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/71821dc2-671d-49dc-8e75-ff9364a95654/image.png" alt="">
이런 결과를 얻을 수 있습니다.
이는 Mean Shift의 성능이 bandwidth라는 단 하나의 파라미터 선택에 따라서 어떠한 영향을 받는지를 보여줍니다.</p>
<h3 id="dbscan-복습-및-심화">DBSCAN 복습 및 심화</h3>
<p>밀도 연결성(Density Connectivity)<strong>을 기반으로 군집을 찾고, 밀도가 낮은 지역의 점들은 **노이즈(-1)</strong>로 명시적으로 분리하는 기법입니다.
핵심 파라미터:</p>
<ul>
<li>eps (Epsilon): 이웃으로 간주할 최대 거리(반경).</li>
<li>min_samples: 군집을 형성하기 위한 최소 점 개수.</li>
</ul>
<p>점의 3가지 타입:</p>
<ol>
<li>Core Point (핵심점): eps 내에 min_samples 이상의 이웃을 가지는 점.(군집의 중심)</li>
<li>.Border Point (경계점): Core Point의 이웃이지만 자신은 Core가 아닌 점(군집의 가장자리)</li>
<li>Noise Point (노이즈): 어떤 Core Point의 이웃도 아닌 점.(label = -1)</li>
</ol>
<p>장점: K 지정 불필요 27, 복잡한 모양의 군집을 정확히 구분하고, 노이즈를 명시적으로 분리합니다29292929. 실전에서 대규모 데이터에 사용하기 더 빠릅니다.</p>
<p>파라미터 선택 팁: eps는 K-distance 그래프를 그려 &#39;팔꿈치&#39; 지점을 찾고, min_samples는 보통 **차원 수 X 2로 선택합니다.</p>
<p>그럼 저희가 군집화에서 배운 K-means, Mean Shift, DBSCAN은 언제 무엇을 사용할까?</p>
<table>
<thead>
<tr>
<th align="left">상황</th>
<th align="center">K-means</th>
<th align="center">Mean Shift</th>
<th align="right">DBSCAN</th>
</tr>
</thead>
<tbody><tr>
<td align="left">군집 모양</td>
<td align="center">구형 군집</td>
<td align="center">복잡한 모양 가능</td>
<td align="right">복잡한/비선형 모양 (원, 초승달)</td>
</tr>
<tr>
<td align="left">K 지정 여부</td>
<td align="center">필수</td>
<td align="center">불필요 (자동 결정)</td>
<td align="right">불필요 (자동 결정)</td>
</tr>
<tr>
<td align="left">노이즈 처리</td>
<td align="center">노이즈를 무조건 할당 (취약)</td>
<td align="center">자동 분리 (단, bandwidth 중요)</td>
<td align="right">명시적 분리 (label -1)</td>
</tr>
<tr>
<td align="left">속도</td>
<td align="center">빠름</td>
<td align="center">느림 (계산 비용 높음)</td>
<td align="right">빠름</td>
</tr>
<tr>
<td align="left">실전 추천</td>
<td align="center">빠른 탐색, 구형, 대규모 데이터</td>
<td align="center">매끄러운 밀도 분포, 소규모 데이터</td>
<td align="right">복잡한 모양, 노이즈 많음, 대규모 데이터</td>
</tr>
</tbody></table>
<p>DBSCAN 실습
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/bc8c4701-61db-42f3-ac3b-28ae4db9bd53/image.png" alt="">
이 코드를 실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/cffd8775-af20-4ed5-863c-6fadc7d59dbb/image.png" alt="">
그래프가 완만하게 증가하다가 <strong>&#39;팔꿈치(Elbow)&#39;</strong>처럼 급격히 꺾여 올라가는 지점이 나타납니다.
이 결과 &quot;팔꿈치&quot; 지점이 eps 값의 좋은 후보가 되며, 코드에서는 이 지점을 0.3으로 판단하고 빨간색 점선으로 표시해줍니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/d9ae4156-683d-4799-b57a-d74bad597704/image.png" alt=""></p>
<p>왼쪽(Original Data)은 make_moons로 생성된 초승달 2개와 make_circles로 생성된 동심원 2개가 합쳐진 총 400개의 데이터 포인트가 단일 색상으로 그려집니다.
오른쪽(DBSCAN)은 알고리즘이 데이터의 밀도를 기반으로 두 개의 뚜렷한 그룹(붉은색과 보라색)을 정확하게 찾아냈습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/b2f90106-654b-417c-b261-24cd485ba0f6/image.png" alt="">
eps = 0.2는 eps 값이 매우 작습니다. 즉, &quot;이웃&quot;으로 인정되는 반경이 매우 좁아
대부분의 점이 &#39;핵심점(Core point)&#39;이 되지 못하고 군집으로 연결되지 못했을 것입니다.</p>
<p>시각적 특징: 플롯의 <strong>대부분이 검은색 &#39;x&#39; (노이즈)</strong>로 채워져 있고, 아주 빽빽하게 뭉친 영역만 작은 군집(낮은 K값)으로 겨우 식별되었을 수 있습니다.</p>
<p>eps = 0.3는 eps 값이 0.2보다 커지면서, 더 많은 점이 이웃으로 연결되기 시작이 되고, 이는 의미 있는 형태의 군집(K값이 증가)이 나타나기 시작하였고, 데이터의 밀도에 따라 적절한 군집이 생겼다는걸 의미합니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/95cb0228-9416-4e57-ae7a-6cfadc138fc0/image.png" alt="">
eps = 0.5은 eps 값이 더 커져, 꽤 넓은 반경을 이웃을 지정하지만,
eps=0.3에서 분리되어 있던 군집들이 이 eps 값에서는 서로 연결되어 더 큰 군집으로 합쳐졌을 수 있습니다. (K값은 0.3보다 오히려 감소할 수 있음)</p>
<p>eps = 0.8은 eps 값이 매우 커서 웬만한 점들은 모두 이웃으로 연결됩니다.
거의 모든 데이터 포인트가 하나의 거대한 군집(K=1)**으로 합쳐져서 색이 하나로 칠해지게 되었습니다.</p>
<p><strong>결론 및 요약</strong></p>
<ul>
<li>eps가 너무 작으면 (0.2) 대부분의 데이터를 노이즈로 판단합니다.</li>
<li>eps가 너무 크면 (0.8) 모든 데이터를 하나의 군집으로 판단합니다.</li>
<li>따라서 eps = 0.3 일때, min_samples=4로 설정했을 때 군집화가 잘 되어있고 최적의 선택을 하였다라고 생각합니다.</li>
</ul>
<p>저의 머신러닝 심화 2일차는 이렇게 정리가 끝이 났습니다..
심화 내용이다 보니 정리하는데 시간이 좀 걸리네요
글만 몇 시간째 보고 있으니 눈이 침침합니다...
그런 의미로 최근에 본 (남의 집) 고양이와 요즘에도 평화로운 우리 수업 사진을 끝으로 마무으리!!
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/73157b27-f096-4e11-948b-da249c21cfa2/image.png" alt="">
바깥에서 생활하는 고얭이였는데 소품샵 사장님이 밥을 챙겨주시다보니 소품샵 안으로 살림 차리셨다고 합니댸용 아마 대문이 없어서 들락날락 거리기 쉬워서 뜨듯한 실내로 궁딩이 붙인게 아닐까..라는 사장님의 말씀
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/333e9078-cd06-488a-95b0-2b5b29eb9b26/image.png" alt="">
캐시템인 우주선.. 나랑 같이 수업듣는 동료분이 쉬는 시간에 조교님 근처에서 우주선 가지고 놀다가
조교님도 같이 삼총사 우주선이 되었다능🛸 
위에 닭 키우신 분은 곧 잡아먹으신다고 합니다(?)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 기초 5일차 - 비지도학습 (Unsupervised Learning)]]></title>
            <link>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-5%EC%9D%BC%EC%B0%A8-%EB%B9%84%EC%A7%80%EB%8F%84%ED%95%99%EC%8A%B5-Unsupervised-Learning</link>
            <guid>https://velog.io/@my_yeahjinly_log/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-5%EC%9D%BC%EC%B0%A8-%EB%B9%84%EC%A7%80%EB%8F%84%ED%95%99%EC%8A%B5-Unsupervised-Learning</guid>
            <pubDate>Thu, 06 Nov 2025 15:42:20 GMT</pubDate>
            <description><![CDATA[<p>AI 헬스케어 수업 일지 - 5일차: &quot;정답 없는 세계&quot; 비지도 학습(Unsupervised Learning)</p>
<p>👋AI 헬스케어 수업 5일차, 오늘은 드디어 <strong>비지도 학습(Unsupervised Learning)</strong>의 세계에 발을 들였습니다. 어제까지는 정답(레이블)이 있는 &#39;지도 학습&#39;을 배웠다면, 
오늘은 마치 암호 해독가처럼 정답 없이 데이터 속에 숨겨진 진짜 보물을 찾는 법을 배우도록 하겠습니다!</p>
<p>&quot;레이블 없이 배우기&quot; 라는 이름처럼, 비지도 학습은 <strong>데이터의 패턴</strong>이나 <strong>구조</strong>를 발견하는 데 초점을 맞춥니다. 
특히, 현실 세계처럼 데이터는 넘쳐나는데 일일이 정답을 달아주기 힘들거나 데이터가 너무 복잡해서 그 구조를 파악하고 싶을 때 최고의 무기가 됩니다. </p>
<p>오늘 배운 핵심 주제는 크게 두 가지입니다.
<strong>1. 차원 축소 (Dimensionality Reduction)</strong>: 데이터의 복잡도를 줄여주는 마법!
<strong>2. 군집화 (Clustering)</strong>: 비슷한 것끼리 자동으로 그룹 지어주는 기술!</p>
<p>자, 그럼 이 두 가지 핵심 개념과 그 속의 대표 알고리즘인 PCA와 K-Means, 그리고 계층적 군집화에 대해서 파헤쳐 봅시다!
.
.
.
.
오늘의 키워드를 말씀드리겠습니다.</p>
<ol>
<li>PCA (Principal Component Analysis)</li>
</ol>
<ul>
<li>고차원 데이터의 저주를 풀다</li>
</ul>
<ol start="2">
<li>K-Means Clustering</li>
</ol>
<ul>
<li>비슷한 것끼리 모이자</li>
<li>엘보우 기법(Elbow Method)과 실루엣 점수(Silhouette Score)</li>
</ul>
<ol start="3">
<li>Hierarchical Clustering</li>
</ol>
<ul>
<li>군집의 계층 구조를 파악 </li>
<li>Linkage Method와 Ward Linkage</li>
</ul>
<ol start="4">
<li>Dendrogram (덴드로그램)</li>
</ol>
<ul>
<li>계층적 군집화의 결과를 시각화로</li>
</ul>
<h1 id="1-🔍-고차원-데이터의-저주를-풀다-pca-principal-component-analysis">1. 🔍 고차원 데이터의 저주를 풀다: PCA (Principal Component Analysis)</h1>
<p>우리가 다루는 데이터는 종종 수백, 수천 개의 특성(Feature)을 가집니다. 
이미지는 수만 개의 픽셀일 수 있고, 유전자 데이터는 수만 개의 유전자 정보가 있습니다. 이렇게 차원이 너무 높아지면 발생하는 문제가 바로 <strong>&#39;차원의 저주(Curse of Dimensionality)&#39;</strong>입니다. 이는 계산 비용이 폭발하며, 모델은 과적합되기 쉬워집니다. 그리고 무엇보다 우리 눈으로 시각화가 불가능해요! 이때 등장하는 구원투수는 바로 <strong>PCA(주성분 분석)</strong>입니다.</p>
<h3 id="pca-principal-component-analysis">PCA (Principal Component Analysis)</h3>
<p>: 고차원 데이터를 저차원으로 압축을 할때, 정보 손실을 최소화하면서
차원을 줄이는 최선의 방법입니다</p>
<p><strong>PCA의 목표</strong>: 데이터가 가장 많은 정보를 담고 있는 방향, 즉 <strong>주성분(Principal Component)</strong>을 찾아 고차원의 데이터를 정보 손실을 최소화하며 저차원으로 압축하는 것입니다. 마치 3D 물체를 사진으로 찍을 때, 물체가 가장 잘 보이는 최적의 각도를 찾는 것과 같아요. 그 최적의 각도가 바로 &#39;주성분&#39;인 셈입니다.</p>
<p>🚀 PCA 작동 원리 (4단계)</p>
<ol>
<li>데이터 표준화 (필수!): 각 특성을 평균 0, 분산 1로 맞춰 스케일 차이를 없앱니다.</li>
<li>공분산 행렬 계산: 특성 간의 관계와 데이터가 퍼져있는 방향을 파악합니다.</li>
<li>고유값/고유벡터 계산: </li>
</ol>
<ul>
<li>고유값은 그 방향으로의 분산(정보량) 크기입니다.</li>
<li>고유벡터는 주성분의 방향입니다.</li>
</ul>
<ol start="4">
<li>상위 K개 선택: 고유값이 큰 순서대로(정보량이 많은 순서대로) 원하는 차원(K)만큼 주성분을 선택합니다.</li>
</ol>
<p>여기서 주성분에 대해서 좀 더 자세히 알아보도록 하겠습니다.</p>
<h4 id="주성분-principal-component은-무엇인가요">주성분 (Principal Component)은 무엇인가요?</h4>
<p>: 주성분은 데이터의 분산을 가장 효율적으로 포착하여 정보의 손실을 최소화하는 새로운 좌표축입니다.</p>
<p><strong>중요한 성질</strong></p>
<ol>
<li>주성분들은 서로 직교 (perpendicular)</li>
<li>PC1이 가장 많은 정보를 담음</li>
<li>PC2, PC3, ... 순서로 정보량 감소</li>
<li>원래 차원 = 주성분 개수</li>
</ol>
<p>예시
4차원 데이터 (Iris)</p>
<p>→ PC1: 73% 정보</p>
<p>→ PC2: 23% 정보</p>
<p>→ 두 개만으로 96% 설명!</p>
<h4 id="📊-주성분-개수-선택의-기준">📊 주성분 개수 선택의 기준:</h4>
<p>Scree PlotPCA로 몇 차원까지 줄여야 할까요? 너무 많이 줄이면 정보 손실이 크고, 너무 적게 줄이면 차원 축소 효과가 미미합니다. 
이때 필요한 것이 Scree Plot입니다.
Scree Plot은 각 주성분의 <strong>설명된 분산 비율(Explained Variance Ratio)</strong>을 그래프로 나타낸 것입니다.</p>
<ul>
<li>해석: 그래프의 기울기가 급격히 꺾이는 지점(Elbow)을 찾습니다. 그 지점까지만 주성분을 선택하는 것이 일반적입니다.</li>
<li>일반적인 목표: 보통 <strong>85~95%</strong>의 누적 분산을 보존하는 선에서 주성분 개수를 결정합니다.</li>
</ul>
<p>*<em>💻 PCA 실습 코드 *</em>
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/11013c97-127f-4ee6-bd31-f3096df36ce2/image.png" alt="">
이걸 실행하면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/8bdb4b39-61d1-4986-89e5-4c761e4459ae/image.png" alt="">
이런 결과를 얻을 수 있습니다.</p>
<h1 id="2-🤝-비슷한-것끼리-모여라-k-means-clustering">2. 🤝 비슷한 것끼리 모여라: K-Means Clustering</h1>
<p>K-Means는 가장 유명한 군집화(Clustering) 알고리즘입니다. 데이터에 정답이 없을 때, 비슷한 데이터끼리 군집을 만드는 것입니다. 마케팅의 고객 세분화나 이상 탐지 등 실제 활용도가 매우 높습니다. 가장 간단지만 강력한 알고지즘입니다.</p>
<p><strong>K-Means의 목표</strong></p>
<ul>
<li>미리 정한 K개의 중심점(Centroid)을 찾아, 각 군집 내 데이터와 중심 간의 거리 합을 최소화하는 것입니다. 다시 말해, &#39;군집 내부는 가깝게, 군집 간은 멀게&#39; 만드는 것이죠.</li>
</ul>
<p>비유하자면, 학교를 K개 지을 때, 모든 학생이 가장 가까운 학교에 배정되도록 학교 위치를 계속해서 이동하며 최적의 장소를 찾는 것과 같습니다.</p>
<h4 id="🔄-k-means-알고리즘-4단계-반복">🔄 K-Means 알고리즘 (4단계 반복)</h4>
<ol>
<li><p>초기화: K개의 중심점(Centroid)을 데이터 공간에 랜덤으로 배치합니다.</p>
</li>
<li><p>할당(Assignment): 모든 데이터를 가장 가까운 중심점에 배정합니다 (유클리디안 거리 기준).</p>
</li>
<li><p>업데이트(Update): 각 군집에 할당된 데이터들의 평균을 계산하여 새로운 중심점으로 이동시킵니다.</p>
</li>
<li><p>수렴 확인: 중심점의 위치가 더 이상 변하지 않으면 종료하고, 아니면 2단계로 돌아가서 반복합니다.</p>
</li>
</ol>
<h4 id="k-means-수식">K-Means 수식</h4>
<blockquote>
<p>Minimize Σ Σ ||xᵢ - μₖ||²
xᵢ: i번째 데이터
μₖ: k번째 군집 중심
||·||: 유클리디안 거리</p>
</blockquote>
<p>해석을 하자면
각 군집에서 데이터와 중심 간 거리의 제곱합으로 표현되며</p>
<p>Inertia이라는 관성이 있는데 이 값이 작을수록 군집이 잘 뭉쳐있습니다.</p>
<p><strong>### 💻 K-Means 실습 코드 및 최적 K 찾기</strong>
&lt;K-Means 실습 코드&gt;
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ca0e2ce0-29d6-43b9-8eaf-40c6c086fccd/image.png" alt="">
이 코드를 실행해보시면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/aa5dc514-d34c-4401-aa72-9ae762002dd1/image.png" alt="">
이러한 결과를 얻을 수 있습니다.</p>
<p>&lt;최적 K 찾기&gt;
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/48ceeae2-237d-4690-94b6-480e320c88d3/image.png" alt="">
이 코드를 실행해보시면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/cfdca716-9fd6-4189-affa-3a046135721b/image.png" alt="">
이러한 결과를 얻을 수 있습니다.
여기 최적의 K의 값을 찾을 때 엘보우 기법(Elbow Method)과 실루엣 점수(Silhouette Score)를 함께 보여주는 이유는 두 지표가 서로의 단점을 보완하여 가장 객관적이고 합리적인 $\text{K}$ 값을 결정하기 위함입니다. 엘보우 기법은 직관적으로 보여주며 실루엣 점수로는 객관적보기 위함입니다. </p>
<p><strong>엘보우 기법</strong>에서 최적의 K를 찾는 방법은 Inertia 값이 급격히 감소하다가 멈추는 지점, 즉 팔꿈치(Elbow) 모양이 되는 지점을 최적의 K로 선택합니다.
<strong>실루엣 점수의 범위</strong>는 -1 ~ 1 사이이며, 1에 가까울수록 군집 내 응집도가 높고 군집 간 분리도가 높다는 의미입니다. 이는 잘 군집되었다는걸 의미합니다.</p>
<p>두 지표를 함께 제시함으로써, <strong>&#39;가장 직관적인 지점&#39;</strong>과 <strong>&#39;가장 객관적인 품질&#39;</strong>을 모두 만족하는 $\text{K}$ 값을 선정했다는 분석의 합리성을 강력하게 어필할 수 있습니다.</p>
<p><strong>K-Means 장단점</strong></p>
<p>장점</p>
<ul>
<li>간단하고 빠름</li>
<li>확장성 좋음 (대용량)</li>
<li>구현 쉬움</li>
<li>해석 용이</li>
</ul>
<p>단점</p>
<ul>
<li>K를 사전에 지정</li>
<li>초기값에 민감</li>
<li>구형 군집만 가능</li>
<li>이상치에 약함</li>
<li>크기 다른 군집 어려움</li>
</ul>
<h1 id="3-🌳-군집의-계층-구조를-파악--hierarchical-clustering">3. 🌳 군집의 계층 구조를 파악 : Hierarchical Clustering</h1>
<p>K-Means는 K를 미리 정해야 하고 군집 모양이 구형(Spherical)일 때 잘 작동한다는 단점이 있습니다. 이러한 한계를 극복하고 싶을 때 <strong>계층적 군집화(Hierarchical Clustering)</strong>를 사용합니다.</p>
<h3 id="계층적-군집화hierarchical-clustering">계층적 군집화(Hierarchical Clustering)</h3>
<p>군집의 계층 구조를 만들어가며 분류합니다.
<strong>K를 미리 정하지 **않아도 되며</strong> 트리 구조로 <strong>전체가 파악이 되고, **원하는 수준</strong>에서 자르기 가능하다는 장점이 있습니다.</p>
<p>방식은 두가지가 있는데 Agglomerative(상향식)과 Divisive(하향식)으로 나뉩니다.</p>
<p><strong>Agglomerative(상향식)</strong>
각 점을 하나의 군집으로
→ 가까운 것끼리 합침
→ 하나의 군집까지</p>
<p><strong>Divisive (하향식)</strong>
모든 점을 하나의 군집으로
→ 멀리 있는 것 분리
→ 개별 군집까지</p>
<p>이 두가지 중에 가장 많이 쓰이는 것은 Agglomerative Clustering(상향식)입니다.
작동 순서는 4가지로 나뉩니다.</p>
<p><strong>1단계: 초기화</strong>
각 데이터 = 하나의 군집 (n개)</p>
<p><strong>2단계: 가장 가까운 군집 찾기</strong>
모든 군집 쌍의 거리 계산
가장 가까운 두 군집 선택</p>
<p><strong>3단계: 합치기</strong>
두 군집을 하나로 병합
군집 개수 1개 감소</p>
<p><strong>4단계: 반복</strong>
원하는 군집 개수가 될 때까지
또는 모두 하나가 될 때까지</p>
<p>이때, 군집 간의 거리를 어떻게 측정할 것인지를 <strong>Linkage Method</strong>라고 하는데, 군집 병합 시 분산 증가를 최소화하는 <strong>Ward Linkage</strong>가 크기가 비슷한 군집을 만들어서 가장 많이 추천됩니다.</p>
<p><strong>Single Linkage</strong></p>
<ul>
<li><p>두 군집에서 가장 가까운 점 간 거리</p>
</li>
<li><p>긴 체인 형태 생성 경향</p>
</li>
</ul>
<p><strong>Complete Linkage</strong></p>
<ul>
<li><p>두 군집에서 가장 먼 점 간 거리</p>
</li>
<li><p>둥근 군집 생성 경향</p>
</li>
</ul>
<p><strong>Average Linkage</strong></p>
<ul>
<li><p>모든 점 쌍의 평균 거리</p>
</li>
<li><p>균형잡힌 결과</p>
</li>
</ul>
<p><strong>Ward Linkage</strong></p>
<ul>
<li><p>병합 시 분산 증가 최소화</p>
</li>
<li><p>크기 비슷한 군집 생성 (추천!)</p>
</li>
</ul>
<p><strong>Hierarchical Clustering 실습</strong>
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/fe222a7b-4a72-413c-8c41-26768d9eed7c/image.png" alt="">
이 코드를 실행하시면
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/35ba2b5b-65a8-4e52-ad4c-9f2fd04bba06/image.png" alt="">
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/e1cd7e40-8bf2-41ee-a0b4-f0290b86e3bb/image.png" alt="">
이런 결과를 얻을 수 있습니다.</p>
<p><strong>Hierarchical 장단점</strong>
<strong>장점</strong></p>
<ul>
<li>K를 미리 안 정해도 됨</li>
<li>계층 구조 파악 가능</li>
<li>Dendrogram으로 시각화</li>
<li>다양한 모양 가능</li>
<li>결정론적 (재현 가능)</li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>느림 (O(n³))</li>
<li>메모리 많이 사용</li>
<li>대용량 데이터 어려움</li>
<li>잘못 합치면 되돌릴 수 없음</li>
</ul>
<p><strong>그럼 언제 사용해요?</strong>
• 데이터가 적을 때 (&lt; 10,000)
• 계층 구조가 중요할 때
• K를 모를 때</p>
<h1 id="🌲-dendrogram-덴드로그램">🌲 Dendrogram (덴드로그램)</h1>
<p>계층적 군집화의 결과를 시각화하는 핵심 도구이며</p>
<p><strong>가로축</strong>: 각 데이터 포인트
<strong>세로축</strong>: 군집이 합쳐질 때의 거리 또는 유사도
<strong>가지 (branch)</strong>: 군집이 합쳐지는 지점. 높을수록 멀리 떨어진 군집임</p>
<p>군집 개수 선택을 할때, 수평선을 그어 선과 만나는 수직선의 개수로 원하는 군집 개수(K)를 선택할 수 있으며 긴 수직선을 자르면 군집이 잘 분리된 지점을 찾을 수 있습니다.</p>
<p>🌟 <strong>오늘 배운 비지도 학습, 언제 써야 할까요?</strong></p>
<table>
<thead>
<tr>
<th align="left">특성</th>
<th align="center">K-Means</th>
<th align="right">Hierarchical</th>
</tr>
</thead>
<tbody><tr>
<td align="left">K 지정</td>
<td align="center">필수</td>
<td align="right">선택</td>
</tr>
<tr>
<td align="left">속도</td>
<td align="center">빠름</td>
<td align="right">느림 (O($n^3$))</td>
</tr>
<tr>
<td align="left">확장성</td>
<td align="center">대용량 OK</td>
<td align="right">소규모만 (데이터 &lt; 10,000)</td>
</tr>
<tr>
<td align="left">군집 모양</td>
<td align="center">구형</td>
<td align="right">다양</td>
</tr>
<tr>
<td align="left">계층 구조</td>
<td align="center">없음</td>
<td align="right">있음</td>
</tr>
<tr>
<td align="left">재현성</td>
<td align="center">랜덤 (n_init 필요)</td>
<td align="right">결정론적</td>
</tr>
<tr>
<td align="left">시각화</td>
<td align="center">산점도</td>
<td align="right">Dendrogram</td>
</tr>
</tbody></table>
<h3 id="군집화-평가">군집화 평가</h3>
<p><strong>1. Silhouette Score</strong>
군집 내부는 가깝고, 군집 간은 멀게
-1 ~ 1, 높을수록 좋음</p>
<p><strong>2. Davies-Bouldin Index</strong>
군집 내 거리 / 군집 간 거리
낮을수록 좋음</p>
<p><strong>3. Calinski-Harabasz Index</strong>
군집 간 분산 / 군집 내 분산
높을수록 좋음</p>
<p><strong>4. 시각적 평가</strong>
실제로 그려보고 판단
비즈니스 관점에서 의미있는지</p>
<h2 id="핵심-메시지">핵심 메시지</h2>
<p><strong>&quot;레이블이 없어도 배울 수 있다&quot;</strong></p>
<p><strong>비지도학습의 힘</strong></p>
<ul>
<li>숨겨진 패턴 발견</li>
<li>데이터 이해와 탐색</li>
<li>차원 축소로 시각화</li>
<li>자동 그룹화</li>
</ul>
<p>오늘 전 사실 수업을 잘 듣지는 못했어요..(꾸벅)
왜냐면 제 몸안에서 전쟁같은게 일어났기 때문에
열이 펄펄나고 그랬습니다.
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/761b554f-15bc-4183-9a32-c946cadca34e/image.png" alt="">
완전 TMI 사진이요. 저도 알아요.. 체온이 이게 말이되나 싶어서 머리골이 울리고 온몸이 쑤셔도 이건 찍어야된다 하고 사진 찍었습니다.. 그러고 약먹고 기절해버림
오후에 깨니 수업이 거의 끝나가더라구요 
수업공간도 많이 바뀌어 있어서 깜짝 놀랐습니다. 크리스마스 느낌이 물씬~</p>
<p><img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/ccca8860-4b02-4c27-a772-f78a4dba7127/image.png" alt="">
저번 4일차 마지막에 보여드린 파워레인저 오늘부터 루돌프로 변신~ 다른 분들도 같이 찰칵 📸 (왼쪽 구석즈음에 찍힌 조교님 캐릭이... 예사롭지가 않다)
<img src="https://velog.velcdn.com/images/my_yeahjinly_log/post/57968914-6177-457c-8009-8eb5f337ad4f/image.png" alt="">
성탄절은 아직 한달도 더 넘게 남았지만 미리 크리스마스를 즐겨보는 것도 나쁘진 않은듯~</p>
]]></description>
        </item>
    </channel>
</rss>