<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>꿈꾸는 사람들</title>
    <link>https://i-dreamers.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 18:42:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>환영전사</managingEditor>
    <item>
      <title>WSL/WSL2 완벽 가이드</title>
      <link>https://i-dreamers.tistory.com/entry/WSLWSL2-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;WSL/WSL2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;완벽 가이드&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #555555;&quot;&gt;개념부터 배포판 설치&lt;span&gt;&amp;middot;&lt;/span&gt;관리까지&lt;/span&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Windows&lt;/span&gt;&lt;span&gt;에서 리눅스 환경이 필요할 때 가장 먼저 떠오르는 선택지가 바로&lt;span&gt; WSL(Windows Subsystem for Linux)&lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;가상 머신처럼 무겁지도 않고&lt;span&gt;, &lt;/span&gt;듀얼 부팅처럼 번거롭지도 않게&lt;span&gt; Windows &lt;/span&gt;안에서 진짜 리눅스를 쓸 수 있게 해주는 기능이죠&lt;span&gt;. &lt;/span&gt;이 글에서는&lt;span&gt; WSL&lt;/span&gt;과&lt;span&gt; WSL2&lt;/span&gt;의 개념 차이부터&lt;span&gt;, &lt;/span&gt;설치 방법&lt;span&gt;, &lt;/span&gt;그리고 게스트&lt;span&gt; OS(&lt;/span&gt;배포판&lt;span&gt;)&lt;/span&gt;를 설치하고 관리하는 방법까지 한 번에 정리합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;1. WSL&lt;/span&gt;&lt;span&gt;이란&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL&lt;/span&gt;&lt;span&gt;은&lt;span&gt; Windows &lt;/span&gt;위에서 리눅스 바이너리 실행 파일을 네이티브로 실행할 수 있게 해주는 호환 계층입니다&lt;span&gt;. Microsoft&lt;/span&gt;가 만든 기능으로&lt;span&gt;, &lt;/span&gt;별도의 가상 머신 설정이나 듀얼 부팅 없이&lt;span&gt; Windows Terminal&lt;/span&gt;이나 명령 프롬프트에서 바로&lt;span&gt; Ubuntu, Debian, Kali Linux &lt;/span&gt;같은 배포판을 사용할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;대표적인 활용 사례는 다음과 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;전용&lt;/span&gt;&lt;span&gt; CLI &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;스크립트&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Docker, Kubernetes &lt;/span&gt;&lt;span&gt;등&lt;/span&gt; &lt;span&gt;컨테이너&lt;/span&gt; &lt;span&gt;기반&lt;/span&gt; &lt;span&gt;개발&lt;/span&gt; &lt;span&gt;환경&lt;/span&gt; &lt;span&gt;구축&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;웹&lt;/span&gt; &lt;span&gt;개발&lt;/span&gt; &lt;span&gt;시&lt;/span&gt; &lt;span&gt;서버&lt;/span&gt; &lt;span&gt;환경&lt;/span&gt;&lt;span&gt;(nginx, MySQL, Redis &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt; &lt;span&gt;로컬에서&lt;/span&gt; &lt;span&gt;재현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;macOS/Linux &lt;/span&gt;&lt;span&gt;기준으로&lt;/span&gt; &lt;span&gt;작성된&lt;/span&gt; &lt;span&gt;오픈소스&lt;/span&gt; &lt;span&gt;프로젝트&lt;/span&gt; &lt;span&gt;빌드&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;2. WSL 1 vs WSL 2, &lt;/span&gt;&lt;span&gt;무엇이&lt;/span&gt; &lt;span&gt;다른가&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL&lt;/span&gt;&lt;span&gt;은 버전에 따라 내부 동작 방식이 완전히 다릅니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;WSL 1&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;시스템&lt;/span&gt; &lt;span&gt;콜을&lt;/span&gt;&lt;span&gt; Windows &lt;/span&gt;&lt;span&gt;커널이&lt;/span&gt; &lt;span&gt;이해할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있는&lt;/span&gt; &lt;span&gt;형태로&lt;/span&gt; &lt;span&gt;변환&lt;/span&gt;&lt;span&gt;(translation layer)&lt;/span&gt;&lt;span&gt;하는&lt;/span&gt; &lt;span&gt;방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;실제&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;커널을&lt;/span&gt; &lt;span&gt;사용하지&lt;/span&gt; &lt;span&gt;않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows &lt;/span&gt;&lt;span&gt;파일&lt;/span&gt; &lt;span&gt;시스템과의&lt;/span&gt; &lt;span&gt;파일&lt;/span&gt; &lt;span&gt;접근&lt;/span&gt; &lt;span&gt;속도가&lt;/span&gt; &lt;span&gt;빠름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;일부&lt;/span&gt; &lt;span&gt;시스템&lt;/span&gt; &lt;span&gt;콜&lt;/span&gt; &lt;span&gt;미지원으로&lt;/span&gt; &lt;span&gt;인해&lt;/span&gt; &lt;span&gt;특정&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;프로그램이&lt;/span&gt; &lt;span&gt;동작하지&lt;/span&gt; &lt;span&gt;않을&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있음&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;WSL 2&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;경량&lt;/span&gt; &lt;span&gt;가상&lt;/span&gt; &lt;span&gt;머신&lt;/span&gt;&lt;span&gt;(Hyper-V &lt;/span&gt;&lt;span&gt;기반&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;위에서&lt;/span&gt; &lt;span&gt;실제&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;커널을&lt;/span&gt; &lt;span&gt;구동하는&lt;/span&gt; &lt;span&gt;방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;시스템&lt;/span&gt; &lt;span&gt;콜&lt;/span&gt; &lt;span&gt;호환성이&lt;/span&gt; &lt;span&gt;완전해&lt;/span&gt; &lt;span&gt;대부분의&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;프로그램이&lt;/span&gt; &lt;span&gt;문제없이&lt;/span&gt; &lt;span&gt;동작&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;전체&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;커널&lt;/span&gt; &lt;span&gt;기능&lt;/span&gt; &lt;span&gt;지원&lt;/span&gt;&lt;span&gt; (Docker, systemd &lt;/span&gt;&lt;span&gt;계열&lt;/span&gt; &lt;span&gt;도구&lt;/span&gt; &lt;span&gt;등과의&lt;/span&gt; &lt;span&gt;호환성이&lt;/span&gt; &lt;span&gt;크게&lt;/span&gt; &lt;span&gt;향상됨&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;자체&lt;/span&gt; &lt;span&gt;가상&lt;/span&gt; &lt;span&gt;네트워크&lt;/span&gt; &lt;span&gt;어댑터를&lt;/span&gt; &lt;span&gt;사용하므로&lt;/span&gt; &lt;span&gt;네트워킹&lt;/span&gt; &lt;span&gt;방식이&lt;/span&gt;&lt;span&gt; WSL 1&lt;/span&gt;&lt;span&gt;과&lt;/span&gt; &lt;span&gt;다름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows &lt;/span&gt;&lt;span&gt;파일&lt;/span&gt; &lt;span&gt;시스템&lt;/span&gt;&lt;span&gt;(/mnt/c &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;접근&lt;/span&gt; &lt;span&gt;속도는&lt;/span&gt;&lt;span&gt; WSL 1&lt;/span&gt;&lt;span&gt;보다&lt;/span&gt; &lt;span&gt;다소&lt;/span&gt; &lt;span&gt;느릴&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있음&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;비교표&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;613&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2e5c8a;&quot; width=&quot;160&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;항목&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2e5c8a;&quot; width=&quot;227&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;WSL 1&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2e5c8a;&quot; width=&quot;227&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;WSL 2&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구조&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템 콜 변환 계층&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경량&lt;span&gt; VM + &lt;/span&gt;실제 리눅스 커널&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커널&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;없음&lt;span&gt;(&lt;/span&gt;에뮬레이션&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제&lt;span&gt; Linux &lt;/span&gt;커널 사용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리눅스 호환성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일부 제한&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완전한 호환성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 접근 속도&lt;span&gt; (Windows FS)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빠름&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상대적으로 느림&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 접근 속도&lt;span&gt; (Linux FS)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보통&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빠름&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메모리 사용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필요한 만큼만&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VM &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특성상 다소 높음&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워킹&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 동일&lt;span&gt; IP &lt;/span&gt;공유&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;별도 가상 네트워크 어댑터&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;160&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지원&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제한적&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;227&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원활&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eaf3ff;&quot;&gt;
&lt;p style=&quot;background-color: #eaf3ff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특별한 이유가 없다면 대부분의 최신 환경에서는&lt;span&gt; WSL 2 &lt;/span&gt;사용을 권장합니다&lt;span&gt;. &lt;/span&gt;다만&lt;span&gt; Windows &lt;/span&gt;파일 시스템&lt;span&gt;(C:\ &lt;/span&gt;등&lt;span&gt;) &lt;/span&gt;안의 파일을 리눅스에서 빈번하게 읽고 쓰는 작업이 많다면&lt;span&gt; WSL 1&lt;/span&gt;이 유리할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;3. &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt; &lt;span&gt;요구사항&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows 11, &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; Windows 10 &lt;/span&gt;&lt;span&gt;버전&lt;/span&gt;&lt;span&gt; 1903(&lt;/span&gt;&lt;span&gt;빌드&lt;/span&gt;&lt;span&gt; 18362) &lt;/span&gt;&lt;span&gt;이상&lt;/span&gt;&lt;span&gt; (x64 &lt;/span&gt;&lt;span&gt;기준&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ARM64 &lt;/span&gt;&lt;span&gt;시스템은&lt;/span&gt;&lt;span&gt; Windows 10 &lt;/span&gt;&lt;span&gt;버전&lt;/span&gt;&lt;span&gt; 2004(&lt;/span&gt;&lt;span&gt;빌드&lt;/span&gt;&lt;span&gt; 19041) &lt;/span&gt;&lt;span&gt;이상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;WSL 2&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;쓰려면&lt;/span&gt;&lt;span&gt; BIOS/UEFI&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt; &lt;span&gt;가상화&lt;/span&gt;&lt;span&gt;(Virtualization) &lt;/span&gt;&lt;span&gt;기능이&lt;/span&gt; &lt;span&gt;활성화되어&lt;/span&gt; &lt;span&gt;있어야&lt;/span&gt; &lt;span&gt;함&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;4. WSL &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt; &lt;span&gt;방법&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;4.1 &lt;/span&gt;&lt;span&gt;자동&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;권장&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Windows 10(&lt;/span&gt;&lt;span&gt;최신 빌드&lt;span&gt;) &lt;/span&gt;또는&lt;span&gt; Windows 11&lt;/span&gt;에서는 관리자 권한&lt;span&gt; PowerShell(&lt;/span&gt;또는 명령 프롬프트&lt;span&gt;)&lt;/span&gt;에서 명령어 하나로 설치가 끝납니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 명령어는 다음을 한 번에 처리합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;WSL &lt;/span&gt;&lt;span&gt;관련&lt;/span&gt;&lt;span&gt; Windows &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt; &lt;span&gt;활성화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;WSL 2&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;기본&lt;/span&gt; &lt;span&gt;버전으로&lt;/span&gt; &lt;span&gt;설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기본&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt;&lt;span&gt;(Ubuntu)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; Microsoft Store&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;통해&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설치 후 시스템을 재부팅하면 되고&lt;span&gt;, &lt;/span&gt;이후&lt;span&gt; Ubuntu&lt;/span&gt;가 자동으로 실행되며 최초&lt;span&gt; 1&lt;/span&gt;회 사용자 이름과 비밀번호를 설정하게 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특정 배포판을 지정해서 설치하고 싶다면 다음과 같이 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d Debian&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;4.2 &lt;/span&gt;&lt;span&gt;수동&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;구버전&lt;/span&gt;&lt;span&gt; Windows&lt;/span&gt;&lt;span&gt;용&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;자동 설치가 지원되지 않는 환경이라면 아래 단계를 따릅니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; WSL &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt; &lt;span&gt;활성화&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; &lt;/span&gt;&lt;span&gt;가상&lt;/span&gt; &lt;span&gt;머신&lt;/span&gt; &lt;span&gt;플랫폼&lt;/span&gt; &lt;span&gt;기능&lt;/span&gt; &lt;span&gt;활성화&lt;/span&gt;&lt;span&gt; (WSL 2&lt;/span&gt;&lt;span&gt;용&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; &lt;/span&gt;&lt;span&gt;재부팅&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; WSL 2 &lt;/span&gt;&lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;커널&lt;/span&gt; &lt;span&gt;업데이트&lt;/span&gt; &lt;span&gt;패키지&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Microsoft&lt;/span&gt;&lt;span&gt;에서 배포하는 커널 업데이트 패키지&lt;span&gt;(wsl_update_x64.msi)&lt;/span&gt;를 다운로드해 설치합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; WSL 2&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;기본&lt;/span&gt; &lt;span&gt;버전으로&lt;/span&gt; &lt;span&gt;설정&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-default-version 2&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt; &amp;mdash; Microsoft Store&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt; &lt;span&gt;원하는&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Microsoft Store &lt;/span&gt;&lt;span&gt;앱을 실행해&lt;span&gt; Ubuntu, Debian, Kali Linux &lt;/span&gt;등 원하는 배포판을 검색해 설치합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;5. &lt;/span&gt;&lt;span&gt;게스트&lt;/span&gt;&lt;span&gt; OS(&lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt; &lt;span&gt;및&lt;/span&gt; &lt;span&gt;관리&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL&lt;/span&gt;&lt;span&gt;의 큰 장점 중 하나는 여러 리눅스 배포판을 동시에 설치하고 독립적으로 관리할 수 있다는 점입니다&lt;span&gt;. &lt;/span&gt;이 부분을 좀 더 자세히 살펴보겠습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.1 &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt; &lt;span&gt;가능한&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;목록&lt;/span&gt; &lt;span&gt;확인&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --list --online&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Ubuntu, Debian, Kali Linux, openSUSE, Oracle Linux, Fedora &lt;/span&gt;&lt;span&gt;등&lt;span&gt; Microsoft Store&lt;/span&gt;를 통해 제공되는 배포판 목록이 표시됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.2 &lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;설치&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예시&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d kali-linux&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Microsoft Store &lt;/span&gt;&lt;span&gt;앱에서 직접 검색해&lt;span&gt; &quot;&lt;/span&gt;가져오기&lt;span&gt;(&lt;/span&gt;설치&lt;span&gt;)&quot; &lt;/span&gt;버튼을 눌러 설치할 수도 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.3 &lt;/span&gt;&lt;span&gt;설치된&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;목록&lt;/span&gt; &lt;span&gt;확인&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --list --verbose&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또는 짧게&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl -l -v&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 명령을 실행하면 아래와 같이 배포판 이름&lt;span&gt;, &lt;/span&gt;실행 상태&lt;span&gt;(Running/Stopped), WSL &lt;/span&gt;버전을 확인할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;NAME&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;STATE&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;VERSION&lt;br /&gt;* Ubuntu&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Debian&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Stopped&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;kali-linux&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Stopped&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;표시는 현재 기본 배포판을 의미합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.4 &lt;/span&gt;&lt;span&gt;기본&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;지정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 배포판을 설치했을 때&lt;span&gt;, wsl &lt;/span&gt;명령어만 입력하면 실행될 기본 배포판을 지정할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-default &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.5 &lt;/span&gt;&lt;span&gt;배포판별&lt;/span&gt;&lt;span&gt; WSL &lt;/span&gt;&lt;span&gt;버전&lt;/span&gt; &lt;span&gt;전환&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특정 배포판만&lt;span&gt; WSL 1 &amp;harr; WSL 2&lt;/span&gt;로 전환하고 싶을 때 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-version &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로 설치되는 배포판에 적용될 기본 버전을 바꾸고 싶다면&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-default-version 2&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.6 &lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;시작&lt;/span&gt; &lt;span&gt;메뉴에서&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;이름&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;예&lt;/span&gt;&lt;span&gt;: &quot;Ubuntu&quot;)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt; &lt;span&gt;검색해&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows Terminal&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt; &lt;span&gt;새&lt;/span&gt; &lt;span&gt;탭&lt;/span&gt; &lt;span&gt;드롭다운으로&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;PowerShell/CMD&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;이름을&lt;/span&gt; &lt;span&gt;직접&lt;/span&gt; &lt;span&gt;입력해&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특정 배포판을 특정 사용자로 실행하고 싶다면&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --distribution &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt; --user &amp;lt;&lt;/span&gt;사용자이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.7 &lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;종료&lt;/span&gt;&lt;span&gt; / &lt;/span&gt;&lt;span&gt;전체&lt;/span&gt; &lt;span&gt;종료&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특정 배포판만 종료&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --terminate &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL &lt;/span&gt;&lt;span&gt;전체&lt;span&gt;(&lt;/span&gt;모든 배포판&lt;span&gt; + &lt;/span&gt;경량&lt;span&gt; VM)&lt;/span&gt;를 종료&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --shutdown&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.8 &lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;삭제&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;등록&lt;/span&gt; &lt;span&gt;취소&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;더 이상 필요 없는 배포판을 제거할 때 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --unregister &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #fff2e8;&quot;&gt;
&lt;p style=&quot;background-color: #fff2e8;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;⚠️ &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 명령을 실행하면 해당 배포판 안의 모든 데이터와 설정이 영구적으로 삭제됩니다&lt;span&gt;. &lt;/span&gt;다시 설치하면 초기 상태의 깨끗한 배포판이 새로 설치됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;5.9 &lt;/span&gt;&lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;백업&lt;/span&gt; &lt;span&gt;및&lt;/span&gt; &lt;span&gt;이전&lt;/span&gt;&lt;span&gt; (export / import)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다른&lt;span&gt; PC&lt;/span&gt;로 옮기거나 백업해두고 싶을 때 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내보내기&lt;span&gt; (tar &lt;/span&gt;파일로 백업&lt;span&gt;)&lt;br /&gt;wsl --export &amp;lt;&lt;/span&gt;배포판이름&lt;span&gt;&amp;gt; D:\backup\ubuntu-backup.tar&lt;br /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;# &lt;/span&gt;가져오기&lt;span&gt; (&lt;/span&gt;새 이름&lt;span&gt;/&lt;/span&gt;경로로 복원&lt;span&gt;)&lt;br /&gt;wsl --import &amp;lt;&lt;/span&gt;새배포판이름&lt;span&gt;&amp;gt; D:\wsl\ubuntu-new C:\backup\ubuntu-backup.tar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 기능은 배포판을 복제하거나&lt;span&gt;, &lt;/span&gt;같은 배포판을 여러 개 만들어 프로젝트별로 독립된 환경을 구성할 때도 유용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;6. &lt;/span&gt;&lt;span&gt;자주&lt;/span&gt; &lt;span&gt;쓰는&lt;/span&gt;&lt;span&gt; WSL &lt;/span&gt;&lt;span&gt;명령어&lt;/span&gt; &lt;span&gt;정리&lt;/span&gt;&lt;/h1&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;613&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2e5c8a;&quot; width=&quot;280&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;명령어&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2e5c8a;&quot; width=&quot;333&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;설명&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WSL &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 기본 배포판&lt;span&gt;(Ubuntu) &lt;/span&gt;설치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 배포판 설치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --list --online&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 가능한 배포판 목록 조회&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --list --verbose (wsl -l -v)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치된 배포판 및 상태&lt;span&gt;/&lt;/span&gt;버전 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-default &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 배포판 지정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-version &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;span&gt;&amp;gt; &amp;lt;1|2&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 배포판의&lt;span&gt; WSL &lt;/span&gt;버전 변경&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --set-default-version &amp;lt;1|2&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로 설치되는 배포판의 기본 버전 지정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --terminate &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 배포판 종료&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --shutdown&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 배포판 및&lt;span&gt; WSL &lt;/span&gt;가상 머신 종료&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --unregister &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판 삭제&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --export / --import&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포판 백업&lt;span&gt; / &lt;/span&gt;복원&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --update&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WSL &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자체 업데이트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --status&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재&lt;span&gt; WSL &lt;/span&gt;설정 상태 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;280&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --help&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;333&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 명령어 도움말&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;7. &lt;/span&gt;&lt;span&gt;파일&lt;/span&gt; &lt;span&gt;시스템&lt;/span&gt; &lt;span&gt;및&lt;/span&gt; &lt;span&gt;상호운용성&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL&lt;/span&gt;&lt;span&gt;의 강점 중 하나는&lt;span&gt; Windows&lt;/span&gt;와 리눅스 간 파일 시스템이 서로 연결되어 있다는 점입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리눅스에서&lt;/span&gt;&lt;span&gt; Windows &lt;/span&gt;&lt;span&gt;드라이브&lt;/span&gt; &lt;span&gt;접근&lt;/span&gt;&lt;span&gt;: /mnt/c/, /mnt/d/ &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows &lt;/span&gt;&lt;span&gt;탐색기에서&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;배포판&lt;/span&gt; &lt;span&gt;파일&lt;/span&gt; &lt;span&gt;접근&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;주소창에&lt;/span&gt;&lt;span&gt; \\wsl$\&amp;lt;&lt;/span&gt;&lt;span&gt;배포판이름&lt;/span&gt;&lt;span&gt;&amp;gt;\ &lt;/span&gt;&lt;span&gt;입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;셸에서&lt;/span&gt;&lt;span&gt; Windows &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt; &lt;span&gt;파일&lt;/span&gt; &lt;span&gt;직접&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt; &lt;span&gt;가능&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;예&lt;/span&gt;&lt;span&gt;: notepad.exe)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows&lt;/span&gt;&lt;span&gt;에서도&lt;/span&gt; &lt;span&gt;리눅스&lt;/span&gt; &lt;span&gt;명령&lt;/span&gt; &lt;span&gt;실행&lt;/span&gt; &lt;span&gt;가능&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;예&lt;/span&gt;&lt;span&gt;: PowerShell&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; wsl ls -al)&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eaf3ff;&quot;&gt;
&lt;p style=&quot;background-color: #eaf3ff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;성능 측면에서는&lt;span&gt;, &lt;/span&gt;자주 수정하는 프로젝트 파일은&lt;span&gt; Windows &lt;/span&gt;파일 시스템&lt;span&gt;(/mnt/c/...)&lt;/span&gt;보다 리눅스 파일 시스템 내부&lt;span&gt;(~/project &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;에 두는 것이&lt;span&gt; WSL 2&lt;/span&gt;에서 훨씬 빠릅니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;8. &lt;/span&gt;&lt;span&gt;리소스&lt;/span&gt; &lt;span&gt;사용량&lt;/span&gt; &lt;span&gt;제한&lt;/span&gt;&lt;span&gt; (.wslconfig)&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL 2&lt;/span&gt;&lt;span&gt;는 경량&lt;span&gt; VM &lt;/span&gt;방식이라 메모리&lt;span&gt;&amp;middot;CPU&lt;/span&gt;를 과도하게 점유하는 경우가 있습니다&lt;span&gt;. &lt;/span&gt;이럴 때는 사용자 홈 디렉터리&lt;span&gt;(C:\Users\&amp;lt;&lt;/span&gt;사용자명&lt;span&gt;&amp;gt;\.wslconfig)&lt;/span&gt;에 설정 파일을 만들어 리소스를 제한할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;p style=&quot;background-color: #f2f2f2;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[wsl2]&lt;br /&gt;memory=4GB&lt;br /&gt;processors=2&lt;br /&gt;swap=2GB&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설정을 적용하려면&lt;span&gt; wsl --shutdown &lt;/span&gt;실행 후 다시 배포판을 실행하면 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;9. &lt;/span&gt;&lt;span&gt;함께&lt;/span&gt; &lt;span&gt;쓰면&lt;/span&gt; &lt;span&gt;좋은&lt;/span&gt; &lt;span&gt;도구들&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Windows Terminal: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;여러 배포판&lt;span&gt;/&lt;/span&gt;셸을 탭으로 관리하고 커스터마이징까지 가능해&lt;span&gt; WSL &lt;/span&gt;사용 시 사실상 필수급 도구&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;VS Code + WSL &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;확장&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;로컬&lt;span&gt; Windows&lt;/span&gt;에서 에디터를 실행하면서 실제 코드 실행&lt;span&gt;/&lt;/span&gt;디버깅은&lt;span&gt; WSL &lt;/span&gt;내부에서 처리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Docker Desktop: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;WSL 2 &lt;/span&gt;&lt;span&gt;통합 기능을 켜면 별도의&lt;span&gt; VM &lt;/span&gt;없이&lt;span&gt; WSL &lt;/span&gt;배포판 안에서 바로&lt;span&gt; Docker &lt;/span&gt;사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Git: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;리눅스 환경에서 네이티브&lt;span&gt; Git &lt;/span&gt;사용&lt;span&gt;, Windows&lt;/span&gt;와 자격 증명&lt;span&gt;(Credential) &lt;/span&gt;공유 설정 가능&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;10. &lt;/span&gt;&lt;span&gt;마무리&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL&lt;/span&gt;&lt;span&gt;은&lt;span&gt; &quot;Windows&lt;/span&gt;냐 리눅스냐&lt;span&gt;&quot;&lt;/span&gt;라는 양자택일에서 벗어나&lt;span&gt;, &lt;/span&gt;하나의&lt;span&gt; PC&lt;/span&gt;에서 두 환경을 자연스럽게 오갈 수 있게 해주는 도구입니다&lt;span&gt;. &lt;/span&gt;특히&lt;span&gt; WSL 2&lt;/span&gt;로 넘어오면서 실제 리눅스 커널을 사용하게 되어 호환성과 성능 면에서 크게 발전했고&lt;span&gt;, &lt;/span&gt;개발 환경 구축의 진입 장벽을 상당히 낮춰주었습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;정리하면&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개념&lt;/span&gt;&lt;span&gt;: WSL 1&lt;/span&gt;&lt;span&gt;은&lt;/span&gt; &lt;span&gt;변환&lt;/span&gt; &lt;span&gt;계층&lt;/span&gt;&lt;span&gt;, WSL 2&lt;/span&gt;&lt;span&gt;는&lt;/span&gt; &lt;span&gt;실제&lt;/span&gt; &lt;span&gt;커널&lt;/span&gt; &lt;span&gt;기반&lt;/span&gt; &lt;span&gt;경량&lt;/span&gt;&lt;span&gt; VM&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;설치&lt;/span&gt;&lt;span&gt;: wsl --install &lt;/span&gt;&lt;span&gt;한&lt;/span&gt; &lt;span&gt;줄이면&lt;/span&gt; &lt;span&gt;대부분&lt;/span&gt; &lt;span&gt;해결&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;관리&lt;/span&gt;&lt;span&gt;: wsl --list, --set-default, --set-version, --unregister, --export/--import &lt;/span&gt;&lt;span&gt;등으로&lt;/span&gt; &lt;span&gt;배포판을&lt;/span&gt; &lt;span&gt;자유롭게&lt;/span&gt; &lt;span&gt;다룰&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 정도만 알아둬도&lt;span&gt; WSL&lt;/span&gt;을 실무 개발 환경으로 충분히 활용할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/20</guid>
      <comments>https://i-dreamers.tistory.com/entry/WSLWSL2-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C#entry20comment</comments>
      <pubDate>Wed, 8 Jul 2026 14:19:07 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 6부. 최적화 및 문제 해결, 7부. 마무리</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-6%EB%B6%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0-7%EB%B6%80-%EB%A7%88%EB%AC%B4%EB%A6%AC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;21&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. vLLM &lt;/span&gt;성능 튜닝&lt;span&gt; &amp;mdash; &lt;/span&gt;단일&lt;span&gt; 5090 &lt;/span&gt;기준&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;21.1 `gpu-memory-utilization` &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;튜닝&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본값은 보통&lt;span&gt; 0.9&lt;/span&gt;입니다&lt;span&gt;. OOM(Out of Memory)&lt;/span&gt;이 발생하면&lt;span&gt; 0.85, 0.8 &lt;/span&gt;순으로 낮춰가며 안정적인 값을 찾습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vllm serve Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--gpu-memory-utilization 0.85 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;...&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;21.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;컨텍스트 길이&lt;span&gt; vs `max-num-seqs` &lt;/span&gt;균형&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-num-seqs&lt;/span&gt;&lt;span&gt;는 동시에 처리할 수 있는 요청&lt;span&gt;(&lt;/span&gt;시퀀스&lt;span&gt;) &lt;/span&gt;수를 제한합니다&lt;span&gt;. &lt;/span&gt;바이브 코딩처럼 개인이 순차적으로 사용하는 경우 동시 요청 수는 크지 않아도 되므로&lt;span&gt;, &lt;/span&gt;이 값을 낮추고 대신 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt;을 늘리는 방향이 유리할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--max-num-seqs 4 --max-model-len 32768&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;21.3 AWQ &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;양자화 적용 시 속도&lt;span&gt;/&lt;/span&gt;품질 비교&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;AWQ 4bit&lt;/span&gt;&lt;span&gt;은&lt;span&gt; BF16 &lt;/span&gt;대비&lt;span&gt; VRAM &lt;/span&gt;사용량을 크게 줄여주지만&lt;span&gt;, &lt;/span&gt;일부 벤치마크에서는 고대역폭&lt;span&gt; GPU&lt;/span&gt;에서&lt;span&gt; BF16&lt;/span&gt;보다 오히려 느린 경우도 보고된 바 있습니다&lt;span&gt; (&lt;/span&gt;양자화 해제 연산 오버헤드 때문&lt;span&gt;). &lt;/span&gt;실제 환경에서 두 방식을 모두 벤치마크해보고 선택하는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# BF16 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버전과&lt;span&gt; AWQ &lt;/span&gt;버전을 각각 실행해 처리량 비교&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;동일 프롬프트로 반복 요청 후 평균 응답 시간 측정&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;22&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;응답 속도 개선 팁&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;22.1 Prefix Caching &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;활용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 시스템 프롬프트&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clinerules&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;파일 내용 등 &lt;b&gt;동일한 접두 부분이 반복&lt;/b&gt;되는 요청을 자주 보냅니다&lt;span&gt;. vLLM&lt;/span&gt;의&lt;span&gt; prefix caching&lt;/span&gt;을 활성화하면 이 반복되는 부분을 캐싱해 프리필 시간을 크게 줄일 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vllm serve Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--enable-prefix-caching \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;...&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;22.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지연시간&lt;span&gt;(latency) &lt;/span&gt;최적화 중심 전략&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로덕션 서버와 달리 개인 개발 환경에서는 &lt;b&gt;처리량&lt;span&gt;(throughput)&lt;/span&gt;보다 단일 요청의 응답 속도&lt;span&gt;(latency)&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;가 체감 성능에 더 중요합니다&lt;span&gt;. &lt;/span&gt;동시 요청 수 제한을 낮추고&lt;span&gt;, &lt;/span&gt;컨텍스트 길이를 실사용에 맞게 최소화하는 방향으로 튜닝하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;23&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;흔한 문제와 해결법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;CUDA error: no kernel image is available&lt;/span&gt;&lt;span&gt; / &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120 is not compatible&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;구버전&lt;span&gt; CUDA/PyTorch/vLLM &lt;/span&gt;사용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;CUDA 12.8+, PyTorch 2.9.0+cu128, vLLM 0.17.0+ &lt;/span&gt;&lt;span&gt;로 업그레이드&lt;span&gt; (2&lt;/span&gt;부&lt;span&gt; 4.2&lt;/span&gt;절&lt;span&gt;, 3&lt;/span&gt;부&lt;span&gt; 7.1&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;FlashAttention &lt;/span&gt;&lt;span&gt;관련 오류&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Blackwell&lt;/span&gt;&lt;span&gt;에서&lt;span&gt; FlashAttention 3 &lt;/span&gt;미지원&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;환경변수 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;VLLM_FLASH_ATTN_VERSION=2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정 후 재시작&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Windows&lt;/span&gt;&lt;span&gt;에서&lt;span&gt; GPU &lt;/span&gt;작업 중 시스템 멈춤&lt;span&gt;(hang)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;RTX 5090/RTX PRO &lt;/span&gt;&lt;span&gt;계열&lt;span&gt; WDDM &lt;/span&gt;반가상화 버그&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;WSL2 &lt;/span&gt;&lt;span&gt;또는 네이티브&lt;span&gt; Linux&lt;/span&gt;로 전환&lt;span&gt; (3&lt;/span&gt;부&lt;span&gt; 7.1&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;특정 최신 모델&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;일부&lt;span&gt; GLM &lt;/span&gt;계열&lt;span&gt;) &lt;/span&gt;구동 실패&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Blackwell &lt;/span&gt;&lt;span&gt;대응이 아직 안 된 모델&lt;span&gt;/&lt;/span&gt;커널&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;해당 모델의&lt;span&gt; vLLM &lt;/span&gt;이슈 트래커에서&lt;span&gt; Blackwell &lt;/span&gt;지원 현황 확인 후 대안 모델 사용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;CUDA OOM&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;컨텍스트 길이&lt;span&gt;/&lt;/span&gt;동시 요청 수 과다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-num-seqs&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--gpu-memory-utilization&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하향 조정&lt;span&gt; (6&lt;/span&gt;부&lt;span&gt; 21&lt;/span&gt;장&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;에서&lt;span&gt; tool call &lt;/span&gt;파싱 오류&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이 모델과 불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;모델 카드에서 권장 파서 확인 후 재설정&lt;span&gt; (3&lt;/span&gt;부&lt;span&gt; 7.5&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;IntelliJ &lt;/span&gt;&lt;span&gt;플러그인 인덱싱&lt;span&gt;/&lt;/span&gt;버전 호환 이슈&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;IDE &lt;/span&gt;&lt;span&gt;버전과 플러그인 버전 불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Marketplace&lt;/span&gt;&lt;span&gt;에서 플러그인 최신 버전 확인&lt;span&gt;, IDE&lt;/span&gt;도 최신 버전 유지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# FlashAttention &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버전 강제 지정 예시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;export VLLM_FLASH_ATTN_VERSION=2&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vllm serve ...&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;24&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;클라우드 모델과 병행 사용 전략&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로컬&lt;span&gt; vLLM &lt;/span&gt;환경은 일상적인 반복 작업&lt;span&gt;(&lt;/span&gt;보일러플레이트 생성&lt;span&gt;, &lt;/span&gt;간단한 리팩터링&lt;span&gt;, &lt;/span&gt;테스트 코드 작성&lt;span&gt;)&lt;/span&gt;에는 충분히 효과적이지만&lt;span&gt;, &lt;/span&gt;다음과 같은 경우에는 클라우드 모델&lt;span&gt;(Claude &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;과 병행하는 것이 실용적입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;반복적인&lt;span&gt; CRUD &lt;/span&gt;코드&lt;span&gt;, &lt;/span&gt;보일러플레이트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;로컬&lt;span&gt; (vLLM)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;간단한 버그 수정&lt;span&gt;, &lt;/span&gt;리팩터링&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;로컬&lt;span&gt; (vLLM)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;전체 시스템 아키텍처 설계&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;클라우드&lt;span&gt; (&lt;/span&gt;복잡한 추론 필요&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;여러 마이크로서비스에 걸친 대규모 리팩터링&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;클라우드&lt;span&gt; (&lt;/span&gt;긴 컨텍스트&lt;span&gt;, &lt;/span&gt;강한 추론&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;민감한 사내 코드&lt;span&gt;/&lt;/span&gt;데이터 처리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;로컬&lt;span&gt; (&lt;/span&gt;프라이버시&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은&lt;span&gt; Provider &lt;/span&gt;설정을 간단히 전환할 수 있으므로&lt;span&gt;, &lt;/span&gt;같은 프로젝트 안에서도 작업 성격에 따라 로컬&lt;span&gt;&amp;harr;&lt;/span&gt;클라우드를 오가며 사용하는 것이 가능합니다&lt;span&gt;. &lt;/span&gt;다만 이 경우&lt;span&gt; 4&lt;/span&gt;부에서 강조한 &lt;b&gt;설계 문서&lt;span&gt;(`docs/`, `memory-bank/`)&lt;/span&gt;를 잘 유지해두면&lt;/b&gt;&lt;span&gt;, &lt;/span&gt;어떤 모델을 쓰든 일관된 맥락으로 작업을 이어갈 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #1f3864;&quot;&gt;7&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #1f3864;&quot;&gt;부&lt;span&gt;. &lt;/span&gt;마무리&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;25&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;실전 프로젝트 예제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 가이드에서 다룬 전체 흐름&lt;span&gt;(&lt;/span&gt;분석&lt;span&gt;/&lt;/span&gt;설계&lt;span&gt; &amp;rarr; &lt;/span&gt;환경 구축&lt;span&gt; &amp;rarr; &lt;/span&gt;바이브 코딩&lt;span&gt; &amp;rarr; &lt;/span&gt;검증&lt;span&gt;)&lt;/span&gt;을 실습해볼 수 있는 간단한&lt;span&gt; CLI &lt;/span&gt;툴 예제를 제안합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;예제&lt;span&gt;: &lt;/span&gt;로컬 파일 정리&lt;span&gt; CLI &lt;/span&gt;툴&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;요구사항 정의&lt;/span&gt;&lt;/b&gt;&lt;span&gt; (11&lt;/span&gt;&lt;span&gt;장&lt;span&gt;): &quot;&lt;/span&gt;지정한 폴더 내 파일을 확장자별로 하위 폴더에 자동 분류하는&lt;span&gt; CLI &lt;/span&gt;툴&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;설계 문서화&lt;/span&gt;&lt;/b&gt;&lt;span&gt; (12~13&lt;/span&gt;&lt;span&gt;장&lt;span&gt;): &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/PRD.md&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/ARCHITECTURE.md&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작성&lt;span&gt; &amp;rarr; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;memory-bank/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초기화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;환경 준비&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: vLLM &lt;/span&gt;&lt;span&gt;서버 기동&lt;span&gt; (3&lt;/span&gt;부&lt;span&gt; 7&lt;/span&gt;장&lt;span&gt;), Cline &lt;/span&gt;연결 확인&lt;span&gt; (3&lt;/span&gt;부&lt;span&gt; 9&lt;/span&gt;장&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Task &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;분해&lt;/span&gt;&lt;/b&gt;&lt;span&gt; (14.1&lt;/span&gt;&lt;span&gt;절&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Task 1: CLI &lt;/span&gt;&lt;span&gt;인자 파싱&lt;span&gt; (argparse)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Task 2: &lt;/span&gt;&lt;span&gt;폴더 스캔 및 확장자 분류 로직&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Task 3: &lt;/span&gt;&lt;span&gt;파일 이동 로직&lt;span&gt; (dry-run &lt;/span&gt;옵션 포함&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Task 4: &lt;/span&gt;&lt;span&gt;테스트 코드 작성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Plan &amp;rarr; Act &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;반복&lt;/span&gt;&lt;/b&gt;&lt;span&gt; (16&lt;/span&gt;&lt;span&gt;장&lt;span&gt;): &lt;/span&gt;각&lt;span&gt; Task&lt;/span&gt;를&lt;span&gt; Plan &lt;/span&gt;모드로 상의 후&lt;span&gt; Act &lt;/span&gt;모드로 구현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;6.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;검증&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;pytest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;span&gt;, &lt;/span&gt;설계 문서와의 일치 여부 확인&lt;span&gt; (14.2&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 예제는 복잡도가 낮아 로컬&lt;span&gt; 32B&lt;/span&gt;급 모델로도 충분히 안정적으로 완주할 수 있으며&lt;span&gt;, &lt;/span&gt;가이드 전체 흐름을 손에 익히기에 적합합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;26&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;참고 자료 및 커뮤니티 링크&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;vLLM &lt;/span&gt;&lt;span&gt;공식 문서 및 릴리즈 노트&lt;span&gt;: &lt;a href=&quot;https://docs.vllm.ai&quot;&gt;https://docs.vllm.ai&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;vLLM GitHub &lt;/span&gt;&lt;span&gt;이슈 트래커&lt;span&gt; (Blackwell/RTX 5090 &lt;/span&gt;관련 이슈 검색 시 유용&lt;span&gt;): &lt;a href=&quot;https://github.com/vllm-project/vllm/issues&quot;&gt;https://github.com/vllm-project/vllm/issues&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Cline &lt;/span&gt;&lt;span&gt;공식&lt;span&gt; GitHub: &lt;a href=&quot;https://github.com/cline/cline&quot;&gt;https://github.com/cline/cline&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Hugging Face &lt;/span&gt;&lt;span&gt;모델 허브&lt;span&gt; (&lt;/span&gt;코딩 모델 검색&lt;span&gt;): &lt;a href=&quot;https://huggingface.co/models&quot;&gt;https://huggingface.co/models&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 가이드에 포함된 버전 정보&lt;span&gt;(vLLM 0.17.0+, CUDA 12.8+, PyTorch 2.9.0 &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;와 모델 추천 목록은 작성 시점 기준입니다&lt;span&gt;. RTX 5090/Blackwell &lt;/span&gt;관련 소프트웨어 생태계는 빠르게 개선되고 있으므로&lt;span&gt;, &lt;/span&gt;실제 설치 전에는 위 공식 문서&lt;span&gt;/&lt;/span&gt;릴리즈 노트에서 최신 정보를 한 번 더 확인하시길 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;끝&lt;span&gt;.*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/19</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-6%EB%B6%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0-7%EB%B6%80-%EB%A7%88%EB%AC%B4%EB%A6%AC#entry19comment</comments>
      <pubDate>Tue, 7 Jul 2026 17:12:07 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 5부. 실전 바이브 코딩</title>
      <link>https://i-dreamers.tistory.com/entry/5%EB%B6%80-%EC%8B%A4%EC%A0%84-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;15&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;첫 프로젝트 시작하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;15.1 VS Code&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 시작하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;-&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;File &amp;rarr; Open Folder&lt;/span&gt;&lt;span&gt;로 프로젝트 폴더 열기&lt;span&gt; (&lt;/span&gt;빈 폴더도 가능&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; Cline &lt;/span&gt;&lt;span&gt;패널 열기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;-&amp;nbsp; 4&lt;/span&gt;&lt;span&gt;부에서 준비한 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;폴더와 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clinerules&lt;/span&gt;&lt;span&gt;가 있다면 먼저 프로젝트 루트에 배치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; Cline &lt;/span&gt;&lt;span&gt;채팅창에 첫 지시 입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;@docs/ARCHITECTURE.md @docs/API_SPEC.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 설계를 기준으로 프로젝트 초기 구조&lt;span&gt;(&lt;/span&gt;폴더&lt;span&gt;, &lt;/span&gt;기본 설정 파일&lt;span&gt;)&lt;/span&gt;를 만들어줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직 세부 로직은 작성하지 말고 뼈대만 잡아줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;15.2 IntelliJ&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 시작하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;File &amp;rarr; Open&lt;/span&gt;&lt;span&gt;으로 프로젝트 열기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; Cline &lt;/span&gt;&lt;span&gt;툴 윈도우 열기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; 이하 진행 방식은&lt;span&gt; VS Code&lt;/span&gt;와 동일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;15.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;프로젝트 폴더 열기 및 작업 지시 팁&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;폴더 전체를 열어야&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Cline&lt;/span&gt;&lt;span&gt;이 프로젝트 구조를 스스로 탐색할 수 있습니다&lt;span&gt;. &lt;/span&gt;단일 파일만 열어서는 제한적으로 동작합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;첫 지시는&lt;span&gt; &quot;&lt;/span&gt;전부 다 만들어줘&lt;span&gt;&quot;&lt;/span&gt;보다&lt;span&gt; &quot;&lt;/span&gt;뼈대만 잡아줘&lt;span&gt;&quot; &lt;/span&gt;처럼 &lt;b&gt;범위를 좁게&lt;/b&gt; 주는 것이 검토하기에도&lt;span&gt;, &lt;/span&gt;로컬 모델의 컨텍스트 관리 측면에서도 유리합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;16&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. Plan &lt;/span&gt;모드&lt;span&gt; vs Act &lt;/span&gt;모드 활용법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;16.1 Plan &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;모드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;파일을 수정하거나 명령을 실행하지 않고&lt;span&gt;, &lt;/span&gt;&lt;b&gt;대화와 계획 수립만&lt;/b&gt; 진행하는 모드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구사항을 다듬거나&lt;span&gt;(11.3&lt;/span&gt;절&lt;span&gt;), &lt;/span&gt;구현 방향을 상의하거나&lt;span&gt;, &lt;/span&gt;여러 접근 방식의 장단점을 비교할 때 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;로컬 모델의 경우&lt;span&gt;, Plan &lt;/span&gt;모드에서 충분히 계획을 구체화해두면 이후&lt;span&gt; Act &lt;/span&gt;모드에서의 실패 확률을 크게 줄일 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Plan &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 인증 기능을 추가하려고 해&lt;span&gt;. JWT &lt;/span&gt;방식과 세션 방식 중 어떤 게 이 프로젝트에 맞을지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docs/ARCHITECTURE.md&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 참고해서 의견을 줘&lt;span&gt;. &lt;/span&gt;아직 코드는 작성하지 마&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;16.2 Act &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;모드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;실제로 파일을 생성&lt;span&gt;/&lt;/span&gt;수정하고 터미널 명령을 실행하는 모드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Plan &lt;/span&gt;&lt;span&gt;모드에서 방향이 정해진 뒤 전환해서 사용하는 것을 권장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Act &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방금 상의한&lt;span&gt; JWT &lt;/span&gt;방식으로 인증 미들웨어를 구현해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;16.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;권장 워크플로우&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Plan &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드&lt;span&gt;: &lt;/span&gt;요구사항&lt;span&gt;/&lt;/span&gt;방향 상의&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필요시&lt;span&gt;) &lt;/span&gt;설계 문서 업데이트&lt;span&gt; (4&lt;/span&gt;부&lt;span&gt; 14.4&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Act &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드&lt;span&gt;: &lt;/span&gt;작은&lt;span&gt; Task &lt;/span&gt;단위로 구현 지시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결과 검토&lt;span&gt; (diff &lt;/span&gt;확인&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음&lt;span&gt; Task&lt;/span&gt;로 이동&lt;span&gt;, &lt;/span&gt;반복&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;17&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;파일 생성&lt;span&gt;/&lt;/span&gt;수정 워크플로우&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;17.1 Diff &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;확인 및 승인 과정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;이 파일을 수정할 때는 즉시 반영되지 않고&lt;span&gt;, &lt;/span&gt;&lt;b&gt;변경 사항&lt;span&gt;(diff)&lt;/span&gt;을 먼저 보여주고 승인을 요청&lt;/b&gt;합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;초록색&lt;span&gt;(&lt;/span&gt;추가&lt;span&gt;)/&lt;/span&gt;빨간색&lt;span&gt;(&lt;/span&gt;삭제&lt;span&gt;) &lt;/span&gt;라인으로 변경 내용 표시&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Save&quot; &lt;/span&gt;&lt;span&gt;또는&lt;span&gt; &quot;Approve&quot; &lt;/span&gt;버튼으로 승인&lt;span&gt;, &lt;/span&gt;거부 시 변경 사항 취소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;승인 전 반드시 변경 라인 하나하나를 읽고 의도와 일치하는지 확인하는 습관을 들이는 것이 중요합니다&lt;span&gt;. &lt;/span&gt;로컬 모델은 가끔 관련 없는 파일까지 건드리려 하는 경우가 있어&lt;span&gt;, &lt;/span&gt;이 검토 단계를 생략하면 안 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;17.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;자동 승인 설정 주의사항&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 특정 작업&lt;span&gt;(&lt;/span&gt;파일 읽기&lt;span&gt;, &lt;/span&gt;안전한 명령 등&lt;span&gt;)&lt;/span&gt;에 대해 자동 승인을 설정할 수 있는 옵션을 제공합니다&lt;span&gt;. &lt;/span&gt;편의를 위해 켜둘 수는 있지만&lt;span&gt;, &lt;/span&gt;&lt;b&gt;파일 삭제&lt;span&gt;, &lt;/span&gt;외부 네트워크 요청&lt;span&gt;, git push &lt;/span&gt;등 되돌리기 어려운 작업은 항상 수동 승인으로 유지&lt;/b&gt;하는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;18&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;터미널 명령 실행과 자동화&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 필요시 다음과 같은 명령을 스스로 실행하고 결과를 읽어 다음 행동을 결정합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# Frontend (Vue.js)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;npm install&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;npm run test:unit&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# Backend (Spring Boot)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;./gradlew build&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;./gradlew test&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;git status&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;git commit -m &quot;...&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;명령 실행 결과&lt;span&gt;(&lt;/span&gt;특히 에러 메시지&lt;span&gt;)&lt;/span&gt;는&lt;span&gt; Cline&lt;/span&gt;의 다음 판단에 직접 사용되므로&lt;span&gt;, &lt;/span&gt;실행 로그가 잘리지 않도록&lt;span&gt; vLLM&lt;/span&gt;의 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설정에 여유를 두는 것이 좋습니다&lt;span&gt; (2&lt;/span&gt;부&lt;span&gt; 6.3&lt;/span&gt;절&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;위험한 명령&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;rm -rf&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;git push --force&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;은 실행 전 반드시 직접 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;19&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;에러 디버깅을&lt;span&gt; Cline&lt;/span&gt;과 함께하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;19.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;기본 흐름&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; 테스트 실행 또는 앱 실행&lt;span&gt; &amp;rarr; &lt;/span&gt;에러 발생&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; Cline&lt;/span&gt;&lt;span&gt;에게 에러 로그를 그대로 전달&lt;span&gt; (&lt;/span&gt;또는&lt;span&gt; Cline&lt;/span&gt;이 직접 명령을 실행해 로그를 읽음&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; Cline&lt;/span&gt;&lt;span&gt;이 원인 분석 및 수정&lt;span&gt; diff &lt;/span&gt;제안&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;-&amp;nbsp; 검토 후 승인&lt;span&gt; &amp;rarr; &lt;/span&gt;재실행&lt;span&gt; &amp;rarr; &lt;/span&gt;반복&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프롬프트 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;./gradlew test &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행했더니 아래 에러가 나&lt;span&gt;. &lt;/span&gt;원인을 분석하고 수정해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TodoServiceTest &amp;gt; completeTodo_shouldSetCompletedTrue() FAILED&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;org.opentest4j.AssertionFailedError:&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Expecting: false&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;to be equal to: true&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;19.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;로컬 모델 디버깅 시 유의점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로컬&lt;span&gt; 32B&lt;/span&gt;급 모델은 복잡한 스택 트레이스나 여러 파일에 걸친 원인 추적에서 클라우드 최상위 모델보다 실수가 잦을 수 있습니다&lt;span&gt;. &lt;/span&gt;다음을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;에러와 &lt;b&gt;직접 관련된 파일만&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;첨부로 명시적으로 제공&lt;span&gt; (&lt;/span&gt;전체 코드베이스를 다 훑게 하지 않기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;한 번에 여러 에러를 몰아서 던지지 말고&lt;span&gt;, &lt;/span&gt;&lt;b&gt;하나씩 순차적으로&lt;/b&gt; 해결&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;원인이 명확하지 않을 때는&lt;span&gt; Plan &lt;/span&gt;모드로 전환해 가설을 먼저 논의한 후&lt;span&gt; Act &lt;/span&gt;모드로 수정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;20&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;컨텍스트 관리하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;20.1 `.clineignore`&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트 내 불필요한 파일&lt;span&gt;(&lt;/span&gt;빌드 산출물&lt;span&gt;, &lt;/span&gt;의존성 폴더&lt;span&gt;, &lt;/span&gt;대용량 데이터 등&lt;span&gt;)&lt;/span&gt;을&lt;span&gt; Cline&lt;/span&gt;이 읽지 않도록 제외합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# .clineignore&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;node_modules/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dist/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;build/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.gradle/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*.log&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.env&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;application-secret.yml&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이는 단순히 성능 문제가 아니라&lt;span&gt;, &lt;/span&gt;&lt;b&gt;로컬 모델의 짧은 컨텍스트를 불필요한 내용으로 낭비하지 않기 위한 필수 설정&lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;20.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;프로젝트 구조 최적화&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;파일당 코드 길이를 너무 길게 두지 않기&lt;span&gt; (&lt;/span&gt;한 파일이 너무 크면 그 파일 하나만 읽어도 컨텍스트를 크게 소진&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;관심사별로 파일을 명확히 분리&lt;span&gt; (12.1&lt;/span&gt;절 폴더 구조 참고&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;memory-bank/&lt;/span&gt;&lt;span&gt;(13.3&lt;/span&gt;&lt;span&gt;절&lt;span&gt;) &lt;/span&gt;를 활용해&lt;span&gt; &quot;&lt;/span&gt;지금 필요한 요약&lt;span&gt;&quot;&lt;/span&gt;만 우선 참조하는 습관&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;20.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;짧은 컨텍스트 한계 다루는 법 정리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Task &lt;/span&gt;&lt;span&gt;잘게 쪼개기&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;부&lt;span&gt; 14.1&lt;/span&gt;절 참고&lt;span&gt;, &lt;/span&gt;한 번의 요청 범위를 좁게&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clineignore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;활용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;불필요한 파일 원천 차단&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;선택적 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;첨부&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;관련 파일만 명시적으로 첨부&lt;span&gt;, &lt;/span&gt;전체 스캔 지양&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Memory Bank &lt;/span&gt;&lt;span&gt;요약본 우선&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;전체 문서 대신&lt;span&gt; activeContext.md &lt;/span&gt;같은 요약 먼저 참조&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;새 세션으로 리셋&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;대화가 너무 길어지면&lt;span&gt; memory-bank&lt;/span&gt;를 참조시키며 새 세션 시작&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/18</guid>
      <comments>https://i-dreamers.tistory.com/entry/5%EB%B6%80-%EC%8B%A4%EC%A0%84-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9#entry18comment</comments>
      <pubDate>Tue, 7 Jul 2026 17:09:43 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 4부. 분석/설계와 바이브 코딩 연결하기</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-4%EB%B6%80-%EB%B6%84%EC%84%9D%EC%84%A4%EA%B3%84%EC%99%80-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;10&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;바이브 코딩 전 분석&lt;span&gt;/&lt;/span&gt;설계가 필요한 이유&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;10.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;로컬&lt;span&gt; LLM&lt;/span&gt;의 제한적 추론 능력과 설계 부재 시 발생하는 문제&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;바이브 코딩에서 가장 흔한 실패 패턴은&lt;span&gt; &quot;&lt;/span&gt;설계 없이 바로 코딩 지시부터 하는 것&lt;span&gt;&quot;&lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;특히 로컬 환경에서 구동하는&lt;span&gt; 32B&lt;/span&gt;급 모델은 클라우드 최상위 모델 대비 다음과 같은 한계가 있을 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;여러 파일에 걸친 일관된 아키텍처를 스스로 유지하는 능력이 상대적으로 약함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;긴 대화가 이어지면 앞서 정한 규칙&lt;span&gt;(&lt;/span&gt;네이밍 컨벤션&lt;span&gt;, &lt;/span&gt;폴더 구조 등&lt;span&gt;)&lt;/span&gt;을 잊어버리는 경향&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;모호한 지시&lt;span&gt;(&quot;&lt;/span&gt;로그인 기능 만들어줘&lt;span&gt;&quot;)&lt;/span&gt;를 받으면 임의로 세부사항을 추측해서 구현&lt;span&gt; &amp;rarr; &lt;/span&gt;나중에 요구사항과 어긋남이 드러남&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설계 없이 진행하면 다음과 같은 악순환이 발생하기 쉽습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모호한 지시&lt;span&gt; &amp;rarr; AI&lt;/span&gt;가 임의로 추측하여 구현&lt;span&gt; &amp;rarr; &lt;/span&gt;의도와 다른 결과물&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수정 지시&lt;span&gt; &amp;rarr; &lt;/span&gt;다른 부분과 충돌&lt;span&gt; &amp;rarr; &lt;/span&gt;재수정&lt;span&gt; &amp;rarr; ... (&lt;/span&gt;반복&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 악순환은 대화가 길어질수록 컨텍스트가 누적되어 로컬 모델의 컨텍스트 한계에도 더 빨리 도달하게 만듭니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;10.2 &quot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설계는 사람 주도&lt;span&gt; + &lt;/span&gt;코딩은&lt;span&gt; AI &lt;/span&gt;위임&lt;span&gt;&quot; &lt;/span&gt;역할 분담 원칙&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 가이드가 권장하는 원칙은 다음과 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;요구사항 정의&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;사람&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;비즈니스 맥락&lt;span&gt;, &lt;/span&gt;사용자 니즈는&lt;span&gt; AI&lt;/span&gt;가 알 수 없음&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;아키텍처&lt;span&gt;/&lt;/span&gt;설계&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;사람&lt;span&gt; (AI&lt;/span&gt;와 상의&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;장기적 유지보수성&lt;span&gt;, &lt;/span&gt;팀 컨벤션 판단은 사람의 몫&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;설계 문서화&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;사람&lt;span&gt; + AI &lt;/span&gt;협업&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;초안은&lt;span&gt; AI&lt;/span&gt;가&lt;span&gt;, &lt;/span&gt;최종 검토&lt;span&gt;/&lt;/span&gt;확정은 사람이&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;실제 코드 구현&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;AI &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;위임&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;반복적 타이핑&lt;span&gt;, &lt;/span&gt;보일러플레이트는&lt;span&gt; AI&lt;/span&gt;가 빠르고 정확&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;코드 리뷰&lt;span&gt;/&lt;/span&gt;검증&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;사람&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;설계 의도와 부합하는지는 결국 사람이 판단&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉&lt;span&gt;, &quot;&lt;/span&gt;생각은 내가 하고&lt;span&gt;, &lt;/span&gt;타이핑은&lt;span&gt; AI&lt;/span&gt;가 한다&lt;span&gt;&quot;&lt;/span&gt;는 구도를 명확히 하는 것이 중요합니다&lt;span&gt;. &lt;/span&gt;다음 장부터는 이 원칙을 실제로 어떻게 실행하는지 단계별로 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;11&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;요구사항 분석하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 장부터는 하나의 예제 프로젝트를 끝까지 일관되게 사용해 설명합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예제 프로젝트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 할 일 관리 서비스&lt;span&gt;&quot; &amp;mdash; Frontend: &lt;b&gt;Vue.js 3&lt;/b&gt;, Backend: &lt;b&gt;Spring Boot 3 (Java/Kotlin)&lt;/b&gt;, DB: &lt;b&gt;PostgreSQL&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;요구사항 분석은&lt;span&gt; &quot;AI&lt;/span&gt;에게 무엇을 시킬지&lt;span&gt;&quot;&lt;/span&gt;를 정하는 단계가 아니라&lt;span&gt;, &lt;b&gt;&quot;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;내가 무엇을 원하는지 스스로 명확히 하는&lt;span&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;단계입니다&lt;span&gt;. &lt;/span&gt;로컬&lt;span&gt; LLM&lt;/span&gt;은 클라우드 최상위 모델보다 모호함을 스스로 메우는 능력이 떨어지기 때문에&lt;span&gt;, &lt;/span&gt;이 단계를 충실히 거칠수록 이후 바이브 코딩 단계의 성공률이 크게 올라갑니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;요구사항 분석의 전체 절차&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배경&lt;span&gt;/&lt;/span&gt;목적 정의&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;왜 이 프로젝트를 만드는가&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이해관계자와 사용자 정의&lt;span&gt; &amp;rarr; &lt;/span&gt;누가 쓰는가&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기능 요구사항 도출&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;무엇을 할 수 있어야 하는가&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비기능 요구사항 도출&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;어떤 품질&lt;span&gt;/&lt;/span&gt;제약을 만족해야 하는가&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 스토리 작성&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;기능을 사용자 관점 문장으로 구체화&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유스케이스 상세화&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;rarr; &lt;/span&gt;각 스토리의 정상&lt;span&gt;/&lt;/span&gt;예외 흐름 정의&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선순위 및 범위&lt;span&gt;(MVP) &lt;/span&gt;확정&lt;span&gt; &amp;rarr; &lt;/span&gt;무엇을 먼저 만들 것인가&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8. Cline&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과&lt;span&gt; Plan &lt;/span&gt;모드로 교차 검증&lt;span&gt; &amp;rarr; &lt;/span&gt;빠진 부분&lt;span&gt;/&lt;/span&gt;모순 점검&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 절차는 대규모 프로젝트에서 쓰는 정식 요구공학 프로세스를 개인&lt;span&gt;/&lt;/span&gt;소규모 팀 바이브 코딩에 맞게 축약한 것입니다&lt;span&gt;. &lt;/span&gt;프로젝트 규모가 작다고 해서&lt;span&gt; 1~2&lt;/span&gt;단계를 건너뛰면&lt;span&gt;, &lt;/span&gt;결국 코딩 단계에서&lt;span&gt; &quot;&lt;/span&gt;이게 아닌데&lt;span&gt;&quot; &lt;/span&gt;하는 재작업으로 시간을 더 많이 쓰게 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;배경&lt;span&gt;/&lt;/span&gt;목적 정의&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가장 먼저&lt;span&gt;, &lt;/span&gt;이 프로젝트가 &lt;b&gt;왜&lt;/b&gt; 필요한지 한두 문단으로 정리합니다&lt;span&gt;. &lt;/span&gt;이는 이후&lt;span&gt; AI&lt;/span&gt;에게 프로젝트 맥락을 설명할 때 그대로 재사용됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로젝트 배경&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 팀은 할 일 관리를 채팅과 스프레드시트로 병행하고 있어 진행 상황 파악이 어렵다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원&lt;span&gt; 5&lt;/span&gt;명 내외의 소규모 조직이 사용할 수 있는&lt;span&gt;, &lt;/span&gt;가볍고 빠른 웹 기반 할 일 관리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스를 자체 구축하여 사내 인프라&lt;span&gt;(PostgreSQL)&lt;/span&gt;에 직접 데이터를 적재하고자 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;이해관계자와 사용자 정의&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이해관계자&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종 사용자&lt;span&gt;: &lt;/span&gt;팀원&lt;span&gt; (&lt;/span&gt;할 일 등록&lt;span&gt;/&lt;/span&gt;조회&lt;span&gt;/&lt;/span&gt;완료 처리&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관리자&lt;span&gt;: &lt;/span&gt;팀 리더&lt;span&gt; (&lt;/span&gt;팀원 배정&lt;span&gt;, &lt;/span&gt;전체 현황 조회&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 유형별 권한&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역할&lt;span&gt; | &lt;/span&gt;권한&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|---|---|&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원&lt;span&gt; | &lt;/span&gt;본인에게 배정된 할 일 조회&lt;span&gt;/&lt;/span&gt;완료 처리&lt;span&gt;, &lt;/span&gt;새 할 일 생성&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더&lt;span&gt; | &lt;/span&gt;팀원 권한&lt;span&gt; + &lt;/span&gt;할 일 배정&lt;span&gt;, &lt;/span&gt;전체 통계 조회&lt;span&gt;, &lt;/span&gt;팀원 관리&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 유형을 명확히 나누어두면&lt;span&gt;, &lt;/span&gt;이후&lt;span&gt; Spring Boot&lt;/span&gt;의 인증&lt;span&gt;/&lt;/span&gt;인가&lt;span&gt;(Spring Security) &lt;/span&gt;설계와&lt;span&gt; Vue.js&lt;/span&gt;의 화면별 접근 제어를 정의할 때 근거가 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;기능 요구사항 도출&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능 요구사항은 &lt;b&gt;&lt;span&gt;&quot;&lt;/span&gt;시스템이 무엇을 할 수 있어야 하는가&lt;span&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;를 동사 중심으로 나열합니다&lt;span&gt;. &lt;/span&gt;화면 단위가 아니라 &lt;b&gt;행위&lt;span&gt;(&lt;/span&gt;액션&lt;span&gt;) &lt;/span&gt;단위&lt;/b&gt;로 쪼개는 것이 이후&lt;span&gt; API &lt;/span&gt;설계와 자연스럽게 연결됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기능 요구사항&lt;span&gt; (FR)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-1. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 이메일&lt;span&gt;/&lt;/span&gt;비밀번호로 로그인할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-2. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 할 일을 생성할 수 있다&lt;span&gt; (&lt;/span&gt;제목&lt;span&gt;, &lt;/span&gt;설명&lt;span&gt;, &lt;/span&gt;마감일&lt;span&gt;, &lt;/span&gt;담당자&lt;span&gt;, &lt;/span&gt;태그&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-3. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 본인에게 배정된 할 일 목록을 조회할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-4. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 할 일을 마감일&lt;span&gt;/&lt;/span&gt;생성일&lt;span&gt;/&lt;/span&gt;우선순위 기준으로 정렬해서 볼 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-5. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 할 일을 완료 처리하거나 완료를 취소할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-6. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더는 할 일을 다른 팀원에게 재배정할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-7. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더는 팀 전체의 완료율 통계를 조회할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FR-8. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자는 할 일에 댓글을 남길 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 항목에 &lt;b&gt;&lt;span&gt;ID(FR-1, FR-2...)&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;를 붙이는 것을 권장합니다&lt;span&gt;. &lt;/span&gt;이후 설계 문서&lt;span&gt;, API &lt;/span&gt;스펙&lt;span&gt;, &lt;/span&gt;커밋 메시지&lt;span&gt;, Cline &lt;/span&gt;지시문에서&lt;span&gt; &quot;FR-3 &lt;/span&gt;구현해줘&lt;span&gt;&quot; &lt;/span&gt;처럼 참조할 수 있어 추적성이 크게 좋아집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.5 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;비기능 요구사항 도출&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;비기능 요구사항은&lt;span&gt; &quot;&lt;/span&gt;얼마나 잘 해야 하는가&lt;span&gt;&quot;&lt;/span&gt;를 규정합니다&lt;span&gt;. &lt;/span&gt;아래 카테고리를 체크리스트처럼 훑으며 빠짐없이 정리하는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비기능 요구사항&lt;span&gt; (NFR)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;성능&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-1. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 목록 조회&lt;span&gt; API&lt;/span&gt;는 평균 응답&lt;span&gt; 200ms &lt;/span&gt;이내&lt;span&gt; (&lt;/span&gt;팀원 수&lt;span&gt; 50&lt;/span&gt;명&lt;span&gt;, &lt;/span&gt;할 일&lt;span&gt; 1&lt;/span&gt;만 건 기준&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-2. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비밀번호는&lt;span&gt; BCrypt&lt;/span&gt;로 해시하여 저장&lt;span&gt; (&lt;/span&gt;평문 저장 금지&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-3. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원은 다른 팀원의 할 일을 조회&lt;span&gt;/&lt;/span&gt;수정할 수 없다&lt;span&gt; (&lt;/span&gt;본인 배정 건 제외 접근 차단&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성&lt;span&gt;/&lt;/span&gt;운영&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-4. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;별도 이중화 없이 단일 서버로 운영&lt;span&gt; (&lt;/span&gt;사내 소규모 팀 대상이므로 고가용성 불필요&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-5. DB&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는&lt;span&gt; PostgreSQL 15 &lt;/span&gt;이상&lt;span&gt;, &lt;/span&gt;매일 새벽 자동 백업&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유지보수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-6. Backend&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는&lt;span&gt; Spring Boot &lt;/span&gt;레이어드 아키텍처&lt;span&gt;(Controller-Service-Repository)&lt;/span&gt;를 따른다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-7. Frontend&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는&lt;span&gt; Vue 3 Composition API + TypeScript&lt;/span&gt;로 작성한다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;호환성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NFR-8. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최신&lt;span&gt; Chrome/Edge &lt;/span&gt;기준으로 동작&lt;span&gt; (IE &lt;/span&gt;등 구형 브라우저 지원 불필요&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능 요구사항과 비기능 요구사항을 분리해서 정리하면&lt;span&gt;, &quot;&lt;/span&gt;빨리 만드는 것&lt;span&gt;&quot;&lt;/span&gt;과&lt;span&gt; &quot;&lt;/span&gt;잘 만드는 것&lt;span&gt;&quot; &lt;/span&gt;사이에서 이번 프로젝트가 어디에 방점을 두는지 팀 내에서도&lt;span&gt;, AI&lt;/span&gt;에게 지시할 때도 명확해집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.6 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;사용자 스토리 작성법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능 요구사항을 사용자 관점 문장으로 한 번 더 구체화합니다&lt;span&gt;. &lt;/span&gt;아래 템플릿을 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;As a [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 유형&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;I want to [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하고 싶은 행동&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;So that [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;얻고자 하는 가치&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Acceptance Criteria (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인수 조건&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조건&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조건&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예시&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## US-3 (FR-3 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대응&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;As a &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;I want to &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나에게 배정된 할 일 목록을 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;So that &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 무엇을 해야 하는지 파악할 수 있다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Acceptance Criteria&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인한 사용자에게 배정된 할 일만 표시된다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완료된 항목과 미완료 항목이 구분되어 표시된다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목록이 비어 있으면&lt;span&gt; &quot;&lt;/span&gt;배정된 할 일이 없습니다&lt;span&gt;&quot; &lt;/span&gt;안내 문구가 표시된다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;인수 조건&lt;span&gt;(Acceptance Criteria)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;을 함께 적어두는 것이 핵심입니다&lt;span&gt;. &lt;/span&gt;이것이 나중에&lt;span&gt; 14&lt;/span&gt;장의&lt;span&gt; &quot;&lt;/span&gt;구현 결과 검증&lt;span&gt;&quot; &lt;/span&gt;단계에서 그대로 체크리스트로 쓰이고&lt;span&gt;, &lt;/span&gt;테스트 코드 작성의 근거가 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.7 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;유스케이스 상세화&lt;span&gt; (&lt;/span&gt;정상 흐름&lt;span&gt; + &lt;/span&gt;예외 흐름&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 단계를 거치는 복잡한 기능은 유스케이스로 한 단계 더 구체화합니다&lt;span&gt;. &lt;/span&gt;특히 &lt;b&gt;예외 흐름&lt;/b&gt;을 명시하는 것이 중요합니다&lt;span&gt; &amp;mdash; &lt;/span&gt;이 부분이 빠지면&lt;span&gt; AI&lt;/span&gt;가 예외 처리를 임의로&lt;span&gt; (&lt;/span&gt;혹은 아예 하지 않고&lt;span&gt;) &lt;/span&gt;구현하게 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## UC-6: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 재배정&lt;span&gt; (FR-6 &lt;/span&gt;대응&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주 액터&lt;span&gt;**: &lt;/span&gt;팀 리더&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사전 조건&lt;span&gt;**: &lt;/span&gt;로그인 상태&lt;span&gt;, &lt;/span&gt;대상 할 일이 존재함&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상 흐름&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더가 할 일 목록에서 특정 항목의&lt;span&gt; &quot;&lt;/span&gt;재배정&lt;span&gt;&quot; &lt;/span&gt;버튼 클릭&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템이 재배정 가능한 팀원 목록을 표시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더가 새 담당자를 선택하고 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템이 담당자를 변경하고&lt;span&gt;, &lt;/span&gt;변경 이력을 기록&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새 담당자에게 알림&lt;span&gt; (v1&lt;/span&gt;에서는 화면 표시만&lt;span&gt;, &lt;/span&gt;이메일 알림은 범위 제외&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예외 흐름&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- E1. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀원 권한으로 재배정 시도&lt;span&gt; &amp;rarr; 403 Forbidden &lt;/span&gt;응답&lt;span&gt;, &quot;&lt;/span&gt;권한이 없습니다&lt;span&gt;&quot; &lt;/span&gt;안내&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- E2. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;존재하지 않는 할 일&lt;span&gt; ID&lt;/span&gt;로 요청&lt;span&gt; &amp;rarr; 404 Not Found &lt;/span&gt;응답&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- E3. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미 완료된 할 일 재배정 시도&lt;span&gt; &amp;rarr; &lt;/span&gt;재배정은 허용하되 경고 메시지 표시&lt;span&gt; (&lt;/span&gt;차단하지 않음&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.8 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;우선순위 및 범위&lt;span&gt;(MVP) &lt;/span&gt;확정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 기능을 한 번에 구현하려 하지 말고&lt;span&gt;, &lt;/span&gt;&lt;b&gt;최소 기능 제품&lt;span&gt;(MVP)&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;범위를 먼저 확정합니다&lt;span&gt;. MoSCoW &lt;/span&gt;기법&lt;span&gt;(Must/Should/Could/Won't)&lt;/span&gt;을 활용하면 편리합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범위 확정&lt;span&gt; (MoSCoW)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Must (MVP &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필수&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- FR-1 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인&lt;span&gt;, FR-2 &lt;/span&gt;할 일 생성&lt;span&gt;, FR-3 &lt;/span&gt;목록 조회&lt;span&gt;, FR-5 &lt;/span&gt;완료 처리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Should (MVP &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후 우선&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- FR-4 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정렬&lt;span&gt;, FR-6 &lt;/span&gt;재배정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Could (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여유 있으면&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- FR-7 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;통계&lt;span&gt;, FR-8 &lt;/span&gt;댓글&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Won't (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 범위 제외&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이메일&lt;span&gt;/&lt;/span&gt;푸시 알림&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모바일 앱&lt;span&gt; (&lt;/span&gt;반응형 웹으로 대응&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 범위를 나눠두면&lt;span&gt;, 14&lt;/span&gt;장의&lt;span&gt; Task &lt;/span&gt;분해와&lt;span&gt; 25&lt;/span&gt;장의 실전 예제에서&lt;span&gt; &quot;Must &lt;/span&gt;항목부터 순서대로 구현&lt;span&gt;&quot;&lt;/span&gt;하는 흐름이 자연스럽게 이어집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;11.9 Cline&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;과 함께&lt;span&gt; Plan &lt;/span&gt;모드로 요구사항 교차 검증&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;요구사항 초안&lt;span&gt;(11.4~11.8&lt;/span&gt;절 산출물&lt;span&gt;)&lt;/span&gt;이 준비되면&lt;span&gt;, Cline&lt;/span&gt;의 &lt;b&gt;&lt;span&gt;Plan &lt;/span&gt;모드&lt;/b&gt;로 빠진 부분이나 모순을 점검받습니다&lt;span&gt;. Plan &lt;/span&gt;모드는 파일을 수정하지 않으므로 이 단계에 적합합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Plan &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드 프롬프트 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래는&lt;span&gt; &quot;&lt;/span&gt;팀 할 일 관리 서비스&lt;span&gt;&quot;&lt;/span&gt;의 기능&lt;span&gt;/&lt;/span&gt;비기능 요구사항과 유스케이스 초안이야&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spring Boot + PostgreSQL &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;백엔드&lt;span&gt;, Vue.js &lt;/span&gt;프론트엔드로 구현할 예정이야&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빠진 요구사항&lt;span&gt;, &lt;/span&gt;서로 모순되는 부분&lt;span&gt;, &lt;/span&gt;애매한 표현이 있으면 질문 형태로 알려줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직 코드나 설계 문서는 작성하지 마&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요구사항 문서 붙여넣기 또는&lt;span&gt; @docs/PRD.md &lt;/span&gt;첨부&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 단계에서 로컬 모델이&lt;span&gt; &quot;&lt;/span&gt;재배정 시 이전 담당자에게도 알림이 필요한가요&lt;span&gt;?&quot;, &quot;&lt;/span&gt;완료 취소는 몇 번까지 가능한가요&lt;span&gt;?&quot; &lt;/span&gt;같은 질문을 던지면&lt;span&gt;, &lt;/span&gt;사람이 그 자리에서 답을 정해 요구사항 문서에 즉시 반영합니다&lt;span&gt;. &lt;/span&gt;이렇게 하면 실제 구현 단계에서 이런 질문에&lt;span&gt; AI&lt;/span&gt;가 임의로 답을 추측해 엉뚱하게 구현하는 상황을 미리 막을 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;12&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;설계 문서화하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;요구사항이&lt;span&gt; &quot;&lt;/span&gt;무엇을 만들 것인가&lt;span&gt;&quot;&lt;/span&gt;라면&lt;span&gt;, &lt;/span&gt;설계는 &lt;b&gt;&lt;span&gt;&quot;&lt;/span&gt;어떻게 만들 것인가&lt;span&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;이 장에서는&lt;span&gt; Vue.js / Spring Boot / PostgreSQL &lt;/span&gt;스택을 기준으로 설계 문서를 어떻게 구체적으로 작성하는지 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;아키텍처 개요 작성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전체 시스템 구성도&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;flowchart LR&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Browser[Vue.js SPA] --&amp;gt;|REST API / JSON| Spring[Spring Boot API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Spring --&amp;gt;|JPA/Hibernate| PG[(PostgreSQL)]&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Spring --&amp;gt;|JWT &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검증&lt;span&gt;| Auth[Spring Security]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;계층별 책임 정의&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍처 개요&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Frontend (Vue.js 3)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Composition API + TypeScript + Pinia(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상태 관리&lt;span&gt;) + Vue Router&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Axios&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로&lt;span&gt; Backend REST API &lt;/span&gt;호출&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화면&lt;span&gt;(View) - &lt;/span&gt;컴포넌트&lt;span&gt;(Component) - &lt;/span&gt;스토어&lt;span&gt;(Store) - API &lt;/span&gt;클라이언트 계층 분리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Backend (Spring Boot 3)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;레이어드 아키텍처&lt;span&gt;: Controller &amp;rarr; Service &amp;rarr; Repository &amp;rarr; Entity&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증&lt;span&gt;: Spring Security + JWT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- ORM: Spring Data JPA (Hibernate)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빌드 도구&lt;span&gt;: Gradle&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### DB (PostgreSQL 15)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Backend&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 동일 서버 내&lt;span&gt; Docker Compose&lt;/span&gt;로 구성&lt;span&gt; (&lt;/span&gt;로컬&lt;span&gt;/&lt;/span&gt;개발 환경 기준&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이그레이션 관리&lt;span&gt;: Flyway&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;폴더 구조&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;폴더 구조&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Backend (Spring Boot)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;backend/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- src/main/java/com/example/todoapp/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- controller/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# REST &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨트롤러&lt;span&gt; (@RestController)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- service/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비즈니스 로직&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- repository/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Spring Data JPA &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리포지토리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- entity/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# JPA &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔티티&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- dto/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요청&lt;span&gt;/&lt;/span&gt;응답&lt;span&gt; DTO&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- config/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Security, CORS &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등 설정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;`-- exception/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예외 처리&lt;span&gt; (@ControllerAdvice)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- src/main/resources/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- application.yml&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;`-- db/migration/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Flyway &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이그레이션&lt;span&gt; SQL&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;`-- src/test/java/...&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# JUnit 5 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Frontend (Vue.js)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;frontend/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- src/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- views/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라우트 단위 화면&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- components/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;재사용 컴포넌트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- stores/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Pinia &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스토어&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- api/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Axios &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기반&lt;span&gt; API &lt;/span&gt;클라이언트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- router/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Vue Router &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;`-- types/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# TypeScript &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;타입 정의&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;`-- tests/&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Vitest &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공통 설계 문서&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docs/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- PRD.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- ARCHITECTURE.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+-- API_SPEC.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;`-- DATA_MODEL.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 폴더 구조를 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/ARCHITECTURE.md&lt;/span&gt;&lt;span&gt;에 그대로 저장해두면&lt;span&gt;, &lt;/span&gt;이후&lt;span&gt; Cline&lt;/span&gt;에게&lt;span&gt; &quot;&lt;/span&gt;이 구조를 따라 파일을 생성해줘&lt;span&gt;&quot;&lt;/span&gt;라고 지시할 수 있어 파일 위치가 임의로 뒤섞이는 것을 방지합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.2 API/&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;인터페이스 스펙 먼저 정의하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Frontend(Vue.js)&lt;/span&gt;&lt;span&gt;와&lt;span&gt; Backend(Spring Boot)&lt;/span&gt;를 각각 다른 세션에서&lt;span&gt;, &lt;/span&gt;혹은 다른 사람이 작업하더라도 서로 어긋나지 않도록 &lt;b&gt;&lt;span&gt;API &lt;/span&gt;스펙을 코드 작성 전에 먼저 확정&lt;/b&gt;합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스펙&lt;span&gt; (docs/API_SPEC.md)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POST /api/auth/login&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Request:&lt;span&gt;&amp;nbsp; &lt;/span&gt;{ &quot;email&quot;: string, &quot;password&quot;: string }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Response: { &quot;accessToken&quot;: string, &quot;expiresIn&quot;: number }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Error:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;401 { &quot;message&quot;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이메일 또는 비밀번호가 올바르지 않습니다&lt;span&gt;&quot; }&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일&lt;span&gt; (Todo)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POST /api/todos&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Request:&lt;span&gt;&amp;nbsp; &lt;/span&gt;{ &quot;title&quot;: string, &quot;description&quot;: string?, &quot;dueDate&quot;: string (ISO 8601)?, &quot;assigneeId&quot;: number, &quot;tags&quot;: string[]? }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Response: 201 { &quot;id&quot;: number, &quot;title&quot;: string, &quot;dueDate&quot;: string, &quot;completed&quot;: boolean, &quot;assigneeId&quot;: number }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Error:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;400 (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필수값 누락&lt;span&gt;), 403 (&lt;/span&gt;권한 없음&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GET /api/todos?sort=dueDate&amp;amp;order=asc&amp;amp;assigneeId={id}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Response: 200 [{ &quot;id&quot;: number, &quot;title&quot;: string, &quot;dueDate&quot;: string, &quot;completed&quot;: boolean, ... }]&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PATCH /api/todos/{id}/complete&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Response: 200 { &quot;id&quot;: number, &quot;completed&quot;: true }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Error:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;404 (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;존재하지 않는&lt;span&gt; ID), 403 (&lt;/span&gt;본인 배정 건이 아님&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PATCH /api/todos/{id}/reassign&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Request:&lt;span&gt;&amp;nbsp; &lt;/span&gt;{ &quot;newAssigneeId&quot;: number }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Response: 200 { &quot;id&quot;: number, &quot;assigneeId&quot;: number }&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Error:&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;403 (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 리더 권한 아님&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공통 에러 응답 형식&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;timestamp&quot;: string,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;status&quot;: number,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;message&quot;: string,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;path&quot;: string&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;API &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;스펙 작성 시 반드시 포함할 항목&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;요청&lt;span&gt;/&lt;/span&gt;응답 필드명과 타입&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Frontend TypeScript &lt;/span&gt;&lt;span&gt;타입&lt;span&gt;, Backend DTO&lt;/span&gt;가 여기서 파생됨&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;성공&lt;span&gt;/&lt;/span&gt;실패 상태 코드&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Spring Boot&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@ExceptionHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설계 근거&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;에러 응답 형식&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;프론트&lt;span&gt;/&lt;/span&gt;백엔드가 공통으로 처리할 수 있도록 통일&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;페이지네이션&lt;span&gt;/&lt;/span&gt;정렬 규칙&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;목록&lt;span&gt; API&lt;/span&gt;는 항상 이 부분에서 요구사항이 누락되기 쉬움&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;인증 방식&lt;span&gt; (&lt;/span&gt;헤더&lt;span&gt;, &lt;/span&gt;토큰 형식&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Authorization: Bearer {token}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등 명시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;필드명 규칙&lt;span&gt;(camelCase vs snake_case)&lt;/span&gt;도 이 시점에 명확히 정해두는 것을 권장합니다&lt;span&gt;. Spring Boot&lt;/span&gt;는 관례적으로&lt;span&gt; JSON &lt;/span&gt;필드에&lt;span&gt; camelCase(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;dueDate&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;를 사용하고&lt;span&gt;, PostgreSQL &lt;/span&gt;컬럼은&lt;span&gt; snake_case(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;due_date&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;를 사용하는 경우가 많은데&lt;span&gt;, &lt;/span&gt;이 매핑 규칙&lt;span&gt;(JPA &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@Column(name = &quot;due_date&quot;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;을 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;ARCHITECTURE.md&lt;/span&gt;&lt;span&gt;에 미리 적어두면&lt;span&gt; AI&lt;/span&gt;가 임의로 다른 규칙을 쓰는 것을 방지할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.3 DB &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;스키마&lt;span&gt; / &lt;/span&gt;데이터 모델 설계&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PostgreSQL &lt;/span&gt;&lt;span&gt;기준으로 테이블 정의와 관계를 먼저 문서화합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 모델&lt;span&gt; (docs/DATA_MODEL.md)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### users &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼&lt;span&gt; | &lt;/span&gt;타입&lt;span&gt; | &lt;/span&gt;제약&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|---|---|---|&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| id | BIGSERIAL | PRIMARY KEY |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| email | VARCHAR(255) | UNIQUE, NOT NULL |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| password_hash | VARCHAR(255) | NOT NULL |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| name | VARCHAR(100) | NOT NULL |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| role | VARCHAR(20) | NOT NULL, CHECK (role IN ('MEMBER', 'LEADER')) |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| created_at | TIMESTAMP | NOT NULL DEFAULT now() |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### todos &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼&lt;span&gt; | &lt;/span&gt;타입&lt;span&gt; | &lt;/span&gt;제약&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|---|---|---|&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| id | BIGSERIAL | PRIMARY KEY |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| title | VARCHAR(255) | NOT NULL |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| description | TEXT | NULL &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;허용&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| due_date | TIMESTAMP | NULL &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;허용&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| completed | BOOLEAN | NOT NULL DEFAULT false |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| assignee_id | BIGINT | FOREIGN KEY &amp;rarr; users(id) |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| created_at | TIMESTAMP | NOT NULL DEFAULT now() |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### todo_tags &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테이블&lt;span&gt; (&lt;/span&gt;다대다 관계&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼&lt;span&gt; | &lt;/span&gt;타입&lt;span&gt; | &lt;/span&gt;제약&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|---|---|---|&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| todo_id | BIGINT | FOREIGN KEY &amp;rarr; todos(id) |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| tag_name | VARCHAR(50) | NOT NULL |&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### ERD (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관계 요약&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- users (1) ─── (N) todos&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[assignee_id]&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- todos (1) ─── (N) todo_tags&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;ERD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;를&lt;span&gt; mermaid&lt;/span&gt;로도 함께 표현&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;erDiagram&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;USERS ||--o{ TODOS : &quot;assigned&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TODOS ||--o{ TODO_TAGS : &quot;has&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;USERS {&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bigint id PK&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;varchar email&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;varchar role&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TODOS {&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bigint id PK&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;varchar title&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;timestamp due_date&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;boolean completed&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bigint assignee_id FK&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TODO_TAGS {&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bigint todo_id FK&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;varchar tag_name&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 정의를 그대로&lt;span&gt; Flyway &lt;/span&gt;마이그레이션&lt;span&gt; SQL(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;db/migration/V1__init.sql&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;로 옮기면&lt;span&gt;, Spring Boot&lt;/span&gt;의&lt;span&gt; JPA &lt;/span&gt;엔티티&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@Entity&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;와 스키마가 어긋나지 않게 관리할 수 있습니다&lt;span&gt;. &lt;/span&gt;이 문서를&lt;span&gt; Cline&lt;/span&gt;에게 첨부하고&lt;span&gt; &quot;&lt;/span&gt;이 스키마 기준으로&lt;span&gt; Flyway &lt;/span&gt;마이그레이션 파일과&lt;span&gt; JPA &lt;/span&gt;엔티티를 작성해줘&lt;span&gt;&quot;&lt;/span&gt;라고 지시하는 흐름이&lt;span&gt; 13.4&lt;/span&gt;절과&lt;span&gt; 14&lt;/span&gt;장에서 이어집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;화면&lt;span&gt;/&lt;/span&gt;컴포넌트 설계&lt;span&gt; (Vue.js &lt;/span&gt;기준 추가 항목&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Backend API &lt;/span&gt;&lt;span&gt;스펙만 정의하고 끝내지 않고&lt;span&gt;, Frontend&lt;/span&gt;가 있는 프로젝트라면 &lt;b&gt;화면 단위 설계&lt;/b&gt;도 함께 정리해두는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화면 설계&lt;span&gt; (docs/ARCHITECTURE.md &lt;/span&gt;내 섹션&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화면 목록&lt;span&gt; (Vue Router)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로&lt;span&gt; | &lt;/span&gt;컴포넌트&lt;span&gt; | &lt;/span&gt;설명&lt;span&gt; | &lt;/span&gt;접근 권한&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;|---|---|---|---|&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| /login | LoginView.vue | &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 화면&lt;span&gt; | &lt;/span&gt;비로그인&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| /todos | TodoListView.vue | &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내 할 일 목록&lt;span&gt; | &lt;/span&gt;로그인 필요&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| /todos/:id | TodoDetailView.vue | &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 상세&lt;span&gt;/&lt;/span&gt;댓글&lt;span&gt; | &lt;/span&gt;로그인 필요&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;| /admin | AdminDashboardView.vue | &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;팀 통계&lt;span&gt; (FR-7) | &lt;/span&gt;팀 리더만&lt;span&gt; |&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상태 관리&lt;span&gt; (Pinia &lt;/span&gt;스토어 구조&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- authStore: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 상태&lt;span&gt;, accessToken, &lt;/span&gt;현재 사용자 정보&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- todoStore: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 목록&lt;span&gt;, &lt;/span&gt;필터&lt;span&gt;/&lt;/span&gt;정렬 상태&lt;span&gt;, CRUD &lt;/span&gt;액션&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴포넌트 재사용 원칙&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- TodoItem.vue: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목록&lt;span&gt;/&lt;/span&gt;상세 화면에서 공통 사용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;폼 검증은 각&lt;span&gt; View&lt;/span&gt;에서 처리&lt;span&gt;, &lt;/span&gt;공통 검증 로직은&lt;span&gt; composables/ &lt;/span&gt;폴더로 분리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 화면&lt;span&gt;/&lt;/span&gt;상태 설계까지 문서화해두면&lt;span&gt;, Cline&lt;/span&gt;에게&lt;span&gt; &quot;TodoListView.vue&lt;/span&gt;를 만들어줘&lt;span&gt;&quot;&lt;/span&gt;라고 지시했을 때 어떤 스토어를 참조하고 어떤 컴포넌트를 재사용해야 하는지&lt;span&gt; AI&lt;/span&gt;가 임의로 판단하지 않고 문서를 따르게 할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.5 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;간단한 다이어그램 활용&lt;span&gt; (&lt;/span&gt;시퀀스 다이어그램&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 계층에 걸친 흐름&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;로그인&lt;span&gt; &amp;rarr; JWT &lt;/span&gt;발급&lt;span&gt; &amp;rarr; &lt;/span&gt;이후 요청 인증&lt;span&gt;)&lt;/span&gt;은 시퀀스 다이어그램으로 표현해두면&lt;span&gt; Backend &lt;/span&gt;인증 설계를 구현할 때 참고하기 좋습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sequenceDiagram&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;participant V as Vue.js&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;participant S as Spring Boot&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;participant P as PostgreSQL&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;V-&amp;gt;&amp;gt;S: POST /api/auth/login (email, password)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S-&amp;gt;&amp;gt;P: SELECT * FROM users WHERE email = ?&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;P--&amp;gt;&amp;gt;S: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 정보 반환&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S-&amp;gt;&amp;gt;S: BCrypt &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비밀번호 검증&lt;span&gt; + JWT &lt;/span&gt;생성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S--&amp;gt;&amp;gt;V: accessToken &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;반환&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;V-&amp;gt;&amp;gt;S: GET /api/todos (Authorization: Bearer {token})&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S-&amp;gt;&amp;gt;S: JWT &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검증&lt;span&gt; (Spring Security Filter)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S-&amp;gt;&amp;gt;P: SELECT * FROM todos WHERE assignee_id = ?&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;P--&amp;gt;&amp;gt;S: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 목록 반환&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;S--&amp;gt;&amp;gt;V: JSON &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;응답&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다이어그램은 정교할 필요 없이&lt;span&gt;, &quot;&lt;/span&gt;이 프로젝트의 각 계층이 어떤 순서로 상호작용하는지&lt;span&gt;&quot;&lt;/span&gt;를&lt;span&gt; AI&lt;/span&gt;와 사람이 동시에 빠르게 파악할 수 있는 수준이면 충분합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;12.6 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설계 문서 작성 시&lt;span&gt; Cline &lt;/span&gt;활용 팁&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설계 문서 초안을 처음부터 사람이 전부 작성할 필요는 없습니다&lt;span&gt;. &lt;/span&gt;요구사항 문서&lt;span&gt;(11&lt;/span&gt;장 산출물&lt;span&gt;)&lt;/span&gt;를&lt;span&gt; Cline&lt;/span&gt;에게 제공하고 초안 작성을 맡긴 뒤&lt;span&gt;, &lt;/span&gt;사람이 검토&lt;span&gt;/&lt;/span&gt;수정하는 방식이 효율적입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Plan &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모드 프롬프트 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;@docs/PRD.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 요구사항을 기준으로&lt;span&gt; Spring Boot + PostgreSQL + Vue.js &lt;/span&gt;스택에 맞는&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍처 개요&lt;span&gt;, API &lt;/span&gt;스펙&lt;span&gt;, DB &lt;/span&gt;스키마 초안을 각각 작성해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일은 아직 만들지 말고&lt;span&gt;, &lt;/span&gt;이 대화창에 마크다운으로 먼저 보여줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초안을 확인한 뒤 사람이 수정할 부분을 지시하고&lt;span&gt;, &lt;/span&gt;최종 확정된 내용만&lt;span&gt; 13&lt;/span&gt;장의 방법으로 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일에 저장합니다&lt;span&gt;. &lt;/span&gt;&lt;b&gt;초안은&lt;span&gt; AI, &lt;/span&gt;확정은 사람&lt;/b&gt;이라는 원칙&lt;span&gt;(10.2&lt;/span&gt;절&lt;span&gt;)&lt;/span&gt;을 이 단계에서도 그대로 지킵니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;13&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;분석&lt;span&gt;/&lt;/span&gt;설계 산출물을 프로젝트에 반영하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞서 정리한 요구사항&lt;span&gt;/&lt;/span&gt;설계 문서는 파일로 저장하지 않으면 대화가 끝나는 순간 사라집니다&lt;span&gt;. &lt;/span&gt;이를 프로젝트에 지속적으로 반영하는 것이 이 장의 핵심입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;13.1 `docs/` &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;폴더에 설계 문서를 파일로 저장하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;project/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;`-- docs/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- PRD.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제품 요구사항 문서&lt;span&gt; (&lt;/span&gt;배경&lt;span&gt;, FR/NFR, &lt;/span&gt;사용자 스토리&lt;span&gt;, MVP &lt;/span&gt;범위&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- ARCHITECTURE.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍처 개요&lt;span&gt;, &lt;/span&gt;폴더 구조&lt;span&gt;, &lt;/span&gt;화면&lt;span&gt;/&lt;/span&gt;컴포넌트 설계&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- API_SPEC.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스펙&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;`-- DATA_MODEL.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# DB &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스키마&lt;span&gt;, ERD&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 파일로 저장해두면&lt;span&gt;, &lt;/span&gt;이후 어떤 대화 세션에서든&lt;span&gt; &quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/ARCHITECTURE.md&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;참고해서 작업해줘&lt;span&gt;&quot;&lt;/span&gt;라고 지시할 수 있어 일관성이 유지됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;13.2 `.clinerules`&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;로 프로젝트 규칙&lt;span&gt;/&lt;/span&gt;컨벤션 인식시키기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 프로젝트 루트에 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clinerules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;파일&lt;span&gt;(&lt;/span&gt;또는 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clinerules/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;폴더&lt;span&gt;)&lt;/span&gt;이 있으면 이를 매 요청마다 자동으로 시스템 프롬프트에 포함시킵니다&lt;span&gt;. &lt;/span&gt;코딩 컨벤션&lt;span&gt;, &lt;/span&gt;금지 사항 등을 여기에 명시해두면 매번 반복 설명할 필요가 없습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# .clinerules&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코딩 컨벤션&lt;span&gt; (Backend - Spring Boot)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨트롤러는 얇게 유지하고&lt;span&gt;, &lt;/span&gt;비즈니스 로직은&lt;span&gt; Service &lt;/span&gt;레이어에 작성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- DTO&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와&lt;span&gt; Entity&lt;/span&gt;를 분리할 것&lt;span&gt; (Entity&lt;/span&gt;를 직접&lt;span&gt; API &lt;/span&gt;응답으로 반환하지 않기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든&lt;span&gt; API &lt;/span&gt;응답은&lt;span&gt; docs/API_SPEC.md&lt;/span&gt;의 형식을 따를 것&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커밋 전 반드시&lt;span&gt; `./gradlew test` &lt;/span&gt;실행 결과 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코딩 컨벤션&lt;span&gt; (Frontend - Vue.js)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Composition API + `&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;` &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 사용&lt;span&gt; (Options API &lt;/span&gt;금지&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;호출은 반드시&lt;span&gt; src/api/ &lt;/span&gt;폴더의 클라이언트를 통해서만 수행&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴포넌트&lt;span&gt; props/emit&lt;/span&gt;은&lt;span&gt; TypeScript &lt;/span&gt;타입으로 명시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## DB &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스키마 변경은 반드시&lt;span&gt; Flyway &lt;/span&gt;마이그레이션 파일로 작성&lt;span&gt; (JPA auto-ddl &lt;/span&gt;금지&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼명은&lt;span&gt; snake_case, JSON &lt;/span&gt;필드명은&lt;span&gt; camelCase (docs/API_SPEC.md &lt;/span&gt;참고&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;금지 사항&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- application.yml&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의&lt;span&gt; DB &lt;/span&gt;접속 정보를 임의로 변경하지 말 것&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- .env &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및&lt;span&gt; application-secret.yml &lt;/span&gt;내용을 출력하거나 수정하지 말 것&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;13.3 Memory Bank &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;패턴&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline &lt;/span&gt;&lt;span&gt;커뮤니티에서 널리 쓰이는 방식으로&lt;span&gt;, &lt;/span&gt;프로젝트의 맥락을 여러 마크다운 파일로 나누어 유지하며 세션이 바뀌어도 컨텍스트가 이어지도록 하는 패턴입니다&lt;span&gt;. &lt;/span&gt;로컬 모델처럼 컨텍스트 창이 상대적으로 짧은 환경에서는 이 패턴이 특히 유용합니다&lt;span&gt; (&lt;/span&gt;한 번에 모든 내용을 다 넣지 않고&lt;span&gt;, &lt;/span&gt;필요한 파일만 골라 참조시킬 수 있기 때문&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;project/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;`-- memory-bank/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- productContext.md&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 프로젝트가 왜 존재하는지&lt;span&gt;, &lt;/span&gt;무엇을 하는지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+-- activeContext.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금 작업 중인 내용&lt;span&gt;, &lt;/span&gt;최근 결정 사항&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;`-- progress.md&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완료된 작업&lt;span&gt;, &lt;/span&gt;남은 작업 목록&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;activeContext.md&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예시&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# Active Context&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 작업&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 완료 처리&lt;span&gt; API(`PATCH /api/todos/{id}/complete`) Backend &lt;/span&gt;구현 중&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 결정 사항&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완료된 할 일은 삭제하지 않고&lt;span&gt; completed &lt;/span&gt;플래그만 변경하기로 결정&lt;span&gt; (2026-07-05)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;재배정된 할 일도 완료 처리는 차단하지 않고 경고만 표시&lt;span&gt; (UC-6 E3 &lt;/span&gt;참고&lt;span&gt;, 2026-07-06)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- DB &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼은&lt;span&gt; snake_case, API JSON&lt;/span&gt;은&lt;span&gt; camelCase &amp;mdash; JPA @Column(name=...)&lt;/span&gt;으로 매핑&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 파일들은 작업이 진행되면서 사람 또는&lt;span&gt; Cline&lt;/span&gt;이 계속 업데이트합니다&lt;span&gt;. &lt;/span&gt;새로운 세션을 시작할 때&lt;span&gt; &quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;memory-bank/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;폴더를 먼저 읽고 시작해줘&lt;span&gt;&quot;&lt;/span&gt;라고 지시하면&lt;span&gt;, &lt;/span&gt;로컬 모델이 매번 전체 코드베이스를 처음부터 파악하지 않고도 맥락을 빠르게 회복할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;13.4 Plan &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;모드에서 설계 문서 참조시키기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;@&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기호로 특정 파일을 대화에 직접 첨부할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;@docs/ARCHITECTURE.md @docs/API_SPEC.md @docs/DATA_MODEL.md&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 설계를 기준으로&lt;span&gt; Spring Boot&lt;/span&gt;의&lt;span&gt; Todo &lt;/span&gt;엔티티&lt;span&gt;, &lt;/span&gt;리포지토리&lt;span&gt;, &lt;/span&gt;컨트롤러를 작성해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 명시적으로 문서를 첨부하면&lt;span&gt;, &lt;/span&gt;모델이 임의로 추측하는 대신 문서에 정의된 스펙을 그대로 따르도록 유도할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;13.5 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;짧은 컨텍스트 한계 고려한 문서 발췌 전략&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로컬 모델&lt;span&gt;(&lt;/span&gt;특히&lt;span&gt; 32K &lt;/span&gt;컨텍스트로 운영 중인&lt;span&gt; 30B&lt;/span&gt;급 모델&lt;span&gt;)&lt;/span&gt;은 모든 설계 문서를 매번 통째로 넣으면 컨텍스트를 금방 소진합니다&lt;span&gt;. &lt;/span&gt;다음 전략을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;작업 단위&lt;span&gt;(Task)&lt;/span&gt;별로 &lt;b&gt;관련된 문서만 선택적으로 첨부&lt;/b&gt;&lt;span&gt; (Backend API &lt;/span&gt;작업 시 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;API_SPEC.md&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;DATA_MODEL.md&lt;/span&gt;&lt;span&gt;만&lt;span&gt;, Frontend &lt;/span&gt;화면 작업 시 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;ARCHITECTURE.md&lt;/span&gt;&lt;span&gt;의 화면 설계 섹션만&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;설계 문서 자체를&lt;span&gt; too long&lt;/span&gt;하게 만들지 않기&lt;span&gt; &amp;mdash; &lt;/span&gt;섹션을 나누어 여러 개의 짧은 파일로 관리&lt;span&gt; (&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;API_SPEC.md&lt;/span&gt;&lt;span&gt;가 너무 길어지면 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;API_SPEC_AUTH.md&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;API_SPEC_TODO.md&lt;/span&gt;&lt;span&gt;로 분리&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;memory-bank/activeContext.md&lt;/span&gt;&lt;span&gt;처럼&lt;span&gt; &quot;&lt;/span&gt;지금 당장 필요한 요약&lt;span&gt;&quot;&lt;/span&gt;과&lt;span&gt; &quot;&lt;/span&gt;전체 설계 문서&lt;span&gt;&quot;&lt;/span&gt;를 분리해서&lt;span&gt;, &lt;/span&gt;평소에는 요약본만 참조하고 필요할 때만 전체 문서를 열어보기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;14&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;설계&lt;span&gt; &amp;rarr; &lt;/span&gt;구현&lt;span&gt; &amp;rarr; &lt;/span&gt;검증 루프&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;14.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설계 문서 기준&lt;span&gt; Task &lt;/span&gt;단위 쪼개기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설계 문서가 준비되었다면&lt;span&gt;, &lt;/span&gt;이를 한 번에 다 구현하도록 지시하기보다 &lt;b&gt;작은&lt;span&gt; Task &lt;/span&gt;단위&lt;/b&gt;로 쪼개어 순차적으로 진행하는 것이 안정적입니다&lt;span&gt;. 11.8&lt;/span&gt;절에서 정한&lt;span&gt; MVP(Must) &lt;/span&gt;범위부터 순서대로 진행합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## Task &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목록&lt;span&gt; (&lt;/span&gt;예시&lt;span&gt; - MVP &lt;/span&gt;범위&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Backend&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 1: Flyway &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이그레이션으로&lt;span&gt; users/todos/todo_tags &lt;/span&gt;테이블 생성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 2: User, Todo JPA &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔티티 및&lt;span&gt; Repository &lt;/span&gt;작성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 3: Spring Security + JWT &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 구현&lt;span&gt; (FR-1)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 4: POST /api/todos &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔드포인트 구현&lt;span&gt; (FR-2)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 5: GET /api/todos &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔드포인트 구현&lt;span&gt; (FR-3, FR-4 &lt;/span&gt;정렬 포함&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 6: PATCH /api/todos/{id}/complete &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔드포인트 구현&lt;span&gt; (FR-5)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;### Frontend&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 7: LoginView.vue + authStore &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구현&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 8: TodoListView.vue + todoStore &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구현&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 9: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 일 생성 폼 컴포넌트 구현&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- [ ] Task 10: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완료 처리 버튼 및&lt;span&gt; API &lt;/span&gt;연동&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Task&lt;/span&gt;&lt;span&gt;를 잘게 쪼갤수록 한 번의 요청에 필요한 컨텍스트가 줄어들어&lt;span&gt;, &lt;/span&gt;로컬 모델의 짧은 컨텍스트 한계에도 안정적으로 대응할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;14.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;구현 결과와 설계 일치 여부 검토&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각&lt;span&gt; Task&lt;/span&gt;가 끝날 때마다&lt;span&gt;, &lt;/span&gt;다음을 확인합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;생성&lt;span&gt;/&lt;/span&gt;수정된 코드가 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;API_SPEC.md&lt;/span&gt;&lt;span&gt;에 정의한 요청&lt;span&gt;/&lt;/span&gt;응답 형식과 일치하는가&lt;span&gt; (&lt;/span&gt;필드명&lt;span&gt; camelCase &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;.clinerules&lt;/span&gt;&lt;span&gt;에 정의한 컨벤션&lt;span&gt;(&lt;/span&gt;레이어 분리&lt;span&gt;, DTO/Entity &lt;/span&gt;분리 등&lt;span&gt;)&lt;/span&gt;을 지켰는가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;11.6&lt;/span&gt;&lt;span&gt;절에서 작성한 &lt;b&gt;인수 조건&lt;span&gt;(Acceptance Criteria)&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;을 모두 만족하는가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다른&lt;span&gt; Task&lt;/span&gt;에서 만든 코드&lt;span&gt;(Backend API &amp;harr; Frontend &lt;/span&gt;호출부&lt;span&gt;)&lt;/span&gt;와 인터페이스가 충돌하지 않는가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검토 프롬프트 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방금 만든&lt;span&gt; GET /api/todos &lt;/span&gt;응답을&lt;span&gt; docs/API_SPEC.md&lt;/span&gt;와 비교해서&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필드명&lt;span&gt;, &lt;/span&gt;타입&lt;span&gt;, &lt;/span&gt;정렬 파라미터가 스펙과 정확히 일치하는지 확인해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;14.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설계와 어긋난 구현 되돌리기&lt;span&gt; (&lt;/span&gt;문서 우선 원칙&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;만약&lt;span&gt; AI&lt;/span&gt;가 설계 문서와 다르게 구현했다면&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;응답 필드명이 스펙과 다름&lt;span&gt;), &lt;/span&gt;&lt;b&gt;코드를 문서에 맞춰 고치는 것을 기본 원칙&lt;/b&gt;으로 삼습니다&lt;span&gt;. &lt;/span&gt;예외적으로 구현 과정에서 설계 자체의 허점이 발견된 경우에만&lt;span&gt;, &lt;/span&gt;문서를 먼저 수정한 뒤 코드를 그에 맞춰 다시 조정합니다&lt;span&gt;. &lt;/span&gt;이 순서&lt;span&gt;(&lt;/span&gt;문서 수정&lt;span&gt; &amp;rarr; &lt;/span&gt;코드 반영&lt;span&gt;)&lt;/span&gt;를 지켜야 문서와 코드가 서로 어긋나는 것을 방지할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지시 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방금 만든 응답 형식이&lt;span&gt; docs/API_SPEC.md&lt;/span&gt;와 다르네&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스펙에는&lt;span&gt; &quot;dueDate&quot;&lt;/span&gt;인데 코드&lt;span&gt; DTO&lt;/span&gt;에는&lt;span&gt; &quot;due_date&quot;&lt;/span&gt;로 되어 있어&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스펙&lt;span&gt;(camelCase) &lt;/span&gt;기준으로&lt;span&gt; DTO&lt;/span&gt;를 수정해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;14.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;구현 중 설계 문서 업데이트&lt;span&gt; (&quot;&lt;/span&gt;살아있는 문서&lt;span&gt;&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설계 문서는 한 번 작성하고 끝나는 것이 아니라&lt;span&gt;, &lt;/span&gt;구현하면서 드러나는 세부사항을 반영해 계속 업데이트하는&lt;span&gt; &quot;&lt;/span&gt;살아있는 문서&lt;span&gt;(living document)&quot;&lt;/span&gt;로 관리해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지시 예시&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방금 재배정 기능을 구현하면서&lt;span&gt; &quot;&lt;/span&gt;완료된 할 일도 재배정은 허용하되 경고 표시&lt;span&gt;&quot;&lt;/span&gt;라는&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙을 코드로 확정했어&lt;span&gt;. &lt;/span&gt;이 내용을&lt;span&gt; docs/API_SPEC.md&lt;/span&gt;와&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;memory-bank/activeContext.md&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 반영해줘&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 문서를 계속 최신 상태로 유지하면&lt;span&gt;, &lt;/span&gt;다음 세션이나 다른 작업자가 프로젝트에 합류했을 때도&lt;span&gt;(&lt;/span&gt;혹은 컨텍스트가 리셋된 새 대화에서도&lt;span&gt;) &lt;/span&gt;프로젝트의 현재 상태를 빠르게 파악할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/17</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-4%EB%B6%80-%EB%B6%84%EC%84%9D%EC%84%A4%EA%B3%84%EC%99%80-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0#entry17comment</comments>
      <pubDate>Tue, 7 Jul 2026 17:07:07 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 3부. 설치 및 설정</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-3%EB%B6%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95-1</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;7&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. vLLM &lt;/span&gt;설치 및 서버 실행&lt;span&gt; &amp;mdash; 5090 &lt;/span&gt;환경 기준&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치 환경 준비&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;OS &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RTX 5090&lt;/span&gt;&lt;span&gt;은&lt;span&gt; Windows &lt;/span&gt;네이티브 환경에서&lt;span&gt; WDDM(Windows Display Driver Model) &lt;/span&gt;반가상화를 통한&lt;span&gt; GPU &lt;/span&gt;연산 시 복구 불가능한 행&lt;span&gt;(hang) &lt;/span&gt;현상이 보고된 알려진 이슈가 있습니다&lt;span&gt;. &lt;/span&gt;실제 커뮤니티 벤치마크도 대부분&lt;span&gt; WSL2 Ubuntu 24.04 &lt;/span&gt;환경에서 진행되고 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;rarr; WSL2(Ubuntu 24.04) &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;또는 네이티브&lt;span&gt; Linux(Ubuntu 22.04/24.04) &lt;/span&gt;사용을 강력히 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL2 &lt;/span&gt;&lt;span&gt;설치&lt;span&gt; (Windows &lt;/span&gt;사용자&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# PowerShell (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관리자 권한&lt;span&gt;)&lt;/span&gt;에서 실행&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d Ubuntu-24.04&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설치 후&lt;span&gt; WSL2 &lt;/span&gt;내에서&lt;span&gt; NVIDIA &lt;/span&gt;드라이버는&lt;span&gt; Windows &lt;/span&gt;호스트의 드라이버를 그대로 사용하므로&lt;span&gt;, WSL2 &lt;/span&gt;안에 별도로 그래픽 드라이버를 설치할 필요는 없습니다&lt;span&gt;. &lt;/span&gt;다만 최신&lt;span&gt; Windows&lt;/span&gt;용&lt;span&gt; NVIDIA &lt;/span&gt;드라이버&lt;span&gt;(Blackwell &lt;/span&gt;지원 버전&lt;span&gt;)&lt;/span&gt;가 설치되어 있어야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;드라이버 및&lt;span&gt; CUDA &lt;/span&gt;확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nvidia-smi --query-gpu=driver_version,name --format=csv&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;출력 상단에 표시되는&lt;span&gt; CUDA Version&lt;/span&gt;이 &lt;b&gt;&lt;span&gt;12.8 &lt;/span&gt;이상&lt;/b&gt;인지 확인하세요&lt;span&gt;. &lt;/span&gt;그 이하라면&lt;span&gt; NVIDIA &lt;/span&gt;드라이버를 최신 버전으로 업데이트해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Python &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;환경 준비&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo apt update&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo apt install -y python3.12 python3.12-venv python3-pip&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;python3.12 -m venv ~/vllm-env&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;source ~/vllm-env/bin/activate&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;vLLM + PyTorch(cu128) &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;pip install vllm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명령은 환경에 따라 구버전&lt;span&gt; CUDA(cu126 &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;가 딸린&lt;span&gt; PyTorch&lt;/span&gt;를 함께 설치할 수 있어&lt;span&gt;, RTX 5090&lt;/span&gt;에서 동작하지 않을 수 있습니다&lt;span&gt;. cu128&lt;/span&gt;을 명시적으로 지정합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install --upgrade pip&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install torch --index-url &lt;a href=&quot;https://download.pytorch.org/whl/cu128&quot;&gt;https://download.pytorch.org/whl/cu128&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install &quot;vllm&amp;gt;=0.17.0&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설치 직후&lt;span&gt; GPU &lt;/span&gt;인식 여부를 반드시 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;python3 -c &quot;import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;True&lt;/span&gt;&lt;span&gt;와 함께 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;NVIDIA GeForce RTX 5090&lt;/span&gt;&lt;span&gt;이 출력되어야 정상입니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120 is not compatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관련 오류가 나온다면&lt;span&gt; 6&lt;/span&gt;부&lt;span&gt; 23&lt;/span&gt;장의 트러블슈팅을 참고하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.2 Docker&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;로&lt;span&gt; vLLM &lt;/span&gt;실행&lt;span&gt; (&lt;/span&gt;권장 방식&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker run --gpus all \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ipc=host \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ulimit memlock=-1 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ulimit stack=67108864 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-v ~/.cache/huggingface:/root/.cache/huggingface \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-p 8000:8000 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;vllm/vllm-openai:latest \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--model Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--max-model-len 32768 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--gpu-memory-utilization 0.9 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--quantization awq \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--enable-auto-tool-choice \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--tool-call-parser hermes&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 태그는&lt;span&gt; Blackwell &lt;/span&gt;지원이 포함된 최신 버전인지 반드시 확인하세요&lt;span&gt;. &lt;/span&gt;이미지가 오래된 경우 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미인식 문제가 컨테이너 안에서도 동일하게 발생합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;모델 다운로드 및 서버 기동&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install huggingface_hub&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;huggingface-cli download Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vllm serve Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--max-model-len 32768 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--gpu-memory-utilization 0.9 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--quantization awq \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--enable-auto-tool-choice \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--tool-call-parser hermes \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--port 8000&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부&lt;span&gt; 6.1&lt;/span&gt;절에서 메인으로 추천한 &lt;b&gt;&lt;span&gt;Qwen3-Coder-30B-A3B-Instruct&lt;/span&gt;&lt;/b&gt;를 사용하려면&lt;span&gt;, &lt;/span&gt;위 명령의 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--model&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값을 해당 모델의&lt;span&gt; vLLM &lt;/span&gt;호환 체크포인트&lt;span&gt;(AWQ/FP8 &lt;/span&gt;등&lt;span&gt;) &lt;/span&gt;경로로 바꾸면 됩니다&lt;span&gt;. MoE &lt;/span&gt;모델이므로 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--quantization&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값도 실제 다운로드한 체크포인트의 양자화 방식에 맞춰 조정하세요&lt;span&gt;. &lt;/span&gt;명령어 구조와 나머지 옵션&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--enable-auto-tool-choice&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등&lt;span&gt;)&lt;/span&gt;은 동일하게 적용됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 옵션&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--model&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Hugging Face &lt;/span&gt;&lt;span&gt;모델 경로 또는 로컬 경로&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;최대 컨텍스트 길이&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--gpu-memory-utilization&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VRAM &lt;/span&gt;&lt;span&gt;사용 비율&lt;span&gt; (0~1, &lt;/span&gt;기본&lt;span&gt; 0.9 &lt;/span&gt;권장&lt;span&gt;, OOM &lt;/span&gt;시 낮추기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--quantization&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;양자화 방식&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;awq&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;gptq&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;fp8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--enable-auto-tool-choice&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;tool calling &lt;/span&gt;&lt;span&gt;자동 활성화&lt;span&gt; (Cline &lt;/span&gt;연동 필수&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;모델별&lt;span&gt; tool call &lt;/span&gt;파싱 형식&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;hermes&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;mistral&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서버 정상 기동 시 로그&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INFO: Started server process&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INFO: Uvicorn running on http://0.0.0.0:8000&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.4 OpenAI &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;호환&lt;span&gt; API &lt;/span&gt;엔드포인트 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;curl http://localhost:8000/v1/chat/completions \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-d '{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;model&quot;: &quot;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Python&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;으로&lt;span&gt; fibonacci &lt;/span&gt;함수 작성해줘&lt;span&gt;&quot;}]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}'&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;정상적으로&lt;span&gt; JSON &lt;/span&gt;응답&lt;span&gt;(&lt;/span&gt;코드 포함&lt;span&gt;)&lt;/span&gt;이 오면 서버 설정은 완료된 것입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.5 Tool calling &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 파일 수정&lt;span&gt;, &lt;/span&gt;명령 실행 등을&lt;span&gt; function calling(tool call) &lt;/span&gt;형식으로 모델에 요청합니다&lt;span&gt;. &lt;/span&gt;이 부분이 맞지 않으면&lt;span&gt; Cline&lt;/span&gt;의 핵심 동작&lt;span&gt;(&lt;/span&gt;파일 수정&lt;span&gt;, &lt;/span&gt;명령 실행&lt;span&gt;)&lt;/span&gt;이 실패합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;curl http://localhost:8000/v1/chat/completions \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-d '{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;model&quot;: &quot;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 디렉토리 파일 목록을 보여줘&lt;span&gt;&quot;}],&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;tools&quot;: [{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;type&quot;: &quot;function&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;function&quot;: {&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;name&quot;: &quot;list_files&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;description&quot;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디렉토리 내 파일 목록 반환&lt;span&gt;&quot;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;parameters&quot;: {&quot;type&quot;: &quot;object&quot;, &quot;properties&quot;: {&quot;path&quot;: {&quot;type&quot;: &quot;string&quot;}}}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}]&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}'&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;응답에 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;tool_calls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필드가 포함되어 있는지 확인하세요&lt;span&gt;. &lt;/span&gt;포함되어 있지 않다면 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이 사용 중인 모델과 맞지 않을 가능성이 큽니다&lt;span&gt;. &lt;/span&gt;모델의&lt;span&gt; Hugging Face &lt;/span&gt;카드에서 권장&lt;span&gt; tool-call-parser &lt;/span&gt;값을 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;8&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. IDE &lt;/span&gt;선택 및 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.1 VS Code + Cline &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;VS Code &amp;rarr; Extensions(&lt;/span&gt;&lt;span&gt;확장&lt;span&gt;) &amp;rarr; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Cline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색 후 설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 설치 후 사이드바&lt;span&gt; Cline &lt;/span&gt;아이콘 클릭&lt;span&gt; &amp;rarr; &lt;/span&gt;사이드 패널 오픈&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 최초 실행 시&lt;span&gt; API Provider &lt;/span&gt;설정 화면 표시&lt;span&gt; (9&lt;/span&gt;장에서 설정&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.2 IntelliJ + Cline &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; IntelliJ IDEA(&lt;/span&gt;&lt;span&gt;또는&lt;span&gt; WebStorm, PyCharm &lt;/span&gt;등&lt;span&gt;) &amp;rarr; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Settings/Preferences &amp;rarr; Plugins&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Marketplace &lt;/span&gt;&lt;span&gt;탭에서 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Cline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색 후 설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;IDE &lt;/span&gt;&lt;span&gt;재시작&lt;span&gt; &amp;rarr; &lt;/span&gt;툴 윈도우에&lt;span&gt; Cline &lt;/span&gt;패널 추가됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JetBrains &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계열&lt;span&gt; IDE&lt;/span&gt;는 동일한 플러그인 코어를 공유하므로 설치 방법은 어떤 제품이든 동일합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;두&lt;span&gt; IDE &lt;/span&gt;중 선택 기준&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;자바&lt;span&gt;/&lt;/span&gt;코틀린&lt;span&gt;/&lt;/span&gt;스프링 기반 백엔드&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;IntelliJ IDEA&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;웹 프론트엔드&lt;span&gt;(Vue.js), Node.js&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VS Code&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Python &lt;/span&gt;&lt;span&gt;위주 작업&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VS Code &lt;/span&gt;&lt;span&gt;또는&lt;span&gt; PyCharm&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;기존 워크플로우 유지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;기존&lt;span&gt; IDE &lt;/span&gt;유지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;의 핵심 기능은 두&lt;span&gt; IDE&lt;/span&gt;에서 동일하게 동작하므로&lt;span&gt;, &lt;/span&gt;평소 사용 언어&lt;span&gt;/&lt;/span&gt;프레임워크와의 궁합을 기준으로 선택하는 것이 합리적입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;9&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. Cline&lt;/span&gt;과&lt;span&gt; vLLM &lt;/span&gt;서버 연결하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.1 VS Code&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 연결 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;- Cline &lt;/span&gt;&lt;span&gt;패널&lt;span&gt; &amp;rarr; &lt;/span&gt;설정&lt;span&gt;(&lt;/span&gt;톱니바퀴&lt;span&gt;) &lt;/span&gt;클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;API Provider&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;OpenAI Compatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Base URL&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;http://localhost:8000/v1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; API Key&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;임의 문자열 입력&lt;span&gt; (&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;not-needed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Model ID&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: vLLM&lt;/span&gt;&lt;span&gt;에 로드한 모델명과 정확히 일치&lt;span&gt; (&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 저장 후 간단한 질문으로 연결 테스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.2 IntelliJ&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 연결 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Cline &lt;/span&gt;&lt;span&gt;툴 윈도우&lt;span&gt; &amp;rarr; &lt;/span&gt;설정 아이콘 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 동일하게 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;OpenAI Compatible&lt;/span&gt;&lt;span&gt; Provider &lt;/span&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Base URL, API Key, Model ID&lt;/span&gt;&lt;span&gt;는&lt;span&gt; VS Code&lt;/span&gt;와 동일 값 입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;설정&lt;span&gt; UI &lt;/span&gt;레이아웃만 다를 뿐 입력 항목은 동일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.3 API Key &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;처리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;vLLM&lt;/span&gt;&lt;span&gt;은 기본적으로&lt;span&gt; API &lt;/span&gt;키 검증을 하지 않지만&lt;span&gt;, Cline UI&lt;/span&gt;는 빈 값을 허용하지 않는 경우가 있어 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sk-dummy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등 임의 문자열을 입력하면 됩니다&lt;span&gt;. &lt;/span&gt;사내에서 인증 프록시를 붙였다면 실제 키를 입력해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;연결 테스트 및 흔한 오류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;연결&lt;span&gt; timeout&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Base URL &lt;/span&gt;&lt;span&gt;오타&lt;span&gt;, &lt;/span&gt;서버 미기동&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;curl http://localhost:8000/v1/models&lt;/span&gt;&lt;span&gt;로 직접 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&quot;Model not found&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Model ID &lt;/span&gt;&lt;span&gt;불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;curl .../v1/models&lt;/span&gt;&lt;span&gt;로 정확한 이름 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;파일 수정&lt;span&gt;/&lt;/span&gt;명령 실행 멈춤&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Tool calling &lt;/span&gt;&lt;span&gt;미지원&lt;span&gt;/&lt;/span&gt;파서 불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;7.5&lt;/span&gt;&lt;span&gt;절&lt;span&gt; curl &lt;/span&gt;테스트 재확인&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;점검&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;응답 중간에 끊김&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초과&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;.clineignore&lt;/span&gt;&lt;span&gt;로 불필요한 파일 제외&lt;span&gt; (5&lt;/span&gt;부&lt;span&gt; 20&lt;/span&gt;장&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/16</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-3%EB%B6%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95-1#entry16comment</comments>
      <pubDate>Tue, 7 Jul 2026 17:04:38 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 3부. 설치 및 설정</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-3%EB%B6%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;7&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. vLLM &lt;/span&gt;설치 및 서버 실행&lt;span&gt; &amp;mdash; 5090 &lt;/span&gt;환경 기준&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치 환경 준비&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;OS &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RTX 5090&lt;/span&gt;&lt;span&gt;은&lt;span&gt; Windows &lt;/span&gt;네이티브 환경에서&lt;span&gt; WDDM(Windows Display Driver Model) &lt;/span&gt;반가상화를 통한&lt;span&gt; GPU &lt;/span&gt;연산 시 복구 불가능한 행&lt;span&gt;(hang) &lt;/span&gt;현상이 보고된 알려진 이슈가 있습니다&lt;span&gt;. &lt;/span&gt;실제 커뮤니티 벤치마크도 대부분&lt;span&gt; WSL2 Ubuntu 24.04 &lt;/span&gt;환경에서 진행되고 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;rarr; WSL2(Ubuntu 24.04) &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;또는 네이티브&lt;span&gt; Linux(Ubuntu 22.04/24.04) &lt;/span&gt;사용을 강력히 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;WSL2 &lt;/span&gt;&lt;span&gt;설치&lt;span&gt; (Windows &lt;/span&gt;사용자&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# PowerShell (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관리자 권한&lt;span&gt;)&lt;/span&gt;에서 실행&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wsl --install -d Ubuntu-24.04&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설치 후&lt;span&gt; WSL2 &lt;/span&gt;내에서&lt;span&gt; NVIDIA &lt;/span&gt;드라이버는&lt;span&gt; Windows &lt;/span&gt;호스트의 드라이버를 그대로 사용하므로&lt;span&gt;, WSL2 &lt;/span&gt;안에 별도로 그래픽 드라이버를 설치할 필요는 없습니다&lt;span&gt;. &lt;/span&gt;다만 최신&lt;span&gt; Windows&lt;/span&gt;용&lt;span&gt; NVIDIA &lt;/span&gt;드라이버&lt;span&gt;(Blackwell &lt;/span&gt;지원 버전&lt;span&gt;)&lt;/span&gt;가 설치되어 있어야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;드라이버 및&lt;span&gt; CUDA &lt;/span&gt;확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nvidia-smi --query-gpu=driver_version,name --format=csv&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;출력 상단에 표시되는&lt;span&gt; CUDA Version&lt;/span&gt;이 &lt;b&gt;&lt;span&gt;12.8 &lt;/span&gt;이상&lt;/b&gt;인지 확인하세요&lt;span&gt;. &lt;/span&gt;그 이하라면&lt;span&gt; NVIDIA &lt;/span&gt;드라이버를 최신 버전으로 업데이트해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Python &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;환경 준비&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo apt update&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo apt install -y python3.12 python3.12-venv python3-pip&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;python3.12 -m venv ~/vllm-env&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;source ~/vllm-env/bin/activate&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;vLLM + PyTorch(cu128) &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;pip install vllm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명령은 환경에 따라 구버전&lt;span&gt; CUDA(cu126 &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;가 딸린&lt;span&gt; PyTorch&lt;/span&gt;를 함께 설치할 수 있어&lt;span&gt;, RTX 5090&lt;/span&gt;에서 동작하지 않을 수 있습니다&lt;span&gt;. cu128&lt;/span&gt;을 명시적으로 지정합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install --upgrade pip&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install torch --index-url &lt;a href=&quot;https://download.pytorch.org/whl/cu128&quot;&gt;https://download.pytorch.org/whl/cu128&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install &quot;vllm&amp;gt;=0.17.0&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설치 직후&lt;span&gt; GPU &lt;/span&gt;인식 여부를 반드시 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;python3 -c &quot;import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;True&lt;/span&gt;&lt;span&gt;와 함께 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;NVIDIA GeForce RTX 5090&lt;/span&gt;&lt;span&gt;이 출력되어야 정상입니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120 is not compatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관련 오류가 나온다면&lt;span&gt; 6&lt;/span&gt;부&lt;span&gt; 23&lt;/span&gt;장의 트러블슈팅을 참고하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.2 Docker&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;로&lt;span&gt; vLLM &lt;/span&gt;실행&lt;span&gt; (&lt;/span&gt;권장 방식&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker run --gpus all \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ipc=host \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ulimit memlock=-1 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--ulimit stack=67108864 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-v ~/.cache/huggingface:/root/.cache/huggingface \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-p 8000:8000 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;vllm/vllm-openai:latest \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--model Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--max-model-len 32768 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--gpu-memory-utilization 0.9 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--quantization awq \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--enable-auto-tool-choice \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--tool-call-parser hermes&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 태그는&lt;span&gt; Blackwell &lt;/span&gt;지원이 포함된 최신 버전인지 반드시 확인하세요&lt;span&gt;. &lt;/span&gt;이미지가 오래된 경우 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미인식 문제가 컨테이너 안에서도 동일하게 발생합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;모델 다운로드 및 서버 기동&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pip install huggingface_hub&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;huggingface-cli download Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vllm serve Qwen/Qwen2.5-Coder-32B-Instruct-AWQ \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--max-model-len 32768 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--gpu-memory-utilization 0.9 \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--quantization awq \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--enable-auto-tool-choice \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--tool-call-parser hermes \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;--port 8000&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부&lt;span&gt; 6.1&lt;/span&gt;절에서 메인으로 추천한 &lt;b&gt;&lt;span&gt;Qwen3-Coder-30B-A3B-Instruct&lt;/span&gt;&lt;/b&gt;를 사용하려면&lt;span&gt;, &lt;/span&gt;위 명령의 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--model&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값을 해당 모델의&lt;span&gt; vLLM &lt;/span&gt;호환 체크포인트&lt;span&gt;(AWQ/FP8 &lt;/span&gt;등&lt;span&gt;) &lt;/span&gt;경로로 바꾸면 됩니다&lt;span&gt;. MoE &lt;/span&gt;모델이므로 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--quantization&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값도 실제 다운로드한 체크포인트의 양자화 방식에 맞춰 조정하세요&lt;span&gt;. &lt;/span&gt;명령어 구조와 나머지 옵션&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--enable-auto-tool-choice&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등&lt;span&gt;)&lt;/span&gt;은 동일하게 적용됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 옵션&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--model&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Hugging Face &lt;/span&gt;&lt;span&gt;모델 경로 또는 로컬 경로&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;최대 컨텍스트 길이&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--gpu-memory-utilization&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VRAM &lt;/span&gt;&lt;span&gt;사용 비율&lt;span&gt; (0~1, &lt;/span&gt;기본&lt;span&gt; 0.9 &lt;/span&gt;권장&lt;span&gt;, OOM &lt;/span&gt;시 낮추기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--quantization&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;양자화 방식&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;awq&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;gptq&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;fp8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--enable-auto-tool-choice&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;tool calling &lt;/span&gt;&lt;span&gt;자동 활성화&lt;span&gt; (Cline &lt;/span&gt;연동 필수&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;모델별&lt;span&gt; tool call &lt;/span&gt;파싱 형식&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;hermes&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;mistral&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서버 정상 기동 시 로그&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INFO: Started server process&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INFO: Uvicorn running on http://0.0.0.0:8000&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.4 OpenAI &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;호환&lt;span&gt; API &lt;/span&gt;엔드포인트 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;curl http://localhost:8000/v1/chat/completions \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-d '{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;model&quot;: &quot;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Python&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;으로&lt;span&gt; fibonacci &lt;/span&gt;함수 작성해줘&lt;span&gt;&quot;}]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}'&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;정상적으로&lt;span&gt; JSON &lt;/span&gt;응답&lt;span&gt;(&lt;/span&gt;코드 포함&lt;span&gt;)&lt;/span&gt;이 오면 서버 설정은 완료된 것입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;7.5 Tool calling &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 파일 수정&lt;span&gt;, &lt;/span&gt;명령 실행 등을&lt;span&gt; function calling(tool call) &lt;/span&gt;형식으로 모델에 요청합니다&lt;span&gt;. &lt;/span&gt;이 부분이 맞지 않으면&lt;span&gt; Cline&lt;/span&gt;의 핵심 동작&lt;span&gt;(&lt;/span&gt;파일 수정&lt;span&gt;, &lt;/span&gt;명령 실행&lt;span&gt;)&lt;/span&gt;이 실패합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;curl http://localhost:8000/v1/chat/completions \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;-d '{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;model&quot;: &quot;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 디렉토리 파일 목록을 보여줘&lt;span&gt;&quot;}],&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;tools&quot;: [{&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;type&quot;: &quot;function&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;function&quot;: {&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;name&quot;: &quot;list_files&quot;,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;description&quot;: &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디렉토리 내 파일 목록 반환&lt;span&gt;&quot;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;parameters&quot;: {&quot;type&quot;: &quot;object&quot;, &quot;properties&quot;: {&quot;path&quot;: {&quot;type&quot;: &quot;string&quot;}}}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}]&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}'&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;응답에 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;tool_calls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필드가 포함되어 있는지 확인하세요&lt;span&gt;. &lt;/span&gt;포함되어 있지 않다면 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이 사용 중인 모델과 맞지 않을 가능성이 큽니다&lt;span&gt;. &lt;/span&gt;모델의&lt;span&gt; Hugging Face &lt;/span&gt;카드에서 권장&lt;span&gt; tool-call-parser &lt;/span&gt;값을 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;8&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. IDE &lt;/span&gt;선택 및 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.1 VS Code + Cline &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;VS Code &amp;rarr; Extensions(&lt;/span&gt;&lt;span&gt;확장&lt;span&gt;) &amp;rarr; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Cline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색 후 설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;설치 후 사이드바&lt;span&gt; Cline &lt;/span&gt;아이콘 클릭&lt;span&gt; &amp;rarr; &lt;/span&gt;사이드 패널 오픈&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;최초 실행 시&lt;span&gt; API Provider &lt;/span&gt;설정 화면 표시&lt;span&gt; (9&lt;/span&gt;장에서 설정&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.2 IntelliJ + Cline &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설치&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;IntelliJ IDEA(&lt;/span&gt;&lt;span&gt;또는&lt;span&gt; WebStorm, PyCharm &lt;/span&gt;등&lt;span&gt;) &amp;rarr; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Settings/Preferences &amp;rarr; Plugins&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Marketplace &lt;/span&gt;&lt;span&gt;탭에서 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Cline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색 후 설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;6.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;IDE &lt;/span&gt;&lt;span&gt;재시작&lt;span&gt; &amp;rarr; &lt;/span&gt;툴 윈도우에&lt;span&gt; Cline &lt;/span&gt;패널 추가됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JetBrains &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계열&lt;span&gt; IDE&lt;/span&gt;는 동일한 플러그인 코어를 공유하므로 설치 방법은 어떤 제품이든 동일합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;8.3 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;두&lt;span&gt; IDE &lt;/span&gt;중 선택 기준&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;자바&lt;span&gt;/&lt;/span&gt;코틀린&lt;span&gt;/&lt;/span&gt;스프링 기반 백엔드&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;IntelliJ IDEA&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;웹 프론트엔드&lt;span&gt;(Vue.js), Node.js&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VS Code&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;Python &lt;/span&gt;&lt;span&gt;위주 작업&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;VS Code &lt;/span&gt;&lt;span&gt;또는&lt;span&gt; PyCharm&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;기존 워크플로우 유지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;301&quot;&gt;&lt;span&gt;&lt;span&gt;기존&lt;span&gt; IDE &lt;/span&gt;유지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;의 핵심 기능은 두&lt;span&gt; IDE&lt;/span&gt;에서 동일하게 동작하므로&lt;span&gt;, &lt;/span&gt;평소 사용 언어&lt;span&gt;/&lt;/span&gt;프레임워크와의 궁합을 기준으로 선택하는 것이 합리적입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;9&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. Cline&lt;/span&gt;과&lt;span&gt; vLLM &lt;/span&gt;서버 연결하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.1 VS Code&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 연결 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;7.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Cline &lt;/span&gt;&lt;span&gt;패널&lt;span&gt; &amp;rarr; &lt;/span&gt;설정&lt;span&gt;(&lt;/span&gt;톱니바퀴&lt;span&gt;) &lt;/span&gt;클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;8.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;API Provider&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;OpenAI Compatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;9.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Base URL&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;http://localhost:8000/v1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;10.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;API Key&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;임의 문자열 입력&lt;span&gt; (&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;not-needed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;11.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Model ID&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: vLLM&lt;/span&gt;&lt;span&gt;에 로드한 모델명과 정확히 일치&lt;span&gt; (&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;Qwen/Qwen2.5-Coder-32B-Instruct-AWQ&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;12.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;저장 후 간단한 질문으로 연결 테스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.2 IntelliJ&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서 연결 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;13.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Cline &lt;/span&gt;&lt;span&gt;툴 윈도우&lt;span&gt; &amp;rarr; &lt;/span&gt;설정 아이콘 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;14.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;동일하게 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;OpenAI Compatible&lt;/span&gt;&lt;span&gt; Provider &lt;/span&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;15.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Base URL, API Key, Model ID&lt;/span&gt;&lt;span&gt;는&lt;span&gt; VS Code&lt;/span&gt;와 동일 값 입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;16.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;설정&lt;span&gt; UI &lt;/span&gt;레이아웃만 다를 뿐 입력 항목은 동일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.3 API Key &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;처리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;vLLM&lt;/span&gt;&lt;span&gt;은 기본적으로&lt;span&gt; API &lt;/span&gt;키 검증을 하지 않지만&lt;span&gt;, Cline UI&lt;/span&gt;는 빈 값을 허용하지 않는 경우가 있어 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sk-dummy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등 임의 문자열을 입력하면 됩니다&lt;span&gt;. &lt;/span&gt;사내에서 인증 프록시를 붙였다면 실제 키를 입력해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;9.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;연결 테스트 및 흔한 오류&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;연결&lt;span&gt; timeout&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Base URL &lt;/span&gt;&lt;span&gt;오타&lt;span&gt;, &lt;/span&gt;서버 미기동&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;curl http://localhost:8000/v1/models&lt;/span&gt;&lt;span&gt;로 직접 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&quot;Model not found&quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Model ID &lt;/span&gt;&lt;span&gt;불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;curl .../v1/models&lt;/span&gt;&lt;span&gt;로 정확한 이름 확인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;파일 수정&lt;span&gt;/&lt;/span&gt;명령 실행 멈춤&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Tool calling &lt;/span&gt;&lt;span&gt;미지원&lt;span&gt;/&lt;/span&gt;파서 불일치&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;7.5&lt;/span&gt;&lt;span&gt;절&lt;span&gt; curl &lt;/span&gt;테스트 재확인&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tool-call-parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;점검&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;응답 중간에 끊김&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;초과&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;.clineignore&lt;/span&gt;&lt;span&gt;로 불필요한 파일 제외&lt;span&gt; (5&lt;/span&gt;부&lt;span&gt; 20&lt;/span&gt;장&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/15</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-3%EB%B6%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95#entry15comment</comments>
      <pubDate>Tue, 7 Jul 2026 16:59:42 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 가이드 - 2부. 환경 준비</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-2%EB%B6%80-%ED%99%98%EA%B2%BD-%EC%A4%80%EB%B9%84</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;4&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;하드웨어 요구사항&lt;span&gt; &amp;mdash; RTX 5090 32GB &lt;/span&gt;기준&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;4.1 RTX 5090 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;스펙 요약&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RTX 5090&lt;/span&gt;&lt;span&gt;은&lt;span&gt; NVIDIA&lt;/span&gt;의&lt;span&gt; Blackwell &lt;/span&gt;아키텍처 기반 소비자용 최상위&lt;span&gt; GPU&lt;/span&gt;로&lt;span&gt;, &lt;/span&gt;다음과 같은 특징을 갖습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;VRAM&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 32GB GDDR7&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;아키텍처&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Blackwell (GB202 &lt;/span&gt;&lt;span&gt;다이&lt;span&gt;), CUDA Compute Capability &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;FP8 Tensor Core &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;지원&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Blackwell &lt;/span&gt;&lt;span&gt;세대부터&lt;span&gt; FP8 &lt;/span&gt;연산을 하드웨어 레벨에서 가속하는 전용&lt;span&gt; Tensor Core&lt;/span&gt;가 탑재되어 있어&lt;span&gt;, FP8 &lt;/span&gt;양자화 모델 구동 시 이점이 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;4.2 Blackwell &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;아키텍처 호환성 주의사항&lt;span&gt; [&lt;/span&gt;주의&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RTX 5090&lt;/span&gt;&lt;span&gt;은&lt;span&gt; 2025&lt;/span&gt;년 출시된 최신 아키텍처이기 때문에&lt;span&gt;, &lt;/span&gt;소프트웨어 생태계가 이를 따라잡는 데 다소 시간이 걸렸습니다&lt;span&gt;. &lt;/span&gt;이 가이드를 따라 하기 전에 반드시 아래 사항을 확인하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;CUDA &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;버전&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;최소 &lt;b&gt;&lt;span&gt;CUDA 12.8 &lt;/span&gt;이상&lt;/b&gt; 필요&lt;span&gt;. &lt;/span&gt;이보다 낮은 버전에서는 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커널을 인식하지 못해 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;CUDA error: no kernel image is available for execution on the device&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은 오류가 발생합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;vLLM &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;버전&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;최소 &lt;b&gt;&lt;span&gt;v0.17.0 &lt;/span&gt;이상&lt;/b&gt; 사용을 강력히 권장합니다&lt;span&gt;. &lt;/span&gt;이 버전부터&lt;span&gt; RTX 5090&lt;/span&gt;을 포함한&lt;span&gt; Blackwell &lt;/span&gt;소비자용&lt;span&gt; GPU&lt;/span&gt;에 대한 정식 지원과 전용&lt;span&gt; FP8 GEMM &lt;/span&gt;최적화가 포함되었습니다&lt;span&gt;. &lt;/span&gt;구버전&lt;span&gt; vLLM&lt;/span&gt;은&lt;span&gt; 5090 &lt;/span&gt;자체를 인식하지 못하거나 성능이 크게 떨어질 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;PyTorch &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;버전&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: PyTorch 2.9.0 + CUDA 12.8(cu128) &lt;/span&gt;&lt;span&gt;조합이 커뮤니티에서 안정적으로 검증된 조합입니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;cu126&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등 구버전&lt;span&gt; CUDA&lt;/span&gt;가 딸려오는 기본 설치 명령을 그대로 쓰면&lt;span&gt; 5090&lt;/span&gt;에서 동작하지 않으니 주의가 필요합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;OS &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;뒤에서 다시 설명하지만&lt;span&gt;, RTX 5090/RTX PRO 6000 &lt;/span&gt;계열은 &lt;b&gt;&lt;span&gt;Windows &lt;/span&gt;네이티브 환경에서&lt;span&gt; GPU &lt;/span&gt;연산 중 복구 불가능한 행&lt;span&gt;(hang) &lt;/span&gt;현상&lt;/b&gt;이 보고된 바 있습니다&lt;span&gt;(NVIDIA&lt;/span&gt;도 인지하고 있는 이슈&lt;span&gt;). &lt;b&gt;WSL2(Ubuntu) &lt;/b&gt;&lt;/span&gt;&lt;b&gt;또는 네이티브&lt;span&gt; Linux &lt;/span&gt;사용을 강력히 권장&lt;/b&gt;합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 영역은 하드웨어가 최신인 만큼 소프트웨어 호환성이 계속 개선되고 있는 영역입니다&lt;span&gt;. &lt;/span&gt;실제로 설치하기 전에&lt;span&gt; vLLM &lt;/span&gt;공식 릴리즈 노트에서 최신&lt;span&gt; Blackwell &lt;/span&gt;지원 현황을 한 번 더 확인하는 습관을 들이세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;4.3 32GB VRAM&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;으로 구동 가능한 모델 크기 가이드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;FP16 / BF16 (&lt;/span&gt;&lt;span&gt;양자화 없음&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;~14B &lt;/span&gt;&lt;span&gt;모델까지 여유롭게&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;컨텍스트 길이를 넉넉하게 확보 가능&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;FP8&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;~14B~20B&lt;/span&gt;&lt;span&gt;급&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;5090&lt;/span&gt;&lt;span&gt;의&lt;span&gt; FP8 Tensor Core &lt;/span&gt;활용&lt;span&gt;, BF16 &lt;/span&gt;대비 메모리 절반&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;AWQ / GPTQ 4bit&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;~32B~34B&lt;/span&gt;&lt;span&gt;급까지&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;컨텍스트 길이는 다소 제한&lt;span&gt; (16K~32K &lt;/span&gt;권장&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;AWQ 4bit + &lt;/span&gt;&lt;span&gt;짧은 컨텍스트&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;70B&lt;/span&gt;&lt;span&gt;급도 이론상 가능&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;실사용성은 떨어짐&lt;span&gt; (&lt;/span&gt;컨텍스트 매우 짧아짐&lt;span&gt;), &lt;/span&gt;비권장&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;바이브 코딩용으로는 &lt;b&gt;코드 컨텍스트&lt;span&gt;(&lt;/span&gt;여러 파일&lt;span&gt;, &lt;/span&gt;긴 대화 기록&lt;span&gt;)&lt;/span&gt;를 충분히 넣어야&lt;/b&gt; 실용적이므로&lt;span&gt;, &lt;/span&gt;단순히&lt;span&gt; &quot;&lt;/span&gt;모델이 로드되는가&lt;span&gt;&quot;&lt;/span&gt;보다&lt;span&gt; &quot;&lt;/span&gt;실사용 가능한 컨텍스트 길이가 확보되는가&lt;span&gt;&quot;&lt;/span&gt;를 기준으로 판단하는 것이 중요합니다&lt;span&gt;. &lt;/span&gt;이 부분은&lt;span&gt; 6&lt;/span&gt;장에서 구체적인 수치와 함께 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;4.4 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;단일&lt;span&gt; GPU &lt;/span&gt;구성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 가이드는&lt;span&gt; RTX 5090 1&lt;/span&gt;장 기준이므로&lt;span&gt;, &lt;/span&gt;여러&lt;span&gt; GPU&lt;/span&gt;에 모델을 분산시키는&lt;span&gt; Tensor Parallelism &lt;/span&gt;설정은 다루지 않습니다&lt;span&gt;. &lt;/span&gt;추후&lt;span&gt; GPU&lt;/span&gt;를 증설한다면&lt;span&gt; vLLM&lt;/span&gt;의 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--tensor-parallel-size&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;옵션을 통해 확장할 수 있다는 점만 참고로 알아두면 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;5&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;로컬&lt;span&gt; LLM &lt;/span&gt;서빙 도구로&lt;span&gt; vLLM &lt;/span&gt;선택하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;5.1 vLLM&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;이란 무엇인가&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;vLLM&lt;/span&gt;&lt;span&gt;은&lt;span&gt; UC &lt;/span&gt;버클리에서 시작된 오픈소스&lt;span&gt; LLM &lt;/span&gt;추론 서빙 엔진으로&lt;span&gt;, &lt;/span&gt;다음 두 가지 핵심 기술로 유명합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;PagedAttention&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: GPU &lt;/span&gt;&lt;span&gt;메모리&lt;span&gt;(&lt;/span&gt;특히&lt;span&gt; KV &lt;/span&gt;캐시&lt;span&gt;)&lt;/span&gt;를 운영체제의 가상 메모리 페이징과 유사한 방식으로 관리해&lt;span&gt;, &lt;/span&gt;메모리 낭비를 최소화하고 동시에 더 많은 요청을 처리할 수 있게 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;연속 배치&lt;span&gt;(Continuous Batching)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;여러 요청이 들어올 때 이를 효율적으로 묶어 처리량&lt;span&gt;(throughput)&lt;/span&gt;을 극대화합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한&lt;span&gt; vLLM&lt;/span&gt;은 &lt;b&gt;&lt;span&gt;OpenAI &lt;/span&gt;호환&lt;span&gt; API &lt;/span&gt;서버&lt;/b&gt;를 기본 제공하기 때문에&lt;span&gt;, OpenAI API &lt;/span&gt;형식을 사용하는 대부분의 클라이언트&lt;span&gt;(Cline &lt;/span&gt;포함&lt;span&gt;)&lt;/span&gt;와 별도 어댑터 없이 바로 연결할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;5.2 Ollama / LM Studio &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;대비&lt;span&gt; vLLM&lt;/span&gt;의 장단점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;목적&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;개인 데스크톱 사용에 최적화&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;서버&lt;span&gt;/&lt;/span&gt;프로덕션급 추론에 최적화&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;설치 난이도&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;매우 쉬움&lt;span&gt; (&lt;/span&gt;원클릭 수준&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;상대적으로 복잡&lt;span&gt; (CUDA/&lt;/span&gt;드라이버 버전 관리 필요&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;동시 요청 처리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;제한적&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;우수&lt;span&gt; (&lt;/span&gt;연속 배치로 다중 요청 효율적 처리&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;응답 지연시간&lt;span&gt;(&lt;/span&gt;단일 요청&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;준수함&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;우수함&lt;span&gt;, &lt;/span&gt;특히 첫 토큰 응답 시간&lt;span&gt;(TTFT)&lt;/span&gt;에서 강점&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;Tool calling &lt;/span&gt;&lt;span&gt;안정성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;모델&lt;span&gt;/&lt;/span&gt;버전에 따라 다름&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;파서를 명시적으로 지정 가능&lt;span&gt;, &lt;/span&gt;상대적으로 안정적&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;GPU &lt;/span&gt;&lt;span&gt;활용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;자동 오프로딩 등 편의 기능 多&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;수동 튜닝 필요하나 최대 성능 추출 가능&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실측 벤치마크에 따르면&lt;span&gt;, &lt;/span&gt;동일&lt;span&gt; Blackwell GPU(RTX PRO 6000)&lt;/span&gt;에서&lt;span&gt; vLLM&lt;/span&gt;은&lt;span&gt; Ollama &lt;/span&gt;대비 첫 토큰 응답 시간&lt;span&gt;(TTFT)&lt;/span&gt;이 약&lt;span&gt; 3.9&lt;/span&gt;배 빠르고&lt;span&gt;, &lt;/span&gt;프리필&lt;span&gt;(prefill) &lt;/span&gt;처리 속도는&lt;span&gt; 3.4&lt;/span&gt;배&lt;span&gt;, &lt;/span&gt;동시 처리량은&lt;span&gt; 2.8&lt;/span&gt;배 높은 것으로 나타났습니다&lt;span&gt;. &lt;/span&gt;다만 이 비교는 에이전트&lt;span&gt;/&lt;/span&gt;다중 요청 워크로드 기준이며&lt;span&gt;, &lt;/span&gt;단순&lt;span&gt; 1:1 &lt;/span&gt;채팅 용도라면&lt;span&gt; Ollama&lt;/span&gt;도 충분히 쓸만합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;5.3 Cline &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;워크플로우에서&lt;span&gt; vLLM&lt;/span&gt;이 적합한 이유&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은 에이전트 방식으로 동작하면서 다음과 같은 특성을 보입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;하나의 작업 안에서도 파일 읽기&lt;span&gt; &amp;rarr; &lt;/span&gt;코드 생성&lt;span&gt; &amp;rarr; &lt;/span&gt;명령 실행 결과 확인&lt;span&gt; &amp;rarr; &lt;/span&gt;재생성 등 &lt;b&gt;여러 번의 짧은 요청이 연속으로 발생&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;시스템 프롬프트&lt;span&gt; + &lt;/span&gt;여러 파일 내용&lt;span&gt; + &lt;/span&gt;대화 기록이 누적되어 &lt;b&gt;프리필 단계 처리량이 중요&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Tool calling(&lt;/span&gt;&lt;span&gt;함수 호출&lt;span&gt;) &lt;/span&gt;형식의 정확도가 떨어지면&lt;span&gt; Cline&lt;/span&gt;이 파일 수정&lt;span&gt;/&lt;/span&gt;명령 실행 자체를 실패&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이런 특성 때문에 프리필 속도와&lt;span&gt; tool calling &lt;/span&gt;안정성이 중요한&lt;span&gt; Cline &lt;/span&gt;환경에서는&lt;span&gt; vLLM&lt;/span&gt;의 구조적 장점이 실질적인 체감 성능 차이로 이어집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;5.4 5090&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;에서&lt;span&gt; vLLM &lt;/span&gt;사용 시 알려진 이슈&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;초기&lt;span&gt; vLLM &lt;/span&gt;버전에서는&lt;span&gt; RTX 5090&lt;/span&gt;이 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;sm_120&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아키텍처를 인식하지 못해 설치 자체가 실패하는 사례가 많았습니다&lt;span&gt;. &lt;/span&gt;&lt;b&gt;반드시&lt;span&gt; vLLM 0.17.0 &lt;/span&gt;이상&lt;/b&gt;을 사용하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;최신 모델&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;: &lt;/span&gt;특정&lt;span&gt; GLM &lt;/span&gt;계열 모델&lt;span&gt;) &lt;/span&gt;중에는 커스텀 빌드로도&lt;span&gt; RTX 5090&lt;/span&gt;에서 호환이 안 되는 사례가 여전히 보고되고 있습니다&lt;span&gt;. &lt;/span&gt;사용하려는 모델이 있다면&lt;span&gt; vLLM GitHub &lt;/span&gt;이슈나 포럼에서&lt;span&gt; 5090/Blackwell &lt;/span&gt;관련 이슈를 미리 검색해보는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows &lt;/span&gt;&lt;span&gt;네이티브 환경에서&lt;span&gt; RTX 5090/RTX PRO 6000 &lt;/span&gt;계열이&lt;span&gt; GPU &lt;/span&gt;연산 중 멈추는&lt;span&gt;(hang) &lt;/span&gt;현상이 보고되어 있습니다&lt;span&gt;. &lt;b&gt;WSL2 &lt;/b&gt;&lt;/span&gt;&lt;b&gt;또는&lt;span&gt; Linux &lt;/span&gt;네이티브 사용을 권장&lt;/b&gt;합니다&lt;span&gt; (7&lt;/span&gt;장에서 상세히 다룸&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;6&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;모델 선택 가이드&lt;span&gt; &amp;mdash; 32GB VRAM &lt;/span&gt;최적화&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;6.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;추천 모델 라인업&lt;span&gt; (&lt;/span&gt;최신 업데이트&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;바이브 코딩&lt;span&gt;(&lt;/span&gt;특히&lt;span&gt; Cline&lt;/span&gt;과 같은 에이전틱 워크플로우&lt;span&gt;)&lt;/span&gt;에는 &lt;b&gt;코딩 특화&lt;span&gt; + tool calling(&lt;/span&gt;함수 호출&lt;span&gt;)&lt;/span&gt;을 잘 지원하는 모델&lt;/b&gt;이 적합합니다&lt;span&gt;. 2026&lt;/span&gt;년 상반기 기준 오픈소스 코딩 모델 생태계는 몇 달 사이 매우 빠르게 발전했고&lt;span&gt;, RTX 5090 32GB &lt;/span&gt;단일&lt;span&gt; GPU &lt;/span&gt;환경에는 다음 라인업을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;Qwen3-Coder-30B-A3B-Instruct&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;30B (MoE, &lt;/span&gt;&lt;span&gt;활성&lt;span&gt; 3B)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;FP8 / AWQ 4bit&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;메인 추천&lt;/span&gt;&lt;/b&gt;&lt;span&gt;. MoE &lt;/span&gt;&lt;span&gt;구조로&lt;span&gt; 30B&lt;/span&gt;급 품질을&lt;span&gt; 3B&lt;/span&gt;급 속도로 제공&lt;span&gt;, 256K(&lt;/span&gt;최대&lt;span&gt; 1M) &lt;/span&gt;컨텍스트&lt;span&gt;, Apache 2.0 &lt;/span&gt;라이선스&lt;span&gt;. RTX 5090 32GB&lt;/span&gt;에 가장 이상적인 조합으로 평가받음&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;Qwen2.5-Coder-32B-Instruct&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;32B (Dense)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;AWQ 4bit&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;검증된 안정적 대안&lt;span&gt;. Qwen3-Coder &lt;/span&gt;계열 이슈 발생 시 폴백용으로 적합&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;GLM-4.7-Flash&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;경량급&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;BF16 / AWQ&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;150&quot;&gt;&lt;span&gt;&lt;span&gt;16~32GB&lt;/span&gt;&lt;span&gt;급&lt;span&gt; GPU&lt;/span&gt;에 최적화된 가벼운 대안&lt;span&gt;, &lt;/span&gt;리소스가 더 타이트한 환경에 적합&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Qwen3-Coder-30B-A3B&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;를 메인으로 추천하는 이유&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;MoE(Mixture of Experts) &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;구조&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;전체 파라미터는&lt;span&gt; 30B&lt;/span&gt;이지만 토큰당 실제 활성화되는 파라미터는 약&lt;span&gt; 3B &lt;/span&gt;수준이라&lt;span&gt;, &lt;/span&gt;동급&lt;span&gt; Dense &lt;/span&gt;모델보다 추론 속도가 훨씬 빠릅니다&lt;span&gt;. RTX 5090 32GB VRAM&lt;/span&gt;에서&lt;span&gt; GPU &lt;/span&gt;호환성 평가&lt;span&gt; 100/100&lt;/span&gt;을 받은 조합입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;긴 컨텍스트&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;기본&lt;span&gt; 256K, YaRN &lt;/span&gt;확장으로 최대&lt;span&gt; 1M &lt;/span&gt;토큰까지 지원&lt;span&gt; &amp;mdash; 4&lt;/span&gt;부에서 다루는 여러 설계 문서&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;docs/&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;memory-bank/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;를 한 번에 첨부해도 여유가 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Apache 2.0 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;라이선스&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;상업적 사용 제약이 적습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Tool calling &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;안정성&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;커뮤니티 차원에서&lt;span&gt; tool-calling &lt;/span&gt;관련 이슈가 수정된 이력이 있어&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;: Unsloth &lt;/span&gt;배포판&lt;span&gt;), Cline&lt;/span&gt;과 같은 에이전트 워크플로우에서 안정적으로 동작합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주의&lt;span&gt;] &lt;/span&gt;&lt;b&gt;주의&lt;/b&gt;&lt;span&gt;: Qwen3-Coder-30B-A3B&lt;/span&gt;는&lt;span&gt; MoE &lt;/span&gt;구조라&lt;span&gt; vLLM&lt;/span&gt;에서 서빙 시&lt;span&gt; AWQ/FP8 &lt;/span&gt;등&lt;span&gt; vLLM &lt;/span&gt;호환 양자화 체크포인트가&lt;span&gt; Hugging Face&lt;/span&gt;에 등록되어 있는지 먼저 확인해야 합니다&lt;span&gt;. &lt;/span&gt;순수&lt;span&gt; BF16 &lt;/span&gt;체크포인트만 있다면&lt;span&gt; 30B &lt;/span&gt;전체 파라미터 기준&lt;span&gt; VRAM &lt;/span&gt;요구량이&lt;span&gt; 32GB&lt;/span&gt;를 초과할 수 있으므로&lt;span&gt;, &lt;/span&gt;이 경우&lt;span&gt; FP8(&lt;/span&gt;온라인 양자화&lt;span&gt;) &lt;/span&gt;또는 커뮤니티&lt;span&gt; AWQ &lt;/span&gt;빌드를 사용하거나&lt;span&gt;, &lt;/span&gt;대안으로 검증된&lt;span&gt; Dense &lt;/span&gt;모델인&lt;span&gt; Qwen2.5-Coder-32B-AWQ&lt;/span&gt;를 사용하세요&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오픈소스 코딩 모델 순위는 몇 달 단위로 바뀌는 영역입니다&lt;span&gt;(&lt;/span&gt;이 시점 기준&lt;span&gt; GLM-5 &lt;/span&gt;계열&lt;span&gt;, DeepSeek V4, Kimi K2 &lt;/span&gt;계열도 최상위권이지만 대부분&lt;span&gt; 100B~1T&lt;/span&gt;급으로 단일&lt;span&gt; RTX 5090&lt;/span&gt;에는 맞지 않습니다&lt;span&gt;). &lt;/span&gt;실제 설치 전&lt;span&gt; Hugging Face &lt;/span&gt;모델 카드와 최신 코딩 리더보드를 한 번 더 확인하는 것을 권장합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;6.2 vLLM &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;지원 양자화 포맷&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;AWQ (Activation-aware Weight Quantization)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;가중치를&lt;span&gt; 4bit&lt;/span&gt;로 양자화하되&lt;span&gt;, &lt;/span&gt;활성화 값에 민감한 가중치는 정밀도를 보존&lt;span&gt;. &lt;/span&gt;코딩 모델에서 품질 손실이 비교적 적어 널리 쓰임&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;GPTQ&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: AWQ&lt;/span&gt;&lt;span&gt;와 유사한 목적의 다른 양자화 기법&lt;span&gt;. &lt;/span&gt;모델별로&lt;span&gt; AWQ/GPTQ &lt;/span&gt;지원 여부가 다르니&lt;span&gt; Hugging Face &lt;/span&gt;모델 카드를 확인&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;FP8&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: RTX 5090&lt;/span&gt;&lt;span&gt;의 전용&lt;span&gt; FP8 Tensor Core&lt;/span&gt;를 활용해&lt;span&gt; BF16 &lt;/span&gt;대비 메모리를 절반으로 줄이면서 속도 이점을 얻을 수 있음&lt;span&gt;. vLLM 0.17.0 &lt;/span&gt;이상에서&lt;span&gt; Blackwell &lt;/span&gt;전용 최적화가 적용됨&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;BitsAndBytes&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;온더플라이 양자화 지원하나&lt;span&gt;, vLLM&lt;/span&gt;에서는&lt;span&gt; AWQ/GPTQ/FP8 &lt;/span&gt;대비 처리량이 낮은 편&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;6.3 `--max-model-len` &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;설정과&lt;span&gt; VRAM &lt;/span&gt;트레이드오프&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;vLLM &lt;/span&gt;&lt;span&gt;서버 실행 시 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--max-model-len&lt;/span&gt;&lt;span&gt;으로 최대 컨텍스트 길이를 지정합니다&lt;span&gt;. &lt;/span&gt;이 값이 클수록&lt;span&gt; KV &lt;/span&gt;캐시가 차지하는&lt;span&gt; VRAM&lt;/span&gt;이 늘어나므로&lt;span&gt;, &lt;/span&gt;모델 가중치 크기와 컨텍스트 길이 사이에서 트레이드오프가 발생합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예시&lt;span&gt; (Qwen2.5-Coder-32B-Instruct-AWQ, 32GB VRAM &lt;/span&gt;기준 대략적인 가이드&lt;span&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;16,384&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;넉넉함&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;짧은 파일 단위 작업에는 충분&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;32,768&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;적당함&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;바이브 코딩 기본 권장값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;65,536&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;타이트함&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;동시 요청 수를 줄여야 안정적&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #f2f6fc;&quot;&gt;
&lt;p style=&quot;background-color: #f2f6fc;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정확한 수치는 모델&lt;span&gt;, vLLM &lt;/span&gt;버전&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;gpu-memory-utilization&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정에 따라 달라지므로 반드시 실제 환경에서 서버를 기동해보고 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로&lt;span&gt; VRAM &lt;/span&gt;사용량을 확인하며 조정해야 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;6.4 KV Cache &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;메모리 계산법 간단 소개&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;KV &lt;/span&gt;&lt;span&gt;캐시 메모리 사용량은 대략 다음 요소에 비례합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f5f5f5;&quot; width=&quot;602&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KV &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;캐시 크기&lt;span&gt; &amp;prop; (&lt;/span&gt;레이어 수&lt;span&gt;) &amp;times; (&lt;/span&gt;헤드 수&lt;span&gt;) &amp;times; (&lt;/span&gt;헤드 차원&lt;span&gt;) &amp;times; (&lt;/span&gt;컨텍스트 길이&lt;span&gt;) &amp;times; (&lt;/span&gt;동시 요청 수&lt;span&gt;) &amp;times; (bytes per value)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;직접 계산하기보다는&lt;span&gt;, vLLM&lt;/span&gt;이 서버 기동 시 로그에 출력하는&lt;span&gt; &quot;&lt;/span&gt;사용 가능한&lt;span&gt; KV &lt;/span&gt;캐시 블록 수&lt;span&gt;&quot;&lt;/span&gt;와 &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;--gpu-memory-utilization&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값을 참고해 실험적으로 조정하는 것이 실용적입니다&lt;span&gt;. &lt;/span&gt;이 내용은&lt;span&gt; 6&lt;/span&gt;부&lt;span&gt; 21&lt;/span&gt;장&lt;span&gt;(&lt;/span&gt;성능 튜닝&lt;span&gt;)&lt;/span&gt;에서 다시 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/14</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EA%B0%80%EC%9D%B4%EB%93%9C-2%EB%B6%80-%ED%99%98%EA%B2%BD-%EC%A4%80%EB%B9%84#entry14comment</comments>
      <pubDate>Tue, 7 Jul 2026 16:57:23 +0900</pubDate>
    </item>
    <item>
      <title>로컬 LLM + Cline 바이브 코딩 - 1부. 개념 이해하기</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-1%EB%B6%80-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;바이브 코딩이란 무엇인가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;1.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;정의와 배경&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;바이브 코딩&lt;span&gt;(Vibe Coding)&quot;&lt;/span&gt;은 개발자가 코드를 한 줄 한 줄 직접 타이핑하는 대신&lt;span&gt;, &lt;/span&gt;자신이 원하는 결과물&lt;span&gt;(&lt;/span&gt;의도&lt;span&gt;, &quot;vibe&quot;)&lt;/span&gt;을 자연어로&lt;span&gt; AI&lt;/span&gt;에게 전달하고&lt;span&gt;, AI&lt;/span&gt;가 실제 코드 작성&lt;span&gt;&amp;middot;&lt;/span&gt;수정&lt;span&gt;&amp;middot;&lt;/span&gt;실행을 담당하는 개발 방식을 말합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 용어는&lt;span&gt; 2025&lt;/span&gt;년 초&lt;span&gt; AI &lt;/span&gt;코딩 어시스턴트가 단순 자동완성 수준을 넘어 파일 시스템을 직접 조작하고&lt;span&gt;, &lt;/span&gt;터미널 명령을 실행하고&lt;span&gt;, &lt;/span&gt;에러를 스스로 읽고 수정하는&lt;span&gt; &quot;&lt;/span&gt;에이전틱&lt;span&gt;(agentic)&quot; &lt;/span&gt;능력을 갖추면서 널리 퍼졌습니다&lt;span&gt;. &lt;/span&gt;개발자는 더 이상 문법이나&lt;span&gt; API &lt;/span&gt;시그니처를 일일이 기억할 필요 없이&lt;span&gt;, &quot;&lt;/span&gt;이런 기능이 필요해&lt;span&gt;&quot;, &quot;&lt;/span&gt;이 버그를 고쳐줘&lt;span&gt;&quot; &lt;/span&gt;같은 지시만으로 실질적인 결과물을 만들어낼 수 있게 되었습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;핵심은 &lt;b&gt;개발자의 역할이&lt;span&gt; &quot;&lt;/span&gt;코드 작성자&lt;span&gt;&quot;&lt;/span&gt;에서&lt;span&gt; &quot;&lt;/span&gt;의도 전달자 겸 검토자&lt;span&gt;&quot;&lt;/span&gt;로 이동&lt;/b&gt;한다는 점입니다&lt;span&gt;. &lt;/span&gt;코드를 직접 치는 시간은 줄지만&lt;span&gt;, &lt;/span&gt;대신 다음과 같은 역량이 더 중요해집니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;무엇을 만들고 싶은지 명확하게 표현하는 능력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt;가 만든 결과물이 의도와 맞는지 검토하는 능력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt;가 막히거나 잘못된 방향으로 갈 때 방향을 재설정하는 능력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;1.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;기존 코딩 방식과의 차이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;602&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #2f5496;&quot; width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;코드 작성 주체&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;개발자 본인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;AI (&lt;/span&gt;&lt;span&gt;개발자는 지시&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;개발자의 주 업무&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;타이핑&lt;span&gt;, &lt;/span&gt;문법&lt;span&gt;/API &lt;/span&gt;암기&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;의도 전달&lt;span&gt;, &lt;/span&gt;검토&lt;span&gt;, &lt;/span&gt;방향 설정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;속도 결정 요인&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;타이핑 속도&lt;span&gt;, &lt;/span&gt;숙련도&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;프롬프트 품질&lt;span&gt;, AI &lt;/span&gt;응답 속도&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;실수 발견 시점&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;컴파일&lt;span&gt;/&lt;/span&gt;실행 시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;AI &lt;/span&gt;&lt;span&gt;응답 검토 시&lt;span&gt; + &lt;/span&gt;실행 시&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;요구되는 스킬&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;문법&lt;span&gt;, &lt;/span&gt;알고리즘&lt;span&gt;, &lt;/span&gt;라이브러리 지식&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;201&quot;&gt;&lt;span&gt;&lt;span&gt;요구사항 정의력&lt;span&gt;, &lt;/span&gt;설계 감각&lt;span&gt;, &lt;/span&gt;코드 리딩 능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;바이브 코딩이라고 해서 개발 지식이 필요 없어지는 것은 절대 아닙니다&lt;span&gt;. &lt;/span&gt;오히려 &lt;b&gt;&lt;span&gt;AI&lt;/span&gt;가 만든 코드를 읽고 판단할 수 있는 능력&lt;/b&gt;은 그대로&lt;span&gt;, &lt;/span&gt;혹은 더 중요해집니다&lt;span&gt;. AI&lt;/span&gt;에게 맡기는 것은&lt;span&gt; &quot;&lt;/span&gt;타이핑&lt;span&gt;&quot;&lt;/span&gt;이지&lt;span&gt; &quot;&lt;/span&gt;판단&lt;span&gt;&quot;&lt;/span&gt;이 아니기 때문입니다&lt;span&gt;. &lt;/span&gt;이 가이드의&lt;span&gt; 4&lt;/span&gt;부&lt;span&gt;(&lt;/span&gt;분석&lt;span&gt;/&lt;/span&gt;설계&lt;span&gt;)&lt;/span&gt;에서 이 부분을 자세히 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;2&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. Cline&lt;/span&gt;이란 무엇인가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;2.1 VS Code/JetBrains &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;확장으로서의&lt;span&gt; Cline&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Cline&lt;/span&gt;&lt;span&gt;은&lt;span&gt; VS Code&lt;/span&gt;와&lt;span&gt; JetBrains &lt;/span&gt;계열&lt;span&gt; IDE(IntelliJ IDEA, WebStorm, PyCharm &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;에서 동작하는 오픈소스&lt;span&gt; AI &lt;/span&gt;코딩 에이전트 확장&lt;span&gt;(&lt;/span&gt;플러그인&lt;span&gt;)&lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;단순히 코드 제안을 보여주는&lt;span&gt; Copilot&lt;/span&gt;류 도구와 달리&lt;span&gt;, Cline&lt;/span&gt;은 다음과 같은 &lt;b&gt;실행 권한&lt;/b&gt;을 가진 에이전트로 동작합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로젝트 내 파일을 직접 읽고&lt;span&gt;, &lt;/span&gt;생성하고&lt;span&gt;, &lt;/span&gt;수정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;터미널 명령을 직접 실행&lt;span&gt; (&lt;/span&gt;빌드&lt;span&gt;, &lt;/span&gt;테스트&lt;span&gt;, &lt;/span&gt;패키지 설치 등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;브라우저를 열어 웹 페이지 결과를 스크린샷으로 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;MCP(Model Context Protocol) &lt;/span&gt;&lt;span&gt;서버를 통한 외부 도구 연동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 모든 동작은 &lt;b&gt;사람의 승인&lt;span&gt;(approve) &lt;/span&gt;없이는 실행되지 않도록&lt;/b&gt; 설계되어 있어&lt;span&gt;(&lt;/span&gt;설정에 따라 자동 승인도 가능&lt;span&gt;), AI&lt;/span&gt;가 프로젝트를 망가뜨릴 위험을 통제하면서도 실질적인 작업 위임이 가능합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;2.2 Cline&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;의 핵심 기능&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;파일 읽기&lt;span&gt;/&lt;/span&gt;쓰기&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;프로젝트 구조를 스스로 탐색하고&lt;span&gt;, &lt;/span&gt;필요한 파일을 열어보고&lt;span&gt;, &lt;/span&gt;새 파일을 만들거나 기존 파일을&lt;span&gt; diff &lt;/span&gt;형태로 수정 제안합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;터미널 실행&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;npm install&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;pytest&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #000000;&quot;&gt;git commit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은 명령을 직접 실행하고 그 결과&lt;span&gt;(&lt;/span&gt;출력&lt;span&gt;, &lt;/span&gt;에러&lt;span&gt;)&lt;/span&gt;를 읽어 다음 행동을 결정합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;브라우저 제어&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;웹 애플리케이션을 개발할 때 실제로 페이지를 열어 렌더링 결과를 확인하고&lt;span&gt;, &lt;/span&gt;콘솔 에러를 읽습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Plan/Act &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;모드&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;실행 전에 계획을 세우고 사용자와 상의하는 모드&lt;span&gt;(Plan)&lt;/span&gt;와&lt;span&gt;, &lt;/span&gt;실제로 파일을 수정&lt;span&gt;/&lt;/span&gt;명령을 실행하는 모드&lt;span&gt;(Act)&lt;/span&gt;를 분리해 제공합니다&lt;span&gt;. (5&lt;/span&gt;부&lt;span&gt; 16&lt;/span&gt;장에서 상세히 다룸&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;MCP &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;연동&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;외부&lt;span&gt; API, &lt;/span&gt;데이터베이스&lt;span&gt;, &lt;/span&gt;사내 도구 등을&lt;span&gt; MCP &lt;/span&gt;서버 형태로 연결해&lt;span&gt; Cline&lt;/span&gt;의 능력을 확장할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;6.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;다양한 모델 프로바이더 지원&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Anthropic, OpenAI &lt;/span&gt;&lt;span&gt;같은 클라우드&lt;span&gt; API&lt;/span&gt;뿐 아니라&lt;span&gt;, OpenAI &lt;/span&gt;호환&lt;span&gt; API&lt;/span&gt;를 제공하는 로컬 서버&lt;span&gt;(Ollama, LM Studio, vLLM &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;도 연결 가능합니다&lt;span&gt;. &lt;/span&gt;이 가이드는 이 마지막 지점&lt;span&gt;, &lt;/span&gt;즉 &lt;b&gt;로컬&lt;span&gt; vLLM &lt;/span&gt;서버와의 연결&lt;/b&gt;을 중심으로 다룹니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;3&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #2f5496;&quot;&gt;장&lt;span&gt;. &lt;/span&gt;왜 로컬&lt;span&gt; LLM&lt;/span&gt;인가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;3.1 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;클라우드&lt;span&gt; API &lt;/span&gt;대비 장단점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;장점&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;비용 예측 가능성&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;클라우드&lt;span&gt; API&lt;/span&gt;는 토큰 단위 종량 과금이라 대규모&lt;span&gt;/&lt;/span&gt;반복 작업 시 비용이 눈덩이처럼 불어날 수 있습니다&lt;span&gt;. &lt;/span&gt;로컬&lt;span&gt; LLM&lt;/span&gt;은 초기 하드웨어 투자 이후 전력비 외 추가 비용이 없습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;프라이버시&lt;span&gt;/&lt;/span&gt;보안&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;사내 코드&lt;span&gt;, &lt;/span&gt;고객 데이터&lt;span&gt;, &lt;/span&gt;민감한 비즈니스 로직을 외부 서버로 전송하지 않아도 됩니다&lt;span&gt;. &lt;/span&gt;금융&lt;span&gt;, &lt;/span&gt;의료&lt;span&gt;, &lt;/span&gt;국방 등 규제 산업에서 특히 중요합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;오프라인&lt;span&gt;/&lt;/span&gt;폐쇄망 사용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;인터넷 연결이 없거나 제한된 환경&lt;span&gt;(&lt;/span&gt;사내 폐쇄망 등&lt;span&gt;)&lt;/span&gt;에서도 동작합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;커스터마이징&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;특정 도메인에 맞게 파인튜닝하거나&lt;span&gt;, &lt;/span&gt;원하는 오픈소스 모델을 자유롭게 선택&lt;span&gt;/&lt;/span&gt;교체할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;응답 지연시간&lt;span&gt;(latency) &lt;/span&gt;통제&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;네트워크 왕복 시간이 없어 로컬 환경에서는 지연시간을 직접 튜닝할 수 있습니다&lt;span&gt; (&lt;/span&gt;단&lt;span&gt;, &lt;/span&gt;모델 자체의 추론 속도는 하드웨어 성능에 좌우됨&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;단점&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;초기 하드웨어 비용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;고성능&lt;span&gt; GPU(RTX 5090 &lt;/span&gt;등&lt;span&gt;) &lt;/span&gt;구매 비용이 상당함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;모델 성능 한계&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;오픈소스 모델은 최상위 클라우드 모델&lt;span&gt;(Claude Opus &lt;/span&gt;등&lt;span&gt;) &lt;/span&gt;대비 복잡한 추론&lt;span&gt;/&lt;/span&gt;설계 능력이 떨어질 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;운영 부담&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;서버 설정&lt;span&gt;, &lt;/span&gt;드라이버&lt;span&gt;/CUDA &lt;/span&gt;버전 관리&lt;span&gt;, &lt;/span&gt;모델 업데이트 등을 직접 관리해야 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;●&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;컨텍스트 길이 제약&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: VRAM &lt;/span&gt;&lt;span&gt;한계로 인해 클라우드 모델만큼 긴 컨텍스트를 다루기 어려운 경우가 많음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;3.2 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;이 가이드의 접근 방향&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 가이드는 &lt;b&gt;&lt;span&gt;&quot;&lt;/span&gt;모든 작업을 로컬로 대체하자&lt;span&gt;&quot;&lt;/span&gt;가 아니라&lt;span&gt;, &quot;&lt;/span&gt;일상적인 반복 작업은 로컬로&lt;span&gt;, &lt;/span&gt;정말 어려운 설계&lt;span&gt;/&lt;/span&gt;추론은 필요시 클라우드로&lt;span&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;라는 하이브리드 관점을 취합니다&lt;span&gt;. &lt;/span&gt;이 전략은&lt;span&gt; 6&lt;/span&gt;부&lt;span&gt; 24&lt;/span&gt;장에서 구체적으로 다룹니다&lt;span&gt;. &lt;/span&gt;다만 이 가이드의 대부분은&lt;span&gt; vLLM + RTX 5090 &lt;/span&gt;조합으로 로컬 환경을 온전히 구축하고 활용하는 데 집중합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT개발</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/13</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A1%9C%EC%BB%AC-LLM-Cline-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-1%EB%B6%80-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0#entry13comment</comments>
      <pubDate>Tue, 7 Jul 2026 16:55:21 +0900</pubDate>
    </item>
    <item>
      <title>갈치 선상낚시 초보자 가이드</title>
      <link>https://i-dreamers.tistory.com/entry/%EA%B0%88%EC%B9%98-%EC%84%A0%EC%83%81%EB%82%9A%EC%8B%9C-%EC%B4%88%EB%B3%B4%EC%9E%90-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt; &amp;amp; &lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비로&lt;/span&gt; &lt;span&gt;시작하는&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;선상낚시&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;텐빈&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;루어&lt;/span&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;채비로&lt;/span&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;시작하는&lt;/span&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;갈치&lt;/span&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #5f5e5a;&quot;&gt;선상낚시&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여름밤&lt;/span&gt; &lt;span&gt;바다&lt;/span&gt; &lt;span&gt;위에&lt;/span&gt; &lt;span&gt;집어등이&lt;/span&gt; &lt;span&gt;환하게&lt;/span&gt; &lt;span&gt;켜지고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;은빛&lt;/span&gt; &lt;span&gt;갈치가&lt;/span&gt; &lt;span&gt;줄줄이&lt;/span&gt; &lt;span&gt;올라오는&lt;/span&gt; &lt;span&gt;손맛&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;선상낚시는&lt;/span&gt; &lt;span&gt;무거운&lt;/span&gt; &lt;span&gt;전동릴&lt;/span&gt; &lt;span&gt;없이도&lt;/span&gt; &lt;span&gt;즐길&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있는&lt;/span&gt; &lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;채비와&lt;/span&gt; &lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비로&lt;/span&gt; &lt;span&gt;접근하면&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;가볍고&lt;/span&gt; &lt;span&gt;초보자&lt;/span&gt; &lt;span&gt;친화적으로&lt;/span&gt; &lt;span&gt;시작할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;장비부터&lt;/span&gt; &lt;span&gt;노하우까지&lt;/span&gt; &lt;span&gt;순서대로&lt;/span&gt; &lt;span&gt;정리해봤습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;1. &lt;/span&gt;&lt;span&gt;낚시&lt;/span&gt; &lt;span&gt;장비&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;스타일은&lt;/span&gt; &lt;span&gt;심해&lt;/span&gt; &lt;span&gt;전동릴&lt;/span&gt; &lt;span&gt;장비에&lt;/span&gt; &lt;span&gt;비해&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;가볍고&lt;/span&gt; &lt;span&gt;저렴하게&lt;/span&gt; &lt;span&gt;구성할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있어&lt;/span&gt; &lt;span&gt;처음&lt;/span&gt; &lt;span&gt;도전하는&lt;/span&gt; &lt;span&gt;분들에게&lt;/span&gt; &lt;span&gt;특히&lt;/span&gt; &lt;span&gt;추천할&lt;/span&gt; &lt;span&gt;만합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;채비용&lt;/span&gt; &lt;span&gt;장비&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;낚싯대&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;타치우오&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;갈치&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;전용대나&lt;/span&gt;&lt;span&gt; 6.6~7ft &lt;/span&gt;&lt;span&gt;정도의&lt;/span&gt; &lt;span&gt;라이트&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;미디엄라이트&lt;/span&gt;&lt;span&gt;(ML) &lt;/span&gt;&lt;span&gt;로드가&lt;/span&gt; &lt;span&gt;적당합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;전용대는&lt;/span&gt; &lt;span&gt;예민한&lt;/span&gt; &lt;span&gt;입질과&lt;/span&gt; &lt;span&gt;어신&lt;/span&gt; &lt;span&gt;전달력에&lt;/span&gt; &lt;span&gt;특화되어&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;릴&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;소형&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;중형&lt;/span&gt; &lt;span&gt;스피닝&lt;/span&gt; &lt;span&gt;릴이나&lt;/span&gt; &lt;span&gt;베이트릴을&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;전동릴처럼&lt;/span&gt; &lt;span&gt;무겁지&lt;/span&gt; &lt;span&gt;않아&lt;/span&gt; &lt;span&gt;다루기&lt;/span&gt; &lt;span&gt;편합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;원줄&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;목줄&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;PE &lt;/span&gt;&lt;span&gt;합사&lt;/span&gt; &lt;span&gt;위주로&lt;/span&gt; &lt;span&gt;준비합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비용&lt;/span&gt; &lt;span&gt;장비&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;낚싯대&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;6.6~7ft &lt;/span&gt;&lt;span&gt;길이의&lt;/span&gt;&lt;span&gt; UL(&lt;/span&gt;&lt;span&gt;울트라라이트&lt;/span&gt;&lt;span&gt;)~ML &lt;/span&gt;&lt;span&gt;강도&lt;/span&gt; &lt;span&gt;로드가&lt;/span&gt; &lt;span&gt;초보자에게&lt;/span&gt; &lt;span&gt;적합합니다&lt;/span&gt;&lt;span&gt;. 8ft &lt;/span&gt;&lt;span&gt;전후의&lt;/span&gt; &lt;span&gt;연질&lt;/span&gt; &lt;span&gt;농어&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;볼락&lt;/span&gt; &lt;span&gt;루어대도&lt;/span&gt; &lt;span&gt;대용&lt;/span&gt; &lt;span&gt;가능합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;원투가&lt;/span&gt; &lt;span&gt;필요하다면&lt;/span&gt;&lt;span&gt; 7ft &lt;/span&gt;&lt;span&gt;이상의&lt;/span&gt; &lt;span&gt;긴&lt;/span&gt; &lt;span&gt;로드가&lt;/span&gt; &lt;span&gt;유리합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;릴&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;2000~2500&lt;/span&gt;&lt;span&gt;번&lt;/span&gt; &lt;span&gt;크기의&lt;/span&gt; &lt;span&gt;스피닝&lt;/span&gt; &lt;span&gt;릴이면&lt;/span&gt; &lt;span&gt;충분합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;원줄&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;PE &lt;/span&gt;&lt;span&gt;라인&lt;/span&gt;&lt;span&gt; 0.6~0.8&lt;/span&gt;&lt;span&gt;호&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;목줄&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;쇼크리더&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;카본&lt;/span&gt; &lt;span&gt;또는&lt;/span&gt; &lt;span&gt;나일론&lt;/span&gt;&lt;span&gt; 1~3&lt;/span&gt;&lt;span&gt;호&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;가는&lt;/span&gt; &lt;span&gt;목줄일수록&lt;/span&gt; &lt;span&gt;가벼운&lt;/span&gt; &lt;span&gt;루어를&lt;/span&gt; &lt;span&gt;멀리&lt;/span&gt; &lt;span&gt;던지기&lt;/span&gt; &lt;span&gt;쉽고&lt;/span&gt; &lt;span&gt;입질&lt;/span&gt; &lt;span&gt;감도도&lt;/span&gt; &lt;span&gt;좋아집니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;공통&lt;/span&gt; &lt;span&gt;준비물&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;집어등&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;채비&lt;/span&gt; &lt;span&gt;위쪽에&lt;/span&gt; &lt;span&gt;달아&lt;/span&gt; &lt;span&gt;갈치를&lt;/span&gt; &lt;span&gt;유인합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;배터리형&lt;/span&gt; &lt;span&gt;방수&lt;/span&gt; &lt;span&gt;집어등이&lt;/span&gt; &lt;span&gt;일반적입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;의류&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;소품&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;미끼&lt;/span&gt; &lt;span&gt;비린내가&lt;/span&gt; &lt;span&gt;배기&lt;/span&gt; &lt;span&gt;쉬우므로&lt;/span&gt; &lt;span&gt;세탁이&lt;/span&gt; &lt;span&gt;편한&lt;/span&gt; &lt;span&gt;간편복을&lt;/span&gt; &lt;span&gt;추천하며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;모자&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;장갑&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;여벌&lt;/span&gt; &lt;span&gt;옷&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;수건은&lt;/span&gt; &lt;span&gt;기본으로&lt;/span&gt; &lt;span&gt;챙깁니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;손질&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;도구&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;회칼&lt;/span&gt; &lt;span&gt;하나&lt;/span&gt; &lt;span&gt;챙기면&lt;/span&gt; &lt;span&gt;선상에서&lt;/span&gt; &lt;span&gt;바로&lt;/span&gt; &lt;span&gt;회를&lt;/span&gt; &lt;span&gt;떠서&lt;/span&gt; &lt;span&gt;맛볼&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;갈치의&lt;/span&gt; &lt;span&gt;날카로운&lt;/span&gt; &lt;span&gt;이빨에&lt;/span&gt; &lt;span&gt;다칠&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있으니&lt;/span&gt; &lt;span&gt;바늘을&lt;/span&gt; &lt;span&gt;뺄&lt;/span&gt; &lt;span&gt;땐&lt;/span&gt; &lt;span&gt;플라이어를&lt;/span&gt; &lt;span&gt;사용하세요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;보관함&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;아이스박스는&lt;/span&gt; &lt;span&gt;선상에서&lt;/span&gt; &lt;span&gt;제공되는&lt;/span&gt; &lt;span&gt;경우가&lt;/span&gt; &lt;span&gt;많지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;신선도를&lt;/span&gt; &lt;span&gt;더&lt;/span&gt; &lt;span&gt;오래&lt;/span&gt; &lt;span&gt;유지하려면&lt;/span&gt; &lt;span&gt;개인용&lt;/span&gt; &lt;span&gt;대형&lt;/span&gt; &lt;span&gt;아이스박스를&lt;/span&gt; &lt;span&gt;준비하는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;좋습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0f6e56;&quot;&gt;TIP&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;장비는&lt;/span&gt; &lt;span&gt;볼락&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;농어&lt;/span&gt; &lt;span&gt;루어대&lt;/span&gt; &lt;span&gt;등&lt;/span&gt; &lt;span&gt;이미&lt;/span&gt; &lt;span&gt;가지고&lt;/span&gt; &lt;span&gt;있는&lt;/span&gt; &lt;span&gt;라이트&lt;/span&gt; &lt;span&gt;태클로도&lt;/span&gt; &lt;span&gt;대체&lt;/span&gt; &lt;span&gt;가능한&lt;/span&gt; &lt;span&gt;경우가&lt;/span&gt; &lt;span&gt;많아&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;심해&lt;/span&gt; &lt;span&gt;전동릴&lt;/span&gt; &lt;span&gt;장비보다&lt;/span&gt; &lt;span&gt;진입&lt;/span&gt; &lt;span&gt;장벽이&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;낮습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;처음이라면&lt;/span&gt; &lt;span&gt;배에서&lt;/span&gt; &lt;span&gt;대여&lt;/span&gt; &lt;span&gt;가능한지&lt;/span&gt; &lt;span&gt;미리&lt;/span&gt; &lt;span&gt;확인해보세요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;2. &lt;/span&gt;&lt;span&gt;낚시&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;채비&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;채비는&lt;/span&gt; &lt;span&gt;봉돌과&lt;/span&gt; &lt;span&gt;바늘이&lt;/span&gt; &lt;span&gt;아래위로&lt;/span&gt; &lt;span&gt;분리되어&lt;/span&gt; &lt;span&gt;엉킴이&lt;/span&gt; &lt;span&gt;적고&lt;/span&gt; &lt;span&gt;다루기&lt;/span&gt; &lt;span&gt;쉬운&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;특징입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;20~30cm &lt;/span&gt;&lt;span&gt;길이의&lt;/span&gt; &lt;span&gt;속공&lt;/span&gt; &lt;span&gt;텐빈이나&lt;/span&gt; &lt;span&gt;오모리리그용&lt;/span&gt; &lt;span&gt;편대를&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;스테인리스나&lt;/span&gt; &lt;span&gt;티타늄&lt;/span&gt; &lt;span&gt;소재가&lt;/span&gt; &lt;span&gt;일반적입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;바늘&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;쌍바늘&lt;/span&gt; &lt;span&gt;또는&lt;/span&gt; &lt;span&gt;아가미바늘&lt;/span&gt; &lt;span&gt;형태의&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;전용&lt;/span&gt; &lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;채비가&lt;/span&gt; &lt;span&gt;완제품으로&lt;/span&gt; &lt;span&gt;많이&lt;/span&gt; &lt;span&gt;판매되며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;형상기억합금&lt;/span&gt; &lt;span&gt;소재로&lt;/span&gt; &lt;span&gt;엉킴을&lt;/span&gt; &lt;span&gt;줄인&lt;/span&gt; &lt;span&gt;제품도&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;목줄&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;이빨에&lt;/span&gt; &lt;span&gt;잘리지&lt;/span&gt; &lt;span&gt;않도록&lt;/span&gt; &lt;span&gt;와이어나&lt;/span&gt; &lt;span&gt;튜브로&lt;/span&gt; &lt;span&gt;보강된&lt;/span&gt; &lt;span&gt;목줄을&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;봉돌&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;15~30&lt;/span&gt;&lt;span&gt;호&lt;/span&gt; &lt;span&gt;정도로&lt;/span&gt; &lt;span&gt;근해&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;내만&lt;/span&gt; &lt;span&gt;포인트에&lt;/span&gt; &lt;span&gt;맞춘&lt;/span&gt; &lt;span&gt;가벼운&lt;/span&gt; &lt;span&gt;무게를&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;심해용보다&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;가볍습니다&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;집어등&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;케미컬라이트&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;위쪽에&lt;/span&gt; &lt;span&gt;달아&lt;/span&gt; &lt;span&gt;갈치를&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt; &lt;span&gt;쪽으로&lt;/span&gt; &lt;span&gt;유인합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;미끼&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;꽁치살을&lt;/span&gt; &lt;span&gt;손질해&lt;/span&gt; &lt;span&gt;바늘에&lt;/span&gt; &lt;span&gt;꿰어&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;지그헤드&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;웜&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;가장&lt;/span&gt; &lt;span&gt;기본적인&lt;/span&gt; &lt;span&gt;조합으로&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;지그헤드에&lt;/span&gt; &lt;span&gt;실리콘&lt;/span&gt; &lt;span&gt;웜&lt;/span&gt;&lt;span&gt;(2~5&lt;/span&gt;&lt;span&gt;인치&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;이나&lt;/span&gt; &lt;span&gt;볼락웜&lt;/span&gt;&lt;span&gt;(1.5&lt;/span&gt;&lt;span&gt;인치&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt; &lt;span&gt;결합해&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;바늘&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;방향&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;바늘이&lt;/span&gt; &lt;span&gt;아래로&lt;/span&gt; &lt;span&gt;향하게&lt;/span&gt; &lt;span&gt;세팅하는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;기본입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;웜&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;색상&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;야광&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;축광&lt;/span&gt; &lt;span&gt;웜이&lt;/span&gt; &lt;span&gt;밤낚시에&lt;/span&gt; &lt;span&gt;효과적입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;채비&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;교체&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;갈치는&lt;/span&gt; &lt;span&gt;같은&lt;/span&gt; &lt;span&gt;패턴에&lt;/span&gt; &lt;span&gt;금방&lt;/span&gt; &lt;span&gt;적응하므로&lt;/span&gt; &lt;span&gt;웜&lt;/span&gt; &lt;span&gt;종류나&lt;/span&gt; &lt;span&gt;색상을&lt;/span&gt; &lt;span&gt;자주&lt;/span&gt; &lt;span&gt;바꿔주는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;좋습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0f6e56;&quot;&gt;TIP&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;완제품&lt;/span&gt; &lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;채비와&lt;/span&gt; &lt;span&gt;루어용&lt;/span&gt; &lt;span&gt;지그헤드&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;웜은&lt;/span&gt; &lt;span&gt;낚시점이나&lt;/span&gt; &lt;span&gt;온라인에서&lt;/span&gt; &lt;span&gt;저렴하게&lt;/span&gt; &lt;span&gt;구입할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있어&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;직접&lt;/span&gt; &lt;span&gt;매듭을&lt;/span&gt; &lt;span&gt;묶지&lt;/span&gt; &lt;span&gt;않아도&lt;/span&gt; &lt;span&gt;바로&lt;/span&gt; &lt;span&gt;사용할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;3. &lt;/span&gt;&lt;span&gt;낚시&lt;/span&gt; &lt;span&gt;시기&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;갈치는&lt;/span&gt; &lt;span&gt;수온에&lt;/span&gt; &lt;span&gt;따라&lt;/span&gt; &lt;span&gt;이동하는&lt;/span&gt; &lt;span&gt;어종이라&lt;/span&gt; &lt;span&gt;시기별로&lt;/span&gt; &lt;span&gt;포인트와&lt;/span&gt; &lt;span&gt;씨알이&lt;/span&gt; &lt;span&gt;달라집니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;전체&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;시즌&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;대체로&lt;/span&gt;&lt;span&gt; 6~7&lt;/span&gt;&lt;span&gt;월부터&lt;/span&gt;&lt;span&gt; 12&lt;/span&gt;&lt;span&gt;월까지가&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;선상낚시&lt;/span&gt; &lt;span&gt;시즌입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;수온이&lt;/span&gt; &lt;span&gt;급격히&lt;/span&gt; &lt;span&gt;낮아지는&lt;/span&gt;&lt;span&gt; 12&lt;/span&gt;&lt;span&gt;월&lt;/span&gt; &lt;span&gt;중순&lt;/span&gt; &lt;span&gt;전후로&lt;/span&gt; &lt;span&gt;시즌이&lt;/span&gt; &lt;span&gt;마무리됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;초반&lt;/span&gt;&lt;span&gt;(6~7&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;월&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;제주도&lt;/span&gt; &lt;span&gt;주변&lt;/span&gt; &lt;span&gt;해역에서&lt;/span&gt; &lt;span&gt;먼저&lt;/span&gt; &lt;span&gt;시즌이&lt;/span&gt; &lt;span&gt;열리며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이&lt;/span&gt; &lt;span&gt;시기엔&lt;/span&gt; &lt;span&gt;손가락&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;개&lt;/span&gt; &lt;span&gt;굵기&lt;/span&gt; &lt;span&gt;정도의&lt;/span&gt; &lt;span&gt;작은&lt;/span&gt;&lt;span&gt; '&lt;/span&gt;&lt;span&gt;풀치&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;가&lt;/span&gt; &lt;span&gt;주로&lt;/span&gt; &lt;span&gt;낚입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비로&lt;/span&gt; &lt;span&gt;공략하기&lt;/span&gt; &lt;span&gt;좋은&lt;/span&gt; &lt;span&gt;시기이기도&lt;/span&gt; &lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;성수기&lt;/span&gt;&lt;span&gt;(8~11&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;월&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;수온이&lt;/span&gt; &lt;span&gt;오르면서&lt;/span&gt; &lt;span&gt;어장이&lt;/span&gt; &lt;span&gt;남해안&lt;/span&gt; &lt;span&gt;가까이&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;거문도&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;백도&lt;/span&gt; &lt;span&gt;등&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;로&lt;/span&gt; &lt;span&gt;북상해&lt;/span&gt; &lt;span&gt;형성되며&lt;/span&gt; &lt;span&gt;조황이&lt;/span&gt; &lt;span&gt;가장&lt;/span&gt; &lt;span&gt;안정적입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;후반&lt;/span&gt;&lt;span&gt;(11~12&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;월&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;씨알이&lt;/span&gt; &lt;span&gt;굵어져&lt;/span&gt;&lt;span&gt; 4&lt;/span&gt;&lt;span&gt;지급&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;손가락&lt;/span&gt; &lt;span&gt;네&lt;/span&gt; &lt;span&gt;마디&lt;/span&gt; &lt;span&gt;폭&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;이상의&lt;/span&gt; &lt;span&gt;대형&lt;/span&gt; &lt;span&gt;갈치를&lt;/span&gt; &lt;span&gt;만날&lt;/span&gt; &lt;span&gt;확률이&lt;/span&gt; &lt;span&gt;높아집니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0f6e56;&quot;&gt;TIP&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;시즌이&lt;/span&gt; &lt;span&gt;시작되면&lt;/span&gt; &lt;span&gt;특정&lt;/span&gt; &lt;span&gt;달이&lt;/span&gt; &lt;span&gt;유독&lt;/span&gt; &lt;span&gt;좋다고&lt;/span&gt; &lt;span&gt;단정하기&lt;/span&gt; &lt;span&gt;어려울&lt;/span&gt; &lt;span&gt;만큼&lt;/span&gt; &lt;span&gt;꾸준한&lt;/span&gt; &lt;span&gt;조황을&lt;/span&gt; &lt;span&gt;보이는&lt;/span&gt; &lt;span&gt;편이니&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;날씨와&lt;/span&gt; &lt;span&gt;개인&lt;/span&gt; &lt;span&gt;일정에&lt;/span&gt; &lt;span&gt;맞춰&lt;/span&gt; &lt;span&gt;출조&lt;/span&gt; &lt;span&gt;시기를&lt;/span&gt; &lt;span&gt;정하면&lt;/span&gt; &lt;span&gt;됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;&lt;span&gt;4. &lt;/span&gt;&lt;span&gt;주요&lt;/span&gt; &lt;span&gt;출항지&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;선상낚시는&lt;/span&gt; &lt;span&gt;남해안과&lt;/span&gt; &lt;span&gt;제주도가&lt;/span&gt; &lt;span&gt;대표적인&lt;/span&gt; &lt;span&gt;출항지입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;여수&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;거문도&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;백도&lt;/span&gt; &lt;span&gt;해역으로&lt;/span&gt; &lt;span&gt;나가는&lt;/span&gt; &lt;span&gt;먼바다&lt;/span&gt; &lt;span&gt;갈치낚시로&lt;/span&gt; &lt;span&gt;유명하며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;왕갈치급을&lt;/span&gt; &lt;span&gt;노릴&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있는&lt;/span&gt; &lt;span&gt;대표&lt;/span&gt; &lt;span&gt;포인트입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;통영&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;삼천포&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;사천&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;남해안에서&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;포인트가&lt;/span&gt; &lt;span&gt;꾸준히&lt;/span&gt; &lt;span&gt;형성되는&lt;/span&gt; &lt;span&gt;지역입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;완도&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;남해&lt;/span&gt; &lt;span&gt;서부권의&lt;/span&gt; &lt;span&gt;주요&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;출항지&lt;/span&gt; &lt;span&gt;중&lt;/span&gt; &lt;span&gt;하나입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;제주도&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;시즌&lt;/span&gt; &lt;span&gt;초반&lt;/span&gt; &lt;span&gt;어장이&lt;/span&gt; &lt;span&gt;먼저&lt;/span&gt; &lt;span&gt;형성되는&lt;/span&gt; &lt;span&gt;곳으로&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;도두항&lt;/span&gt; &lt;span&gt;등에서&lt;/span&gt; &lt;span&gt;근해&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;내만식&lt;/span&gt; &lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;낚시도&lt;/span&gt; &lt;span&gt;활발합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;서해권&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;최근&lt;/span&gt; &lt;span&gt;서해에서도&lt;/span&gt; &lt;span&gt;갈치&lt;/span&gt; &lt;span&gt;어군이&lt;/span&gt; &lt;span&gt;확인되면서&lt;/span&gt; &lt;span&gt;새로운&lt;/span&gt; &lt;span&gt;낚시터로&lt;/span&gt; &lt;span&gt;주목받고&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수도권에&lt;/span&gt; &lt;span&gt;거주한다면&lt;/span&gt; &lt;span&gt;시즌&lt;/span&gt; &lt;span&gt;중&lt;/span&gt; &lt;span&gt;남해&lt;/span&gt; &lt;span&gt;출항지까지&lt;/span&gt; &lt;span&gt;왕복하는&lt;/span&gt; &lt;span&gt;출조버스를&lt;/span&gt; &lt;span&gt;운행하는&lt;/span&gt; &lt;span&gt;낚시점들이&lt;/span&gt; &lt;span&gt;많아&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;개인&lt;/span&gt; &lt;span&gt;차량&lt;/span&gt; &lt;span&gt;없이도&lt;/span&gt; &lt;span&gt;편하게&lt;/span&gt; &lt;span&gt;다녀올&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;5. &lt;/span&gt;&lt;span&gt;낚시&lt;/span&gt; &lt;span&gt;방법&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비는&lt;/span&gt; &lt;span&gt;심해&lt;/span&gt; &lt;span&gt;전동릴&lt;/span&gt; &lt;span&gt;방식보다&lt;/span&gt; &lt;span&gt;캐스팅과&lt;/span&gt; &lt;span&gt;리트리브&lt;/span&gt; &lt;span&gt;위주로&lt;/span&gt; &lt;span&gt;진행되어&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;직관적입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;텐빈&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;편대&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;채비&lt;/span&gt; &lt;span&gt;사용법&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;텐빈&lt;/span&gt; &lt;span&gt;채비에&lt;/span&gt; &lt;span&gt;미끼&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;꽁치살&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;꿰고&lt;/span&gt; &lt;span&gt;집어등을&lt;/span&gt; &lt;span&gt;위쪽에&lt;/span&gt; &lt;span&gt;답니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;배&lt;/span&gt; &lt;span&gt;주변으로&lt;/span&gt; &lt;span&gt;채비를&lt;/span&gt; &lt;span&gt;내려&lt;/span&gt; &lt;span&gt;상층부터&lt;/span&gt; &lt;span&gt;탐색을&lt;/span&gt; &lt;span&gt;시작합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;입질층을&lt;/span&gt; &lt;span&gt;찾을&lt;/span&gt; &lt;span&gt;때까지&lt;/span&gt; &lt;span&gt;조금씩&lt;/span&gt; &lt;span&gt;수심을&lt;/span&gt; &lt;span&gt;더&lt;/span&gt; &lt;span&gt;내려가며&lt;/span&gt; &lt;span&gt;탐색합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;입질이&lt;/span&gt; &lt;span&gt;오면&lt;/span&gt; &lt;span&gt;갈치가&lt;/span&gt; &lt;span&gt;미끼를&lt;/span&gt; &lt;span&gt;완전히&lt;/span&gt; &lt;span&gt;삼킬&lt;/span&gt; &lt;span&gt;때까지&lt;/span&gt; &lt;span&gt;기다린&lt;/span&gt; &lt;span&gt;후&lt;/span&gt; &lt;span&gt;챔질합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;갈치는&lt;/span&gt; &lt;span&gt;미끼를&lt;/span&gt; &lt;span&gt;한입에&lt;/span&gt; &lt;span&gt;삼키지&lt;/span&gt; &lt;span&gt;않고&lt;/span&gt; &lt;span&gt;뜯어&lt;/span&gt; &lt;span&gt;먹는&lt;/span&gt; &lt;span&gt;습성이&lt;/span&gt; &lt;span&gt;있어&lt;/span&gt; &lt;span&gt;서두르면&lt;/span&gt; &lt;span&gt;놓치기&lt;/span&gt; &lt;span&gt;쉽습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt; &lt;span&gt;사용법&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;지그헤드&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;웜&lt;/span&gt; &lt;span&gt;채비를&lt;/span&gt; &lt;span&gt;원하는&lt;/span&gt; &lt;span&gt;방향으로&lt;/span&gt; &lt;span&gt;캐스팅합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;채비가&lt;/span&gt; &lt;span&gt;가라앉는&lt;/span&gt; &lt;span&gt;동안&lt;/span&gt; &lt;span&gt;라인을&lt;/span&gt; &lt;span&gt;살짝&lt;/span&gt; &lt;span&gt;견제하며&lt;/span&gt; &lt;span&gt;입질층을&lt;/span&gt; &lt;span&gt;확인합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;부드러운&lt;/span&gt; &lt;span&gt;리트리브&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;감아들이기&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;로&lt;/span&gt; &lt;span&gt;웜의&lt;/span&gt; &lt;span&gt;꼬리가&lt;/span&gt; &lt;span&gt;자연스럽게&lt;/span&gt; &lt;span&gt;떨리는&lt;/span&gt; &lt;span&gt;액션을&lt;/span&gt; &lt;span&gt;만들어줍니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;가벼운&lt;/span&gt; &lt;span&gt;트위칭&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;로드를&lt;/span&gt; &lt;span&gt;톡톡&lt;/span&gt; &lt;span&gt;흔들기&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;을&lt;/span&gt; &lt;span&gt;리트리브&lt;/span&gt; &lt;span&gt;중간에&lt;/span&gt; &lt;span&gt;섞어&lt;/span&gt; &lt;span&gt;불규칙한&lt;/span&gt; &lt;span&gt;액션으로&lt;/span&gt; &lt;span&gt;입질을&lt;/span&gt; &lt;span&gt;유도합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;5.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;활성이&lt;/span&gt; &lt;span&gt;좋을&lt;/span&gt; &lt;span&gt;때는&lt;/span&gt; &lt;span&gt;갈치가&lt;/span&gt; &lt;span&gt;점점&lt;/span&gt; &lt;span&gt;상층으로&lt;/span&gt; &lt;span&gt;붙으므로&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt; &lt;span&gt;수심을&lt;/span&gt; &lt;span&gt;얕게&lt;/span&gt; &lt;span&gt;조절해&lt;/span&gt; &lt;span&gt;입질을&lt;/span&gt; &lt;span&gt;놓치지&lt;/span&gt; &lt;span&gt;않도록&lt;/span&gt; &lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;6. &lt;/span&gt;&lt;span&gt;주요&lt;/span&gt; &lt;span&gt;노하우&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;입질층을&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;빠르게&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;찾기&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;텐빈이든&lt;/span&gt; &lt;span&gt;루어든&lt;/span&gt; &lt;span&gt;상층부터&lt;/span&gt; &lt;span&gt;시작해&lt;/span&gt; &lt;span&gt;점차&lt;/span&gt; &lt;span&gt;깊은&lt;/span&gt; &lt;span&gt;층으로&lt;/span&gt; &lt;span&gt;탐색&lt;/span&gt; &lt;span&gt;범위를&lt;/span&gt; &lt;span&gt;넓혀가며&lt;/span&gt; &lt;span&gt;갈치가&lt;/span&gt; &lt;span&gt;몰려있는&lt;/span&gt; &lt;span&gt;수심대를&lt;/span&gt; &lt;span&gt;찾는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;조과의&lt;/span&gt; &lt;span&gt;핵심입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;수위가&lt;/span&gt; &lt;span&gt;바뀌면&lt;/span&gt; &lt;span&gt;입질층도&lt;/span&gt; &lt;span&gt;함께&lt;/span&gt; &lt;span&gt;바뀌니&lt;/span&gt; &lt;span&gt;계속&lt;/span&gt; &lt;span&gt;확인해야&lt;/span&gt; &lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;루어는&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;액션이&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;생명&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;웜&lt;/span&gt; &lt;span&gt;자체는&lt;/span&gt; &lt;span&gt;가만히&lt;/span&gt; &lt;span&gt;있으면&lt;/span&gt; &lt;span&gt;미끼&lt;/span&gt; &lt;span&gt;역할을&lt;/span&gt; &lt;span&gt;하지&lt;/span&gt; &lt;span&gt;못합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;리트리브&lt;/span&gt; &lt;span&gt;중&lt;/span&gt; &lt;span&gt;웜&lt;/span&gt; &lt;span&gt;꼬리가&lt;/span&gt; &lt;span&gt;잘&lt;/span&gt; &lt;span&gt;떨리는지&lt;/span&gt; &lt;span&gt;확인하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt; &lt;span&gt;액션에&lt;/span&gt; &lt;span&gt;갈치가&lt;/span&gt; &lt;span&gt;반응하지&lt;/span&gt; &lt;span&gt;않으면&lt;/span&gt; &lt;span&gt;루어&lt;/span&gt; &lt;span&gt;종류나&lt;/span&gt; &lt;span&gt;색상을&lt;/span&gt; &lt;span&gt;바꿔보세요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;챔질&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;타이밍&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;갈치는&lt;/span&gt; &lt;span&gt;미끼를&lt;/span&gt; &lt;span&gt;바로&lt;/span&gt; &lt;span&gt;삼키지&lt;/span&gt; &lt;span&gt;않고&lt;/span&gt; &lt;span&gt;뜯어&lt;/span&gt; &lt;span&gt;먹기&lt;/span&gt; &lt;span&gt;때문에&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;입질이&lt;/span&gt; &lt;span&gt;왔다고&lt;/span&gt; &lt;span&gt;바로&lt;/span&gt; &lt;span&gt;챔질하면&lt;/span&gt; &lt;span&gt;헛챔질이&lt;/span&gt; &lt;span&gt;되기&lt;/span&gt; &lt;span&gt;쉽습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;완전히&lt;/span&gt; &lt;span&gt;삼킬&lt;/span&gt; &lt;span&gt;때까지&lt;/span&gt; &lt;span&gt;기다렸다가&lt;/span&gt; &lt;span&gt;챔질하는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;요령입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;텐빈&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;채비의&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;장점&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;봉돌과&lt;/span&gt; &lt;span&gt;바늘이&lt;/span&gt; &lt;span&gt;분리된&lt;/span&gt; &lt;span&gt;구조라&lt;/span&gt; &lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비보다&lt;/span&gt; &lt;span&gt;엉킴이&lt;/span&gt; &lt;span&gt;적고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;생미끼를&lt;/span&gt; &lt;span&gt;쓰기&lt;/span&gt; &lt;span&gt;때문에&lt;/span&gt; &lt;span&gt;갈치의&lt;/span&gt; &lt;span&gt;반응&lt;/span&gt; &lt;span&gt;속도가&lt;/span&gt; &lt;span&gt;빠른&lt;/span&gt; &lt;span&gt;편입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;루어&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;채비의&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;장점&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;원투가&lt;/span&gt; &lt;span&gt;가능해&lt;/span&gt; &lt;span&gt;넓은&lt;/span&gt; &lt;span&gt;범위를&lt;/span&gt; &lt;span&gt;빠르게&lt;/span&gt; &lt;span&gt;탐색할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;수심&lt;/span&gt; &lt;span&gt;조절도&lt;/span&gt; &lt;span&gt;텐빈보다&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;간편합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;이빨&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;손상&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;방지&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;갈치의&lt;/span&gt; &lt;span&gt;날카로운&lt;/span&gt; &lt;span&gt;이빨에&lt;/span&gt; &lt;span&gt;목줄이&lt;/span&gt; &lt;span&gt;잘리지&lt;/span&gt; &lt;span&gt;않도록&lt;/span&gt; &lt;span&gt;와이어나&lt;/span&gt; &lt;span&gt;튜브로&lt;/span&gt; &lt;span&gt;보강된&lt;/span&gt; &lt;span&gt;채비를&lt;/span&gt; &lt;span&gt;사용하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;바늘을&lt;/span&gt; &lt;span&gt;뺄&lt;/span&gt; &lt;span&gt;때는&lt;/span&gt; &lt;span&gt;플라이어를&lt;/span&gt; &lt;span&gt;사용해&lt;/span&gt; &lt;span&gt;손을&lt;/span&gt; &lt;span&gt;보호하세요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;날씨&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;확인은&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;필수&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;특히&lt;/span&gt; &lt;span&gt;겨울철에는&lt;/span&gt; &lt;span&gt;어장이&lt;/span&gt; &lt;span&gt;육지에서&lt;/span&gt; &lt;span&gt;멀리&lt;/span&gt; &lt;span&gt;떨어져&lt;/span&gt; &lt;span&gt;있어&lt;/span&gt; &lt;span&gt;기상&lt;/span&gt; &lt;span&gt;악화&lt;/span&gt; &lt;span&gt;시&lt;/span&gt; &lt;span&gt;출조&lt;/span&gt; &lt;span&gt;자체가&lt;/span&gt; &lt;span&gt;취소되는&lt;/span&gt; &lt;span&gt;경우가&lt;/span&gt; &lt;span&gt;많으니&lt;/span&gt; &lt;span&gt;사전에&lt;/span&gt; &lt;span&gt;일기예보를&lt;/span&gt; &lt;span&gt;확인하세요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;비용&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span&gt;계획&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;보통&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;인당&lt;/span&gt;&lt;span&gt; 20&lt;/span&gt;&lt;span&gt;만&lt;/span&gt;&lt;span&gt;~30&lt;/span&gt;&lt;span&gt;만원&lt;/span&gt; &lt;span&gt;선이며&lt;/span&gt; &lt;span&gt;대개&lt;/span&gt; &lt;span&gt;식사와&lt;/span&gt; &lt;span&gt;기본&lt;/span&gt; &lt;span&gt;채비&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;미끼&lt;/span&gt; &lt;span&gt;등이&lt;/span&gt; &lt;span&gt;포함된&lt;/span&gt; &lt;span&gt;경우가&lt;/span&gt; &lt;span&gt;많습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;저렴한&lt;/span&gt; &lt;span&gt;가격만&lt;/span&gt; &lt;span&gt;보고&lt;/span&gt; &lt;span&gt;선택하기보다는&lt;/span&gt; &lt;span&gt;선장과&lt;/span&gt; &lt;span&gt;출조점의&lt;/span&gt; &lt;span&gt;신뢰도를&lt;/span&gt; &lt;span&gt;먼저&lt;/span&gt; &lt;span&gt;확인하는&lt;/span&gt; &lt;span&gt;것이&lt;/span&gt; &lt;span&gt;좋습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;텐빈과&lt;/span&gt; &lt;span&gt;루어&lt;/span&gt; &lt;span&gt;채비는&lt;/span&gt; &lt;span&gt;전동릴&lt;/span&gt; &lt;span&gt;심해&lt;/span&gt; &lt;span&gt;장비보다&lt;/span&gt; &lt;span&gt;훨씬&lt;/span&gt; &lt;span&gt;가볍고&lt;/span&gt; &lt;span&gt;진입&lt;/span&gt; &lt;span&gt;장벽이&lt;/span&gt; &lt;span&gt;낮아&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;라이트&lt;/span&gt; &lt;span&gt;태클을&lt;/span&gt; &lt;span&gt;이미&lt;/span&gt; &lt;span&gt;갖고&lt;/span&gt; &lt;span&gt;있다면&lt;/span&gt; &lt;span&gt;별도&lt;/span&gt; &lt;span&gt;구매&lt;/span&gt; &lt;span&gt;없이도&lt;/span&gt; &lt;span&gt;도전해볼&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이번&lt;/span&gt; &lt;span&gt;시즌엔&lt;/span&gt; &lt;span&gt;남해나&lt;/span&gt; &lt;span&gt;제주도로&lt;/span&gt; &lt;span&gt;은갈치를&lt;/span&gt; &lt;span&gt;만나러&lt;/span&gt; &lt;span&gt;떠나보는&lt;/span&gt; &lt;span&gt;건&lt;/span&gt; &lt;span&gt;어떨까요&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;</description>
      <category>낚시</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/12</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EA%B0%88%EC%B9%98-%EC%84%A0%EC%83%81%EB%82%9A%EC%8B%9C-%EC%B4%88%EB%B3%B4%EC%9E%90-%EA%B0%80%EC%9D%B4%EB%93%9C#entry12comment</comments>
      <pubDate>Tue, 7 Jul 2026 16:52:58 +0900</pubDate>
    </item>
    <item>
      <title>람다 표현식으로 Map 값 처리 (Handling Map Values with Lambda Expressions)</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D%EC%9C%BC%EB%A1%9C-Map-%EA%B0%92-%EC%B2%98%EB%A6%AC-Handling-Map-Values-with-Lambda-Expressions</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;원문 : &lt;a href=&quot;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694756675480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Handling Map Values with Lambda Expressions - Dev.java&quot; data-og-description=&quot;Handling the Values Stored in a Map.&quot; data-og-host=&quot;dev.java&quot; data-og-source-url=&quot;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&quot; data-og-url=&quot;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zdQ9d/hyTVP37EZq/wbQZFtNfyby7A8fUIXODKK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500&quot;&gt;&lt;a href=&quot;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.java/learn/api/collections-framework/maps-and-lambdas/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zdQ9d/hyTVP37EZq/wbQZFtNfyby7A8fUIXODKK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Handling Map Values with Lambda Expressions - Dev.java&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Handling the Values Stored in a Map.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.java&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Map 콘텐츠 소비&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map&amp;nbsp;인터페이스에는&amp;nbsp;Iterable&amp;nbsp;인터페이스의&amp;nbsp;forEach()&amp;nbsp;메서드와&amp;nbsp;동일한&amp;nbsp;방식으로&amp;nbsp;작동하는&amp;nbsp;forEach()&amp;nbsp;메서드가&amp;nbsp;있습니다.&amp;nbsp;차이점은&amp;nbsp;이&amp;nbsp;forEach()&amp;nbsp;메소드가&amp;nbsp;단순한&amp;nbsp;Consumer&amp;nbsp;대신&amp;nbsp;BiConsumer를&amp;nbsp;인수로&amp;nbsp;취한다는&amp;nbsp;것입니다.&lt;br /&gt;&lt;br /&gt;간단한 Map를 만들고 그 내용을 인쇄해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694756561883&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Map&amp;lt;Integer, String&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
map.put(1, &quot;one&quot;);
map.put(2, &quot;two&quot;);
map.put(3, &quot;three&quot;);

map.forEach((key, value) -&amp;gt; System.out.println(key + &quot; :: &quot; + value));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드는&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;결과를&amp;nbsp;생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694756609679&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 :: one
2 :: two
3 :: three&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;값&amp;nbsp;바꾸기&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map&amp;nbsp;인터페이스는&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;값을&amp;nbsp;다른&amp;nbsp;값으로&amp;nbsp;바꾸는&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;방법을&amp;nbsp;제공합니다.&lt;br /&gt;&lt;br /&gt;첫&amp;nbsp;번째는&amp;nbsp;기존&amp;nbsp;값을&amp;nbsp;맹목적으로&amp;nbsp;새&amp;nbsp;값으로&amp;nbsp;바꾸는&amp;nbsp;교체(키,&amp;nbsp;값)입니다.&amp;nbsp;이는&amp;nbsp;put-if-present&amp;nbsp;연산과&amp;nbsp;동일합니다.&amp;nbsp;이&amp;nbsp;메소드는&amp;nbsp;지도에서&amp;nbsp;제거된&amp;nbsp;값을&amp;nbsp;반환합니다.&lt;br /&gt;&lt;br /&gt;더 세밀한 제어가 필요한 경우 기존 값을 인수로 사용하는 이 메서드의 오버로드(replace(key, existingValue, newValue))를 사용할 수 있습니다. 이 경우 전달받은 기존 값이 일치하는 경우에만 새 값으로 대체됩니다. 대체되는 경우 이 메서드는 true를 반환합니다.&lt;br /&gt;&lt;br /&gt;Map 인터페이스에는 BiFunction을 사용하여 Map의 모든 값을 바꾸는 방법도 있습니다. 이 BiFunction은 키와 값을 인수로 사용하고 기존 값을 대체할 새 값을 반환하는 리매핑 함수입니다. 이 메소드에 대한 호출은 맵의 모든 키/값 쌍에서 내부적으로 반복됩니다.&lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;예에서는&amp;nbsp;이&amp;nbsp;replacementAll()&amp;nbsp;메서드를&amp;nbsp;사용하는&amp;nbsp;방법을&amp;nbsp;보여줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694757301758&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Map&amp;lt;Integer, String&amp;gt; map = new HashMap&amp;lt;&amp;gt;();

map.put(1, &quot;one&quot;);
map.put(2, &quot;two&quot;);
map.put(3, &quot;three&quot;);

map.replaceAll((key, value) -&amp;gt; value.toUpperCase());
map.forEach((key, value) -&amp;gt; System.out.println(key + &quot; :: &quot; + value));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드를&amp;nbsp;실행하면&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;결과가&amp;nbsp;생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694757336835&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 :: ONE
2 :: TWO
3 :: THREE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;값&amp;nbsp;계산&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map&amp;nbsp;인터페이스는&amp;nbsp;키-값&amp;nbsp;쌍을&amp;nbsp;맵에&amp;nbsp;추가하거나&amp;nbsp;맵의&amp;nbsp;기존&amp;nbsp;값을&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;메서드(compute(),&amp;nbsp;ComputeIfPresent()&amp;nbsp;및&amp;nbsp;ComputeIfAbsent())&amp;nbsp;형식으로&amp;nbsp;수정하는&amp;nbsp;세&amp;nbsp;번째&amp;nbsp;패턴을&amp;nbsp;제공합니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;메서드는&amp;nbsp;다음&amp;nbsp;인수를&amp;nbsp;사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계산이 이루어지는 키&lt;/li&gt;
&lt;li&gt;Compute()&amp;nbsp;및&amp;nbsp;ComputeIfPresent()의&amp;nbsp;경우&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;값&lt;/li&gt;
&lt;li&gt;재매핑&amp;nbsp;함수로&amp;nbsp;작동하는&amp;nbsp;BiFunction&amp;nbsp;또는&amp;nbsp;ComputeIfAbsent()의&amp;nbsp;경우&amp;nbsp;매핑&amp;nbsp;함수.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Compute()의&amp;nbsp;경우&amp;nbsp;리매핑&amp;nbsp;이중&amp;nbsp;함수는&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;인수를&amp;nbsp;사용하여&amp;nbsp;호출됩니다.&amp;nbsp;첫&amp;nbsp;번째는&amp;nbsp;키이고,&amp;nbsp;두&amp;nbsp;번째는&amp;nbsp;기존&amp;nbsp;값이&amp;nbsp;있으면&amp;nbsp;기존&amp;nbsp;값이고,&amp;nbsp;없으면&amp;nbsp;null입니다.&amp;nbsp;리매핑&amp;nbsp;이중&amp;nbsp;함수는&amp;nbsp;null&amp;nbsp;값으로&amp;nbsp;호출될&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;ComputeIfPresent()의&amp;nbsp;경우&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;값이&amp;nbsp;있고&amp;nbsp;null이&amp;nbsp;아닌&amp;nbsp;경우&amp;nbsp;다시&amp;nbsp;매핑&amp;nbsp;함수가&amp;nbsp;호출됩니다.&amp;nbsp;키가&amp;nbsp;null&amp;nbsp;값에&amp;nbsp;바인딩되어&amp;nbsp;있으면&amp;nbsp;다시&amp;nbsp;매핑&amp;nbsp;함수가&amp;nbsp;호출되지&amp;nbsp;않습니다.&amp;nbsp;재매핑&amp;nbsp;함수는&amp;nbsp;null&amp;nbsp;값으로&amp;nbsp;호출할&amp;nbsp;수&amp;nbsp;없습니다.&lt;br /&gt;&lt;br /&gt;ComputeIfAbsent()의&amp;nbsp;경우&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;값이&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;리매핑&amp;nbsp;함수는&amp;nbsp;실제로&amp;nbsp;키를&amp;nbsp;인수로&amp;nbsp;사용하는&amp;nbsp;간단한&amp;nbsp;함수입니다.&amp;nbsp;이&amp;nbsp;함수는&amp;nbsp;키가&amp;nbsp;맵에&amp;nbsp;없거나&amp;nbsp;null&amp;nbsp;값에&amp;nbsp;바인딩된&amp;nbsp;경우&amp;nbsp;호출됩니다.&lt;br /&gt;&lt;br /&gt;모든&amp;nbsp;경우에&amp;nbsp;이중&amp;nbsp;함수(또는&amp;nbsp;함수)가&amp;nbsp;null&amp;nbsp;값을&amp;nbsp;반환하면&amp;nbsp;키가&amp;nbsp;맵에서&amp;nbsp;제거됩니다.&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;대한&amp;nbsp;매핑이&amp;nbsp;생성되지&amp;nbsp;않습니다.&amp;nbsp;이&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;방법&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;사용하면&amp;nbsp;null&amp;nbsp;값이&amp;nbsp;있는&amp;nbsp;키/값&amp;nbsp;쌍을&amp;nbsp;맵에&amp;nbsp;넣을&amp;nbsp;수&amp;nbsp;없습니다.&lt;br /&gt;&lt;br /&gt;모든&amp;nbsp;경우에&amp;nbsp;반환되는&amp;nbsp;값은&amp;nbsp;맵의&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;새&amp;nbsp;값이거나,&amp;nbsp;재매핑&amp;nbsp;함수가&amp;nbsp;null을&amp;nbsp;반환한&amp;nbsp;경우&amp;nbsp;null입니다.&amp;nbsp;이&amp;nbsp;의미&amp;nbsp;체계가&amp;nbsp;put()&amp;nbsp;메서드와&amp;nbsp;다르다는&amp;nbsp;점을&amp;nbsp;지적할&amp;nbsp;가치가&amp;nbsp;있습니다.&amp;nbsp;put()&amp;nbsp;메서드는&amp;nbsp;이전&amp;nbsp;값을&amp;nbsp;반환하는&amp;nbsp;반면,&amp;nbsp;Compute()&amp;nbsp;메서드는&amp;nbsp;새&amp;nbsp;값을&amp;nbsp;반환합니다.&lt;br /&gt;&lt;br /&gt;ComputeIfAbsent()&amp;nbsp;메서드의&amp;nbsp;매우&amp;nbsp;흥미로운&amp;nbsp;사용&amp;nbsp;사례는&amp;nbsp;목록을&amp;nbsp;값으로&amp;nbsp;사용하여&amp;nbsp;맵을&amp;nbsp;생성하는&amp;nbsp;것입니다.&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;문자열&amp;nbsp;목록이&amp;nbsp;있다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;[1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&amp;nbsp;5&amp;nbsp;6&amp;nbsp;7].&amp;nbsp;키는&amp;nbsp;해당&amp;nbsp;목록에&amp;nbsp;있는&amp;nbsp;단어의&amp;nbsp;길이이고&amp;nbsp;값은&amp;nbsp;해당&amp;nbsp;단어의&amp;nbsp;목록인&amp;nbsp;맵을&amp;nbsp;만들어야&amp;nbsp;합니다.&amp;nbsp;생성해야&amp;nbsp;할&amp;nbsp;것은&amp;nbsp;다음&amp;nbsp;맵입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694758810993&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3 :: [one, two, six]
4 :: [four, five]
5 :: [three, seven]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Compute()&amp;nbsp;메서드가&amp;nbsp;없으면&amp;nbsp;아마도&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694758849693&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings = List.of(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;);
Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
for (String word: strings) {
    int length = word.length();
    if (!map.containsKey(length)) {
        map.put(length, new ArrayList&amp;lt;&amp;gt;());
    }
    map.get(length).add(word);
}

map.forEach((key, value) -&amp;gt; System.out.println(key + &quot; :: &quot; + value));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드를&amp;nbsp;실행하면&amp;nbsp;예상되는&amp;nbsp;결과가&amp;nbsp;생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694758998424&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3 :: [one, two, six]
4 :: [four, five]
5 :: [three, seven]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데&amp;nbsp;putIfAbsent()를&amp;nbsp;사용하여&amp;nbsp;이&amp;nbsp;for&amp;nbsp;루프를&amp;nbsp;단순화할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694759037543&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (String word: strings) {
    int length = word.length();
    map.putIfAbsent(length, new ArrayList&amp;lt;&amp;gt;());
    map.get(length).add(word);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나&amp;nbsp;ComputeIfAbsent()를&amp;nbsp;사용하면&amp;nbsp;이&amp;nbsp;코드가&amp;nbsp;더욱&amp;nbsp;향상될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694759078335&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (String word: strings) {
    int length = word.length();
    map.computeIfAbsent(length, key -&amp;gt; new ArrayList&amp;lt;&amp;gt;())
       .add(word);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드는&amp;nbsp;어떻게&amp;nbsp;작동하나요?&lt;br /&gt;&lt;br /&gt;키가&amp;nbsp;맵에&amp;nbsp;없으면&amp;nbsp;매핑&amp;nbsp;함수가&amp;nbsp;호출되어&amp;nbsp;빈&amp;nbsp;목록이&amp;nbsp;생성됩니다.&amp;nbsp;이&amp;nbsp;목록은&amp;nbsp;ComputeIfAbsent()&amp;nbsp;메서드에&amp;nbsp;의해&amp;nbsp;반환됩니다.&amp;nbsp;이는&amp;nbsp;코드가&amp;nbsp;단어를&amp;nbsp;추가하는&amp;nbsp;빈&amp;nbsp;목록입니다.&lt;br /&gt;키가&amp;nbsp;맵에&amp;nbsp;있으면&amp;nbsp;매핑&amp;nbsp;함수가&amp;nbsp;호출되지&amp;nbsp;않고&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩된&amp;nbsp;현재&amp;nbsp;값이&amp;nbsp;반환됩니다.&amp;nbsp;이것은&amp;nbsp;단어를&amp;nbsp;추가해야&amp;nbsp;하는&amp;nbsp;부분적으로&amp;nbsp;채워진&amp;nbsp;목록입니다.&lt;br /&gt;이 코드는 putIfAbsent() 코드보다 훨씬 더 효율적입니다. 그 이유는 대부분 이 경우 필요한 경우에만 빈 목록이 생성되기 때문입니다. putIfAbsent() 호출에는 키가 맵에 없는 경우에만 사용되는 기존 빈 목록이 필요합니다. 맵에 추가하는 객체를 요청 시 생성해야 하는 경우 putIfAbsent()보다 ComputeIfAbsent()를 사용하는 것이 더 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;값 병합&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ComputeIfAbsent() 패턴은 에 다른 값의 집합인 값이 있는 경우 잘 작동합니다. 하지만 이 집계를 지원하는 구조에는 제한 사항이 있습니다. 즉, 변경이 가능해야 합니다. 이는 ArrayList의 경우이며 여러분이 작성한 코드는 다음과 같습니다. 즉, 값을 ArrayList에 추가합니다.&lt;br /&gt;&lt;br /&gt;단어&amp;nbsp;목록을&amp;nbsp;만드는&amp;nbsp;대신&amp;nbsp;단어&amp;nbsp;연결을&amp;nbsp;만들어야&amp;nbsp;한다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;여기서&amp;nbsp;String&amp;nbsp;클래스는&amp;nbsp;다른&amp;nbsp;문자열의&amp;nbsp;집합으로&amp;nbsp;표시되지만&amp;nbsp;변경&amp;nbsp;가능한&amp;nbsp;컨테이너는&amp;nbsp;아닙니다.&amp;nbsp;이를&amp;nbsp;수행하기&amp;nbsp;위해&amp;nbsp;ComputeIfAbsent()&amp;nbsp;패턴을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다.&lt;br /&gt;&lt;br /&gt;이것이&amp;nbsp;merge()&amp;nbsp;패턴이&amp;nbsp;구출되는&amp;nbsp;곳입니다.&amp;nbsp;merge()&amp;nbsp;메서드는&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;인수를&amp;nbsp;사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;키&amp;nbsp;&lt;/li&gt;
&lt;li&gt;해당&amp;nbsp;키에&amp;nbsp;바인딩해야&amp;nbsp;하는&amp;nbsp;값&lt;/li&gt;
&lt;li&gt;리매핑&amp;nbsp;BiFunction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키가&amp;nbsp;맵에&amp;nbsp;없거나&amp;nbsp;null&amp;nbsp;값에&amp;nbsp;바인딩된&amp;nbsp;경우&amp;nbsp;값은&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩됩니다.&amp;nbsp;이&amp;nbsp;경우에는&amp;nbsp;재매핑&amp;nbsp;함수가&amp;nbsp;호출되지&amp;nbsp;않습니다.&lt;br /&gt;&lt;br /&gt;반대로&amp;nbsp;키가&amp;nbsp;이미&amp;nbsp;null이&amp;nbsp;아닌&amp;nbsp;값에&amp;nbsp;바인딩된&amp;nbsp;경우&amp;nbsp;기존&amp;nbsp;값을&amp;nbsp;사용하여&amp;nbsp;다시&amp;nbsp;매핑&amp;nbsp;함수가&amp;nbsp;호출되고&amp;nbsp;새&amp;nbsp;값이&amp;nbsp;인수로&amp;nbsp;전달됩니다.&amp;nbsp;이&amp;nbsp;재매핑&amp;nbsp;함수가&amp;nbsp;null을&amp;nbsp;반환하면&amp;nbsp;키가&amp;nbsp;맵에서&amp;nbsp;제거됩니다.&amp;nbsp;그렇지&amp;nbsp;않으면&amp;nbsp;생성된&amp;nbsp;값이&amp;nbsp;해당&amp;nbsp;키에&amp;nbsp;바인딩됩니다.&lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;예제에서&amp;nbsp;이&amp;nbsp;merge()&amp;nbsp;패턴이&amp;nbsp;실제로&amp;nbsp;작동하는&amp;nbsp;것을&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694759677635&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings = List.of(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;);
Map&amp;lt;Integer, String&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
for (String word: strings) {
    int length = word.length();
    map.merge(length, word, 
              (existingValue, newWord) -&amp;gt; existingValue + &quot;, &quot; + newWord);
}

map.forEach((key, value) -&amp;gt; System.out.println(key + &quot; :: &quot; + value));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 길이 키가 맵에 없으면 merge() 호출은 이를 추가하고 단어에 바인딩합니다. 반면, 길이 키가 이미 맵에 있으면 기존 값과 단어를 사용하여 이중 함수가 호출됩니다. 그런 다음 이중 함수의 결과가 현재 값을 대체합니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;코드를&amp;nbsp;실행하면&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;결과가&amp;nbsp;생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694759814435&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3 :: one, two, six
4 :: four, five
5 :: three, seven&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 패턴(computeIfAbsent() 및 merge())에서 생성된 람다가 이 람다의 컨텍스트에서 항상 사용할 수 있고 해당 컨텍스트에서 캡처할 수 있는 인수를 취하는 이유가 궁금할 수 있습니다. 대답은 다음과 같습니다. 성능상의 이유로 캡처하는 람다보다 캡처하지 않는 람다를 선호해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>lambda</category>
      <category>Map</category>
      <category>람다</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/11</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D%EC%9C%BC%EB%A1%9C-Map-%EA%B0%92-%EC%B2%98%EB%A6%AC-Handling-Map-Values-with-Lambda-Expressions#entry11comment</comments>
      <pubDate>Fri, 15 Sep 2023 15:38:33 +0900</pubDate>
    </item>
    <item>
      <title>Comparator 작성 및 결합 (Writing and Combining Comparators)</title>
      <link>https://i-dreamers.tistory.com/entry/Comparator-%EC%9E%91%EC%84%B1-%EB%B0%8F-%EA%B2%B0%ED%95%A9-Writing-and-Combining-Comparators</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;원문 : &lt;a href=&quot;https://dev.java/learn/lambdas/writing-comparators/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/writing-comparators/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694589456142&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Writing and Combining Comparators - Dev.java&quot; data-og-description=&quot;Creating and Combining Comparators Using Lambda Expressions.&quot; data-og-host=&quot;dev.java&quot; data-og-source-url=&quot;https://dev.java/learn/lambdas/writing-comparators/&quot; data-og-url=&quot;https://dev.java/learn/lambdas/writing-comparators/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wljOj/hyTSyh689z/XKJ6Br5zO8gGx8FVSRK121/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/bJqNfT/hyTSwR71UX/Uu14iswIy1ySZDW0P7jBk0/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224&quot;&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/writing-comparators/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.java/learn/lambdas/writing-comparators/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wljOj/hyTSyh689z/XKJ6Br5zO8gGx8FVSRK121/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/bJqNfT/hyTSwR71UX/Uu14iswIy1ySZDW0P7jBk0/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Writing and Combining Comparators - Dev.java&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Creating and Combining Comparators Using Lambda Expressions.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.java&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;람다 표현식으로 Comparator 구현&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Functional Interface의 정의 덕분에 JDK 2에 도입된 기존의 Comparator&amp;lt;T&amp;gt; 인터페이스가 Functional Interface가 되었습니다. 따라서 Comparator 구현은 람다 식을 사용하여 수행할 수 있습니다.&lt;br /&gt;&lt;br /&gt;Comparator&amp;lt;T&amp;gt;&amp;nbsp;인터페이스의&amp;nbsp;유일한&amp;nbsp;추상&amp;nbsp;메서드는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694589665012&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Comparator&amp;lt;T&amp;gt; {

    int compare(T o1, T o2);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Comparator&lt;/span&gt;의 규칙은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;o1 &amp;lt; o2이면 Compare(o1, o2)는 음수를 반환해야 합니다.&lt;/li&gt;
&lt;li&gt;o1&amp;nbsp;&amp;gt;&amp;nbsp;o2이면&amp;nbsp;비교(o1,&amp;nbsp;o2)는&amp;nbsp;양수를&amp;nbsp;반환해야&amp;nbsp;합니다.&lt;/li&gt;
&lt;li&gt;모든&amp;nbsp;경우에,&amp;nbsp;Compare(o1,&amp;nbsp;o2)와&amp;nbsp;Compare(o2,&amp;nbsp;o1)은&amp;nbsp;반대&amp;nbsp;부호를&amp;nbsp;가져야&amp;nbsp;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;o1.equals(o2)가 true인 경우 o1과 o2의 비교가 0을 반환한다는 것이 엄격히 요구되는 것은 아닙니다.&lt;br /&gt;&lt;br /&gt;자연 순서를 구현하는 정수 Comparator를 어떻게 만들 수 있습니까? 이 튜토리얼의 시작 부분에서 본 방법을 사용하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694589886319&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Integer&amp;gt; comparator = (i1, i2) -&amp;gt; Integer.compare(i1, i2);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 람다 표현식은 다음과 같은 방식으로 아주 좋은 바인딩된 메서드 참조로 작성될 수도 있다는 것을 알아차렸을 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694590001708&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Integer&amp;gt; comparator = Integer::compare;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(i1 - i2)를 사용하여 이 Comparator를 구현하지 마십시오. 이 패턴이 작동하는 것처럼 보이더라도 올바른 결과가 나오지 않는 경우가 있습니다.&lt;br /&gt;&lt;br /&gt;이 패턴은 Comparator의 규칙을 따르는 한 비교해야 하는 모든 항목으로 확장될 수 있습니다.&lt;br /&gt;&lt;br /&gt;Comparator API는 훨씬 더 읽기 쉬운 방식으로 Comparator를 생성하는 데 매우 유용한 API를 제공함으로써 한 단계 더 발전했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Factory Method를 사용하여 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Comparator&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;생성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비자연적인&amp;nbsp;방식으로&amp;nbsp;문자열을&amp;nbsp;비교하기&amp;nbsp;위해&amp;nbsp;비교기를&amp;nbsp;만들어야&amp;nbsp;한다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;즉,&amp;nbsp;가장&amp;nbsp;짧은&amp;nbsp;문자열이&amp;nbsp;가장&amp;nbsp;긴&amp;nbsp;문자열보다&amp;nbsp;작습니다.&lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;비교기는&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694590335046&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;String&amp;gt; comparator =
        (s1, s2) -&amp;gt; Integer.compare(s1.length(), s2.length());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 부분에서 람다 표현식을 연결하고 구성하는 것이 가능하다는 것을 배웠습니다. 이 코드는 그러한 구성의 또 다른 예입니다. 실제로 다음과 같이 다시 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694590702322&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, Integer&amp;gt; toLength = String::length;
Comparator&amp;lt;String&amp;gt; comparator =
        (s1, s2) -&amp;gt; Integer.compare(
                toLength.apply(s1),
                toLength.apply(s2));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 비교기의 코드는 toLength라는 함수에만 의존한다는 것을 알 수 있습니다. 따라서 이 함수를 인수로 사용하고 해당 Comparator&amp;lt;String&amp;gt;을 반환하는 팩토리 메서드를 만드는 것이 가능해졌습니다.&lt;br /&gt;&lt;br /&gt;toLength&amp;nbsp;함수의&amp;nbsp;반환&amp;nbsp;유형에는&amp;nbsp;여전히&amp;nbsp;제약이&amp;nbsp;있습니다.&amp;nbsp;즉,&amp;nbsp;비교할&amp;nbsp;수&amp;nbsp;있어야&amp;nbsp;합니다.&amp;nbsp;여기서는&amp;nbsp;항상&amp;nbsp;정수를&amp;nbsp;자연&amp;nbsp;순서와&amp;nbsp;비교할&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;잘&amp;nbsp;작동하지만&amp;nbsp;이를&amp;nbsp;명심해야&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;팩토리&amp;nbsp;메소드는&amp;nbsp;JDK에&amp;nbsp;존재하며&amp;nbsp;Comparator&amp;nbsp;인터페이스에&amp;nbsp;직접&amp;nbsp;추가되었습니다.&amp;nbsp;따라서&amp;nbsp;이전&amp;nbsp;코드를&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694590782485&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;String&amp;gt; comparator = Comparator.comparing(String::length);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 comparing() 메서드는 Comparator 인터페이스의 static 메서드입니다. Comparable의 확장인 유형을 반환해야 하는 함수를 인수로 사용합니다.&lt;br /&gt;&lt;br /&gt;getName() getter가 있는 User 클래스가 있고 이름에 따라 사용자 목록을 정렬해야 한다고 가정합니다. 작성해야 하는 코드는 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694590806907&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;User&amp;gt; users = ...; // this is your list
Comparator&amp;lt;User&amp;gt; byName = Comparator.comparing(User::getName);
users.sort(byName);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Comparator 연결&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;귀하가&amp;nbsp;근무하고&amp;nbsp;있는&amp;nbsp;회사는&amp;nbsp;현재&amp;nbsp;귀하가&amp;nbsp;제공한&amp;nbsp;Comparable&amp;lt;User&amp;gt;에&amp;nbsp;매우&amp;nbsp;만족하고&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;버전&amp;nbsp;2에는&amp;nbsp;새로운&amp;nbsp;요구&amp;nbsp;사항이&amp;nbsp;있습니다.&amp;nbsp;이제&amp;nbsp;User&amp;nbsp;클래스에는&amp;nbsp;firstName과&amp;nbsp;lastName이&amp;nbsp;있으며&amp;nbsp;이&amp;nbsp;변경&amp;nbsp;사항을&amp;nbsp;처리하려면&amp;nbsp;새&amp;nbsp;Comparator를&amp;nbsp;생성해야&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;각 Comparator를 작성하는 것은 이전 Comparator와 동일한 패턴을 따릅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694591656379&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;User&amp;gt; byFirstName = Comparator.comparing(User::getFirstName);
Comparator&amp;lt;User&amp;gt; byLastName = Comparator.comparing(User::getLastName);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 필요한 것은 Predicate 또는 Consumer의 인스턴스를 연결한 것처럼 이들을 연결하는 방법입니다. Comparator API는 이를 수행하는 솔루션을 제공합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694591732699&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;User&amp;gt; byFirstNameThenLastName =
        byFirstName.thenComparing(byLastName);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;thenComparing() 메서드는 Comparator 인터페이스의 기본 메서드로, 다른 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Comparator&lt;/span&gt;를 인수로 사용하고 새 Comparator를 반환합니다. 두 명의 사용자에게 적용될 때 Comparator는 먼저 byFirstName Comparator를 사용하여 이러한 사용자를 비교합니다. 결과가 0이면 byLastName Comparator를 사용하여 비교합니다. 간단히 말해서 예상대로 작동합니다.&lt;br /&gt;&lt;br /&gt;Comparator&amp;nbsp;API는&amp;nbsp;한&amp;nbsp;단계&amp;nbsp;더&amp;nbsp;발전했습니다.&amp;nbsp;byLastName은&amp;nbsp;User::getLastName&amp;nbsp;함수에만&amp;nbsp;의존하기&amp;nbsp;때문에&amp;nbsp;thenComparing()&amp;nbsp;메서드의&amp;nbsp;오버로드가&amp;nbsp;이&amp;nbsp;함수를&amp;nbsp;인수로&amp;nbsp;사용하는&amp;nbsp;API에&amp;nbsp;추가되었습니다.&amp;nbsp;따라서&amp;nbsp;패턴은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694592078805&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;User&amp;gt; byFirstNameThenLastName =
        Comparator.comparing(User::getFirstName)
                  .thenComparing(User::getLastName);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 식, 메서드 참조, 연결 및 구성을 사용하면 Comparator&amp;nbsp;를 만드는 것이 그 어느 때보다 쉬워졌습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;특수 Comparator&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;박싱(boxing) 및 언박싱(unboxing) 또는 기본 유형도 Comparator에서 발생할 수 있으며, 이로 인해 java.util.function 패키지의 Functional Interface의 경우와 동일한 성능 저하가 발생합니다. 이 문제를 해결하기 위해 Compare() 팩토리 메서드와 thenComparing() 기본 메서드의 특수 버전이 추가되었습니다.&lt;br /&gt;&lt;br /&gt;다음을&amp;nbsp;사용하여&amp;nbsp;Comparator&amp;lt;T&amp;gt;의&amp;nbsp;인스턴스를&amp;nbsp;만들&amp;nbsp;수도&amp;nbsp;있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#comparingInt(java.util.function.ToIntFunction)&quot;&gt;comparingInt(ToIntFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#comparingLong(java.util.function.ToLongFunction)&quot;&gt;comparingLong(ToLongFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#comparingDouble(java.util.function.ToDoubleFunction)&quot;&gt;comparingDouble(ToDoubleFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 유형인 속성을 사용하여 객체를 비교해야 하고 이 기본 유형의 박싱/언박싱을 피해야 하는 경우 이러한 방법을 사용합니다.&lt;br /&gt;&lt;br /&gt;Comparator&amp;lt;T&amp;gt;를&amp;nbsp;연결하는&amp;nbsp;해당&amp;nbsp;메서드도&amp;nbsp;있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#thenComparingInt(java.util.function.ToIntFunction)&quot;&gt;thenComparingInt(ToIntFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#thenComparingLong(java.util.function.ToLongFunction)&quot;&gt;thenComparingLong(ToLongFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Comparator.html#thenComparingDouble(java.util.function.ToDoubleFunction)&quot;&gt;thenComparingDouble(ToDoubleFunction&amp;lt;T&amp;gt; keyExtractor)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디어는 동일합니다. 이러한 메서드를 사용하면 박싱/언박싱으로 인한 성능 저하 없이 기본 유형을 반환하는 특수 함수를 기반으로 구축된 Comparator와 비교를 연결할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;자연 순서를 사용하여 Comparable Object 비교&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 튜토리얼에는 간단한 Comparator를 만드는 데 도움이 되는 몇 가지 언급할 가치가 있는 팩토리 메서드가 있습니다.&lt;br /&gt;&lt;br /&gt;JDK와&amp;nbsp;아마도&amp;nbsp;애플리케이션의&amp;nbsp;많은&amp;nbsp;클래스도&amp;nbsp;JDK의&amp;nbsp;특수&amp;nbsp;인터페이스인&amp;nbsp;Comparable&amp;lt;T&amp;gt;&amp;nbsp;인터페이스를&amp;nbsp;구현하고&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;인터페이스에는&amp;nbsp;int를&amp;nbsp;반환하는&amp;nbsp;CompareTo(T&amp;nbsp;other)&amp;nbsp;메서드가&amp;nbsp;하나&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;메서드는&amp;nbsp;Comparator&amp;lt;T&amp;gt;&amp;nbsp;인터페이스의&amp;nbsp;계약에&amp;nbsp;따라&amp;nbsp;T의&amp;nbsp;이&amp;nbsp;인스턴스를&amp;nbsp;다른&amp;nbsp;인스턴스와&amp;nbsp;비교하는&amp;nbsp;데&amp;nbsp;사용됩니다.&lt;br /&gt;&lt;br /&gt;JDK의&amp;nbsp;많은&amp;nbsp;클래스가&amp;nbsp;이미&amp;nbsp;이&amp;nbsp;인터페이스를&amp;nbsp;구현하고&amp;nbsp;있습니다.&amp;nbsp;이는&amp;nbsp;기본&amp;nbsp;유형(Integer,&amp;nbsp;Long&amp;nbsp;등)의&amp;nbsp;모든&amp;nbsp;래퍼&amp;nbsp;클래스,&amp;nbsp;String&amp;nbsp;클래스,&amp;nbsp;Date&amp;nbsp;및&amp;nbsp;Time&amp;nbsp;API의&amp;nbsp;날짜&amp;nbsp;및&amp;nbsp;시간&amp;nbsp;클래스에&amp;nbsp;해당됩니다.&lt;br /&gt;&lt;br /&gt;자연 순서, 즉 이 CompareTo() 메서드를 사용하여 이러한 클래스의 인스턴스를 비교할 수 있습니다. Comparator API는 Comparator.naturalOrder() 팩토리 클래스를 제공합니다. 이것이 구축하는 Comparator는 정확히 그 일을 합니다. 즉, CompareTo() 메서드를 사용하여 모든 Comparable 객체를 비교합니다.&lt;br /&gt;&lt;br /&gt;이러한 팩토리 메서드를 사용하면 Comparator를 연결해야 할 때 매우 유용할 수 있습니다. 다음은 문자열을 길이와 자연 순서와 비교하려는 예입니다(이 예에서는 가독성을 더욱 높이기 위해 naturalOrder() 메서드에 대한 정적 가져오기를 사용합니다).&lt;/p&gt;
&lt;pre id=&quot;code_1694593546507&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;String&amp;gt; byLengthThenAlphabetically =
        Comparator.comparing(String::length)
                  .thenComparing(naturalOrder());
List&amp;lt;String&amp;gt; strings = Arrays.asList(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;);
strings.sort(byLengthThenAlphabetically);
System.out.println(strings);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 다음과 같은 결과가 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694593658118&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[one, two, five, four, three]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Comparator 반전&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Comparator의 주요 용도 중 하나는 물론 객체 목록을 정렬하는 것입니다. JDK 8에서는 특히 이를 위해 List 인터페이스에 List.sort() 메서드가 추가되었습니다. 이 메서드는 비교기를 인수로 사용합니다.&lt;br /&gt;&lt;br /&gt;이전 목록을 역순으로 정렬해야 하는 경우 Comparator 인터페이스의 reversed() 메서드를 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594017739&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings =
        Arrays.asList(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;);
strings.sort(byLengthThenAlphabetically.reversed());
System.out.println(strings);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 다음과 같은 결과가 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594036604&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[three, four, five, two, one]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Null 값 처리&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null 개체를 비교하면 코드를 실행하는 동안 NullPointerException이 발생할 수 있습니다. 이는 피하고 싶은 일입니다.&lt;br /&gt;&lt;br /&gt;정수 목록을 정렬하기 위해 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;null-safe 정수&lt;/span&gt;&amp;nbsp;Comparator를 작성해야 한다고 가정해 보겠습니다. 따르기로 결정한 규칙은 모든 null 값을 목록 끝에 푸시하는 것입니다. 즉, null 값은 null이 아닌 다른 값보다 큽니다. 그런 다음 null이 아닌 값을 자연 순서로 정렬하려고 합니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;동작을&amp;nbsp;구현하기&amp;nbsp;위해&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;코드&amp;nbsp;종류는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594097234&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Integer&amp;gt; comparator =
        (i1, i2) -&amp;gt; {
            if (i1 == null &amp;amp;&amp;amp; i1 != null) {
                return 1;
            } else if (i1 != null &amp;amp;&amp;amp; i2 == null) {
                return -1;
            } else {
                return Integer.compare(i1, i2);
            }
        };&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 이 부분의 시작 부분에서 작성한 첫 번째 비교기와 비교할 수 있으며 가독성이 큰 타격을 입었다는 것을 알 수 있습니다.&lt;br /&gt;&lt;br /&gt;다행히도&amp;nbsp;Comparator&amp;nbsp;인터페이스의&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;팩토리&amp;nbsp;메서드를&amp;nbsp;사용하여&amp;nbsp;이&amp;nbsp;비교기를&amp;nbsp;작성하는&amp;nbsp;훨씬&amp;nbsp;쉬운&amp;nbsp;방법이&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594129212&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Comparator&amp;lt;Integer&amp;gt; naturalOrder = Comparator.naturalOrder();

Comparator&amp;lt;Integer&amp;gt; naturalOrderNullsLast =
        Comparator.nullsLast(naturalOrder());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nullsLast() 및 그 형제 메소드인 nullsFirst()는 Comparator 인터페이스의 팩토리 메소드입니다. 둘 다 비교기를 인수로 사용하여 그 작업을 수행합니다. 즉, null 값을 처리하고, 끝까지 푸시하거나, 정렬된 목록의 첫 번째에 배치합니다.&lt;br /&gt;&lt;br /&gt;예는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594155608&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings =
        Arrays.asList(&quot;one&quot;, null, &quot;two&quot;, &quot;three&quot;, null, null, &quot;four&quot;, &quot;five&quot;);
Comparator&amp;lt;String&amp;gt; naturalNullsLast =
        Comparator.nullsLast(naturalOrder());
strings.sort(naturalNullsLast);
System.out.println(strings);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 다음과 같은 결과가 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694594179434&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[five, four, one, three, two, null, null, null]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>Comparator</category>
      <category>lambda</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/10</guid>
      <comments>https://i-dreamers.tistory.com/entry/Comparator-%EC%9E%91%EC%84%B1-%EB%B0%8F-%EA%B2%B0%ED%95%A9-Writing-and-Combining-Comparators#entry10comment</comments>
      <pubDate>Wed, 13 Sep 2023 18:13:32 +0900</pubDate>
    </item>
    <item>
      <title>람다 표현식 결합 (Combining Lambda Expressions)</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EA%B2%B0%ED%95%A9-Combining-Lambda-Expressions</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;원문 : &lt;a href=&quot;https://dev.java/learn/lambdas/combining-chaining-composing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/combining-chaining-composing/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694585808766&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Combining Lambda Expressions - Dev.java&quot; data-og-description=&quot;Using Default and Static Methods to Combine and Create Lambdas.&quot; data-og-host=&quot;dev.java&quot; data-og-source-url=&quot;https://dev.java/learn/lambdas/combining-chaining-composing/&quot; data-og-url=&quot;https://dev.java/learn/lambdas/combining-chaining-composing/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/I4kCu/hyTVUw1Osa/DJtht1lRc0CYeGSnOreJ7k/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/cRsoGV/hyTSuNv8uH/HyaRkDVywp2fRxLQgnKtj1/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224&quot;&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/combining-chaining-composing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.java/learn/lambdas/combining-chaining-composing/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/I4kCu/hyTVUw1Osa/DJtht1lRc0CYeGSnOreJ7k/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/cRsoGV/hyTSuNv8uH/HyaRkDVywp2fRxLQgnKtj1/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Combining Lambda Expressions - Dev.java&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Using Default and Static Methods to Combine and Create Lambdas.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.java&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;java.util.function 패키지의 F&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;unctional Interface&lt;/span&gt;에 Default Method가 있다는 것을 알아차렸을 것입니다. 이러한 메서드는 람다 식의 조합 및 연결을 허용하기 위해 추가되었습니다.&lt;br /&gt;&lt;br /&gt;왜&amp;nbsp;그런&amp;nbsp;일을&amp;nbsp;하겠습니까?&amp;nbsp;더&amp;nbsp;간단하고&amp;nbsp;읽기&amp;nbsp;쉬운&amp;nbsp;코드를&amp;nbsp;작성하는&amp;nbsp;데&amp;nbsp;도움이&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Default Method를 사용하여 Predicate 연결&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null이 아니고, 비어 있지 않고, 5자보다 짧은 문자열만 유지하기 위해 문자열 목록을 처리해야 한다고 가정해 보겠습니다. 이 문제를 기술하는 방식은 다음과 같습니다. 특정 문자열에 대해 세 가지 테스트가 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;non-null;&lt;/li&gt;
&lt;li&gt;non-empty;&lt;/li&gt;
&lt;li&gt;shorter than 5 characters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한&amp;nbsp;각&amp;nbsp;테스트는&amp;nbsp;매우&amp;nbsp;간단한&amp;nbsp;한&amp;nbsp;줄의&amp;nbsp;조건자로&amp;nbsp;쉽게&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;테스트를&amp;nbsp;하나의&amp;nbsp;단일&amp;nbsp;조건자로&amp;nbsp;결합하는&amp;nbsp;것도&amp;nbsp;가능합니다.&amp;nbsp;다음&amp;nbsp;코드와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694586122571&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; p = s -&amp;gt; (s != null) &amp;amp;&amp;amp; !s.isEmpty() &amp;amp;&amp;amp; s.length() &amp;lt; 5;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 JDK에서는 다음과 같은 방식으로 코드를 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694586148707&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; nonNull = s -&amp;gt; s != null;
Predicate&amp;lt;String&amp;gt; nonEmpty = s -&amp;gt; s.isEmpty();
Predicate&amp;lt;String&amp;gt; shorterThan5 = s -&amp;gt; s.length() &amp;lt; 5;

Predicate&amp;lt;String&amp;gt; p = nonNull.and(nonEmpty).and(shorterThan5);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술적인 복잡성을 숨기고 코드의 의도를 드러내는 것이 람다 식을 결합하는 것입니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;코드는&amp;nbsp;API&amp;nbsp;수준에서&amp;nbsp;어떻게&amp;nbsp;구현됩니까?&amp;nbsp;세부&amp;nbsp;사항을&amp;nbsp;너무&amp;nbsp;깊이&amp;nbsp;파고들지&amp;nbsp;않고도&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;내용은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;and()는 메소드입니다&lt;/li&gt;
&lt;li&gt;Predicate&amp;lt;T&amp;gt;의&amp;nbsp;인스턴스에서&amp;nbsp;호출됩니다.&amp;nbsp;따라서&amp;nbsp;인스턴스&amp;nbsp;메서드입니다.&lt;/li&gt;
&lt;li&gt;또&amp;nbsp;다른&amp;nbsp;Predicate&amp;lt;T&amp;gt;를&amp;nbsp;인수로&amp;nbsp;사용합니다.&lt;/li&gt;
&lt;li&gt;Predicate&amp;lt;T&amp;gt;를&amp;nbsp;반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;unctional Interface&lt;/span&gt;에는 하나의 추상 메서드만 허용되므로 이 and() 메서드가 기본 메서드여야 합니다. 따라서 API 설계 관점에서 볼 때 이 메서드를 만드는 데 필요한 모든 요소가 있습니다. 좋은 소식은 Predicate&amp;lt;T&amp;gt; 인터페이스에는 and() 기본 메서드가 있으므로 직접 작성할 필요가 없다는 것입니다.&lt;br /&gt;&lt;br /&gt;그런데 다른 Predicate를 인수로 취하는 or() 메소드도 있고, 아무것도 취하지 않는 negate() 메소드도 있습니다.&lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;사용하여&amp;nbsp;이전&amp;nbsp;예제를&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694586475226&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; isNull = Objects::isNull;
Predicate&amp;lt;String&amp;gt; isEmpty = String::isEmpty;
Predicate&amp;lt;String&amp;gt; isNullOrEmpty = isNull.or(isEmpty);
Predicate&amp;lt;String&amp;gt; isNotNullNorEmpty = isNullOrEmpty.negate();
Predicate&amp;lt;String&amp;gt; shorterThan5 = s -&amp;gt; s.length() &amp;lt; 5;

Predicate&amp;lt;String&amp;gt; p = isNotNullNorEmpty.and(shorterThan5);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 예제가 한계를 조금 넘어서더라도 메소드 참조와 기본 메소드를 활용하여 코드의 표현력을 극적으로 향상시킬 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Factory Method를 사용하여 Predicate 생성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;unctional Interface&lt;/span&gt;에 정의된 팩토리 메서드를 사용하면 표현력을 한 단계 더 높일 수 있습니다. Predicate&amp;lt;T&amp;gt; 인터페이스에는 두 가지가 있습니다.&lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;예에서&amp;nbsp;isEqualToDuke&amp;nbsp;조건자는&amp;nbsp;문자열을&amp;nbsp;테스트합니다.&amp;nbsp;테스트된&amp;nbsp;문자열이&amp;nbsp;&quot;Duke&quot;와&amp;nbsp;같을&amp;nbsp;때&amp;nbsp;테스트는&amp;nbsp;참입니다.&amp;nbsp;이&amp;nbsp;팩토리&amp;nbsp;메소드는&amp;nbsp;모든&amp;nbsp;유형의&amp;nbsp;객체에&amp;nbsp;대한&amp;nbsp;조건자를&amp;nbsp;생성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694587131154&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; isEqualToDuke = Predicate.isEqual(&quot;Duke&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 팩토리 메서드는 인수로 제공된 조건자를 부정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694587149340&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;Collection&amp;lt;String&amp;gt;&amp;gt; isEmpty = Collection::isEmpty;
Predicate&amp;lt;Collection&amp;lt;String&amp;gt;&amp;gt; isNotEmpty = Predicate.not(isEmpty);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Default Method를 사용하여 Consumer 연결&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consumer&amp;lt;T&amp;gt; 인터페이스에는 Consumer를 연결하는 방법도 있습니다. 다음 패턴을 사용하여 Consumer를 연결할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694587312328&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Logger logger = Logger.getLogger(&quot;MyApplicationLogger&quot;);
Consumer&amp;lt;String&amp;gt; log = message -&amp;gt; logger.info(message);
Consumer&amp;lt;String&amp;gt; print = message -&amp;gt; System.out.println(message);

Consumer&amp;lt;String&amp;gt; printAndLog = log.andThen(print);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 예에서 printAndLog는 먼저 메시지를 log Consumer에게 전달한 다음 이를 print Consumer에게 전달하는 소비자입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Default Method를 사용하여 Function 연결 및 구성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결과&amp;nbsp;구성의&amp;nbsp;차이는&amp;nbsp;약간&amp;nbsp;미묘합니다.&amp;nbsp;두&amp;nbsp;작업의&amp;nbsp;결과는&amp;nbsp;실제로&amp;nbsp;동일합니다.&amp;nbsp;다른&amp;nbsp;점은&amp;nbsp;쓰는&amp;nbsp;방식입니다.&lt;br /&gt;&lt;br /&gt;f1과&amp;nbsp;f2라는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;함수가&amp;nbsp;있다고&amp;nbsp;가정합니다.&amp;nbsp;[f1.andThen(f2)를&amp;nbsp;호출하여&amp;nbsp;연결할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;결과&amp;nbsp;함수를&amp;nbsp;객체에&amp;nbsp;적용하면&amp;nbsp;먼저&amp;nbsp;이&amp;nbsp;객체를&amp;nbsp;f1에&amp;nbsp;전달하고&amp;nbsp;결과를&amp;nbsp;f2에&amp;nbsp;전달합니다.&lt;br /&gt;&lt;br /&gt;Function&amp;nbsp;인터페이스에는&amp;nbsp;f2.compose(f1)라는&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;기본&amp;nbsp;메서드가&amp;nbsp;있습니다.&amp;nbsp;이런&amp;nbsp;방식으로&amp;nbsp;작성된&amp;nbsp;결과&amp;nbsp;함수는&amp;nbsp;먼저&amp;nbsp;객체를&amp;nbsp;f1&amp;nbsp;함수에&amp;nbsp;전달하여&amp;nbsp;객체를&amp;nbsp;처리한&amp;nbsp;다음&amp;nbsp;결과를&amp;nbsp;f2에&amp;nbsp;전달합니다.&lt;br /&gt;&lt;br /&gt;깨달아야&amp;nbsp;할&amp;nbsp;것은&amp;nbsp;동일한&amp;nbsp;결과&amp;nbsp;함수를&amp;nbsp;얻으려면&amp;nbsp;f1에서&amp;nbsp;andThen()을&amp;nbsp;호출하거나&amp;nbsp;f2에서&amp;nbsp;compose()를&amp;nbsp;호출해야&amp;nbsp;한다는&amp;nbsp;것입니다.&lt;br /&gt;&lt;br /&gt;다양한&amp;nbsp;유형의&amp;nbsp;기능을&amp;nbsp;연결하거나&amp;nbsp;구성할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;분명한&amp;nbsp;제한&amp;nbsp;사항이&amp;nbsp;있습니다.&amp;nbsp;f1에서&amp;nbsp;생성된&amp;nbsp;결과&amp;nbsp;유형은&amp;nbsp;f2에서&amp;nbsp;사용되는&amp;nbsp;유형과&amp;nbsp;호환되어야&amp;nbsp;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Identity Function&lt;/span&gt;&amp;nbsp;생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Function&amp;lt;T,&amp;nbsp;R&amp;gt;&amp;nbsp;인터페이스에는&amp;nbsp;ID()라는&amp;nbsp;ID&amp;nbsp;함수를&amp;nbsp;생성하는&amp;nbsp;팩토리&amp;nbsp;메서드도&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;따라서 다음과 같은 간단한 패턴을 사용하여 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Identity Function&lt;/span&gt;를 생성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694588009755&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, String&amp;gt; id = Function.identity();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 패턴은 모든 유효한 유형에 적용 가능합니다.&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>default method</category>
      <category>lambda</category>
      <category>람다</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/9</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EA%B2%B0%ED%95%A9-Combining-Lambda-Expressions#entry9comment</comments>
      <pubDate>Wed, 13 Sep 2023 15:54:14 +0900</pubDate>
    </item>
    <item>
      <title>메서드 참조로 람다 표현식 작성 (Writing Lambda Expressions as Method References)</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C-%EC%B0%B8%EC%A1%B0%EB%A1%9C-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%9E%91%EC%84%B1-Writing-Lambda-Expressions-as-Method-References</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;원문 : &lt;a href=&quot;https://dev.java/learn/lambdas/method-references/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/method-references/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694581831480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Writing Lambda Expressions as Method References - Dev.java&quot; data-og-description=&quot;Understanding Method References.&quot; data-og-host=&quot;dev.java&quot; data-og-source-url=&quot;https://dev.java/learn/lambdas/method-references/&quot; data-og-url=&quot;https://dev.java/learn/lambdas/method-references/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cQ5qqr/hyTV1bPGrD/pr2TbBYXrLzOoalPCTPOOK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/jyznQ/hyTVPoWc0s/kGvOxcv9w4xtTlM42V2njk/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224&quot;&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/method-references/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.java/learn/lambdas/method-references/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cQ5qqr/hyTV1bPGrD/pr2TbBYXrLzOoalPCTPOOK/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/jyznQ/hyTVPoWc0s/kGvOxcv9w4xtTlM42V2njk/img.png?width=424&amp;amp;height=224&amp;amp;face=0_0_424_224');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Writing Lambda Expressions as Method References - Dev.java&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Understanding Method References.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.java&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 식이 실제로는 Functional Interface의 유일한 추상 메서드인 메서드의 구현임을 확인했습니다. 때때로 사람들은 이러한 람다 표현식을 &quot;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;anonymous methods&lt;/span&gt;&quot;라고 부는데, 그 이유가 이름이 없고, 필드나 변수에 저장되고, 메서드나 변수에 인수로 전달할 수 있고, 생성자와 메서드에서 반환 될 수 있기 때문입니다.&lt;br /&gt;&lt;br /&gt;때로는 다른 곳에 정의된 특정 메서드를 호출하는 람다 식을 작성하는 경우도 있습니다. 그리고 실제로 다음 코드를 작성할 때 이미 해당 작업을 수행했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694582397762&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Consumer&amp;lt;String&amp;gt; printer = s -&amp;gt; System.out.println(s);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성된 이 람다 식은 System.out 개체에 정의된 println() 메서드에 대한 참조일 뿐입니다.&lt;br /&gt;&lt;br /&gt;이것이&amp;nbsp;메소드&amp;nbsp;참조&amp;nbsp;구문이&amp;nbsp;들어오는&amp;nbsp;곳입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;첫 번째 Method 참조&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때때로&amp;nbsp;람다&amp;nbsp;표현식은&amp;nbsp;기존&amp;nbsp;메서드에&amp;nbsp;대한&amp;nbsp;참조일&amp;nbsp;뿐입니다.&amp;nbsp;이&amp;nbsp;경우&amp;nbsp;메소드&amp;nbsp;참조로&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이전&amp;nbsp;코드는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;Consumer&amp;lt;String&amp;gt;&amp;nbsp;프린터&amp;nbsp;=&amp;nbsp;System.out::println;&lt;br /&gt;메서드&amp;nbsp;참조에는&amp;nbsp;네&amp;nbsp;가지&amp;nbsp;범주가&amp;nbsp;있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Static method references&lt;/li&gt;
&lt;li&gt;Bound method references&lt;/li&gt;
&lt;li&gt;Unbound method references&lt;/li&gt;
&lt;li&gt;Constructor method references&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프린터 Consumer는 바인딩되지 않은 메서드 참조 범주에 속합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의&amp;nbsp;경우&amp;nbsp;IDE는&amp;nbsp;특정&amp;nbsp;람다&amp;nbsp;표현식이&amp;nbsp;람다&amp;nbsp;표현식으로&amp;nbsp;작성될&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;알려줄&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;주저하지&amp;nbsp;말고&amp;nbsp;물어보세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Static Method 참조 작성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음&amp;nbsp;코드가&amp;nbsp;있다고&amp;nbsp;가정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694582806790&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DoubleUnaryOperator sqrt = a -&amp;gt; Math.sqrt(a);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 람다 표현식은 실제로 Static Method인 Math.sqrt()에 대한 참조입니다. 다음과 같은 방법으로 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694582868402&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DoubleUnaryOperator sqrt = Math::sqrt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 특정 메서드 참조는 정적 메서드를 참조하므로 Static Method 참조라고 합니다. Static Method 참조의 일반 구문은 RefType::staticMethod입니다.&lt;br /&gt;&lt;br /&gt;Static Method&amp;nbsp;참조는 두 개 이상의 인수를 사용할 수 있습니다. 다음 코드를 고려해보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1694583041956&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IntBinaryOperator max = (a, b) -&amp;gt; Integer.max(a, b);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 참조를 사용하여 다시 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583066315&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IntBinaryOperator max = Integer::max;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Unbound Method 참조 작성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;어떠한 인수도 취하지 않는 Method&lt;/b&gt;&lt;br /&gt;다음&amp;nbsp;코드가&amp;nbsp;있다고&amp;nbsp;가정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583340092&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, Integer&amp;gt; toLength = s -&amp;gt; s.length();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 ToIntFunction&amp;lt;T&amp;gt;으로 작성할 수 있습니다. 이는 String 클래스의 length() 메소드에 대한 참조일 뿐입니다. 따라서 메소드 참조로 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583469604&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, Integer&amp;gt; toLength = String::length;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구문은 실제로 정적 호출처럼 보이기 때문에 처음에는 혼란스러울 수 있습니다. 그러나 실제로는 그렇지 않습니다. length() 메서드는 String 클래스의 인스턴스 메서드입니다.&lt;br /&gt;&lt;br /&gt;이러한 메소드 참조를 사용하여 일반 Java Bean에서 모든 getter를 호출할 수 있습니다. getName()이 정의된 User 클래스가 있다고 가정합니다. 그렇다면, 다음 함수를 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583727091&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;User, String&amp;gt; getName = user -&amp;gt; user.getName();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 메소드 참조로:&lt;/p&gt;
&lt;pre id=&quot;code_1694583780252&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, Integer&amp;gt; toLength = User::getName;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;어떠한 인수도 취하지 않는 Method&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미&amp;nbsp;본&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;예는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583860338&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BiFunction&amp;lt;String, String, Integer&amp;gt; indexOf = (sentence, word) -&amp;gt; sentence.indexOf(word);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 람다는 실제로 String 클래스의 indexOf() 메서드에 대한 참조이므로 다음 메서드 참조로 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694583955119&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BiFunction&amp;lt;String, String, Integer&amp;gt; indexOf = String::indexOf;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구문은 꽤 간단한 String::length 또는 User::getName 예제보다 더 혼란스러워 보일 수 있습니다. 고전적인 방식으로 작성된 람다를 정신적으로 재구성하는 좋은 방법은 이 메서드 참조의 유형을 확인하는 것입니다. 그러면 이 람다가 취하는 인수가 제공됩니다.&lt;br /&gt;&lt;br /&gt;바인딩되지&amp;nbsp;않은&amp;nbsp;메서드&amp;nbsp;참조의&amp;nbsp;일반&amp;nbsp;구문은&amp;nbsp;다음과&amp;nbsp;같습니다.&amp;nbsp;RefType:instanceMethod,&amp;nbsp;여기서&amp;nbsp;RefType은&amp;nbsp;유형의&amp;nbsp;이름이고,&amp;nbsp;instanceMethod는&amp;nbsp;인스턴스&amp;nbsp;메서드의&amp;nbsp;이름입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Bound&amp;nbsp; 메서드 참조 작성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분이&amp;nbsp;본&amp;nbsp;메서드&amp;nbsp;참조의&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;예는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694584216992&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Consumer&amp;lt;String&amp;gt; printer = System.out::println;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 메서드 참조를 바인딩된 메서드 참조라고 합니다. 이 메서드 참조를 바인딩이라고 하는 이유는 메서드가 호출되는 개체가 메서드 참조 자체에 정의되어 있기 때문입니다. 따라서 이 호출은 메서드 참조에 지정된 개체에 바인딩됩니다.&lt;br /&gt;&lt;br /&gt;바인딩되지&amp;nbsp;않은&amp;nbsp;구문인&amp;nbsp;Person::getName을&amp;nbsp;고려하면&amp;nbsp;메서드가&amp;nbsp;호출되는&amp;nbsp;개체가&amp;nbsp;이&amp;nbsp;구문의&amp;nbsp;일부가&amp;nbsp;아니며&amp;nbsp;람다&amp;nbsp;식의&amp;nbsp;인수로&amp;nbsp;제공된다는&amp;nbsp;것을&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;다음&amp;nbsp;코드를&amp;nbsp;고려해보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1694584370559&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;User, String&amp;gt; getName = User::getName;
User anna = new User(&quot;Anna&quot;);
String name = getName.apply(anna);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수에 전달된 User의 특정 인스턴스에 함수가 적용되는 것을 볼 수 있습니다. 그런 다음 이 함수는 해당 인스턴스에서 작동합니다.&lt;br /&gt;&lt;br /&gt;이전 Consumer 예제에서는 그렇지 않습니다. println() 메서드는 메서드 참조의 일부인 System.out 개체에서 호출됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바인딩된&amp;nbsp;메서드&amp;nbsp;참조의&amp;nbsp;일반&amp;nbsp;구문은&amp;nbsp;다음과&amp;nbsp;같습니다:&amp;nbsp;expr:instanceMethod.&amp;nbsp;여기서&amp;nbsp;expr은&amp;nbsp;객체를&amp;nbsp;반환하는&amp;nbsp;표현식이고,&amp;nbsp;instanceMethod는&amp;nbsp;인스턴스&amp;nbsp;메서드의&amp;nbsp;이름입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;생성자 메서드 참조 작성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알아야&amp;nbsp;할&amp;nbsp;마지막&amp;nbsp;메소드&amp;nbsp;참조&amp;nbsp;유형은&amp;nbsp;생성자&amp;nbsp;메소드&amp;nbsp;참조입니다.&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;Supply&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;이&amp;nbsp;있다고&amp;nbsp;가정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694584762883&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Supplier&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; newListOfStrings = () -&amp;gt; new ArrayList&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 부분과 동일한 방식으로 이를 볼 수 있습니다. 이는 결국 ArrayList의 빈 생성자에 대한 참조로 귀결됩니다. 음, 메서드 참조가 그렇게 할 수 있습니다. 그러나 생성자는 메서드가 아니므로 이는 메서드 참조의 또 다른 범주에 속합니다. 구문은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694584887161&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Supplier&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; newListOfStrings = ArrayList::new;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 다이아몬드 연산자가 필요하지 않음을 알 수 있습니다. 이를 넣으려면 유형도 제공해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694584937337&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Supplier&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; newListOfStrings = ArrayList&amp;lt;String&amp;gt;::new;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 참조의 유형을 모르면 그것이 정확히 무엇을 하는지 알 수 없다는 사실을 알아야 합니다. 예는 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694584958644&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Supplier&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; newListOfStrings = () -&amp;gt; new ArrayList&amp;lt;&amp;gt;();
Function&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; newListOfNStrings = size -&amp;gt; new ArrayList&amp;lt;&amp;gt;(size);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;newListOfStrings 및 newListOfNStrings 변수는 모두 동일한 구문 ArrayList::new로 작성할 수 있지만 동일한 생성자를 참조하지는 않습니다. 그것만 조심하면 됩니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;마무리 메소드 참조&lt;br /&gt;다음은&amp;nbsp;네&amp;nbsp;가지&amp;nbsp;유형의&amp;nbsp;메소드&amp;nbsp;참조입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckseqy/btstX79UGjz/tmS8F1YQQb932XoDuTc9Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckseqy/btstX79UGjz/tmS8F1YQQb932XoDuTc9Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckseqy/btstX79UGjz/tmS8F1YQQb932XoDuTc9Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckseqy%2FbtstX79UGjz%2FtmS8F1YQQb932XoDuTc9Ck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1168&quot; height=&quot;373&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>lambda</category>
      <category>Method Reference</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/8</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C-%EC%B0%B8%EC%A1%B0%EB%A1%9C-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%9E%91%EC%84%B1-Writing-Lambda-Expressions-as-Method-References#entry8comment</comments>
      <pubDate>Wed, 13 Sep 2023 15:06:18 +0900</pubDate>
    </item>
    <item>
      <title>람다 표현식 사용 (Using Lambdas Expressions in Your Application) - part 2/2</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%82%AC%EC%9A%A9-Using-Lambdas-Expressions-in-Your-Application-part-22</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;원문 : &lt;u&gt;&lt;b&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/functional-interfaces/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/functional-interfaces/&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Predicate&amp;lt;T&amp;gt;를&amp;nbsp;사용하여&amp;nbsp;개체&amp;nbsp;테스트&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Predicate 구현 및 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 인터페이스는 Predicate&amp;lt;T&amp;gt; 인터페이스입니다. Predicate는 개체를 테스트하는 데 사용됩니다. 나중에 보게 될 주제인 Stream API에서 스트림을 필터링하는 데 사용됩니다. &lt;br /&gt;&lt;br /&gt;추상 메서드는 개체를 가져와 부울 값을 반환합니다. 이 인터페이스는 Consumer&amp;lt;T&amp;gt;보다 조금 더 복잡합니다. 여기에는 기본 메서드와 정적 메서드가 정의되어 있으며 이에 대해서는 나중에 살펴보겠습니다. abstract&amp;nbsp;method에 집중해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694504701481&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Predicate&amp;lt;T&amp;gt; {

    boolean test(T t);

    // default and static methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 부분에서 Predicate&amp;lt;String&amp;gt;의 예를 이미 보았습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694504832802&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; length3 = s -&amp;gt; s.length() == 3;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진&amp;nbsp;문자열을&amp;nbsp;테스트하려면&amp;nbsp;Predicate&amp;nbsp;인터페이스의&amp;nbsp;test()&amp;nbsp;메서드를&amp;nbsp;호출하기만&amp;nbsp;하면&amp;nbsp;됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694504916022&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String word = ...; // any word
boolean isOfLength3 = length3.test(word);
System.out.prinln(&quot;Is of length 3? &quot; + isOfLength3);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특화된 Predicate 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수&amp;nbsp;값을&amp;nbsp;테스트해야&amp;nbsp;한다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;다음&amp;nbsp;조건자를&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694564400280&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;Integer&amp;gt; isGreaterThan10 = i -&amp;gt; i &amp;gt; 10;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consumer, Supplier 및 이 Predicate도 마찬가지입니다. 이 Predicate가 인수로 취하는 것은 Integer 클래스의 인스턴스에 대한 참조이므로 이 값을 10과 비교하기 전에 이 개체는 자동으로 unboxing됩니다. 매우 편리하지만 오버헤드가 발생합니다. &lt;br /&gt;&lt;br /&gt;JDK가 제공하는 솔루션은 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Supplier&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;및 Consumer를 위한 솔루션과 동일합니다: 특수 Predicate. Predicate&amp;lt;String&amp;gt;과 함께 IntPredicate, LongPredicate 및 DoublePredicate라는 세 가지 특수 인터페이스가 있습니다. 추상 메서드는 모두 명명 규칙을 따릅니다. 모두 부울 값을 반환하므로 test()라는 이름을 붙이고 인터페이스에 해당하는 인수를 취합니다. &lt;br /&gt;&lt;br /&gt;따라서&amp;nbsp;이전&amp;nbsp;예제를&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694564440339&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IntPredicate isGreaterThan10 = i -&amp;gt; i &amp;gt; 10;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 자체의 구문은 동일하다는 것을 알 수 있습니다. 유일한 차이점은 i가 이제 Integer가 아닌 int 유형이라는 것입니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BiPredicate를&amp;nbsp;사용하여&amp;nbsp;두&amp;nbsp;요소&amp;nbsp;테스트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consumer&amp;lt;T&amp;gt;에서&amp;nbsp;본&amp;nbsp;규칙에&amp;nbsp;따라&amp;nbsp;JDK는&amp;nbsp;하나가&amp;nbsp;아닌&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;요소를&amp;nbsp;테스트하는&amp;nbsp;BiPredicate&amp;lt;T,&amp;nbsp;U&amp;gt;&amp;nbsp;인터페이스도&amp;nbsp;추가합니다.&amp;nbsp;인터페이스는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694564902761&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface BiPredicate&amp;lt;T, U&amp;gt; {

    boolean test(T t, U u);

    // default methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 이러한 BiPredicate의 예입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694564984033&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BiPredicate&amp;lt;String, Integer&amp;gt; isOfLength = (word, length) -&amp;gt; word.length() == length;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 패턴으로 이 BiPredicate를 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694565270410&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String word = ...; // really any word will do!
int length = 3;
boolean isWordOfLength3 = isOfLength.test(word, length);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 유형을 처리하는 BiPredicate&amp;lt;T, U&amp;gt;의 특수 버전은 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Collection에 Predicate 전달&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collection framework에 추가된 메소드(removeIf()) 중 하나는 Predicate를 사용합니다. 이 메서드는 이 Predicate를 사용하여 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Collection&lt;/span&gt;의 각 요소를 테스트합니다. 테스트 결과가 true이면 이 요소가 Collection에서 제거됩니다. &lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;예에서&amp;nbsp;이&amp;nbsp;패턴이&amp;nbsp;실제로&amp;nbsp;작동하는&amp;nbsp;것을&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694565625959&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; immutableStrings =
        List.of(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;);
List&amp;lt;String&amp;gt; strings = new ArrayList&amp;lt;&amp;gt;(immutableStrings);
Predicate&amp;lt;String&amp;gt; isOddLength = s -&amp;gt; s.length() % 2 == 0;
strings.removeIf(isOddLength);
System.out.println(&quot;strings = &quot; + strings);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 다음과 같은 결과가 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694565670024&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;strings = [one, two, three]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 예에서는 지적할 만한 몇 가지 사항이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보시다시피, RemoveIf()를 호출하면 이 Collection이 변경됩니다.&lt;/li&gt;
&lt;li&gt;따라서 List.of() 팩토리 메소드에 의해 생성된 것과 같은 불변 Collection에 대해 RemoveIf()를 호출하면 안 됩니다. 변경할 수 없는 Collection에서 요소를 제거할 수 없기 때문에 그렇게 하면 Exception 발생합니다.&lt;/li&gt;
&lt;li&gt;Arrays.asList()는 배열처럼 동작하는 Collection을 생성합니다. 기존 요소를 변경할 수 있지만 이 팩토리 메서드에서 반환된 목록에서 요소를 추가하거나 제거할 수는 없습니다. 따라서 이 목록에서 RemoveIf()를 호출해도 작동하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Function&amp;lt;T,&amp;nbsp;R&amp;gt;을&amp;nbsp;사용하여&amp;nbsp;개체를&amp;nbsp;다른&amp;nbsp;개체에&amp;nbsp;매핑&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Function&amp;lt;T, R&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;구현&amp;nbsp;및&amp;nbsp;사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네&amp;nbsp;번째&amp;nbsp;인터페이스는&amp;nbsp;Function&amp;lt;T,&amp;nbsp;R&amp;gt;&amp;nbsp;인터페이스입니다.&amp;nbsp;함수의&amp;nbsp;추상&amp;nbsp;메소드는&amp;nbsp;T&amp;nbsp;유형의&amp;nbsp;객체를&amp;nbsp;취하고&amp;nbsp;해당&amp;nbsp;객체를&amp;nbsp;다른&amp;nbsp;유형&amp;nbsp;U로&amp;nbsp;변환하여&amp;nbsp;반환합니다.&amp;nbsp;이&amp;nbsp;인터페이스에는&amp;nbsp;기본&amp;nbsp;메소드와&amp;nbsp;정적&amp;nbsp;메소드도&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694566225420&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Function&amp;lt;T, R&amp;gt; {

    R apply(U u);

    // default and static methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Function&amp;lt;T, R&amp;gt;은 Stream API에서 Object를 다른 Object에 매핑하는 데 사용됩니다. 이에 대해서는 나중에 다룰 주제입니다. Predicate는 부울을 반환하는 특수한 유형의 함수로 볼 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특화된 Function&amp;lt;T, R&amp;gt; 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은&amp;nbsp;문자열을&amp;nbsp;가져와&amp;nbsp;해당&amp;nbsp;문자열의&amp;nbsp;길이를&amp;nbsp;반환하는&amp;nbsp;함수의&amp;nbsp;예입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694566618141&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Function&amp;lt;String, Integer&amp;gt; toLength = s -&amp;gt; s.length();
String word = ...; // any kind of word will do
int length = toLength.apply(word);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서도 박싱 및 언박싱 작업이 실제로 수행되는 모습을 볼 수 있습니다. 먼저 length() 메서드는 int를 반환합니다. 함수가 정수를 반환하므로 이 정수는 박스형으로 표시됩니다. 그러나 결과는 int 유형의 가변 길이에 할당되므로 Integer는 이 변수에 저장되도록 unboxing됩니다.&lt;br /&gt;&lt;br /&gt;애플리케이션에서 성능이 문제가 되지 않는다면 이 박싱 및 언박싱은 실제로 큰 문제가 아닙니다. 문제가 된다면 아마도 이 박싱 및 언박싱을 피하고 싶을 것입니다.&lt;br /&gt;&lt;br /&gt;JDK는 Function&amp;lt;T, R&amp;gt; 인터페이스의 특수 버전을 갖춘 솔루션을 제공합니다. 이 인터페이스 세트는 입력 인수 유형과 반환 유형 모두에 대해 특수 Function&amp;lt;T, R&amp;gt;가 정의되기 때문에 Supplier, Consumer&amp;lt;T&amp;gt; 또는 Predicate 범주에서 본 것보다 더 복잡합니다.&lt;br /&gt;&lt;br /&gt;입력 인수와 출력 모두 네 가지 유형을 가질 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;a parameterized type&lt;span&gt;&amp;nbsp;&lt;/span&gt;T;&lt;/li&gt;
&lt;li&gt;an&lt;span&gt;&amp;nbsp;&lt;/span&gt;int;&lt;/li&gt;
&lt;li&gt;a&lt;span&gt;&amp;nbsp;&lt;/span&gt;long;&lt;/li&gt;
&lt;li&gt;a&lt;span&gt;&amp;nbsp;&lt;/span&gt;double.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 디자인에는 미묘함이 있기 때문에 여기서 끝나지 않습니다. Function&amp;lt;T, R&amp;gt;를 확장하는 UnaryOperator&amp;lt;T&amp;gt;라는 특별한 인터페이스가 있습니다. 이 단항 연산자 개념은 주어진 유형의 인수를 취하고 동일한 유형의 결과를 반환하는 함수의 이름을 지정하는 데 사용됩니다. 단항 연산자는 여러분이 기대하는 바로 그 것입니다. 모든 고전 수학 연산자는 UnaryOperator&amp;lt;T&amp;gt;로 모델링할 수 있습니다(제곱근, 모든 삼각 연산자, 로그 및 지수).&lt;br /&gt;&lt;br /&gt;다음은&amp;nbsp;java.util.function&amp;nbsp;패키지에서&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;16가지&amp;nbsp;특수&amp;nbsp;유형의&amp;nbsp;함수입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnivb9/btstQUKvgB0/avsTIV3Cx8Rn0QctaGIysK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnivb9/btstQUKvgB0/avsTIV3Cx8Rn0QctaGIysK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnivb9/btstQUKvgB0/avsTIV3Cx8Rn0QctaGIysK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnivb9%2FbtstQUKvgB0%2FavsTIV3Cx8Rn0QctaGIysK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1456&quot; height=&quot;412&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 인터페이스의 모든 추상 메소드는 동일한 규칙을 따릅니다. 즉, 해당 함수의 반환된 유형을 따라 이름이 지정됩니다. 그들의 이름은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 유형 T를 반환하는 함수에 대한 apply()&lt;/li&gt;
&lt;li&gt;applyAsInt()&amp;nbsp;기본&amp;nbsp;유형&amp;nbsp;int를&amp;nbsp;반환하는&amp;nbsp;경우&lt;/li&gt;
&lt;li&gt;applyAsLong()&amp;nbsp;오랫동안&lt;/li&gt;
&lt;li&gt;더블의&amp;nbsp;경우&amp;nbsp;applyAsDouble()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단항&amp;nbsp;연산자를&amp;nbsp;목록에&amp;nbsp;전달&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UnaryOperator&amp;lt;T&amp;gt;를&amp;nbsp;사용하여&amp;nbsp;목록의&amp;nbsp;요소를&amp;nbsp;변환할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;왜&amp;nbsp;기본&amp;nbsp;Function이&amp;nbsp;아닌&amp;nbsp;UnaryOperator&amp;lt;T&amp;gt;가&amp;nbsp;필요한지&amp;nbsp;궁금할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;대답은&amp;nbsp;실제로&amp;nbsp;매우&amp;nbsp;간단합니다.&amp;nbsp;일단&amp;nbsp;선언되면&amp;nbsp;목록&amp;nbsp;유형을&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp;따라서&amp;nbsp;적용한&amp;nbsp;함수는&amp;nbsp;목록의&amp;nbsp;요소를&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;있지만&amp;nbsp;해당&amp;nbsp;유형은&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;없습니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;단항&amp;nbsp;연산자를&amp;nbsp;사용하는&amp;nbsp;메서드는&amp;nbsp;이를&amp;nbsp;replacementAll()&amp;nbsp;메서드에&amp;nbsp;전달합니다.&amp;nbsp;예는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694568040108&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings = Arrays.asList(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;);
UnaryOperator&amp;lt;String&amp;gt; toUpperCase = word -&amp;gt; word.toUpperCase();
strings.replaceAll(toUpperCase);
System.out.println(strings);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행하면 다음이 표시됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694568065173&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ONE, TWO, THREE]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 Arrays.asList() 패턴으로 생성된 목록을 사용했습니다. 실제로 해당 목록에 요소를 추가하거나 제거할 필요가 없습니다. 이 코드는 각 요소를 하나씩 수정하며, 이는 이 특정 목록에서 가능합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BiFunction을&amp;nbsp;사용하여&amp;nbsp;두&amp;nbsp;요소&amp;nbsp;매핑&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consumer 및 Predicate의 경우 함수에는 이중 함수라는 두 가지 인수를 사용하는 버전도 있습니다. 동일하게&amp;nbsp; BiFunction&amp;lt;T, U, R&amp;gt;이 있습니다. 여기서 T와 U는 인수이고 R은 반환된 유형입니다. 인터페이스는 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694568471767&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface BiFunction&amp;lt;T, U, R&amp;gt; {

    R apply(T t, U u);

    // default methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 표현식을 사용하여 BiFunction를 만들 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694568516170&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BiFunction&amp;lt;String, String, Integer&amp;gt; findWordInSentence =
    (word, sentence) -&amp;gt; sentence.indexOf(word);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UnaryOperator&amp;lt;T&amp;gt; 인터페이스에는 BiFunction&amp;lt;T, U, R&amp;gt;을 확장하는 BinaryOperator&amp;lt;T&amp;gt;라는 두 개의 인수가 있는 형제 인터페이스도 있습니다. 예상한 대로 네 가지 기본 산술 연산은 BinaryOperator를 사용하여 모델링할 수 있습니다.&lt;br /&gt;&lt;br /&gt;BiFunction의 가능한 모든 특수 버전의 하위 집합이 JDK에 추가되었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IntBinaryOperator, LongBinaryOperator 및 DoubleBinaryOperator&lt;/li&gt;
&lt;li&gt;ToIntBiFunction&amp;lt;T&amp;gt;, ToLongBiFunction&amp;lt;T&amp;gt; 및 ToDoubleBiFunction&amp;lt;T&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Functional Interface의 네 가지 범주 요약&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java.util.function&amp;nbsp;패키지는&amp;nbsp;이제&amp;nbsp;Java의&amp;nbsp;핵심입니다.&amp;nbsp;Collections&amp;nbsp;Framework&amp;nbsp;또는&amp;nbsp;Stream&amp;nbsp;API에서&amp;nbsp;사용할&amp;nbsp;모든&amp;nbsp;람다&amp;nbsp;표현식이&amp;nbsp;해당&amp;nbsp;패키지의&amp;nbsp;인터페이스&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;구현하기&amp;nbsp;때문입니다. &lt;br /&gt;보시다시피 이 패키지에는 많은 인터페이스가 포함되어 있어 인터페이스를 찾는 것이 까다로울 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 기억해야 할 것은 인터페이스에는 4가지 범주가 있다는 것입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Supplier: 어떤 주장도 받아들이지 말고, 무언가를 반환하십시오&lt;/li&gt;
&lt;li&gt;Consumer: 인수를 받고 아무것도 반환하지 않음&lt;/li&gt;
&lt;li&gt;Predicates: 인수를 취하고 부울을 반환합니다.&lt;/li&gt;
&lt;li&gt;Fucntion: 인수를 취하고, 무언가를 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째:&amp;nbsp;일부&amp;nbsp;인터페이스에는&amp;nbsp;하나가&amp;nbsp;아닌&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;인수를&amp;nbsp;취하는&amp;nbsp;버전이&amp;nbsp;있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;the biconsumers&lt;/li&gt;
&lt;li&gt;the bipredicates&lt;/li&gt;
&lt;li&gt;the bifunctions&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셋째:&amp;nbsp;일부&amp;nbsp;인터페이스에는&amp;nbsp;박싱&amp;nbsp;및&amp;nbsp;언박싱을&amp;nbsp;방지하기&amp;nbsp;위해&amp;nbsp;추가된&amp;nbsp;특수&amp;nbsp;버전이&amp;nbsp;있습니다.&amp;nbsp;다&amp;nbsp;나열하기에는&amp;nbsp;너무&amp;nbsp;많습니다.&amp;nbsp;그들은&amp;nbsp;그들이&amp;nbsp;취하는&amp;nbsp;유형의&amp;nbsp;이름을&amp;nbsp;따서&amp;nbsp;명명되었습니다.&amp;nbsp;예:&amp;nbsp;IntPredicate&amp;nbsp;또는&amp;nbsp;ToLongFunction&amp;lt;T&amp;gt;에서와&amp;nbsp;같이&amp;nbsp;반환되는&amp;nbsp;유형입니다.&amp;nbsp;IntToDoubleFunction&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;모두의&amp;nbsp;이름을&amp;nbsp;따서&amp;nbsp;명명될&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;마지막으로&amp;nbsp;모든&amp;nbsp;유형이&amp;nbsp;동일한&amp;nbsp;경우를&amp;nbsp;위한&amp;nbsp;Function&amp;lt;T,&amp;nbsp;R&amp;gt;&amp;nbsp;및&amp;nbsp;BiFunction&amp;lt;T,&amp;nbsp;U,&amp;nbsp;R&amp;gt;의&amp;nbsp;확장(UnaryOperator&amp;lt;T&amp;gt;&amp;nbsp;및&amp;nbsp;BinaryOperator&amp;lt;T&amp;gt;)이&amp;nbsp;있으며&amp;nbsp;기본&amp;nbsp;유형에&amp;nbsp;대한&amp;nbsp;특수&amp;nbsp;버전이&amp;nbsp;있습니다.&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>Functional Interface</category>
      <category>java.util.function</category>
      <category>lambda</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/7</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%82%AC%EC%9A%A9-Using-Lambdas-Expressions-in-Your-Application-part-22#entry7comment</comments>
      <pubDate>Tue, 12 Sep 2023 16:49:03 +0900</pubDate>
    </item>
    <item>
      <title>람다 표현식 사용 (Using Lambdas Expressions in Your Application) - part 1/2</title>
      <link>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%82%AC%EC%9A%A9-Using-Lambdas-Expressions-in-Your-Application</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/functional-interfaces/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/functional-interfaces/&lt;/a&gt; 번역하여 제공&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java SE 8에 람다 표현식이 도입되면서 JDK API가 대대적으로 변경되었습니다. Generic 도입 후 JDK 5보다 lamdbas 도입 후 JDK 8에서 더 많은 클래스가 업데이트되었습니다.&lt;br /&gt;&lt;br /&gt;Functional interface의 매우 간단한 정의 덕분에 기존의 많은 인터페이스를 수정하지 않고도 기능적으로 사용할 수 있게 되었습니다. 기존 코드도 마찬가지입니다. Java SE 8 이전에 작성된 애플리케이션에 인터페이스가 있는 경우 해당 인터페이스를 건드리지 않고도 작동할 수 있으므로 람다를 사용하여 구현할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;java.util.function&amp;nbsp;패키지&amp;nbsp;발견&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JDK 8에는 애플리케이션에서 사용할 수 있는 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Functional interface&lt;/span&gt;가 포함된 java.util.function이라는 새로운 패키지도 도입되었습니다. 이러한 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Functional interface&lt;/span&gt;는 JDK API, 특히 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Collections Framework&lt;/span&gt; 및 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Stream&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;API에서도 많이 사용됩니다. 이 패키지는 java.base 모듈에 있습니다.&lt;br /&gt;&lt;br /&gt;인터페이스가&amp;nbsp;40개가&amp;nbsp;조금&amp;nbsp;넘으므로&amp;nbsp;이&amp;nbsp;패키지는&amp;nbsp;처음에는&amp;nbsp;조금&amp;nbsp;무섭게&amp;nbsp;보일&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이는&amp;nbsp;4개의&amp;nbsp;주요&amp;nbsp;인터페이스를&amp;nbsp;중심으로&amp;nbsp;구성되어&amp;nbsp;있는&amp;nbsp;것으로&amp;nbsp;나타났습니다.&amp;nbsp;그것들을&amp;nbsp;이해하면&amp;nbsp;다른&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;이해하는&amp;nbsp;열쇠가&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Supplier&amp;lt;T&amp;gt;를 사용하여 개체 생성 또는 제공&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Supplier&amp;lt;T&amp;gt; 인터페이스 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 인터페이스는 Supplier&amp;lt;T&amp;gt; 인터페이스입니다. 간단히 말해서 공급자는 인수를 사용하지 않고 개체를 반환합니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier&lt;/span&gt;&amp;nbsp;인터페이스를 구현하는 람다는 어떤 인수도 취하지 않고 객체를 반환한다고 말해야 합니다. 혼란스럽지 않은 한 바로가기를 만들면 기억하기가 더 쉬워집니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;인터페이스는&amp;nbsp;정말&amp;nbsp;간단합니다.&amp;nbsp;기본&amp;nbsp;메소드나&amp;nbsp;정적&amp;nbsp;메소드가&amp;nbsp;없고&amp;nbsp;일반&amp;nbsp;get()&amp;nbsp;메소드만&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;인터페이스는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694499476179&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Supplier&amp;lt;T&amp;gt; {

    T get();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 람다는 이 인터페이스를 구현한 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694499520211&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Supplier&amp;lt;String&amp;gt; supplier = () -&amp;gt; &quot;Hello Duke!&quot;;`&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 람다 식은 단순히 Hello Duke!를 반환합니다. 문자열. 호출될 때마다 새 객체를 반환하는 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier&lt;/span&gt;를 작성할 수도 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694499618245&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Random random = new Random(314L);
Supplier&amp;lt;Integer&amp;gt; newRandom = () -&amp;gt; random.nextInt(10);

for (int index = 0; index &amp;lt; 5; index++) {
    System.out.println(newRandom.get() + &quot; &quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier&lt;/span&gt;의 get() 메서드를 호출하면 random.nextInt()가 호출되고 임의의 정수가 생성됩니다. 이 난수 생성기의 시드는 값 314L로 고정되어 있으므로 다음과 같은 난수 정수가 생성되는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694499704819&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1
5
3
0
2&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 람다는 바깥쪽 범위(random)에서 변수를 캡처하여 이 변수를 효과적으로 최종 변수로 만듭니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier&lt;/span&gt;&amp;lt;T&amp;gt; 사용&lt;/b&gt;&lt;br /&gt;이전 예에서 newRandom를 사용하여 난수를 생성한 방법에 유의하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1694499924635&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int index = 0; index &amp;lt; 5; index++) {
    System.out.println(newRandom.get() + &quot; &quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier &lt;/span&gt;인터페이스의 get() 메서드를 호출하면 람다가 호출됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Specialized &lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Supplier&lt;/span&gt;&lt;/b&gt; 활용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 표현식은 애플리케이션에서 데이터를 처리하는 데 사용됩니다. 그래서 JDK에서는 람다 표현식을 얼마나 빨리 실행할 수 있는지가 중요합니다. 절약할 수 있는 모든 CPU 주기는 절약해야 합니다. 왜냐하면 이는 실제 애플리케이션에서 중요한 최적화를 나타내기 때문입니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;원칙에&amp;nbsp;따라&amp;nbsp;JDK&amp;nbsp;API는&amp;nbsp;또한&amp;nbsp;Manufacturer&amp;lt;T&amp;gt;&amp;nbsp;인터페이스의&amp;nbsp;전문화되고&amp;nbsp;최적화된&amp;nbsp;버전을&amp;nbsp;제공합니다.&lt;br /&gt;&lt;br /&gt;두 번째 예제에서는 Random.nextInt() 메서드가 int를 반환하는 Integer 유형을 제공한다는 점을 눈치챘을 것입니다. 따라서 작성한 코드에는 내부적으로 두 가지 일이 발생합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Random.nextInt()에&amp;nbsp;의해&amp;nbsp;반환된&amp;nbsp;int는&amp;nbsp;먼저&amp;nbsp;자동&amp;nbsp;박싱&amp;nbsp;메커니즘에&amp;nbsp;의해&amp;nbsp;Integer로&amp;nbsp;박싱됩니다.&lt;/li&gt;
&lt;li&gt;이&amp;nbsp;정수는&amp;nbsp;자동&amp;nbsp;언박싱&amp;nbsp;메커니즘에&amp;nbsp;의해&amp;nbsp;nextRandom&amp;nbsp;변수에&amp;nbsp;할당될&amp;nbsp;때&amp;nbsp;언박싱됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동&amp;nbsp;박싱은&amp;nbsp;int&amp;nbsp;값을&amp;nbsp;Integer&amp;nbsp;객체에&amp;nbsp;직접&amp;nbsp;할당할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;메커니즘입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694501338945&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int i = 12;
Integer integer = i;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부적으로는 해당 값을 래핑하는 객체가 생성됩니다.&lt;br /&gt;&lt;br /&gt;자동&amp;nbsp;언박싱은&amp;nbsp;그&amp;nbsp;반대입니다.&amp;nbsp;Integer&amp;nbsp;내의&amp;nbsp;값을&amp;nbsp;풀어서&amp;nbsp;Integer를&amp;nbsp;int&amp;nbsp;값에&amp;nbsp;할당할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694501397874&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Integer integer = Integer.valueOf(12);
int i = integer;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 싱/언박싱은 무료로 제공되지 않습니다. 대부분의 경우 이 비용은 데이터베이스나 원격 서비스에서 데이터를 가져오는 등 애플리케이션이 수행하는 다른 작업에 비해 적습니다. 그러나 어떤 경우에는 이 비용이 용납되지 않을 수 있으므로 지불을 피해야 합니다.&lt;br /&gt;&lt;br /&gt;좋은&amp;nbsp;소식은&amp;nbsp;JDK가&amp;nbsp;IntSupplier&amp;nbsp;인터페이스를&amp;nbsp;갖춘&amp;nbsp;솔루션을&amp;nbsp;제공한다는&amp;nbsp;것입니다.&amp;nbsp;이&amp;nbsp;인터페이스는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694501476751&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface IntSupplier {

    int getAsInt();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 인터페이스를 구현하기 위해 정확히 동일한 코드를 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694501536799&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Random random = new Random(314L);
IntSupplier newRandom = () -&amp;gt; random.nextInt();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션 코드에 대한 유일한 수정 사항은 get() 대신 getAsInt()를 호출해야 한다는 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694501563936&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; 5; i++) {
    int nextRandom = newRandom.getAsInt();
    System.out.println(&quot;next random = &quot; + nextRandom);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 실행한 결과는 동일하지만 이번에는 박싱/언박싱이 발생하지 않았습니다. 이 코드는 이전 코드보다 성능이 더 좋습니다.&lt;br /&gt;&lt;br /&gt;JDK는 응용 프로그램에서 불필요한 boxing/unboxing을 피하기 위해 IntSupplier, BooleanSupplier, LongSupplier 및 DoubleSupplier라는 네 가지 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;specialized supplier&lt;/span&gt;를 제공합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기본 유형을 처리하기 위해 이러한 특수 버전의 기능적 인터페이스를 더 많이 볼 수 있습니다. 추상 메서드에 대한 간단한 명명 규칙이 있습니다. 기본 추상 메서드(Supplier의 경우 get())의 이름을 취하고 여기에 반환된 유형을 추가합니다. 따라서 Supplier 인터페이스의 경우 getAsBoolean(), getAsInt(), getAsLong() 및 getAsDouble()이 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Consumer&amp;lt;T&amp;gt;를&amp;nbsp;사용하여&amp;nbsp;객체&amp;nbsp;소비&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소비자&amp;nbsp;구현&amp;nbsp;및&amp;nbsp;사용&lt;/b&gt; &lt;br /&gt;두 번째 인터페이스는 Consumer&amp;lt;T&amp;gt; 인터페이스입니다. Consumer는 &lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;Supplier&lt;/span&gt;와 반대되는 역할을 합니다. 즉, 인수를 취하고 아무것도 반환하지 않습니다. &lt;br /&gt;&lt;br /&gt;인터페이스는 조금 더 복잡합니다. 이 튜토리얼의 뒷부분에서 다룰 기본 메소드가 있습니다. &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Abstract method&lt;/span&gt;에 집중해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694502974872&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Consumer&amp;lt;T&amp;gt; {

    void accept(T t);

    // default methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 소비자를 구현했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503021389&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Consumer&amp;lt;String&amp;gt; printer = s -&amp;gt; System.out.println(s);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 소비자를 사용하여 이전 예제를 업데이트할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503042554&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; 5; i++) {
    int nextRandom = newRandom.getAsInt();
    printer.accept(&quot;next random = &quot; + nextRandom);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Specialized Consumer 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수를&amp;nbsp;인쇄해야&amp;nbsp;한다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;그런&amp;nbsp;다음&amp;nbsp;다음&amp;nbsp;소비자를&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503231482&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Consumer&amp;lt;Integer&amp;gt; printer = i -&amp;gt; System.out.println(i);`&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 공급업체 예와 동일한 자동 박싱 문제에 직면할 수 있습니다. 성능 측면에서 이 박싱/언박싱이 애플리케이션에서 허용됩니까? &lt;br /&gt;&lt;br /&gt;그렇지 않은 경우에도 걱정하지 마십시오. JDK에서는 IntConsumer, LongConsumer 및 DoubleConsumer라는 세 가지 특수 Consumer를 사용할 수 있습니다. 이 세 Consumer의 추상 메소드는 Supplier와 동일한 규칙을 따르며, 반환된 유형은 항상 void이므로 모두 accept라는 이름이 지정됩니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;BiConsumer로&amp;nbsp;두&amp;nbsp;요소&amp;nbsp;소비하기&lt;/b&gt; &lt;br /&gt;그런&amp;nbsp;다음&amp;nbsp;JDK는&amp;nbsp;BiConsumer&amp;lt;T,&amp;nbsp;U&amp;gt;&amp;nbsp;인터페이스라고&amp;nbsp;하는&amp;nbsp;하나의&amp;nbsp;인수&amp;nbsp;대신&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;인수를&amp;nbsp;사용하는&amp;nbsp;Consumer&amp;lt;T&amp;gt;&amp;nbsp;인터페이스의&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;변형을&amp;nbsp;추가합니다.&amp;nbsp;이&amp;nbsp;인터페이스는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503576637&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface BiConsumer&amp;lt;T, U&amp;gt; {

    void accept(T t, U u);

    // default methods removed
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 BiConsumer의 예입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503635460&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BiConsumer&amp;lt;Random, Integer&amp;gt; randomNumberPrinter =
        (random, number) -&amp;gt; {
            for (int i = 0; i &amp;lt; number; i++) {
                System.out.println(&quot;next random = &quot; + random.nextInt());
            }
        };&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 이중 소비자를 사용하여 이전 예제를 다르게 작성할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694503681481&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;randomNumberPrinter.accept(new Random(314L), 5));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 유형을 처리하는 BiConsumer&amp;lt;T, U&amp;gt; 인터페이스에는 ObjIntConsumer&amp;lt;T&amp;gt;, ObjLongConsumer&amp;lt;T&amp;gt; 및 ObjDoubleConsumer&amp;lt;T&amp;gt;라는 세 가지 특수 버전이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Consumer를 Iterable에 전달하기&lt;/b&gt; &lt;br /&gt;이&amp;nbsp;튜토리얼의&amp;nbsp;다른&amp;nbsp;부분에서&amp;nbsp;다루는&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;중요한&amp;nbsp;메소드가&amp;nbsp;컬렉션&amp;nbsp;프레임워크의&amp;nbsp;인터페이스에&amp;nbsp;추가되었습니다.&amp;nbsp;그&amp;nbsp;중&amp;nbsp;하나는&amp;nbsp;Consumer&amp;lt;T&amp;gt;를&amp;nbsp;인수로&amp;nbsp;취하며&amp;nbsp;매우&amp;nbsp;유용합니다:&amp;nbsp;Iterable.forEach()&amp;nbsp;메서드입니다.&amp;nbsp;다음은&amp;nbsp;어디에서나&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;간단한&amp;nbsp;예입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694504035292&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; strings = ...; // really any list of any kind of objects
Consumer&amp;lt;String&amp;gt; printer = s -&amp;gt; System.out.println(s);
strings.forEach(printer);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 마지막 코드 줄은 소비자를 목록의 모든 개체에 적용합니다. 여기서는 콘솔에 하나씩 간단히 인쇄합니다. 나중에 이 소비자를 작성하는 다른 방법을 살펴보겠습니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;forEach()&amp;nbsp;메서드는&amp;nbsp;Iterable의&amp;nbsp;모든&amp;nbsp;요소에&amp;nbsp;대한&amp;nbsp;내부&amp;nbsp;반복에&amp;nbsp;액세스하는&amp;nbsp;방법을&amp;nbsp;노출하여&amp;nbsp;이러한&amp;nbsp;각&amp;nbsp;요소에&amp;nbsp;대해&amp;nbsp;수행해야&amp;nbsp;하는&amp;nbsp;작업을&amp;nbsp;전달합니다.&amp;nbsp;이는&amp;nbsp;이를&amp;nbsp;수행하는&amp;nbsp;매우&amp;nbsp;강력한&amp;nbsp;방법이며&amp;nbsp;코드를&amp;nbsp;더&amp;nbsp;읽기&amp;nbsp;쉽게&amp;nbsp;만듭니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>lambda</category>
      <category>람다식</category>
      <category>람다표현식</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/6</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%82%AC%EC%9A%A9-Using-Lambdas-Expressions-in-Your-Application#entry6comment</comments>
      <pubDate>Tue, 12 Sep 2023 16:04:03 +0900</pubDate>
    </item>
    <item>
      <title>첫 번째 람다 표현식 작성 (Writing Your First Lambda Expression)</title>
      <link>https://i-dreamers.tistory.com/entry/%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%9E%91%EC%84%B1-Writing-Your-First-Lambda-Expression</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.java/learn/lambdas/first-lambdas/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.java/learn/lambdas/first-lambdas/&lt;/a&gt; 번역하여 포스팀합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2014년 Java SE 8에서는 람다 표현식 개념이 도입되었습니다. Java SE 8이 출시되기 전을 기억하신다면 아마도 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Anonymous class&lt;/span&gt; 개념을 기억하실 것입니다. 그리고 람다 표현식이 일부 정확한 경우 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Anonymous class&lt;/span&gt;의 인스턴스를 작성하는 또 다른 간단한 방법이라는 것을 들어보셨을 것입니다.&lt;br /&gt;&lt;br /&gt;그 시절을 기억하지 못한다면 A&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;nonymous class&lt;/span&gt;에 대해 듣거나 읽어본 적이 있을 것이며 아마도 이 모호한 구문이 두려울 것입니다.&lt;br /&gt;&lt;br /&gt;좋은 소식은 람다 식을 작성하는 방법을 이해하기 위해 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Anonymous class&lt;/span&gt;을 거칠 필요가 없다는 것입니다. 또한 많은 경우 Java 언어에 람다가 추가되어 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Anonymous class&lt;/span&gt;가 더 이상 필요하지 않습니다.&lt;br /&gt;&lt;br /&gt;람다&amp;nbsp;식을&amp;nbsp;작성하면&amp;nbsp;다음&amp;nbsp;세&amp;nbsp;단계를&amp;nbsp;이해하게&amp;nbsp;됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작성하려는 람다 표현식의 유형 식별&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구현에 적합한 Method 찾기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이 Method을 구현합니다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 정말로 전부입니다. 이 세 단계를 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;u&gt;람다 표현식의 유형 식별&lt;/u&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 언어의 Type은 컴파일 타임에 인식됩니다. 따라서 람다 표현식의 Type을 찾는 것은 항상 가능합니다. 변수 Type, 필드 Type, 메소드 매개변수 Type 또는 메소드의 반환 Type일 수 있습니다.&lt;br /&gt;&lt;br /&gt;람다 식의 Type에는 제한이 있습니다. 함수형 인터페이스여야 합니다. 따라서 기능적 인터페이스를 구현하지 않는 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;Anonymous class&lt;/span&gt;는 람다 식으로 작성할 수 없습니다.&lt;br /&gt;&lt;br /&gt;기능적&amp;nbsp;인터페이스가&amp;nbsp;무엇인지에&amp;nbsp;대한&amp;nbsp;완전한&amp;nbsp;정의는&amp;nbsp;약간&amp;nbsp;복잡합니다.&amp;nbsp;이&amp;nbsp;시점에서&amp;nbsp;알아야&amp;nbsp;할&amp;nbsp;것은&amp;nbsp;기능적&amp;nbsp;인터페이스는&amp;nbsp;추상&amp;nbsp;메서드가&amp;nbsp;하나만&amp;nbsp;있는&amp;nbsp;인터페이스라는&amp;nbsp;것입니다.&lt;br /&gt;&lt;br /&gt;Java SE 8부터 인터페이스에서 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;concrete method&lt;/span&gt;가 허용된다는 점을 알아야 합니다. &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;instance method&lt;/span&gt;일 수 있으며, 이 경우 default method라고 하며 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;static method&lt;/span&gt;일 수 있습니다. 이러한 메서드는 abstract&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;method&lt;/span&gt;가 아니기 때문에 포함되지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;인터페이스가&amp;nbsp;작동하게&amp;nbsp;하려면&amp;nbsp;인터페이스에&amp;nbsp;@FunctionalInterface&amp;nbsp;주석을&amp;nbsp;추가해야&amp;nbsp;합니까?&lt;br /&gt;&lt;br /&gt;아니, 그렇지 않습니다. 이 Annotation은 인터페이스가 실제로 작동하는지 확인하는 데 도움이 됩니다. 기능적 인터페이스가 아닌 유형에 이 Annotation을 넣으면 컴파일러에서 오류가 발생합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;Functional Interface의 예&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;JDK&amp;nbsp;API에서&amp;nbsp;가져온&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;예를&amp;nbsp;살펴보겠습니다.&amp;nbsp;방금&amp;nbsp;소스&amp;nbsp;코드에서&amp;nbsp;주석을&amp;nbsp;제거했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694481910835&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Runnable {
    public abstract void run();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Runnable 인터페이스는 abstract&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;method&lt;/span&gt;가 하나만 있기 때문에 실제로 Functional Interface입니다. @FunctionalInterface 주석이 도우미로 추가되었지만 필요하지 않습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694482056122&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Consumer&amp;lt;T&amp;gt; {

    void accept(T t);

    default Consumer&amp;lt;T&amp;gt; andThen(Consumer&amp;lt;? super T&amp;gt; after) {
        // the body of this method has been removed
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Consumer&amp;lt;T&amp;gt; 인터페이스도 Functional Interface입니다. 하나의 abstract&lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;method&lt;/span&gt;와 하나의 &lt;span style=&quot;background-color: #ffffff; color: #131516; text-align: start;&quot;&gt;default method&lt;/span&gt;가 있지만 카운트되지 않습니다. 다시 한번 말하지만, @FunctionalInterface 주석은 필요하지 않습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694482473643&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
public interface Predicate&amp;lt;T&amp;gt; {

    boolean test(T t);

    default Predicate&amp;lt;T&amp;gt; and(Predicate&amp;lt;? super T&amp;gt; other) {
        // the body of this method has been removed
    }

    default Predicate&amp;lt;T&amp;gt; negate() {
        // the body of this method has been removed
    }

    default Predicate&amp;lt;T&amp;gt; or(Predicate&amp;lt;? super T&amp;gt; other) {
        // the body of this method has been removed
    }

    static &amp;lt;T&amp;gt; Predicate&amp;lt;T&amp;gt; isEqual(Object targetRef) {
        // the body of this method has been removed
    }

    static &amp;lt;T&amp;gt; Predicate&amp;lt;T&amp;gt; not(Predicate&amp;lt;? super T&amp;gt; target) {
        // the body of this method has been removed
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Predicate&amp;lt;T&amp;gt; 인터페이스는 조금 더 복잡하지만 여전히 Functional Interface입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 추상 메소드가 있습니다&lt;/li&gt;
&lt;li&gt;포함되지 않는 세개의 default method이 있습니다.&lt;/li&gt;
&lt;li&gt;카운트하지 않는 두개 static method가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;u&gt;구현에 적합한 Method 찾기&lt;/u&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 시점에서 작성해야 하는 람다 표현식의 유형을 식별했으며 좋은 소식은 가장 어려운 부분을 완료했다는 것입니다. 나머지는 매우 기계적이고 수행하기 쉽습니다.&lt;br /&gt;&lt;br /&gt;람다 식은 이 기능적 인터페이스의 유일한 추상 메서드를 구현한 것입니다. 따라서 구현할 올바른 Method을 찾는 것은 단지 이 Method을 찾는 문제일 뿐입니다.&lt;br /&gt;&lt;br /&gt;잠시&amp;nbsp;시간을&amp;nbsp;내어&amp;nbsp;이전&amp;nbsp;단락의&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;예를&amp;nbsp;살펴보세요.&lt;br /&gt;&lt;br /&gt;Runnable&amp;nbsp;인터페이스의&amp;nbsp;경우&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694482910461&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public abstract void run();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Predicate 인터페이스의 경우 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694482936444&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;boolean test(T t);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Consumer&amp;lt;T&amp;gt;&amp;nbsp;인터페이스의&amp;nbsp;경우&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694482962035&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void accept(T t);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;u&gt;람다 표현식을 사용하여 올바른 메서드 구현&lt;/u&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Predicate&amp;lt;String&amp;gt;을&amp;nbsp;구현하는&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;람다&amp;nbsp;표현식&amp;nbsp;작성&lt;/b&gt;&lt;br /&gt;이제 마지막 부분입니다: 람다 자체를 작성합니다. 이해해야 할 것은 작성 중인 람다 표현식이 찾은 추상 메서드의 구현이라는 것입니다. 람다 표현식 구문을 사용하면 다음을 수행할 수 있습니다. 람다&amp;nbsp;식&amp;nbsp;구문을&amp;nbsp;사용하면&amp;nbsp;이&amp;nbsp;구현을&amp;nbsp;코드에&amp;nbsp;효과적으로&amp;nbsp;인라인할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;이 구문은 세 가지 요소로 구성됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수 블록&lt;/li&gt;
&lt;li&gt;화살표를 묘사한 작은 ASCII 아트 조각: -&amp;gt;. Java는 굵은 화살표(=&amp;gt;)가 아닌 빈약한 화살표(-&amp;gt;)를 사용합니다.&lt;/li&gt;
&lt;li&gt;메소드의 본문인 코드 블록입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 대한 예를 살펴보겠습니다. 정확히 3개의 문자로 이루어진 문자열에 대해 true를 반환하는 Predicate의 인스턴스가 필요하다고 가정해 보겠습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;람다 식의 유형은 Predicate입니다.&lt;/li&gt;
&lt;li&gt;구현해야&amp;nbsp;할&amp;nbsp;방법은&amp;nbsp;boolean&amp;nbsp;test(String&amp;nbsp;s)입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 메소드 서명의 간단한 복사/붙여넣기인 매개변수 블록을 작성합니다: (String s).&lt;br /&gt;그런&amp;nbsp;다음&amp;nbsp;빈약한&amp;nbsp;화살표(-&amp;gt;)를&amp;nbsp;추가합니다.&lt;br /&gt;그리고 메서드의 본문입니다. 결과는 다음과 같아야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694488864506&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; predicate =
    (String s) -&amp;gt; {
        return s.length() == 3;
    };&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구문 단순화&lt;/b&gt;&lt;br /&gt;이&amp;nbsp;구문은&amp;nbsp;사용자가&amp;nbsp;작성할&amp;nbsp;필요가&amp;nbsp;없도록&amp;nbsp;많은&amp;nbsp;것을&amp;nbsp;추측할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;컴파일러&amp;nbsp;덕분에&amp;nbsp;단순화될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, 컴파일러는 Predicate 인터페이스의 추상 메소드를 구현하고 있다는 것을 알고 있으며 이 메소드가 문자열을 인수로 사용한다는 것을 알고 있습니다. 따라서 (String s)는 (s)로 단순화될 수 있습니다. 이 경우 인수가 하나만 있는 경우 괄호를 제거하여 한 단계 더 나아갈 수도 있습니다. 그러면 인수 블록은 s가 됩니다. 인수가 두 개 이상이거나 인수가 없는 경우 괄호를 유지해야 합니다.&lt;br /&gt;&lt;br /&gt;둘째,&amp;nbsp;메서드&amp;nbsp;본문에는&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄만&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;경우&amp;nbsp;중괄호나&amp;nbsp;return&amp;nbsp;키워드가&amp;nbsp;필요하지&amp;nbsp;않습니다.&lt;br /&gt;&lt;br /&gt;따라서&amp;nbsp;최종&amp;nbsp;구문은&amp;nbsp;실제로&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694488944831&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Predicate&amp;lt;String&amp;gt; predicate = s -&amp;gt; s.length() == 3;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이것이&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;모범&amp;nbsp;사례로&amp;nbsp;이어집니다.&amp;nbsp;람다를&amp;nbsp;짧게&amp;nbsp;유지하여&amp;nbsp;간단하고&amp;nbsp;읽기&amp;nbsp;쉬운&amp;nbsp;한&amp;nbsp;줄의&amp;nbsp;코드가&amp;nbsp;되도록&amp;nbsp;하세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Consumer&amp;lt;String&amp;gt; 구현&lt;/b&gt;&lt;br /&gt;어떤 시점에서 사람들은 지름길을 택하고 싶은 유혹을 받을 수도 있습니다. 개발자가 &quot;Consumer는 객체를 가져오고 아무것도 반환하지 않습니다&quot;라고 말하는 것을 듣게 될 것입니다. 또는 &quot;문자열에 정확히 3개의 문자가 있으면 조건자는 참입니다.&quot; 대부분의 경우 람다 식, 람다 식에서 구현하는 추상 메서드, 이 메서드를 보유하는 기능적 인터페이스 간에 혼동이 있습니다.&lt;br /&gt;&lt;br /&gt;그러나&amp;nbsp;기능적&amp;nbsp;인터페이스,&amp;nbsp;추상&amp;nbsp;메서드&amp;nbsp;및&amp;nbsp;이를&amp;nbsp;구현하는&amp;nbsp;람다&amp;nbsp;식은&amp;nbsp;서로&amp;nbsp;밀접하게&amp;nbsp;연결되어&amp;nbsp;있으므로&amp;nbsp;실제로&amp;nbsp;이러한&amp;nbsp;방식이&amp;nbsp;완전히&amp;nbsp;의미가&amp;nbsp;있습니다.&amp;nbsp;따라서&amp;nbsp;모호함으로&amp;nbsp;이어지지&amp;nbsp;않는&amp;nbsp;한&amp;nbsp;괜찮습니다.&lt;br /&gt;&lt;br /&gt;문자열을&amp;nbsp;사용하고&amp;nbsp;System.out에&amp;nbsp;인쇄하는&amp;nbsp;람다를&amp;nbsp;작성해&amp;nbsp;보겠습니다.&amp;nbsp;구문은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694495961881&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Consumer&amp;lt;String&amp;gt; print = s -&amp;gt; System.out.println(s);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 우리는 람다 표현식의 단순화된 버전을 직접 작성했습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Runnable 구현&lt;/b&gt;&lt;br /&gt;Runnable을&amp;nbsp;구현하면&amp;nbsp;void&amp;nbsp;run()&amp;nbsp;구현이&amp;nbsp;작성됩니다.&amp;nbsp;이&amp;nbsp;인수&amp;nbsp;블록은&amp;nbsp;비어&amp;nbsp;있으므로&amp;nbsp;괄호로&amp;nbsp;묶어서&amp;nbsp;작성해야&amp;nbsp;합니다.&amp;nbsp;기억하세요:&amp;nbsp;인수가&amp;nbsp;하나인&amp;nbsp;경우에만&amp;nbsp;괄호를&amp;nbsp;생략할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;여기서는&amp;nbsp;인수가&amp;nbsp;0입니다.&lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;실행&amp;nbsp;중임을&amp;nbsp;알려주는&amp;nbsp;실행&amp;nbsp;파일을&amp;nbsp;작성해&amp;nbsp;보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694496051456&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Runnable runnable = () -&amp;gt; System.out.println(&quot;I am running&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;람다 표현식 호출&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전&amp;nbsp;Predicate&amp;nbsp;예제로&amp;nbsp;돌아가서&amp;nbsp;이&amp;nbsp;조건자가&amp;nbsp;메서드에&amp;nbsp;정의되었다고&amp;nbsp;가정해&amp;nbsp;보겠습니다.&amp;nbsp;주어진&amp;nbsp;문자열의&amp;nbsp;길이가&amp;nbsp;실제로&amp;nbsp;3인지&amp;nbsp;테스트하는&amp;nbsp;데&amp;nbsp;어떻게&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니까?&lt;br /&gt;&lt;br /&gt;글쎄,&amp;nbsp;람다를&amp;nbsp;작성하는&amp;nbsp;데&amp;nbsp;사용한&amp;nbsp;구문에도&amp;nbsp;불구하고&amp;nbsp;이&amp;nbsp;람다는&amp;nbsp;인터페이스&amp;nbsp;Predicate의&amp;nbsp;인스턴스라는&amp;nbsp;점을&amp;nbsp;명심해야&amp;nbsp;합니다.&amp;nbsp;이&amp;nbsp;인터페이스는&amp;nbsp;문자열을&amp;nbsp;가져와&amp;nbsp;부울을&amp;nbsp;반환하는&amp;nbsp;test()라는&amp;nbsp;메서드를&amp;nbsp;정의합니다.&lt;br /&gt;&lt;br /&gt;이를&amp;nbsp;메소드로&amp;nbsp;작성해&amp;nbsp;보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694496229935&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; retainStringsOfLength3(List&amp;lt;String&amp;gt; strings) {

    Predicate&amp;lt;String&amp;gt; predicate = s -&amp;gt; s.length() == 3;
    List&amp;lt;String&amp;gt; stringsOfLength3 = new ArrayList&amp;lt;&amp;gt;();
    for (String s: strings) {
        if (predicate.test(s)) {
            stringsOfLength3.add(s);
        }
    }
    return stringsOfLength3;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 예에서와 마찬가지로 조건자를 어떻게 정의했는지 살펴보세요. Predicate 인터페이스는 이 메서드 boolean test(String)를 정의하므로 Predicate 유형의 변수를 통해 Predicate에 정의된 메서드를 호출하는 것이 완벽하게 적법합니다. 이 조건자 변수는 메서드를 정의하는 것처럼 보이지 않기 때문에 처음에는 혼란스러워 보일 수 있습니다.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;코드를&amp;nbsp;작성하는&amp;nbsp;훨씬&amp;nbsp;더&amp;nbsp;좋은&amp;nbsp;방법이&amp;nbsp;있으니&amp;nbsp;이&amp;nbsp;튜토리얼의&amp;nbsp;뒷부분에서&amp;nbsp;살펴보겠습니다.&lt;br /&gt;&lt;br /&gt;따라서&amp;nbsp;람다를&amp;nbsp;작성할&amp;nbsp;때마다&amp;nbsp;이&amp;nbsp;람다에서&amp;nbsp;구현하는&amp;nbsp;인터페이스에&amp;nbsp;정의된&amp;nbsp;모든&amp;nbsp;메서드를&amp;nbsp;호출할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;추상&amp;nbsp;메소드를&amp;nbsp;호출하면&amp;nbsp;람다&amp;nbsp;자체의&amp;nbsp;코드가&amp;nbsp;호출됩니다.&amp;nbsp;왜냐하면&amp;nbsp;이&amp;nbsp;람다는&amp;nbsp;해당&amp;nbsp;메소드의&amp;nbsp;구현이기&amp;nbsp;때문입니다.&amp;nbsp;기본&amp;nbsp;메소드를&amp;nbsp;호출하면&amp;nbsp;인터페이스에&amp;nbsp;작성된&amp;nbsp;코드가&amp;nbsp;호출됩니다.&amp;nbsp;람다가&amp;nbsp;기본&amp;nbsp;메서드를&amp;nbsp;재정의할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;방법은&amp;nbsp;없습니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Local Value 캡처링&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익숙해지면 람다 작성이 매우 자연스러워집니다. 이는 Collections Framework, Stream API 및 JDK의 다른 많은 것들에 매우 잘 통합되어 있습니다. Java SE 8부터 람다는 어디에나 최고의 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 사용에는 제약이 있으며, 컴파일 타임 오류가 발생하는 경우가 있습니다.&lt;br /&gt;&lt;br /&gt;다음&amp;nbsp;코드를&amp;nbsp;고려해&amp;nbsp;보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694496545583&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int calculateTotalPrice(List&amp;lt;Product&amp;gt; products) {

    int totalPrice = 0;
    Consumer&amp;lt;Product&amp;gt; consumer =
        product -&amp;gt; totalPrice += product.getPrice();
    for (Product product: products) {
        consumer.accept(product);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드가 괜찮아 보이더라도 컴파일하려고 하면 이 Consumer 구현에서 totalPrice를 사용할 때 다음과 같은 오류가 발생합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Variable used in lambda expression should be final or effectively final&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 다음과 같습니다. 람다는 본문 외부에 정의된 변수를 수정할 수 없습니다. &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final&lt;/span&gt;, 즉 불변인 한 읽을 수 있습니다. 변수에 액세스하는 이 프로세스를 캡처라고 합니다. 람다는 변수를 캡처할 수 없으며 값만 캡처할 수 있습니다. &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final &lt;/span&gt;변수는 실제로 값입니다.&lt;br /&gt;&lt;br /&gt;오류 메시지는 변수가 최종일 수 있음을 알려주며 이는 Java 언어의 고전적인 개념입니다. 또한 변수가 사실상 &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final &lt;/span&gt;일 수 있음을 알려줍니다. 이 개념은 Java SE 8에서 도입되었습니다. final 변수를 명시적으로 선언하지 않더라도 컴파일러가 이를 수행할 수 있습니다. 이 변수가 람다에서 읽혀지고 수정되지 않은 것으로 확인되면 &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final &lt;/span&gt;선언이 멋지게 추가됩니다. 물론 이는 컴파일된 코드에서 수행되며 컴파일러는 소스 코드를 수정하지 않습니다. 이러한 변수를 &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final&lt;/span&gt;이라고 부르지는 않습니다. 사실상 &lt;span style=&quot;background-color: #ffffff; color: #e76f00; text-align: start;&quot;&gt;final&lt;/span&gt; 변수라고 불립니다. 이것은 매우 유용한 기능입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;람다 직렬화&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다&amp;nbsp;표현식은&amp;nbsp;직렬화할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;구축되었습니다.&lt;br /&gt;&lt;br /&gt;람다&amp;nbsp;표현식을&amp;nbsp;직렬화하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&amp;nbsp;람다&amp;nbsp;표현식은&amp;nbsp;필드에&amp;nbsp;저장될&amp;nbsp;수&amp;nbsp;있으며&amp;nbsp;이&amp;nbsp;필드는&amp;nbsp;생성자&amp;nbsp;또는&amp;nbsp;setter&amp;nbsp;메서드를&amp;nbsp;통해&amp;nbsp;액세스될&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;그런&amp;nbsp;다음&amp;nbsp;런타임에&amp;nbsp;개체&amp;nbsp;상태를&amp;nbsp;인식하지&amp;nbsp;못한&amp;nbsp;채&amp;nbsp;람다&amp;nbsp;표현식이&amp;nbsp;있을&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;따라서&amp;nbsp;기존&amp;nbsp;직렬화&amp;nbsp;가능&amp;nbsp;클래스와의&amp;nbsp;역호환성을&amp;nbsp;유지하기&amp;nbsp;위해&amp;nbsp;람다&amp;nbsp;식을&amp;nbsp;직렬화하는&amp;nbsp;것이&amp;nbsp;가능합니다.&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>lambda</category>
      <category>람다</category>
      <category>람다식</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/5</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%9E%91%EC%84%B1-Writing-Your-First-Lambda-Expression#entry5comment</comments>
      <pubDate>Tue, 12 Sep 2023 14:41:36 +0900</pubDate>
    </item>
    <item>
      <title>JMeter Test Plan</title>
      <link>https://i-dreamers.tistory.com/entry/JMeter-Test-Plan</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter에서 Test Plan은 성능 테스트 시나리오의 컨테이너 역할을 하는 기본 구성 요소입니다. 이는 본질적으로 성능 테스트를 위한 청사진으로, 테스트의 구조, 설정 및 논리를 간략하게 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 JMeter 테스트 계획과 주요 구성 요소에 대한 개요입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Test Plan&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JMeter 테스트 스크립트의 최상위 요소는 &quot;Test Plan&quot;입니다. 성능 테스트를 구성하는 모든 요소와 구성 요소에 대한 기본 컨테이너 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Thread Group&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;Test Plan&lt;/span&gt; 내에서 &quot;Thread Group&quot; 요소는 가상 사용자(스레드)의 특성과 요청 실행 방법을 정의하는 곳입니다. 스레드 개수, 램프업 시간, 반복횟수와 같은 세부 정보를 지정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Controllers&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Controller는 스레드 그룹 내 요청의 순서와 흐름을 결정하는 요소입니다. &lt;br /&gt;Common controllers include:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;HTTP Request Defaults&lt;/b&gt;: Sets default values for HTTP requests within the thread group.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Recording Controller&lt;/b&gt;: Groups requests generated during recording.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transaction Controller&lt;/b&gt;: Groups requests into transactions for measuring response times.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Loop Controller&lt;/b&gt;: Specifies how many times a child element should be executed.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;If Controller&lt;/b&gt;: Allows conditional execution of child elements.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;While Controller&lt;/b&gt;: Repeats execution of child elements while a condition is true.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Random Controller&lt;/b&gt;: Randomly selects child elements for execution.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Switch Controller&lt;/b&gt;: Routes requests based on a condition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Samplers&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Sampler는&amp;nbsp;대상&amp;nbsp;서버에&amp;nbsp;요청을&amp;nbsp;보내는&amp;nbsp;일을&amp;nbsp;담당합니다. &lt;br /&gt;Common samplers include:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;HTTP Request&lt;/b&gt;: Sends HTTP or HTTPS requests to a web server.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FTP Request&lt;/b&gt;: Performs FTP operations.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JDBC Request&lt;/b&gt;: Sends SQL queries to a database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TCP Sampler&lt;/b&gt;: Sends custom TCP requests.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SMTP Sampler&lt;/b&gt;: Sends emails.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SOAP/XML-RPC Request&lt;/b&gt;: Sends SOAP or XML-RPC requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Listeners&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Listener는 테스트 결과를 수집하고 표시하는 데 사용되는 요소입니다. 응답 시간, 오류율 및 기타 측정항목에 대한 정보를 제공합니다. &lt;br /&gt;Common listeners include:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;View Results Tree&lt;/b&gt;: Displays results in a tree-like structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary Report&lt;/b&gt;: Provides a summary of test results.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Aggregate Report&lt;/b&gt;: Generates an aggregate report with statistics.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Graphs (e.g., Response Times Over Time)&lt;/b&gt;: Displays test data graphically.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CSV Output&lt;/b&gt;: Writes results to a CSV file.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Assertion Results&lt;/b&gt;: Shows the outcome of assertion checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Timers&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Timer를&amp;nbsp;사용하면&amp;nbsp;요청이나&amp;nbsp;스레드&amp;nbsp;간에&amp;nbsp;지연을&amp;nbsp;도입할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;현실적인&amp;nbsp;사용자&amp;nbsp;행동을&amp;nbsp;시뮬레이션할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;Common timers include:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Constant Timer&lt;/b&gt;: Adds a fixed delay between requests.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Uniform Random Timer&lt;/b&gt;: Introduces random delays within a specified range.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gaussian Random Timer&lt;/b&gt;: Adds delays following a Gaussian distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Assertions&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Assertions은 서버 응답이 특정 기준을 충족하는지 또는 예상되는 콘텐츠를 포함하는지 확인하는 데 사용됩니다. &lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;Assertions&lt;/span&gt;&amp;nbsp;실패하면 테스트에서 요청을 실패로 표시할 수 있습니다.&lt;br /&gt;Common assertions include:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Response Assertion&lt;/b&gt;: Checks the response text against patterns.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Duration Assertion&lt;/b&gt;: Verifies that the response time is within a specified range.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XML Assertion&lt;/b&gt;: Validates XML responses.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSON Assertion&lt;/b&gt;: Validates JSON responses.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Configuration Elements&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Configuration elements를&amp;nbsp;사용하여&amp;nbsp;변수,&amp;nbsp;데이터&amp;nbsp;소스를&amp;nbsp;설정하거나&amp;nbsp;다른&amp;nbsp;테스트&amp;nbsp;요소의&amp;nbsp;동작을&amp;nbsp;제어할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예로는&amp;nbsp;CSV&amp;nbsp;데이터&amp;nbsp;세트&amp;nbsp;구성&amp;nbsp;및&amp;nbsp;사용자&amp;nbsp;정의&amp;nbsp;변수가&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pre-Processors and Post-Processors&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이러한&amp;nbsp;요소를&amp;nbsp;사용하면&amp;nbsp;요청을&amp;nbsp;전송하기&amp;nbsp;전에&amp;nbsp;수정하거나&amp;nbsp;요청을&amp;nbsp;받은&amp;nbsp;후&amp;nbsp;응답을&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예에는&amp;nbsp;정규식&amp;nbsp;추출기&amp;nbsp;및&amp;nbsp;JSON&amp;nbsp;경로&amp;nbsp;포스트프로세서가&amp;nbsp;포함됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Test Fragments&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Test fragments는 여러 Test Plan에 포함될 수 있는 재사용 가능한 구성 요소입니다..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JMeter&amp;nbsp;테스트&amp;nbsp;계획을&amp;nbsp;생성하려면&amp;nbsp;일반적으로&amp;nbsp;스레드&amp;nbsp;그룹을&amp;nbsp;추가하고,&amp;nbsp;샘플러를&amp;nbsp;구성하고,&amp;nbsp;결과를&amp;nbsp;캡처하기&amp;nbsp;위한&amp;nbsp;리스너를&amp;nbsp;추가하고,&amp;nbsp;테스트&amp;nbsp;목표에&amp;nbsp;따라&amp;nbsp;설정을&amp;nbsp;조정하는&amp;nbsp;것부터&amp;nbsp;시작합니다.&amp;nbsp;그런&amp;nbsp;다음&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;컨트롤러,&amp;nbsp;타이머&amp;nbsp;및&amp;nbsp;기타&amp;nbsp;요소를&amp;nbsp;추가하여&amp;nbsp;실제&amp;nbsp;사용자&amp;nbsp;동작&amp;nbsp;및&amp;nbsp;로드&amp;nbsp;시나리오를&amp;nbsp;시뮬레이션하여&amp;nbsp;테스트&amp;nbsp;계획을&amp;nbsp;세밀하게&amp;nbsp;조정할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;마지막으로&amp;nbsp;테스트&amp;nbsp;계획을&amp;nbsp;실행하여&amp;nbsp;정의된&amp;nbsp;조건에서&amp;nbsp;애플리케이션의&amp;nbsp;성능을&amp;nbsp;측정합니다.&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>JMeter</category>
      <category>TestPlan</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/4</guid>
      <comments>https://i-dreamers.tistory.com/entry/JMeter-Test-Plan#entry4comment</comments>
      <pubDate>Thu, 7 Sep 2023 16:22:13 +0900</pubDate>
    </item>
    <item>
      <title>Apache JMeter(https://jmeter.apache.org)</title>
      <link>https://i-dreamers.tistory.com/entry/Apache-JMeterhttpsjmeterapacheorg</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRfe7i/btstgfvF74w/HKkrqhwCWMfYJqoEmIxQHK/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRfe7i/btstgfvF74w/HKkrqhwCWMfYJqoEmIxQHK/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRfe7i/btstgfvF74w/HKkrqhwCWMfYJqoEmIxQHK/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRfe7i%2FbtstgfvF74w%2FHKkrqhwCWMfYJqoEmIxQHK%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;185&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache&amp;nbsp;JMeter는&amp;nbsp;애플리케이션의&amp;nbsp;로드&amp;nbsp;테스트,&amp;nbsp;성능&amp;nbsp;테스트&amp;nbsp;및&amp;nbsp;기능&amp;nbsp;테스트를&amp;nbsp;위해&amp;nbsp;설계된&amp;nbsp;널리&amp;nbsp;사용되는&amp;nbsp;오픈&amp;nbsp;소스&amp;nbsp;소프트웨어&amp;nbsp;도구입니다.&amp;nbsp;원래&amp;nbsp;Apache&amp;nbsp;Software&amp;nbsp;Foundation에서&amp;nbsp;개발되었으며&amp;nbsp;Java로&amp;nbsp;작성되었습니다.&amp;nbsp;JMeter는&amp;nbsp;확장성이&amp;nbsp;뛰어나며&amp;nbsp;다양한&amp;nbsp;유형의&amp;nbsp;애플리케이션과&amp;nbsp;서비스를&amp;nbsp;테스트하기&amp;nbsp;위한&amp;nbsp;광범위한&amp;nbsp;기능을&amp;nbsp;제공합니다.&amp;nbsp;JMeter의&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;주요&amp;nbsp;측면은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;성능&amp;nbsp;시험:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 주로 여러 사용자 또는 가상 사용자를 시뮬레이션하여 다양한 로드에서 애플리케이션이나 서비스가 어떻게 작동하는지 평가하는 성능 테스트에 사용됩니다. 이는 애플리케이션의 병목 현상과 성능 문제를 식별하는 데 도움이 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;부하 테스트:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부하&amp;nbsp;테스트에는&amp;nbsp;애플리케이션에&amp;nbsp;지정된&amp;nbsp;부하(동시&amp;nbsp;사용자,&amp;nbsp;초당&amp;nbsp;요청&amp;nbsp;수&amp;nbsp;등)를&amp;nbsp;적용하여&amp;nbsp;해당&amp;nbsp;부하에서의&amp;nbsp;성능과&amp;nbsp;안정성을&amp;nbsp;평가하는&amp;nbsp;작업이&amp;nbsp;포함됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;기능&amp;nbsp;테스트:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 애플리케이션의 기능이 예상대로 작동하는지 확인하는 기능 테스트에도 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;프로토콜 지원:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 HTTP, HTTPS, FTP, JDBC, LDAP, SOAP, JMS 등을 포함한 광범위한 프로토콜을 지원합니다. 따라서 웹 애플리케이션, 데이터베이스, 웹 서비스 및 기타 유형의 서비스를 테스트하는 데 적합합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;스크립팅&amp;nbsp;및&amp;nbsp;테스트&amp;nbsp;시나리오:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter의 테스트 시나리오는 스레드 그룹, 샘플러(요청용), 로직 컨트롤러(흐름 제어용) 및 리스너(결과 보고용)와 같은 요소의 조합을 사용하여 생성됩니다.&lt;br /&gt;테스트를&amp;nbsp;기록하거나,&amp;nbsp;수동으로&amp;nbsp;스크립팅하거나,&amp;nbsp;외부&amp;nbsp;소스에서&amp;nbsp;가져올&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;매개변수화:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter를 사용하면 테스트를 매개변수화하여 변수와 CSV 파일을 사용하여 요청에 다양한 데이터를 제공할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;Assertions:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답의&amp;nbsp;정확성을&amp;nbsp;확인하기&amp;nbsp;위해&amp;nbsp;어설션을&amp;nbsp;추가할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;JMeter는&amp;nbsp;다양한&amp;nbsp;내장&amp;nbsp;주장을&amp;nbsp;제공하며&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;사용자&amp;nbsp;정의&amp;nbsp;주장을&amp;nbsp;생성할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;보고&amp;nbsp;및&amp;nbsp;분석:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 그래프, 테이블 및 요약 보고서를 포함하여 테스트 결과를 분석하기 위한 다양한 리스너 및 보고 도구를 제공합니다. 다양한 형식으로 보고서를 생성하고 내보낼 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;분산 테스트:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 분산 테스트를 지원하므로 보다 현실적인 테스트 시나리오를 위해 여러 컴퓨터에 로드를 분산할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;플러그인 및 확장:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 특정 사용 사례에 맞게 기능을 확장할 수 있는 풍부한 플러그인 및 확장 에코시스템을 갖추고 있습니다. 이 플러그인은 추가 프로토콜부터 고급 보고까지 모든 것을 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;확장성:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는&amp;nbsp;복잡한&amp;nbsp;테스트&amp;nbsp;요구&amp;nbsp;사항을&amp;nbsp;충족하기&amp;nbsp;위해&amp;nbsp;스크립팅(예:&amp;nbsp;Beanshell,&amp;nbsp;JavaScript),&amp;nbsp;사용자&amp;nbsp;정의&amp;nbsp;샘플러&amp;nbsp;및&amp;nbsp;기타&amp;nbsp;메커니즘을&amp;nbsp;통해&amp;nbsp;확장될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;오픈&amp;nbsp;소스&amp;nbsp;및&amp;nbsp;커뮤니티&amp;nbsp;지원:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 오픈 소스입니다. 즉, 무료로 사용할 수 있으며 지원, 문서 및 추가 플러그인을 제공하는 사용자 및 기여자로 구성된 활발한 커뮤니티가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;&lt;b&gt;Cross-Platform:&lt;/b&gt;&lt;/u&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JMeter는 Cross-Platform이며 Windows, macOS, Linux를 포함한 다양한 운영 체제에서 사용할 수 있습니다.&lt;br /&gt;JMeter는&amp;nbsp;개발자,&amp;nbsp;테스터&amp;nbsp;및&amp;nbsp;품질&amp;nbsp;보증&amp;nbsp;전문가가&amp;nbsp;애플리케이션과&amp;nbsp;서비스의&amp;nbsp;성능,&amp;nbsp;안정성&amp;nbsp;및&amp;nbsp;기능을&amp;nbsp;보장하기&amp;nbsp;위해&amp;nbsp;사용하는&amp;nbsp;다목적&amp;nbsp;도구입니다.&amp;nbsp;사용자&amp;nbsp;친화적인&amp;nbsp;인터페이스와&amp;nbsp;강력한&amp;nbsp;기능으로&amp;nbsp;인해&amp;nbsp;광범위한&amp;nbsp;테스트&amp;nbsp;시나리오에서&amp;nbsp;널리&amp;nbsp;사용됩니다.&lt;/p&gt;</description>
      <category>IT개발</category>
      <category>JMeter</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/3</guid>
      <comments>https://i-dreamers.tistory.com/entry/Apache-JMeterhttpsjmeterapacheorg#entry3comment</comments>
      <pubDate>Thu, 7 Sep 2023 14:31:14 +0900</pubDate>
    </item>
    <item>
      <title>오사카에서 반드시 먹어야 하는 음식</title>
      <link>https://i-dreamers.tistory.com/entry/%EC%98%A4%EC%82%AC%EC%B9%B4%EC%97%90%EC%84%9C-%EB%B0%98%EB%93%9C%EC%8B%9C-%EB%A8%B9%EC%96%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%8C%EC%8B%9D</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일본 요리의 중심지인 오사카는 다양하고 맛있는 음식으로 미식가들을 즐겁게 하는 도시입니다. 길거리 음식부터 파인 다이닝까지 모든 미각을 만족시킬 무언가가 있습니다. 기억에 남을 미식 여행을 약속하는 오사카의 음식과 레스토랑을 소개합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;타코야키&amp;nbsp;-&amp;nbsp;아이즈야(あいづや)&lt;/b&gt;&lt;/u&gt;:&amp;nbsp;아이즈야는&amp;nbsp;활기찬&amp;nbsp;도톤보리&amp;nbsp;지역에&amp;nbsp;위치한&amp;nbsp;사랑받는&amp;nbsp;타코야키&amp;nbsp;전문점입니다.&amp;nbsp;문어로&amp;nbsp;속을&amp;nbsp;채운&amp;nbsp;맛있는&amp;nbsp;볼에&amp;nbsp;타코야키&amp;nbsp;소스,&amp;nbsp;마요네즈,&amp;nbsp;가다랑어포&amp;nbsp;플레이크,&amp;nbsp;해초를&amp;nbsp;얹어&amp;nbsp;완벽하게&amp;nbsp;조리했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dygYsb/btsoDJ7YkNx/2uesaHgoRx3oPi2H0sBSuk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dygYsb/btsoDJ7YkNx/2uesaHgoRx3oPi2H0sBSuk/img.webp&quot; data-alt=&quot;아이즈야 매장&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dygYsb/btsoDJ7YkNx/2uesaHgoRx3oPi2H0sBSuk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdygYsb%2FbtsoDJ7YkNx%2F2uesaHgoRx3oPi2H0sBSuk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이즈야 매장&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oG1Qz/btsozS5hUnZ/DIXiVhrS1g6hFW3JPJ7eqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oG1Qz/btsozS5hUnZ/DIXiVhrS1g6hFW3JPJ7eqK/img.jpg&quot; data-alt=&quot;타코야키&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oG1Qz/btsozS5hUnZ/DIXiVhrS1g6hFW3JPJ7eqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoG1Qz%2FbtsozS5hUnZ%2FDIXiVhrS1g6hFW3JPJ7eqK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;530&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;타코야키&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;오코노미야키&amp;nbsp;-&amp;nbsp;미즈노(みづの)&lt;/b&gt;&lt;/u&gt;:&amp;nbsp;도톤보리에&amp;nbsp;위치한&amp;nbsp;미즈노는&amp;nbsp;오코노미야키&amp;nbsp;전문점입니다.&amp;nbsp;그들의&amp;nbsp;맛있고&amp;nbsp;풍미있는&amp;nbsp;팬케이크는&amp;nbsp;다양한&amp;nbsp;충전재로&amp;nbsp;만들어지고&amp;nbsp;철판&amp;nbsp;그릴에서&amp;nbsp;요리됩니다.&amp;nbsp;Mizuno는&amp;nbsp;여러&amp;nbsp;세대에&amp;nbsp;걸쳐&amp;nbsp;군침이&amp;nbsp;도는&amp;nbsp;오코노미야키를&amp;nbsp;제공하고&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pI0Yn/btsoyoQ98CB/hN0nvf4cDbSKIWypNeIcbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pI0Yn/btsoyoQ98CB/hN0nvf4cDbSKIWypNeIcbK/img.jpg&quot; data-alt=&quot;도톤보리 미즈노 매장&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pI0Yn/btsoyoQ98CB/hN0nvf4cDbSKIWypNeIcbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpI0Yn%2FbtsoyoQ98CB%2FhN0nvf4cDbSKIWypNeIcbK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;533&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;도톤보리 미즈노 매장&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AngKb/btsoxFeY4ZF/OpoE4YqXYXzPmrjfaoxjU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AngKb/btsoxFeY4ZF/OpoE4YqXYXzPmrjfaoxjU1/img.jpg&quot; data-alt=&quot;오코노미야키&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AngKb/btsoxFeY4ZF/OpoE4YqXYXzPmrjfaoxjU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAngKb%2FbtsoxFeY4ZF%2FOpoE4YqXYXzPmrjfaoxjU1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;450&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오코노미야키&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;쿠시카츠&amp;nbsp;다루마(串カツ&amp;nbsp;だるま)&lt;/b&gt;&lt;/u&gt;:&amp;nbsp;도톤보리와&amp;nbsp;신세카이&amp;nbsp;근처에&amp;nbsp;위치한&amp;nbsp;쿠시카츠&amp;nbsp;다루마는&amp;nbsp;쿠시카츠&amp;nbsp;애호가라면&amp;nbsp;꼭&amp;nbsp;방문해야&amp;nbsp;할&amp;nbsp;곳입니다.&amp;nbsp;이&amp;nbsp;레스토랑은&amp;nbsp;고기,&amp;nbsp;해산물,&amp;nbsp;야채를&amp;nbsp;포함한&amp;nbsp;다양한&amp;nbsp;꼬치&amp;nbsp;튀김을&amp;nbsp;특별한&amp;nbsp;소스에&amp;nbsp;담근&amp;nbsp;것을&amp;nbsp;제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duCyyc/btsoyYdC0PB/0nWFyE4b4G22Ht7BAULz2K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duCyyc/btsoyYdC0PB/0nWFyE4b4G22Ht7BAULz2K/img.jpg&quot; data-alt=&quot;쿠시카츠 다루마 도토보리점&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duCyyc/btsoyYdC0PB/0nWFyE4b4G22Ht7BAULz2K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduCyyc%2FbtsoyYdC0PB%2F0nWFyE4b4G22Ht7BAULz2K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;1067&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쿠시카츠 다루마 도토보리점&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbo0ZD/btsozTb4D5i/qzrKki8YOi8v8IpbJJMHYK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbo0ZD/btsozTb4D5i/qzrKki8YOi8v8IpbJJMHYK/img.jpg&quot; data-alt=&quot;꼬치 튀김&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbo0ZD/btsozTb4D5i/qzrKki8YOi8v8IpbJJMHYK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbo0ZD%2FbtsozTb4D5i%2FqzrKki8YOi8v8IpbJJMHYK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;601&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;꼬치 튀김&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;마츠자카큐 야키니쿠 M (松阪牛焼肉 M)&lt;/b&gt;&lt;/u&gt;: 프리미엄 야키니쿠 경험을 원하시면 마츠자카큐 야키니쿠 M으로 가십시오. 최상급 마쓰사카 쇠고기를 전문으로 취급하므로 완벽하게 조리된 최고급 부위를 맛볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;1193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNxBEU/btsoyZjjPR4/Ywc31KdTtrdaDxCyNKFOm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNxBEU/btsoyZjjPR4/Ywc31KdTtrdaDxCyNKFOm1/img.png&quot; data-alt=&quot;마츠자카큐 야끼니쿠 M&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNxBEU/btsoyZjjPR4/Ywc31KdTtrdaDxCyNKFOm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNxBEU%2FbtsoyZjjPR4%2FYwc31KdTtrdaDxCyNKFOm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;986&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;1193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마츠자카큐 야끼니쿠 M&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4cSwh/btsoxqvzCyJ/DyjNL3UvOzgrlvxCxE41V0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4cSwh/btsoxqvzCyJ/DyjNL3UvOzgrlvxCxE41V0/img.jpg&quot; data-alt=&quot;야끼니쿠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4cSwh/btsoxqvzCyJ/DyjNL3UvOzgrlvxCxE41V0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4cSwh%2FbtsoxqvzCyJ%2FDyjNL3UvOzgrlvxCxE41V0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;야끼니쿠&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;잇푸도&amp;nbsp;난바(一風堂&amp;nbsp;難波)&lt;/b&gt;&lt;/u&gt;:&amp;nbsp;라면&amp;nbsp;애호가라면&amp;nbsp;번화한&amp;nbsp;난바&amp;nbsp;지역에&amp;nbsp;위치한&amp;nbsp;잇푸도&amp;nbsp;난바를&amp;nbsp;놓쳐서는&amp;nbsp;안&amp;nbsp;됩니다.&amp;nbsp;Ippudo는&amp;nbsp;진하고&amp;nbsp;풍미가&amp;nbsp;풍부한&amp;nbsp;돈코츠(돼지&amp;nbsp;뼈)&amp;nbsp;국물로&amp;nbsp;유명하며&amp;nbsp;만족스러운&amp;nbsp;라면&amp;nbsp;한&amp;nbsp;그릇을&amp;nbsp;제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;805&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o48at/btsoxdv9LYt/U4rB9IEscGlRFz7T8Kv1gK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o48at/btsoxdv9LYt/U4rB9IEscGlRFz7T8Kv1gK/img.jpg&quot; data-alt=&quot;잇푸도 난바점&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o48at/btsoxdv9LYt/U4rB9IEscGlRFz7T8Kv1gK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo48at%2Fbtsoxdv9LYt%2FU4rB9IEscGlRFz7T8Kv1gK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;664&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;805&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잇푸도 난바점&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbK3HK/btsoxdCV9Zu/KbDwkesk8iGYtFWk6H0Ow1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbK3HK/btsoxdCV9Zu/KbDwkesk8iGYtFWk6H0Ow1/img.jpg&quot; data-alt=&quot;잇푸도 라멘&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbK3HK/btsoxdCV9Zu/KbDwkesk8iGYtFWk6H0Ow1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbK3HK%2FbtsoxdCV9Zu%2FKbDwkesk8iGYtFWk6H0Ow1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잇푸도 라멘&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;Endo&amp;nbsp;Sushi(えんどう寿司)&lt;/b&gt;&lt;/u&gt;:&amp;nbsp;중앙&amp;nbsp;도매&amp;nbsp;시장(Kuromon&amp;nbsp;Ichiba)에&amp;nbsp;위치한&amp;nbsp;Endo&amp;nbsp;Sushi는&amp;nbsp;일본&amp;nbsp;요리&amp;nbsp;예술의&amp;nbsp;진정한&amp;nbsp;맛을&amp;nbsp;제공하는&amp;nbsp;신선하고&amp;nbsp;맛있는&amp;nbsp;스시로&amp;nbsp;유명합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;946&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbtReG/btsoyop60M7/5tWXgIckyzHgNZ4DbGTxFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbtReG/btsoyop60M7/5tWXgIckyzHgNZ4DbGTxFK/img.png&quot; data-alt=&quot;엔도 스시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbtReG/btsoyop60M7/5tWXgIckyzHgNZ4DbGTxFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbtReG%2Fbtsoyop60M7%2F5tWXgIckyzHgNZ4DbGTxFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;564&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;946&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;엔도 스시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;1174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IkDhB/btsoCFxTuVD/AvbTJBeeGRe73VSIDZQywk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IkDhB/btsoCFxTuVD/AvbTJBeeGRe73VSIDZQywk/img.png&quot; data-alt=&quot;엔도 스시 메뉴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IkDhB/btsoCFxTuVD/AvbTJBeeGRe73VSIDZQywk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIkDhB%2FbtsoCFxTuVD%2FAvbTJBeeGRe73VSIDZQywk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;1058&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;1174&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;엔도 스시 메뉴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;오사카에서는&amp;nbsp;레스토랑뿐만&amp;nbsp;아니라&amp;nbsp;도톤보리&amp;nbsp;및&amp;nbsp;구로몬&amp;nbsp;이치바와&amp;nbsp;같은&amp;nbsp;번화한&amp;nbsp;길거리&amp;nbsp;음식&amp;nbsp;장면에서도&amp;nbsp;맛있는&amp;nbsp;음식을&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;활기찬&amp;nbsp;지역을&amp;nbsp;탐험하면&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;숨겨진&amp;nbsp;보석과&amp;nbsp;지역&amp;nbsp;명소를&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;식도락가이든&amp;nbsp;단순히&amp;nbsp;맛있는&amp;nbsp;음식을&amp;nbsp;즐기는&amp;nbsp;사람이든&amp;nbsp;오사카의&amp;nbsp;음식&amp;nbsp;풍경은&amp;nbsp;오래도록&amp;nbsp;기억에&amp;nbsp;남을&amp;nbsp;것입니다.&amp;nbsp;그러니&amp;nbsp;풍미에&amp;nbsp;빠지고&amp;nbsp;맛을&amp;nbsp;음미하고&amp;nbsp;이&amp;nbsp;놀라운&amp;nbsp;도시의&amp;nbsp;미식의&amp;nbsp;경이로움에&amp;nbsp;빠져보세요.&lt;/p&gt;</description>
      <category>여행</category>
      <category>꼬치튀김</category>
      <category>다루마</category>
      <category>라멘</category>
      <category>스시</category>
      <category>야끼니쿠</category>
      <category>야키니쿠</category>
      <category>오사카</category>
      <category>오코노미야끼</category>
      <category>쿠시카츠</category>
      <category>타코야키</category>
      <author>환영전사</author>
      <guid isPermaLink="true">https://i-dreamers.tistory.com/2</guid>
      <comments>https://i-dreamers.tistory.com/entry/%EC%98%A4%EC%82%AC%EC%B9%B4%EC%97%90%EC%84%9C-%EB%B0%98%EB%93%9C%EC%8B%9C-%EB%A8%B9%EC%96%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%8C%EC%8B%9D#entry2comment</comments>
      <pubDate>Sun, 23 Jul 2023 19:27:40 +0900</pubDate>
    </item>
  </channel>
</rss>