insong

블로그

iOS 개발, 인디 비즈니스, 제품 만들기에 관한 기록.

2026년 4월 26일
Orleans 더 파보기 — Directory, 글로벌 순서, ValueTask, Timeout
지난 9가지에서 4개 주제만 더 깊게: Grain Directory가 마스터 없이 동작하는 메커니즘, 글로벌 순서를 Orleans만으로 못 푸는 이유, ValueTask가 한 번만 await인 이유, timeout 시 retry+idempotent가 정석인 까닭.
2026년 4월 23일
Orleans 들여다보면서 막혔던 9가지
grain 라우팅과 페일오버, RPC 도중 grain 이동, silo 포트, 순서 보장, ValueTask, CancellationToken, response timeout, IAsyncEnumerable, Grain Extension. 게임서버 감각으로 읽었을 때 이상했던 부분만 추렸다.
2026년 4월 21일
서버가 연결되었다고 RPC를 쏠 수 있는 건 아니다
Coordinator의 연결됨/끊김 상태만으로는 부족하다. Setup 완료 여부를 (ServerIdx, ServerType) Pair 단위로 추적하고, RPC Method에는 방향이 박혀 있어야 한다.
2026년 4월 21일
엔티티가 두 번 보이거나 사라진 것처럼 동작하던 이유
Grid를 멀티스레드로 돌릴 때 Enter/Leave 이벤트가 두 번 나거나 누락되는 문제. 원천을 직렬화하는 방향과 사후 검증으로 보정하는 방향을 비교한다.
2026년 4월 21일
서버가 '지금'을 알려주면 연출은 이미 늦는다
스킬 타격·피격이나 이동 세그먼트를 사건 발생 시점마다 통지하면 네트워크 지연만큼 연출이 어긋난다. 결정적으로 예측 가능한 구간은 타임라인으로 묶어 미리 내려주고, 클라는 로컬 시간에 맞춰 재생한다.
2026년 4월 21일
서버 간 RPC 연결을 수동으로 엮지 않는 법
Service마다 필요한 ServerType Pair를 Attribute로 선언하면 Coordinator가 Session을 자동 구성한다. 선언 누락은 타입과 프로젝트 분리로 잡는다.
2026년 4월 21일
액션 MMO 서버가 Lock을 버린 이유 — Tera의 선택
타겟팅 없는 AoE 전투는 collision 판정을 초당 수십 번 돌린다. Lock을 쓰면 3000명에서 CPU 100%가 된다. Tera는 world를 TLS에 복제하고, creature마다 Lock-Free Executor로 갈아탔다.
2026년 4월 20일
graphify로 코드베이스를 LLM 친화적으로 만들기
AST 기반 지식 그래프로 폴더별 CLAUDE.md를 대체하고, 벡터 DB 없이 호출 관계를 완벽히 따라간다.
2026년 4월 20일
티켓 하나, 메인세션 하나
설계 의도 문서화와 평가 기준 추출을 메인세션 밖으로 빼서, 리뷰 반영까지 한 세션의 context를 지키는 방식.
2026년 4월 20일
한 번에 하나의 task만 머지한다
git worktree와 staging deploy가 병렬 작업을 가능하게 해주지만, merge 원자 단위는 오히려 더 작아져야 한다.
2026년 4월 13일
게임 엔진 안에서 기획데이터를 관리하면 생기는 일
언리얼 엔진을 기획데이터의 원본으로 쓰면 어떤 문제가 생기는지, 그리고 왜 기획데이터는 처음부터 독립이어야 하는지.
2026년 4월 13일
게임 서버 로직에 요청 컨텍스트를 흘려보내는 법
패킷, 운영툴, 자동 이벤트 — 진입점마다 ID를 발급하고 처리 흐름 전체에 전달하면 로깅이 달라진다.
2026년 4월 13일
실시간 랭킹이 스냅샷 랭킹보다 구현이 쉽다
Redis sorted set으로 실시간 랭킹은 그냥 되는데, 스냅샷은 왜 이렇게 복잡한가.
2026년 4월 10일
AI 작업 루프에 피드백을 심는 법
수정 요청이 생길 때마다 스킬이 똑똑해지는 구조를 만드는 아이디어와 그 함정.
2026년 4월 9일
블로그를 시작합니다
첫 번째 글 — 왜 글을 쓰기 시작했는지에 대해.
2026년 3월 15일
2025년, iOS 앱 개발하기
무엇이 달라졌고, 무엇이 그대로인지 — 그리고 SwiftUI가 이제 왜 올바른 기본값인지.