<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[yangsijun.log()]]></title><description><![CDATA[The log of Software Engineer Sijun Yang. A place where I share what I read, learn, and experience.
소프트웨어 엔지니어 양시준의 로그입니다. 읽고 공부하고 경험한 것들을 나누는 곳입니다.]]></description><link>https://log.sijun.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 21 May 2026 01:04:49 GMT</lastBuildDate><atom:link href="https://log.sijun.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[From Technical Uncertainty to Product Launch]]></title><description><![CDATA[Korean version of this article (here)
Over the past three months, I spent the most intense period of my time at the Apple Developer Academy working on the final project, Challenge 6. This retrospective summarises the technical challenges and insight ...]]></description><link>https://log.sijun.dev/from-technical-uncertainty-to-product-launch</link><guid isPermaLink="true">https://log.sijun.dev/from-technical-uncertainty-to-product-launch</guid><category><![CDATA[Apple Developer Academy]]></category><category><![CDATA[TNT Lab]]></category><category><![CDATA[kip]]></category><dc:creator><![CDATA[Sijun Yang (양시준)]]></dc:creator><pubDate>Wed, 17 Dec 2025 18:20:07 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://log.sijun.dev/from-technical-uncertainty-to-product-launch-kr">Korean version of this article (here)</a></p>
<p>Over the past three months, I spent the most intense period of my time at the Apple Developer Academy working on the final project, Challenge 6. This retrospective summarises the technical challenges and insight I gained as an engineer while deploying two apps simultaneously and preparing for the final Showcase.</p>
<h3 id="heading-1-problem-definition-over-technology-the-first-pivot">1. 'Problem Definition' Over Technology (The First Pivot)</h3>
<p>Our initial project was a <strong>sleep management app</strong>. We implemented features to restrict app usage at set times using <strong>NFC tags</strong> and the <strong>Screen Time API</strong>. While the technical implementation was polished and the design was excellent, user testing revealed that it did not lead to a practical solution for sleep issues. Acknowledging that a "solving a real problem" comes before "working code," we made the bold decision to scrap the app we had been developing for a month.</p>
<h3 id="heading-2-technical-challenges-in-a-no-reference-environment-imdf-and-indoor-maps">2. Technical Challenges in a No-Reference Environment: IMDF and Indoor Maps</h3>
<p>For our new challenge, we chose to implement an <strong>indoor map</strong> using <strong>Apple's Indoor Maps Program</strong>. We had to adhere to Apple's IMDF (Indoor Mapping Data Format) standards, but there were no local references (in Korea) available, and even existing automated tools were unsuitable.</p>
<p>Eventually, my team and I manually created coordinate data and reverse-engineered the data structure to pass Apple's strict schema validation, successfully building the map. Through this process, I gained a deep understanding of MapKit and geographic data processing logic.</p>
<p>Because the Indoor Maps project involved complex procedures, including Apple's approval, there was a risk that we might not finish within the limited challenge period. Consequently, we strategically converted it into a side project and ultimately received approval to complete 'ShowX', an information guide app for the Apple Developer Academy Showcase.</p>
<ul>
<li>[App Store - ShowX]: <a target="_blank" href="https://apps.apple.com/kr/app/showx/id6755496321">https://apps.apple.com/kr/app/showx/id6755496321</a></li>
</ul>
<h3 id="heading-3-on-device-ai-and-app-extensions-implementing-an-agent-app-beyond-technical-constraints">3. On-Device AI and App Extensions: Implementing an Agent App Beyond Technical Constraints</h3>
<p>With only one month left in the three-month project period, our team's main product was decided. It is <strong>'kip!'</strong>, an agent app that <strong>analyses and archives screenshots and links</strong>, <strong>offering timely and relevant reminders</strong> to the user.</p>
<p>To reduce server costs and ensure privacy, we adopted <strong>On-Device AI (Foundation Models)</strong> and implemented additional support for OpenAI's GPT and Google's Gemini API for scalability. We focused on optimising logic to <strong>process unstructured data</strong> and provide meaningful suggestions to users.</p>
<p>Additionally, we implemented a <strong>Share Extension</strong> so that key logic could be processed via the 'Share' action without entering the app. We resolved various technical hurdles to enhance the app's completeness, such as designing for the strict memory limits of Share Extensions and utilising App Groups for Shared Containers and file storage synchronisation.</p>
<p>Beyond simply making it work without bugs, I constantly communicated with the PO, UX/UI designers, and fellow developers, reviewing code to craft a product that offers a seamless user experience.</p>
<ul>
<li><p>[App Store - kip!]: <a target="_blank" href="https://apps.apple.com/kr/app/kip/id6754709167">https://apps.apple.com/kr/app/kip/id6754709167</a></p>
</li>
<li><p>[What The App? - kip!]: <a target="_blank" href="https://maily.so/whattheapp/posts/32z84k34rn4">https://maily.so/whattheapp/posts/32z84k34rn4</a></p>
</li>
<li><p>[My Review Room(방구석 리뷰룸) YouTube - kip!]: <a target="_blank" href="https://youtu.be/_vLAQbxVqhI?si=BIc3-LkQJOXShvci&amp;t=1002">https://youtu.be/_vLAQbxVqhI?si=BIc3-LkQJOXShvci&amp;t=1002</a></p>
</li>
</ul>
<h3 id="heading-4-showcase-deployment-and-results">4. Showcase, Deployment, and Results</h3>
<p><strong>'ShowX'</strong>, the indoor map app developed to support the Showcase, became <strong>the first case</strong> in Korea implemented through the Apple Indoor Maps Program. Furthermore, for our main product <strong>'kip!'</strong>, we deployed hotfixes and stabilised features right up until a famous tech YouTuber's demonstration, reliably handling edge cases in a live environment.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765994482242/4b5d35cf-bcc4-4e1d-9f14-fb14a1bf8d44.png" alt class="image--center mx-auto" /></p>
<p>The greatest takeaway from this project is <strong>'Teamwork and Synergy'</strong>. The process of reviewing implementation feasibility from the planning stage with designers, a domain expert, and fellow developers, and finding alternatives when facing technical difficulties, was a significant learning experience in itself.</p>
<p>Because I was with team members who possessed both the skills and attitudes to trust one another, we were able to create an impact that exceeded the sum of our individual efforts. I would like to thank my best teammates and mentors.</p>
<p>Now, stepping out of the sandbox that is the Academy, I aim to become an engineer who solves problems in the field driven by this intensity.</p>
<ul>
<li>[TNT Lab Blog]: <a target="_blank" href="https://tntlab.xyz/blog/">https://tntlab.xyz/blog/</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[기술적 불확실성을 넘어 프로덕트 런칭까지]]></title><description><![CDATA[English version of this article (here)
지난 3개월간 애플 디벨로퍼 아카데미의 마지막 프로젝트인 챌린지 6를 진행하며 가장 치열한 시간을 보냈습니다. 동시에 두 개의 앱 배포, 그리고 쇼케이스까지 이어진 과정에서 엔지니어로서 경험한 기술적 도전과 배움을 정리해 봅니다.
1. 기술보다 중요한 것은 '문제 정의' (첫 번째 피벗)
첫 프로젝트는 수면 관리 앱이었습니다. NFC 태그와 Screen Time API 제어를...]]></description><link>https://log.sijun.dev/from-technical-uncertainty-to-product-launch-kr</link><guid isPermaLink="true">https://log.sijun.dev/from-technical-uncertainty-to-product-launch-kr</guid><category><![CDATA[Apple Developer Academy]]></category><category><![CDATA[TNT Lab]]></category><category><![CDATA[kip]]></category><dc:creator><![CDATA[Sijun Yang (양시준)]]></dc:creator><pubDate>Wed, 17 Dec 2025 18:02:59 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://log.sijun.dev/from-technical-uncertainty-to-product-launch?showSharer=true">English version of this article (here)</a></p>
<p>지난 3개월간 애플 디벨로퍼 아카데미의 마지막 프로젝트인 챌린지 6를 진행하며 가장 치열한 시간을 보냈습니다. 동시에 두 개의 앱 배포, 그리고 쇼케이스까지 이어진 과정에서 엔지니어로서 경험한 기술적 도전과 배움을 정리해 봅니다.</p>
<h3 id="heading-1">1. 기술보다 중요한 것은 '문제 정의' (첫 번째 피벗)</h3>
<p>첫 프로젝트는 <strong>수면 관리 앱</strong>이었습니다. <strong>NFC 태그</strong>와 <strong>Screen Time API</strong> 제어를 활용해, 설정한 시간에 앱 사용을 제한하는 기능을 구현했습니다. 기술적 구현은 완성도 있었고 디자인도 훌륭했지만, 유저 테스트 결과 실질적인 수면 문제 해결로 이어지지 않는다는 것을 확인했습니다. "작동하는 코드"보다 "필요한 솔루션"이 우선임을 인정하고, 1개월간 공들여 개발하던 앱을 과감히 폐기하는 결정을 내렸습니다.</p>
<h3 id="heading-2-imdf">2. 레퍼런스가 없는 환경에서의 기술 도전: IMDF와 실내 지도</h3>
<p>새로운 도전으로 <strong>Apple의 Indoor Maps Program</strong>을 활용한 <strong>실내 지도 구현</strong>을 선택했습니다. Apple의 IMDF(Indoor Mapping Data Format) 표준을 준수해야 했으나, 국내 레퍼런스가 전무했고 자동화 툴조차 맞지 않았습니다. 결국 팀원들과 함께 수작업으로 좌표 데이터를 생성하고, Apple의 엄격한 스키마 유효성 검사를 통과하기 위해 데이터를 역설계하며 지도를 구축했습니다. 이 과정에서 MapKit과 지리 데이터 처리 로직에 대한 깊은 이해를 얻을 수 있었습니다.</p>
<p>실내 지도 프로젝트는 Apple의 승인 등 절차가 복잡하여 한정된 챌린지 기간 내에 완성하지 못할 리스크가 존재했습니다. 이에 따라 전략적으로 사이드 프로젝트로 전환하여 진행했고, 결국 승인을 받아 애플 디벨로퍼 아카데미 쇼케이스 정보 안내 앱, 'ShowX'를 완성했습니다.</p>
<ul>
<li>[App Store - ShowX]: https://apps.apple.com/kr/app/showx/id6755496321</li>
</ul>
<h3 id="heading-3-on-device-ai-app-extension">3. On-Device AI와 App Extension: 기술적 제약을 넘어선 에이전트 앱 구현</h3>
<p>3개월의 프로젝트 기간 중 단 1개월을 남기고 팀의 메인 프로덕트가 결정되었습니다. <strong>스크린샷과 링크를 분석해 아카이빙</strong>하고, 사용자에게 적절한 <strong>리마인드를 제안</strong>하는 에이전트 앱 <strong>'kip!'</strong>입니다.</p>
<p>서버 비용 절감과 개인정보 보호를 위해 <strong>On-Device AI(Foundation Models)</strong>를 채택했고, 이후 확장성을 위해 OpenAI의 GPT와 Google의 Gemini API를 추가 지원하도록 구현했습니다. <strong>비정형 데이터를 처리</strong>하여 사용자에게 유의미한 제안을 하는 로직을 최적화하는 데 집중했습니다.</p>
<p>또한 앱 진입 없이 '공유하기' 동작만으로 주요 로직을 처리할 수 있도록 <strong>Share Extension</strong>을 구현했습니다. 특히 Share Extension의 엄격한 메모리 제한을 고려한 설계, App Group을 활용한 Shared Container 및 파일 저장소 동기화 등 다양한 기술적 난관을 해결하며 앱의 완성도를 높였습니다.</p>
<p>단순히 버그 없이 작동하는 것을 넘어, 매끄러운 사용자 경험을 제공하기 위해 PO, UX/UI 디자이너, 동료 개발자들과 끊임없이 소통하고 코드를 리뷰하며 프로덕트를 빚어냈습니다.</p>
<ul>
<li><p>[App Store - kip!]: https://apps.apple.com/kr/app/kip/id6754709167</p>
</li>
<li><p>[왓더앱 - kip!, 아카이브를 더 똑똑하게 해준다면.]: https://maily.so/whattheapp/posts/32z84k34rn4</p>
</li>
<li><p>[방구석 리뷰룸 YouTube, kip! 소개]: https://youtu.be/_vLAQbxVqhI?si=BIc3-LkQJOXShvci&amp;t=1002</p>
</li>
</ul>
<h3 id="heading-4">4. 쇼케이스와 배포, 그리고 결과</h3>
<p>쇼케이스 지원을 위해 개발한 실내 지도 앱 <strong>'ShowX'</strong>는 Apple Indoor Maps Program으로 구현된 실내 지도 <strong>국내 최초 사례</strong>가 되었습니다. 또한 메인 프로덕트 <strong>'kip!'</strong>은 테크 유튜버 시연 직전까지 기능 안정화와 핫픽스를 배포하며, 실제 라이브 환경에서의 엣지 케이스를 안정적으로 처리했습니다.</p>
<h3 id="heading-66ei7lmy66mw">마치며</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765994482242/4b5d35cf-bcc4-4e1d-9f14-fb14a1bf8d44.png" alt class="image--center mx-auto" /></p>
<p>이번 프로젝트를 통해 얻은 가장 큰 자산은 <strong>'팀워크와 시너지'</strong>입니다. 디자이너, 도메인 러너, 그리고 동료 개발자들과 함께 기획 단계부터 구현 가능성을 검토하고, 기술적 난관을 만났을 때 대안을 찾아가는 과정 자체가 큰 학습이었습니다.</p>
<p>서로를 신뢰할 수 있는 실력과 태도를 갖춘 팀원들과 함께였기에, 개인의 합을 넘어선 임팩트를 만들 수 있었습니다. 최고의 팀원들과 멘토님들께 감사드립니다.</p>
<p>이제 아카데미라는 샌드박스를 벗어나, 현업에서도 이 치열함을 바탕으로 문제를 해결하는 엔지니어가 되겠습니다.</p>
<ul>
<li>[TNT Lab 블로그]: https://tntlab.xyz/blog/</li>
</ul>
]]></content:encoded></item></channel></rss>