Figma MCP 설치 및 적용 가이드Figma MCP란?피그마 디자인 파일을 Claude Code가 직접 읽어서 코드를 생성할 수 있게 해주는 MCP 서버다. Figma 공식에서 제공한다.스크린샷 보고 추측하는 게 아니라 실제 spacing, 색상, 폰트, Auto Layout 규칙을 그대로 읽어온다.연동 전 vs 연동 후연동 전 — 스크린샷 보고 만들어줘 → spacing, 색상, 폰트 전부 눈대중연동 후 — 피그마 링크 주면 → padding 16px, #3B82F6, Pretendard 16pt 등 실제 값 기반으로 코드 생성읽어오는 것들spacing/padding/margin, 색상 코드, 폰트/사이즈/weight, 컴포넌트 구조, Auto Layout 규칙, 디자인 토큰설치터미널에서 한 줄이면..
Context7 설치 및 적용 가이드Context7이란LLM이 외부 라이브러리의 최신 공식 문서를 실시간으로 참조할 수 있게 해주는 MCP 서버다. Upstash에서 만들었다.Claude Code가 코드를 짤 때 학습 데이터 기준의 옛날 API를 쓰는 경우가 있는데, Context7을 붙이면 최신 문서를 직접 가져와서 참조한다.사전 준비Node.js가 설치되어 있어야 한다. bashwhich npx # 설치 확인없으면 설치한다. bashbrew install node설치Claude Code 설정 파일에 Context7 MCP 서버를 등록한다. bashvi ~/.claude/settings.json json{ "mcpServers": { "context7": { "command":..
비싼 Calude Max 결제한 김에 아주 그냥 뽕을 뽑아보려고 Agent말고 Calude Code도 사용해보기로 했다.Claude Code는 유료 플랜(Pro, Max, Teams, Enterprise) 이 있어야 사용 가능하다.무료 플랜은 접근이 안 된다고 한다. 설치macOS 기준으로 Homebrew를 사용하는 게 가장 간단하다.(Homebrew가 없다면 먼저 설치)brew install claude-code 로그인프로젝트 폴더로 이동 후 claude를 실행하면 브라우저가 열리면서 계정 로그인 화면이 나오고, Claude 계정으로 로그인하면 바로 사용 가능하다cd your-ios-projectclaude 모델 선택처음 실행하면 모델과 effort 레벨을 설정하는 화면이 나온다. 언제든 /model ..
솔직히 말하면 얼마 전까지만 해도 AI 활용이라고 하면 그냥 GPT 창 열고 파일 통째로 복붙해서 "이거 수정해줘" 하는 수준이었다.결과물이 나오면 그냥 쓰고, 이상하면 다시 붙여넣고. 딱히 시스템이라고 부를 것도 없었다.그러다가 Xcode 내에 Claude 에이전트를 도입하고 나서 나름 정형화된..? 워크플로우가 생겨서 이를 정리해보려 한다. 처음에는 Xcode 내 Claude한테 뭔가 시킬 때마다 이런 설명을 해야 했다."우리 프로젝트는 Clean Architecture 쓰고, ViewModel에 UIKit 넣으면 안 되고, Mock은 여기 폴더에 두고, 네이밍은 MockXXX 방식으로"매번 이걸 설명하기가 귀찮아서 먼저 CLAUDE.md 를 만들었다.해당 파일은 Claude Code가 프로젝트를 열..
Xcode에서 claude를 내장하고, 추가로 PR을 날릴때도 AI를 활용해보면 좋을 것 같아 PR에 AI리뷰를 도입해보기로 했다.gitLab에는 토큰 권한이 없어서 github에 해당 방식을 구현해보기로 했다 일단 이루고자 하는 목적은 다음과 같다.• PR에 메모리 누수, retain cycle 같은 이슈를 자동으로 잡아주는 리뷰어가 있으면 좋겠다• AI API를 활용해 Swift 코드 변경사항을 자동 분석하는 GitHub Actions 워크플로우 구축 최종 아키텍처• 트리거: PR 생성/업데이트 시 .swift 파일 변경 감지• diff + 변경 파일 전체 소스 수집 → Claude API 호출 → PR 리뷰 코멘트 자동 게시• 최종 yml 전문 포함 구축 과정에서 만난 문제들항목발생 문제원인 분석해..
ASAA파일앱과 웹사이트를 연결해주는 공식 인증서 같은 파일예시) https://example.com/.well-known/apple-app-site-association iOS는 보안이 엄격해서 진짜 특정 도메인이 특정 앱과 연결된게 맞는지 검증이 필요그래서앱 쪽에서 → "나는 example.com이랑 연결될 거야"라고 선언서버 쪽에서 → "이 앱이 우리 도메인이랑 연결되는 거 맞아"라고 파일로 증명ASAA 파일 예시{ "applinks": { "details": [ { "appIDs": ["[TeamID].[Bundle ID]"], "components": [ { "/": "/account*", // account가 붙어있..
해당 개념들을 원문으로 이해하기에는 어려움이 있어내 식대로 정리를 해보는 시간을 가졌다.프로세스란?하나의 가게이 가게는 다른 가게와 완전히 분리된 공간을 가짐가게 안에서만 셰프들이 자유롭게 이동하고 일할 수 있음다른 가게의 주방이나 재료에는 접근 불가쓰레드란?가게에 있는 셰프들실제로 요리를 하는 주체여러 셰프가 같은 주방(메모리) 을 공유함메인 쓰레드란?가게에 하나만 있는 수석 셰프손님 응대, 플레이팅(UI)는 반드시 이 셰프가 담당한 명뿐이기 때문에 오래 붙잡으면 가게가 멈춘 것처럼 보임쓰레드 풀이란?일을 배정받기 위해 대기 중인 셰프들이미 고용되어 대기 중인 셰프 묶음주문이 들어올 때마다 새 셰프를 뽑지 않고→ 대기 중인 셰프에게 일을 맡김Task란?요리 주문서“이 요리를 해달라”는 작업 요청누가 요..
레거시 코드에서의 의문: 왜 VC에 비어있는 catch가 있었을까?기존 레거시 코드를 살펴보던 중, 한 가지 이상한 패턴을 발견했다.ViewController에서 거의 모든 API 호출이 아래와 같은 형태로 작성되어 있었다.Task { do { try await viewModel.someAPICall() // 이후 로직 } catch { // 비어 있음 }}catch 블록이 존재하긴 하지만, 아무 처리도 하지 않는 형태였다.이유를 물어보니 이런 설명을 들었다.“async 함수가 실패하더라도, 가끔 밑에 로직이 실행되는 이슈가 있어서안전하게 catch를 붙여둔 것이다.”설명은 들었지만, 솔직히 말해서 뭔가 석연치 않았다.async/await에서 실패하면..