<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Justn</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 13 Apr 2026 06:36:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Justn</title>
            <url>https://velog.velcdn.com/images/justn-hyeok/profile/5e4aa6c2-b2ab-4f9e-a1ce-84fa2f4a0f58/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Justn. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/justn-hyeok" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Claude Code가 요즘 이상하다면?]]></title>
            <link>https://velog.io/@justn-hyeok/off-claude-code-adaptive-thinking</link>
            <guid>https://velog.io/@justn-hyeok/off-claude-code-adaptive-thinking</guid>
            <pubDate>Mon, 13 Apr 2026 06:36:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/eec68d7b-d3ee-4157-a632-6a52b064dcc3/image.png" alt=""></p>
<h2 id="요새-claude-code-좀-이상하지-않나요">요새 Claude Code 좀 이상하지 않나요</h2>
<p>Claude Code 사용하다보면 이런 경험이 다들 있으실 겁니다. 분명 Opus 4.6, Sonnet 4.6을 쓰고 있는데, 코드 검증도 똑바로 안 하고 자신 있게 틀린 답을 내놓을 때. 존재하지 않는 API 버전을 지어내거나, 읽지도 않은 파일 구조를 단정하거나, 아무것도 확인 안 하고 &quot;이 부분은 정상입니다&quot;라고 선언하고는 실제로는 에러가 그대로 남아있는 식인 일들.</p>
<p>근데 이게 개인의 설정 문제가 아니었습니다. <strong>2026년 2월부터 누적된 제품 회귀</strong>이고, Anthropic도 공식적으로 인정한 문제였습니다. 다행히 이 문제는 환경 변수 하나로 임시 우회할 수 있습니다.</p>
<h2 id="해결책">해결책</h2>
<pre><code class="language-bash">export CLAUDE_CODE_EFFORT_LEVEL=high
export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1</code></pre>
<p>Max 200$/100$ 요금제를 사용하신다면 <code>CLAUDE_CODE_EFFORT_LEVEL=max</code>로 사용하셔도 좋습니다.</p>
<p>첫 번째 명령어는 effort를 high로 고정하는 겁니다. 기본값이 medium으로 낮춰졌기 때문에, 명시적으로 올려줘야 이전 수준의 추론 깊이를 되찾습니다.</p>
<p>두 번째는 adaptive thinking을 비활성화하고 고정 thinking budget으로 돌리는 겁니다. 모델이 턴마다 &#39;이걸 생각할까 말까&#39;를 판단하는게 아니라, 매번 일정한 추론 토큰을 사용하게 하는겁니다. Boris Cherny가 공식 워크어라운드로 제시한 설정입니다.</p>
<p>영구적인 적용은 <code>~/.zshrc</code> or <code>~/.bashrc</code>에 추가하고 쉘을 재시작하시면 됩니다.</p>
<pre><code class="language-bash">echo &#39;export CLAUDE_CODE_EFFORT_LEVEL=high&#39; &gt;&gt; ~/.zshrc
echo &#39;export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1&#39; &gt;&gt; ~/.zshrc
source ~/.zshrc</code></pre>
<p>설정이 적용됐는지는 Claude Code를 실행했을 때 로고 옆에 &quot;with high effort&quot;가 표시되는지로 확인할 수 있습니다.
<img src="https://velog.velcdn.com/images/justn-hyeok/post/21527784-1096-474a-9994-b5e260808929/image.png" alt=""></p>
<h2 id="배경">배경</h2>
<p>이게 이렇게 된 이유가 있습니다.</p>
<p>Anthropic은 2월에 Opus 4.6을 출시하면서 <strong>adaptive thinking</strong>을 기본 활성화했습니다. 이 기능은 모델이 매 턴마다 &quot;이 요청이 얼마나 복잡한가&quot;를 스스로 판단하고, 복잡하다고 느끼면 깊게, 간단해보이면 얕게 생각합니다. (아예 넘길수도 있구요.) 이론적으로는 토큰 효율과 품질을 동시에 잡는 전략이죠.</p>
<p>문제는 실제 동작입니다. Claude Code 팀 리드 Boris Cherny가 직접 밝혔는데, <strong>특정 턴에서 모델이 thinking을 0 토큰으로 할당하는 경우가 생깁니다.</strong> 생각을 전혀 하지 않은 상태에서 답변을 생성하니 환각이 그대로 나오는데, 문제는 모델이 이 답변에 확신하는 겁니다. 그래서 <strong>생각 안 한 턴에서 자신만만한 거짓말이 섞여 나오는</strong> 패턴이 반복됩니다.</p>
<p>여기에 3월 3일에 기본 effort 수준이 high에서 medium으로 낮춰졌고, 3월 8일부터 thinking redaction이 단계적으로 롤아웃됐습니다. 이런 변경이 누적되면서 복잡한 코딩 작업에서 품질이 엄청 떨어진거죠...</p>
<p>한 커뮤니티 분석에 따르면 <strong>코드 수정 전 리서치 행위가 70% 감소했고</strong>, <strong>사용자가 모델을 중단시키는 빈도가 12배 증가</strong>했고, 벤치마크상 점수는 유지되지만, <strong>실사용에서는 망가진 상태</strong>라고 합니다.</p>
<p>해결책은 위에 적힌대로 하시면 됩니다.</p>
<h2 id="주의-사항">주의 사항</h2>
<p><strong>토큰 소진이 엄청 빨라집니다.</strong> Medium effort + adaptive 조합은 원래 토큰을 아끼는 방향으로 최적화돼 있어요. 이걸 끄면 당연히 같은 작업에 더 많은 토큰이 소비됩니다.</p>
<p>Pro ($20) 플랜 사용자분들은 특히 주의하셔야 해요. 5시간당 약 44,000 토큰 제한에 걸려있는데, 여기에 max effort + adaptive 끄기 조합을 돌리면 한두 시간 안에 제한에 도달할 수 있습니다. Pro 쓰시는 분들은 위에서 알려드린대로 <strong>high까지만 올리는 게 현실적</strong>입니다. Max 플랜이라고 해도 effort를 max로 박아두는 건 복잡한 리팩토링이나 디버깅 세션에만 쓰고, 간단한 작업(git status, 파일 읽기, 짧은 질문 같은 것들)은 기본값으로 두는 게 좋아요.</p>
<p><strong><code>CLAUDE_CODE_EFFORT_LEVEL</code> 환경변수는 모든 다른 설정을 덮어씁니다.</strong> 평소에 슬래시 커맨드 <code>/effort</code>로 세션별 조정하던 습관이 있으시다면, 환경변수 설정한 순간부터 그 커맨드들이 무시됩니다. 세션별로 유동적으로 제어하고 싶으시면 환경변수 대신 <code>--effort</code> 플래그나 <code>/effort</code> 커맨드 쓰시는 게 낫습니다.</p>
<p><strong>그리고 이게 근본 해결은 아닙니다.</strong> 이 설정은 Anthropic이 공식 문서에 &quot;interim workaround(임시 우회)&quot;라고 대놓고 써놓은 임시방편이에요. Adaptive thinking의 under-allocation 문제는 아직 조사 중이고, 향후 모델 업데이트에서 수정될 가능성이 있습니다. 그러니까 이 설정을 평생 유지해야 한다는 뜻이 아니라, <strong>지금 시점의 임시 방어선</strong> 정도로 생각하시면 됩니다.</p>
<h2 id="작업-종류별-설정-전략">작업 종류별 설정 전략</h2>
<p>단일 설정으로 모든 작업을 커버하려고 하지 마시고, 작업 성격에 맞춰서 조정하시는 게 훨씬 효율적입니다.</p>
<p>복잡한 리팩토링, 멀티 파일 디버깅, 아키텍처 설계 같은 <strong>고부하 작업</strong>에는 max effort + adaptive 끄기 조합이 맞습니다. 토큰을 더 쓰더라도 환각 없는 일관된 품질이 중요한 영역이죠.</p>
<p>커밋 메시지 작성, 코드 리뷰, 간단한 Q&amp;A 같은 <strong>일상 작업</strong>은 high effort 정도면 충분해요. Adaptive는 켜둬도 됩니다. 이런 작업에서는 under-allocation 문제가 덜 치명적이거든요.</p>
<p>Subagent나 자동화 파이프라인 내부에서 단순 작업을 반복하는 경우에는 오히려 low effort가 적절합니다. Subagent의 frontmatter에 <code>effort: low</code>를 명시하면 해당 agent가 실행될 때만 낮은 수준으로 동작합니다.</p>
<h2 id="마치며">마치며</h2>
<p>AI 도구 품질이 공지 없이 조용히 바뀌는 상황은 사용자 입장에서 진짜 답답한 일입니다. 벤치마크 수치와 실사용 체감 사이의 간극, 소리 소문 없이 진행되는 기본값 변경, 숨겨진 환경변수로만 우회 가능한 설정들... 이런 게 쌓이면 <strong>내가 뭘 잘못하고 있나</strong> 를 계속 디버깅하게 되죠.</p>
<p>요즘 Anthropic 참 이상하네요. Claude Code 유출이나 Mythos 배포 안 하는 거도 이상하고, 전체적으로 토큰 용량도 체감상 상당히 많이 줄었기도 하구요. Threads 같은 플랫폼에선 OpenAI의 Codex가 많이 바이럴되기도 하던데, 요즘 행보의 연쇄 작용이겠죠.</p>
<p>그래도 이번 adaptive thinking 이슈는 최소한 Anthropic이 공식 문서에 해결책을 등재했고, 팀 리드가 공개적으로 인정했다는 점에서 드러난 케이스입니다. 이 글이 같은 문제 겪으시는 분들한테 도움이 되면 좋겠어요.</p>
<hr>
<p><strong>참고 링크</strong></p>
<ul>
<li><a href="https://code.claude.com/docs/en/model-config">Anthropic 공식 문서: Model Configuration</a></li>
<li><a href="https://news.ycombinator.com/item?id=47664442">Boris Cherny HN 답변 스레드</a></li>
<li><a href="https://dev.to/shuicici/claude-codes-feb-mar-2026-updates-quietly-broke-complex-engineering-heres-the-technical-5b4h">Claude Code Feb–Mar 2026 기술 분석 (dev.to)</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[제 프젝에 jQuery 쓰겠습니다. 리액트왜씀]]></title>
            <link>https://velog.io/@justn-hyeok/use-jquery</link>
            <guid>https://velog.io/@justn-hyeok/use-jquery</guid>
            <pubDate>Wed, 10 Dec 2025 06:31:12 GMT</pubDate>
            <description><![CDATA[<h2 id="제-메인-프로젝트에-jquery-쓰겠습니다">제 메인 프로젝트에 jQuery 쓰겠습니다.</h2>
<p>React는 번들 사이즈만 크고 Virtual DOM? 오버헤드죠?</p>
<p>jQuery는 무려 10년 넘게 사용되는 최고의 라이브러리입니다. 애초에 지금 React, Next.js 이런 거 다 굳이에요, 굳이.</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/8cdbdaea-c2da-4c72-8850-b2d9fad6a885/image.png" alt="증거1: 2025년 12월 기준 jQuery의 GitHub Star 수는 거의 60k이다."></p>
<p>아니 아직도 깃허브에서 무려 59.6k 스타를 가지고 있고요???</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/109fc6f7-5543-4e15-8d39-4eec2f30fa5e/image.png" alt="증거2: 2025년 12월 기준 W3Techs.com에서 조사한 가장 인기있는 JavaScript Library에서 1위를 차지했고, 사용률이 무려 70%가 넘는다."></p>
<p>JavaScript 라이브러리 중에서 무려 사용률이 70%가 넘습니다. 이걸 왜 안 씁니까? 저희 소수가 되지 말고 다수가 됩시다. 지금 리액트 너무 홍대병이에요.</p>
<p>뭣보다 이거 2025년 기준입니다. 글 쓴 시점에서 방금 사진 찍어온거에요.
<a href="https://w3techs.com/">여기</a>에 들어가셔서 확인도 가능합니다.</p>
<p>그냥 잔잔하게 저희 나대지 말고 다시 jQuery 씁시다...</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>죄송합닏다. 헛소리는 줄이고 본론으로 들어가겠습니다.</p>
<hr>
<h2 id="why-do-you-dislike-jquery">Why do you dislike jQuery?</h2>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/94906a55-774e-45e6-9ab6-883cf91c51e1/image.png" alt="2년 전 Reddit에 올라온 글. 왜 jQuery를 싫어하는지 유저들에게 의견을 묻는 게시글이다."></p>
<blockquote>
<p>근데 jQuery 왜 싫어하세요?</p>
</blockquote>
<p>사실 최근에 개발을 시작하셨다면, 특히 요즘 AI로 바이브 코딩 하시는 분들은 애초에 jQuery를 모르실 수도 있습니다. 그니까 &#39;할 줄 모른다&#39;가 아니라 &#39;그게 뭔데?&#39;를 말하는거에요.</p>
<p>jQuery를 안 쓰는 분들의 의견을 제가 인터넷 바다에서 탐색을 해왔습니다. 대부분 이유가 비슷하시더라구요.</p>
<ol>
<li>자유롭고 쉬운 코드 구조가 <strong>스파게티 코드를 유발</strong>함.</li>
<li>대부분의 jQuery 기능을 <strong>ES6+ JavaScript가 해결</strong>함.</li>
<li><strong>Virtual DOM 기반 프레임워크와 철학 자체가 충돌.</strong> (DOM 직접 조작 패러다임)</li>
<li>그저 <strong>레거시</strong>.</li>
</ol>
<p>따지고 보면 다 팩트입니다. 저는 JavaScript 말고 jQuery 강의와 함께 개발에 입문을 했었는데, 쉽지만 자유로운 코드 구조가 존재하는 거도 팩트고, 애초에 jQuery의 대표적인 기능인 <code>$()</code> 마저 이제 ES6+ 에서 다른 형태로 사용할 수 있습니다.</p>
<p>예시를 들어볼까요.</p>
<p>선택자 <code>$()</code>는 <code>document.querySelector()</code>로 대체됐습니다.</p>
<pre><code class="language-js">// jQuery
$(&#39;.btn&#39;)
$(&#39;#app&#39;)

// ES6+
document.querySelectorAll(&#39;.btn&#39;)
document.querySelector(&#39;#app&#39;)</code></pre>
<p>클래스 조작은 선택한 요소에 <code>.classList</code>로 접근할 수 있고요.</p>
<pre><code class="language-js">// jQuery
$(el).addClass(&#39;active&#39;)
$(el).removeClass(&#39;active&#39;)
$(el).toggleClass(&#39;active&#39;)
$(el).hasClass(&#39;active&#39;)

// ES6+
el.classList.add(&#39;active&#39;)
el.classList.remove(&#39;active&#39;)
el.classList.toggle(&#39;active&#39;)
el.classList.contains(&#39;active&#39;)</code></pre>
<p>jQuery의 대표 기능인 <code>Ajax</code>는 <code>Fetch API</code>로 더 간결하게 쓸 수 있고요?</p>
<pre><code class="language-js">// jQuery
$.ajax({ url: &#39;/api&#39;, method: &#39;GET&#39; })
$.get(&#39;/api&#39;)
$.post(&#39;/api&#39;, data)

// ES6+
fetch(&#39;/api&#39;)
fetch(&#39;/api&#39;, { method: &#39;POST&#39;, body: JSON.stringify(data) })</code></pre>
<p>DOM 조작이나 애니메이션도 네이티브 API로 대체됐습니다.</p>
<pre><code class="language-js">// jQuery
$(el).attr(&#39;href&#39;)
$(el).attr(&#39;href&#39;, &#39;url&#39;)
$(el).text()
$(el).html()
$(el).append(child)
$(el).remove()

$(el).fadeIn()
$(el).animate({ opacity: 0 }, 500)

// ES6+
el.getAttribute(&#39;href&#39;)
el.setAttribute(&#39;href&#39;, &#39;url&#39;)
el.textContent
el.innerHTML
el.append(child)
el.remove()

el.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 500 })
// 또는 CSS transition/animation 활용</code></pre>
<p>솔직히 애니메이션은 ES6+가 더 장황하고, 문법 자체도 jQuery가 더 단순하긴 해요. 근데 외부 의존성 없이 대부분의 기능이 대체된 현 시점에서, jQuery를 굳이 다시 쓰긴 힘든 게 사실입니다.</p>
<hr>
<h2 id="근데-솔직히">근데 솔직히...</h2>
<p>레거시 같긴 해요. 근데 아쉬운 점도 분명히 있는 거 같습니다.</p>
<p>jQuery는 장점도 가지고 있는데 이런 큰 단점들 때문에 특유의 장점이 완전히 묻히네요. </p>
<p>위에 코드를 보시면 아실 수 있듯 솔직히 JavaScript 진영에 입문하기 위해서는 ES6+이 좀 장황하게 느껴질 수도 있습니다. 그리고 React처럼 Virtual DOM 원리를 쓰는 라이브러리가 아니라면 jQuery 정도는 그냥 깔아서 문법 짧게 쓰기 좋구요.</p>
<p>그냥 예시를 봅시다!</p>
<pre><code class="language-js">// jQuery
$(&#39;.card&#39;)
  .addClass(&#39;active&#39;)
  .removeClass(&#39;hidden&#39;)
  .find(&#39;.title&#39;)
  .text(&#39;새 제목&#39;)
  .end()
  .find(&#39;.content&#39;)
  .html(&#39;&lt;p&gt;새 내용&lt;/p&gt;&#39;)
  .end()
  .fadeIn()
  .delay(1000)
  .slideUp()

// ES6+
const card = document.querySelector(&#39;.card&#39;)
card.classList.add(&#39;active&#39;)
card.classList.remove(&#39;hidden&#39;)
card.querySelector(&#39;.title&#39;).textContent = &#39;새 제목&#39;
card.querySelector(&#39;.content&#39;).innerHTML = &#39;&lt;p&gt;새 내용&lt;/p&gt;&#39;
card.style.display = &#39;block&#39;
card.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 400 })
  .finished.then(() =&gt; {
    return new Promise(resolve =&gt; setTimeout(resolve, 1000))
  })
  .then(() =&gt; {
    card.animate([
      { height: card.offsetHeight + &#39;px&#39; },
      { height: 0 }
    ], { duration: 400 }).finished.then(() =&gt; {
      card.style.display = &#39;none&#39;
    })
  })</code></pre>
<p>한눈에 봐도 jQuery가 간단해보이지 않나요. 애초에 저런 코드가 나오는 거 자체가 코드를 못 짠 거긴 하지만 저런 식으로 ES6+에 부딪힐 빠엔 혼자할 땐 jQuery를 사용하는게 더 편해보입니다.</p>
<p>아깝다 아까워 이런 그렇게 구리지 않은 친구가 레거시가 되다니. 트렌드가 무섭죠? 곧 React도 이렇게 되려나 ~</p>
<p>근데 반전이 있습니다. 사실 꽤 화제가 됐던 내용이기도 해요.</p>
<hr>
<h2 id="얘-아직도-업데이트-되고-있습니다">얘 아직도 업데이트 되고 있습니다.</h2>
<p><a href="https://jquery.com/">jQuery 공식 사이트</a> 들어가면 볼 수 있는 글자가 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/df2421fc-5a6f-465c-86e2-a4113c415556/image.png" alt="돌아와제이쿼리"></p>
<blockquote>
<p>jQuery 4.0 is coming soon! Prepare by ~~...</p>
</blockquote>
<p>다시 돌아온답니다. 4.0 버전으로요. 이제 다시 React의 시대는 가겠네요 ㅇㅇ 저희 다시 이거 씁시다.</p>
<p>뭐가 바껴서 돌아오는지 제가 정리를 해봤습니다.</p>
<p><strong>jQuery 4.0 주요 변경사항</strong></p>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody><tr>
<td>IE 지원</td>
<td>IE 10 이하 드랍, IE 11은 5.0에서 제거 예정</td>
</tr>
<tr>
<td>레거시 브라우저</td>
<td>Edge Legacy, iOS 11 미만, Firefox 65 미만 지원 중단</td>
</tr>
<tr>
<td>소스 구조</td>
<td>AMD → ES 모듈 마이그레이션, Rollup 번들링</td>
</tr>
<tr>
<td>슬림 빌드</td>
<td>Ajax, Deferreds, Callbacks 제외 — gzip 20kb 미만</td>
</tr>
<tr>
<td>제거된 API</td>
<td><code>push</code>, <code>sort</code>, <code>splice</code>, 자동 JSONP 승격</td>
</tr>
<tr>
<td>추가된 기능</td>
<td>FormData 지원, Trusted Types + CSP 지원</td>
</tr>
</tbody></table>
<p>묘하게 괜찮은 거 같음.</p>
<p>IE 지원 이제 필요 없죠? 누가 씁니까. 앵간해선 안 쓰는 브라우저 관련 기능 지워서 용량 관리 하는 거 상당히 좋아보입니다~ 당연히 레거시 브라우저 관련도 엄청 좋아보이구요.</p>
<p>소스 구조도 현대적으로 바뀌었고, 슬림 빌드 추가도 좋은 거 같습니다. <code>$()</code> 문법만 쓰고 싶을 때 쓰면 좋을 듯요.</p>
<p>제거된 API는 다 이제 대체됐기에 그런 거라 생각이 되고, 추가된 기능도 상당합니다.</p>
<p>현대적이에요. </p>
<p>근데 전 딱히 안 내키네요;</p>
<hr>
<h2 id="이게-그래서-무슨-의미를-가지는가">이게 그래서 무슨 의미를 가지는가?</h2>
<p>사실 그렇게 큰 의미는 없습니다. 앵간한 스타트업이나 신생 프로젝트에선 당연하듯 jQuery는 고려하지도 않을 거고, 옛날 레거시 프로젝트나 취미로 개발을 하는게 아니라면 굳이일 겁니다. </p>
<p>레거시로 남아있던 상징과도 같던 jQuery가 오히려 레거시와는 정반대의 행보를 보이는게 상당히 흥미롭기도 하네요.</p>
<p>그리고 현재 jQuery의 취급을 나중에 React나 Next.js 같은 프레임워크가 이어 받을 수도 있으려나 잘 모르겠네요.</p>
<p>메인 프로젝트에 사용하긴 솔직히 안 땡기는데, 사이드 프로젝트에 한 번 써보는 건 나쁘지 않은 선택이 될 수도 있을 거 같네요. 긴 글 읽어주셔서 감사합니다.ㅎㅎ 아니아니 좀 더 이어쓸게요</p>
<hr>
<h2 id="jquery-40-출시">jQuery 4.0 출시</h2>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/a7725bb8-e68a-41ad-91f9-7555035e494b/image.png" alt="제이쿼리 4.0 출시"></p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/53e3699b-6383-4999-90d2-7e01cef00ccc/image.png" alt="제이쿼리 다운로드 버튼"></p>
<p>다운로드 버튼 눌러도 여기선 다운로드 안 됩니다. </p>
<p>결국엔 출시를 했습니다. jQuery가 업데이트를 했다구요!! 여러가지 변경 사항이 적용을 했고, 해커뉴스 같은 커뮤니티에서도 반응이 긍정적입니다.</p>
<p>다시 태어난 제이쿼리를 사용해서 이 친구를 22세기까지 사용해봅시다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리액트 문서 오타뭐임;; (React 공식 문서 기여 경험)]]></title>
            <link>https://velog.io/@justn-hyeok/stupid-react-docs</link>
            <guid>https://velog.io/@justn-hyeok/stupid-react-docs</guid>
            <pubDate>Wed, 09 Jul 2025 03:52:52 GMT</pubDate>
            <description><![CDATA[<p>뭔가 오픈 소스에 기여해보고 싶다는 생각이 스멀스멀 들고 있었습니다. 그러던 중 벨로그에서 여러 글을 보면서 </p>
<blockquote>
<p>나도 해보고 싶다!!!!</p>
</blockquote>
<p>라는 생각을 가지게 됐습니다.</p>
<p><a href="https://velog.io/@wlgh1553/%EC%B2%AB-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EB%8F%84%EC%A0%84%EA%B8%B0">봤던 문서 1</a> / <a href="https://velog.io/@chy8165/react-%EA%B3%B5%EC%8B%9D%EB%AC%B8%EC%84%9C-%EA%B8%B0%EC%97%AC%ED%95%98%EA%B8%B0">봤던 문서 2</a></p>
<p>근데 막상 제가 뭐 기여할만한 오픈 소스가 없었어요... 그래서 이 목표를 좌절할 때 쯤...</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/5c46d231-2a25-4c3a-8d69-2a9582295155/image.png" alt=""></p>
<p>이런 오타를 찾게 됐었습니다. 평소에도 React 문서를 자주 보던 저한테 이런 오타는 엄청나게 크고 불편하고 나쁜 요소 중 하나였어요.</p>
<p>이걸 수정하고 싶었어요. 어차피 이 문서도 오픈 소스인데? 이걸 수정하면 나도 오픈 소스에 기여한 멋진 사람이 될 수 있을 거 같았습니다!!</p>
<hr>
<h2 id="바로-실행">바로 실행</h2>
<p>일단 어떻게 하는지 알아보기 위해서 <a href="https://github.com/reactjs/ko.react.dev">한국어 리액트 공식 문서 레포지토리</a>를 돌아다녀 봤습니다. 이슈들이랑 PR도 딱 보니까 어떤 식으로 하면 좋을지 감이 잡히더라구요!!</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/99e521c7-74b3-470c-b75b-a2d5c8f86f0f/image.png" alt=""></p>
<p>그래서 이슈를 팠습니다. 다른 이슈에서는 &#39;수정 부탁드립니다&#39;라고 됐었는데, 전 제가 수정하고 싶어서 &#39;수정하겠습니다..!&#39; 라고 했어요.</p>
<p>이제 어떻게 수정해야 하는지를 알아야했습니다. </p>
<p>이걸 또 git clone을 받고, IDE를 켜서 하나하나 보면서 고치면 되는 줄 알았는데, 생각해보니까 깃헙 내에서 수정을 할 수 있잖아요. 그래서 포크를 해서? 바로 <code>인기인는</code>이라는 글자를 <code>인기 있는</code>으로 수정했습니다.</p>
<p>그리고 PR을 올렸어요!</p>
<h2 id="pr">PR</h2>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/95f8e515-2ffd-4020-bfc5-83fc24b85350/image.png" alt=""></p>
<p>짠. 저렇게 PR을 올렸어요. 필수 확인 사항을 하나하나 구경하고? 괜찮을 거를 확인해서 체크박스에 체크를 한 뒤, PR을 올리고 몇 분이 지나니까...</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/ae919e74-8670-4348-8132-7bc5c6e25827/image.png" alt=""></p>
<p>LGTM과 함께 approved 됐습니다.</p>
<hr>
<h2 id="이걸-통해-얻은-것">이걸 통해 얻은 것</h2>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/2fb99d22-ae09-498f-bf48-cea3edff871f/image.png" alt=""></p>
<p>간지 작살 reactjs의 레포지토리를 제 프로필에 pin하게 됐습니다. 엄청 기분이 좋았어요 ㅎㅎㅎ</p>
<p>그리고</p>
<p><img src="https://velog.velcdn.com/images/justn-hyeok/post/82a27e3b-423e-40e2-9e3a-710cfd9b6a51/image.png" alt=""></p>
<p>제 커밋이 남겨졌습니다!!</p>
<p>너무 멋져요. 행복해</p>
<hr>
<h2 id="감사합니다">감사합니다</h2>
<p>너무 자랑하고 싶어서 썼습니다. 하트 하나씩만 부탁드려요.
<img src="https://velog.velcdn.com/images/justn-hyeok/post/a9be4b04-4136-43fa-a1ad-cca488cc25d4/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>