전체 글11 [AI] LLM 출력의 어디까지를 코드가 맡아야 할까? CHALK 서비스의 AI 튜터의 답변은 말풍선보다 한 장짜리 학습 노트에 가깝게 보입니다.맨 위에 띠를 두른 제목이 있고, 풀이 순서는 번호 달린 타임라인으로, 주의할 점이나 팁은 강조 박스로 따로 표시되는등 다양한 디자인 요소들이 존재하고 있어요. 이 화면은 LLM 콜을 두 번 불러서 만들고 있어요. 먼저 쓰는 LLM이 무슨 말을 할지 정하고 제목 / 문단 / 목록만 있는 HTML을 냅니다.그다음 꾸미는 LLM이 그 HTML을 받아 디자인을 입힙니다.어떤 문단을 강조 박스로 만들지, 어떤 목록을 타임라인으로 바꿀지, 어떤 제목에 띠를 두를지를 정합니다. 그런데 LLM이기 때문에 매번 다르게 디자인이 변경됩니다. 어떤 답변에서는 순서를 나타내는 목록이 타임라인이 될 때도 있고 안 될 때도 있고같은 .. 2026. 9. 27. [Python] SSE 연결이 끊겨도 돌던 asyncio 태스크 LLM 튜터의 답변을 SSE로 흘려보내는 서버를 운영하고 있습니다. 어느 날 트레이스 하나가 이렇게 찍혔습니다. 맨 윗줄(L0)이 답변 한 번을 만드는 요청 전체이고, 그 아래(L1)는 그 요청이 부른 LLM 호출들입니다. 같은 이름의 호출이 Start 열을 따라 10초 간격으로 계속 늘어납니다. 요청은 30초도 안 되어 끝났습니다. 그런데 그 요청 하나에 달린 LLM 시간은 한 시간이 넘었습니다. 사용자는 답변을 다 받기 전에 화면을 나갔습니다. 요청은 그때 끊겼는데, 그 요청이 띄운 백그라운드 태스크는 주인을 잃은 채 계속 돌았습니다. 트레이스 하나에 LLM 호출이 수천 건 쌓일 때까지요. 트레이스를 다시 보면 30초짜리 부모 아래에서 자식 호출이 한참 뒤에도 계속 시작되고 있습니다. 부모가 끝난 .. 2026. 9. 7. [WWDC26] @State 매크로 적용 범위 WWDC26에서 @State가 프로퍼티 래퍼에서 매크로로 바뀌었습니다.그러면서 @State에 담긴 클래스가 뷰 생애당 한 번만 초기화됩니다. 그런데 이 개선은 선언을 어떻게 썼느냐에 따라 적용되기도 하고 안 되기도 합니다. 어느 쪽인지 확인하는 방법을 정리했습니다. 기존 코드의 동작이 바뀌는 변경 이번 SwiftUI에는 툴바 제어(visibilityPriority, toolbarMinimizeBehavior), Document API 확장(WritableDocument · ReadableDocument), LazyVGrid 같은 컨테이너의 드래그 재정렬, swipeActionsContainer, AsyncImage의 HTTP 캐싱 같은 변경이 함께 나왔습니다. 이것들은 새 API라 쓸지 말지 고르면 됩니.. 2026. 8. 11. [iOS] 셀 높이를 모르는 채팅 리스트의 스크롤 문제 AI 튜터의 답변이 스트리밍으로 흘러 들어오는 채팅 화면을 만들고 있습니다. SwiftUI List로 시작했다가 UIKit UICollectionView로 옮겼습니다.스트리밍 중에 셀 높이가 계속 바뀌는데 SwiftUI 쪽에서는 스크롤 위치를 붙잡을 방법이 마땅치 않았기 때문입니다. 옮기고 나니 문제가 넷 생겼습니다.과거 대화를 불러오면 화면이 튄다과거 로드가 스스로를 다시 부른다맨 아래로 보냈는데 맨 아래가 아니다답변이 짧으면 타임스탬프가 사라진다 넷 다 원인이 같았습니다. 정석은 리스트를 뒤집는 것입니다 채팅 화면에는 오래된 정석이 있습니다. 컬렉션 뷰를 위아래로 뒤집는 것입니다.collectionView.transform = CGAffineTransform(scaleX: 1, y: -1)cell.t.. 2026. 4. 22. 2025 회고 연말연초를 CES 준비로 보내느라 이제야 2025년을 돌아볼 여유가 생겼어요.1월도 벌써 절반이 지났지만 늦게라도 정리해봅니다. 2025년은 참 많이 옮겨 다닌 해였어요.회사도 옮기고, 사는 곳도 옮기고, 쓰는 언어랑 플랫폼도 계속 바뀌었거든요. 1️⃣ 10개월 만의 출근2️⃣ AI 해커톤3️⃣ 일산에서 평촌으로4️⃣ FIRSTHABIT, 그리고 CES5️⃣ 2025년에 읽은 책6️⃣ 2026년에는 10개월 만의 출근사실 2025년 얘기를 하려면 2024년부터 꺼내야 해요. 2024년 1월 중순, 2년 반 넘게 다닌 회사를 나왔습니다.몸이 많이 지쳐 있었고 이대로 계속 달리기보다는 한 번 쉬어가야겠다고 판단했어요. (사실 더 큰 이유가 있지만 너무 구구절절이라..)계획은 딱 6개월이었습니다. 그렇다고 .. 2026. 1. 17. [iOS] 멀티 업로드로 비교해본 동시성 도구 세 가지 이전 회사에서 3년 가까이 육아 기록 앱의 미디어 업로드를 맡았습니다.그 사이 Swift의 동시성 도구가 두 번 바뀌었고 코드도 그때마다 다시 썼습니다. 일하면서 가장 어려웠던 멀티 업로드 기능의 세 방식을 나란히 놓고 정리해봤습니다. 요구 사항은 "사진과 영상 여러 개를 정해진 수만큼 병렬로 올린다"였습니다. 그리고 "올린다"는 한 가지 일이 아니었습니다.항목마다 압축을 먼저 하고 전송하고 압축 강도도 등급에 따라 달랐습니다. 그러니까 슬롯 하나가 잡고 있는 시간은 CPU를 쓰는 구간과 네트워크를 기다리는 구간이 붙어 있는 셈입니다. 10분짜리 영상 다섯 개를 동시에 압축하면 메모리가 크게 오릅니다. 병렬을 다섯으로 묶어둔 이유의 절반은 메모리였습니다. 세마포어와 DispatchGroup으로 시작했습.. 2024. 2. 19. 이전 1 2 다음