Number 7Oct 2026

회사에서 나는 더 이상 Figma 프레임을 넘기지 않는다. Copilot으로 코드베이스를 직접 고치고, feature 브랜치를 push하고, develop으로 PR을 올린다. QA는 머지된 뒤 SIT에서 테스트한다. 그 과정을 브랜치 이름과 명령어, 아직도 꼬이는 부분까지 단계별로 적었다. 2026년 10월 기준이다.

Devon Kim 핸드오프는 PR이다

핸드오프는 PR이다


조건

  • Figma는 아이데이션용, 기존 컴포넌트는 MCP로 불러온다
  • 내가 만드는 브랜치는 develop에서 딴 feature/*뿐이다
  • develop으로 PR, merge commit, 승인 2명
  • QA는 SIT에서 develop을, UAT는 release/*를 테스트한다
예전 — 파일이 나간다Figma모든 상태 다듬기핸드오프redline · 티켓엔지니어링파일 보고 재구현SIT빌드 vs FigmaUAT릴리스픽셀 버그 → 다음 회차지금 — PR이 나간다Figma아이데이션 · MCPfeature/*Copilot agent modePR → develop스크린샷 · 리뷰SITQA가 develop 테스트release/* → UATmain프로덕션나CopilotQA / 리뷰개발자핸드오프가 빨라진 게 아니라, PR 안으로 들어갔다.
그림 1화면 하나가 아이디어에서 출시까지 가는 길, 전과 후

왜 이 글을 쓰나

오랫동안 내 일은 Figma 파일에서 끝났다. redline을 그리고, Dev Mode 링크를 붙이고, 티켓을 쓰고 나면 몇 주 뒤에 비슷하지만 조금씩 다른 빌드가 돌아왔다. 지금은 머지된 PR에서 끝난다. VS Code에서 GitHub Copilot으로 코드베이스를 고치고, 브랜치를 push하고, PR도 직접 올린다. QA는 변경이 develop에 들어간 뒤 SIT에서 만난다.

이 글의 첫 버전은 업계 조사에 기대다 보니 Figma가 실제보다 훨씬 중요해 보였다. 이번 버전은 내가 실제로 일하는 방식이다. 내가 만지는 브랜치, 치는 명령어, QA가 변경을 받아 가는 방법, 개발자와 같은 코드에서 부딪혔을 때 생기는 일. 업계 맥락은 맨 끝에 짧게 남겼다. 우리 팀만 이렇게 일하는 게 아니라는 걸 아는 것도 도움이 되기 때문이다.

전과 후

화면 하나가 아이디어에서 출시까지 가는 길이다.

예전

  1. 01Figma — 탐색하고, 모든 상태의 최종 프레임을 다듬는다
  2. 02핸드오프 — redline, 스펙 메모, Dev Mode 링크, 티켓
  3. 03엔지니어링 — 개발자가 파일을 보고 화면을 다시 만든다
  4. 04SIT — QA가 빌드를 Figma와 비교하고 픽셀 버그를 올린다
  5. 05왕복 — 개발자가 고치고, 내가 다시 확인하고, 반복한다

지금

  1. 01Figma — 아이데이션만 한다. 필요할 때 Figma MCP로 기존의 디테일한 컴포넌트를 불러온다
  2. 02feature/* — develop에서 브랜치를 따고, Copilot agent mode로 실제 컴포넌트와 토큰을 써서 고친다
  3. 03PR — develop으로 올린다. 전후 스크린샷을 붙이고, Copilot 리뷰를 먼저 받은 뒤 두 사람이 승인한다
  4. 04develop → SIT — 머지되면 빌드가 SIT에 올라가고, QA는 배포 알림으로 알게 된다
  5. 05release/* → UAT → main — 개발자가 릴리스 브랜치를 따고 main에 머지한다

사라진 건 파일을 코드로 옮기기 위해서만 있던 것들이다. redline, 스펙 메모, "빌드가 시안과 다르다"는 티켓, 회차 사이의 기다림. Figma에서 모든 상태를 다듬던 일도 없어졌다. 이제 상태는 코드에서 한 번만 다듬는다.

사라짐 — 옮기려고 있던 것redlines.png스펙 메모Dev Mode link"빌드 ≠ 시안" 티켓Figma에서 모든 상태 다듬기새로 생김 — 작고 구체적develop으로 가는 PR전후 스크린샷Copilot 리뷰 코멘트QA에게 가는 배포 알림SIT 버그용 수정 브랜치나CopilotQA / 리뷰왼쪽은 모두 같은 화면을 두 번 만들었기 때문에 있던 것이다.
그림 2

브랜치와 환경

우리는 Git Flow 구조를 쓴다. 유행하는 방식은 아니다. git-flow를 만든 Vincent Driessen도 2020년에 지속 배포를 하는 팀이라면 더 단순한 방식을 쓰라고 했고, Atlassian은 지금 이걸 legacy 워크플로라고 부른다. 그래도 SIT와 UAT 단계가 있는 제품에는 잘 맞는다. 오래 유지되는 브랜치 하나가 환경 하나에 대응하기 때문이다.

브랜치와 환경

  1. 01main — 프로덕션. 개발자가 릴리스 브랜치에서 머지한다
  2. 02release/* — 릴리스를 위해 develop에서 딴다. UAT가 이걸 테스트한다
  3. 03develop — 끝난 작업이 모이는 곳. SIT가 이걸 돌린다
  4. 04feature/* — 내 브랜치. develop에서 따서 짧게 쓰고 develop으로 다시 머지한다

내가 만드는 브랜치는 feature/*뿐이다. 릴리스 브랜치와 main 머지는 개발자 몫이다. 머지는 merge commit으로 해서, 히스토리에 브랜치가 하나하나 남는다.

QA가 SIT 상황을 아는 방법

푸터에 빌드 해시를 띄우지는 않는다. 배포 알림과 팀 채널로 안다. develop에 무언가 머지되어 배포되면 QA는 거기서 소식을 듣는다. 테스트 중에 나온 수정은 별도 브랜치로 따로 올린다. Git Flow에서는 릴리스 브랜치가 생긴 뒤 그 릴리스의 버그는 릴리스 브랜치에서 고치고 develop에도 다시 반영한다. 그 전이라면 다른 변경처럼 develop으로 들어간다. 어느 쪽으로 갈지는 릴리스가 어디까지 왔느냐에 달렸다.

main개발자PRODrelease/*개발자UATdevelop공용SITfeature/*나로컬git switch -cPR · merge commitUAT 수정릴리스 브랜치 생성main에 머지develop에도 반영나QA / 리뷰개발자오래 유지되는 브랜치마다 환경이 하나씩 붙는다. 내가 만드는 건 feature/*뿐이다.
그림 3

화면 하나, 브랜치에서 머지까지

평소 변경 하나가 어떻게 흘러가는지, 실제로 치는 명령어와 함께 적었다. 수정은 대부분 Copilot이 하지만, Git은 여전히 내 몫이다.

  1. 01최신 develop에서 시작 — git switch develop, git pull
  2. 02브랜치 — git switch -c feature/payout-history-filter
  3. 03만들기 — VS Code의 Copilot agent mode가 여러 파일에 걸쳐 고친다. 나는 로컬에서 정상 흐름만이 아니라 모든 상태를 직접 띄워 본다
  4. 04커밋 — 작게, 알아보기 쉬운 메시지로. GitHub Desktop과 VS Code에서 Copilot이 초안을 써 준다
  5. 05Push — git push -u origin feature/payout-history-filter
  6. 06PR 올리기 — base는 develop. 건드린 상태마다 전후 스크린샷을 붙이고 티켓을 연결한다
  7. 07리뷰 — Copilot 코드 리뷰 코멘트가 먼저 달린다. 이건 승인으로 치지 않는다. 그다음 두 사람이 승인하면 merge commit으로 머지된다

명령어보다 중요한 습관이 두 가지 있다. 리뷰어가 충돌을 발견하기 전에, PR을 올리기 전에 develop과 맞춰 둔다. 그리고 PR은 화면 하나, 수정 하나로 작게 유지한다. 그래야 리뷰어가 실제로 읽을 수 있다.

develop과 맞출 때는 develop을 내 브랜치에 merge한다(git merge origin/develop). rebase는 히스토리를 다시 쓰고 force push가 필요해서, 아무도 pull하지 않은 내 브랜치에서만 쓴다. 알아 두면 좋은 함정이 하나 있다. rebase 중에는 충돌 편집기의 "ours"와 "theirs"가 생각과 반대로 표시된다.

변경 하나, 브랜치에서 머지까지최신 developgit pull1나브랜치feature/*2나빌드agent mode3Copilot커밋작게, 알기 쉽게4나Pushpush -u5나PR 올리기base: develop6나리뷰Copilot → 승인 2명7리뷰어나CopilotQA / 리뷰PR 올리기 전에: git merge origin/developrebase는 아무도 pull하지 않은 브랜치에서만. 히스토리를 다시 쓰고 force push가 필요하다.수정은 대부분 Copilot이 하고, Git은 여전히 내 몫이다.
그림 4

repo가 Copilot에게 알려 주는 것, 그리고 Figma의 작은 역할

repo가 알려 주지 않으면 Copilot은 우리 디자인 시스템을 모른다. 그래서 .github/copilot-instructions.md가 있다. 특정 폴더에만 적용되는 .instructions.md 파일도 둘 수 있다. agent mode는 요청마다 이 파일들을 읽고, 2025년 8월부터는 Copilot 코드 리뷰도 같은 파일을 읽는다. 변경을 이끄는 규칙이 곧 그 변경을 리뷰하는 기준이 된다.

UI 작업에서 가장 중요한 규칙은 지루할 만큼 구체적이다. 새로 만들기 전에 기존 컴포넌트를 쓴다. hex 값이나 픽셀 간격 대신 토큰을 쓴다. 로딩, 빈 화면, 에러 상태를 빠뜨리지 않는다. 공유 비즈니스 로직을 건드리면 PR에 분명히 적는다. 다른 브랜치에서 누군가 이미 고치고 있는 코드라면 손대기 전에 알려 준다.

Figma의 역할은 작아졌다

아이데이션, 그리고 가끔 기존의 디테일한 컴포넌트를 Figma MCP로 불러오는 일이다. 그러면 Copilot이 추측하지 않고 실제 스펙을 보고 만든다. 설정은 VS Code의 MCP 설정에 Figma 원격 서버 항목 하나를 추가하면 끝이다. 2026년 10월 기준으로 Figma는 이 서버를 아직 beta로 두고 있고, 엔터프라이즈 조직이라면 관리자가 먼저 Copilot에서 MCP 서버를 허용해 줘야 한다.

repo 안.github/copilot-instructions.md.github/instructions/*.instructions.md컴포넌트 먼저 · hex 말고 토큰 · 모든 상태필요할 때Figma MCP기존의 디테일한 컴포넌트 불러오기Agent mode변경을 만든다Copilot 코드 리뷰PR을 검토한다CopilotQA / 리뷰PR같은 규칙,양쪽 모두2025년 8월부터 코드 리뷰도 copilot-instructions.md를 읽는다. 리뷰 코멘트는 승인이 아니다.
그림 5

개발자와 같은 로직을 건드릴 때

아무도 잘 적지 않지만, 실제로 꼬이는 건 이 부분이다.

실제 사례

페이먼트 작업을 할 때, 결제 내역 페이지와 지급 승인 화면이 같은 로직을 공유하고 있었다. 나는 한쪽 화면의 문제를 고치고 있었고, 개발자는 다른 쪽 화면 때문에 같은 로직을 고치고 있었다. 각자의 수정은 그 자체로는 문제가 없었다. 그런데 둘이 합쳐지자 부딪혔다. 공유 로직이라서, 한 화면을 고치면 다른 화면의 동작이 조용히 바뀔 수 있었다.

충돌에는 세 종류가 있고, 그중 눈에 띄는 건 하나뿐이다.

  1. 01텍스트 충돌 — 두 사람이 같은 줄을 고친다. Git이 멈추고 물어본다
  2. 02의미 충돌 — Git은 문제없이 합치지만 결과가 깨진다. Martin Fowler는 각각은 맞는데 합치면 틀리는 두 변경을 예로 든다
  3. 03영역 충돌 — 디자이너의 UI 변경과 개발자의 로직 변경이 같은 공유 코드에 동시에 들어간다

페이먼트 사례는 세 번째로 시작했고, 자칫하면 두 번째 상태로 출시될 뻔했다.

내가 실제로 하는 방법

충돌을 푸는 게 아니라 미리 막는다. instructions 파일 중 하나에, 내가 고치려는 코드가 다른 브랜치에서 이미 작업 중이면 Copilot 에이전트가 코드를 쓰기 전에 먼저 경고하라고 적어 두었다. 경고가 뜨면 그 부분을 누가 맡을지 정한다. 개발자가 맡으면 나는 그 부분에 손대지 않는다. 개발자가 작업을 끝내고 develop에 머지하면, 내가 pull을 받고 나서 그 부분과 연결된 작업을 시작한다. 두 변경이 같은 시간에 겹치지 않으니 충돌 편집기를 열 일도 없다.

우리는 CODEOWNERS를 쓰지 않아서, 이런 경계를 repo가 강제하지는 않는다. 그 역할은 경고와 그 뒤에 나누는 짧은 대화가 한다. 그리고 모든 PR은 머지 전에 여전히 두 명의 승인이 필요하다.

페이먼트 작업결제 내역화면지급 승인화면공유 결제 로직두 화면이 함께 쓴다feature/* · 나개발자 브랜치각자는 문제없지만 · 합치면 부딪힌다내가 실제로 하는 방법Copilot이 경고다른 브랜치에서 작업 중담당 정하기그 부분은 한 사람만손대지 않기상대가 끝내고 머지pull 후 이어서 작업연결된 작업은 그다음에나CopilotQA / 리뷰개발자instructions 파일이 에이전트에게 먼저 경고하게 한다. 두 변경은 같은 시간에 겹치지 않는다.
그림 6

QA는 SIT에서 만난다

예전에 QA는 빌드를 Figma와 비교하는 데 시간을 많이 썼다. 간격이 몇 픽셀 어긋났다, 회색이 다르다, hover 상태가 빠졌다. 이런 버그는 같은 화면을 두 번 만들었기 때문에 생겼다. 한 번은 Figma에서, 한 번은 코드로. 디자이너가 UI를 직접 쓰면 이 종류의 버그는 대부분 사라진다.

그래서 QA의 프로세스는 짧아졌고, 범위는 넓어졌다. 변경이 develop에 들어가면 SIT에서 받아, 나와 에이전트가 약한 부분에 시간을 쓴다. 기능 엣지 케이스, SIT의 실제 데이터와 연동, 같은 로직을 쓰는 다른 화면의 회귀, 접근성, 기기별 동작. 위의 페이먼트 사례가 바로 지금의 QA가 잡기 좋은 버그다.

루프

  1. 01머지 — 내 PR이 develop에 들어간다
  2. 02배포 — develop이 SIT에 올라가고, 팀 채널에 알림이 간다
  3. 03테스트 — QA가 변경된 화면과 그 주변 화면을 돌려 본다
  4. 04버그 — UI를 쓴 사람에게 티켓이 돌아온다. 대개 나다
  5. 05수정 — 새 브랜치, 새 PR, 다시 SIT. 릴리스 브랜치가 생긴 뒤라면 수정은 release/*로 가고 develop에도 반영된다
  6. 06승격 — release/*가 UAT로 가고, 개발자가 main에 머지한다

디자이너가 UI를 쓰면 QA가 어떻게 바뀌는지 수치로 공개한 곳은 없다. World Quality Report 2025-26은 테스터의 시간이 테스트 스크립트 작성에서 리스크 분석과 테스트 전략으로 옮겨 간다고 정리하는데, 내가 보는 것과 같은 방향이다. 다만 이 부분은 측정이 아니라 관찰이다.

예전 · Figma와 비교QA의 시간빌드 vs Figma간격, 색, 빠진 상태픽셀 버그 티켓올리고, 기다리고, 재확인왕복개발자가 고치고 디자이너가 재확인기능지금 · SIT에서 develop 테스트QA의 시간기능 엣지 케이스실제 데이터와 연동SIT에서로직을 공유하는 화면회귀접근성스캐너 너머기기별 동작정성적 비교다. 우리 팀 QA가 그만둔 일과 새로 맡은 일이고, 측정한 비율은 아니다.
그림 7

내가 멈추는 곳, 그리고 업계

내가 하지 않는 일이 있다. 릴리스나 핫픽스 브랜치를 만들지 않고, main에 머지하지 않고, 개발자와 먼저 합의하지 않은 채 공유 비즈니스 로직을 바꾸지 않는다. 새 컴포넌트는 개발자를 거친다. Copilot 리뷰는 1차 검토일 뿐, 승인이 아니다.

이렇게 일하는 게 나만은 아니다. 한국 애드테크 회사 버즈빌은 2026년 9월에 디자이너 PR 6개월치를 공개했다. 432건이었고, 디자인팀 참여율은 17%에서 100%가 됐고, 들여다볼 핸드오프가 남지 않아 Figma Dev Mode 좌석은 23개에서 3~4개로 줄었다. Figma의 2026 AI 리포트에 따르면 개발 업무를 하는 디자이너는 1년 사이 21%에서 41%로 두 배가 됐다. 하지만 공개된 사례는 거의 모두 PR마다 preview로 테스트하는 스타트업 이야기이고, 대부분 Claude 계열 도구를 쓴다. 공용 SIT와 UAT 단계를 거치고 QA가 루프 안에 있는 Copilot 워크플로는 기록된 곳이 거의 없다.

다른 디자이너에게 하고 싶은 말

어려운 건 Git이 아니다. 판단 세 가지가 어렵다. 이 브랜치를 rebase해도 되는가, 아니면 누가 이미 pull했는가. 이 충돌은 내가 풀어도 되는가, 아니면 로직의 문제인가. 지금 SIT에 올라간 게 정말 내 변경인가. 예전에는 디자인 파일이 디자인 결정을 담았다. 지금은 PR이 담고, 그 PR이 머지되는 코드가 담는다.


출처