<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>i18n-rosetta Blog</title>
        <link>https://i18n-rosetta.com/ko/blog</link>
        <description>i18n-rosetta Blog</description>
        <lastBuildDate>Thu, 14 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>ko</language>
        <item>
            <title><![CDATA[v3.2.0: 산업용 등급 품질 인프라]]></title>
            <link>https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure</link>
            <guid>https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure</guid>
            <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v3.2.0은 품질에 중점을 둔 릴리스예요. 702개의 테스트, 163개의 테스트 스위트를 갖추고 있으며, 조용한 실패(silent failures)에 대해서는 무관용 원칙을 적용했어요.]]></description>
            <content:encoded><![CDATA[<p>v3.2.0은 품질에 중점을 둔 릴리스예요. 702개의 테스트, 163개의 테스트 스위트를 갖추고 있으며, 조용한 실패(silent failures)에 대해서는 무관용 원칙을 적용했어요.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="변경-사항">변경 사항<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#%EB%B3%80%EA%B2%BD-%EC%82%AC%ED%95%AD" class="hash-link" aria-label="변경 사항 직접 링크" title="변경 사항 직접 링크" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="quality-gate-5가지-검사">Quality Gate (5가지 검사)<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#quality-gate-5%EA%B0%80%EC%A7%80-%EA%B2%80%EC%82%AC" class="hash-link" aria-label="Quality Gate (5가지 검사) 직접 링크" title="Quality Gate (5가지 검사) 직접 링크" translate="no">​</a></h3>
<p>이제 모든 번역은 디스크에 기록되기 전에 5가지 결정론적 유효성 검사를 통과해야 해요:</p>
<ol>
<li class=""><strong>Empty/blank</strong> — 모델이 아무것도 반환하지 않음</li>
<li class=""><strong>Source echo</strong> — 모델이 영어 입력값을 그대로 반환함</li>
<li class=""><strong>Hallucination loop</strong> — 반복되는 트라이그램(trigram) 패턴</li>
<li class=""><strong>Length inflation</strong> — 출력값이 원본보다 4배 이상 김</li>
<li class=""><strong>Script compliance</strong> — 로케일에 맞지 않는 잘못된 문자 체계(script)</li>
</ol>
<p>이 5가지 검사를 모두 통과하지 못한 번역은 기록되지 않아요. 실패한 번역은 로그에 남고 다시 시도돼요.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="retry-cascade">Retry Cascade<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#retry-cascade" class="hash-link" aria-label="Retry Cascade 직접 링크" title="Retry Cascade 직접 링크" translate="no">​</a></h3>
<p>배치가 실패하면, rosetta는 점진적으로 더 작은 배치 단위로 다시 시도해요:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Full batch (30 keys) → parse error</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  └→ Half batch (15 keys) → 2 failures</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      └→ Individual keys (1 each) → isolates the problem keys</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="보안-강화">보안 강화<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#%EB%B3%B4%EC%95%88-%EA%B0%95%ED%99%94" class="hash-link" aria-label="보안 강화 직접 링크" title="보안 강화 직접 링크" translate="no">​</a></h3>
<ul>
<li class=""><strong>Prototype pollution guard</strong> — 파싱 시점에 <code>__proto__</code>, <code>constructor</code> 키를 거부해요</li>
<li class=""><strong>Path traversal guard</strong> — 조작된 로케일 코드가 설정된 디렉터리 외부에 쓰기 작업을 할 수 없도록 막아요</li>
<li class=""><strong>Response validation</strong> — 전송된 키만 응답으로 다시 허용해요</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="테스트-인프라">테스트 인프라<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9D%B8%ED%94%84%EB%9D%BC" class="hash-link" aria-label="테스트 인프라 직접 링크" title="테스트 인프라 직접 링크" translate="no">​</a></h3>



































<table><thead><tr><th>스위트</th><th>테스트</th><th>다루는 내용</th></tr></thead><tbody><tr><td>Core (8개 스위트)</td><td>280+</td><td>Config, sync, CLI, watch, audit, pairs, format, init</td></tr><tr><td>Red team</td><td>89</td><td>적대적 입력(Adversarial inputs), 인코딩 공격</td></tr><tr><td>Contract</td><td>120</td><td>API 통합 계약</td></tr><tr><td>Performance</td><td>36</td><td>배치 최적화, 처리량 감소(regression)</td></tr><tr><td>Coverage</td><td>총 702개</td><td>전체 파이프라인</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="프롬프트-캐싱">프롬프트 캐싱<a href="https://i18n-rosetta.com/ko/blog/v3-2-quality-infrastructure#%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8-%EC%BA%90%EC%8B%B1" class="hash-link" aria-label="프롬프트 캐싱 직접 링크" title="프롬프트 캐싱 직접 링크" translate="no">​</a></h3>
<p>이제 시스템 메시지가 사용자 메시지와 분리되어, Anthropic 및 Google과 같은 제공업체에서 프롬프트 캐시 적중(cache hits)이 가능해졌어요. 이를 통해 다중 배치 동기화 시 토큰 비용을 크게 줄일 수 있어요.</p>
<p>전체 기술 세부 정보는 <a class="" href="https://i18n-rosetta.com/ko/docs/concepts/quality-gate">Quality Gate 문서</a>와 <a class="" href="https://i18n-rosetta.com/ko/docs/concepts/security">보안 문서</a>를 확인해 주세요.</p>]]></content:encoded>
            <category>release</category>
        </item>
        <item>
            <title><![CDATA[v3.1.0: Hugo Markdown 콘텐츠 번역]]></title>
            <link>https://i18n-rosetta.com/ko/blog/v3-1-content-translation</link>
            <guid>https://i18n-rosetta.com/ko/blog/v3-1-content-translation</guid>
            <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v3.1.0에는 전체 Hugo Markdown 콘텐츠 번역 기능이 추가되었어요. front matter 필드와 본문 콘텐츠를 번역하며, code block, shortcode, interpolation variable을 자동으로 보호해 줘요.]]></description>
            <content:encoded><![CDATA[<p>v3.1.0에는 전체 Hugo Markdown 콘텐츠 번역 기능이 추가되었어요. front matter 필드와 본문 콘텐츠를 번역하며, code block, shortcode, interpolation variable을 자동으로 보호해 줘요.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="콘텐츠-인식-번역">콘텐츠 인식 번역<a href="https://i18n-rosetta.com/ko/blog/v3-1-content-translation#%EC%BD%98%ED%85%90%EC%B8%A0-%EC%9D%B8%EC%8B%9D-%EB%B2%88%EC%97%AD" class="hash-link" aria-label="콘텐츠 인식 번역 직접 링크" title="콘텐츠 인식 번역 직접 링크" translate="no">​</a></h2>
<p>Markdown을 번역할 때 원본 파일을 LLM에 그대로 보낼 수는 없어요. Code block이 번역되거나, shortcode가 손상되거나, Hugo template variable이 망가질 수 있거든요.</p>
<p>Rosetta v3.1.0은 <strong>Unicode sentinel shielding</strong>으로 이 문제를 해결해요:</p>
<ol>
<li class="">번역하기 전에 구조화된 블록(code fence, shortcode, inline code, HTML)을 고유한 sentinel token으로 교체해요.</li>
<li class="">LLM은 번역 가능한 텍스트만 받게 돼요.</li>
<li class="">번역이 끝나면 sentinel을 원래 콘텐츠로 복원해요.</li>
</ol>
<p>LLM은 code block을 전혀 볼 수 없으므로, 이를 손상시킬 수 없어요.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="front-matter-지원">Front Matter 지원<a href="https://i18n-rosetta.com/ko/blog/v3-1-content-translation#front-matter-%EC%A7%80%EC%9B%90" class="hash-link" aria-label="Front Matter 지원 직접 링크" title="Front Matter 지원 직접 링크" translate="no">​</a></h2>
<p>YAML(<code>---</code>) 및 TOML(<code>+++</code>) front matter 구분자를 모두 지원해요. 기본적으로 <code>title</code>, <code>description</code>, <code>summary</code>, <code>subtitle</code>, <code>caption</code>, <code>linkTitle</code>가 번역돼요. 그 외의 모든 필드(date, draft, tags, weight)는 그대로 유지돼요.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="설정">설정<a href="https://i18n-rosetta.com/ko/blog/v3-1-content-translation#%EC%84%A4%EC%A0%95" class="hash-link" aria-label="설정 직접 링크" title="설정 직접 링크" translate="no">​</a></h2>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_OeMC">i18n-rosetta.config.json</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"contentDir"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"./content"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">npx i18n-rosetta </span><span class="token function" style="color:rgb(80, 250, 123)">sync</span><span class="token plain">   </span><span class="token comment" style="color:rgb(98, 114, 164)"># now translates content too</span><br></div></code></pre></div></div>
<p>자세한 내용은 <a class="" href="https://i18n-rosetta.com/ko/docs/guides/content-translation">콘텐츠 번역 가이드</a>를 참고해 주세요.</p>]]></content:encoded>
            <category>release</category>
        </item>
        <item>
            <title><![CDATA[i18n-rosetta v3.0.0: 쌍별 번역 아키텍처]]></title>
            <link>https://i18n-rosetta.com/ko/blog/v3-release</link>
            <guid>https://i18n-rosetta.com/ko/blog/v3-release</guid>
            <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[i18n-rosetta v3.0.0은 전체 시스템의 가장 핵심적인 기능인 per-pair 번역 아키텍처를 도입했어요.]]></description>
            <content:encoded><![CDATA[<p>i18n-rosetta v3.0.0은 전체 시스템의 가장 핵심적인 기능인 per-pair 번역 아키텍처를 도입했어요.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="변경-사항">변경 사항<a href="https://i18n-rosetta.com/ko/blog/v3-release#%EB%B3%80%EA%B2%BD-%EC%82%AC%ED%95%AD" class="hash-link" aria-label="변경 사항 직접 링크" title="변경 사항 직접 링크" translate="no">​</a></h2>
<p>이전 버전에서는 모든 언어 쌍에 대해 단일 번역 방식을 사용했어요. v3.0.0은 이러한 결합을 분리하여, 각 source→target 쌍마다 다른 방식, 모델, 품질 설정을 사용할 수 있어요.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"version"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"pairs"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:fr"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"method"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"google-translate"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:ja"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"method"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"llm"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"google/gemini-2.5-pro"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:crk"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"methodPlugin"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"crk-coached-v1"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="왜-per-pair인가요">왜 Per-Pair인가요?<a href="https://i18n-rosetta.com/ko/blog/v3-release#%EC%99%9C-per-pair%EC%9D%B8%EA%B0%80%EC%9A%94" class="hash-link" aria-label="왜 Per-Pair인가요? 직접 링크" title="왜 Per-Pair인가요? 직접 링크" translate="no">​</a></h2>
<p>이 아키텍처는 한 프로젝트에서 프랑스어에는 Google Translate를, 토착어에는 coached FST 파이프라인을 동일한 sync 명령어 내에서 동시에 실행해야 했기 때문에 만들어졌어요.</p>
<p>Google Translate는 약 130개의 언어를 지원해요. 하지만 전 세계에는 7,000개가 넘는 언어가 있어요. per-pair 시스템은 rosetta가 어떤 언어로든 확장될 수 있다는 것을 의미해요. 해당 언어 쌍에 맞는 방식만 있으면 되니까요.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="기타-주요-사항">기타 주요 사항<a href="https://i18n-rosetta.com/ko/blog/v3-release#%EA%B8%B0%ED%83%80-%EC%A3%BC%EC%9A%94-%EC%82%AC%ED%95%AD" class="hash-link" aria-label="기타 주요 사항 직접 링크" title="기타 주요 사항 직접 링크" translate="no">​</a></h2>
<ul>
<li class=""><strong>Plugin 시스템</strong> — eval harness에서 사전 패키징된 번역 방식을 설치할 수 있어요.</li>
<li class=""><strong>Config 버전 3</strong> — pair 수준의 override가 포함된 새로운 스키마예요.</li>
<li class=""><strong>Quality tiers</strong> — Standard, High, Research, Verified — <code>status</code>에서 각 쌍별로 표시돼요.</li>
</ul>
<p>전체 생태계 설계에 대해서는 <a class="" href="https://i18n-rosetta.com/ko/docs/concepts/architecture">Architecture 문서</a>를 확인해 보세요.</p>]]></content:encoded>
            <category>release</category>
        </item>
    </channel>
</rss>