<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Optimization on philipjkim</title><link>https://philipjkim.cc/tags/optimization/</link><description>Recent content in Optimization on philipjkim</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 03 Aug 2026 09:48:13 +0900</lastBuildDate><atom:link href="https://philipjkim.cc/tags/optimization/index.xml" rel="self" type="application/rss+xml"/><item><title>8비트의 벽을 넘은 게임들 Part 5: 제약이 사라진 시대에 남은 것</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-05/</link><pubDate>Mon, 03 Aug 2026 09:48:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="지금까지의-이야기"&gt;지금까지의 이야기&lt;/h2&gt;
&lt;p&gt;네 편에 걸쳐 세 작품을 뜯었습니다. 정리하면 이렇습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;슈퍼 마리오브라더스&lt;/th&gt;
 &lt;th&gt;엘리트&lt;/th&gt;
 &lt;th&gt;메탈기어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;연도 / 기종&lt;/td&gt;
 &lt;td&gt;1985 / 패미콤&lt;/td&gt;
 &lt;td&gt;1984 / BBC Micro&lt;/td&gt;
 &lt;td&gt;1987 / MSX2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;부족했던 자원&lt;/td&gt;
 &lt;td&gt;ROM 40KB&lt;/td&gt;
 &lt;td&gt;RAM 32KB&lt;/td&gt;
 &lt;td&gt;스프라이트, 가로 스크롤&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;전략&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;압축&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;생성&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;전복&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;핵심 기법&lt;/td&gt;
 &lt;td&gt;오브젝트 2바이트 인코딩&lt;/td&gt;
 &lt;td&gt;트리보나치 씨앗 트위스팅&lt;/td&gt;
 &lt;td&gt;요구사항 자체를 바꿈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;세계 데이터&lt;/td&gt;
 &lt;td&gt;4,460 바이트&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;6 바이트&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;20,246 바이트&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;치른 대가&lt;/td&gt;
 &lt;td&gt;표현 가능한 오브젝트가 제한됨&lt;/td&gt;
 &lt;td&gt;세부를 손댈 수 없음&lt;/td&gt;
 &lt;td&gt;원래 만들려던 게임을 포기함&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;이 마지막 편에서는 이 세 가지가 40년 뒤에 어떻게 됐는지 봅니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 3: 엘리트, 우주를 6바이트에 담다</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-03/</link><pubDate>Mon, 03 Aug 2026 09:33:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="저장하지-않으면-용량도-들지-않는다"&gt;저장하지 않으면 용량도 들지 않는다&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/"&gt;Part 2&lt;/a&gt;에서 본 슈퍼 마리오브라더스의 전략은 &lt;strong&gt;데이터를 작게 만드는 것&lt;/strong&gt; 이었습니다. 레벨 오브젝트를 2바이트로 인코딩해 게임 전체의 스테이지 데이터를 4,460바이트에 넣었습니다.&lt;/p&gt;
&lt;p&gt;1984년 BBC Micro 로 나온 엘리트는 한 걸음 더 나갑니다. &lt;strong&gt;데이터를 아예 갖지 않습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;먼저 규모를 봅시다. 엘리트에는 은하가 8개 있고, 은하마다 항성계가 256개 있습니다. &lt;strong&gt;총 2,048개&lt;/strong&gt; 입니다. 각 항성계에는 고유한 이름이 있고, 좌표가 있고, 경제 형태, 정부 형태, 기술 수준, 인구, 총생산, 행성 반지름, 지배 종족이 있습니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 2: 슈퍼 마리오브라더스, 레벨을 그리지 않고 서술하다</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/</link><pubDate>Mon, 03 Aug 2026 09:24:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4460바이트짜리-세계"&gt;4,460바이트짜리 세계&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/"&gt;Part 1&lt;/a&gt;에서 확인한 제약을 다시 꺼내 놓겠습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;슈퍼 마리오브라더스 카트리지는 PRG-ROM 32KB + CHR-ROM 8KB = &lt;strong&gt;40KB&lt;/strong&gt; 입니다.&lt;/li&gt;
&lt;li&gt;한 프레임 중 VRAM 을 만질 수 있는 시간은 2,273 사이클이고, 스프라이트 DMA 를 빼면 배경에 쓸 수 있는 것은 &lt;strong&gt;약 220바이트&lt;/strong&gt; 입니다.&lt;/li&gt;
&lt;li&gt;6502 에는 곱셈 명령이 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 세 줄을 지키면서 32개 스테이지가 흐르는 게임을 만들어야 합니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 1: 그 기계들은 무엇을 못 했는가</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/</link><pubDate>Mon, 03 Aug 2026 09:06:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="스크린샷-한-장보다-작은-게임"&gt;스크린샷 한 장보다 작은 게임&lt;/h2&gt;
&lt;p&gt;슈퍼 마리오브라더스가 담긴 카트리지의 ROM 용량은 &lt;strong&gt;40KB&lt;/strong&gt; 입니다. 프로그램 32KB, 그림 데이터 8KB. 이게 전부입니다.&lt;/p&gt;
&lt;p&gt;이 게임의 한 장면을 오늘날의 화면에서 캡처해 PNG 로 저장하면 보통 수백 KB 가 나옵니다. &lt;strong&gt;게임 하나가 그 게임의 스크린샷 한 장보다 작습니다.&lt;/strong&gt; 32개 스테이지, 여덟 가지 배경음악, 마리오의 물리 엔진, 적 AI, 점수 계산, 타이틀 화면이 전부 저 40KB 안에 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 섣부른 최적화, 아니면... 내가 한 말은 나부터 지켜야 했는데</title><link>https://philipjkim.cc/posts/20251010-premature-optimization/</link><pubDate>Fri, 10 Oct 2025 11:09:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20251010-premature-optimization/</guid><description>&lt;p&gt;원문: Pragmatic Programmers Newsletter (Translated by Google Gemini)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;저는 제 자신의 조언을 무시했고, 하루를 꼬박 날렸으며, 제가 저 자신의 최악의 고객임을 다시 한번 증명하고 말았습니다. (하지만 절망하지 마세요. 글 마지막에 쿠폰 코드가 있습니다.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;저희의 새로운 유통사는 요금을 청구할 항목들을 만들어내는 데 특별한 재능이 있습니다. 그런 항목이 수십 가지나 되죠. 저희는 순수익에 대해 로열티를 지급하기 때문에, 모든 청구 항목을 하나하나 맞춰봐야 합니다. 간단하죠, 안 그런가요?&lt;/p&gt;
&lt;p&gt;문제는 &amp;ldquo;권당&amp;rdquo; 발생하는 비용은 한 정산서에 나오고, &amp;ldquo;총액 공제&amp;rdquo; 항목은 다른 정산서에 나온다는 겁니다. 게다가 각 총액 항목 안에는 어떤 이름표도 없이 뒤죽박죽 섞인 비용들이 숨어있곤 합니다. 저희가 받는 것이라고는 날짜 두어 개와 무작위로 보이는 총액 하나가 전부입니다. 그러면 저희는 그 총액을 특정 비용들의 어떤 조합과 맞춰봐야 하는 것이죠.&lt;/p&gt;</description></item></channel></rss>