"이미 하네스를 자동으로 만들어주는 플러그인이 있는데, 왜 직접 만들어?" 답은 간단하다. 원리를 이해하고 싶었고, 나에게 맞는 것을 만들고 싶었다. Harness 플러그인은 훌륭한 도구다."하네스 구성해줘"라고 말하면 도메인을 분석하고, 아키텍처 패턴을 선택하고, 에이전트와 스킬을 자동으로 생성해준다. 하지만 나는 그 과정을 블랙박스로 넘기고 싶지 않았다.프레임워크를 쓰기 전에 프레임워크가 해결하는 문제를 직접 겪어봐야 한다는 말이 있다. UIKit을 이해하지 못한 채 SwiftUI를 쓰면, 문제가 생겼을 때 어디를 봐야 하는지 모른다. 하네스도 마찬가지다. CLAUDE.md에 규칙을 적으면 AI가 왜 그 규칙을 따르는지, 에이전트를 분리하면 어떤 이점이 생기고 어떤 트레이드오프가 있는지, 스킬의 워크..
Claude Code를 쓰다 보면 한 가지 불편함을 느끼게 된다. 분명 똑똑한 도구인데, 매 대화마다 같은 맥락을 반복 설명해야 한다는 것이다."나는 iOS 개발자고, 이 프로젝트는 UIKit 기반이고, 아키텍처는 이렇고, 코드 스타일은 저렇고..." 매번 이걸 말해줘야 Claude가 프로젝트에 맞는 답을 준다. 안 그러면? 일반적인 베스트 프랙티스를 그대로 던져주거나, 내 프로젝트 컨텍스트와 동떨어진 제안을 한다. 코드를 통째로 재작성하거나, 기존 설계를 무시한 "더 좋은" 구조를 권하기도 한다. 이건 Claude의 문제가 아니다. 구조의 부재가 문제다.AI 에이전트에게 "어떻게 일해야 하는지"를 체계적으로 정의해주지 않으면, 매번 다른 방식으로 작동할 수밖에 없다.이 문제를 해결하기 위해 AI 에이전..
C++로 백준 1002번 터렛 문제를 풀면서 기하학 개념 없이도 접근할 수 있는 방법을 정리해봤다.문제 이해이 문제를 처음 봤을 때 지문이 어려워서 이해가 잘 안 됐다.핵심만 정리하면 이렇다.두 사람(조규현, 백승환)이 각각 자기 위치에서 적까지의 거리를 알고 있다. 조규현은 좌표 (x1, y1)에 있고 적까지 거리가 r1, 백승환은 좌표 (x2, y2)에 있고 적까지 거리가 r2이다.이걸 기하학적으로 생각하면 각 사람을 중심으로 반지름만큼의 원을 그릴 수 있다. 적은 그 원 둘레 어딘가에 있는 것이다.결국 이 문제의 본질은 두 원의 교점이 몇 개인지 구하는 것이다.쉬운 비유기하학을 모르더라도 이렇게 생각하면 된다.운동장에 두 사람이 서 있다. 각자 줄을 하나씩 들고 있는데, 줄 끝에 적이 있다. 첫 번..
C++로 알고리즘 문제를 풀다 보면 자연스럽게 이런 코드를 작성하게 된다. cout 줄바꿈을 할 때 endl을 사용하는 것은 매우 흔한 습관이다.그런데 코딩테스트 관련 글을 보다 보면 이런 이야기를 자주 접하게 된다."endl 대신 \n을 사용하라." 둘 다 줄바꿈을 하는데 왜 굳이 \n을 써야 할까?정말 성능 차이가 있는 걸까?궁금해서 직접 실험을 통해 확인해봤다.endl과 "\n"의 차이표면적으로 보면 두 방식은 같은 역할을 한다.cout 둘 다 출력 후 줄바꿈을 한다.하지만 내부 동작에는 중요한 차이가 있다.동작 방식 endl줄바꿈 + 출력 버퍼 flush"\n"줄바꿈만 수행여기서 핵심은 flush이다.출력 버퍼와 flushcout으로 출력한다고 해서 데이터가 바로 화면에 나타나는 것은 아니다...
문제 상황Rx 바인딩도 정상적으로 되어 있고, 버튼 액션도 설정했지만, 버튼을 눌러도 로그가 찍히지 않고 이미지도 변경되지 않음.특히 setChecked(_: Bool)이나 @objc 메서드들이 호출되지 않는 상태.원인 분석해당 체크박스가 포함된 InfoRowView는 WorkingConditionsContainerViewController의 view에 존재함.하지만 최종 부모 컨트롤러에서 해당 VC를 자식 뷰컨트롤러로 등록하지 않고 view만 addSubview() 하여 붙였음.이로 인해 viewDidLoad()가 호출되지 않았고, 내부에서 설정된 Rx 바인딩 및 addTarget 등의 액션 로직이 실행되지 않음.해결 방법WorkingConditionsContainerViewController를 자식 ..