Outsider's Dev Storyhttps://blog.outsider.ne.kr/Stay Hungry. Stay Foolish. Don't Be Satisfied.2024-03-17T22:02:38+09:00Textcube 1.10.7 : Tempo primo[Book] 두려움 없는 조직 - 심리적 안정감은 어떻게 조직의 학습, 혁신, 성장을 일으키는가Outsiderhttps://blog.outsider.ne.kr/17112024-03-17T21:44:29+09:002024-03-17T21:44:29+09:00<div>
<fieldset style="padding: 20px 5px 5px 5px;">
<legend><a href="https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=210117981">두려움 없는 조직 - 심리적 안정감은 어떻게 조직의 학습, 혁신, 성장을 일으키는가</a></legend>
<table>
<tbody>
<tr>
<td>
<a href="https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=210117981"><img src="//blog.outsider.ne.kr/attach/1/4380922434.jpg" alt="책 표지" title="" /></a>
</td>
<td style="vertical-align: top">
<a href="https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=210117981">두려움 없는 조직 - 심리적 안정감은 어떻게 조직의 학습, 혁신, 성장을 일으키는가</a> - ⭐⭐
<br>에이미 에드먼슨 지음<br>최윤영 옮김<br>다산북스<br>원제: The Fearless Organization
</td>
</tr>
</tbody>
</table>
</fieldset>
<br>
</div>
<p>하버드 경영대학원의 종신 교수이면서 25년간 '심리적 안정감'을 연구한 에이미 에드먼슨이 조직 내 심리적 안정감에 관해서 설명하는 책이고 회사의 동료들과 독서 모임으로 같이 읽었다. 항상 느끼던 거지만 이런 류의 책은 나하고는 잘 맞지 않는다는 생각이 든다. 딱히 정의하기가 쉽지는 않은데 똑같이 조직이나 문화에 대한 얘기라고 하더라고 <a href="https://blog.outsider.ne.kr/1672">개발자에게 물어보세요</a>처럼 더 실무와 경험을 담은 책이 많이 와 닿고 이 책이나 이전의 다른 리더십 책처럼 컨설팅 느낌의 조언이 모인 책은 좋은 말 모음집처럼 느껴져서 좋은 말이긴 하지만 또 크게 와닿지는 않는다.(성격이 그래서일지도...)</p>
<blockquote>
<p>오늘날 기업의 형태로 모인 조직에서 '침묵의 힘'은 압도적이다. 직장인 대다수는 '유감스러운 상황'보다 '안전한 상황'이 더 낫다는 암묵적인 논리에 젖어 있다. 이는 아주 어린 시절부터 학습해온 결과다. 인간관계가 나빠질까 봐, 문제를 제기할 자신이 없어서, 나의 안위를 보호하기 위해서 이견이 있음에도 섣불리 입을 떼지 못한다.</p>
</blockquote>
<blockquote>
<p>넓은 의미에서 심리적 안정감은 '조직 구성원이 자유롭게 의사소통할 수 있는 분위기'를 뜻한다. 좀 더 구체적으로는 당황스러운 상황에 직면하거나 응징당할지도 모른다는 두려움에서 벗어나, 자신의 실수와 우려를 기꺼이 이야기할 수 있는 분위기다.</p>
</blockquote>
<blockquote>
<p>실패를 보고하기 두려워하는 문화는 심리적 안정감이 낮은 조직에서 발견되는 흔한 현상이다. 따라서 리더가 실패를 어떻게 바라보느냐가 조직의 심리적 안정감을 형성하는 데 중요한 요소가 된다.</p>
</blockquote>
<p>다른 전통적 조직에 비해서 IT 조직은 꽤 오랫동안 이런 심리적 안정감이 중요하다는 것을 인지하고 있었고 개선하기 위해 노력했다고 생각한다. 완전하다고는 할 수 없지만 타 분야보다는 꽤 높은 수준이라고 생각하고 있고 한국이 전반적으로 다른 나라에 비해 이런 부분이 뒤처지는 걸 생각한다면 좀 더 낫다고 생각한다. 대표적으로는 장애가 발생했을 때 이 문제를 개인의 문제로 만들지 않고 시스템의 문제로 만들려는 부분 등이 여기에 포함된다고 생각한다. 물론 IT라고 다 같은 건 아니니까 개인의 문제로 만드는 조직이 여전히 많다고 생각하고 상황에 따라서 그렇게 되는 경우도 있다고 생각한다.</p>
<blockquote>
<p>나는 '심리적 안정감'을 '인간관계의 위험으로부터 근무 환경이 안전하다고 믿는 마음'이라고 정의했다. 어떤 의견을 말해도 무시당하지 않고 질책당하거나 징계받지 않는다면, 즉 구성원 모두가 심리적 안정감을 느낀다면 동료들의 눈치 따윈 보지 않고 자기 생각이나 질문, 우려 사항을 자유롭게 말할 수 있다. 심리적 안정감은 구성원이 서로를 신뢰하고 존중하며 자기 생각을 솔직하게 나눌 때야 비로소 생긴다.</p>
</blockquote>
<blockquote>
<p>심리적 안정감은 각각의 개별 조직이 가진 고유한 자산이다. 같은 회사에 소속됐다고 해도 팀별로 분위기에 따라 심리적 안정감의 정도에는 차이가 있다.</p>
</blockquote>
<p>그럼에도 조직에서 심리적 안정감을 확보하려고 노력하지만, 여전히 어렵긴 하다. 심리적 안정감이라는 건 모인 사람 수에 따라 차이가 나기도 하는데 5명이 모인 회의에서는 자유롭게 얘기할 수 있지만 200명이 모인 회의에서는 자가 검열이 더 강하게 동작하는 것이 사실이다. 당연히 똑같지 않은 게 당연한 거 같으면서도 왜 달라지는 걸까 하는 궁금증도 생기게 된다. '해도 되는 말인까?'같은 생각을 하게 되고 '나만 이렇게 생각하는 걸 아닐까?', '날 불편한 사람으로 보면 어쩌지?'같은 생각이 들게 마련이다. 개개인의 성격적인 차이도 당연히 있지만 조직에서 이런 부분을 얼마나 해소해 줄 수 있을까 하는 생각도 들면서 자가 검열이 아예 없어서는 안 되기도 해서(특히 부적절한 말) 적절한 선이 무엇인가? 하는 고민은 있다.</p>
<blockquote>
<p>리더는 조직에 존재하는 각종 계급을 경계해야 한다. 지위가 낮을수록 심리적 안정감이 낮다는 건 이미 여러 연구를 통해 증명된 바이기 때문이다.</p>
</blockquote>
<p>나도 지금은 연차가 많이 올라가서 회사에서 말을 많이 하는 편이지만 예전에는 전혀 그렇지 않았고 하루에 한마디도 안 하고 퇴근하는 경우도 많았다. 그렇다고 그때 불만이나 답답함이 없었냐 하면 또 그렇진 않았다. 물론 예전 조직이 심리적 안정감이 있는 조직이었냐 하면 그렇진 않았지만, 지금은 조직의 심리적 안정감이 객관적으로 전보다 나은지는 난 알 수 없을 거로 생각하긴 하다. 회사도 다른 회사이지만 내 연차나 위치도 다르긴 하니까 절대 비교할 수는 없다.</p>
<blockquote>
<p>"회사의 리더는 자신의 약한 모습과 실수를 있는 그대로 드러내야 합니다. 그래야 다른 직원들도 실수를 솔직하게 보고할 수 있으니까요." 이어서 코스타는 리더의 자만심이 내포한 위험에 대해서도 이렇게 경고했다.<br />
"리더로서 자신이 모든 정답을 갖고 있다고 생각한다면, 그 생각을 당장 집어치워야 합니다. 리더의 생각도 얼마든지 오답일 수 있다는 걸 왜 의심하지 않죠?"</p>
</blockquote>
<p>이건 꽤 중요한 부분이라고 생각하고 리더들이 고민에 빠지는 부분이라고 생각한다. 머릿속에 정답이라고 생각하는 건 당연히 있을 텐데 그게 진짜 정답일지 아무도 알 수 없으니까 결국 정답을 함께 찾을 수 있게 해야 한다고 생각한다. 물론 또 함께 정답을 찾도록 하면서 리더가 자신이 생각하는 정답으로 오도록 유도하면서 생기는 답답한 경우도 겪어봤고 너무 의사결정을 안 해주어서 논의만 하다가 일이 진행되지 않는 경우도 보았기 때문에 팀의 상황에 맞춰서 적절함(?)을 가지는 게 중요하다고 생각한다.</p>
<blockquote>
<p>오늘날 사회에서 심리적 안정감은 '있으면 좋은 것'의 범위를 넘어섰다. 이것은 단순히 무료 점심이나 사내 게임방처럼 쾌적한 업무 환경을 위한 복지 혜택이 아니다. 지식을 바탕으로 나아가는 조직, 특히 다양한 영역의 전문성을 통합해야 하는 조직에서는 심리적 안정감이 성공에 필수적이다. 혁신과 성장이 직원들의 지식과 협력에 달려 있을 때, 조직은 직원들이 자신의 재능을 마음껏 펼치는 환경을 조성하는 일에 투자를 게을리해서는 안 된다.</p>
</blockquote>
<blockquote>
<p>'침묵은 그 누구에게도 도움이 되지 않는다'는 사실이다.</p>
</blockquote>
<blockquote>
<p>리더가 적극적으로 나서 심리적 안정감을 조성하지 않는 한 구성원은 본능적으로 실패를 피하고자 도전을 회피할 수밖에 없다는 뜻이다.</p>
</blockquote>
<p>동의하는 편이다. 심리적 안정감이 중요하다. 물론 모두가 말을 다 하면 너무 피곤하다거나 일이 진행이 안 된다거나 하는 걱정을 할 수도 있지만 거기까지 가지 않아봐서 잘 모르겠다. 그래도 다 같이 본인이 느끼는 것을 얘기할 수 있다면 거기서 효율적인 부분을 풀어나가는 것이 훨씬 좋겠다고 생각한다. 나도 회사에서 "의견을 말하라"는 말을 많이 하긴 하는데 성격의 영향도 있는 거라 참 어렵긴 하다. 기분 안 좋은 사람한테 옆 사람이 기분 풀라고 말하는 답답한 상황처럼 느껴진다.(그런말 듣는다고 기분이 풀어질 리도 없으니까...)</p>
<blockquote>
<p>놀라운 점은 업무 프로세스와 관련된 아이디어처럼 조직 구성원으로서 얼마든지 피력할 수 있는 내용조차 입 밖으로 꺼내길 주저한다는 사실이었다.</p>
</blockquote>
<blockquote>
<p>사람들은 침묵을 지키면 최소한 안전하다고는 확신한다. 그러나 자신의 문제 제기가 큰 차이를 만들어낼 것이라고는 온전히 확신하지 못한다.</p>
</blockquote>
<p>실무자의 의견은 아주 중요하다고 생각한다. 이런 건 리더나 관리자가 알아내기가 쉽지 않고 꽤 많은 문제는 직원 혹은 실무자는 이미 문제라고 생각하고 있던 경우가 상당수라고 생각한다. 그래서 그때그때 바로 의견을 얘기하고 문제 해결이 진행될 수 있게 설득할 수 있는 과정이 필요하다고 보는 편이다.</p>
<blockquote>
<p>텔러의 생각은 다음의 언급에서 잘 나타난다.<br />
"나는 실패를 부추기는 게 아니다. 실패를 통한 학습을 지지하는 것이다."</p>
</blockquote>
<blockquote>
<p>진정한 실패는 실패를 통해 아무것도 배우지 않는 것이다.<br />
진정한 실패는 실패하는 게 두려워 온전한 위험을 감수하지 않는 것이다.</p>
</blockquote>
<p>책에서 얘기하는 대로 <strong>심리적 안정감을 확보하는 것은 회사에서 아주 중요한 일이라는 것에 동의한다</strong>. 문제는 어떻게 심리적 안정감을 확보하냐에 있을 것 같다. 책에서 어느 정도 나와 있기는 하지만 좀 추상화된 얘기들이라 실제 조직에서 적용하기에는 얕게 느껴졌다. 아무래도 난 현실에 복잡한 상황에서 이를 어떻게 적용할 것인가에 더 관심이 있는 것 같다. 책에 대해 좀 안 좋게 얘기한 느낌이 있지만 당연한 얘기라 와닿지 않았다는 의미이지 책에서 얘기하는 내용이 안 중요하다는 얘기는 당연히 아니다.</p>
<p><strong><a href="https://blog.outsider.ne.kr/1711?commentInput=true#entry1711WriteComment">댓글 쓰기</a></strong></p>기술 뉴스 #242 : 24-03-16Outsiderhttps://blog.outsider.ne.kr/17122024-03-16T14:28:06+09:002024-03-16T14:28:06+09:00<h1>웹개발 관련</h1>
<ul>
<li><strong><a href="https://web.dev/blog/inp-cwv-launch">Interaction to Next Paint is officially a Core Web Vital</a></strong> : Core Web Vital에 포함된 항목 중 <a href="https://web.dev/articles/fid">FID(First Input Delay)</a>를 대체하기 위해서 2022년부터 준비한 <a href="https://web.dev/articles/inp">INP(Interaction to Next Paint)</a>가 이제 안정화되어 INP가 Core Web Vital에 포함되게 되었다. Chrome도 공식적으로 FID 지원을 중단하고 개발자도 24년 9월 9일까지 FID에서 INF로 전환해야 한다.(영어)</li>
<li><strong><a href="https://groups.google.com/a/chromium.org/g/chrome-ux-report-announce/c/Wg2Wqq6u3QI">CrUX 202402</a></strong> : Google Chrome에서 실제 사용자가 경험하는 웹사이트 성능을 측정한 데이터 세트인 CrUX의 2024년 2월 데이터가 BigQuery에 등록되었습니다. 직접 조회해 볼 수 있습니다.(영어)<br />
<br />
<ul>
<li>LCP가 good을 경험한 사용자는 61.3%</li>
<li>FID가 good을 경험한 사용자는 96.2%</li>
<li>CLS가 good을 경험한 사용자는 76.6%</li>
<li>LCP, CLS, FID 모두 good을 경험한 사용자는 48.8%</li>
<li>INP가 good을 경험한 사용자는 80.6%</li>
<li>LCP, CLS, INP가 모두 good을 경험한 사용자는 45.6%</li>
</ul></li>
<li><strong><a href="https://www.smashingmagazine.com/2024/03/end-of-gatsby-journey/">The End Of My Gatsby Journey</a></strong> : 독특한 데이터 계층과 SSG(Static Site Generator) 덕분에 인기를 끌은 Gatsby가 점점 인기를 잃고 Netlify에 인수된 후 개발까지 멈추게 되었다. 오랫동안 Gatsby를 좋아하고 사용하던 개발자가 더 이상 Gatsby를 안 쓰기로 하면서 Gastby에 무슨 문제가 있었는지를 정리한 글이다.(영어)<br />
<br />
<ul>
<li>수익을 내기 위해서 Gastby Cloud를 도입하면서 증분 빌드 등의 추가 기능을 Gastby Cloud에서만 사용할 수 있고 다른 클라우드에서는 쓰기 어렵게 만들면서 Vercel과의 경쟁에서 이기지 못했고 Netlify에 인수된 이후에도 Gastby Cloud의 기능이 Netlify로 이전될 것이라고 했지만 이는 현실이 되지 않았고 Netlify는 직원을 대부분 해고하게 된다.</li>
<li>Netlify의 CEO인 Matt Biilmann은 Gasby가 Next.js와의 혁신 경쟁을 포기하고 깨끗하고 안정적인 프레임워크로 유지하는데 집중한다고 발표했다.</li>
<li>Gastby가 사용자에게 외면받은 이유는 의존성이 너무 많아서 다루기 어려웠고 개발 속도와 빌드 속도가 너무 느렸기 때문이다.</li>
<li>그럼에도 Gastby가 잘한 부분은 GraphQL 데이터 레이어, 클라이언트 성능, 플러그인 생태계를 꼽았다.</li>
</ul></li>
<li><strong><a href="https://webkit.org/blog/15131/speedometer-3-0-the-best-way-yet-to-measure-browser-performance/">Speedometer 3.0: The Best Way Yet to Measure Browser Performance</a></strong> : Apple WebKit 팀이 Blink, Gecko 등의 주요 브라우저 엔진 개발자들과 협업해서 브라우저 성능을 측정하는 <a href="https://browserbench.org/Speedometer3.0/">Speedometer 3.0</a>을 공개했다. Speedometer는 다른 벤치마크 도구와는 달리 TodoMVC 앱을 구동해서 실제 웹 앱이 동작하는 것을 테스트할 수 있게 했으며 더 복잡한 앱과 다양한 콘텐츠, 차트, 코드 에디터, WYSIWIG 에디터를 테스트에 추가해서 브라우저 성능을 제대로 측정할 수 있게 되었다.(영어)</li>
<li><strong><a href="https://simonwillison.net/2024/Mar/3/interesting-ideas-in-observable-framework/">Interesting ideas in Observable Framework</a></strong> : Observable에서 최근 공개한 Observable Framework의 장점을 소개한 글이다. Observable Framework는 기본적으로 정적 사이트 생성기인데 마크다운 내에서 자바스크립트를 사용할 수 있으면서도 의존하는 셀의 데이터를 변경하면 다른 곳도 즉각적으로 변경되며 데이터로 빌드 시에 로딩되기 때문에 아주 빠릅니다. 마크다운만 관리하면 되기 때문에 관리하기가 쉬워서 빠르게 대시보드를 만들 수 있다.(영어)<br />
<br></li>
</ul>
<h1>그 밖의 개발 관련</h1>
<ul>
<li><strong><a href="https://toby.epril.com/8">테스트가 관리하는 트랜잭션 - 향로 님의 @Transactional 글을 읽고</a></strong> : 스프링에서 <code>@Transactional</code>을 이용한 롤백 테스트에 대한 향로님의 글에 대해 토비님이 의견을 남긴 글이다. 기술에서 안티패턴은 많은 경우 동작 방식을 제대로 이해 못 한 경우에 발생하는데 토비님은 이 글에서 테스트에서 <code>@Transactional</code>이 어떻게 동작하는지를 설명하고 이 문제가 <code>@Transactional</code>의 문제인지 트랜잭션 테스트 자체의 문제인지 짚고 팀의 상황에 따라 여러 가지 테스트 스타일을 사용할 수 있지만 기본적으로 스프링의 <code>@Transactional</code>을 기본으로 쓰고 트랜잭션 상황을 잘 이해하고 있어야 한다고 얘기하고 있다.(한국어)</li>
<li><strong><a href="https://github.blog/changelog/2024-03-07-github-copilot-chat-general-availability-in-jetbrains-ide/">GitHub Copilot Chat General Availability in JetBrains IDE</a></strong> : 채팅으로 GPT-4와 코드에 대해 대화할 수 있는 Copilot Chat이 JetBrains IDE에서도 GA가 되어 누구나 이용할 수 있게 되었다.(영어)</li>
<li><strong><a href="https://dev.to/this-is-learning/hono-vs-h3-vs-hattip-vs-elysia-modern-serverless-replacements-for-express-3a6n">Hono vs. H3 vs. HatTip vs. Elysia - modern server(less) replacements for Express</a></strong> : Node.js의 웹프레임워크인 express가 꽤 오래되었기 때문에 최근 요구사항에 따라 서버리스나 엣지 환경에서 실행할 수 있는 프레임워크의 대안을 설명한 글이다. <a href="https://hono.dev/">Hono</a>, <a href="https://h3.unjs.io/guide">h3</a>, <a href="https://github.com/hattipjs/hattip">Hattip</a>, <a href="https://elysiajs.com/">ElysiaJS</a>를 설명하고 인기도와 벤치마크를 비교해서 보여주고 있다.(영어)</li>
<li><strong><a href="https://github.blog/2024-02-29-keeping-secrets-out-of-public-repositories/">Keeping secrets out of public repositories</a></strong> : GitHub 저장소에 실수로 API 키나, 비밀번호 등 민감한 정보를 같이 커밋하는 경우가 있는데 그동안은 GitHub이 탐지해서 메일로 알려주었지만 이제 모든 공개저장소에서 커밋에 이러한 시크릿이 포함된 경우 푸시가 차단되도록 변경되어서 푸시 후 제거가 아니라 푸시 자체를 막을 수 있게 되었다.(영어)<br />
<br></li>
</ul>
<h1>인프라 관련</h1>
<ul>
<li><strong><a href="https://grafana.com/observability-survey/">Grafana Labs Observability Survey 2024</a></strong> : Grafana Labs에서 300명 이상의 실무자에게 설문 조사를 한 결과를 공유했다.<br />
<br />
<ul>
<li>중앙 집중화된 옵저버빌리티를 가진 조직의 79%가 시간과 비용을 아꼈다.</li>
<li>70%의 팀은 4가이 이상의 옵저버빌리티 기술을 사용한다.</li>
<li>사용중이라고 답한 옵저버빌리티의 도구는 62가지다.</li>
<li>응답자 중 61%는 옵저버빌리티의 가장 큰 우려 사항으로 비용이나 예상치 못한 청구서를 꼽았다.</li>
<li>응답자의 98%가 오픈소스 옵저버빌리티 도구를 쓴다고 대답했다.</li>
<li>가장 많이 쓰이는 기술은 Grafana, Prometheus, Grafana Loki, OpenTelemetry, ELK다.</li>
</ul></li>
<li><strong><a href="https://medium.com/daangn/gcp-vertex-ai-pipelines-%EC%82%AC%EC%9A%A9%EA%B8%B0-10b3387ba736">서버리스 ML 훈련 인프라 구축하기: Vertex AI Pipelines & TFX</a></strong> : 당근마켓에서 GKE에서 Kubeflow 파이프라인으로 관리하다가 작년부터 Vertex AI Pipelines로 갈아탔다. Vertex AI Pipelines는 매니지드 서비스라 운영의 부담을 덜 수 있었고 편리한 시각화와 주기적 재실행 등 편리한 기능을 설명하고 모니터링하는 방법도 소개하고 있다.(한국어)</li>
<li><strong><a href="https://dagger.io/blog/introducing-the-daggerverse">Introducing the Daggerverse</a></strong> : 몇 주 전 Dagger에서 Dagger Functions라는 기능을 출시하면서 언어가 달라서 서로 호출할 수 있게 되었기 때문에 Dagger Functions를 모듈화해서 공유할 수 있도록 레지스트리인 <a href="https://daggerverse.dev/">Daggerverse</a>를 공개했다.(영어)</li>
<li><strong><a href="https://fluxcd.io/blog/2024/02/introducing-capacitor/">Introducing Capacitor, a general purpose UI for Flux</a></strong> : GitOps 도구인 Flux가 지금까지는 CLI만 있었지만 이번에 <a href="https://github.com/gimlet-io/capacitor">Capacitor</a>라는 GUI를 도입했다.(영어)<br />
<br></li>
</ul>
<h1>볼만한 링크</h1>
<ul>
<li><strong><a href="https://getdx.com/report/headcount-benchmarks-devprod-teams/">Headcount benchmarks for DevProd teams</a></strong> : 개발자 생산성 관련 플랫폼인 DX에서 고객사의 데이터를 분석해서 여러 회사의 총 엔지니어 인력과 중앙 집중식 생산성 팀의 입력 비율에 대해 정리한 보고서다. 개발자가 1,000명 미만인 회사는 평균 19%의 인력이 개발자 생산성 팀에 있었고 조직이 커질수록 비율은 줄어드는 경향이 있었으며 시리즈 C-E의 회사들은 21.7%, 시리즈 F 이상은 평균 15.8%의 인력이 배치되어 있었다. 각 회사가 중앙집중식 개발자 생산성 팀을 어떻게 구성하고 있는지에 대한 예시도 볼 수 있다.(영어)</li>
<li><strong><a href="https://yozm.wishket.com/magazine/detail/2490/">사내 해커톤에 진심인 IT서비스 회사, 퍼플아이오</a></strong> : 글로벌 SaaS 플랫폼으로 도약할 비전을 가지고 있는 퍼플아이오의 인터뷰 기사이다. 사무실 좌석 예약제를 하기 위해 사내 해커톤을 하는데 그 퀄리티가 아주 높다. 코오롱몰과 서비스 개선 업무도 하지만 자체 서비스도 성공하게 하기 위해 해커톤으로 아이디어를 얻어서 코드앤버터라는 팝업/배너 관리 서비스도 출시해서 개선하고 있다. 개발자를 귀하게 여긴다는 슬로건이 좋다.(한국어)</li>
<li><strong><a href="https://medium.com/@timberners_lee/marking-the-webs-35th-birthday-an-open-letter-ebb410cc7d42">Marking the Web’s 35th Birthday: An Open Letter</a></strong> : 월드와이드웹을 만든 Tim Berners-Lee가 5년 전에도 웹이 몇몇 기업에 지배된 문제를 지적한 적이 있는데 이제 AI의 발전으로 이러한 문제가 더 심각해졌다며 웹의 35주년을 맞이하여 공개서한을 작성했다. 해결해야 할 두 가지 문제는 원래 구상했던 웹의 탈중앙화 정신과 위배되는 권력 집중 정도이고 또 하나는 사람들의 정보를 통제할 수 있는 개인 데이터 시장이다. 이러한 문제를 방지하기 위해 개혁하려는 사람에 대한 지지가 필요하다고 호소하고 있다.(영어)</li>
<li><strong><a href="https://cojette.github.io/posts/servicenudge/">서비스에서 넛지를 추구하면 안 되는 걸까</a></strong> : 넛지와 다크패턴을 설명하는 글이다. 나도 넛지라는 말을 종종 사용해서 넛지를 넣는 거에 곤란해하는 상황이 좀 의아하긴 했는데 넛지는 사용자가 더 나은 결정을 할 수 있도록 유도하는 방식이고 다크 패턴은 사용자를 속여서 의도하지 않는 선택을 하도록 유도하는 전략이라 둘을 구분해서 사용해야 한다는 부분에 동의한다.(한국어)</li>
<li><strong><a href="https://hugo.blog/2024/03/11/vision-pro/">Vision Pro is an over-engineered "devkit"</a></strong> : Meta의 전 Oculus 헤드인 Hugo Barra가 Apple Vision Pro에 관해 쓴 글이다. Vision Pro 덕에 VR에 관심이 늘어난 건 Meta에게도 좋은 일이지만 Oculus가 그랬듯이 현실에 비해 과한 하드웨어가 들어가서 이건 개발키트의 성격이 강하다고 하고 있다. Vision Pro는 지금까지 장비 중 가장 강력한 디스플레이를 선보였으며 고의로 약간 흐릿하게 해서 픽셀 문제를 해결했지만, 패스스루 모드의 모션 블러 문제는 피하지 못했다. 생산성 면에서 아이패드나 맥북과 비교해서 현재 어떤 위치에 있는지와 초기의 신기함과 실제 사용까지 가기까지의 문제와 가능성을 경험자로서 잘 짚어내고 있다.(영어)<br />
<br></li>
</ul>
<h1>IT 업계 뉴스</h1>
<ul>
<li><strong><a href="https://techrecipe.co.kr/posts/63449">대체 앱스토어 설치 앱, EU서 30일 이상 떠나면…</a></strong> : EU의 디지털 시장법 DMA를 준수하기 위해 Apple이 iOS 17.4부터 앱 스토어외에 대체 앱스토어를 지원하기 시작했다. 하지만 대체 앱스토어를 사용하려면 기기 위치가 EU 회원국이어야 하고 다른 국가에 가서 30일 이상 지나면 더 이상 업데이트할 수 없고 새 앱을 설치할 때도 EU 회원국에 있어야 한다고 밝혔다.(한국어)</li>
<li><strong><a href="https://www.cnbc.com/2024/03/11/openai-denies-musk-lawsuit-claim-that-there-was-founding-agreement.html">OpenAI denies Elon Musk lawsuit claim that there ever was founding agreement</a></strong> : Elon Musk가 3월 초 OpenAI의 Sam Altman과 Greg Brockman이 초기 창업할 때 OpenAI가 인류를 위한 비영리 단체가 될 것이고 상업적 이익을 위해 정보를 비공개로 하지 않는다는 2015년 창립 계약을 위반했다며 소송을 걸었다. OpenAI는 이러한 합의를 한 적이 없다고 반박했다.(영어)</li>
<li><strong><a href="https://openai.com/blog/openai-elon-musk">OpenAI and Elon Musk</a></strong> : OpenAI가 위 고소 이후 OpenAI와 Elon Musk와의 관계에 관해 설명했다. 처음 창업할 때 Elon Musk가 참여하고 자본을 댔지만 이후 영리 법인으로 전환하기로 하면서 자신이 CEO가 되길 원했고 Tesla와의 합병도 제안했다가 Tesla 내에서 AGI를 만들겠다며 퇴사했다고 하며 증거 이메일을 공개했다.(영어)</li>
<li><strong><a href="https://fig.io/">Fig is sunsetting, migrate to Amazon CodeWhisperer</a></strong> : 확장된 CLI를 제공하는 Fig가 작년 9월에 AWS에 인수되었는데 올해 9월 1일부로 Fig 접근이 종료되고 앞으로는 Amazon CodeWhisperer에 통합되었으니, CodeWhisperer를 사용하라고 한다.(영어)</li>
<li><strong><a href="https://www.anthropic.com/news/claude-3-family">Introducing the next generation of Claude</a></strong> : Anthropic에서 새로운 LLM인 Claude 3을 출시했다. Claude 3에는 Haiku, Sonnet, Opus 세 가지 모델이 포함되어 있고 Opus가 가장 강력한 모델이다.(영어)<br />
<br></li>
</ul>
<h1>프로젝트</h1>
<ul>
<li><strong><a href="https://puter.com/">Puter</a></strong> : jQuery로 만든 <a href="https://github.com/HeyPuter/puter">웹용 클라우드 OS</a>, 퀄리티가 아주 놀랍다.</li>
<li><strong><a href="https://prompthero.com/">PromptHero</a></strong> : AI로 생성한 수백만 개의 이미지의 프롬프트를 검색할 수 있는 사이트.<br />
<br></li>
</ul>
<h1>버전 업데이트</h1>
<ul>
<li><strong><a href="https://vitess.io/">Vitess</a> 19.0</strong> : MySQL 클러스터링 시스템, <a href="https://vitess.io/blog/2024-03-06-announcing-vitess-19/">릴리스 공지</a></li>
<li><strong><a href="https://laravel.com/">Laravel</a> v11.0.0</strong> : PHP 웹 프레임워크, <a href="https://laravel.com/docs/11.x/releases">릴리스 공지</a></li>
<li><strong><a href="https://storybook.js.org/">Storybook</a> v8.0.0</strong> : React, Vue3, Angular UI 컴포넌트 개발 도구, <a href="https://storybook.js.org/blog/storybook-8/">릴리스 공지</a></li>
<li><strong><a href="https://podman.io/">podman</a> v5.0.0</strong> : 컨테이너 엔진, <a href="https://blog.podman.io/2024/03/podman-5-0-is-around-the-corner/">릴리스 공지</a></li>
<li><strong><a href="https://shopify.github.io/react-native-skia/">React Native Skia</a> v1.0.0</strong> : React Native용 Skia, <a href="https://github.com/Shopify/react-native-skia/releases/tag/v1.0.1">릴리스 공지</a></li>
<li><strong><a href="https://hono.dev/">Hono</a> v4.1.0</strong> : 엣지용 웹 프레임워크, <a href="https://github.com/honojs/hono/releases/tag/v4.1.0">릴리스 공지</a></li>
<li><strong><a href="https://astro.build/">astro</a> v4.5</strong> : JavaScript 웹 프레임워크, <a href="https://astro.build/blog/astro-450/">릴리스 공지</a></li>
<li><strong><a href="https://tinybase.org/">TinyBase</a> v4.7</strong> : 로컬 우선 앱을 위한 리액티브 데이터 스토어, <a href="https://tinybase.org/guides/releases/#v4-7">릴리스 공지</a></li>
<li><strong><a href="https://www.prisma.io/">Prisma</a> v5.11.0</strong> : TypeScript/Node.js 데이터베이스 툴킷, <a href="https://github.com/prisma/prisma/releases/tag/5.11.0">릴리스 공지</a></li>
<li><strong><a href="https://biomejs.dev/">Biome</a> v1.6.0</strong> : 프론트엔드 툴체인, <a href="https://biomejs.dev/blog/biome-v1-6/">릴리스 공지</a></li>
<li><strong><a href="https://www.pgadmin.org/">pgAdmin</a> 4 v8.4</strong> : PostgreSQL 클라이언트 도구, <a href="https://www.postgresql.org/about/news/pgadmin-4-v84-released-2822/">릴리스 공지</a></li>
<li><strong><a href="https://zed.dev/">Zed</a> v0.125.4</strong> : 코드 에디터, <a href="https://zed.dev/releases/stable#zed-0.125.4">릴리스 공지</a></li>
<li><strong><a href="https://panda-css.com/">panda</a> v0.35.0</strong> : CSS-in-JS, <a href="https://github.com/chakra-ui/panda/discussions/2379">릴리스 공지</a></li>
<li><strong><a href="http://grafana.org/">Grafana</a> v10.4</strong> : 매트릭 대쉬보드, <a href="https://grafana.com/blog/2024/03/06/grafana-10.4-release-all-the-latest-features/">릴리스 공지</a></li>
<li><strong><a href="http://nodejs.org/">Node.js</a> v21.7.0 (Current)</strong> : 자바스크립트 런타임, <a href="https://nodejs.org/en/blog/release/v21.7.0">릴리스 공지</a></li>
<li><strong><a href="http://www.typescriptlang.org/">TypeScript</a> v5.4</strong> : Microsoft가 만든 JavaScript transpiler, <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/">릴리스 공지</a></li>
<li><strong><a href="https://qwik.builder.io/">Qwik</a> v1.5.0</strong> : 웹 프레임워크, <a href="https://github.com/BuilderIO/qwik/releases/tag/v1.5.0">릴리스 공지</a></li>
<li><strong><a href="https://developer.apple.com/swift/">Swift</a> v5.10</strong> : 프로그래밍 언어, <a href="https://www.swift.org/blog/swift-5.10-released/">릴리스 공지</a></li>
<li><strong><a href="https://www.apple.com/kr/safari/">Safari</a> 17.4</strong> : 웹브라우저, <a href="https://webkit.org/blog/15063/webkit-features-in-safari-17-4/">릴리스 공지</a></li>
<li><strong><a href="https://observablehq.com/framework/">Observable Framework</a> v1.1.0</strong> : 데이터 앱이나 대시보드, 리포트를 위한 정적 사이트 생성기, <a href="https://github.com/observablehq/framework/releases/tag/v1.1.0">릴리스 공지</a></li>
<li><strong><a href="https://www.openpolicyagent.org/">Open Policy Agent</a> v0.62.0</strong> : 클라우드 네이티브 환경의 정책 엔진, <a href="https://github.com/open-policy-agent/opa/releases/tag/v0.62.0">릴리스 공지</a></li>
<li><strong><a href="https://playwright.dev/">Playwright</a> v1.42.0</strong> : Chromium, Firefox, WebKit 브라우저 자동화 Node.js 라이브러리, <a href="https://github.com/microsoft/playwright/releases/tag/v1.42.0">릴리스 공지</a></li>
<li><strong><a href="https://spring.io/tools4">Spring Tools</a> v4.22.0</strong> : Spring 코딩 환경을 위한 도구, <a href="https://spring.io/blog/2024/03/13/spring-tools-4-22-0-released">릴리스 공지</a></li>
<li><strong><a href="https://scala-cli.virtuslab.org/">Scala CLI</a> v1.2.0</strong> : Scala 언어용 CLI, <a href="https://scala-cli.virtuslab.org/docs/release_notes/">릴리스 공지</a></li>
<li><strong><a href="https://cuelang.org/">Cue</a> v0.8.0</strong> : 구성 언어, <a href="https://github.com/cue-lang/cue/releases/tag/v0.8.0">릴리스 공지</a></li>
<li><strong><a href="https://www.consul.io/">Consul</a> 1.18</strong> : 서비스 디스커버리/설정 도구, <a href="https://www.hashicorp.com/blog/consul-1-18-ga-improves-enterprise-reliability-with-long-term-support">릴리스 공지</a></li>
<li><strong><a href="https://istio.io/">Istio</a> v1.21.0</strong> : 서비스 매쉬, <a href="https://istio.io/latest/news/releases/1.21.x/announcing-1.21/">릴리스 공지</a></li>
</ul>
<p><strong><a href="https://blog.outsider.ne.kr/1712?commentInput=true#entry1712WriteComment">댓글 쓰기</a></strong></p>기술 뉴스 #241 : 24-03-01Outsiderhttps://blog.outsider.ne.kr/17102024-03-01T22:41:05+09:002024-03-01T22:41:05+09:00<h1>웹개발 관련</h1>
<ul>
<li><strong><a href="https://react.dev/blog/2024/02/15/react-labs-what-we-have-been-working-on-february-2024">React Labs: What We've Been Working On – February 2024</a></strong> : React에서 연구 개발 중인 프로젝트의 진행상황을 정리한 글이다.(영어)<br />
<br />
<ul>
<li>상태 변경으로 종종 너무 많은 렌더링이 일어나는 문제를 그동안 <code>useMemo</code>, <code>useCallback</code>, <code>memo</code> 등 수동 메모이제이션을 사용해서 해결해 왔다. 합리적인 타협점이지만 이 문제를 해결하기 위해 React를 위한 최적화 컴파일러를 구축하는 것이 React Compiler다. 그동안 리서치 프로젝트였지만 이미 instagram.com에서 사용 중이고 Meta에 더 적용한 후 첫 릴리스를 오픈소스로 공개하기 위해 준비 중이다.</li>
<li>Server Actions는 클라이언트에서 서버로 데이터를 보내는 방법으로 개발 중 이 API를 클라이언트에서만도 사용할 수 있도록 API를 확장해서 이러한 기능을 Actions라고 부르게 되었다.</li>
<li>이전에는 Meta 내부에서 개발하고 안정 버전만 공개되었는데 React Canary의 도입으로 개발 중인 새로운 기능도 커뮤니티에서 미리 확인할 수 있게 되었다. Directives, Document Metadata, Asset Loading, Actions 같은 기능도 모두 react.dev 문서에 추가되었다.</li>
<li>오랜 작업으로 릴리스할 준비가 되었고 Document Metadata, Asset Loading은 일부 앱에는 큰 변화가 되므로 다음 버전은 React 19가 될 예정이다.</li>
<li>화면에서 보이지 않는 부분에 적용되기 때문에 Offscreen라는 이름으로 개발 중이던 기능을 개발하면서 화면에 보이면서도 비활성 상태일 수 있다는 것을 알게 되어 이름을 Activity로 변경했다.</li>
</ul></li>
<li><strong><a href="https://tech.inflab.com/20240219-dynamic-og-image/">인프런 콘텐츠에 동적으로 생성되는 Open Graph(OG) 이미지 적용하기</a></strong> : 인프런에서 콘텐츠를 외부에 공유할 때 OG 이미지를 콘텐츠에 맞게 동적으로 생성해 주기 위해 작업한 결과를 정리한 글이다. Vercel이 만든 <code>og</code>를 사용하고 CDN을 연결해서 기능을 구현했지만, 서버 쪽 성능은 좋지 않았기에 <code>og</code> 라이브러리 대신 그 내부에서 사용하는 <code>satori</code>를 직접 사용하면서 병목이 되는 부분을 개선하고 <code>satori</code>에 성능 개선 제안도 하면서 최초 이미지 생성 성능을 35배나 개선했다.(한국어)</li>
<li><strong><a href="https://netflixtechblog.com/introducing-safetest-a-novel-approach-to-front-end-testing-37f9f88c152d">Introducing SafeTest: A Novel Approach to Front End Testing</a></strong> : Netflix에서 내부에 적용해서 사용하는 프론트엔드 테스트 프레임워크 <a href="https://github.com/kolodny/safetest">SafeTest</a>를 공개했다. 기존의 UI 테스트 프레임워크 중 react-testing 라이브러리 같은 단위테스트 도구는 렌더링 대상이나 임포트 등을 제어할 수 있지만 실제 페이지와 상호작용할 수 없게 되고 Cypress나 Playwright같은 통합테스트 도구는 페이지는 제어할 수 있지만 내부를 제어할 수가 없게 된다. 이러한 문제를 해결하기 위해 SafeTest를 만들게 되었고 지연 로딩을 활용해서 페이지에 테스트를 실행하는 코드를 동적으로 로딩하는 것이 주용 아이디어다. 이렇게 설정한 뒤에 Playwright를 사용해서 실행하므로 페이지를 테스트할 수 있으면서도 특정 함수나 컴포넌트를 오버라이딩해서 더 쉽게 테스트할 수 있다.(영어)</li>
<li><strong><a href="https://socket.dev/blog/jsr-new-javascript-package-registry">JSR: What We Know So Far About Deno’s New JavaScript Package Registry</a></strong> : <a href="https://jsr.io/">JSR</a>은 Deno 팀에서 만든 패키지 레지스트리로 Deno 팀에서는 npm을 고려했지만 Deno 환경과는 맞지 않는 부분이 있어서 ESModules가 도입된 상황에서 npm 레지스트리말고 새로운 개발자 경험을 줄 새로운 중앙 패키지 레지스트리를 구축할 필요가 있었다고 한다. 개발자들은 TypeScript를 제대로 지원을 하는 점에서 매력적이라는 의견도 있지만 반드시 모듈을 발행하려면 Deno를 써야하는 문제도 있고 생태계가 분열되는 것에 대한 걱정도 있다.(영어)</li>
<li><strong><a href="https://x.com/triblondon/status/1761852117579427975?s=20">If your website uses http://polyfill.io, remove it IMMEDIATELY</a></strong> : 브라우저 간 동작 차이를 채워주는 polyfill.js를 쉽게 사용할 수 있도록 <a href="http://hacks.mozilla.or.kr/2014/12/an-easier-way-of-using-polyfills/">pollyfill.io에서 서비스로 제공</a>하고 있었는데 이 polyfill.io를 운영하던 사람이 <a href="https://x.com/JakeDChampion/status/1761315228447277184?s=20">polyfill.io를 Funnull이라는 회사에 넘기기로 했다</a>. 이에 polyfill.io 서비스를 만들었던 사람이 공급망 공격을 걱정하며 이제는 polyfill 자체도 그리 필요 없으니 즉시 제거하라고 경고했다. 이에 <a href="https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk">Cloudflare는 자사의 CDN에서 이를 제공</a>한다고 빠르게 공지했다.(영어)<br />
<br></li>
</ul>
<h1>그 밖의 개발 관련</h1>
<ul>
<li><strong><a href="https://velog.io/@hakokim/React-Native-%EC%95%B1-%EC%A0%91%EA%B7%BC%EC%84%B1-%EC%A7%80%EC%9B%90-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0">React Native 앱 접근성 지원 시작하기</a></strong> : 뉴스레터 서비스인 <a href="https://www.newneek.co/">뉴닉</a>의 React Native 앱에서 접근성을 개선한 내용을 정리한 글이다. 다크모드를 지원하고 기능을 말로 설명해 주는 보이스오버나 톡백 기능을 구현하고 가로 모드 지원과 폰트 크기를 다양하게 지원할 수 있도록 개선했다. 스타트업에서 제품의 성장과 접근성 지원 간의 우선순위에 대해 고민이 많았지만, 접근성이 중요하다고 공감하는 사람이 많아서 할 수 있었다고 한다. 이렇게 접근성 개선을 노력하는 서비스를 응원한다.(한국어)</li>
<li><strong><a href="https://jvns.ca/blog/2024/02/16/popular-git-config-options/">Popular git config options</a></strong> : Git에서 설정하면 좋을 설정을 정리한 글이다. pull 할 때 어떻게 동작할지나 컨플릭트시 보여주는 방식, autosquash 설정이나 push할 브랜치 설정등 많은 사람들이 기본적으로 설정해서 사용하는 옵션들이 어떤 기능을 제공하는지를 정리해 두었다.(영어)</li>
<li><strong><a href="https://ductile.systems/zdiff3/">Better Git Conflicts with zdiff3</a></strong> : Git에서 컨플릭트가 발생했을 때 두 브랜치의 차이점이 파일에 표시되는데 설정에서 <code>diff3</code>를 사용하면 원래 어떻게 되었는지 3개의 차이를 모두 보여주어서 수정하기가 훨씬 쉬워진다. Git 2.35에서 추가된 <code>zdiff3</code>를 사용하면 공통 조상에서 충돌된 부분을 더 정확하게 잡아준다.(영어)<br />
<br></li>
</ul>
<h1>인프라 관련</h1>
<ul>
<li><strong><a href="https://tech.devsisters.com/posts/finding-and-fixing-cert-manager-bug/">세계 최초로 cert-manager 버그를 발견하고 해결하기</a></strong> : Let's Encrypt 인증서를 사용하던 중 연결에 문제가 생긴걸 발견하고 원인을 추적해서 해결한 과정이다. Let's Encrypt에는 지금은 만료된 <code>DST Root CA X3</code> 루트 인증서와 새로운 <code>ISRG Root X1</code> 루트 인증서가 있는데 설정에서 <code>ISRG Root X1</code>를 사용하게 했음에도 <code>DST Root CA X3</code>가 내려오는 상황이었다. Let's Encrypt가 Trust CA가 되기 전에 <code>DST Root CA X3</code>를 사용한 과거가 있고 이를 deprecte 한 뒤 <a href="https://github.com/cert-manager/cert-manager">cert-manager</a>에서 버그가 발생하는 조건이 충족되어 문제가 발생했다.(한국어)</li>
<li><strong><a href="https://tech.inflab.com/20240221-dora-metric-with-devlake/">개발-운영 생산성 모니터링하기 (with Devlake, Grafana)</a></strong> : 인프런에서 DORA의 생산성 매트릭인 배포 빈도, 변경 사항이 적용되는 시간, 변경 실패율, 서비스 복원 시간을 측정해서 가시화하기 위해 작업한 내용이다. 여러 도구를 검토 후 오픈소스인 Devlake를 이용해서 GitHub, Jenkins, Jira를 연동해서 데이터를 수집한 뒤에 MySQL에 저장하고 이 데이터를 Grafana에 데이터소스로 연결해서 대시보드를 통해서 빌드, PR, 커밋, 이슈 등의 통계를 한 번에 볼 수 있게 했다. 한눈에 현황을 파악할 수 있어서 상당히 좋아 보인다.(한국어)</li>
<li><strong><a href="https://sre.google/resources/practices-and-processes/product-focused-reliability-for-sre/">Product-Focused Reliability for SRE</a></strong> : 사이트 안정성 엔지니어(SRE)는 보통 서비스의 안정성을 책임지지만 이는 제품의 최종 사용자 경험에는 어느 정도 한계가 있다. 이를 개선하기 위해 Google의 SRE가 인프라와 서비스에 집중하는 대신 제품과 최종 사용자의 요구사항 지원에 집중해서 어떻게 해결했는지를 설명한 글이다. 이를 위해 엔지니어뿐 아니라 관리자와 디자이너 등 이해관계자의 참여를 유도하고 제품의 목적을 정의해서 우선순위를 정하고, 제품의 SLO를 측정하기 위해 클라이언트 SLO나 e2e SLO를 도입해서 제품의 SLO를 만들어서 이 신뢰성을 관리한다. 이 접근 방법은 SRE팀이 사용자와 비즈니스에서 가장 중요한 곳에 자원을 집중하게 만들어준다.(영어)</li>
<li><strong><a href="https://tech.inflab.com/20240227-finops-for-startup/">스타트업 엔지니어의 AWS 비용 최적화 경험기</a></strong> : 인프런이 AWS 비용을 최적화 하기 위해서 해온 활동을 정리한 글이다. 각 팀이 비용에 관심을 가지도록 분위기를 만들고 높은 비용부터 분석해서 개선해 나갔는데 스팟 인스턴스, CDN 등을 활용하고 같은 AZ내의 통신을 하도록 개선하고 일부 SaaS는 내부 설치형 도구로 바꾸면서 월간 3천만원 이상을 아낄 수 있었다고 한다.(한국어)</li>
<li><strong><a href="https://blog.cloudflare.com/pingora-open-source">Open sourcing Pingora: our Rust framework for building programmable network services</a></strong> : Cloudflare가 <a href="https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/">2022년 Nginx를 대체하기 위해</a> Rust로 작성한 HTTP 프록시 서버 Pingora를 오픈소스로 공개했다. Pingora는 HTTP/1, HPTT/2, gRPC, WebSocket 프록시를 지원하고 Pingora 기반으로 서비스를 구축할 수 있는 라이브러리와 API도 제공하고 있다.(영어)</li>
<li><strong><a href="https://thenewstack.io/freenginx-a-fork-of-nginx/">Freenginx: A Fork of Nginx</a></strong> : 웹서버인 Nginx의 핵심 개발자 중 한 명인 Maxim Dounin이 Nginx를 포크해서 <a href="https://freenginx.org/">freenginx</a>를 만든다고 <a href="https://mailman.nginx.org/pipermail/nginx-devel/2024-February/K5IC6VYO2PB7N4HRP2FUQIBIBCGP4WAU.html">발표</a>했다. Maxim Dounin는 원래 Nginx를 소유한 F5에서 일하다가 2022년 F5가 모스크바 사무실을 없앤 뒤로는 F5에서 일하진 않지만, 자원봉사자로 계속 일하기로 합의했다. 하지만 F5의 nginx에 너무 많이 관여하고 있고 F5내에서 이뤄지는 작업도 알 수 없기 때문에 nginx 개발에 더 이상 참여하지 않고 포크해서 freenginx에서 작업한다고 한다.(영어)</li>
<li><strong><a href="https://netflixtechblog.com/announcing-bpftop-streamlining-ebpf-performance-optimization-6a727c1ae2e5">Announcing bpftop: Streamlining eBPF performance optimization</a></strong> : Netflix가 eBPF 프로그램의 성능 최적화와 모니터링을 쉽게 할 수 있게 하는 <a href="https://github.com/Netflix/bpftop">bpftop</a> CLI를 오픈소스로 공개했다. bpftop으로 실행중인 eBPF 프로그램의 성능 통계를 실시간으로 볼 수 있고 bpftop을 사용 중일 때만 활성화되므로 오버헤드도 최소화하고 있다.(영어)</li>
<li><strong><a href="https://dagger.io/blog/introducing-dagger-functions">Introducing Dagger Functions</a></strong> : Dagger Functions 기능이 도입되어 원하는 언어로 기능을 구현하고 이를 다른 언어에서도 불러와서 사용할 수 있는 기능이 추가되었다. Dagger는 CI/CD를 위한 블록을 만들 수 있는 프로젝트라고 할 수 있는데 CUE에서 프로그래밍 언어로 바뀌면서 재사용면에서는 프로그래밍 언어의 제약이 생겼다고 생각했는데 Dagger Function을 이용해서 언어가 달라도 사용할 수 있게 되었다. 현재는 Go, Python, TypeScript의 가이드를 제공하는데 다른 언어의 가이드도 추가될 예정이다.(영어)<br />
<br></li>
</ul>
<h1>볼만한 링크</h1>
<ul>
<li><strong><a href="https://zed.dev/blog/we-have-to-start-over">We Have to Start Over: From Atom to Zed</a></strong> : Zed 에디터는 GitHub에서 Atom을 만들던 Nathan Sobo, Antonio Scandurra, Max Brunsfeld이 나와서 창업한 회사인데 이 세 명의 창업자와 인터뷰한 내용이 정리된 글이다. Zed의 비전은 Atom에서 가졌던 비전과 거의 비슷한데 Atom때는 당시 기술적 성숙도가 미치지 못했고 IDE처럼 강력하면서 확장성 있으면서도 가벼운 에디터를 만드는 것이 목표라고 한다. Atom을 만들기 위해 Electron을 만들고 VS Code가 훌륭하게 해냈지만, 이들은 더 많은 것을 원했고 Rust와 GUI 가속을 선택했고 UI 프레임워크인 GPUI 2를 만들어서 Zed를 만들기 위한 기술 스택을 모두 소유할 수 있게 되었다.(영어)<br />
<br></li>
</ul>
<h1>IT 업계 뉴스</h1>
<ul>
<li><strong><a href="https://www.theverge.com/2024/2/22/24079876/google-gemini-ai-photos-people-pause">Google pauses Gemini’s ability to generate AI images of people after diversity errors</a></strong> : Google이 Gemini의 이미지 생성 기능을 공개했는데 여기서 인물 이미지가 제대로 생성되지 않아서 해당 기능을 일시 중지했다. <a href="https://blog.google/products/gemini/gemini-image-generation-issue/">구글의 공지</a>에 따르면 이미지 생성 시 특정 인종에만 한정되지 않도록 하고 싶었지만 반대로 문화적, 역사적 배경이나 특정 인종을 요청하는 경우는 정확하게 생성되어야 하지만 제대로 동작하지 않았다고 한다. 그래서 1800년대 미국 상원의원 등의 이미지 요청에서 흑인과 원주민 여성의 이미지가 생성되어 실제 역사적 사실과 성차별의 역사를 오히려 지우는 문제가 발생했다.(영어)</li>
<li><strong><a href="https://blog.google/technology/developers/gemma-open-models/">Gemma: Introducing new state-of-the-art open models</a></strong> : Google이 Gemini 모델을 만든 것과 같은 기술과 연구로 만든 경량 오픈형 모델인 <a href="https://ai.google.dev/gemma">Gemma</a>를 공개했다. Gemma는 2B, 7B 2가지 크기를 제공하고 개발자 노트북 등에서 직접 실행할 수 있다.(영어)</li>
<li><strong><a href="https://stability.ai/news/stable-diffusion-3">Stable Diffusion 3</a></strong> : 텍스트-이미지 변환 모델인 Stable Diffusion 3의 프리뷰 버전이 발표되었다. 8억 ~ 80억개의 파라미터를 지원하고 대기자로 등록해야 사용해 볼 수 있다.(영어)<br />
<br></li>
</ul>
<h1>프로젝트</h1>
<ul>
<li><strong><a href="https://cursor.sh/">Cursor</a></strong> : 코드 자동완성이나 채팅 등 AI 기능에 초점을 맞춘 코드 에디터.</li>
<li><strong><a href="https://tempo.formkit.com/">Tempo</a></strong> : JavaScript 날짜/시간 라이브러리</li>
<li><strong><a href="https://github.com/loft-sh/devpod">DevPod</a></strong> : <code>devcontainer.json</code>를 이용해서 개발자 환경을 만들 수 있는 클라이언트 도구로 Codespaces의 오픈소스 버전이라고 생각할 수 있다.</li>
<li><strong><a href="https://github.com/mcollina/borp">Borp</a></strong> : Node.js 테스트 라이브러리인 <code>node:test</code>릐 위한 TypeScript 러너</li>
<li><strong><a href="https://github.com/zellij-org/zellij">Zellij</a></strong> : <a href="https://github.com/tmux/tmux">Tmux</a>와 같은 터미널 멀티플렉서로 <a href="https://github.com/zellij-org/zellij/discussions/1701">플로팅 윈도우 등 현대적인 기능</a>을 지원한다.</li>
<li><strong><a href="https://github.com/readysettech/readyset">readyset</a></strong> : Postgres와 MySQL을 위한 데이터베이스 캐시.</li>
<li><strong><a href="https://testcontainers.com/">Testcontainers</a></strong> : 테스트 목적으로 데이터베이스, 레디스 등을 컨테이너로 환경을 구성해 주는 프레임워크<br />
<br></li>
</ul>
<h1>버전 업데이트</h1>
<ul>
<li><strong><a href="https://redwoodjs.com/">RedwoodJS</a> v7.0.0</strong> : 풀스택 웹프레임워크, <a href="https://community.redwoodjs.com/t/redwood-v7-0-0-is-now-available/5777">릴리스 공지</a></li>
<li><strong><a href="http://git-scm.com/">Git</a> v2.44.0</strong> : 분산 형상관리 도구, <a href="https://github.blog/2024-02-23-highlights-from-git-2-44/">변경사항</a></li>
<li><strong><a href="https://grafana.com/oss/tempo/">Grafana Tempo</a> v2.4.0</strong> : 분산 트레이싱 백엔드, <a href="https://grafana.com/blog/2024/02/29/grafana-tempo-2.4-release-traceql-metrics-tiered-caching-and-tco-improvements/">릴리스 공지</a><br />
<br />
<ul>
<li>TraceQL에 실험적인 <a href="https://grafana.com/docs/tempo/latest/operations/traceql-metrics/">metrics</a> 기능 추가로 trace 쿼리 결과에 함수를 적용해서 trace 쿼리를 확장할 수 있게 됨.</li>
<li>vParquet3이 기본이 됨.</li>
</ul></li>
<li><strong><a href="https://vitest.dev/">Vitest</a> v1.3.0</strong> : Vite 유닛 테스트 프레임워크, <a href="https://github.com/vitest-dev/vitest/releases/tag/v1.3.0">릴리스 공지</a></li>
<li><strong><a href="https://panda-css.com/">panda</a> v0.33.0</strong> : CSS-in-JS, <a href="https://github.com/chakra-ui/panda/discussions/2274">릴리스 공지</a></li>
<li><strong><a href="https://kafka.apache.org/">Kafka</a> v3.7.0</strong> : 분산 이벤트 스트리밍 플랫폼, <a href="https://archive.apache.org/dist/kafka/3.7.0/RELEASE_NOTES.html">릴리스 공지</a></li>
<li><strong><a href="https://remix.run/">Remix</a> v2.8.0</strong> : 풀스택 웹 프레임워크, <a href="https://remix.run/docs/en/main/start/changelog#v280">릴리스 공지</a></li>
<li><strong><a href="https://jotai.org/">Jotai</a> v2.7.0</strong> : React 상태 관리 라이브러리, <a href="https://github.com/pmndrs/jotai/releases/tag/v2.7.0">릴리스 공지</a></li>
<li><strong><a href="https://babeljs.io/">Babel</a> v7.24.0</strong> : JavaScript 컴파일러, <a href="https://babeljs.io/blog/2024/02/28/7.24.0">릴리스 공지</a></li>
<li><strong><a href="http://electron.atom.io/">Electron</a> v29.0.0</strong> : 크로스 플랫폼 데스크톱 애플리케이션 플랫폼, <a href="https://www.electronjs.org/blog/electron-29-0">릴리스 공지</a></li>
<li><strong><a href="https://www.scala-lang.org/">Scala</a> 3.4.0</strong> : 프로그래밍 언어, <a href="https://www.scala-lang.org/blog/2024/02/29/scala-3.4.0-and-3.3.3-released.html">릴리스 공지</a></li>
<li><strong><a href="https://deno.land/">Deno</a> v1.41.0</strong> : TypeScript 런타임, <a href="https://deno.com/blog/v1.41">릴리스 공지</a></li>
<li><strong><a href="http://eslint.org/">ESLint</a> v8.57.0</strong> : JavaScript 코드 분석 도구, <a href="https://eslint.org/blog/2024/02/eslint-v8.57.0-released/">릴리스 공지</a></li>
<li><strong><a href="https://kargo.akuity.io/">Kargo</a> v0.4.0</strong> : Kubernetes용 배포 도구, <a href="https://akuity.io/blog/whats-new-kargo-0.4.0/">릴리스 공지</a></li>
<li><strong><a href="https://zed.dev/">Zed</a> v0.124.8</strong> : 코드 에디터, <a href="https://zed.dev/releases/stable#zed-0.124.8">릴리스 공지</a></li>
<li><strong><a href="https://parceljs.org/">Parcel</a> v2.12.0</strong> : 웹 애플리케이션 번들러, <a href="https://parceljs.org/blog/v2-12-0/">릴리스 공지</a></li>
<li><strong><a href="https://www.docker.com/products/docker-desktop">Docker Desktop</a> v4.28</strong> : 데스크톱용 Docker 애플리케이션, <a href="https://www.docker.com/blog/docker-desktop-4-28/">릴리스 공지</a></li>
<li><strong><a href="https://bevyengine.org/">Bevy</a> v0.13</strong> : Rust로 작성된 데이터 드리븐 게임 엔진, <a href="https://bevyengine.org/news/bevy-0-13/">릴리스 공지</a></li>
<li><strong><a href="https://www.selenium.dev/">Selenium</a> v4.18.0</strong> : 브라우저 자동화 프레임워크, <a href="https://www.selenium.dev/blog/2024/selenium-4-18-released/">릴리스 공지</a></li>
<li><strong><a href="https://www.prisma.io/">Prisma</a> v5.10.0</strong> : TypeScript/Node.js 데이터베이스 툴킷, <a href="https://github.com/prisma/prisma/releases/tag/5.10.0">릴리스 공지</a></li>
</ul>
<p><strong><a href="https://blog.outsider.ne.kr/1710?commentInput=true#entry1710WriteComment">댓글 쓰기</a></strong></p>44BITS 팟캐스트가 어느새 200회나 되었다.Outsiderhttps://blog.outsider.ne.kr/17092024-02-27T21:39:42+09:002024-02-27T21:39:42+09:00<p><a href="https://www.youtube.com/@44BITSTV">44BITS 팟캐스트</a>(<a href="https://podcast.44bits.io/">홈페이지</a>)는 첫 화부터 모든 에피소드를 들었을 정도로 나에게 꽤 애착이 있는 팟캐스트임에도 사이트가 따로 있고 거기서 에피소드가 발행되다 보니 문득 회고 등에서나 언급할 뿐 블로그에서 제대로 얘기한 적이 없다는 생각이 들었다.</p>
<p>지난주 방송으로 어느새 <a href="https://www.youtube.com/watch?v=n3jgpHUw8AY">200회</a>를 녹음했다. 200회면 매주 녹음한다고 해도 거의 4년이 걸리는 시간이라 새삼 '44BITS가 참 오래되었구나!' 하는 생각이 들었다.<br />
<br></p>
<h2>stdout.fm 팟캐스트</h2>
<p><a href="https://www.youtube.com/watch?v=n3jgpHUw8AY">200회</a> 방송에서도 얘기 나왔지만 44BITS 팟캐스트는 2018년에 10월에 <a href="https://twitter.com/stdoutfm">stdout.fm 팟캐스트</a>라는 이름으로 <a href="https://podcast.44bits.io/episodes/1">1화</a>를 시작했다. 이 팟캐스트는 <a href="https://twitter.com/seapy">seapy님</a> 주도로 <a href="https://twitter.com/nacyo_t">nacyot님</a>, <a href="https://twitter.com/raccoonyy">너굴님</a> 세 분이 시작했다.</p>
<p style="text-align: center;"><img src="//blog.outsider.ne.kr/attach/1/1589989830.jpg" width="282" height="282" alt="사용자 삽입 이미지" title="" /></p>
<p>Twitter나 커뮤니티 활동을 오래 하다 보니 꽤 친해진 사람도 언제 어디서 친해지게 되었는지 잊어먹은 경우가 꽤 많다. nacyot님과 너굴님은 stdout.fm이 시작되기 전에 같은 회사에 다니긴 했지만, 같이 일하기 전에도 이미 알고 있는 사이였다. 회사 같이 다니기 전에는 아마 오프라인에서는 한두 번 인사한 정도면서 트위터에서 많이 떠들던 사이지 않았나 싶다.(정확히 기억이 나지 않는다) Seapy님도 그전에 트위터에서 얘기 나눈 기록은 많이 있는데 어디서 알게 되었는지는 잘 기억나지 않는다. 창업한다고 퇴사하는 글을 본 기억이 있어서 친분은 꽤 있었던 거 같다.</p>
<p>그래서 자연스레 stdout.fm 팟캐스트가 시작할 때부터 알고 있었고 1화부터 듣기 시작했다. 당시에도 다들 YouTube를 사용하고 있었는데 Seapy님이 팟캐스트의 유행이 다시 올 거라고 했던 기억이 난다. 물론 실제로 팟캐스트 유행은 돌아왔다. 전 세계에서는 유행이 되었지만, 한국에서는 그렇지 않았을 뿐이다.</p>
<p>국내에서는 2011년 "나는 꼼수다"가 등장하면서 팟캐스트가 인기를 끌었지만 나는 2009년 정도부터 팟캐스트를 들었는데 그때부터 지금까지 팟캐스트란 매체를 좋아하는 편이다. 그래서 stdout.fm이라는 한국어로 하는 기술 팟캐스트가 생겼다는 게 꽤 반가웠고 그래서 1화부터 열심히 들었다. 팟캐스트 앱은 내 아이폰에서 중요한 앱 중 하나였기에 구독만 하나 추가하면 쉽게 들을 수 있었다.</p>
<p>시작하는 사람들이 다 알고 있던 사람이었다 보니 아주 초반인 <a href="https://podcast.44bits.io/episodes/3">3화부터 게스트로 출연</a>해서 해외 콘퍼런스에 갔다 왔던 경험을 얘기하기도 했다. 큰 준비 없이 수다 떨듯이 나와서 꽤 재미있었던 걸로 기억한다. 진행자들하고 친분이 있고 나도 뉴스레터를 계속 발행하고 있다 보니 이슈가 있을 때마다 게스트로 참석해서 같이 떠들었다. 시간이 지나면서 <a href="https://twitter.com/subicura">subicura</a>님과 <a href="https://twitter.com/ecleya">ecleya</a>님도 멤버로 참여했는데 다 아는 사람들이었기 때문에 지인들과 그냥 수다 떠는 기분으로 참여했다.</p>
<p><a href="https://twitter.com/sduck4">SDuck님</a>이 만들어주신 2020년 <a href="https://sduck4.github.io/stdout.fm-100th/">100회 기념 페이지</a>를 보면 100회 중에 총 8번 참여했다. 엄청 많은 건 아니지만 게스트 중에는 가장 많이 참여했다.<br />
<br></p>
<h2>44BITS 팟캐스트</h2>
<p>팟캐스트는 stdout.fm이고 <a href="https://www.44bits.io/ko">블로그는 44BITS로 운영</a>하다가 <a href="https://podcast.44bits.io/episodes/101">101회</a>부터 팟캐스트도 44BITS로 이름을 변경해서 운영하기 시작했다.</p>
<p style="text-align: center;"><img src="//blog.outsider.ne.kr/attach/1/8096114853.jpg" width="357" height="168" alt="사용자 삽입 이미지" title="" /></p>
<p>그리고 난 2020년 12월에 <a href="https://blog.outsider.ne.kr/1518">당근마켓으로 이직</a>했다. 이직 글에도 썼지만, 당시 난 꽤 소진된 상태로 번아웃이 왔다 갔다 하는 상태였고 당시 이직을 생각하고 있진 않았지만, 소고기를 구워주면서 당근마켓에 와서 같이 일하면서 팟캐스트 하자고 했을 때 재밌겠다는 생각에 맘이 꽤 동한 게 사실이다. 하지만 막상 이직했을 때는 코로나가 한창이었기 때문에 모이기가 어려워서 녹음은 별로 못하고 한참 동안은 그냥 일만 했다. 뭐 원래도 난 주기적으로 녹음하던 사람은 아니라서 크게 영향은 없었고 당연히 업무에 적응하느라 정신없기도 했다.</p>
<p>재택을 주로 하다 보니 가끔 모이거나 Zoom으로 녹음했지만 쉽지 않았고 녹음 간격도 꽤 띄엄띄엄하기 시작했다. 그러다 작년 초였나 오랜만에 번개로 다 같이 모여서 다시 팟캐스트를 잘하기 위해 2주마다 날짜를 정해서 하기로 했다. 전에는 지속해서 할 수 있도록 점심시간에 녹음했는데 요즘은 다들 바빠져서 점심시간에도 시간을 내기 어려워서 저녁으로 녹음 시간을 옮겼다. 다행히도 이게 효과가 꽤 있어서 이후로는 거의 2주마다 계속 녹음을 할 수 있게 되었다.</p>
<p style="text-align: center;"><img src="//blog.outsider.ne.kr/attach/1/4661979713.jpg" width="750" height="407" alt="사용자 삽입 이미지" title="" /></p>
<p>게스트로 나올 때보다 자주 나오니까 더 재밌게 녹음을 한 거 같다. 초기에 Seapy님 얘기대로 녹음하는 데 너무 큰 노력이 필요하면 오래 할 수 없기 때문에 보통 주제 정도만 모아놓고 대본도 없이 그냥 생각나는 대로 하는 편이다. 나는 <a href="https://blog.outsider.ne.kr/category/Newsletter">한 달에 2번씩 뉴스레터를 발행하기 때문에</a> 그중에서 팟캐스트에서 얘기해 볼 만한 이슈나 트위터에서 본 주제를 가져와서 같이 얘기한다. 물론 우리는 앞뒤 정도만 자르고 편집도 따로 하지 않는다. 그래서 200회까지 올 수 있었다는 생각도 들고 그냥 잡담을 하다 보니까 어느새 200회네? 하는 기분도 든다.</p>
<p>200회 방송하면서도 느꼈지만 잡담하듯이 하다 보니까 설명도 좀 부족하고 기술 이름이나 옛날얘기를 그냥 꺼내면서 얘기해서 듣는 사람에게 친절한 편은 아닌 거 같다. 그래서 그런지 듣는 사람도 항상 비슷비슷한 느낌인데 그 대단하지 않은 잡담이 꽤 즐겁긴 하다. 여기서 잡담을 많이 하다 보니 대본까지 힘들게 준비한 <a href="https://blog.outsider.ne.kr/1681">RetroTech 팟캐스트</a>를 기획하게 된 것이기도 하다.</p>
<p>멤버들이 다양한 관심과 재능이 있어서 시간만 많으면 재밌는 일을 더 많이 할 수 있을 것 같은데 다들 바빠서 좀처럼 쉽지 않다. 이번 200회때도 공개방송 얘기가 나왔지만 공개 방송이란게 장소 구하는거부터 녹음까지 할일이 한두개가 아니다 보니까 실제로 진행할 엄두가 나지 않았다.(물론 사람들이 오기는 할까? 하는 걱정도 있었다) 그래도 올해부터는 스튜디오가 생겨서 아지트처럼 쓸 수 있고 더 세팅되면 모이기만 하면 바로 방송도 할 수 있게 되어서 전보다 더 다양한 일을 할 수 있지 않을까 생각한다. 물론 스튜디오가 아주 가깝진 않아서(아주 멀지도 않지만) 자주 가진 못하지만 그래도 올해는 뭔가 또 재미난 일이 있지 않을까 기대한다. 지금처럼 계속 잡담하는 것도 좋고 ㅎㅎ</p>
<p><strong><a href="https://blog.outsider.ne.kr/1709?commentInput=true#entry1709WriteComment">댓글 쓰기</a></strong></p>기술 뉴스 #240 : 24-02-16Outsiderhttps://blog.outsider.ne.kr/17082024-02-16T10:18:28+09:002024-02-16T10:18:28+09:00<h1>웹개발 관련</h1>
<ul>
<li><strong><a href="https://webkit.org/blog/14955/the-web-just-gets-better-with-interop/">The web just gets better with Interop 2024</a></strong> : 브라우저 간 호환성을 유지하기 위해 여러 브라우저가 벤더와 회사들이 공동으로 테스트를 만들어서 상호 운용성을 개선하기 위한 Interop 2024가 발표되었다. <a href="https://wpt.fyi/interop-2023">Interop 2023</a> 컨테이너 쿼리, <code>:has()</code>, Flexbox, Grid 등의 영역의 상호 운용성을 크게 개선했다. 올해는 Microsoft Edge를 크롬과 별도로 구분해서 보여주기 시작했으며 접근성, 웹소켓용 HTTPS URL, CSS Nesting, CSS 커스텀 프로퍼티(<code>@property</code>), 선언적 쉐도우 DOM, 레이아웃, 스크롤바 스타일 등이다.(영어)</li>
<li><strong><a href="https://www.joshwcomeau.com/css/center-a-div/">How To Center a Div</a></strong> : DIV를 부모 요소의 중앙에 배치하는 것은 의외로 까다로운 작업인데 중앙에 배치한 다양한 방법을 설명하는 글이다. 마진을 <code>auto</code>로 설정해서 가운데 배치하거나 <code>flexbox</code>를 이용하는 방법 그리고 <code>position: fixed</code>를 이용해서 뷰포트의 중앙에 배치하거나 CSS Grid로 중앙에 배치하는 방법을 설명한다. 실행해 볼 수 있는 예제를 같이 보여주면서 특징을 설명하고 있어서 이해하기 좋다.(영어)</li>
<li><strong><a href="https://observablehq.com/blog/observable-2-0">Observable 2.0</a></strong> : d3.js를 만든 Mike Bostock이 만든 Observable에서 2.0을 출기하면서 Observable 프레임워크를 오픈소스로 공개했다. 그동안 데이터를 효과적으로 보여주기 위한 노트북을 제공했는데 이는 임시적인 데이터 탐색에는 적합하지만 세련된 대시보드와 앱에는 적합하지 않았기 때문에 프레임워크를 만들게 되었고 이를 이용해서 데이터앱을 구축할 수 있다. 모든 백엔드 언어와 연결이 가능하고 빌드시에 데이터로더가 실행되기 때문에 페이즈 로딩이 아주 빠르다.(영어)<br />
<br></li>
</ul>
<h1>그 밖의 개발 관련</h1>
<ul>
<li><strong><a href="https://fly.io/ruby-dispatch/the-plan-for-rails-8/">The Plan for Rails 8</a></strong> : Rails 8 웹프레임워크에 대한 계획이 공개었다. 최신 웹 앱의 복잡성을 압축해서 웹 앱을 더 쉽게 구축한다는 Rails의 모토를 여전히 유지하고 있다. NVMe SSD로 데이터베이스가 훨씬 빨라짐에 따라 Solid Cache와 Solid Queue를 통해 기존 Redis에 의존하던 캐싱이나 백그라운드 작업을 대체하고 데이터베이스를 사용하게 되었다. Postgres와 MySQL이 지원하는 WebSocket을 통해 브라우저에 메시지를 브로드캐스트할 수 있도록 지원하고 오랫동안 Rails의 에셋 파이프라인이었던 Sprockets을 <a href="https://github.com/rails/propshaft">propshaft</a>이 대체할 예정이다. 그외에도 Kamal 배포도구, HTTP 기본 인증 생성기, 벤치마크 도구, Rails 8의 Language Server 등의 도구가 포함될 예정이다.(영어)</li>
<li><strong><a href="https://blog.gitbutler.com/opening-up-gitbutler/">Opening Up GitButler</a></strong> : 전에 GitHub에서도 일하고 <a href="https://m.yes24.com/Goods/Detail/24841824">Pro Git</a>을 쓴 <a href="https://scottchacon.com/">Scott Chacon</a>이 창업한 Git 브랜치 관리 시스템인 GitButler가 정식 오픈했다. GitButler는 Virtual Branch라는 개념을 도입해서 워킹 디렉토리에서 작업을 하던 중 버그 수정을 위해 새로운 브랜치로 전환하지 않고 UI에서 필요한 수정사항만 끌어다가 새로운 브랜치를 만들어서 커밋하고 푸시할 수 있게 제공한다. 곧 클라이언트도 제공할 예정인데 GitButler는 기존 Git 워크플로우는 그대로 유지하면서 브랜치를 사용하는 완전히 새로운 방법이라고 소개하고 있다.(영어)</li>
<li><strong><a href="https://lucumr.pocoo.org/2024/2/4/rye-a-vision/">Rye: A Vision Continued</a></strong> : Python 프로젝트와 패키지를 관리하는 도구인 <a href="https://rye-up.com/">Rye</a>를 만든 Python의 유명 개발자 Armin Ronacher가 Rye의 중요성을 설명하는 글이다. Rye가 있으면 Python이 설치도 안 되어 있는 환경에서도 1분 이내에 모든 환경이 갖춰진 파이썬 프로젝트를 시작할 수 있는데 이는 Rust에서 Cargo의 원활한 통합을 보면서 이를 Python 커뮤니티에서도 비슷한 경험을 하고 싶어서 만들었다고 한다. Cargo가 그렇듯이 모든 도구를 다 만드는 것이 아니라 생태계의 다른 도구를 연결해 주는 역할을 하]고 이는 Rye도 비슷하게 하고 있지만 아직 1인 프로젝트이며 이러한 표준화 아이디어가 Python 생태계에 더 필요하다고 얘기한다.(영어)</li>
<li><strong><a href="https://astral.sh/blog/uv">uv: Python packaging in Rust</a></strong> : <code>pip</code>와 <code>pip-tools</code>를 대체하려고 Rust로 작성된 <a href="https://github.com/astral-sh/uv">uv</a>는 엄청나게 빠른 Python 패키지 인스톨러이면서 리졸버이다. Python을 위한 Cargo를 지향하고 있으며 이번 릴리스와 함께 Rye의 관리도 같이 맡아서 공동의 비전을 실현하기 위해 노력할 것이라고 한다.(영어)<br />
<br></li>
</ul>
<h1>인프라 관련</h1>
<ul>
<li><strong><a href="https://www.hashicorp.com/cloud-operating-model">Enabling a Cloud Operating Model</a></strong> : HashiCorp에서 클라우드 인프라를 운영하는 모델을 정리한 백서를 공개했다. 물론 회사에서 공개한 내용이니 상당 부분은 이러한 운영 모델을 HashiCorp의 제품으로 어떻게 구축하는지에 대한 내용이지만 운영 모델에 대한 내용과 HashiCrop의 접근도 참고할 만하다. 클라우드에서는 정적 인프라가 아니라 동적 인프라이고 IP 대신 ID 기반으로 보안과 네트워킹 정책을 세워야 하고 수동 티켓 시스템으로 운영하는 대신 자동화된 셀프서비스 플랫폼이 필요하다. 조직 내에 클라우드를 도입하고 이 운영 모델이 점점 성숙해질 수 있도록 플랫폼 엔지니어링 관행을 도입해서 운영을 소프트웨어 문제로 취급하도록 하고 베스트 프렉티스를 모아서 셀프서비스 기능으로 제공하고 동적 환경을 지원하는 워크플로우를 만들 수 있도록 변화가 필요하다고 얘기하고 있다. 23페이지로 된 PDF로 된 백서라서 개인 정보를 입력해야 다운로드 받을 수 있다.(영어)</li>
<li><strong><a href="https://grafana.com/blog/2024/02/06/combining-tracing-and-profiling-for-enhanced-observability-introducing-span-profiles/">Combining tracing and profiling for enhanced observability: Introducing Span Profiles</a></strong> : Grafana 10.3에 Span Profile 기능이 추가되었다. 기존 continuous profiling에서는 고정된 간격으로 시스템 전체에 대한 보기를 제공했지만 Span Profile에서는 개별 요청을 포함해서 애플리케이션의 특정 실행 범위에 대한 분석을 제공한다.(영어)</li>
<li><strong><a href="https://medium.com/nordnet-tech/unlocking-kubernetes-performance-with-no-cpu-resource-limits-56d5dc33037b">Unlocking Kubernetes Performance with no CPU Resource Limits</a></strong> : Kubernetes에서 리소스를 설정할 때 CPU의 <code>requests</code>와 <code>limits</code>가 어떻게 동작하는지 설명하고 왜 <code>limits</code>를 설정하지 않는 것이 좋은지를 설명한 글이다. <code>requests</code>가 있으면 사용할 CPU를 보장받을 수 있으면서 필요할 때는 그 이상의 CPU를 사용할 수 있지만 <code>limits</code>이 있으면 스로틀링 때문에 보장받은 CPU도 제대로 사용할 수 없기 때문인데 그림과 함께 이해하기 좋게 설명하고 있다. Kubernetes에서 나도 CPU <code>limits</code>를 해제하는 게 맞다고 생각하기에 동의하는 글이다.(영어)</li>
<li><strong><a href="https://rtfm.co.ua/en/aws-eks-pod-identities-a-replacement-for-irsa-simplifying-iam-access-management/">AWS: EKS Pod Identities – a replacement for IRSA? Simplifying IAM access management</a></strong> : AWS EKS에서는 Pod에 AWS 권한을 부여하기 위해 IRSA(IAM Roles for Service Accounts)를 사용하는데 새로 나온 EKS Pod Identities로 IRSA를 대체하는 방법을 사용한다. EKS Pod Identities는 OIDC를 사용하지 않기 때문에 IAM 역할을 만들고 클러스터 수준에서 서비스 어카운트를 연결해서 관리할 수 있다.(영어)</li>
<li><strong><a href="https://aws.amazon.com/ko/blogs/devops/announcing-cdk-migrate-a-single-command-to-migrate-to-the-aws-cdk/">Announcing CDK Migrate: A single command to migrate to the AWS CDK</a></strong> : 기존 AWS CloudFormation 스택이나 CDK 외부에서 생성한 리소스를 CDK로 마이그레이션 할 수 있는 <a href="https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/README.md#cdk-migrate">CDK Migrate</a>가 나왔다.(영어)<br />
<br></li>
</ul>
<h1>볼만한 링크</h1>
<ul>
<li><strong><a href="https://socket.dev/blog/express-js-spam-prs-commoditization-of-open-source">Express.js Spam PRs Incident Highlights the Commoditization of Open Source Contributions</a></strong> : 486만 명의 구독자를 보유한 인기 YouTube 영상에서 Pull Request를 제출하는 방법을 설명하면서 예시도 Express.js를 사용하는 바람에 <a href="https://github.com/expressjs/express/pulls?q=is%3Apr+is%3Aclosed">Express.js 저장소에 Readme를 업데이트하는 스팸 PR이 대량으로 등록</a>되는 사태가 발생했다. 영상에서 실제 Express.js 저장소를 사용했기 때문에 사람들이 따라 하면서 express 저장소에 PR을 등록하게 된 거고 메인테이너는 이 스팸에 대응하느라 고생하고 있다. 사람들은 오픈소스에 기여하는 것을 취업의 방법이 되었고 그로 인해서 오픈소스 생태계가 무너지고 있다며 대부분의 사람은 오픈소스에 기여하지 말라는 말까지 나오고 있다.(영어)</li>
<li><strong><a href="https://slate.com/technology/2024/02/quora-what-happened-ai-decline.html">How Quora Died</a></strong> : 전문가에게 답변을 받을 수 있는 커뮤니티인 <a href="https://www.quora.com/">Quora</a>가 쇠퇴해 가는 과정을 설명한 글이다. Quora는 좋은 질문과 좋은 답변을 얻을 수 있는 커뮤니티를 잘 구축했지만 트래픽을 모으려고 노력하면서 SEO를 위해 질문 길이를 제한하고 피드 최적화로 피드에 콘텐츠 기사를 넣기 시작했가 이어서 수익 공유 프로그램을 만들었는데 이는 기존 커뮤니티보다 봇을 만드는 게 더 돈이 된다는 것을 보여주었고 이후 답변에 AI를 도입하면서 답변은 전문가의 답변보다는 평이한 답변이 차지하게 되고 AI 학습을 위해 모든 질문 답변이 AI 학습에 사용된다는 이용약관의 변경으로 인해 사용자는 계속 이용할지 갈등하게 만들었다는 내용이다.(영어)</li>
<li><strong><a href="https://www.ssh.com/academy/ssh/port#the-story-of-getting-ssh-port-22">How SSH port became 22</a></strong> : 1995년 SSH를 만든 <a href="https://ylonen.org/">Tatu Ylonen</a>이 SSH의 포트 번호인 22번을 어떻게 할당받았는지를 적은 글이다. 당시 23번 포트의 Telnet과 21번 포트의 FTP를 대체할 수 있도록 SSH를 설계 후 무료인 22번 포트를 사용하면 좋겠다고 생각했습니다. 당시에는 인터넷의 규모가 작고 초기 단계였기에 IANA에서 포트 번호를 관리했기에 IANA에 SSH의 RFC를 첨부하면서 포트 번호를 받고 싶다고, 특히 22번을 받고 싶다고 이메일 보냈고 IANA에서 22번을 할당해 주고 Tatu Ylonen을 담당자로 지정해 주어 바로 SSH의 베타테스터들에게 공개했다.(영어)<br />
<br></li>
</ul>
<h1>IT 업계 뉴스</h1>
<ul>
<li><strong><a href="https://www.linkedin.com/posts/richardsonalexis_hi-everyone-i-am-very-sad-to-announce-activity-7160295096825860096-ZS67/">Weaveworks will be closing its doors and shutting down commercial operations</a></strong> : GitOps 솔루션을 만들던 <a href="https://www.weave.works/">Weaveworks</a>가 문을 닫기로 했다고 2014년에 Weavework를 창업한 Alexis Richardson이 글을 올렸다. 2023년에도 1,000만 달러 이상의 매출을 기록했고 도입되는 회사도 늘어났지만, 매출 성장이 고르지 못했고 현금 사정이 불안했기 때문에 파트너와 투자자가 필요한 상황이었다. 대기업과 합병을 논의하고 있었지만 11시간 만에 결렬되고 결국 문을 닫기로 했고 <a href="https://www.weave.works/">weave.works</a> 홈페이지도 이미 닫혔다. Weaveworks는 <a href="https://cortexmetrics.io/">Cortex</a>, <a href="https://eksctl.io/">eksctl</a>, <a href="https://flagger.app/">Flagger</a>, <a href="https://fluxcd.io/">Flux CD</a>등 다양한 오픈소스를 만들었고 이 오픈소스는 CNCF에 기부되거나 eksctl은 Amazon의 공식 CLI가 될 정도로 생태계에는 큰 영향을 주었다. 이런 회사가 문을 닫는다는 것은 안타까운 일이다.(영어)<br />
<br />
<ul>
<li>그동안 AWS와 파트너십으로 EKS의 공식 CLI가 된 <a href="https://github.com/aws/containers-roadmap/issues/2280">eksctl는 AWS에서 관리하기로 했다</a>.</li>
</ul></li>
<li><strong><a href="https://www.theverge.com/2024/1/25/24050478/apple-ios-17-4-browser-engines-eu">Apple is finally allowing full versions of Chrome and Firefox to run on the iPhone</a></strong> : Apple이 EU의 새 규정을 준수하기 위해 iOS 17.4부터 유럽 사용자는 Webkit 외 다른 브라우저 엔진을 선택할 수 있게 된다. EU에 거주하는 사람들만을 대상으로 하며 처음 Safari을 열때 브라우저 엔진을 선택할 화면을 볼 수 있게 되어 WebKit 외에 Blink나 Gecko를 선택할 수 있게 된다.(영어)</li>
<li><strong><a href="https://techcrunch.com/2024/02/01/the-epic-apple-antitrust-saga-isnt-over-yet/">The Epic-Apple antitrust saga isn’t over yet</a></strong> : Epic 게임즈와 Apple의 반독점 소성의 결과로 애플 인앱결제 외에 다른 결제 방법도 안내할 수 있다고 판결이 나왔지만 여기서도 27%의 수수료를 받겠다고 해서 Epic 게임즈가 비난하며 다시 제소할 계획이라고 밝혔다. Apple의 안내에 따르면 앱에 포함할 링크를 포함할 수 있는 권한을 신청하고 월말 기준으로 거래 보고서를 통해 매출을 입증해야 하며 사용자가 링크를 탭하고 발생한 거래에 대해 27%의 수수료를 받겠다고 한다.(영어)</li>
<li><strong><a href="https://blog.google/technology/ai/google-gemini-update-sundar-pichai-2024/">The next chapter of our Gemini era</a></strong> : Google이 자사의 생성형 AI인 Bard를 Gemini로 리브랜딩하고 Gemini Ultra를 출시했다. Gemini Android 앱을 출시하고 iOS 용도 곧 출시할 예정이라고 한다.(영어)</li>
<li><strong><a href="https://blog.google/intl/ko-kr/products/explore-get-answers/google-gemini-next-generation-model-february-2024-kr/">구글의 차세대 모델: 제미나이 1.5</a></strong> : Google에서 최근 Gemini 1.0 Ultra에 이어 Gemini 1.5를 발표했다. 1.5는 Mixture-of-Experts(MoE) 아키텍처를 사용해서 효율적으로 훈련해서 Gemini 1.0 Ultra와 비슷한 수준의 중형 멀티모달 모델로 기존 3만 2천 토큰을 넘어 최대 100만 토큰까지 처리할 수 있게 되었다.(한국어)</li>
<li><strong><a href="https://openai.com/sora">Creating video from text</a></strong> : OpenAI에서 텍스트를 입력하면 비디오를 만들어주는 AI 모델 Sora를 공개했다.(영어)</li>
<li><strong><a href="https://arstechnica.com/gadgets/2024/02/google-search-kills-off-cached-webpages/">Google will no longer back up the Internet: Cached webpages are dead</a></strong> : Google에서 크롤링한 웹사이트를 캐시에 저장하고 있어서 검색 결과의 사이트에서 드롭다운 메뉴를 누르면 캐시된 페이지를 볼 수 있었는데 이 기능을 더는 제공하지 않기로 했다.(영어)</li>
<li><strong><a href="https://www.cnbc.com/2024/02/07/disney-to-take-1point5-billion-stake-in-epic-games-maker-of-fortnite.html">Disney to take $1.5 billion stake in Epic Games, work with Fortnite maker on new content</a></strong> : Disney가 Epic Games에 15억 달러(약 2조 원)를 투자해서 지분을 인수하면서 파트너십을 강화했다.(영어)<br />
<br></li>
</ul>
<h1>프로젝트</h1>
<ul>
<li><strong><a href="https://jsr.io/">jsr</a></strong> : Deno에서 npm을 대체할 새로운 자바스크립트 레지스트리를 만들고 있다. 아직 자세한 내용은 공개되지 않았지만, Deno의 denoland를 대체할 것으로 예상된다.</li>
<li><strong><a href="https://github.com/awslabs/llrt">LLRT(Low Latency Runtime)</a></strong> : AWS에서 실험적으로 QuickJS 엔진을 사용하고 Rust로 만든 JavaScript 런타임을 공개했다. 이는 서버리스 애플리케이션의 빠르고 효율적인 요구사항을 해결하기 위한 런타임으로 AWS Lambda에서 10배 빠른 시작 시간과 2배 저렴한 비용을 보여주었다.</li>
<li><strong><a href="https://pkl-lang.org/">Pkl</a></strong> : Apple이 프로그래밍할 수 있고 확장성 있으면서 안전한 구성 언어(Configuration Language)를 공개했다. Pickle로 발음한다.</li>
<li><strong><a href="https://github.com/keephq/keep">Keep</a></strong> : 오픈소스 얼럿 관리 및 자동화 플랫폼</li>
<li><strong><a href="https://github.com/hyperdxio/hyperdx">HyperDX</a></strong> : Datadog이나 New Relic의 오픈소스 대체제로 로그, 메트릭, 트레이스, 예외, RUM 등을 한곳에 모아서 서비스 문제를 쉽게 찾을 수 있게 해준다.<br />
<br></li>
</ul>
<h1>버전 업데이트</h1>
<ul>
<li><strong><a href="https://turbo.hotwired.dev/">Turbo</a> v8.0.0</strong> : 싱글 페이지 애플리페이지의 변경을 관리하는 라이브러리, <a href="https://github.com/hotwired/turbo/releases/tag/v8.0.0">릴리스 공지</a></li>
<li><strong><a href="https://hono.dev/">Hono</a> v4.0.0</strong> : 엣지용 웹 프레임워크, <a href="https://github.com/honojs/hono/releases/tag/v4.0.0">릴리스 공지</a></li>
<li><strong><a href="https://mobyproject.org/">Moby Project</a> v25.0.0</strong> : Docker, <a href="https://github.com/moby/moby/releases/tag/v25.0.0">릴리스 공지</a></li>
<li><strong><a href="https://probot.github.io/">Probot</a> v13.0.0</strong> : GitHub 앱을 만들 수 있는 프레임워크, <a href="https://github.com/probot/probot/releases/tag/v13.0.0">릴리스 공지</a></li>
<li><strong><a href="https://adonisjs.com/">AdonisJS</a> v6.0.0</strong> : TypeScript 웹 프레임워크, <a href="https://adonisjs.com/blog/adonisjs-v6-announcement">릴리스 공지</a></li>
<li><strong><a href="https://cilium.io/">Cilium</a> v1.15.0</strong> : eBPF 기반 CNI, <a href="https://github.com/cilium/cilium/releases/tag/v1.15.0">릴리스 공지</a></li>
<li><strong><a href="https://orbstack.dev/">OrbStack</a> v1.4.0</strong> : mac용 Docker 애플리케이션, <a href="https://docs.orbstack.dev/release-notes#v1-4-0">릴리스 공지</a></li>
<li><strong><a href="https://remix.run/">Remix</a> v2.6.0</strong> : 풀스택 웹 프레임워크, <a href="https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v260">릴리스 공지</a></li>
<li><strong><a href="https://gradle.org/">Gradle</a> v8.6</strong> : Java 빌드 도구, <a href="https://docs.gradle.org/8.6/release-notes.html">릴리스 공지</a></li>
<li><strong><a href="http://www.babylonjs.com/">Babylon.js</a> v6.41.0</strong> : WebGL 자바스크립트 프레임워크, <a href="https://github.com/BabylonJS/Babylon.js/releases/tag/6.41.0">릴리스 공지</a></li>
<li><strong><a href="https://github.com/pinojs/pino">pino</a> v8.18.0</strong> : Node.js 로거, <a href="https://github.com/pinojs/pino/releases/tag/v8.18.0">변경사항</a></li>
<li><strong><a href="https://flow.org/">flow</a> v0.228.0</strong> : JavaScript 정적 타입 체커, <a href="https://github.com/facebook/flow/releases/tag/v0.228.0">릴리스 공지</a></li>
<li><strong><a href="https://mermaid.js.org/">Mermaid</a> v10.8.0</strong>: JavaScript 기반 다이어그램/차트 도구, <a href="https://github.com/mermaid-js/mermaid/releases/tag/v10.8.0">릴리스 공지</a></li>
<li><strong><a href="https://github.com/TryGhost/Ghost">Ghost</a> v5.79.0</strong> : 오픈소스 블로그 플랫폼, <a href="https://github.com/TryGhost/Ghost/releases/tag/v5.79.0">릴리스 공지</a></li>
<li><strong><a href="https://www.boundaryproject.io/">Boundary</a> v0.15</strong> : 인프라 접근 관리, <a href="https://www.hashicorp.com/blog/boundary-0-15-adds-new-storage-policies-and-desktop-cli-features">릴리스 공지</a></li>
<li><strong><a href="https://vitejs.dev/">Vite</a> v5.1.0</strong> : 프론트엔드 빌드 도구, <a href="https://vitejs.dev/blog/announcing-vite5-1.html">릴리스 공지</a></li>
<li><strong><a href="http://www.rust-lang.org/">Rust</a> 1.76.0</strong> : 프로그래밍 언어, <a href="https://blog.rust-lang.org/2024/02/08/Rust-1.76.0.html">릴리스 공지</a></li>
<li><strong><a href="https://argoproj.github.io/argo-cd/">Argo CD</a> v2.10.0</strong> : Kubernetes 배포 도구, <a href="https://blog.argoproj.io/argo-cd-v2-10-release-candidate-f69ba7bf9e06">릴리스 공지</a><br />
<br />
<ul>
<li>ApplicationSet 템플릿 지원</li>
<li>관리자 권한 없이도 앱 사용자가 알림 설정 가능</li>
</ul></li>
<li><strong><a href="https://k6.io/">k6</a> v0.49.0</strong> : 부하 테스트 도구, <a href="https://grafana.com/blog/2024/02/07/new-in-grafana-k6-the-latest-oss-features-in-v0.49.0-and-static-ips-in-grafana-cloud-k6/">릴리스 공지</a></li>
<li><strong><a href="https://github.com/web-infra-dev/rsbuild">Rsbuild</a> v0.4.0</strong> : Rspack 기반의 빌드 도구, <a href="https://rsbuild.dev/community/releases/v0-4">릴리스 공지</a></li>
<li><strong><a href="https://golang.org/">Go</a> v1.22</strong> : 프로그래밍 언어, <a href="https://tip.golang.org/doc/go1.22">릴리스 공지</a></li>
<li><strong><a href="http://jquery.com/">jQuery</a> v4.0.0 Beta</strong> : JavaScript 라이브러리, <a href="https://blog.jquery.com/2024/02/06/jquery-4-0-0-beta/">릴리스 공지</a><br />
<br />
<ul>
<li>IE 10 이하 지원 중단</li>
</ul></li>
<li><strong><a href="https://www.docker.com/products/docker-desktop">Docker Desktop</a> v4.27</strong> : 데스크톱용 Docker 애플리케이션, <a href="https://www.docker.com/blog/docker-desktop-4-27/">릴리스 공지</a></li>
<li><strong><a href="https://typescript-eslint.io/">typescript-eslint</a> v7.0.0</strong> : TypeScript의 ESLint, <a href="https://typescript-eslint.io/blog/announcing-typescript-eslint-v7">릴리스 공지</a></li>
<li><strong><a href="https://github.com/tmux/tmux">tmux</a> v3.4.0</strong> : 터미널 멀티플렉서, <a href="https://raw.githubusercontent.com/tmux/tmux/3.4/CHANGES">변경사항</a></li>
<li><strong><a href="https://panda-css.com/">panda</a> v0.31.0</strong> : CSS-in-JS, <a href="https://github.com/chakra-ui/panda/discussions/2202">릴리스 공지</a></li>
<li><strong><a href="https://angular.io/">Angular</a> v17.2.0</strong> : JavaScript 프레임워크, <a href="https://blog.angular.io/angular-v17-2-is-now-available-596cbe96242d">릴리스 공지</a></li>
<li><strong><a href="https://about.gitlab.com/">GitLab</a> v16.9</strong> : 오픈소스 설치형 Git 플랫폼, <a href="https://about.gitlab.com/releases/2024/02/15/gitlab-16-9-released/">릴리스 공지</a></li>
<li><strong><a href="https://www.dartlang.org/">Dart</a> v3.3.0</strong> : 프로그래밍 언어, <a href="https://medium.com/dartlang/dart-3-3-325bf2bf6c13">릴리스 공지</a></li>
<li><strong><a href="https://flutter.io/">Flutter</a> v3.19</strong> : iOS, Android 네이티브 앱을 만드는 프레임워크, <a href="https://medium.com/flutter/whats-new-in-flutter-3-19-58b1aae242d2">릴리스 공지</a></li>
<li><strong><a href="https://astro.build/">astro</a> v4.4</strong> : JavaScript 웹 프레임워크, <a href="https://astro.build/blog/astro-440/">릴리스 공지</a></li>
</ul>
<p><strong><a href="https://blog.outsider.ne.kr/1708?commentInput=true#entry1708WriteComment">댓글 쓰기</a></strong></p>