<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Lim.log</title>
        <link>https://velog.io/</link>
        <description>내가 공부하기 위해</description>
        <lastBuildDate>Sun, 20 Sep 2026 05:12:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Lim.log</title>
            <url>https://velog.velcdn.com/images/minah_94/profile/a3cb2546-5fed-44de-b5b9-c7dd6328f80b/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Lim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/minah_94" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[#0 난 SVN 에 대해서 알고싶다]]]></title>
            <link>https://velog.io/@minah_94/0-%EB%82%9C-SVN-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EA%B3%A0%EC%8B%B6%EB%8B%A4</link>
            <guid>https://velog.io/@minah_94/0-%EB%82%9C-SVN-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EA%B3%A0%EC%8B%B6%EB%8B%A4</guid>
            <pubDate>Sun, 20 Sep 2026 05:12:15 GMT</pubDate>
            <description><![CDATA[<h3 id="처음-접한-버전-제어-시스템vcs">처음 접한 버전 제어 시스템(VCS)</h3>
<p>난 대학생 3학년 때 슬슬 버전 관리를 접하게 되었다. 처음엔 같이 졸업작품을 만들면서 선배가 Git에 대해서 알려주면서 접하게 되었다.</p>
<p>확실히 파일을 압축해서 메일로 보내고, 다시 다운로드해서 세팅하고, 수정한 파일을 또 보내는 이러한 귀찮고 비효율적인 작업이 Git을 통해 많이 편해졌다.</p>
<p>Git을 사용하면서 코드를 수정한 뒤 변경 사항을 기록하고, 이전 코드와 비교하거나 필요하다면 과거의 코드로 돌아갈 수도 있었다.</p>
<p>처음에는 단순히 &quot;코드를 저장해두는 도구&quot; 정도로 생각했지만, 여러 명이 하나의 프로젝트를 함께 작업할 때 Git이 왜 필요한지 점점 이해하게 되었다.</p>
<p>정보처리기사 자격증을 공부하면서 Git 외에도 <strong>SVN(Subversion)</strong>이라는 버전 관리 도구가 있다는 것을 알게 되었다. </p>
<h3 id="그렇다면-svn은-뭘까">그렇다면 SVN은 뭘까?</h3>
<p>SVN은 Subversion의 줄임말로, Git과 마찬가지로 소스 코드의 변경 이력을 관리하기 위한 버전 관리 시스템(VCS, Version Control System)이다. </p>
<p>쉽게 말하면, &quot;파일이나 소스 코드가 언제, 어떻게 변경되었는지를 기록하고 관리하는 도구&quot; 라고 생각하면 된다.</p>
<p>난 여기서 한 가지 의문이 생겼다.</p>
<p><strong>&quot;Git도 여러 개발자가 코드를 공유하면서 버전을 관리하는데, SVN은 Git과 무엇이 다른 걸까?&quot;</strong>
<br></p>
<p>차이는 버전 관리 저장소를 구성하는 방식에 있다.</p>
<p>① SVN은 중앙 집중식 버전 관리 시스템(CVCS, Centralized Version Control System)이다.</p>
<p>쉽게 말하면 하나의 중앙 서버에 저장소(Repository)를 두고, 모든 개발자가 이 저장소를 중심으로 작업하는 방식​이다.</p>
<p>예를 들어 A와 B라는 개발자가 하나의 프로젝트를 개발한다고 해보자.</p>
<p><img src="https://velog.velcdn.com/images/minah_94/post/0735fa37-bafb-4e10-920d-942b72cc706f/image.png" alt=""></p>
<p>개발자는 중앙 저장소에서 소스 코드를 받아 작업하고, 작업이 끝나면 변경된 내용을 다시 중앙 저장소에 Commit한다.</p>
<p>다른 개발자가 변경한 내용이 있다면 Update를 통해 중앙 저장소의 최신 내용을 받아온다.</p>
<p>즉, SVN에서는 중앙 저장소가 프로젝트 버전 관리의 중심이 된다.</p>
<h4 id="그렇다면-git은">그렇다면 Git은?</h4>
<p>Git도 원격 저장소를 사용하기 때문에 겉으로 보면 SVN과 비슷하게 느껴질 수 있다.</p>
<p>하지만 Git은 분산 버전 관리 시스템(DVCS, Distributed Version Control System)이다.</p>
<p>Git에서는 단순히 최신 소스 코드만 가져오는 것이 아니라, 각 개발자의 로컬 저장소에도 프로젝트의 버전 이력이 함께 존재한다.</p>
<p><img src="https://velog.velcdn.com/images/minah_94/post/d7c957d6-55f5-42b0-975e-0ac6a01fa141/image.png" alt=""></p>
<p>각 개발자는 자신의 로컬 저장소에서 Commit을 하면서 버전 이력을 관리할 수 있다. 필요할 때 원격 저장소와 변경 내용을 주고받으며 다른 개발자와 작업 내용을 공유한다. </p>
<p>따라서 가장 간단하게 정리하면,</p>
<p><img src="https://velog.velcdn.com/images/minah_94/post/55c77118-a777-4bbb-ba1c-400e220a21e6/image.png" alt=""></p>
<p>결국 SVN과 Git 모두 여러 개발자가 함께 코드를 관리할 수 있는 버전 관리 도구이지만, 가장 큰 차이는 <strong>버전 이력을 어디에 가지고 있느냐</strong>에 있다.</p>
<p>SVN은 중앙 서버를 중심으로 버전을 관리하고, Git은 각 개발자의 로컬 저장소에도 버전 이력을 가지고 분산해서 관리한다.</p>
<p>처음에는 Git과 SVN이 단순히 &quot;코드를 공유하는 도구&quot;라고 생각했지만, 공부해보니 그보다 더 중요한 차이는 버전 관리 구조 자체에 있었다.</p>
<h3 id="svn은-어떻게-사용하는-걸까">SVN은 어떻게 사용하는 걸까?</h3>
<p>SVN의 기본적인 흐름은 다음과 같다.</p>
<p><strong>Checkout → 수정 → Commit → Update</strong></p>
<p>먼저 SVN 서버에 저장되어 있는 프로젝트를 <strong>Checkout</strong>하여 내 컴퓨터로 받아온다.</p>
<p>그다음 필요한 코드를 수정하고, 작업이 끝나면 변경한 내용을 <strong>Commit</strong>한다.</p>
<p>Commit을 하면 내가 수정한 내용이 SVN 서버의 저장소에 반영된다.</p>
<p>다른 개발자가 먼저 서버에 변경 사항을 반영했다면, <strong>Update</strong>를 통해 서버의 최신 변경 내용을 내 작업 공간으로 가져올 수도 있다.</p>
<p>이 과정을 반복하면서 여러 개발자가 하나의 프로젝트를 함께 개발하게 된다.</p>
<h3 id="git과-svn은-무엇이-다를까">Git과 SVN은 무엇이 다를까?</h3>
<p>여기서 처음에는 Git과 SVN이 비슷하게 느껴졌다.</p>
<p>둘 다 코드를 저장하고 변경 이력을 관리하며 여러 명이 협업할 수 있도록 도와주기 때문이다.</p>
<p>하지만 가장 큰 차이점은 <strong>저장소를 관리하는 방식</strong>에 있다.</p>
<p>SVN은 기본적으로 <strong>중앙 집중식 버전 관리 시스템(CVCS)</strong>이다.</p>
<p>반면 Git은 <strong>분산 버전 관리 시스템(DVCS)</strong>이다.</p>
<p>SVN에서는 중앙 서버에 있는 저장소가 중심이 된다.</p>
<p>개발자가 작업하기 위해 서버에서 코드를 받아오고, 작업한 내용을 다시 중앙 서버에 Commit하는 방식이다.</p>
<p>반면 Git은 각각의 개발자가 저장소의 전체 이력을 가지고 작업할 수 있다.</p>
<p>그래서 Git에서는 로컬 환경에서도 Commit을 하거나 과거의 변경 이력을 확인하는 등의 작업을 할 수 있다.</p>
<p>처음에는 단순히 &quot;Git과 SVN 모두 버전 관리 도구구나&quot;라고 생각했지만, 실제로는 <strong>버전 관리 방식을 바라보는 구조 자체가 다르다는 것</strong>을 알게 되었다.</p>
<p>결국 중요한 것은 특정 도구의 이름을 외우는 것이 아니라 <strong>&quot;왜 버전 관리가 필요하고, 개발자들은 어떤 방식으로 코드를 공유하고 변경 이력을 관리하는가?&quot;</strong> 를 이해하는 것이라고 생각한다.</p>
<h3 id="요약">요약</h3>
<ol>
<li><p><strong>SVN</strong>의 <strong>Commit = 중앙 저장소 직행</strong>: SVN은 중앙 집중형 구조(CVCS)이기 때문에, Commit을 실행하는 순간 내 컴퓨터의 변경 사항이 네트워크를 통해 중앙 서버(중앙 저장소)로 직접 전송 및 반영된다.</p>
</li>
<li><p><strong>Git</strong>의 <strong>Commit = 로컬 저장소 저장 / Push = 원격 저장소 전송</strong>: Git은 분산형 구조(DVCS)이므로, Commit은 내 컴퓨터(로컬 저장소) 스냅샷 저장일 뿐이고, Push를 해야 비로소 Server/GitHub(원격 저장소)로 전송된다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #23 바이브코딩은 개발의 시작? 혼란?]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-23-%EB%B0%94%EC%9D%B4%EB%B8%8C%EC%BD%94%EB%94%A9%EC%9D%80-%EA%B0%9C%EB%B0%9C%EC%9D%98-%EC%8B%9C%EC%9E%91-%ED%98%BC%EB%9E%80</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-23-%EB%B0%94%EC%9D%B4%EB%B8%8C%EC%BD%94%EB%94%A9%EC%9D%80-%EA%B0%9C%EB%B0%9C%EC%9D%98-%EC%8B%9C%EC%9E%91-%ED%98%BC%EB%9E%80</guid>
            <pubDate>Tue, 01 Sep 2026 07:40:21 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 뱅킹 분야의 대화형 AI란 무엇인가요?</li>
<li>출처 : <a href="https://www.ibm.com/kr-ko">IBM</a></li>
<li>기사 링크 : <a href="https://www.ibm.com/kr-ko/think/topics/conversational-ai-banking">https://www.ibm.com/kr-ko/think/topics/conversational-ai-banking</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>바이브 코딩은 단순한 코드 자동 생성을 넘어 프로토타입이나 풀스택 애플리케이션을 짧은 시간 안에 구현하고 반복적으로 개선할 수 있다는 장점이 있다.</li>
<li>전문가들은 바이브 코딩이 기존 소프트웨어 개발을 완전히 대체하기보다는, 개발자의 역할과 개발 방식이 변화하는 하나의 진화 과정이 될 가능성이 높다고 보고 있다.</li>
<li>바이브 코딩을 활용하면 아이디어를 빠르게 실제 동작하는 형태로 구현할 수 있어 프로토타이핑과 MVP 개발에 특히 효과적이다.</li>
<li>반면 AI가 생성한 코드를 충분히 이해하거나 검증하지 않고 사용하면 버그, 보안 취약점, 접근 제어 문제, 개인정보 유출 등의 위험이 발생할 수 있다.</li>
<li>AI가 생성하는 코드의 양이 많아질수록 개발자가 이를 직접 검토하고 테스트해야 하는 부담도 커질 수 있다.</li>
<li>바이브 코딩으로 생성된 코드가 실제 운영 환경에 사용될 경우에는 코드 리뷰, 테스트, 권한 관리, 보안 점검 등의 거버넌스가 필수적이다.</li>
<li>특히 운영 데이터베이스나 인프라에 AI를 직접 연결할 경우, 잘못된 명령으로 인해 실제 서비스와 데이터에 피해가 발생할 가능성도 있다.</li>
<li>따라서 현재의 바이브 코딩은 운영 환경의 모든 개발을 대체하기보다는 아이디어를 빠르게 검증하거나 프로토타입을 만드는 용도로 활용하는 것이 적절하다는 의견이 많다.</li>
<li>앞으로 바이브 코딩이 발전하면 개발자는 직접 코드를 작성하는 역할에서 벗어나 AI가 생성한 결과를 검토하고, 아키텍처를 설계하고, 테스트와 보안을 관리하는 역할이 더욱 중요해질 것으로 전망된다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p>1️⃣ <strong>소프트웨어 개발 생명주기(software development lifecycle, SDLC)</strong>
소프트웨어를 개발하고 운영하기까지의 전체 과정을 의미하며, 일반적으로 요구사항 분석 → 설계 → 개발 → 테스트 → 배포 → 유지보수 등의 단계로 이루어진다.</p>
</blockquote>
<blockquote>
<p>2️⃣ <strong>레플릿(Replit)</strong>
웹 브라우저에서 코드를 작성하고 실행할 수 있는 클라우드 기반 개발 플랫폼으로, 최근에는 생성형 AI를 활용해 자연어로 애플리케이션을 만들 수 있는 기능도 제공한다.</p>
</blockquote>
<blockquote>
<p>3️⃣ <strong>엣지 케이스(edge case) 오류</strong>
일반적인 상황에서는 잘 발생하지 않지만, 특정한 극단적인 조건에서 발생할 수 있는 예외적인 상황이나 입력을 의미한다. 이러한 상황을 충분히 고려하지 않으면 실제 서비스에서 예상하지 못한 오류가 발생할 수 있다.</p>
</blockquote>
<blockquote>
<p>4️⃣ <strong>로우코드</strong>
개발자가 직접 작성해야 하는 코드의 양을 최소화하고, 시각적인 인터페이스나 미리 만들어진 컴포넌트 등을 활용해 소프트웨어를 개발하는 방식이다.</p>
</blockquote>
<blockquote>
<p>5️⃣ <strong>AI 거버넌스</strong>
AI를 안전하고 책임감 있게 활용하기 위해 권한, 보안, 데이터, 검증 및 운영 기준 등을 관리하는 체계</p>
</blockquote>
<blockquote>
<p>6️⃣ <strong>데브섹옵스(DevSecOps)</strong>
개발(Development)과 운영(Operations)에 보안(Security)을 통합한 개발 방법론으로, 소프트웨어 개발의 모든 단계에서 보안을 함께 고려하는 방식이다.</p>
</blockquote>
<blockquote>
<p>7️⃣ <strong>시프트 레프트(shift left) 보안 프랙티스</strong>
개발이 완료된 이후 보안을 점검하는 것이 아니라 기획·설계·개발 초기 단계부터 보안을 고려하는 개발 방식</p>
</blockquote>
<blockquote>
<p>8️⃣ <strong>MVP(Minimum Viable Product)</strong>
핵심적인 기능만 구현한 최소 기능 제품으로, 실제 사용자의 반응을 빠르게 확인하고 서비스를 개선하기 위해 활용한다.</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>평소 바이브 코딩을 직접 사용해보면서 개발 속도를 크게 높일 수 있다는 장점을 체감했기 때문에, 이번 기사에서 이야기하는 바이브 코딩의 가능성에 공감했다. 실제로 간단한 기능이나 화면을 구현할 때 AI에게 요구사항을 설명하는 것만으로 빠르게 결과물을 만들 수 있어 아이디어를 확인하거나 프로토타입을 제작하는 데 상당히 유용하다고 느꼈다.</p>
<p>하지만 이번 기사를 통해 빠르게 만들어지는 것과 실제 서비스에 사용할 수 있는 것은 다른 문제라는 점을 다시 생각하게 되었다. AI가 만들어준 코드가 겉으로는 정상적으로 동작하더라도 보안 취약점이나 예외 상황, 유지보수의 어려움과 같은 문제가 존재할 수 있기 때문이다.</p>
<p>특히 기사에서 바이브 코딩을 주니어 개발자와 협업하는 것처럼 다뤄야 한다는 의견이 인상적이었다. AI가 만들어준 코드를 그대로 신뢰하기보다는 개발자가 코드 리뷰와 테스트를 수행하고, 필요한 부분은 직접 수정해야 한다는 의미로 받아들였다.</p>
<p>결국 바이브 코딩이 개발자를 없애는 기술이라기보다는 개발자의 역할을 변화시키는 기술에 가깝다고 생각한다. 단순히 코드를 작성하는 능력뿐만 아니라 AI가 생성한 코드를 이해하고 검증하며, 보안과 아키텍처까지 판단할 수 있는 역량이 앞으로 더욱 중요해질 것 같다.</p>
<p>특히 나 역시 바이브 코딩을 활용해 프로젝트를 진행하고 있기 때문에, &quot;AI가 만들어줬으니 동작한다&quot;에서 끝나는 것이 아니라 &quot;왜 이렇게 구현되었고, 실제 서비스에서도 안전하게 동작할 수 있는가?&quot;를 확인하는 과정이 중요하다는 점을 기억해야겠다고 생각했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #22 뱅킹 분야의 대화형 AI란 무엇인가요?]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-22-%EB%8C%80%ED%99%94%ED%98%95-AI-%EB%B1%85%ED%82%B9</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-22-%EB%8C%80%ED%99%94%ED%98%95-AI-%EB%B1%85%ED%82%B9</guid>
            <pubDate>Thu, 20 Aug 2026 07:40:45 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 뱅킹 분야의 대화형 AI란 무엇인가요?</li>
<li>출처 : <a href="https://www.ibm.com/kr-ko">IBM</a></li>
<li>기사 링크 : <a href="https://www.ibm.com/kr-ko/think/topics/conversational-ai-banking">https://www.ibm.com/kr-ko/think/topics/conversational-ai-banking</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>대화형 AI는 음성과 텍스트 전반에서 자연스러운 상호 작용을 가능하게 하기 때문에 디지털 뱅킹 서비스의 필수 요소로 자리 잡았다.</li>
<li>기술이 발전함에 따라 주요 금융 기관은 금융 규칙과 보안 요구 사항을 이해하는 시스템을 채택하고 있다.</li>
<li>뱅킹 분야에서 대화형 AI가 중요한 이유: </li>
<li>뱅킹 분야의 대화형 AI 사용 사례: 결제 알림 및 처리 / 데이터 캡처 및 분석 …</li>
<li>뱅킹 분야에서 대화형 AI의 이점: 옴니채널 및 다국어 도달 / 효율성 향상 및 비용 절감 …</li>
<li>뱅킹 분야에서 대화형 AI의 일반적인 배포 실수와 이를 방지하는 방법: AI 모니터링 및 재학습을 하지 않으면 시간이 지날수록 변화하는 고객의 요구나 새로운 데이터를 제대로 반영하지 못할 수 있다 → 지속적인 성능 모니터링과 개선이 필요하다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p>1️⃣ <strong>대화형 AI(Conversational AI)</strong>
자연어 처리(NLP), 머신러닝 등의 기술을 활용해 사용자의 음성이나 텍스트를 이해하고, 사람과 대화하듯 자연스럽게 상호작용하는 인공지능 기술을 의미</p>
</blockquote>
<blockquote>
<p>2️⃣ <strong>핀테크(FinTech)</strong>
금융(Finance)과 기술(Technology)의 합성어로, AI, 모바일, 빅데이터 등의 기술을 금융 서비스에 적용해 새로운 금융 서비스를 제공하는 것을 의미</p>
</blockquote>
<blockquote>
<p>3️⃣ <strong>옴니채널(Omnichannel)</strong>
웹사이트, 모바일 앱, 전화, 채팅 등 여러 채널을 연결해 사용자가 어떤 채널을 이용하더라도 일관된 서비스를 제공하는 방식을 의미</p>
</blockquote>
<blockquote>
<p>4️⃣ <strong>AI 모니터링 및 재학습</strong>
AI 서비스를 배포한 이후에도 성능과 사용자 반응을 지속적으로 확인하고, 오류나 개선이 필요한 부분을 분석해 데이터를 업데이트하고 성능을 개선하는 과정을 의미</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>나도 은행 앱을 사용하면서 최근 생성형 AI가 도입된 것을 직접 확인했다. 은행 앱은 제공하는 서비스와 메뉴가 많아 원하는 기능의 위치를 찾기 어려운 경우가 있는데, 이때 생성형 AI를 통해 필요한 메뉴나 기능의 위치를 찾았던 기억이 있다. 이처럼 일상적으로 사용하는 금융 서비스에도 생성형 AI가 점차 도입되고 있다는 것을 느끼고 있다.</p>
<p>실제로 이런 기능이 어떻게 구현되는지 궁금해 찾아보니, 생성형 AI가 은행 앱의 모든 정보를 단순히 학습하는 것이 아니라 사용자의 질문과 관련된 메뉴나 기능 정보를 검색한 뒤, 이를 AI에게 함께 제공하는 방식을 활용할 수 있다는 것을 알게 되었다. 예를 들어 은행 앱 내부의 메뉴 정보를 다음과 같이 관리할 수 있다.</p>
<pre><code>메뉴명: 해외송금
경로: 전체 메뉴 &gt; 외환 &gt; 해외송금
설명: 해외 계좌로 송금할 때 사용하는 기능
딥링크: bankapp://transfer/overseas</code></pre><p>이때 사용자가 “미국에 있는 친구에게 돈을 보내려면 어디로 들어가?”라고 질문하면, 시스템은 질문의 의도를 파악한 뒤 해외송금, 외환, 송금과 관련된 정보를 검색한다. 이후 해당 정보를 생성형 AI에게 함께 제공하면 AI는 이를 바탕으로 사용자에게 자연스럽게 기능을 안내할 수 있다.</p>
<p>평소에는 단순히 “AI가 앱을 잘 알고 있구나”라고 생각했는데, 직접 구현 방식을 찾아보니 AI의 자연어 이해 능력과 기존 서비스의 메뉴 데이터 및 화면 이동 기능을 연결해 사용자 경험을 설계하는 과정이라는 점이 흥미롭게 느껴졌다.</p>
<p>다만, 금융 서비스는 개인정보와 자산을 다루는 만큼 다른 서비스보다 정확성과 보안이 더욱 중요하다고 생각한다. 따라서 생성형 AI를 단순히 도입하는 것에 그치지 않고, 잘못된 정보를 제공했을 때 어떻게 대응할 것인지, 사용자가 해결하지 못한 문제를 어떻게 기존 상담 시스템이나 사람에게 연결할 것인지까지 함께 고려해야 한다고 생각한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #21 에이전틱 AI 시대 국내 금융기관]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-21-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-AI-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80-nzg2z2i3</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-21-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-AI-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80-nzg2z2i3</guid>
            <pubDate>Tue, 18 Aug 2026 09:56:04 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 에이전틱 AI 시대 국내 금융기관 96% 준비 중, 거버넌스 확신은 48%에 그쳐</li>
<li>출처 : <a href="https://www.itworld.co.kr/">IT World</a></li>
<li>기사 링크 : <a href="https://www.itworld.co.kr/article/4188180/%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-ai-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80-96-%EC%A4%80%EB%B9%84-%EC%A4%91-%EA%B1%B0%EB%B2%84%EB%84%8C%EC%8A%A4-%ED%99%95.html">https://www.itworld.co.kr/article/4188180</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>전 세계 금융기관의 96%가 에이전틱 AI 도입을 추진하고 있지만, 실제 운영 단계까지 진전한 비율은 19%에 불과했다.</li>
<li>콘텐츠, 커뮤니케이션, 거래 데이터를 실시간으로 연결할 수 있는 금융기관은 9%에 불과했으며, 분산된 데이터와 불명확한 책임 구조가 주요 과제로 지적됐다.</li>
<li>AI 도입이 확대될수록 직원의 역할 역시 단순 시스템 운영에서 AI의 작업 과정을 감시하고 검증하는 방향으로 변화할 것으로 예상된다.</li>
<li>결국 에이전틱 AI의 성공적인 도입을 위해서는 기술 자체뿐 아니라 데이터 관리, 책임 구조, 보안, 인력 역량까지 함께 준비해야 한다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p><strong>1️⃣ AI 거버넌스(AI Governance)</strong>
AI가 조직 내에서 안전하고 책임감 있게 사용될 수 있도록 데이터 관리, 보안, 규정 준수, 책임 범위 등을 관리하는 체계를 의미</p>
</blockquote>
<blockquote>
<p><strong>2️⃣ 데이터 거버넌스(Data Governance)</strong>
조직 내 데이터를 정확하고 일관성 있게 관리하고, 누가 어떤 데이터에 접근할 수 있는지 등의 기준을 정하는 관리 체계</p>
</blockquote>
<blockquote>
<p><strong>3️⃣ Human-in-the-Loop</strong>
AI가 모든 결정을 독립적으로 내리는 것이 아니라, 중요한 판단이나 실행 과정에서 사람이 검토하고 개입할 수 있도록 설계하는 방식을 의미</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>AI 에이전트는 단순히 답변을 생성하는 수준을 넘어 실제 시스템과 연결되어 정보를 조회하거나 작업을 수행하는 방향으로 발전하고 있다. 하지만 AI가 직접 행동할 수 있는 범위가 넓어질수록, 잘못된 판단이 단순한 잘못된 답변에서 끝나지 않고 실제 서비스나 사용자에게 영향을 줄 수 있다는 점에서 더욱 신중한 설계가 필요하다고 생각한다.</p>
<p>특히 기사에서 금융기관의 AI 도입 비율은 높지만 실제 운영 단계에 도달한 비율은 낮다는 점이 기억에 남았다. 이는 단순히 AI 기술을 도입하는 것과 실제 서비스 환경에서 안정적으로 운영하는 것은 전혀 다른 문제라는 것을 보여준다고 생각한다.</p>
<p>개발자의 관점에서도 앞으로는 AI를 서비스에 연결하는 것만으로 끝나는 것이 아니라, AI가 어떤 데이터에 접근할 수 있는지, 어떤 작업까지 실행할 수 있는지, 문제가 발생했을 때 누가 확인하고 책임질 것인지까지 함께 설계해야 하는 게 중요할 것 같다고 생각한다.</p>
<p>이전에는 AI를 얼마나 잘 활용하느냐에 집중했다면, 앞으로는 AI가 실수하더라도 큰 문제로 이어지지 않도록 안전장치를 설계하는 능력도 개발자에게 중요한 역량이 될 것이라고 생각한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #21 에이전틱 AI 시대 국내 금융기관]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-21-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-AI-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-21-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-AI-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80</guid>
            <pubDate>Sat, 15 Aug 2026 06:01:28 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 에이전틱 AI 시대 국내 금융기관 96% 준비 중, 거버넌스 확신은 48%에 그쳐</li>
<li>출처 : <a href="https://www.itworld.co.kr/">IT World</a></li>
<li>기사 링크 : <a href="https://www.itworld.co.kr/article/4188180/%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1-ai-%EC%8B%9C%EB%8C%80-%EA%B5%AD%EB%82%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80-96-%EC%A4%80%EB%B9%84-%EC%A4%91-%EA%B1%B0%EB%B2%84%EB%84%8C%EC%8A%A4-%ED%99%95.html">https://www.itworld.co.kr/article/4188180</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>전 세계 금융기관의 96%가 에이전틱 AI 도입을 추진하고 있지만, 실제 운영 단계까지 진전한 비율은 19%에 불과했다.</li>
<li>콘텐츠, 커뮤니케이션, 거래 데이터를 실시간으로 연결할 수 있는 금융기관은 9%에 불과했으며, 분산된 데이터와 불명확한 책임 구조가 주요 과제로 지적됐다.</li>
<li>AI 도입이 확대될수록 직원의 역할 역시 단순 시스템 운영에서 AI의 작업 과정을 감시하고 검증하는 방향으로 변화할 것으로 예상된다.</li>
<li>결국 에이전틱 AI의 성공적인 도입을 위해서는 기술 자체뿐 아니라 데이터 관리, 책임 구조, 보안, 인력 역량까지 함께 준비해야 한다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p><strong>1️⃣ AI 거버넌스(AI Governance)</strong>
AI가 조직 내에서 안전하고 책임감 있게 사용될 수 있도록 데이터 관리, 보안, 규정 준수, 책임 범위 등을 관리하는 체계를 의미</p>
</blockquote>
<blockquote>
<p><strong>2️⃣ 데이터 거버넌스(Data Governance)</strong>
조직 내 데이터를 정확하고 일관성 있게 관리하고, 누가 어떤 데이터에 접근할 수 있는지 등의 기준을 정하는 관리 체계</p>
</blockquote>
<blockquote>
<p><strong>3️⃣ Human-in-the-Loop</strong>
AI가 모든 결정을 독립적으로 내리는 것이 아니라, 중요한 판단이나 실행 과정에서 사람이 검토하고 개입할 수 있도록 설계하는 방식을 의미</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>AI 에이전트는 단순히 답변을 생성하는 수준을 넘어 실제 시스템과 연결되어 정보를 조회하거나 작업을 수행하는 방향으로 발전하고 있다. 하지만 AI가 직접 행동할 수 있는 범위가 넓어질수록, 잘못된 판단이 단순한 잘못된 답변에서 끝나지 않고 실제 서비스나 사용자에게 영향을 줄 수 있다는 점에서 더욱 신중한 설계가 필요하다고 생각한다.</p>
<p>특히 기사에서 금융기관의 AI 도입 비율은 높지만 실제 운영 단계에 도달한 비율은 낮다는 점이 기억에 남았다. 이는 단순히 AI 기술을 도입하는 것과 실제 서비스 환경에서 안정적으로 운영하는 것은 전혀 다른 문제라는 것을 보여준다고 생각한다.</p>
<p>개발자의 관점에서도 앞으로는 AI를 서비스에 연결하는 것만으로 끝나는 것이 아니라, AI가 어떤 데이터에 접근할 수 있는지, 어떤 작업까지 실행할 수 있는지, 문제가 발생했을 때 누가 확인하고 책임질 것인지까지 함께 설계해야 하는 게 중요할 것 같다고 생각한다.</p>
<p>이전에는 AI를 얼마나 잘 활용하느냐에 집중했다면, 앞으로는 AI가 실수하더라도 큰 문제로 이어지지 않도록 안전장치를 설계하는 능력도 개발자에게 중요한 역량이 될 것이라고 생각한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #19 클라우드 아키텍처에 대해]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-19-LLM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9E%90%EC%84%B8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-19-LLM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9E%90%EC%84%B8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Fri, 14 Aug 2026 12:03:18 GMT</pubDate>
            <description><![CDATA[<p>📰 오늘의 기사
제목 : 비용과 운영 혼란의 근원, 클라우드 아키텍처 기본기를 되묻다
출처 : <a href="https://www.itworld.co.kr/">IT WORLD</a>
기사 링크 : <a href="https://www.itworld.co.kr/article/4207038/%eb%b9%84%ec%9a%a9%ea%b3%bc-%ec%9a%b4%ec%98%81-%ed%98%bc%eb%9e%80%ec%9d%98-%ea%b7%bc%ec%9b%90-%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ec%95%84%ed%82%a4%ed%85%8d%ec%b2%98-%ea%b8%b0%eb%b3%b8%ea%b8%b0.html">https://www.itworld.co.kr/article/4207038</a>
📖 기사 핵심 요약</p>
<ul>
<li>클라우드 환경에서는 서버를 단순히 클라우드로 옮기는 것만으로는 효율적인 운영이 보장되지 않으며, 처음부터 아키텍처를 고려한 설계가 중요하다.</li>
<li>클라우드 비용 문제는 단순히 리소스를 많이 사용해서 발생하는 것이 아니라, 불필요한 리소스 유지와 관리되지 않는 서비스 증가 등 아키텍처와 운영 방식의 문제에서 발생할 수 있다.</li>
<li>클라우드 환경에서는 컴퓨팅, 스토리지, 네트워크 등 다양한 서비스를 목적에 맞게 선택하고 관리해야 한다.
특히 서비스가 확장될수록 누가 어떤 리소스를 사용하고 있는지 파악하기 어려워질 수 있기 때문에, 태그 관리와 리소스 구조화 같은 운영 기준이 필요하다.</li>
<li>장애와 비용 문제를 줄이기 위해서는 확장성, 가용성, 보안, 비용 등을 서비스 개발 이후가 아닌 아키텍처 설계 단계부터 함께 고려해야 한다.</li>
</ul>
<p>🔑 주요 키워드 정리</p>
<blockquote>
<p>1️⃣ <strong>클라우드 아키텍처(Cloud Architecture)</strong>
클라우드 환경에서 애플리케이션과 서버, 데이터베이스, 네트워크 등의 구성 요소를 어떻게 배치하고 연결할지 설계하는 구조를 의미한다.</p>
</blockquote>
<blockquote>
<p>2️⃣ <strong>가용성(Availability)</strong>
장애가 발생하더라도 서비스가 가능한 한 중단되지 않고 안정적으로 제공되는 정도를 의미한다.</p>
</blockquote>
<p>💡 나의 생각
최근 개인 프로젝트를 GitHub Actions를 이용해 배포하면서, 개발한 기능이 정상적으로 동작하는 것만큼 어떤 환경에서 어떻게 운영되는지를 이해하는 것도 중요하다는 것을 느꼈다. 로컬 환경에서는 문제가 없었지만 배포 환경에서는 화면이 정상적으로 표시되지 않았던 경험을 통해, 개발 과정에서 보이지 않는 설정과 환경의 차이가 실제 서비스의 안정성에 직접적인 영향을 줄 수 있다는 것을 경험했다.</p>
<p>이 기사를 읽으며 클라우드 역시 단순히 서버를 올려두는 공간이 아니라는 생각이 들었다. 서비스를 운영하기 위해서는 비용, 확장성, 가용성, 보안 등 다양한 요소를 함께 고려해야 하고, 이러한 문제들이 결국 아키텍처 설계와 연결되어 있다는 점이 인상적이었다.</p>
<p>아직 클라우드 서비스를 직접 깊게 다뤄본 경험은 많지 않지만, 앞으로 백엔드와 데이터베이스를 추가해 서비스를 운영하게 된다면 단순히 “배포에 성공하는 것”에서 끝나는 것이 아니라, 왜 이런 구조를 선택했고 어떤 문제가 발생할 수 있는지까지 고민하는 개발자가 되어야겠다고 생각했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #18 LLM에 대해서 자세히 알아보기]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-18-LLM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9E%90%EC%84%B8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-18-LLM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9E%90%EC%84%B8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Sun, 21 Jun 2026 07:10:50 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : PM은 LLM을 어디까지 이해해야 할까?</li>
<li>출처 : <a href="https://yozm.wishket.com/magazine/">요즘 IT</a></li>
<li>기사 링크 : <a href="https://yozm.wishket.com/magazine/detail/3784/">https://yozm.wishket.com/magazine/detail/3784/</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>LLM(대규모 언어 모델)은 복잡한 사고를 하는 것이 아니라, 다음에 올 단어를 확률적으로 예측하는 방식으로 동작한다.</li>
<li>LLM은 텍스트를 토큰(Token) 단위로 처리하며, 언어에 따라 토큰 사용량과 비용이 달라진다.</li>
<li>LLM은 컨텍스트 윈도우라는 제한된 단기 기억만 가지고 있어 장기 기억을 위해서는 별도의 시스템 설계가 필요하다.
같은 질문에도 답변이 달라지는 이유는 추론 과정에서 확률적으로 토큰을 선택하기 때문이다.</li>
<li>AI는 사실 여부를 검증하지 않고 가장 그럴듯한 답을 생성하기 때문에 환각(Hallucination)이 발생할 수 있다.</li>
<li>기업에서는 환각 문제를 줄이기 위해 RAG(Retrieval-Augmented Generation)를 활용해 내부 문서나 외부 자료를 참고하도록 한다.</li>
<li>에이전트(Agent)는 LLM에 다양한 도구를 연결해 실제 작업을 수행할 수 있도록 확장한 개념이다.</li>
<li>PM은 AI의 기술적 세부사항을 모두 알 필요는 없지만, 토큰·컨텍스트·추론·RAG·에이전트 정도는 이해해야 올바른 의사결정을 내릴 수 있다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p><strong>1️⃣ LLM</strong>
대규모 언어 모델(LLM)은 방대한 양의 데이터로 사전 학습된 초대형 딥 러닝 모델.</p>
</blockquote>
<blockquote>
<p><strong>2️⃣ 에이전트</strong>
LLM이 단순히 답변하는 것을 넘어 검색, 예약, 이메일 발송 등 실제 행동을 수행할 수 있도록 확장한 구조.</p>
</blockquote>
<blockquote>
<p><strong>3️⃣ RAG(Retrieval-Augmented Generation)</strong>
LLM이 답변을 생성하기 전에 관련 문서를 검색하여 참고하도록 하는 기술. 기업용 AI 서비스에서 환각을 줄이는 핵심 방법.</p>
</blockquote>
<blockquote>
<p><strong>4️⃣ 컨텍스트(Context)</strong>
LLM이 현재 대화에서 참고할 수 있는 정보 범위. 컨텍스트 한도를 초과하면 이전 내용을 잊어버린 것처럼 동작한다.</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>이번 기사는 PM을 대상으로 작성된 글이지만, 필자와 같은 주니어 개발자나 개발자를 준비하는 사람들에게도 도움이 되는 내용이라고 생각한다. LLM이라는 개념을 막연히 어렵고 복잡한 기술로만 생각했는데, 대학 시절 ML/DL을 공부하며 접했던 내용들이 실제로 LLM의 동작 원리와 연결되어 있다는 점이 흥미로웠다.</p>
<p>특히 같은 질문에도 서로 다른 답변이 나오는 이유를 설명하는 추론(Inference) 부분이 인상 깊었다. 과거 프로젝트를 진행하면서 항상 가장 높은 정확도의 결과만 선택하는 방식에 한계를 느꼈고, 다양한 후보를 두고 그중에서 선택하는 방식도 고민했던 경험이 있다. 그런데 기사에서 LLM 역시 확률 분포를 기반으로 답을 &#39;계산하는 것&#39;이 아니라 &#39;선택하는 것&#39;에 가깝다는 설명을 보고 반가웠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #3-1 DFS/BFS - 타겟 넘버]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-1-DFSBFS-%ED%83%80%EA%B2%9F-%EB%84%98%EB%B2%84</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-1-DFSBFS-%ED%83%80%EA%B2%9F-%EB%84%98%EB%B2%84</guid>
            <pubDate>Tue, 16 Jun 2026 12:22:53 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: DFS/BFS</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/43165">타겟 넘버</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">import java.util.*;

class Solution {

    public int solution(int[] numbers, int target) {

        // return dfs(0, 0, target, numbers);

        return bfs(numbers, target);
    }

    private int dfs(int idx, int sum, int target, int[] numbers) {

        if(idx == numbers.length) {
            return sum == target ? 1 : 0;
        }

        return dfs(idx + 1, sum + numbers[idx], target, numbers)
             + dfs(idx + 1, sum - numbers[idx], target, numbers);
    }

    private int bfs(int[] numbers, int target) {

        int answer = 0;

        Queue&lt;Node&gt; queue = new LinkedList&lt;&gt;();
        queue.offer(new Node(0, 0));

        while(!queue.isEmpty()) {

            Node now = queue.poll();

            if(now.idx == numbers.length) {

                if(now.sum == target) {
                    answer++;
                }

                continue;
            }

            queue.offer(
                new Node(
                    now.idx + 1,
                    now.sum + numbers[now.idx]
                )
            );

            queue.offer(
                new Node(
                    now.idx + 1,
                    now.sum - numbers[now.idx]
                )
            );
        }

        return answer;
    }

    static class Node {
        int idx;
        int sum;

        Node(int idx, int sum) {
            this.idx = idx;
            this.sum = sum;
        }
    }
}</code></pre>
<ul>
<li>문제 핵심: </li>
<li>DFS는 재귀,깊게 끝까지 파고 넘어가는 걸 이해하기.</li>
<li>BFS는 Queue로, 순차적으로 넓게 진행 된다는 걸 이해하기.</li>
</ul>
<h3 id="📌-느낀-점">📌 느낀 점</h3>
<p>DFS/BFS 패턴의 감을 익힌다면 쉽게 풀릴것이라 생각한다. 그래서 패턴을 익히기 이전엔 &#39;재귀&#39;와 &#39;큐&#39;를 이해하고 푸는 것이 수월할 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #3 DFS/BFS]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-DFSBFS</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3-DFSBFS</guid>
            <pubDate>Tue, 09 Jun 2026 08:10:10 GMT</pubDate>
            <description><![CDATA[<h1 id="📌-dfsbfs이란">📌 DFS/BFS이란?</h1>
<h3 id="dfs">DFS</h3>
<p><code>DFS(node)</code>
① DFS(Depth-First Search, 깊이우선탐색)는 시작 노드에서 한 방향의 끝까지 탐색 후, 다시 되돌아와 다른 경로를 탐색하는 방식이다.</p>
<p>그래서 다시 돌아오는 형질이 있기 때문에 <strong>&#39;스택(Stack)&#39;</strong> 자료구조나 <strong>&#39;재귀 함수&#39;</strong>를 사용해야 한다. 완전 탐색과같은 특징을 파악해야 한다.</p>
<h3 id="bfs">BFS</h3>
<p><code>Queue&lt;Integer&gt; queue = new LinkedList&lt;&gt;();</code>
② BFS (Breadth-First Search, 너비 우선 탐색)는 시작 노드에서 가까운 노드부터 방문하는 넓에 퍼져나가는 탐색 방식이다. </p>
<p>그래서 FIFO 방식인 <strong>큐(Queue)</strong> 자료구조를 사용해야 한다. 최단 경로를 구할 때 주용 사용된다.</p>
<p>✅ 정점의 수를 V, 간선의 수를 E라고 할 때, 두 알고리즘 모두 </p>
<ul>
<li>인접 리스트 방식을 사용하면 O(V+E)</li>
<li>인접 행렬 방식을 사용하면 O(V²)</li>
</ul>
<p>의 시간이 소요된다.</p>
<h3 id="1️⃣-대표적인-문제">1️⃣ 대표적인 문제</h3>
<p><img src="https://velog.velcdn.com/images/minah_94/post/d58d7d26-def8-4ed6-bab8-67bfd8bbff0f/image.png" alt=""></p>
<h3 id="2️⃣-dfs-문제-공식">2️⃣ DFS 문제 공식</h3>
<p>언제 DFS를 의심할까?
문제에 이런 단어가 보이면 DFS 가능성이 높다.</p>
<ul>
<li>모든 경우의 수</li>
<li>가능한 모든 경로</li>
<li>조합</li>
<li>순열</li>
<li>백트래킹</li>
</ul>
<p>📌 DFS는 크게 2가지로 나뉜다.
1️⃣ 그래프 DFS (네트워크/연결 요소 찾기/트리 탐색)</p>
<pre><code class="language-java">void dfs(int node){
    visited[node] = true;

    for(int next : graph[node]){
        if(!visited[next]){
            dfs(next);
        }
    }
}</code></pre>
<p>2️⃣ 완전탐색 DFS(타겟 넘버/N-Queen/순열/조합/피로도)</p>
<pre><code class="language-java">dfs(depth + 1);
dfs(depth + 1);</code></pre>
<h4 id="dfs-사고-과정">&lt; DFS 사고 과정 &gt;</h4>
<p><strong>✅ STEP 1. 현재 상태 정의</strong>
현재 내가 무엇을 탐색하고 있는가?</p>
<p>예)</p>
<p>타겟 넘버
→ 현재 인덱스, 현재 합</p>
<p>N-Queen
→ 현재 행</p>
<p>순열
→ 현재 선택 개수</p>
<p><strong>✅ STEP 2. 종료 조건 정의</strong></p>
<pre><code class="language-java">if(종료조건){
    return;
}</code></pre>
<p>예) <code>if(idx == numbers.length)</code></p>
<p><strong>✅ STEP 3. 다음 상태 탐색</strong>
<code>dfs(다음상태);</code>
가능한 모든 선택지를 재귀 호출한다.</p>
<p><strong>✅ STEP 4. 방문 안 했으면 재귀</strong></p>
<pre><code class="language-java">if(!visited[next]){
    dfs(next);
}</code></pre>
<h3 id="2️⃣-bfs-문제-공식">2️⃣ BFS 문제 공식</h3>
<p>언제 BFS를 의심할까?
문제에 이런 단어가 보이면 BFS 가능성이 높다.</p>
<ul>
<li>최단 거리</li>
<li>최소 이동 횟수</li>
<li>가장 빨리 도착</li>
<li>몇 번 만에 도달</li>
</ul>
<pre><code class="language-java">Queue&lt;Integer&gt; queue = new LinkedList&lt;&gt;();

queue.offer(start);
visited[start] = true;

while(!queue.isEmpty()){

    int now = queue.poll();

    for(int next : graph[now]){

        if(!visited[next]){

            visited[next] = true;
            queue.offer(next);
        }
    }
}</code></pre>
<h4 id="bfs-사고-과정">&lt; BFS 사고 과정&gt;</h4>
<p><strong>✅ STEP 1. 시작점 Queue 삽입</strong></p>
<pre><code class="language-java">queue.offer(start);</code></pre>
<p><strong>✅ STEP 2. 방문 처리</strong></p>
<pre><code class="language-java">visited[start] = true;</code></pre>
<p><strong>✅ STEP 3. Queue에서 꺼내기</strong></p>
<pre><code class="language-java">int now = queue.poll();</code></pre>
<p><strong>✅ STEP 4. 다음 노드 확인</strong></p>
<pre><code class="language-java">for(int next : graph[now])</code></pre>
<p><strong>✅ STEP 5. 방문 안 했으면 Queue 삽입</strong></p>
<pre><code class="language-java">if(!visited[next]){
    visited[next] = true;
    queue.offer(next);
}</code></pre>
<blockquote>
<p><strong>⚠️ DFS/BFS 문제의 핵심</strong></p>
</blockquote>
<p>DFS/BFS에서 가장 중요한 것은 <span style="color: red">중복 방문 방지</span>이다.</p>
<p>이미 방문한 노드를 다시 탐색하면 무한 루프에 빠질 수 있기 때문에 방문 배열을 사용한다.</p>
<pre><code class="language-java">boolean[] visited = new boolean[n + 1];</code></pre>
<p>혹은 </p>
<pre><code class="language-java">boolean[][] visited = new boolean[n][m];</code></pre>
<p>와 같이 관리한다.</p>
<h3 id="3️⃣-그리디-알고리즘-문제">3️⃣ 그리디 알고리즘 문제</h3>
<ul>
<li>프로그래머스
<a href="https://school.programmers.co.kr/learn/courses/30/parts/12421">DFS/BFS 문제 정리 사이트
</a></li>
<li>LeetCode
<a href="https://leetcode.com/problem-list/depth-first-search/">LeetCode DFS Problem List</a>
<a href="https://leetcode.com/problem-list/breadth-first-search/">LeetCode BFS Problem List</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #2-3 구현 알고리즘 - 신규 아이디 추천]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-3-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-3-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C</guid>
            <pubDate>Fri, 05 Jun 2026 09:44:59 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 구현 알고리즘</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/72410">신규 아이디 추천</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">import java.util.*;
import java.io.*;

class Solution {
    public String solution(String new_id) {

        return checkId(new_id);
    }

    private String checkId(String new_id) {

        // 1. 대문자 -&gt; 소문자
        new_id = new_id.toLowerCase();

        // 2. 특정 문자 외 특수 문자 제거
        new_id = new_id.replaceAll(&quot;[^a-z0-9-_.]&quot;,&quot;&quot;);

        // 3. (.) 2번 이상 연속 -&gt; 1개로 치환
        new_id = new_id.replaceAll(&quot;\\.{2,}&quot;,&quot;.&quot;);

        // 4. 처음과 끝이 마침표
        new_id = new_id.replaceAll(&quot;^\\.|\\.$&quot;,&quot;&quot;);

        // 5. 빈 문자열
        if(new_id.equals(&quot;&quot;)){
            new_id = &quot;a&quot;;
        }

        // 6. 16자 이상일 경우
        if(new_id.length() &gt; 15){
            new_id = new_id.substring(0, 15);
            new_id = new_id.replaceAll(&quot;^\\.|\\.$&quot;,&quot;&quot;);
        }

        // 7. 3자리 이하일 경우
        if(new_id.length() &lt; 3){
            char last = new_id.charAt(new_id.length() - 1);

            while(new_id.length() &lt; 3){
                new_id += last;
            }
        }

        return new_id;
    }
}</code></pre>
<ul>
<li>문제 핵심: </li>
<li>자바의 여러가지 함수가 필요함.</li>
</ul>
<h3 id="📌-느낀-점">📌 느낀 점</h3>
<p>문제 자체의 난이도는 높지 않았지만, 평소에 자주 사용하지 않던 문자열 관련 함수와 정규식을 알고 있어야 수월하게 해결할 수 있었다. 특히 replaceAll(), substring(), charAt() 등의 사용법을 다시 정리할 수 있는 문제였다. 알고리즘적인 아이디어보다는 문자열을 조건에 맞게 구현하는 능력이 중요했으며, 관련 함수만 익숙하다면 누구나 충분히 접근할 수 있는 문제라고 느꼈다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #17 AI의 코드 의존성에 대한 이야기]]></title>
            <link>https://velog.io/@minah_94/IT-%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-17-AI%EC%9D%98-%EC%BD%94%EB%93%9C-%EC%9D%98%EC%A1%B4%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0</link>
            <guid>https://velog.io/@minah_94/IT-%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-17-AI%EC%9D%98-%EC%BD%94%EB%93%9C-%EC%9D%98%EC%A1%B4%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0</guid>
            <pubDate>Thu, 28 May 2026 04:16:05 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 코드는 AI가 짠다, 책임은 누가 지나</li>
<li>출처 : <a href="https://www.itworld.co.kr/">IT WORLD</a></li>
<li>기사 링크 : <a href="https://www.itworld.co.kr/article/4177478/%ec%bd%94%eb%93%9c%eb%8a%94-ai%ea%b0%80-%ec%a7%a0%eb%8b%a4-%ec%b1%85%ec%9e%84%ec%9d%80-%eb%88%84%ea%b0%80-%ec%a7%80%eb%82%98.html">https://www.itworld.co.kr/article/4177478</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>실리콘밸리는 SW 개발이 &#39;프롬프트 입력 후 즉시 배포&#39;하는 작업으로 변모하기 직전이라고 외쳐왔다.</li>
<li>구글의 신규 코드 중 75%가 이제 AI로 생성되어 엔지니어의 검토를 거치고 있다고 밝혔다.</li>
<li>오픈클로를 개발한 엔지니어는 &#39;바이브 슬롭&#39; 범람에 대한 이야기를 했다.</li>
<li>AI 열풍을 떠받치는 전제를 재점검해야 할 시점이 온 것이다.</li>
<li>숙련된 사람에게는 더 많은 일을 더 빠르게 해낼 수 있는 힘을 준다. 반면 미숙하거나 부주의한 사람에게는 더 큰 실수를 더 큰 자신감으로 저지를 수 있는 힘을 준다.</li>
<li>진짜 문제는 대규모 언어 모델이 매우 빠르게 그럴듯한 결과물을 생성한다는 점이다. 빠르고 그럴듯한 것은 정확히 프로덕션 환경에 슬그머니 침투하는 종류의 오류다.</li>
<li>AI는 결과물이 해당 시스템, 보안 모델, 성능 범위, 사용자 요구, 기업 기준에 부합하는지 빠르고 정확하게 판단할 수 있는 사람에게 보상한다.</li>
<li>AI 슬롭의 추악한 경제학이다. 생성 비용은 저렴하지만 검토 비용은 비싸다.</li>
<li>실질적인 질문은 결함이 줄었는지, 납기가 빨라졌는지, 장애가 줄었는지, 고객이 더 만족하는지다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p><strong>1️⃣ 바이브 슬롭(vibe slop)</strong>
생성형 AI 기술이 발전하면서 파생된 두 가지 신조어인 &#39;바이브(Vibe)&#39;와 &#39;슬롭(Slop)&#39;이 결합된 개념.</p>
</blockquote>
<blockquote>
<p><strong>2️⃣ 슬롭(slop)</strong>
인공지능(AI) 기술을 이용해 대량으로 생산되는 저품질의 디지털 콘텐츠를 의미.</p>
</blockquote>
<blockquote>
<p><strong>3️⃣ 엔터프라이즈 AI</strong>
대규모 조직의 비즈니스 과제를 해결하기 위해 기업용 시스템과 데이터에 인공지능을 결합하는 것을 뜻</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>이번 기사는 AI 활용에 대해 비교적 현실적인 시각을 담고 있다.</p>
<p>특히 인상 깊었던 문장은 “생성 비용은 저렴하지만 검토 비용은 비싸다”는 부분이었다. 실제로 AI는 빠르게 그럴듯한 결과물을 만들어내지만, 그 결과물이 정말 맞는지 검증하는 데에는 오히려 더 많은 시간과 책임이 필요하다. 코드도 마찬가지다. AI가 코드를 작성할 수는 있지만, 그 코드가 보안적으로 안전한지, 기존 시스템과 충돌하지 않는지, 유지보수가 가능한지는 결국 사람이 판단해야 한다.</p>
<p>최근 바이브 코딩이나 노코드 자동화에 관심을 가지며 Zapier 같은 툴을 직접 사용해보면서도 비슷한 점을 느꼈다. 처음에는 AI와 자동화 도구만 있으면 금방 완성될 것처럼 보였지만, 실제로는 흐름 설계와 예외 처리, 검증 단계가 훨씬 중요했다. AI는 빠르게 초안을 만드는 데에는 강하지만, 그 결과물을 실제 서비스 수준으로 끌어올리는 과정에서는 여전히 사람의 경험과 판단이 필요했다.</p>
<p>다만 기사에서 말한 “숙련된 사람에게는 더 많은 생산성을, 미숙한 사람에게는 더 큰 실수를 저지를 힘을 준다”는 문장에서 AI를 제대로 이해하지 못한 상태에서 무분별하게 사용하는 것은 위험할 수 있기에 더 숙련된 사람들이 옆에서 멘토 역할을 해줘야 한다고 생각한다. 예전에도 신입 개발자들은 선배 개발자의 코드 리뷰와 피드백을 통해 성장했듯이, AI 시대에도 결국 중요한 건 협업과 학습 문화라고 느꼈다.</p>
<p>AI는 사람을 완전히 대체하는 존재라기보다는, 잘 이끌어주고 방향을 잡아줄 사람이 있을 때 더 큰 시너지를 낼 수 있는 도구에 가깝다고 생각한다. 그래서 앞으로는 단순히 AI를 잘 쓰는 능력보다도, 다른 사람이 AI를 더 안전하고 효과적으로 활용할 수 있도록 도와주는 역량 역시 중요할 듯 하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #2-2 구현 알고리즘 - [카카오 인턴] 키패드 누르기]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-2-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4-%ED%82%A4%ED%8C%A8%EB%93%9C-%EB%88%84%EB%A5%B4%EA%B8%B0</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-2-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4-%ED%82%A4%ED%8C%A8%EB%93%9C-%EB%88%84%EB%A5%B4%EA%B8%B0</guid>
            <pubDate>Wed, 27 May 2026 11:03:57 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 구현 알고리즘</li>
<li>문제 링크: [[프로그래머스 - [카카오 인턴] 키패드 누르기]](<a href="https://school.programmers.co.kr/learn/courses/30/lessons/67256">https://school.programmers.co.kr/learn/courses/30/lessons/67256</a>)</li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = &quot;&quot;;
        int target = 0; // 눌러야할 키패드
        int[] lefts = new int[]{1, 4, 7};
        int[] rights = new int[]{3, 6, 9};
        int left = 10; // 현재 위치 &#39;*&#39;
        int right = 12; // 현재 위치 &#39;#&#39;

        for(int i = 0; i &lt; numbers.length; i++){
            target = numbers[i];

            if(target == 0) target = 11;

            if(isLeft(target, lefts)){
                answer += &#39;L&#39;;
                left = target;
            } else if(isRight(target, rights)){
                answer += &#39;R&#39;;
                right = target;
            } else { // 거리 계산
                int ifL; int ifR;
                ifL = Math.abs(left - target) / 3 + Math.abs(left - target) % 3;
                ifR = Math.abs(right - target) / 3 + Math.abs(right - target) % 3;

                if(ifR &lt; ifL) {
                    answer += &#39;R&#39;;
                    right = target;
                } else if(ifR &gt; ifL) {
                    answer += &#39;L&#39;;
                    left = target;
                } else { // 거리 같을 때
                    if(hand.equals(&quot;right&quot;)) {
                        answer += &#39;R&#39;;
                        right = target;
                    } else {
                        answer += &#39;L&#39;;
                        left = target;
                    }

                }
            }
        }
        return answer;
    }

    private boolean isLeft(int target, int[] lefts){

        for(int i = 0; i &lt; lefts.length; i++) {
            if(target == lefts[i]){
                return true;
            }
        }
        return false;
    }

    private boolean isRight(int target, int[] rights){

        for(int i = 0; i &lt; rights.length; i++) {
            if(target == rights[i]){
                return true;
            }

        }
        return false;
    }

}</code></pre>
<ul>
<li>문제 핵심: </li>
<li>함수를 따로 만들어 left/right 키패드 분리</li>
<li>거리 계산은 (절대값 / 3 ) + (절대값 % 3)</li>
<li>이때 절대값은 &#39;왼쪽, 오른쪽 손가락 위치 - 타겟 위치&#39;</li>
</ul>
<h3 id="📌-느낀-점">📌 느낀 점</h3>
<p>역시 구현 알고리즘은 코드는 길어질지라도 내가 생각한 대로만 코드를 짜면 어느정도 풀리는 것 같다. 그러나 단순히 코드만 작성하는 것이 아닌 어느정도의 논리적인 부분도 필요하다. 위의 문제인 경우 키패드는 3열 4행이니까 /와 %를 이용해야 거리를 계산할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #16 AI 시대 개발자의 역할 변화]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-16-AI-%EC%8B%9C%EB%8C%80-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%97%AD%ED%95%A0-%EB%B3%80%ED%99%94</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-16-AI-%EC%8B%9C%EB%8C%80-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%97%AD%ED%95%A0-%EB%B3%80%ED%99%94</guid>
            <pubDate>Fri, 22 May 2026 09:49:40 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 바이브 코더 11명과 함께 사내 플랫폼 만들어봤습니다</li>
<li>출처 : <a href="https://yozm.wishket.com/">요즘 IT</a></li>
<li>기사 링크 : <a href="https://yozm.wishket.com/magazine/detail/3758/">https://yozm.wishket.com/magazine/detail/3758/</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>AI에게 중요한 건 똑똑함이 아니라 맥락이다.</li>
<li>개발자들은 그 맥락을 어떻게 안저적으로 전달할 수 있을지 설계한다.</li>
<li>AI 대화 세션이 하나 열릴 때마다 서버 안에서 해당 프로젝트의 코드베이스를 통째로 복제했다.</li>
<li>글의 핵심 메시지는 “개발자의 역할이 코드를 작성하는 사람에서, AI와 사람이 함께 일할 환경을 설계하는 사람으로 이동하고 있다”는 점이다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p>1️⃣ 바이브 코딩 (Vibe Coding)
AI와 자연어 기반으로 대화하며 서비스를 구현하는 개발 방식. 비개발자도 기능 제작에 참여할 수 있다는 특징이 있다.</p>
</blockquote>
<blockquote>
<p>2️⃣ 가드레일 (Guardrail)
AI와 사용자가 실수하더라도 전체 시스템이 망가지지 않도록 제한과 검증 장치를 두는 개념. E2E 테스트와 격리된 작업 환경이 대표 사례로 소개됐다.</p>
</blockquote>
<blockquote>
<p>3️⃣ E2E
End-to-End(엔드투엔드)의 약자로, ‘처음부터 끝까지’, ‘시작점부터 종착점까지’의 전체 과정을 의미.</p>
</blockquote>
<blockquote>
<p>4️⃣ 플랫폼 사고(Platform Thinking)
한 사람을 돕는 것이 아니라, 여러 사람이 동시에 서비스를 만들 수 있는 기반 자체를 만드는 사고방식.</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>예전에는 AI를 잘 활용한다는 것이 단순히 “프롬프트를 잘 작성하는 것”이라고 생각했다. 하지만 이 글을 읽고 나서는 AI를 잘 활용하는 사람은 결국 “AI가 일할 수 있는 환경 자체를 설계하는 사람”이라는 생각이 들었다.</p>
<p>특히 인상 깊었던 부분은 AI에게 계속 더 좋은 답변을 요구한 것이 아니라, AI가 참고할 공통 문서와 규칙을 만들었다는 점이었다. design-system, docs, 스키마 문서화 같은 작업은 사람 입장에서는 귀찮고 반복적인 정리처럼 보일 수 있지만, AI에게는 정확한 맥락을 제공하는 핵심 장치였다. 결국 AI의 성능 차이는 모델 자체보다도 어떤 컨텍스트를 주느냐에서 나온다는 걸 다시 느꼈다.</p>
<p>무엇보다 가장 흥미로웠던 건 개발자의 역할 변화에 대한 부분이다. 예전에는 개발자의 핵심 역량이 “얼마나 빠르고 정확하게 코드를 작성하느냐”에 있었다면, 이제는 “AI와 사람이 함께 일할 수 있는 판을 얼마나 잘 설계하느냐”로 이동하고 있다는 느낌을 받았다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #15 AX 실험기]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-15-AX-%EC%8B%A4%ED%97%98%EA%B8%B0</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-15-AX-%EC%8B%A4%ED%97%98%EA%B8%B0</guid>
            <pubDate>Sat, 16 May 2026 02:42:13 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : 12분 49초 만에 한 달치 기획이 나왔다: 콘텐츠 AX 실험기</li>
<li>출처 : <a href="https://yozm.wishket.com/">요즘 IT</a></li>
<li>기사 링크 : <a href="https://yozm.wishket.com/magazine/detail/3647/">https://yozm.wishket.com/magazine/detail/3647/</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>AI에게 한 번에 모든 작업을 맡기기보다, 리서치·기획·글쓰기·검수를 역할별 에이전트로 분리했을 때 더 높은 품질의 결과물이 나왔다.</li>
<li>AI 검색 시대에는 “AI에게 잘 읽히는 콘텐츠”의 중요성이 커지고 있다고 분석했다.</li>
<li>슬랙 명령어 하나만으로 한 달치 콘텐츠 기획안과 제목, H2 구조, CTA까지 자동 생성되는 시스템을 구축했다.</li>
<li>결국 자동화는 단순히 “AI가 글을 써주는 것”이 아니라, 사람의 업무 과정을 어떻게 구조화하고 분리할 것인지의 문제라고 설명한다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p>1️⃣ <strong>GEO(Generative Engine Optimization)</strong>
ChatGPT, Gemini, Perplexity 같은 생성형 AI 검색 엔진이 콘텐츠를 더 잘 인용하고 활용할 수 있도록 구조화하는 최적화 방식</p>
</blockquote>
<blockquote>
<p>2️⃣ <strong>콘텐츠 자동화 파이프라인(Content Automation Pipeline)</strong>
콘텐츠 기획, 생성, 검수, 발행, 뉴스레터 변환 등을 단계별로 자동화하는 시스템 구조</p>
</blockquote>
<blockquote>
<p>3️⃣ <strong>AI 에이전트(AI Agent)</strong>
특정 역할과 목적을 가지고 독립적으로 작업을 수행하는 AI 시스템. 리서치, 기획, 작성 등 역할을 분리해 협업 가능</p>
</blockquote>
<blockquote>
<p>4️⃣ <strong>Trigger–Condition–Action(T–C–A)</strong>
자동화의 기본 구조로, 특정 이벤트(Trigger)가 발생하면 조건(Condition)을 검사한 뒤 작업(Action)을 수행하는 방식</p>
</blockquote>
<blockquote>
<p>5️⃣ <strong>프롬프트 엔지니어링(Prompt Engineering)</strong>
AI에게 원하는 결과를 얻기 위해 작업 맥락, 역할, 조건 등을 구조적으로 설계하는 과정</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>최근 노코드와 자동화에 관심이 생겨 직접 Zapier를 이용해 뉴스 리뷰 요약을 Google Docs에 자동 삽입하는 실습을 해보았다. 그래서 처음에는 이 글도 단순히 Zapier, Make, n8n, Dify 같은 자동화 툴들의 차이점을 설명하는 글이라고 생각했다.</p>
<p>하지만 실제로는 “자동화를 어떻게 설계해야 하는가”에 대한 이야기였다는 점이 인상 깊었다.
자동화는 단순히 툴을 연결하는 작업이 아니라, 사람이 반복적으로 수행하던 업무를 어떻게 분리하고 구조화할 것인지에 대한 설계 과정이라는 걸 느꼈다.</p>
<p>특히 가장 흥미로웠던 부분은 AI에게 한 번에 모든 작업을 맡기지 않고, 리서처 에이전트와 플래너 에이전트처럼 역할을 나눠 단계별로 처리했다는 점이었다. 처음에는 AI가 한 번에 다 처리할수록 더 효율적일 거라고 생각했는데, 오히려 작업을 세분화할수록 결과물의 품질과 신뢰도가 높아진다는 점이 새롭게 다가왔다.</p>
<p>또한 이 글을 통해 AI 자동화에서 중요한 것은 단순한 개발 능력이 아니라, “업무 흐름을 이해하고 기획할 수 있는 능력”이라는 생각도 들었다. 결국 AI도 사람이 어떤 맥락과 목표를 주느냐에 따라 결과가 완전히 달라지기 때문이다.</p>
<p>앞으로는 단순히 코드를 잘 작성하는 개발자보다, 반복 업무를 구조적으로 분석하고 AI에게 적절히 역할을 위임할 수 있는 사람이 더 중요한 역량을 가지게 될 것 같다고 느꼈다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[뉴스 리뷰] #14 노코드 툴, 차이점 비교]]></title>
            <link>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-14-%EB%85%B8%EC%BD%94%EB%93%9C-%ED%88%B4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@minah_94/%EB%89%B4%EC%8A%A4-%EB%A6%AC%EB%B7%B0-14-%EB%85%B8%EC%BD%94%EB%93%9C-%ED%88%B4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Fri, 15 May 2026 03:50:55 GMT</pubDate>
            <description><![CDATA[<h2 id="📰-오늘의-기사">📰 오늘의 기사</h2>
<ul>
<li>제목 : Zapier vs Make vs n8n 보다 미리 알아야 할 것들</li>
<li>출처 : <a href="https://yozm.wishket.com/">요즘 IT</a></li>
<li>기사 링크 : <a href="https://yozm.wishket.com/magazine/detail/3580/">https://yozm.wishket.com/magazine/detail/3580/</a></li>
</ul>
<hr>
<h2 id="📖-기사-핵심-요약">📖 기사 핵심 요약</h2>
<ul>
<li>자동화는 툴 고르기가 아닌 업무 흐름에서 반복 작업을 분리해 위임하는 설계의 문제다.</li>
<li>업무에서 줄여야 할 반복이 어디에 숨어있나 찾는 일부터 시작해야 한다.</li>
<li>툴은 수단인데, 수단이 목적을 끌고 가는 순간 실패 확률이 올라간다.</li>
<li>업무 자동화는 분리 -&gt; 표준화 -&gt; 위임 프레임으로 보는 것이 좋다.</li>
<li>자동화 툴들은 대부분 같은 문법을 따른다. [트리거 - 조건 - 액션] 구조<ul>
<li>&quot;만약 [트리거]가 발생하면, [조건]을 검색해서, 맞으면 [액션]을 실행한다&quot;.</li>
</ul>
</li>
<li>업무 흐름을 이 단계로 잘 나누면 사람이 손으로 넘기는 지점이 나타나고, 자동화는 보통 그 지점에 들어갈 때 가장 큰 효과가 나며, 사람이 시스템 사이를 오가는 순간을 찾아 대체하는 느낌이다.</li>
<li>거창한 설계는 실패의 지름길이다.</li>
<li>첫 자동화는 끝까지 목표로 하지 않는 게 안전하다.</li>
<li>자동화의 목적을 자주 점검해야 한다.(리드타임을 줄이고, 누락을 막고, 중복 없애기)</li>
<li>현업에서는 돌아가긴 하는데 불안한 자동화가 가장 위험하다. (권한/보안, 책임 소재)</li>
</ul>
<hr>
<p>[Zapier]</p>
<ul>
<li>분기가 적을수록 속도가 난다. 연결을 빠르게 해서 도입 초반엔 일단 돌아가게 하는데 강하다.</li>
<li>복잡한 설계보다 실행이 먼저인 팀에 잘 맞는다.</li>
<li>다만 조건이 늘고 시나리오가 커질수록 관리가 어렵다.
[Make]</li>
<li>한 번의 트리거에서 여러 액션으로 뻗는 형태에 유리하다.</li>
<li>시각화는 처음에는 좋지만, 복잡해지면 오히려 어디에 손을 대야하나 싶은 감각을 주기도 한다.
[n8n]</li>
<li>사내 시스템 연동 같은 케이스에 적합하다.</li>
<li>커스터마이징에 초점이 맞춰진 도구다.</li>
<li>코드 기반 처리를 할 수 있다.</li>
<li>통제권을 온전히 쥐는 자동화에 적합하다.</li>
<li>입문에 난이도가 있다.
[Dify]</li>
<li>생각하는 단계에 맡기는 도구에 가깝다.</li>
<li>n8n보다 조금 더 난이도가 있다.</li>
</ul>
<hr>
<h2 id="🔑-주요-키워드-정리">🔑 주요 키워드 정리</h2>
<blockquote>
<p>1️⃣ <strong>업무 자동화(Workflow Automation)</strong>
반복적으로 수행되는 업무를 시스템이나 소프트웨어가 대신 수행하도록 만드는 과정이다.</p>
</blockquote>
<blockquote>
<p>2️⃣ <strong>Trigger–Condition–Action(T–C–A)</strong>
자동화의 기본 구조이다.
Trigger(시작 조건) → Condition(실행 조건 판단) → Action(실제 수행) 순서로 동작한다.</p>
</blockquote>
<hr>
<h2 id="💡-나의-생각">💡 나의 생각</h2>
<p>요근래 노코드의 개념부터 직접 실습까지 해보자는 생각으로, 최근에는 Zapier를 활용해 뉴스 리뷰 요약 내용을 Google Docs에 자동으로 삽입하는 자동화 흐름을 만들어보고 있다. 그래서 이 기사를 처음 봤을 때만 해도 단순히 Zapier, Make, n8n 같은 자동화 툴들의 차이점과 특징을 비교해주는 글이라고 생각했다.</p>
<p>하지만 글을 읽으면서 느낀 건, 자동화의 핵심은 “어떤 툴을 쓰느냐”보다 “어떤 업무를 어떻게 분리하고 설계하느냐”에 더 가깝다는 점이었다. 특히 반복되는 업무를 단순히 줄이는 것이 아니라, 업무 흐름 속에서 반복성과 규칙성을 찾아 시스템에 위임하는 과정이라는 설명이 인상 깊었다.</p>
<p>또한 Trigger–Condition–Action(T–C–A) 구조로 자동화를 바라보는 방식도 굉장히 실무적이라고 느꼈다.
예를 들어 내가 하고 있는 뉴스 리뷰 자동화 역시:</p>
<p>Trigger: 새로운 뉴스 리뷰 작성
Condition: 특정 키워드 또는 형식 만족
Action: Google Docs에 자동 저장</p>
<p>처럼 구조화할 수 있다는 점에서 자동화를 조금 더 체계적으로 이해하게 되었다.</p>
<p>특히 인상 깊었던 부분은 “자동화는 사람을 완전히 대체하는 것이 아니라, 사람이 반복적으로 하던 전달·복사·확인 같은 작업을 시스템에 위임하는 설계”라는 관점이었다. 이전에는 자동화를 단순히 편리한 기능 정도로 생각했는데, 이제는 업무 흐름 자체를 분석하고 병목을 찾아내는 사고방식이 더 중요하다는 걸 느꼈다.</p>
<p>툴 비교 부분도 흥미로웠다. Zapier는 빠르고 단순한 연결에 강하고, Make는 복잡한 흐름 설계, n8n은 높은 자유도와 자체 호스팅, Dify는 AI 기반 판단과 분류에 강점이 있다는 점에서 각각의 역할이 명확하게 다르다는 걸 알게 되었다. 결국 “어떤 툴이 최고인가”가 아니라, “현재 내 업무의 병목이 무엇인가”에 따라 선택해야 한다는 점도 공감됐다.</p>
<p>앞으로는 단순히 AI나 자동화 툴을 사용하는 수준을 넘어, 반복 업무를 구조적으로 바라보고 이를 효율적으로 위임할 수 있는 설계 능력이 더 중요해질 것 같다. 나 역시 작은 자동화부터 직접 만들어보면서, 단순 사용자가 아니라 업무 흐름을 설계할 수 있는 개발자로 성장해보고 싶다는 생각이 들었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #2-1 구현 알고리즘 - 실패율]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-1-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%ED%8C%A8%EC%9C%A8</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-1-%EA%B5%AC%ED%98%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%ED%8C%A8%EC%9C%A8</guid>
            <pubDate>Tue, 12 May 2026 06:46:53 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 구현 알고리즘</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/42889">프로그래머스 - 실패율</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];

        HashMap&lt;Integer, Double&gt; map = new HashMap&lt;&gt;(); // 스테이지 번호, 실패율

        int users = stages.length; // 총 참여 인원
        double rate = 0; // 실패율

        for(int i = 1; i &lt;= N; i++){

            int count = 0; // 실패자 카운트

            for(int j = 0; j &lt; stages.length; j++){

                // ex) 1번 스테이지(N) 다 돌며 1번 실패자 찾기.
                if(i == stages[j]){
                    count++;
                }
            }

            if(users == 0) {
                rate = 0;
            } else {
                rate = (double) count / users;
            }

            map.put(i, rate);

            users = users - count;
        }

        // 실패율 정렬(내림차)
        List&lt;Map.Entry&lt;Integer, Double&gt;&gt; list =
                new ArrayList&lt;&gt;(map.entrySet());

        list.sort(Map.Entry.&lt;Integer, Double&gt;comparingByValue().reversed());

        for(int i = 0; i &lt; N; i++){
            answer[i] = list.get(i).getKey();
        }

        return answer;
    }
}</code></pre>
<ul>
<li>문제 핵심: </li>
<li><code>HashMap</code>을 이용해 stage 마다 실패율 저장.</li>
<li>현재 스테이지에 머물러 있는 사람 수(count)를 이용해 실패율 계산.</li>
<li>스테이지를 순회하면서 이전 스테이지 실패 인원을 제외하기 위해 <code>users -= count</code> 처리.</li>
<li>Map.Entry와 comparingByValue()를 사용하여 실패율 기준 내림차순 정렬.</li>
</ul>
<h3 id="📌-정렬-핵심-mapentry">📌 정렬 핵심 (Map.Entry)</h3>
<pre><code class="language-java">HashMap = 저장용
List&lt;Entry&gt; = 정렬용 변환 구조
Comparator = 정렬 기준
-------------------------------------------------------------------------
✔ comparingByValue()
- value 기준 정렬
- 기본은 오름차순
✔ reversed()
- 정렬 방향 반전 → 내림차순
- list.sort(Map.Entry.&lt;Integer, Double&gt;comparingByValue().reversed());
    ☞ 실패율 높은 순으로 정렬</code></pre>
<p>+추가 정리
<strong>✔ comparingByKey()</strong>
key 기준 정렬 가능
스테이지 번호 기준 정렬할 때 사용</p>
<h3 id="📌-느낀-점">📌 느낀 점</h3>
<p>처음에는 문제 설명이 직관적으로 와닿지 않아 혼란이 있었지만,
“현재 스테이지 = 아직 클리어하지 못한 위치”라는 구조를 이해한 뒤 풀이 방향이 명확해졌다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #2 구현(Implementation)]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-%EA%B5%AC%ED%98%84Implementation</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2-%EA%B5%AC%ED%98%84Implementation</guid>
            <pubDate>Tue, 12 May 2026 05:34:47 GMT</pubDate>
            <description><![CDATA[<h1 id="📌-구현이란">📌 구현이란?</h1>
<p>구현 알고리즘은 머릿속에 있는 문제 해결 과정을 코드로 정확하게 표현하는 문제 유형이다. 그래서 논리적으로는 이해가 가지만 코드로 작성하게 되면 길어지는 경우가 있다.</p>
<p>즉, 복잡한 아이디어보다는 조건에 맞게 하나씩 그대로 작성하는 능력이 중요하다.</p>
<p>대표적으로는 다음과 같은 상황에서 사용된다.</p>
<blockquote>
<p>문자열 처리
시뮬레이션 문제
좌표 이동 문제
배열 회전 문제</p>
</blockquote>
<h3 id="1️⃣-대표적인-문제">1️⃣ 대표적인 문제</h3>
<p>🕹️ 상하좌우 문제</p>
<p>N x N 크기의 공간에서
사용자의 이동 계획에 따라 위치를 이동하는 문제</p>
<p>이동 가능한 방향:</p>
<p>L : 왼쪽
R : 오른쪽
U : 위
D : 아래</p>
<p>&lt;풀이 핵심&gt;
: 이동 방향에 따라 좌표를 직접 변경한다.</p>
<pre><code class="language-java">int n = 5;

String[] move = {&quot;R&quot;, &quot;R&quot;, &quot;R&quot;, &quot;U&quot;, &quot;D&quot;, &quot;D&quot;};

int x = 1;
int y = 1;

for(String dir : move){

    if(dir.equals(&quot;L&quot;) &amp;&amp; y &gt; 1){
        y--;
    }

    else if(dir.equals(&quot;R&quot;) &amp;&amp; y &lt; n){
        y++;
    }

    else if(dir.equals(&quot;U&quot;) &amp;&amp; x &gt; 1){
        x--;
    }

    else if(dir.equals(&quot;D&quot;) &amp;&amp; x &lt; n){
        x++;
    }
}

System.out.println(x + &quot; &quot; + y);</code></pre>
<h3 id="2️⃣-그리디-알고리즘-문제-공식">2️⃣ 그리디 알고리즘 문제 공식</h3>
<p>구현 문제를 보면 보통 아래 흐름으로 접근한다.</p>
<p><strong>✅ STEP 1. 문제 조건 정리하기</strong>
ex) </p>
<ul>
<li>무엇을 이동하는가?</li>
<li>무엇을 출력해야 하는가?</li>
<li>예외 조건은 무엇인가?</li>
</ul>
<p><strong>✅ STEP 2. 변수와 상태 정의하기</strong></p>
<p>현재 위치, 방향, 시간, 배열 상태 등을 변수로 저장한다.</p>
<p>예시:</p>
<p>좌표(x, y)
방향(dx, dy)
시간(time)
방문 여부(boolean)</p>
<p><strong>✅ STEP 3. 조건대로 그대로 코드 작성하기</strong></p>
<p>구현 문제는 알고리즘 아이디어보다
“문제에서 하라는 것을 정확하게 구현”하는 것이 핵심이다.</p>
<p>반복문과 조건문을 이용해
문제 흐름을 차근차근 코드로 옮긴다.</p>
<blockquote>
<p>구현 문제는 문제 조건을 꼼꼼히 읽고 직접 흐름을 따라가는 연습이 핵심이다</p>
</blockquote>
<h3 id="3️⃣-구현-알고리즘-문제">3️⃣ 구현 알고리즘 문제</h3>
<ul>
<li>프로그래머스<ul>
<li>시뮬레이션
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/60061">기둥과 보 설치</a></li>
<li>문자열 구현: 문자열을 직접 하나씩 처리하는 문제
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/60057">문자열 압축</a>
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/72410">신규 아이디 추천</a></li>
<li>완전탐색 + 구현: 모든 경우를 직접 구현해서 검사
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/42840">모의고사</a>
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/42840">체육복</a></li>
<li>배열 구현(2차원)
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/67256">키패드 누르기</a>
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/17679">프렌즈4블록</a></li>
<li>조건 처리 구현
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/17681">비밀지도</a>
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/42889">실패율</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #1-3그리디 알고리즘(Greedy Algorithm) - 구명보트]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-3</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-3</guid>
            <pubDate>Mon, 11 May 2026 05:35:50 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 그리디 알고리즘</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/42885">프로그래머스 - 구명보트</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        Arrays.sort(people);

        int left = 0; // 가장 가벼운 사람
        int right = people.length - 1; // 가장 무거운 사람
        int answer = 0;

        while(left &lt;= right) {
            if(people[left] + people[right] &lt;= limit) {
                left++;
            }
            right--;
            answer++;
        }


        return answer;
    }
}</code></pre>
<ul>
<li>문제 핵심: 가장 무거운 사람 기준으로 생각하기.</li>
<li><code>투포인터</code>를 이용해 턴 마다 가장 무거운 사람을 무조건 태워 보내야 한다는 개념으로 코드 설계</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #1-2 그리디 알고리즘(Greedy Algorithm) - 조이스틱]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-2-%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Greedy-Algorithm-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-2-%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Greedy-Algorithm-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1</guid>
            <pubDate>Fri, 08 May 2026 09:04:55 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 그리디 알고리즘</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/42860?language=java">프로그래머스 - 조이스틱</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">class Solution {
    public int solution(String name) {
        int answer = 0;

        // 좌우 이동 최소값
        int move = name.length() - 1;

        for(int i = 0; i &lt; name.length(); i++) {
            char c = name.charAt(i);

            // 위/아래 이동 계산
            answer += Math.min(c - &#39;A&#39;, &#39;Z&#39; - c + 1);

            int next = i + 1;

            while(next &lt; name.length() &amp;&amp; name.charAt(next) == &#39;A&#39;) next++;

            // 좌우 이동 최소값 갱신(예: AAAABBA)
            move = Math.min(move, i+name.length() - next + Math.min(i, name.length() - next));
        }

        answer += move;

        return answer;
    }
}</code></pre>
<p>[핵심코드]</p>
<ul>
<li><p>위/아래 조작(알파뱃 조작)</p>
<ul>
<li><code>Math.min(c-&#39;A&#39;, &#39;Z&#39;-c+1)</code><ul>
<li><code>c - &#39;A&#39;</code>: 위로 이동 (A → B 방향)</li>
<li><code>&#39;Z&#39; - c + 1</code>: 아래로 이동 (A → Z 방향)</li>
</ul>
</li>
</ul>
</li>
<li><p>while문의 역할: 연속된 A 구간의 끝 위치(next) 찾기</p>
</li>
<li><p>커서 이동 최소화</p>
<pre><code class="language-java">move = Math.min(
    move,
    i + name.length() - next + Math.min(i, name.length() - next)
);</code></pre>
<ul>
<li><code>name.length() - next</code> 뒤쪽 남은 거리</li>
<li><code>Math.min(i, name.length() - next)</code> 방향 전환 비용 최소 선택</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오늘부터 알고리즘] #1-1 그리디 알고리즘(Greedy Algorithm) - 체육복]]></title>
            <link>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B2%B4%EC%9C%A1%EB%B3%B5</link>
            <guid>https://velog.io/@minah_94/%EC%98%A4%EB%8A%98%EB%B6%80%ED%84%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1-%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B2%B4%EC%9C%A1%EB%B3%B5</guid>
            <pubDate>Thu, 07 May 2026 13:52:09 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-오늘의-문제">💻 오늘의 문제</h1>
<ul>
<li>알고리즘: 그리디 알고리즘</li>
<li>문제 링크: <a href="https://school.programmers.co.kr/learn/courses/30/lessons/42862">프로그래머스 - 체육복</a></li>
</ul>
<h3 id="풀이-과정">풀이 과정</h3>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;

        int[] clothes = new int[n+2]; // 배열 범위 에러 방지 &amp; 1부터 시작하기 위함

        Arrays.fill(clothes, 1);

        for(int l : lost) {
            clothes[l]--;
        }

        for(int r : reserve){
            clothes[r]++;
        }

        // 빌려주기
        for(int i = 1; i&lt;=n; i++){
            if(clothes[i]==0) {
                if(clothes[i-1] == 2) {
                    clothes[i-1]--;
                    clothes[i]++;
                }
                else if(clothes[i+1] == 2) {
                    clothes[i+1]--;
                    clothes[i]++;
                }
            }
        }

        for(int i = 1; i&lt;=n; i++) {
            if(clothes[i]&gt;=1){
                answer++;
            }
        }

        return answer;
    }
}</code></pre>
<ul>
<li><code>int[] clothes = new int[n+2];</code> 
→ n+2를 함으로써 배열을 1부터 시작하게 한다 &amp; 배열 범위 초과 에러를 방지한다.</li>
<li>for문 + if문을 통해 앞/뒤 학생에게 빌릴 수 있다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>