전체 글28 TCA QnA Q. TCA(The Composable Architecture)란 무엇인가요?TCA는 Swift와 Apple 플랫폼을 대상으로 설계된 오픈소스 아키텍처 라이브러리입니다.단방향 데이터 흐름과 선언형 프로그래밍 패러다임을 기반으로 하며,애플리케이션의 상태, 로직, 사이드 이펙트를명확하게 분리하고 예측 가능하게 관리할 수 있도록 설계되었습니다.내부적으로는 Combine을 기반으로 구현되어 있으며,SwiftUI의 선언형 UI 패러다임과 잘 어울리는 구조를 가지고 있습니다.Q. TCA를 사용하는 이유는 무엇인가요?TCA를 사용하는 가장 큰 이유는 복잡한 상태와 비즈니스 로직을 예측 가능하게 관리하기 위함입니다.단방향 데이터 흐름을 강제함으로써상태 변경의 흐름이 명확해지고사이드 이펙트가 한 곳에서 통제되며 (모든 .. 2026. 6. 10. Swift Concurrency QnA Q. Swift Concurrency란 무엇인가요?Swift Concurrency는 비동기·동시성 코드를 안전하고 간결하게 작성하기 위한 Swift의 공식 동시성 모델입니다.기존의 GCD, OperationQueue 기반 방식의 한계를 보완하기 위해 도입되었으며,언어 차원에서비동기 코드의 가독성을 높이고데이터 레이스를 방지하며안정적인 동시성 처리를 가능하게 합니다.Q. Swift Concurrency가 등장하게 된 배경은 무엇인가요?기존 비동기 처리 방식에는 다음과 같은 문제가 있었습니다.completion handler 중첩으로 인한 가독성 저하 (콜백 지옥)실행 스레드 추적의 어려움공유 데이터 접근 시 Race Condition 발생 가능성Swift Concurrency는 이러한 문제를 라이브러리 차.. 2026. 6. 10. TCA란? TCA (The Composable Architecture)란?1️⃣ TCA는 오픈소스 아키텍처 라이브러리입니다TCA(The Composable Architecture)는 오픈소스 아키텍처 라이브러리입니다.애플 생태계를 대상으로 한 앱 개발을 위해 설계되었습니다. 내부적으로는 Combine을 기반으로 구현되어 있으며,단방향 데이터 흐름과 선언형 프로그래밍 패러다임을 중심으로 동작합니다.2️⃣ TCA는 SwiftUI 환경에서 특히 잘 어울리는 아키텍처입니다SwiftUI는 선언형 UITCA는 선언형 상태 관리 + 단방향 데이터 흐름이라는 공통된 철학을 가지고 있기 때문입니다. 물론 TCA는 UIKit 환경에서도 충분히 사용 가능하지만,상태 기반으로 UI를 그리는 SwiftUI 특성상 TCA의 구조가 더욱 자.. 2026. 6. 10. Xcode 빌드 환경 구성 한 번에 정리하기 (Scheme, Configuration, xcconfig...) Code:L 프로젝트를 진행하면서, 개발 서버와 운영 서버를 나눠서 관리하게 됐어요.서버 환경이 나뉘다 보니 API 주소뿐만 아니라 Firebase 설정 파일도 환경마다 따로 관리해야 했어요. 처음 접했을 때는 Scheme, Configuration, xcconfig가 각각 뭘 하는 건지 잘 구분이 안 됐어요.개념들이 서로 얽혀 있어서 하나를 찾아보면 또 모르는 용어가 나오고, 결국 직접 적용해보면서 하나씩 정리하게 됐어요. 이 글에서는 Code:L에서 실제로 사용한 구성을 바탕으로, Scheme · Configuration · xcconfig로 빌드 환경을 구성하는 방법과 환경마다 달라지는 리소스(Firebase 설정 파일, 앱 아이콘 등)를 관리하는 방법까지 하나씩 소개해보려고 해요. 전체 흐름 먼저.. 2026. 4. 27. 하네스 엔지니어링 🐴 Claude Code로 작업하다 보면 이런 경험이 생깁니다.분명히 print() 쓰지 말라고 했는데 어느 순간 다시 쓰고 있습니다.세션이 길어지면 앞에서 정한 규칙을 슬그머니 잊어버립니다.같은 말을 반복하게 됩니다.이건 모델이 멍청해서가 아닙니다.구조가 없어서입니다. AI 활용의 발전 흐름AI를 활용하는 방식은 점점 "프롬프트 잘 쓰기"에서 "환경 설계"로 이동하고 있습니다. 프롬프트 엔지니어링: AI에게 프롬프트를 잘 작성하는 기술→ 컨텍스트 엔지니어링: 프로젝트 상황을 AI에게 알려주기→ MCP + 스킬: 도구 연결 + AI가 쓸 수 있는 범위 정하기→ 하네스 엔지니어링: AI가 일하는 전체 환경을 설계 도구를 계속 얹어주는 게 아니라, 정확하게 동작할 수밖에 없는 환경 자체를 설계하는 것입니다. 프.. 2026. 4. 24. Claude Code 개발 속도만큼 품질도 챙기는 방법 (Plan Mode) Claude Code를 활용하면서 개발 속도는 확실히 빨라졌습니다.코드 생성, 리팩토링 같은 반복 작업을 넘어서 구조 설계까지 AI를 활용하는 것이 자연스러워졌습니다. 하지만 속도가 빨라진 만큼, 결과물의 품질이 항상 일정하게 유지되지는 않습니다.특히 아무 준비 없이 바로 구현을 요청했을 때, 다음과 같은 문제가 자주 발생합니다.현재 코드 컨텍스트를 충분히 반영하지 못한 구조 생성레이어 책임이 섞인 코드 (ViewModel에 네트워크 로직 포함 등)기존 아키텍처(MVVM, Clean Architecture)와 맞지 않는 설계불필요하게 긴 코드 생성으로 인한 토큰 낭비이전 대화 맥락이 오염되면서 점점 일관성이 깨지는 문제이런 상태에서 수정을 반복하게 되면, 단순 구현보다 오히려 더 많은 시간과 토큰을 소비.. 2026. 4. 23. Claude Code 반복작업으로 부터 토큰 낭비를 없애는 가장 확실한 방법 (CLAUDE.md) 새 세션을 시작할 때마다 이런 상황이 반복됩니다.이 프로젝트는 SwiftUI + MVVM + Clean Architecture 기반이고,비동기는 async/await 써줘. 로그는 OSLog 써줘.외부 라이브러리는 추가하기 전에 먼저 물어봐.Claude Code는 대화 단위로 동작합니다.세션이 바뀌면 이전 맥락은 전부 사라집니다. 매번 같은 설명을 반복하는 것은 시간 낭비이자 토큰 낭비입니다.이 문제를 해결하는 것이 CLAUDE.md 파일입니다. CLAUDE.md란프로젝트 루트에 두는 마크다운 파일입니다.Claude Code는 실행될 때 이 파일을 자동으로 컨텍스트에 주입합니다.세션이 바뀌어도, 컨텍스트를 초기화해도CLAUDE.md는 항상 먼저 읽힙니다.처음 만나는 Claude가 프로젝트를 이미 알고 있.. 2026. 4. 22. Claude Code가 느려지는 이유와 컨텍스트 관리 전략 Claude Code를 사용하다 보면 세션(대화)이 길어질수록 응답이 느려지거나 맥락을 잃어버리는 경험을 하게 됩니다.이 문제의 근본 원인은 컨텍스트 윈도우에 있습니다.이번 포스팅에서는 컨텍스트 윈도우의 개념과 Claude Code에서 제공하는 관리 명령어, 그리고 auto-compact 설정의 트레이드오프까지 정리합니다. 컨텍스트 윈도우란?컨텍스트 윈도우는 AI가 하나의 세션 내에서 동시에 기억하고 처리할 수 있는 토큰의 총량입니다.대화 기록, 업로드된 파일, 코드 등 세션에서 주고받은 모든 데이터가 이 공간을 소비합니다.예를들어, Claude 3.5 모델(Sonnet, Opus 등)은 200K(약 20만) 토큰의 컨텍스트 윈도우를 제공합니다.이 공간이 가득 차면 AI는 이전 내용을 잊기 시작하거나, .. 2026. 4. 21. 앱이 꺼져 있을때 채팅 알림은 어떻게 올까 (APNs, FCM) 코드엘 iOS 프로젝트에서 채팅 기능을 구현하다 보면 자연스럽게 이런 질문을 만나게 돼요."앱이 켜져 있을 때는 WebSocket으로 실시간 메시지를 받을 수 있는데, 앱이 꺼져 있을 때는 채팅 알림이 어떻게 오는 걸까?" 앱이 실행 중일 때의 실시간 수신은 비교적 이해하기 쉬워요.서버와 WebSocket 연결이 살아 있으면 새 메시지를 바로 받을 수 있으니까요.그런데 앱이 백그라운드에 있거나 완전히 종료된 상태에서도 알림이 온다는 건, 분명 다른 경로가 있다는 뜻이에요. 코드엘은 이 문제를 APNs와 Firebase Messaging(FCM)을 함께 사용하는 구조로 해결하고 있었어요.이번 글에서는 iOS 푸시 알림이 어떤 흐름으로 동작하는지, 왜 코드엘이 FCM을 함께 사용했는지, 그리고 실제로 토큰 .. 2026. 4. 20. WebSocket이 무엇이고, 코드엘에서는 어떻게 채팅을 구현했을까 코드엘 프로젝트를 진행하면서 사용자 간 실시간 소통이 필요한 기능이 있었고, 자연스럽게 채팅 기능을 구현하게 되었어요.처음 채팅 기능을 생각했을 때 가장 먼저 든 질문은 이것이었어요.채팅방 목록 조회이전 대화 내역 조회읽음 처리새 메시지 수신이 기능들을 전부 같은 방식으로 처리해야 할까?결론부터 말하면 코드엘은 이 역할을 둘로 나눠서 구현하고 있었어요.초기 조회와 상태 동기화는 HTTP실시간 메시지 수신은 WebSocket + STOMP 이번 글에서는WebSocket이 무엇인지HTTP와 무엇이 다른지왜 채팅에는 WebSocket이 필요한지코드엘 iOS 코드에서는 이를 어떻게 구성했는지흐름 중심으로 정리해보려고 해요. WebSocket이란 무엇일까WebSocket은 클라이언트와 서버가 한 번 연결을 맺은 .. 2026. 4. 20. 이전 1 2 3 다음