<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>annyeong_birdie.log</title>
        <link>https://velog.io/</link>
        <description>구조를 고민하고, 사람을 생각한다. | Thinking in structure, designing for people.</description>
        <lastBuildDate>Thu, 11 Jun 2026 07:28:21 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>annyeong_birdie.log</title>
            <url>https://velog.velcdn.com/images/annyeong_birdie/profile/39a8563e-8a65-4d53-b424-d413907a709a/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. annyeong_birdie.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/annyeong_birdie" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[첫 iOS SpriteKit 모바일 게임 (만 8세)]]></title>
            <link>https://velog.io/@annyeong_birdie/%EC%B2%AB-iOS-SpriteKit-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EA%B2%8C%EC%9E%84-%EB%A7%8C-8%EC%84%B8</link>
            <guid>https://velog.io/@annyeong_birdie/%EC%B2%AB-iOS-SpriteKit-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EA%B2%8C%EC%9E%84-%EB%A7%8C-8%EC%84%B8</guid>
            <pubDate>Thu, 11 Jun 2026 07:28:21 GMT</pubDate>
            <description><![CDATA[<p><em>이 글은 애플 파운데이션 프로그램 멘토와 러너들에게 프로그램 수료 후 만든 저의 첫 앱 프로젝트를 소개하기 위해 정리한 짧은 노트 모음입니다. 이 과정에서 아카데미에서 CBL로 다진 기본기가 어느 때보다 단단히 받쳐 주었습니다. 특히 막혔을 때 다음 개발 마일스톤까지 앞으로 나아가기 위해 exploratory cycle을 반복한것이 도움이 많이 되었습니다. 현재 <strong>1차 프로토타입</strong>이 완성되었습니다.</em></p>
<h2 id="게임-소개">게임 소개</h2>
<h3 id="묘한-옷-공방">묘한 옷 공방</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/c6c6179e-bab7-4914-a505-5d48279816c2/image.png" alt="게임 첫 화면"></p>
<p>이 앱은 iOS SpriteKit으로 개발한 한국어 <strong>테일러샵 모바일 게임</strong>입니다. 전반적인 분위기는 옛날 게임 느낌의 동화책 스타일입니다. 영어 제목 The Purrfect Stitch는 &quot;완벽한&quot;이라는 뜻의 Perfect에 고양이의 그르렁 소리 purr를 겹친 말장난입니다. Stitch(바느질 한 땀)와 더해 &quot;완벽한 한 땀&quot;이라는 의미가 되고, 주인공이 고양이 재봉사라서 붙인 이름입니다.</p>
<h2 id="시작하며">시작하며</h2>
<h3 id="최초의-기획서와-lo-fi-프로토타입">최초의 기획서와 Lo-Fi 프로토타입</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/12350e4e-0cd5-464e-af15-0d1d49d0c641/image.png" alt="둘째의 게임 디자인 원본"></p>
<p>이 모든 것이 코드가 되기 전에, 이 게임은 Freeform을 이용해서 손으로 그린 와이어프레임이었습니다. 저의 첫 클라이언트는 초등학교 3학년인 둘째 딸이었고, 위 디자인을 직접 건네받았습니다. 옷감상점, 가구상점(가격: 5원), 공방, 아이템 개수까지 적힌 옷장, 그리고 지붕 위 고양이 한 마리(협상 불가) 등 사양이 꽤 구체적이었습니다. 기획서에는 무한한 아이디어와, 그것을 표현할 제한된 비개발자의 어휘, 그리고 24시간 지원 요청이 함께 딸려 왔습니다. 아래 내용의 대부분은 그 기획서에 맞춰 앱을 구현해 보려는 저의 시도입니다.</p>
<h2 id="바이브-코딩-경험">바이브 코딩 경험</h2>
<h4 id="claude와-xcode--내가-한-일과-claude가-한-일">Claude와 Xcode — 내가 한 일과 Claude가 한 일</h4>
<p>이 프로젝트는 Claude와 협업하여 개발했으며, 역할이 비교적 명확하게 나뉘었습니다.</p>
<p><strong>제가 담당한 일:</strong> 게임 디자인과 POV 구조 결정, 스프라이트 아트를 ChatGPT로 생성하고 사운드 에셋과 함께 Xcode에 임포트, 디자인 방향 전환 판단, 리팩터링 방향 결정, 실기기 테스트, 메모리·컨텍스트·토큰 사용량 관리, 그리고 git 커밋과 GitHub 백업(Cowork 샌드박스에는 깃 자격증명이 없어 푸시는 제 터미널에서 수행).</p>
<p><strong>Claude가 담당한 일:</strong> 코드 작성, 씬 리팩터링, 레이아웃 수치 계산, 버그 원인 추적, 그리고 매 세션 종료 시 다음 세션을 위한 핸드오프 노트 작성. </p>
<p>다만 프롬프트만으로 지시하기 어려운 미세한 변경은 제가 IDE에서 직접 손으로 수정하기도 했습니다.</p>
<p>저는 Claude를 두 가지 형태로 함께 썼습니다. 하나는 <strong>Cowork</strong>(에이전틱 데스크톱 앱)이고, 다른 하나는 터미널 기반의 <strong>Claude Code</strong>입니다. 처음에는 이 둘을 언제 어떻게 나눠 써야 할지 — 특정 작업을 위해 Claude Code나 서브 에이전트로 전환할 시점은 언제이고, 권한은 어디까지 위임해도 되는지 — 에 대한 감이 없었습니다. 그래서 <strong>Claude Code 101</strong> 과정을 수강하고, Cowork에서 이 프로젝트를 연습 문제 풀듯 진행하며 그 감각과 자신감을 키웠습니다.</p>
<p>한 가지 인상 깊었던 점은, AI와의 이른바 &#39;바이브 코딩&#39;이 이전에 우아한테크코스 프리코스에서 객체지향 프로그래밍을 배우던 경험과 사뭇 달랐다는 것입니다. 프리코스에서는 작은 요구사항 하나하나를 직접 손으로 구현하며 단일 책임·캡슐화 같은 원칙을 몸에 새기는, 원칙에서 코드로 내려가는 방식이었습니다. 반면 이번에 제가 한 AI와의 작업은 먼저 동작하는 결과를 빠르게 세워 두고 거기서부터 구조를 다듬어 가는, 코드에서 원칙으로 거슬러 올라가는 정반대의 리듬이었습니다. 속도와 탐색에는 후자가 강했지만, &quot;왜 이렇게 짜야 하는가&quot;를 스스로 붙들고 있지 않으면 구조가 쉽게 흐트러진다는 점에서, 프리코스에서 다진 기본기가 오히려 더 중요해졌다는 것이 흥미로웠습니다.</p>
<h4 id="claudemd와-skillmd-활용">CLAUDE.md와 SKILL.md 활용</h4>
<p>세션이 끊기더라도 맥락이 사라지지 않도록 하는 것이 핵심이었습니다. </p>
<p>레포 루트의 <strong><code>CLAUDE.md</code></strong>는 일종의 살아 있는 아키텍처 문서입니다. 빌드 방법, 씬 흐름도, HUD 레이아웃 규약(작업실은 재봉사 요소가 좌상단, 손님 요소가 우상단), 스프라이트 투명 패딩 보정 규칙, zPosition 컨벤션, 모델 레이어 표까지 포함하고 있어, Claude가 새 세션에서 이 파일만 읽으면 코드베이스의 상황을 즉시 파악합니다. </p>
<p>여기에 매 세션 종료 시 날짜를 bash date로 기록한 핸드오프 문서(<code>로컬프로젝트명_handoff.md</code>)를 더해, 무엇이 완료되었고 무엇이 미커밋 상태이며 다음에 무엇을 해야 하는지를 전달합니다.</p>
<p><strong><code>SKILL.md</code></strong>는 문서·이미지 생성과 같은 반복 작업의 출력 형식을 표준화하는 용도로 활용했습니다. </p>
<p>결국 이 프로젝트에서 배운 것은 코드 못지않게 <strong>&quot;AI가 다음에도 매끄럽게 작업을 이어받을 수 있도록 문서를 설계하는 방법&quot;</strong>이었습니다.</p>
<h2 id="개발-여정">개발 여정</h2>
<h3 id="1-spritekit-첫-도전">1. SpriteKit 첫 도전</h3>
<p>SpriteKit은 이번 프로젝트에서 처음 사용해 보았습니다. 첫 프레임워크를 AI와 함께 익히는 경험을 통해 많은 것을 배웠습니다. 그 흔적 중 하나가 1차 완성된 현 프로토타입 단계에서 의도적으로 남겨 둔 씬 사이 불일치입니다. <code>FrontShopScene</code>은 <code>GameScene.sks</code>(비주얼 에디터)로 노드 레이아웃을 구성하고, <code>BackRoomScene</code>은 전부 코드로 빌드합니다. 두 방식이 한 코드베이스에 공존하는 셈입니다. 완전 코드 기반으로 통일하는 안을 옷장 및 영속성 작업을 마친 직후에 검토했으나, 해당 작업이 아직 안정되기 전이었기에 회귀 위험이 일관성에서 얻는 이득보다 크다고 판단하여 구조적으로 손을 보는 것은 미루었습니다. 첫 프레임워크에서 가장 크게 배운 점은 문법이 아니라, 지금 리팩터링하지 않는 것이 옳은 시점을 판단하는 일이었습니다.</p>
<h3 id="2-phase-15-무엇이-구현되었나">2. Phase 1–5, 무엇이 구현되었나</h3>
<p>게임은 다섯 단계를 거쳐 마일스톤을 찍으며 성장했습니다. </p>
<p>Phase 1(Hi-Fi 프로토타입) — 핑크 드레스 한 벌짜리 고정 흐름이었습니다. 원단과 단추가 하드코딩되어 있었으며, 죽은 코드와 디버그 오버레이를 정리했습니다. </p>
<p>Phase 2(게임 루프 확장) — NPC 가게 주인이 옷 종류 → 원단 색 → 보증금의 세 단계 주문을 안내하고,<code>Order</code>가 세 값을 모두 실어 작업실로 전달합니다. 초안에 있던 2c 단추 선택은 플레이어의 주도성이 약하여 취소했습니다. </p>
<p>Phase 3(스테이션 미니게임) — 원단장·재봉틀·단추·마네킹 보스로 구성된 네 개의 마리오풍 플랫포머입니다. 스테이션 1–3은 <code>MinigameNode</code> + <code>MinigameConfig</code>로, 보스는 별도의 <code>BossMinigameNode</code>로 구현했습니다. </p>
<p>Phase 4(사운드 패스) — 28개의 SFX 중 23개를 연결했습니다. SKAction 방식의 오디오 누수 문제를 <code>AVAudioPlayer</code> 풀과 <code>stop()</code> API로 교체했으며, v1 출시 게이트에 해당합니다. </p>
<p>Phase 5(유물 퀘스트) — 던전 루프 위에 얹은 메타 퀘스트입니다. 유물 4개 수집, 네 개의 내러티브 씬(<code>TailorChoiceScene</code>, <code>AuroraChamberScene</code>, <code>PrincessAnaScene</code>, <code>DaphneBecomesTailorScene</code>), 스토리북, 그리고 공유 컴포넌트 <code>NarrativeHUD</code>를 포함합니다.</p>
<h3 id="3-씬-흐름-scene-flow">3. 씬 흐름 (Scene Flow)</h3>
<p>게임은 하나의 가게를 세 개의 공간으로 나누어 순환합니다. 가게 앞(손님 시점)에서 옷을 주문받고 보증금을 받은 뒤, 작업실(재봉사 시점)에서 옷을 제작하고, 다시 가게 앞(손님 시점)으로 완성된 옷을 받는 돌아오는 순환 구조입니다. 시작점은 <code>GameViewController</code>이며, 여기서 손님이 선택되어 있는지(<code>Store.loadSelectedCustomer()</code>)를 확인하여 첫 실행이면 설정 씬의 손님 선택 화면으로, 그렇지 않으면 곧장 <code>FrontShopScene</code>으로 이동시킵니다. 가게 앞에서 톱니바퀴·지갑·옷장 아이콘은 각각 설정·수수께끼·드레스룸 씬으로 크로스페이드 후 복귀하며, 보증금을 지불하면 페이드 전환으로 <code>BackRoomScene</code>(작업실)으로 넘어갑니다.</p>
<h3 id="4-씬-간-통신-scene-to-scene-communication">4. 씬 간 통신 (Scene-to-Scene Communication)</h3>
<p>별도의 코디네이터나 전역 상태 매니저를 두지 않았습니다. 씬을 띄우기 직전에 목적지 씬의 프로퍼티를 직접 설정하는 가장 단순한 방식을 택했습니다. 예를 들어 작업실로 이동할 때는 <code>order</code> 프로퍼티에 주문 정보를 담아 전달하고, 완성 후 가게로 돌아올 때는 <code>shouldShowFinishedGarment = true</code>를 설정합니다. 사이드 씬들(드레스룸·수수께끼·설정)은 복귀 시 <code>suppressEntryBell = true</code>를 설정하여, 실제 입장(앱 실행, 작업 완료)에서만 가게 종소리가 울리고 단순 복귀 시에는 울리지 않도록 했습니다. 통화(냥·마력)와 같은 영속 상태는 프로퍼티로 전달하지 않고 <code>Wallet.shared</code> / <code>Magic.shared</code> 싱글톤에서 어느 씬이든 직접 읽습니다. 프로젝트 규모에 맞는 가장 가벼운 통신을 택한 결정이었습니다.</p>
<h3 id="5-모델-레이어-model-layers">5. 모델 레이어 (Model Layers)</h3>
<p>데이터와 씬을 분리하기 위해 Model/ 폴더를 별도로 두었으며, 역할에 따라 표현 방식을 구분했습니다. 순수 값 타입은 주문 데이터를 담당합니다. <code>Order</code> 구조체와 <code>ClothingType·FabricColor</code> 열거형은 <code>Codable·CaseIterable</code>이며, 한국어 raw 값을 기존 문자열 모델과 바이트 단위로 동일하게 유지하여 저장 포맷 호환성을 보존했습니다. 싱글톤은 씬을 가로지르는 상태를 담당합니다. <code>Wallet</code>(손님 냥), <code>Magic</code>(재봉사 마력), <code>SoundManager</code>, <code>ProfileManager</code>는 어느 씬에서든 <code>.shared</code>로 직접 읽습니다. 통화를 둘로 분리한 점이 모델 설계의 핵심이었는데, <code>Wallet</code>은 보증금으로 감소하고 환불로 증가하는 순환 경제인 반면, <code>Magic</code>은 던전 보상으로 단조 증가만 하는 확장 경제로 그 경제적 성격이 서로 다릅니다. 영속화는 전부 평면적인 <code>UserDefaults</code> 키로 처리했습니다.</p>
<h3 id="6-부모가-직접-바꾸는-퀴즈-parent-editable-quiz">6. 부모가 직접 바꾸는 퀴즈 (Parent-Editable Quiz)</h3>
<p>가게 주인은 손님에게 초등학생 레벨의 수학문제와 상식 수수께끼(퀴즈)를 냅니다. 맞히면 보상으로 냥을 받습니다. <code>Riddle</code> 구조체는 질문, 4지선다 보기, 정답, 그리고 보상(기본 15냥)을 담습니다. 핵심은 데이터를 불러오는 방식에 있습니다. <code>RiddleBank.load()</code>는 먼저 <code>Documents/riddles.json</code>을 찾아보고, 없으면 하드코딩된 기본 문제 15개로 폴백합니다. </p>
<p>지금은 임시 하드코딩되어 있지만, 로더가 처음부터 부모가 직접 편집할 수 있는 JSON 파일을 우선하도록 설계해 두었습니다. 향후 앱을 다시 빌드하지 않고도 아이의 연령이나 학습 주제에 맞춰 문제를 바꿔 끼울 수 있는 문이 열려 있습니다. 첫 클라이언트가 초등학생이었던 만큼, 확장 가능성을 확보해 두었습니다. </p>
<h3 id="7-상태-관리-state-management">7. 상태 관리 (State Management)</h3>
<p>씬은 고유한 상태 머신을 가집니다.</p>
<table>
<thead>
<tr>
<th>씬</th>
<th>상태 enum</th>
<th>진행 흐름</th>
</tr>
</thead>
<tbody><tr>
<td><code>FrontShopScene</code></td>
<td><code>FrontShopState</code></td>
<td><code>greeting → choosingClothing → choosingFabricColor → reviewingOrder → awaitingPayment → sendingOrder</code></td>
</tr>
<tr>
<td><code>BackRoomScene</code> (작업실)</td>
<td><code>BackRoomState</code></td>
<td><code>waitingForCabinetTap → … → completed</code> (선형 진행)</td>
</tr>
</tbody></table>
<p>가장 만족스러운 부분은 입력 게이팅입니다. 이전에는 <code>if currentState == .x</code> 가드가 곳곳에 흩어져 있었으나, 이제는 <code>FrontShopState.accepts(_:)</code> 내부의 <code>default</code> 없는 단일 <code>switch self</code>로 통합했습니다. </p>
<h3 id="8-재사용-가능한-hud-reusable-hud">8. 재사용 가능한 HUD (Reusable HUD)</h3>
<p>후반부 내러티브 씬이 세 개로 늘어나면서, 대사 UI를 매번 새로 구성하는 대신 <code>NarrativeHUD</code>라는 <code>SKNode</code> 서브클래스 하나로 통합했습니다. 흉상 초상화(좌·우·중앙상단 슬롯), 반투명 대사 패널, 깜빡이는 ▶ 진행 표시, 그리고 패널을 그대로 변형하여 보여주는 선택지 패널까지 한 컴포넌트에 담았습니다. 호스트 씬은 <code>configure(speakers:...)</code>로 캐릭터를 등록하고 <code>revealSpeaker</code> / <code>show(speaker:text:)</code> / <code>showChoices</code> 같은 공개 API만 호출합니다. 터치 처리는 씬이 담당하고 HUD는 표시에만 집중하도록 책임을 분리했습니다. <code>revealedNames</code> 가드를 두어, 씬 시작 시 등록만 해 둔 뒤늦게 등장하는 캐릭터(요정 대모)가 의도치 않게 화면에 나타나는 버그도 방지했습니다.</p>
<h2 id="게임-화면">게임 화면</h2>
<h3 id="손님의-주문">손님의 주문</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/e2089849-c6a6-4f2d-993f-831723af1946/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/f4ad1233-17df-4eca-a951-721c6b6864cc/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/32c2d503-b63a-45b7-8bc2-52b419a8bd58/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/848539f1-6440-47ed-9d9d-371af2c3b100/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/4a936511-565d-4cdf-b706-e3dc23723501/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/f7bd6ecb-699b-4c58-b6dd-e3af381053aa/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/dd02586a-b349-4ce3-99c7-a868fa407db7/image.PNG" alt=""></p>
<h3 id="재봉사-작업실">재봉사 작업실</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/daca73cd-167c-4feb-9fb3-3d820a342e9e/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/82dedbb0-bc83-462a-a223-6fe8e4105f48/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/427cf825-a0f4-4b8a-b36c-78c752f0c0c9/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/4562deeb-4205-45cd-ab7a-7149ac803f35/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/7ffa89c4-39b8-437b-b440-eb8dc80fff9a/image.PNG" alt=""></p>
<h3 id="지하-던전">지하 던전</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/d8e32830-db7f-44c2-885b-c769f10dc583/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/fc7deb88-2c49-4f5c-9e60-8ddfff358509/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/646a970c-4985-4dd2-afb5-a38a2dce662e/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/217a2efa-5d12-463b-b175-a1502519e935/image.PNG" alt=""></p>
<h3 id="유물-퀘스트-relics-quest">유물 퀘스트 (Relics Quest)</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/70b98efc-70a0-4efe-9851-017ab0eacb8f/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/ef23e10a-9c59-49b1-a6b6-27905573bba4/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/ad3b033a-f404-4a93-a4a4-3dc7c8d728fc/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/4002f120-0e56-4ed1-934a-754ae4d400c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/6e6af05d-13dc-4ea6-a4b8-dd8b686965ed/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/5c6f846b-3ae3-4aad-9275-463e85dc90d9/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/e3df901e-2bcb-491f-83eb-6c3ff395b820/image.PNG" alt=""></p>
<h3 id="스토리북-unlock--장면-다시-보기">스토리북 Unlock : 장면 다시 보기</h3>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/fcbf5e00-c5a2-47a0-9630-6a1589921ede/image.PNG" alt="이야기 소개"></p>
<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/34b88b4c-6624-4c9c-8e76-8e5d71858b8c/image.png" alt=""></p>
<h2 id="마치며">마치며</h2>
<p>몇 달 전만 해도 게임 한 편을 끝까지 만들어 본 적이 없었습니다. 처음 써보는 프레임워크를 AI와 함께 익히고, 가장 까다로운 클라이언트(초등학교 3학년)의 밤마다 바뀌는 요구사항을 쳐내며, 결국 손에 잡히는 앱 프로토타입을 완성했습니다. 완벽하진 않지만&#39;Purrfect&#39;하게 플레이할 수 있는 게임을 만들 수 있도록 시작을 만들어 주신 멘토와 러너들에게 감사드립니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[우아한테크코스 8기 지원 후기 - 프리코스]]></title>
            <link>https://velog.io/@annyeong_birdie/%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC%EC%BD%94%EC%8A%A4-8%EA%B8%B0-%EC%A7%80%EC%9B%90-%ED%9B%84%EA%B8%B0-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4</link>
            <guid>https://velog.io/@annyeong_birdie/%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC%EC%BD%94%EC%8A%A4-8%EA%B8%B0-%EC%A7%80%EC%9B%90-%ED%9B%84%EA%B8%B0-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4</guid>
            <pubDate>Thu, 26 Feb 2026 07:23:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/annyeong_birdie/post/32615e0d-6b62-4be8-8846-01aac8773f7c/image.jpg" alt=""></p>
<p><em>몰입했을 때 일어나는 놀라운 변화를 경험하고 싶다면 추천합니다</em></p>
<p>프리코스 기간 동안 블로그 활동을 하지 않은 게 아쉬워서 몇 자 적어봅니다.</p>
<p>일차적으로는 노력한 내 자신을 위해 기록을 남기기 위함이고, 이차적으로는 빠르게 변화하는 요즘 진로와 학업을 고민하고 있는 다른 지원자들이 참고할 수 있도록 발자국을 남기기 위해서입니다.</p>
<p>결론부터 말하자면, 많이 성장하게 한 양분의 경험이었기 때문에 개인적으로 결과와 상관없이 추천합니다.</p>
<h3 id="1--2026-신입생-8기-선발-일정">1.  2026 신입생 (8기) 선발 일정</h3>
<p><strong>입학 설명회</strong>: 2025년 9월 24일(수) 10:30 ~ 12:00 | 온라인
<strong>서류접수</strong>: 2025년 9월 29일(월) 오후 3시 ~ 10월 10일(금) 오전 10시 
<strong>프리코스</strong>: 2025년 10월 14일(화) ~ 11월 17일(월) | 디스코드서버
<strong>1차 합격자 발표</strong>: 2025년 12월 29일(월) 오후 3시 
<strong>최종 코딩 테스트</strong>: 2026년 1월 10일(토) | 우아한형제들 루터회관(잠실)
<strong>최종 합격자 발표</strong>: 2026년 1월 23일(금) 오후 3시
<strong>본코스 시작</strong>: 2026년 2월 24일(화) 오전 10시</p>
<h3 id="2-프리코스-흐름">2. 프리코스 흐름</h3>
<p>🌱 1주차 미션 (계산기) 학습 목표: <strong>개발 환경과 프로그래밍 언어에 익숙해지는 것</strong>
🌿 2주차 미션 (자동차 경주) 학습 목표: <strong>함수 분리와 테스트 도구 사용법을 익히는 것</strong>
🌳 3주차 미션 (로또) 학습 목표: <strong>클래스 분리와 단위 테스트를 통해 코드를 구조적으로 사고하는 것</strong>
🏕️ 4-5주차 오픈미션</p>
<h3 id="3-서류지원">3. 서류지원</h3>
<p>  우아한테크코스 8기 지원서에는 다음 질문에 대답을 해야했습니다. </p>
<blockquote>
<p><strong>당신을 보여줄 도전과 몰입 경험은?</strong>
우리는 당신이 어떤 사람인지, 무엇을 중요하게 생각하는지 알고 싶습니다. 가장 깊이 몰입하였던 도전 경험을 들려주세요. 프로그래밍이 아닌 다른 분야여도 좋습니다. 무엇이든 진심으로 파고들었던 경험이면 충분합니다. 왜 그 일에 빠져들었는지, 직면한 가장 큰 난관과 이를 어떻게 극복하였는지, 그 경험이 당신을 어떻게 변화시켰는지 구체적으로 작성해 주세요. 실패나 좌절의 순간이 있었다면 그것도 괜찮습니다. (권장 글자 수 제한은 없으나, 시스템상 최대 10,000자까지 입력할 수 있습니다.)</p>
</blockquote>
<p>  이때 저는 두 번째 커리어를 준비하고 있는 터라, 10년 넘게 달려왔던 첫 번째 커리어에서의 몰입 경험을 서술하게 되었습니다. 심사 기준을 정확히 알 수는 없지만, 설명회에서 ‘울림’이라는 표현이 사용된 것이 인상 깊게 남았습니다. 여러 번 퇴고하며 글을 다듬는 과정 자체가 지난 시간을 정리하는 계기가 되었습니다.</p>
<h3 id="4-디스코드-활동">4. 디스코드 활동</h3>
<p>프리코스는 5주동안 온라인으로 디스코드 서버에서 이뤄졌고, 지원을 하면 초대가 옵니다. 일단 들어가면 지원자임을 챗봇을 통해 인증해야 합니다. 프론트엔드, 백엔드, 안드로이드 트랙 지원자 모두 디스코드 서버에서 만나 교류할 수 있습니다. 공부한 내용을 서로 공유하거나 특정 주제에 대해 토론하기도 합니다.</p>
<p>  <em>TIP 처음 디스코드 서버에 들어가면 너도나도 경쟁적으로 활동을 시작해서 기가 눌릴 수 있습니다. 특히 비전공자라면 더 그럴 것입니다. 시간이 지나면 차분해지니 처음에 너무 당황하지 말고 소신껏 활동하는 것을 목표로 하면 됩니다.</em></p>
<h3 id="5-과제-제출">5. 과제 제출</h3>
<p>미션은 매주 화요일 15시에 디스코드 공지사항으로 올라옵니다. 과제가 공개되면 깃허브에서 레포지토리를 포크하고 클론한 뒤 브랜치를 따서 작업을합니다. 이후 풀 리퀘스트를 한 다음, 우테코 웹사이트에 가서 회고록과 PR 링크를 함께 제출합니다.</p>
<p>  이번 프리코스에는 2주가 주어지는 오픈 미션이 처음으로 도입됐습니다. 스스로 연구·기획·설계·구현을 모두 진행해야 했습니다. 혼자서 해도 되고, 누군가와 함께 협업해도 되었습니다.</p>
<p>  <em>TIP 제출 기한 전날 밤에 작업하다가 제출에 실패하는 안타까운 사례가 있었습니다. 제출 기한은 해당 날짜의 00:00임을 유의해야 합니다. 전날 밤 12시로 기억하는게 더 편할 수 있습니다.</em></p>
<h3 id="6-공통피드백">6. 공통피드백</h3>
<p>저는 백엔드 희망자로 지원했기 때문에 백엔드 공통 피드백만 볼 수 있었습니다. 컨벤션에 맞는 커밋 메시지 작성부터 단일 책임 원칙을 따르고 테스트 가능성을 높이며 코드 응집도를 향상시키는 방법까지 배울 수 있었습니다. 강의식 교육이 아닌 미션을 해결해가며 배우는 과정이이기 때문에 피드백이 중요했습니다.</p>
<p>  <em>TIP 프로그래밍 요구 사항을 다르게 이해했거나 병아리/개발 꿈나무라면 공통 피드백을 읽을 때 이것저것 걸리는 게 많을 수 있습니다. 저도 그랬습니다. 낙담하지 말고 다음 과제 때 반영하면 됩니다.</em></p>
<h3 id="7-스터디그룹">7. 스터디그룹</h3>
<p>자율적으로 오프라인 스터디 그룹이 만들어졌습니다. 누군가가 OOO 인근 지역 스터디를 모집한다는 글을 올리면 메시지를 보내 합류하면 됩니다. 학습 방법은 그룹마다 다르겠지만, 작업 중인 레포를 보면서 발표하고 피드백을 주고받으며 테코톡을 하기도 합니다.</p>
<p>  <em>TIP 혼자서도 잘하는 사람도 있지만, 프리코스의 학습 효과를 200% 끌어올리고 싶다면 스터디 그룹에 들어가는 것을 추천합니다. 협업하고 건설적으로 피드백을 주고받는 것은 연습이 필요합니다. 또, 풀 리퀘스트 후 깃 코멘트로 피드백을 주고받는 활동을 해야 하는데 고립되면 곤란합니다. 지원자 3천 명 중 내 스터디 그룹원이 제출한 코드부터 유심히 보게 되기 마련이었습니다.</em>  </p>
<h3 id="8-포수타">8. 포수타</h3>
<p>포수타는 사전에 질문을 받고 Q&amp;A 형식으로 온라인으로 진행됩니다. 라이브에 참여하지 못한 사람들을 위해 일정 기간 녹화 영상을 볼 수 있도록 배려해 줍니다. 취업, 학업, 기술 스택, AI 등 여러 가지 주제를 다루는데, 기술적인 이야기를 하는 자리는 아닙니다.</p>
<p>  <em>TIP 포비와 함께하는 이 시간은 궁금증을 풀고, 자극도 받고, 힐링도 하는 시간입니다. 인생 경험과 업계에 대한 통찰을 가진 선배에게 배우는 좋은 기회이니 꼭 참여하면 좋습니다.</em></p>
<h3 id="9-기타">9. 기타</h3>
<ul>
<li>증빙자료를 미리미리 준비해야합니다. 각 미션마다 노션, 블로그, 구글도큐먼트, 트렐로 등 활용할 수 있습니다.</li>
<li>회고록 작성에 충분한 노력을 기울이세요. 돌아보면 가장 많이 성장한 순간입니다.</li>
<li>프리코스에 투자할 수 있는 시간을 현실적으로 확보하도록 하세요. 하루 2-3시간도 좋고, 주말에 몰아서 할 수 도 있습니다. 완주할 때 까지 미리 계획을 해서 시간관리를 하면 도움이 됩니다.  </li>
</ul>
<h3 id="10-결과-1차-합격">10. 결과 (1차 합격)</h3>
<p>  솔직히 오픈 미션이었던 프리코스 마지막 과제를 제출하고 나서, 처음 배워보는 자바라는 언어로 완주했다는 것만으로도 만족했습니다. 다 같이 최종 코테까지 가자고 그룹원들이 응원할 때, 저는 해맑게 메타인지력을 자랑하며 “아직 갈 길이 멀지만 여러분을 응원한다”고 대답했습니다.</p>
<p>  그래서 예상 밖으로 1차 합격 이메일을 받았을 때, 기회를 준 우아한테크에 대한 감사한 마음, 코딩 테스트 기회를 얻었다는 기쁨, 그리고 부족한 실력에 대한 두려움이 교차했습니다. 우아한형제들 루터회관(잠실)에서 본 최종 코딩 테스트는 4시간 (13:00<del>17:00) 동안 진행됬고 회고 작성 1시간 (17:00</del>18:00) 까지 합하면 총 5시간이 소요되었습니다. 아쉽게도 최종 합격은 하지 못했지만 결과와 상관 없이 정말 값진 경험이었습니다.  </p>
<p>  보다시피 제 레포지토리는 아직 많이 부족합니다. 그러나 이 기록은 제가 진심으로 몰입했고, 프리코스를 끝까지 완주했다는 증거입니다.</p>
<p>  언젠가 개발자가 되어 다시 이 코드를 마주하게 되면, 저는 과거의 나를 응원 할 수 있을거 같습니다.</p>
<p>  <a href="https://github.com/woowacourse-precourse/java-calculator-8/pull/1052">1주차 미션 PR: 문자열 덧셈 계산기</a>
  <a href="https://github.com/woowacourse-precourse/java-racingcar-8/pull/335">2주차 미션 PR: 자동차 경주</a>
  <a href="https://github.com/woowacourse-precourse/java-lotto-8/pull/557">3주차 미션 PR: 로또</a>
  <a href="https://github.com/AnnyeongBirdie/java-lotto-8/tree/refactor/AnnyeongBirdie_service-controller-dto-layer">3-4주차 오픈미션 PR: 로또 리팩토링</a></p>
<blockquote>
<p>소프트웨어 장인정신은 스스로가 선택한 직업에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의, 소프트웨어 개발자로서의 자부심을 의미한다.
  ▶ 소프트웨어 장인 책 중에서 발췌</p>
</blockquote>
<p>저는 취미로 개발 공부를 하다가 커리어 전환을 하기로 결심했습니다. 지원 당시 39세 비전공자인 저의 경력 휴식기를 값진 경험으로 채울 수 있게 해준 우테코 프리코스를 정말 추천합니다. 지식은 부족할지라도, 진심으로 노력하는 누군가에게 이 글이 작은 용기가 되기를 바랍니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[다시 배우기 시작했습니다]]></title>
            <link>https://velog.io/@annyeong_birdie/%EB%8B%A4%EC%8B%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EC%8B%9C%EC%9E%91%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@annyeong_birdie/%EB%8B%A4%EC%8B%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EC%8B%9C%EC%9E%91%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Wed, 25 Feb 2026 08:23:20 GMT</pubDate>
            <description><![CDATA[<p><em>나는 두 번째 커리어를 설계하는 중입니다</em></p>
<p>3월 말, 애플 디벨로퍼 아카데미 파운데이션 프로그램에 합류하게 되었습니다. 오랜 시간 한 분야에서 일해왔지만, 이제는 완전히 다른 영역에서 다시 시작해보려 합니다.</p>
<p>개발을 배우는 일은 생각보다 낯설고, 동시에 묘하게 익숙합니다. 구조를 고민하고, 책임을 나누고, 문제를 정의하는 일은 이전과 크게 다르지 않기 때문입니다. </p>
<p>작년, 우아한테크코스 프리코스를 준비하며 꽤 몰입해서 공부했습니다. 짬짬이 유데미 강의를 듣고, 스택오버플로를 오가며 흥미 위주로 시간을 보내던 나의 기존 방식과는 분명히 달랐습니다. 그때는 블로그를 쓰지 않았습니다. 기록할 여유가 없기도 했고, 무엇보다 “일단 해내는 것”에 더 집중하고 있었던 것 같습니다. 농담 반, 진담 반으로 “40대에는 우아해질 것”이라 말하곤 했고, 어딘가를 동경하고 있었습니다.</p>
<p>1차 합격 후 최종 코딩 테스트에서 아쉽게 떨어졌을 때, 비로소 돌아보게 되었습니다. 프리코스 동안 스터디그룹에서 피드백을 받고, 요구사항에 맞춰 회고를 제출하던 순간들이 사실은 가장 많이 배우던 시간이었다는 것을. 정리하고 글로 다듬는 과정이 곧 성장의 과정이었습니다. 하지만 그 기록을 한곳에 모아두지 않았다는 아쉬움이 오래 남았습니다.</p>
<p>그래서 이번에는 조금 다르게 해보고 싶습니다.</p>
<p>이 블로그에는 iOS 앱 개발과 애플의 CBL을 통해 배우며 겪는 시행착오, 작은 앱을 만들며 고민한 설계, 그리고 파운데이션 프로그램을 준비하는 과정부터 이후의 후기까지 기록할 예정입니다. </p>
<p>포항행 KTX와 숙소를 알아보며, 다시 배우는 사람이 되었다는 사실을 조금씩 실감하고 있습니다 :)</p>
]]></description>
        </item>
    </channel>
</rss>