version-control

16 개의 포스트

github

초보자를 위한 GitHub: GitHub 필수 기능 마스터를 위한 로드맵 (새 탭에서 열림)

GitHub는 코드 저장소를 넘어, 버전 관리와 협업을 배우고 오픈소스에 참여하기 위한 개발자의 기반이다. 이 글은 Git과 GitHub의 기본 개념부터 계정 보안, 저장소 생성, Markdown, 브랜치와 풀 리퀘스트를 활용한 협업 흐름까지 초보자가 익혀야 할 내용을 단계적으로 설명한다. 핵심은 변경 사항을 Git으로 관리하고, GitHub에서 브랜치와 풀 리퀘스트를 통해 안전하게 공유·검토·통합하는 것이다. ## 버전 관리와 Git의 기본 개념 - 버전 관리는 파일의 변경 내용을 시간순으로 기록해 무엇이 언제, 왜 바뀌었는지 확인하고 이전 상태로 되돌릴 수 있게 한다. - Git은 가장 널리 사용되는 버전 관리 시스템이다. - Git의 작업 영역은 다음 세 가지로 나뉜다. - **Working directory**: 실제 파일을 수정하는 공간 - **Staging area**: 다음 커밋에 포함할 변경 사항을 검토하고 준비하는 공간 - **Local repository**: 커밋된 변경 이력이 저장되는 공간 - 기본 흐름은 `git status`로 상태를 확인하고, `git add`로 변경 사항을 스테이징한 뒤, `git commit`으로 기록을 저장하는 방식이다. - “코드를 push한다”는 말은 로컬에 만든 커밋을 GitHub의 원격 저장소에 업로드한다는 뜻이다. ## GitHub 계정 보안과 프로필 관리 - GitHub 계정은 개발자 정체성과 포트폴리오 역할을 하므로 보안을 강화해야 한다. - **Settings → Password and authentication**에서 2단계 인증(2FA)을 활성화하면 비밀번호가 유출돼도 추가 인증 없이는 계정에 접근하기 어렵다. - 2FA 복구 코드는 기기를 잃어버렸을 때 계정에 다시 로그인할 수 있는 중요한 수단이므로 비밀번호 관리자에 안전하게 보관해야 한다. - 사용자 이름과 동일한 이름의 공개 저장소를 만들고 README를 추가하면, 해당 README가 GitHub 프로필에 표시된다. - 프로필 README에는 기술, 프로젝트, 관심 분야 등을 작성해 개발자 포트폴리오로 활용할 수 있다. ## 자주 사용하는 Git 명령어 - `git config --global user.name "..."`: 커밋에 기록할 사용자 이름 설정 - `git init`: 현재 폴더를 Git 저장소로 초기화 - `git clone <url>`: 원격 저장소를 로컬로 복제 - `git status`: 변경 사항과 스테이징 상태 확인 - `git add .`: 모든 변경 사항을 스테이징 - `git commit -m "message"`: 스테이징된 변경 사항을 커밋 - `git switch -c <branch>`: 새 브랜치를 만들고 해당 브랜치로 이동 - `git push`: 로컬 커밋을 GitHub에 업로드 - `git pull`: GitHub의 최신 변경 사항을 내려받고 병합 - `git merge <branch>`: 다른 브랜치의 변경 사항을 현재 브랜치에 통합 ## 첫 번째 GitHub 저장소 만들기 - 저장소(repository)는 프로젝트 파일과 변경 이력을 관리하고 여러 사람이 함께 작업하는 프로젝트의 중심 공간이다. - GitHub 대시보드에서 **New**를 선택한 뒤 저장소 이름과 공개·비공개 여부를 지정해 만들 수 있다. - README를 함께 생성하면 방문자가 프로젝트를 처음 이해하는 안내문 역할을 한다. - 필요에 따라 다음 항목도 추가할 수 있다. - **`.gitignore`**: 운영체제 파일, 의존성 폴더, 임시 빌드 결과물처럼 추적할 필요가 없는 파일을 Git에서 제외 - **라이선스**: 다른 사람이 코드를 어떤 조건으로 사용·수정·배포할 수 있는지 명시 - `.gitignore`를 사용하면 저장소에 실제 소스 코드와 중요한 파일만 남겨 프로젝트를 깔끔하게 유지할 수 있다. ## Markdown으로 문서 작성하기 - Markdown은 일반 텍스트에 간단한 기호를 추가해 제목, 목록, 링크, 코드 블록 등을 표현하는 가벼운 문서 형식이다. - GitHub의 README, 이슈, 풀 리퀘스트, 댓글 등 대부분의 텍스트 작성 영역에서 사용된다. - 일부 HTML 태그와 함께 사용해 문서를 읽기 쉽고 구조적으로 만들 수 있다. - 좋은 Markdown 문서는 프로젝트의 목적과 사용 방법을 빠르게 전달해 저장소의 접근성을 높인다. ## GitHub Flow를 이용한 협업 - GitHub Flow는 공유 프로젝트에 변경 사항을 안전하게 반영하기 위한 반복적인 작업 절차다. - 일반적인 순서는 다음과 같다. 1. 저장소를 로컬에 `clone` 2. 작업용 브랜치 생성 3. 코드나 문서 수정 4. 변경 사항 커밋 5. GitHub에 `push` 6. 풀 리퀘스트 생성 7. 검토와 승인 후 병합 - 기능별로 브랜치를 분리하면 기존 코드에 직접 영향을 주지 않고 독립적으로 작업할 수 있다. - 풀 리퀘스트를 통해 동료가 변경 내용을 검토하고, 테스트 결과나 새로운 동작을 확인한 뒤 병합할 수 있다. - 예를 들어 공유 AI 프롬프트를 수정할 때도 별도 브랜치에서 변경하고, 풀 리퀘스트로 결과를 검토한 후 병합하면 팀 전체가 개선된 프롬프트를 사용할 수 있다. 처음에는 모든 Git 명령어를 외우기보다 `status → add → commit → push` 흐름과 브랜치·풀 리퀘스트 과정을 반복해 익히는 것이 좋다. 또한 2FA를 설정하고, README와 `.gitignore`를 갖춘 저장소를 만들어 작은 프로젝트부터 GitHub Flow를 연습하면 협업과 오픈소스 참여로 자연스럽게 확장할 수 있다.

gitlab

Git 2.55.0의 새로운 기능은 무엇인가? (새 탭에서 열림)

Git 2.55.0은 커밋 수정, 대규모 저장소 성능, 여러 원격 저장소 관리, 로그 가독성을 개선한 릴리스입니다. 특히 `git history fixup`, Linux용 내장 fsmonitor, 원격 그룹 대상 `git push`, `git log --graph`의 레인 폭 제한이 눈에 띕니다. 또한 Git 코드베이스의 Rust 도입과 부분 클론에서의 `git grep`, `git cherry` 성능 개선도 주요 변경 사항으로 소개됩니다. ## `git history fixup`으로 기존 커밋 수정 - 기존 방식은 다음 두 단계가 필요했습니다. ```bash git commit --fixup=<commit-id> git rebase -i --autosquash <commit-id>^ ``` - Git 2.55에서는 스테이징된 변경 사항을 지정한 커밋에 바로 반영할 수 있습니다. ```bash git history fixup <commit-id> ``` - 대화형 리베이스 없이 커밋을 수정할 수 있어 절차가 간단해집니다. - 수정된 커밋을 포함하는 다른 로컬 브랜치도 함께 갱신됩니다. - 따라서 스택형 브랜치에서 중간 커밋을 수정하면 관련 브랜치가 자동으로 재배치됩니다. ## Linux용 내장 fsmonitor 데몬 - 대규모 모노레포에서는 `git status`가 전체 작업 트리를 탐색해야 하므로 느려질 수 있습니다. - `core.fsmonitor`를 활성화하면 파일 시스템 변경을 백그라운드에서 감시하고, Git이 변경 가능성이 있는 파일만 확인할 수 있습니다. - 기존 내장 fsmonitor는 Windows와 macOS만 지원했지만 Git 2.55부터 GNU/Linux도 지원합니다. - Linux에서는 권한 상승이 필요한 `fanotify` 대신 `inotify`를 사용합니다. - 저장소의 모든 디렉터리에 감시자를 등록하므로, 큰 저장소에서는 감시자 수 제한을 초과할 수 있습니다. - 필요하면 다음 커널 설정을 늘려야 합니다. ```text fs.inotify.max_user_watches ``` ## 원격 그룹으로 한 번에 push - 기존에는 원격 그룹을 `git fetch`에서만 사용할 수 있었습니다. - 다음과 같이 원격 그룹을 설정합니다. ```bash git config set remotes.forks "origin upstream" ``` - Git 2.55부터 그룹 전체에 브랜치를 push할 수 있습니다. ```bash git push forks main ``` - 지정한 브랜치가 그룹에 포함된 각 원격 저장소로 독립적으로 전송됩니다. - 각 원격 저장소의 `remote.<name>.push` 매핑과 mirror 설정도 개별적으로 적용됩니다. ## `git log --graph`의 레인 폭 제한 - `git log --graph`는 브랜치와 병합 관계를 ASCII 그래프로 표시합니다. - 기여자가 많거나 병렬 브랜치가 많은 저장소에서는 그래프가 지나치게 넓어져 가독성이 떨어질 수 있습니다. - Git 2.55는 그래프의 레인 폭을 제한하는 기능을 제공해 복잡한 커밋 이력을 보다 compact하게 표시할 수 있도록 합니다. ## Rust 도입과 부분 클론 성능 개선 - Git 2.55 릴리스의 추가 주제로 Git 코드베이스 내 Rust 사용 확대가 소개됩니다. - 부분 클론 환경에서 `git grep`과 `git cherry`가 더 빠르게 동작하도록 성능 개선이 이루어졌습니다. - 제공된 글 내용에는 Rust 도입 방식이나 각 명령의 구체적인 개선 수치는 자세히 설명되지 않습니다. 대규모 저장소를 사용한다면 Linux에서 `core.fsmonitor=true`를 활성화하고, `inotify` 감시자 제한을 점검하는 것이 좋습니다. 여러 미러나 포크에 동시에 배포하는 팀은 원격 그룹 push를 활용하면 반복 작업을 줄일 수 있습니다.

github

Hubber로서 전환하기 (새 탭에서 열림)

GitHub의 Arthur Searle은 회사의 핸들 중심 문화와 원격 근무 환경, 성별 확정 의료 지원 덕분에 직장에서 비교적 안전하고 자연스럽게 트랜지션할 수 있었다고 말합니다. 이름·대명사 변경 과정의 행정적 마찰은 있었지만, 동료들의 존중과 지지를 통해 자신의 정체성으로 일하는 기쁨을 경험했습니다. 이 글은 트랜스젠더 구성원이 직장에서 겪는 어려움뿐 아니라, 포용적인 환경이 만들어내는 안도감과 기쁨도 함께 보여줍니다. ## IT 지원에서 보안 엔지니어로 - Arthur는 IT 지원과 운영 업무로 커리어를 시작한 뒤, 독학으로 코딩을 배웠습니다. - 동료의 추천으로 GitHub에 입사해 IT Engineering 팀에서 근무했습니다. - 보안 관련 문제와 풀 리퀘스트를 여러 보안 팀에 지속적으로 제기한 결과, 6개월 만에 Enterprise Security 팀으로 이동했습니다. - 주요 SaaS 플랫폼의 인프라를 코드로 이전하는 작업에 참여했고, 옥스퍼드대학교에서 버전 관리 관련 강연도 진행했습니다. ## 핸들 중심 문화가 만든 정체성의 연속성 - 입사 당시 법적 이름은 Ursula였지만, 온라인 핸들은 계속 `gleeblezoid`였습니다. - GitHub의 원격 중심 문화에서는 실명보다 핸들을 자주 사용하기 때문에, 이름을 바꾸더라도 기존의 업무 정체성과 관계를 유지하기 쉬웠습니다. - 다른 회사처럼 모든 사람이 외모와 실명만으로 서로를 식별하는 환경이었다면 트랜지션 과정이 더 어려웠을 것이라고 설명합니다. - 내부 시스템에서 이름과 대명사를 업데이트한 뒤, 대부분의 동료가 자연스럽게 새 이름을 사용했습니다. ## 의료 지원과 원격 근무의 장점 - GitHub는 직원 모두에게 성별 확정 의료와 관련된 복지 혜택을 제공합니다. - Arthur는 해당 혜택으로 다음과 같은 비용을 지원받을 수 있었다고 말합니다. - 음성 훈련 - HRT 처방약 - 상담 및 치료 - 원격 근무 덕분에 출근 복장이나 이동 중 다른 사람의 시선에 대해 걱정할 필요가 적었습니다. - 업무 소통 대부분이 Slack과 GitHub에 글로 남기 때문에, 음성 훈련이나 HRT로 목소리가 변하는 시기에 하루 종일 직접 말해야 하는 부담도 줄었습니다. - 만화 캐릭터 아바타처럼 외모와 성별 표현에서 자유로운 문화 역시 불필요한 추측과 판단을 줄였습니다. ## 직장에서 트랜스젠더로 살아가는 현실 - Arthur는 직장에서 커밍아웃하지 못하거나, 이름 변경 과정에서 행정적 문제를 겪는 트랜스젠더 동료들을 알고 있다고 말합니다. - 새로운 사람을 만날 때마다 자신의 정체성을 반복해서 설명해야 하는 경우도 있습니다. - 본인은 급여 시스템 등에서 법적 이름을 바꾸는 행정 절차를 제외하면 비교적 순조롭게 트랜지션할 수 있었습니다. - 동료들은 그를 특별히 다르게 대하지 않고, 원하는 이름과 대명사를 사용하며 일반적인 동료로 존중했습니다. ## 지지와 긍정적인 감정 - 트랜스젠더로 살아가는 일이 항상 쉽거나 사회적으로 받아들여지는 것은 아니지만, 경험이 고난만으로 정의되는 것은 아니라고 강조합니다. - 직장에서 처음 자신의 이름을 듣고 남성 대명사로 불렸을 때 큰 감동을 느꼈습니다. - 한 동료가 면도 키트를 보내준 일처럼, 동료들의 작은 배려가 강한 소속감과 기쁨을 만들었습니다. - 동료들은 Arthur와 관련된 농담과 밈을 공유하며 그의 트랜지션을 진심으로 축하하고 지지했습니다. - 그는 “항상 남성이었지만, 남성으로 살아가고 사회에 참여할 시간과 지원이 필요했다”고 말하며 글을 마무리합니다. 기업이 트랜스젠더 구성원을 지원하려면 의료비 보장뿐 아니라 이름·대명사 변경 절차, 원격·비동기 소통, 외모에 대한 판단을 줄이는 문화까지 함께 마련해야 합니다. 궁극적으로 중요한 것은 트랜지션을 특별한 사건으로만 다루지 않고, 구성원이 원하는 정체성으로 존중받으며 평범하게 일할 수 있도록 하는 것입니다.

github

Git worktree란 무엇이며, 왜 사용해야 할까요? (새 탭에서 열림)

Git worktree는 하나의 저장소에서 여러 작업 디렉터리를 동시에 운영하게 해 주는 기능으로, 브랜치 전환과 `git stash` 없이 여러 작업을 병렬로 진행할 수 있게 한다. 특히 AI 에이전트와 개발 세션을 동시에 실행하는 환경에서 각 작업의 맥락을 보존하고 전환 비용을 줄여 주기 때문에 최근 주목받고 있다. 다만 의존성 저장 공간, 디렉터리 정리, 동일 브랜치 중복 체크아웃 등의 관리 부담은 남아 있다. ## 브랜치 전환과 `git stash`의 부담 - 기존 방식에서는 긴급한 버그를 처리하기 위해 현재 작업을 먼저 임시 저장해야 한다. ```bash git stash "wip feature login" ``` - 이후 `main` 브랜치로 이동하고 최신 변경 사항을 받은 뒤, 별도의 핫픽스 브랜치를 생성한다. ```bash git checkout main git pull origin main git checkout -b hotfix-bug ``` - 수정·커밋·푸시·병합이 끝나면 다시 원래 브랜치로 돌아가 `stash pop`을 실행한다. - 이 과정에서 다음과 같은 비용이 발생한다. - 작업 파일과 에디터 상태를 반복해서 다시 로드해야 함 - 변경된 의존성에 따라 `node_modules` 등을 재설치할 수 있음 - 복잡한 stash 충돌이 발생할 수 있음 - 현재 작업의 맥락을 잃기 쉬움 - 일부 개발자는 이를 피하기 위해 같은 저장소를 여러 번 clone하기도 하지만, 저장 공간과 관리 부담이 커진다. ## Worktree를 이용한 병렬 작업 - `git worktree add`를 사용하면 기존 작업 디렉터리를 그대로 둔 채 별도의 디렉터리에서 다른 브랜치를 체크아웃할 수 있다. ```bash git worktree add ../hotfix-workspace -b hotfix-bug main ``` - 이 명령은 다음 작업을 한 번에 수행한다. - 기존 프로젝트 옆에 `hotfix-workspace` 디렉터리 생성 - `main`을 기반으로 `hotfix-bug` 브랜치 생성 - 새 디렉터리에서 해당 브랜치 체크아웃 - 원래 에디터 창과 feature 브랜치의 파일 상태는 그대로 유지된다. - 새 디렉터리에서 독립적으로 수정하고 커밋·푸시할 수 있다. ```bash cd ../hotfix-workspace git add . git commit -m "fix broken submit button" git push origin hotfix-bug ``` - 작업이 끝나면 임시 worktree를 제거한다. ```bash cd ../main-project git worktree remove ../hotfix-workspace ``` - 따라서 stash 충돌 없이 여러 작업을 동시에 진행하고, 각 작업의 에디터와 파일 맥락을 보존할 수 있다. - VS Code 등 일부 개발 도구는 worktree를 직접 지원한다. ## Worktree가 최근 주목받는 이유 - Git worktree 자체는 2015년부터 존재했지만, 오랫동안 일반 개발자에게 널리 알려지지는 않았다. - 과거에는 대부분 다음과 같은 단순한 흐름을 사용했다. - feature 브랜치 생성 - 작업 - Pull Request 생성 - 병합 - 다음 작업 시작 - Git GUI가 worktree를 제대로 지원하지 않거나 부가 기능처럼 취급한 점도 확산을 막았다. - 최근에는 AI 도구와 에이전트가 여러 개발 세션을 동시에 실행하면서 병렬 작업이 크게 증가했다. - 코드 작성뿐 아니라 코드 리뷰와 자동화 작업도 병렬로 진행되면서, 세션마다 독립적인 작업 공간을 제공하는 worktree가 적합해졌다. - GitHub Copilot 앱을 비롯한 최신 개발 도구에서는 worktree가 기본 실행 방식으로 사용되기도 한다. ## Worktree 사용 시 주의점 - **의존성 저장 공간 증가** - 각 worktree가 프로젝트 의존성을 별도로 설치하면 `node_modules`나 Python 패키지가 반복 저장된다. - 여러 worktree를 동시에 사용하면 디스크 공간이 빠르게 줄어들 수 있다. - **디렉터리 정리 필요** - 작업이 끝난 worktree를 직접 삭제하지 않으면 부모 디렉터리에 임시 폴더가 계속 쌓인다. - 일부 앱은 이를 자동으로 처리하지만, 터미널 사용 시 직접 관리해야 한다. - **`.gitignore` 설정** - 저장소 내부에 worktree를 만들 경우 해당 폴더가 실수로 추적되지 않도록 `.gitignore`에 추가해야 한다. - 저장소 외부에 worktree를 생성하면 이 문제를 줄일 수 있다. - **동일 브랜치 중복 체크아웃 제한** - Git은 데이터 손상을 막기 위해 같은 브랜치를 여러 worktree에서 동시에 체크아웃하지 못하게 한다. ## GitHub Copilot 앱에서의 사용 - 새 세션을 만들 때 실행 위치를 선택할 수 있으며, 기본값으로 새 worktree를 사용할 수 있다. - 세션을 시작하면 앱에서 다음 정보를 확인할 수 있다. - 생성된 worktree 이름 - worktree의 경로 - 연결된 프로젝트 - 해당 worktree에서 발생한 변경 사항 - 사용자가 직접 Git 명령을 관리하지 않아도 병렬 세션을 쉽게 만들고 정리할 수 있다는 점이 장점이다. ## 상황에 따른 선택 - 작업을 자주 병렬로 진행하거나 AI 에이전트를 여러 개 실행한다면 worktree가 특히 유용하다. - 단일 작업을 순차적으로 처리하고 기존 브랜치·stash 방식이 익숙하다면 반드시 전환할 필요는 없다. - 두 방식을 함께 사용하면서 작업 유형에 따라 선택하는 것도 가능하다. - 병렬 작업이 많은 팀이나 개발자는 worktree를 도입하되, 의존성 공유와 임시 디렉터리 정리 전략을 함께 마련하는 것이 좋다.

github

초보자를 위한 GitHub: 자주 묻는 질문에 대한 답변 (새 탭에서 열림)

이 글은 GitHub 초보자가 자주 묻는 SSH 키와 Personal Access Token(PAT)의 개념, 생성 방법, 보안상 주의점을 설명한다. SSH는 컴퓨터의 개인 키와 GitHub에 등록한 공개 키를 이용해 인증하며, PAT는 명령줄이나 API 접근에 사용하는 권한 기반 자격 증명이다. 글의 후반부에서는 병합과 리베이스 차이도 다룰 예정이지만, 제공된 내용은 해당 질문의 제목에서 끝난다. ## SSH 키의 개념과 역할 - SSH 키는 다음 두 파일로 구성된 키 쌍이다. - **개인 키(private key)**: 컴퓨터에 보관하며 절대 공유하지 않는다. - **공개 키(public key)**: GitHub 등에 등록해도 된다. - GitHub는 등록된 공개 키와 사용자의 컴퓨터에 있는 개인 키가 일치하는지 확인해 인증한다. - SSH를 설정하면 GitHub에 코드를 push하거나 pull할 때 비밀번호를 반복해서 입력하지 않아도 된다. ## SSH 키 생성 및 ssh-agent 등록 - 터미널에서 Ed25519 방식의 키를 생성한다. ```bash ssh-keygen -t ed25519 -C YOUR_EMAIL@DOMAIN.COM ``` - 저장 경로를 물으면 기본 경로를 사용하기 위해 Enter를 누른다. - 개인 키를 보호할 passphrase를 설정한다. - `ssh-agent`는 개인 키를 안전하게 보관해 매번 passphrase를 입력하지 않도록 돕는다. - 생성한 키를 agent에 추가한다. ```bash ssh-add ~/.ssh/id_ed25519 ``` ## 공개 키를 GitHub에 등록하기 - 공개 키 내용을 확인한다. ```bash cat ~/.ssh/id_ed25519.pub ``` - 출력된 한 줄 전체를 복사한다. - GitHub에서 다음 순서로 등록한다. - 프로필 사진 → **Settings** - 왼쪽 메뉴의 **SSH and GPG keys** - **New SSH key** - 기기를 식별할 수 있는 제목 입력 - 복사한 공개 키 붙여넣기 - **Add SSH key** 클릭 - 개인 키는 GitHub에 업로드하지 않고 로컬 컴퓨터에만 보관해야 한다. ## Personal Access Token(PAT)의 용도 - PAT는 GitHub 도구, 명령줄, GitHub API에서 사용하는 별도의 인증 자격 증명이다. - 토큰마다 접근 가능한 저장소와 권한을 지정할 수 있다. - 필요할 때 폐기(revoke)할 수 있으며, 만료일도 설정할 수 있다. - PAT는 생성 직후 한 번만 표시되므로 비밀번호 관리자 등 안전한 장소에 즉시 저장해야 한다. - 터미널에서 GitHub 비밀번호를 요구할 때 비밀번호 대신 PAT를 사용할 수 있다. ## Fine-grained PAT 생성 - GitHub의 **Settings → Developer settings → Personal access tokens → Fine-grained tokens**로 이동한다. - 토큰 이름과 용도를 설명하는 설명을 입력한다. - 만료일을 지정한다. - 토큰이 접근할 저장소를 전체 또는 특정 저장소로 제한한다. - 필요한 권한을 추가하고 각 권한을 읽기 전용 또는 읽기·쓰기 모드로 설정한다. - 생성 전 설정을 검토한 뒤 토큰을 생성한다. - 권한 범위를 좁게 설정하면 토큰이 유출되었을 때의 피해를 줄일 수 있다. ## Classic PAT 생성 - **Settings → Developer settings → Personal access tokens → Tokens (classic)**으로 이동한다. - **Generate new token (classic)**을 선택한다. - 토큰 이름과 만료일을 지정한다. - 필요한 scope를 선택한다. - 토큰을 생성한 뒤 표시되는 값을 안전하게 복사한다. - Classic 토큰은 권한 범위가 더 포괄적일 수 있으므로, 가능한 경우 필요한 저장소와 권한을 세밀하게 제한할 수 있는 fine-grained 토큰을 우선 고려하는 것이 좋다. ## 실용적인 보안 권장 사항 - SSH 개인 키와 PAT를 다른 사람에게 공유하지 않는다. - PAT에는 필요한 저장소와 최소 권한만 부여한다. - 토큰에는 만료일을 설정하고 더 이상 사용하지 않으면 폐기한다. - PAT는 비밀번호나 소스 코드에 직접 기록하지 말고 비밀번호 관리자나 안전한 시크릿 저장소에 보관한다. - 제공된 글에는 병합(merge)과 리베이스(rebase) 설명이 이어질 예정이지만, 해당 내용은 포함되어 있지 않다.

figma

Figma Make, 이제 로컬 코드에서 | Figma 블로그 (새 탭에서 열림)

Figma Make은 디자인, 프로토타이핑, 실제 코드 배포 사이의 경계를 허물고, Figma 안에서 로컬 코드베이스를 직접 수정·검토·공유할 수 있도록 확장된다. 사용자는 화면 요소를 시각적으로 편집하거나 자연어 주석으로 동작을 변경하고, Git 브랜치·커밋·PR 흐름을 통해 안전하게 배포할 수 있다. 궁극적으로 Figma는 디자인 캔버스와 코드베이스를 하나의 협업 환경으로 통합하려 한다. ## 로컬 코드베이스의 시각적 편집 - Figma Make를 회사의 코드베이스에 연결하면 Figma 안에서 실제 UI를 직접 수정할 수 있다. - 화면 요소를 선택해 다음 속성을 변경할 수 있다. - 레이아웃 - 색상 - 글꼴 - 크기 - 기타 시각적 속성 - Make의 에이전트가 사용자의 시각적 변경에 대응하는 코드를 찾아 수정한다. - 이미 원하는 결과가 명확한 속성 변경에는 직접 편집 기능을 사용한다. - 현재는 코드베이스 접근 권한이 있는 디자이너에게 적합하며, 비기술 사용자를 위한 설정 과정은 계속 개선 중이다. ## 주석과 프롬프트를 활용한 동작 변경 - 단순한 속성 변경을 넘어 상호작용이나 애니메이션을 수정할 때는 화면 요소에 주석을 달 수 있다. - 주석에는 원하는 동작을 자연어로 설명할 수 있다. - 여러 요소를 한 번에 참조할 수 있어 에이전트에 구체적인 맥락을 전달한다. - 직접 편집과 일반적인 채팅 프롬프트 사이의 유연한 작업 방식으로 활용된다. - 예를 들어 버튼의 클릭 동작, 화면 전환, 애니메이션 로직 등을 설명해 코드에 반영할 수 있다. ## 브랜치·커밋·PR 기반 배포 - 프로덕션 코드는 팀의 개발 프로세스를 거쳐 의도적으로 배포하도록 설계됐다. - PR을 열기 전 변경 사항은 로컬 커밋으로 저장된다. - Make 안에서 Git 작업을 수행할 수 있다. - 브랜치 생성 - 커밋 확인 - 커밋 되돌리기 - 변경 이력 검토 - PR 생성 - 엔지니어링 팀은 일반적인 코드 변경과 동일하게 Make의 변경 사항을 리뷰할 수 있다. ## 디자인과 코드의 협업 및 왕복 작업 - 로컬 코드베이스의 변경 사항을 파일과 브랜치 단위로 팀원에게 공유할 수 있다. - 팀원은 공유받은 브랜치를 체크아웃해 변경 내용을 확인하고 추가 작업을 진행한다. - 커밋 이력을 통해 변경 전후를 비교할 수 있다. - Make에서 만든 화면·페이지·컴포넌트를 Figma 캔버스의 레이어로 복사할 수 있다. - Figma 캔버스에서 팀원과 의견을 나누고, Figma 에이전트와 함께 디자인을 수정할 수 있다. - 디자인 변경 사항은 다시 Make로 가져와 코드에 적용할 수 있다. - 이를 통해 다음과 같은 왕복 흐름을 지향한다. - Make에서 코드 기반 화면 제작 - Figma Design에서 검토·편집·협업 - 결정된 디자인을 다시 코드에 반영 ## 베타 출시 범위 - 직접 편집, 주석, 채팅, PR 생성 기능은 2026년 5월 28일부터 제한적 베타로 제공된다. - 베타 기간에는 AI 크레딧을 차감하지 않는다. - 정식 AI 크레딧 요금은 추후 공개될 예정이다. - 초기 베타는 Mac용 Figma Beta 데스크톱 앱에서만 제공된다. - 대기자 등록이 베타 접근을 보장하지는 않으며, 선정된 사용자에게 별도 이메일이 발송된다. - 향후 다른 플랫폼으로 확대할 계획이다. Figma Make는 디자인 도구와 IDE를 대체로 구분하기보다, 작업 단계에 따라 두 환경을 연결하는 방향을 택했다. 현재는 Mac 베타와 코드 접근 권한 등 제약이 있지만, Git 기반 리뷰 프로세스와 Figma 캔버스 협업이 안정화된다면 디자이너와 개발자가 실제 제품 코드를 함께 발전시키는 실용적인 워크플로가 될 수 있다.

github

초보자를 위한 GitHub: VS Code에서 Git과 GitHub 시작하기 (새 탭에서 열림)

VS Code는 Git과 GitHub 기능을 통합해 편집기를 벗어나지 않고 저장소 초기화, 브랜치 관리, 변경 사항 검토, 커밋과 푸시를 수행하게 해준다. 이 글은 Git과 GitHub의 차이를 설명하고, VS Code에서 로컬 폴더를 Git 저장소로 만들고 변경 사항을 GitHub에 올리는 초보자용 흐름을 단계별로 안내한다. 이를 통해 도구 간 전환을 줄이고 개발 작업의 생산성을 높일 수 있다. ## Git, GitHub, VS Code의 관계 - **GitHub**는 코드 저장소를 호스팅하는 서비스다. - **Git**은 소스 코드의 변경 이력을 관리하는 프로그램이다. - Git은 명령줄뿐 아니라 VS Code 같은 편집기에서도 사용할 수 있다. - VS Code는 Git 기능을 내장하고 있어 GitHub와 연계된 버전 관리 작업을 편리하게 수행할 수 있다. - 실습을 위해 Git과 VS Code를 먼저 설치해야 한다. ## 폴더를 Git 저장소로 초기화 - VS Code에서 **Explorer → Open Folder**를 선택해 코드가 들어 있는 폴더를 연다. - 왼쪽의 **Source Control** 아이콘을 클릭한다. - **Initialize Repository**를 선택하면 해당 폴더에 로컬 Git 저장소가 생성된다. - 하단 왼쪽에서 현재 브랜치 이름을 확인할 수 있으며, 기본 브랜치는 보통 `main`이다. - Command Palette에서 **Git: Rename Branch**를 실행해 브랜치 이름을 변경할 수 있다. - macOS: `Shift-Command-P` - Windows/Linux: `Ctrl-Shift-P` ## 파일 추적과 스테이징 - 저장소를 초기화하면 기존 파일 옆에 `U` 표시가 나타난다. - `U`는 **Untracked**, 즉 아직 Git이 추적하지 않는 파일이라는 뜻이다. - 파일 옆의 `+` 버튼을 클릭하면 해당 파일이 스테이징된다. - **CHANGES** 옆의 `+` 버튼을 누르면 변경된 모든 파일을 한 번에 스테이징할 수 있다. - 스테이징된 파일은 `A`로 표시된다. - `A`는 파일이 추가되었지만 아직 커밋되거나 GitHub에 업로드되지는 않았다는 의미다. ## 커밋 생성 - Source Control 패널 상단의 입력란에 변경 내용을 설명하는 커밋 메시지를 작성한다. - 필요하면 Copilot 아이콘을 사용해 커밋 메시지를 생성할 수 있다. - **Commit** 버튼을 누르면 스테이징된 변경 사항이 로컬 Git 저장소에 기록된다. - 커밋은 변경 사항을 GitHub에 업로드하는 것과는 다르며, 이후 별도의 푸시 작업이 필요하다. ## 브랜치 생성과 전환 - 주요 기능을 개발할 때는 `main` 브랜치에서 직접 작업하기보다 별도 브랜치를 만드는 것이 권장된다. - Command Palette에서 **Git: Create Branch…**를 실행한다. - 예를 들어 `new-features` 같은 브랜치 이름을 입력한다. - VS Code는 새 브랜치를 생성한 뒤 자동으로 해당 브랜치로 전환한다. - 현재 브랜치는 화면 하단 왼쪽에서 확인할 수 있다. ## 코드 변경 사항 확인 VS Code의 편집기 여백인 **gutter**는 코드 변경 유형을 시각적으로 표시한다. - 초록색 선: 새로 추가된 코드 - 파란색 표시: 기존 코드가 수정된 부분 - 빨간색 화살표: 코드가 삭제된 부분 - 변경된 파일은 Source Control 패널의 **CHANGES** 아래에 표시된다. - 파일에 마우스를 올리면 다음 작업을 수행할 수 있다. - 파일 열기 - 변경 사항 폐기 - 변경 사항 스테이징 - CHANGES 영역에서도 여러 파일의 변경 사항을 한꺼번에 검토하거나 스테이징할 수 있다. ## diff로 변경 내용 비교 - Source Control 패널에서 파일 이름을 클릭하면 변경 전후를 나란히 비교하는 diff 화면이 열린다. - diff 화면에서는 어떤 코드가 추가·수정·삭제되었는지 확인할 수 있다. - 오른쪽 위의 `…` 메뉴에서 **Inline View**를 선택하면 변경 전후 내용을 하나의 화면에서 볼 수 있다. - Inline View에서는 diff 화면 안에서 직접 코드를 수정할 수도 있다. ## 실용적인 작업 흐름 - VS Code에서 폴더를 연다. - Git 저장소를 초기화한다. - 기능별 브랜치를 만든다. - 코드를 수정하고 Source Control에서 변경 사항을 검토한다. - 필요한 파일을 스테이징한다. - 의미 있는 커밋 메시지와 함께 커밋한다. - 이후 변경 사항을 GitHub에 반영하려면 푸시 작업을 수행한다. 이 글은 제공된 내용 기준으로 diff 확인 단계 이후에서 본문이 중단되어 있으며, GitHub 원격 저장소 연결과 실제 푸시 절차는 포함되어 있지 않다.

gitlab

GitLab을 사용하여 소프트웨어 개발을 쉽게 가르치는 방법 (새 탭에서 열림)

워싱턴 대학교의 Stephen G. Dame 강사는 'GitLab for Education' 프로그램을 활용해 대규모 소프트웨어 개발 강의의 과제 배포 및 피드백 과정을 효율적으로 관리하고 있습니다. GitLab의 그룹 및 하위 그룹 구조를 통해 복잡한 권한 설정을 체계화하고, 실제 현업과 유사한 워크플로우를 교육 현장에 도입하여 학생들에게 실무적인 개발 환경을 제공하는 것이 핵심입니다. 이를 통해 교강사는 행정적 부담을 줄이면서도 학생 개개인에게 구체적이고 맥락 있는 코드 리뷰를 전달할 수 있습니다. ### 그룹 및 하위 그룹을 활용한 체계적 구조 설계 * GitLab의 고유한 '그룹(Groups)' 및 '하위 그룹(Subgroups)' 기능을 사용하여 대학 부서, 강의, 역할별로 계층적인 구조를 설계합니다. * 최상위 그룹(예: UWTeaching) 아래에 개별 강의 하위 그룹을 두고, 그 안에 강의 자료, 학생 전용 그룹, 채점자 그룹 등을 구분하여 관리합니다. * 권한 상속 기능을 활용해 학생들에게는 '리포터(Reporter)' 권한을 부여함으로써, 강의용 템플릿 코드를 복제(Clone)하거나 가져올(Pull) 수는 있지만 원본 소스에 직접 푸시(Push)할 수는 없도록 제어합니다. * 학생들은 개인별 비공개 저장소를 생성하여 자신의 버전 히스토리를 관리하고, SSH 키 설정을 통해 로컬 환경이나 가상 머신에서 원활하게 작업할 수 있습니다. ### REST API 기반의 관리 자동화 * 수강생이 많은 대규모 강의의 경우, GitLab REST API와 Python 스크립트를 활용해 학생별 하위 그룹 생성 및 멤버 추가 과정을 자동화할 수 있습니다. * 학생의 사용자 이름을 기반으로 개인별 비공개 하위 그룹을 생성하고, 학기 종료 시점에 맞춰 권한이 자동으로 만료되도록 '만료일(Expiration date)'을 설정하여 보안을 유지합니다. * 이러한 자동화 워크플로우는 수동 관리에서 발생할 수 있는 실수를 방지하고 교강사가 교육 콘텐츠에 더 집중할 수 있는 시간을 확보해 줍니다. ### 머지 리퀘스트(Merge Request)를 통한 실무형 피드백 * 학생들은 과제 제출 시 '머지 리퀘스트(MR)'를 생성하며, 강사는 이를 통해 변경된 코드의 차이점(Diff)을 한눈에 확인하고 검토합니다. * 강사는 특정 코드 라인에 직접 인라인 댓글을 남겨 단순히 틀린 부분을 지적하는 것을 넘어, 왜 수정이 필요한지 맥락 있는 피드백을 제공합니다. * 학생들은 실제 현업의 필수 프로세스인 버전 관리와 코드 리뷰를 자연스럽게 경험하며 추상적인 개념이 아닌 실전적인 개발 습관을 체득하게 됩니다. ### 실용적인 권장 사항 처음 GitLab을 교육에 도입한다면 단일 강의 그룹과 기본 과제 템플릿으로 간단하게 시작하여 점진적으로 구조를 확장하는 것이 좋습니다. 'GitLab for Education' 프로그램을 신청하면 Ultimate 등급의 기능을 무료로 사용할 수 있으므로, 무제한 리뷰어 설정과 추가 컴퓨팅 리소스를 활용하여 교육의 질을 높일 것을 추천합니다.

figma

제14호: 소프트웨어는 (새 탭에서 열림)

소프트웨어는 기능을 제공하는 도구를 넘어 사람들이 생각하고 말하고 관계 맺고 문화를 형성하는 방식에 영향을 준다. AI가 소프트웨어 제작의 동료로 발전하면서, 소프트웨어는 인간의 필요와 문화적 맥락에 더욱 밀착될 전망이다. 이 글은 디자인, 언어, 게임, 음식, 제조 사례를 통해 소프트웨어와 문화가 서로를 어떻게 변화시키는지 보여준다. ## 소프트웨어와 문화의 결합 - 배달 주문, 인간관계 형성, 의미 추구 등 소프트웨어는 일상생활의 거의 모든 영역에 관여한다. - AI는 단순한 도구를 넘어 소프트웨어 제작 과정의 협업자 또는 동료로 자리 잡고 있다. - 기술을 만드는 사람뿐 아니라 사회 전체가 소프트웨어의 문화적 영향력을 이해해야 한다는 문제의식을 제시한다. ## 디자인은 문화다 - 핀치 투 줌, 무한 스크롤, 좋아요 탭과 같은 상호작용은 오늘날 자연스럽지만, 처음에는 낯선 새로운 동작이었다. - 이러한 인터랙션은 단순한 사용성 개선을 넘어 한 세대의 사고방식과 감정, 디지털 습관을 형성했다. - 과거의 대표적인 인터페이스 10가지를 돌아보며, 앞으로 등장할 디자인 역시 문화적 행동 양식을 바꿀 수 있음을 강조한다. ## 언어는 문화다 - “6-7”, “aura”, “rizz” 같은 표현은 소셜 미디어를 통해 빠르게 확산된 신조어의 사례다. - 알고리즘은 어떤 표현이 더 많이 노출되고 유행하는지를 결정하면서 사람들이 사용하는 언어에도 영향을 미친다. - 언어는 단순히 소통 수단에 그치지 않고, 사람들이 세상을 이해하고 서로 관계 맺는 방식까지 바꾼다. - 언어학자 애덤 알렉식은 이러한 현상을 ‘알고스피크(algospeak)’와 연결해 설명한다. ## 게임은 문화다 - 비디오게임은 단순한 오락을 넘어 1,840억 달러 규모의 복잡한 산업으로 성장했다. - 다양한 게임 모드, 캐릭터, 사이드 퀘스트를 제공하면서도 플레이어는 여전히 몇 개의 버튼으로 구성된 컨트롤러를 사용한다. - 제한된 입력 장치가 복잡한 가상 세계를 탐색하게 만드는 방식은 인터페이스 설계의 중요한 원리를 보여준다. - 에픽게임즈 디자이너 아슈레이 샤르마는 게임 컨트롤러의 발전이 차세대 소프트웨어 인터페이스에 줄 수 있는 시사점을 설명한다. ## 음식과 소프트웨어의 결합 - 캐나다 브리티시컬럼비아에서는 매주 한 명꼴로 농부가 사업을 접할 정도로 소규모 농가가 어려움을 겪고 있다. - 창업자 애런 베일은 지역 농부와 식당을 연결하는 마켓플레이스 앱을 구상했다. - 전통적인 방식이라면 MVP 제작을 위해 개발팀을 구성해야 했지만, Figma Make를 활용해 프롬프트 중심으로 앱을 만들었다. - 그 결과 3주 이내에 실제 작동하는 서비스 형태를 구현하며, AI 기반 제작 도구가 사회적 문제 해결의 진입장벽을 낮출 수 있음을 보여준다. ## 제조와 디지털 디자인의 연결 - 디자이너 켈시 페어허스트는 손으로 직접 만드는 작업에 매력을 느낀 뒤 금속 가공 기술을 연구했다. - 브루클린의 스튜디오와 클리블랜드의 제작 공장을 오가며 ‘소프트라인 브루탈리스트’ 스타일의 스테인리스 식기를 개발했다. - 프로젝트 ‘Forks Plus’는 디지털 디자인 도구와 물리적 제작 과정이 결합된 사례다. - 소프트웨어는 화면 속 결과물만 만드는 도구가 아니라, 실제 제품과 제작 문화를 실현하는 기반이 될 수 있다. 소프트웨어를 설계할 때는 기능과 효율성만이 아니라 사용자의 언어, 습관, 감정, 사회적 맥락까지 고려해야 한다. 특히 AI 제작 도구가 확산될수록 누구나 문화와 사회에 영향을 주는 제품을 만들 수 있으므로, 빠른 구현만큼 그 영향과 책임을 함께 검토하는 것이 중요하다.

figma

개발자가 디자인에 적극적으로 참여 (새 탭에서 열림)

Figma의 Dev Mode는 개발자를 디자인의 수동적 구현자가 아니라 제품 설계에 참여하는 협업자로 바라보게 한다. 개발자가 디자인 도구를 적극적으로 사용하고 필요한 개선을 직접 제안하면, 디자인 파일 탐색의 불안과 반복적인 탭 전환을 줄이고 디자이너와의 공통 언어를 만들 수 있다. 글은 Dev Mode 도입을 조직에 요구하는 일이 개발자 경험과 생산성, 협업 품질을 개선하는 실질적인 방법이라고 결론짓는다. ## 개발자는 디자인 과정의 참여자다 - 기존에는 디자인 도구를 디자이너만 사용하는 것으로 여겨 개발자가 파일을 조심스럽게 열어보거나 여러 브라우저 탭을 오가며 사양을 확인했다. - 이런 역할 분리는 디자인과 구현 사이의 소통 비용을 키우고, 개발자가 제품 결정에 기여할 기회를 줄인다. - Dev Mode는 개발자에게 별도의 작업 공간과 기능을 제공해 기획부터 출시까지 디자인 과정에 참여할 수 있게 한다. - 개발자가 Dev Mode의 필요성을 조직에 설명하고 도입을 주도해야 더 나은 협업 환경을 만들 수 있다. ## 공유 도구가 만드는 공통 언어 - Dev Mode는 개발자가 디자인을 단순히 구현하는 사람이 아니라 적극적인 협업자라는 전제를 바탕으로 한다. - Figma의 오토 레이아웃은 개발자에게 CSS Flexbox와 유사하게 느껴져 디자인의 레이아웃 동작을 웹 구현 방식과 연결해 주었다. - 이러한 공통 개념은 디자이너와 개발자가 서로의 작업 방식을 이해하는 접점이 된다. - Dev Mode는 특정 기능 하나를 넘어, 양쪽 직군이 같은 파일과 개념을 바탕으로 소통하는 협업 프레임워크를 제공한다. ## 개발자가 직접 도입을 제안해야 하는 이유 - 관리자는 실제 작업에서 한 단계 떨어져 있어 개발자가 겪는 불편과 생산성 저하를 놓칠 수 있다. - 개발자는 GitHub 이슈, 풀 리퀘스트 의견, Stack Overflow 답변처럼 필요한 개선을 직접 제안하는 데 익숙하다. - 같은 방식으로 1:1 미팅, 스프린트 회고, 팀 회의에서 디자인 도구와 개발자 경험의 문제를 구체적으로 제기할 수 있다. - 단순히 “새 도구가 필요하다”고 말하기보다, 현재의 반복 작업과 협업 비용을 어떤 기능이 어떻게 줄이는지 설명해야 설득력이 높아진다. ## 두려움 없이 디자인 파일 탐색하기 - Dev Mode는 기본적으로 읽기 전용이므로 개발자가 실수로 디자인 파일을 수정하거나 다른 사람의 작업을 덮어쓸 위험을 줄인다. - 개발자는 여백, 컴포넌트, 레이아웃 등을 자유롭게 클릭하며 파일 구조를 탐색할 수 있다. - 이는 Git의 `main` 브랜치 보호와 비슷한 안전장치로, 파일을 망칠까 봐 지나치게 조심하는 상황을 없앤다. - 결과적으로 디자인 파일을 이해하는 데 필요한 탐색 시간이 줄고, 개발자의 사용 자신감이 높아진다. ## 변경 사항을 명확하게 비교하기 - Dev Mode의 버전 기록과 변경 사항 비교 기능은 GitHub의 커밋 기록이나 풀 리퀘스트와 유사한 방식으로 동작한다. - 디자인의 여러 버전을 시각적으로 비교해 무엇이 언제, 누구에 의해 변경되었는지 확인할 수 있다. - 문구 변경, 여백 수정, 컴포넌트 변형 추가처럼 변경 항목을 구체적인 작업 목록으로 파악할 수 있다. - 이를 통해 개발자는 최신 디자인을 빠르게 이해하고, 구현 과정에서 누락된 변경 사항을 줄일 수 있다. ## 디자인 사양과 코드 사이의 탭 전환 줄이기 - 기존 개발자는 디자인 사양, 문서, 코드 저장소를 오가며 정보를 확인해야 했고, 이 과정에서 많은 시간이 소모됐다. - Dev Mode와 Code Connect 같은 기능은 디자인 정보와 실제 코드 구현 사이의 거리를 줄이는 방향으로 설계됐다. - 디자인 확인과 개발에 필요한 정보를 한 작업 흐름 안에서 연결하면 반복적인 검색과 컨텍스트 전환을 줄일 수 있다. - 이는 단순한 편의 기능을 넘어 개발자의 집중력과 전체 개발 속도에도 영향을 준다. ## 실용적인 적용 방향 - 현재 디자인 파일을 확인할 때 발생하는 실수, 정보 탐색, 탭 전환 시간을 구체적으로 기록한다. - Dev Mode의 읽기 전용 탐색, 버전 비교, 코드 연결 기능이 각각 어떤 문제를 해결하는지 사례로 제시한다. - 디자인 시스템 개편이나 원격·하이브리드 협업처럼 여러 직군의 긴밀한 조율이 필요한 프로젝트에서 먼저 적용한다. - 도구 도입 자체보다 디자이너와 개발자가 공유할 수 있는 언어와 작업 방식을 만드는 데 초점을 둔다.

figma

브랜칭을 만든 방법 (새 탭에서 열림)

Figma는 대규모 협업에서 실험적 변경과 승인된 디자인을 분리하기 위해 브랜칭을 구축했다. 메인 파일은 단일 진실 공급원으로 유지하고, 브랜치에서는 기존 디자인을 훼손하지 않으면서 아이디어를 탐색·검토·수정할 수 있도록 한 것이다. Figma는 소프트웨어 개발의 브랜치 개념을 그대로 복제하기보다, 클라우드 기반 멀티플레이어 협업에 맞춰 단순성과 일관성을 우선했다. ## 대규모 협업에서 자유와 구조의 균형 - 실시간 협업은 모든 사람이 같은 파일에서 작업할 수 있다는 장점이 있다. - 그러나 팀 규모가 커지면 다음과 같은 문제가 발생한다. - 승인되지 않은 변경 사항이 코드에 반영됨 - 작업 내용이 다른 사람에 의해 덮어써짐 - 진행 중인 작업(WIP)과 실제 배포 가능한 디자인을 구분하기 어려움 - 브랜치는 메인 파일을 직접 변경하지 않고 새로운 아이디어를 시도할 수 있는 탐색 공간이다. - 디자인 라이브러리에 기여하거나, 이해관계자에게 작업물을 미리 보여주거나, 실험적인 반복 작업을 진행할 때 특히 유용하다. - 충분히 검토·승인된 변경만 메인 파일에 반영함으로써 메인 파일의 무결성을 유지한다. ## 소프트웨어 브랜칭과 Figma의 차이 - 소프트웨어 개발의 브랜치는 일반적으로 변경 사항이 개발자의 로컬 컴퓨터에 저장되는 구조를 전제로 한다. - 반면 Figma 파일은 클라우드에 저장되며, 여러 사용자가 동시에 같은 파일에 접속해 변경한다. - 따라서 Figma는 다음과 같은 설계 문제를 검토해야 했다. - 메인 파일에서 여러 사용자의 동시 편집을 계속 허용할 것인가 - 브랜치에서도 여러 사람이 동시에 작업할 수 있게 할 것인가 - 기존 멀티플레이어 협업 경험에 복잡성을 얼마나 추가할 것인가 - 핵심 과제는 전통적인 버전 관리 방식을 그대로 적용하지 않고, 온라인 협업 환경에 맞는 브랜칭 모델을 만드는 것이었다. ## 단순성과 일관성을 우선한 설계 - Figma는 브랜칭과 멀티플레이어 편집을 하나의 일관된 버전 관리 방식으로 이해할 수 있도록 설계했다. - 메인 파일은 기존처럼 여러 사람이 동시에 편집할 수 있다. - 브랜치도 일반적인 Figma 파일과 동일한 방식으로 작동한다. - 편집자와 뷰어의 접근 권한 및 권한 관리 방식은 변경하지 않았다. - 사용자의 데이터가 어떤 상황에서도 안전하게 보존되도록 데이터 무결성을 우선했다. - 기능을 의도적으로 단순하게 유지하기 위해 브랜치에서 다시 브랜치를 만드는 기능은 제공하지 않았다. - 이는 기능을 많이 추가하기보다, 디자이너가 별도의 복잡한 개념을 학습하지 않고 사용할 수 있게 하려는 선택이다. ## 병합 과정에서 고려한 예외 상황 - 병합의 가장 어려운 문제는 단순히 충돌을 해결하는 것만이 아니다. - 실제 구현에서는 다음과 같은 상황도 처리해야 했다. - 사용자가 병합 내용을 검토하는 동안 원본 파일이 변경되는 경우 - 병합 작업 도중 네트워크 연결이 끊기는 경우 - 병합이 완료되기 전에 다른 사용자의 변경 사항이 추가되는 경우 - 따라서 병합 기능은 충돌 해결 알고리즘뿐 아니라, 검토 중인 상태의 일관성, 연결 손실, 동시 변경에도 사용자의 데이터가 안전하게 유지되도록 설계되어야 했다. - 제공된 글은 이러한 병합 문제를 설명하던 중 문장이 중단되어 있어, 구체적인 해결 방식 전체는 확인할 수 없다. 브랜칭은 메인 파일을 무분별한 실험의 공간으로 사용하는 대신, 승인된 결과와 진행 중인 작업을 분리하고 싶은 팀에 적합하다. 특히 디자인 시스템이나 제품 디자인을 여러 사람이 함께 관리한다면, 메인 파일은 안정적인 기준점으로 유지하고 브랜치에서 탐색·리뷰·협업한 뒤 승인된 변경만 병합하는 운영 방식을 추천할 수 있다.

figma

브랜칭 기능 소개: 자유롭게 (새 탭에서 열림)

Figma는 공유 파일을 보호하면서도 디자이너가 자유롭게 실험할 수 있도록 브랜칭 기능을 베타로 도입했다. 브랜치를 만들면 원본 파일과 분리된 공간에서 작업하고, 검토가 끝난 변경 사항만 메인 파일에 병합할 수 있다. 이를 통해 대규모 디자인 시스템의 일관성과 협업 속도를 함께 확보하려는 것이 핵심이다. ## 분산된 디자인 시스템이 만든 문제 - 여러 팀이 디자인 시스템을 사용하면서도 시스템이 여러 파일과 플랫폼에 분산되어 있었다. - 컴포넌트를 재사용해 생산성은 높아졌지만, 위치가 분산되어 도구 사이를 오가야 했고 구현 결과도 일관되지 않았다. - 넷플릭스의 Hawkins처럼 100명 이상의 디자이너가 참여하는 시스템에서는 최신 변경 사항이 실제 승인된 버전이라는 보장이 어려웠다. - 따라서 디자인 시스템을 중앙화하되, 승인되지 않은 변경이 공유 파일에 즉시 반영되지 않도록 하는 장치가 필요했다. ## 브랜치로 실험 공간과 원본 보호 - 디자이너는 기존 파일에서 브랜치를 생성해 새로운 아이디어와 반복 작업을 독립적으로 진행할 수 있다. - 브랜치의 변경 사항은 메인 파일에 자동 저장되지 않으므로, 실수나 미승인 변경으로 공유 파일이 오염되는 것을 방지한다. - 작업이 완료되면 편집자가 변경 내용을 검토한 뒤 메인 파일에 병합할 수 있다. - 결과적으로 공유 파일은 승인된 디자인 시스템의 기준점으로 유지되고, 브랜치는 자유로운 탐색 공간이 된다. ## 단순성과 일관성을 우선한 설계 - Figma는 일반적인 Git 방식처럼 별도의 커밋 작업을 요구하지 않기로 했다. - 브랜치 안의 작업은 Figma 파일과 마찬가지로 자동 저장된다. - 브랜치 안에서 다시 브랜치를 만드는 복잡한 구조도 배제했다. - 브랜치도 Figma의 멀티플레이어 협업 기능을 그대로 지원하므로 여러 사람이 동시에 작업할 수 있다. - 브랜칭을 별도의 복잡한 도구가 아니라 기존 파일 협업 경험에 자연스럽게 통합하는 것이 목표였다. ## 버전 관리의 확장 - Figma는 향후 리뷰 기능을 추가하면서 브랜칭과 멀티플레이어 작업을 아우르는 통합적인 버전 관리 방식을 모색하고 있다. - 사용자가 기능별로 서로 다른 버전 관리 개념을 익히지 않고, 하나의 일관된 방식으로 작업하도록 만드는 것이 방향이다. - 브랜칭은 조직 전체의 디자인 시스템을 중앙화하고 관리하는 기반 기능으로 제시됐다. ## 제공 범위 - 당시 브랜칭은 베타 기능으로 Figma Organization 요금제에서 제공됐다. - 사용자는 접근 신청을 해야 했으며, Figma가 순차적으로 사용자를 추가하는 방식이었다. - Professional 요금제 사용자는 Organization 요금제에 대해 영업팀에 문의하도록 안내됐다. 브랜칭은 대규모 팀에서 디자인 시스템을 운영할 때 특히 유용하다. 메인 파일에는 승인된 결과만 유지하고, 새로운 컴포넌트나 레이아웃은 브랜치에서 충분히 실험한 뒤 리뷰와 병합을 거치는 방식이 안정적인 협업 흐름을 만든다.

figma

Kiwi.com이 Figma에서 프로젝트 (새 탭에서 열림)

Kiwi.com은 여러 도구를 조합한 Sketch 중심 workflow에서 발생하는 동기화 문제를 해결하기 위해 모바일 디자인 시스템을 Figma로 옮기기 시작했다. 소규모 디자인팀과 약 20명의 협업자가 함께 작업하는 환경에서는 디자인, 프로토타입, 개발 전달, 버전 관리가 하나의 협업 공간에서 연결되는 것이 중요하다고 판단했다. 이 글은 Figma 도입 배경과 디자인 라이브러리·컴포넌트·프로젝트 구조를 정리하는 방식을 소개한다. ## Kiwi.com의 디자인 환경과 과제 - 모바일 디자인팀은 디자이너 2명으로 구성되어 있지만, 약 20명이 다양한 방식으로 디자인에 참여한다. - 디자인 시안에 댓글을 남기는 사람 - 카피를 수정하는 사람 - 여러 플랫폼을 아우르는 기능을 설계하는 사람 - 기존 프런트엔드 디자인과 디자인 시스템인 **Orbit**는 Sketch를 기반으로 운영되고 있었다. - 그러나 Orbit의 모바일 버전은 시각적으로 차이가 커서, 별도의 모바일 디자인 시스템을 Figma에서 시험하게 되었다. ## Sketch 기반 도구 조합의 동기화 문제 - 기존 workflow에서는 목적별로 여러 도구를 사용했다. - **Sketch**: 디자인 제작 - **Zeplin**: 개발자 핸드오프 - **Abstract**: 버전 관리 - **Marvel**: 정적 프로토타입 제작 - **Dropbox Paper**: 디자인 이미지 공유 - 도구가 분리되어 있어 최신 상태가 서로 달라질 수 있었다. - 프로토타입이 최신 테스트 버전을 반영하지 못함 - 작업자가 Abstract에 커밋하는 것을 잊음 - 승인된 최종 시안이 Zeplin에 업데이트되지 않음 - 문서에 첨부된 PNG가 몇 주 전 버전으로 남아 있음 - 각 도구는 독립적으로 작동하기 때문에, 팀이 수동으로 상태를 맞추지 않으면 디자인 산출물이 쉽게 불일치한다. ## Figma를 선택한 이유 - Figma 도입의 핵심 기대 효과는 디자인 파일, 협업, 프로토타입, 버전 이력을 한 환경에서 연결하는 것이었다. - 여러 도구 사이에서 최신 파일을 확인하고 전달하는 관리 비용을 줄일 수 있다. - 다수의 참여자가 디자인 과정에 관여하는 Kiwi.com의 환경에서는 중앙화된 협업 방식이 특히 유용하다. - 저자는 초기에는 브라우저 기반 도구인 Figma의 가치에 회의적이었지만, 실제 팀의 협업 문제를 경험하면서 Figma 도입의 필요성을 재평가하게 되었다. ## 글에서 다루는 디자인 시스템 운영 범위 - 글은 단순한 Figma 사용 후기가 아니라 다음 운영 주제를 함께 다룬다. - 모바일 디자인 시스템을 Figma로 구축한 이유 - Figma 업데이트 이후 달라진 작업 방식 - 디자인 라이브러리 컴포넌트의 설계 원칙 - 컴포넌트와 프로젝트 파일의 구조화 - 버전 이력 관리와 파일 정리 - 특히 여러 사람이 컴포넌트를 재사용하는 환경에서 일관성을 유지하고, 최신 디자인 자산을 쉽게 찾도록 구성하는 방법에 초점을 둔다. 여러 협업자가 디자인에 참여하고 도구별 최신 상태를 수동으로 맞추고 있다면, Figma처럼 디자인·프로토타입·협업을 한 공간에 통합하는 방식을 검토할 만하다. 다만 도구를 바꾸는 것만으로 문제가 해결되지는 않으므로, 컴포넌트 명명 규칙과 파일 구조, 버전 관리 원칙을 함께 정립하는 것이 중요하다.

figma

Sketch 사용자의 Figma 전환기 | 피 (새 탭에서 열림)

Figma는 Sketch의 기능을 대체하는 수준을 넘어, 실시간 협업과 웹 기반 작업 환경을 통해 디자인 프로세스 자체를 더 빠르고 단순하게 만든다는 것이 글의 핵심 주장이다. 자동 저장·공유, 프로토타이핑, 개발자 핸드오프, 버전 관리 등을 하나의 도구에 통합해 팀 간 동기화 비용을 줄인다. 특히 여러 지역에 분산된 제품 팀이라면 Sketch 중심의 기존 워크플로보다 Figma가 더 효율적이라는 결론이다. ## 웹 기반 실시간 협업 도구 - Figma는 브라우저에서 작동하는 디자인 도구이며, Sketch와 유사한 인터페이스와 기능을 제공한다. - 오프라인 작업을 위한 네이티브 앱도 지원한다. - 실시간으로 여러 명이 하나의 파일에서 작업할 수 있고, 서로의 커서와 변경 사항을 즉시 확인할 수 있다. - 파일이 클라우드의 공유 공간에 자동 저장되므로 별도의 저장·파일 정리 과정이 줄어든다. - 하나의 URL이 최신 디자인의 기준점이 되어 PNG 업로드, 파일 동기화, 링크 관리가 필요하지 않다. ## Sketch 생태계를 대체하는 통합 기능 글에서는 Figma가 Sketch뿐 아니라 Abstract, InVision, Craft, LiveShare, Freehand, Zeplin, Dropbox의 역할까지 상당 부분 통합한다고 설명한다. - **프로토타이핑**: 화면을 연결해 클릭 가능한 프로토타입을 만들 수 있다. - **댓글 기능**: 링크를 가진 사용자가 디자인의 특정 위치에 댓글을 남길 수 있으며, 사용자를 태그하거나 댓글을 해결 상태로 표시할 수 있다. Slack 연동도 가능하다. - **개발자 핸드오프**: 개발자가 URL을 통해 치수와 스타일을 확인하고 아이콘·이미지를 다운로드할 수 있다. - **버전 관리**: 모든 협업자의 변경 이력이 저장되며, 과거 버전으로 되돌리거나 해당 시점에서 새 작업을 시작할 수 있다. - **멀티플레이어 협업**: 여러 사람이 동시에 디자인을 수정하고 의견을 교환할 수 있다. - **화면 공유와 팔로우**: 특정 사용자의 아바타를 선택해 그 사람이 보고 있는 화면과 커서 움직임을 따라갈 수 있다. - **컴포넌트와 제약 조건**: Sketch의 심볼과 리사이징 기능에 해당하지만 더 유연하고 직관적으로 사용할 수 있다. - **팀 라이브러리**: 여러 프로젝트에서 컴포넌트 컬렉션을 공유하고 업데이트할 수 있다. - Dropbox Paper 문서에 Figma 프로젝트를 삽입할 수도 있다. ## 동기화 비용을 없애 더 빠르게 반복하기 - 디자인 리뷰 중에 수정하고, 수정 결과에 대한 피드백을 즉시 받을 수 있다. - 기존에는 디자인 파일 수정 후 InVision에 화면을 다시 업로드하거나, 프로토타입 순서를 재정렬하거나, 공유 링크를 다시 전달해야 했다. - Figma에서는 모든 참여자가 같은 파일을 보므로 이런 업로드·동기화·공유 과정이 사라진다. - 시간대가 다른 팀원이 작업물을 커밋하거나 업로드할 때까지 기다릴 필요가 없다. - 플러그인 업데이트로 기존 워크플로가 깨지는 문제도 줄어든다. - 결과적으로 디자인 반복 주기가 며칠 단위에서 몇 분 단위로 단축될 수 있다. ## 더 개방적이고 원활한 디자인 프로세스 - 디자인 파일 자체가 리뷰와 토론이 이루어지는 공동 작업 공간이 된다. - 디자이너뿐 아니라 개발자, 기획자 등 링크를 받은 팀원이 같은 화면에서 디자인을 확인하고 의견을 남길 수 있다. - 별도의 파일 전달이나 발표용 이미지 제작 없이 최신 상태의 디자인을 공유할 수 있다. - 실시간 협업과 댓글 기능은 원격·분산 팀이 디자인 논의에 참여하기 쉽게 만든다. ## 실용적인 결론 Sketch의 기존 기능과 플러그인에 크게 의존하는 팀이라도, Figma는 프로토타이핑부터 핸드오프·버전 관리·협업까지 하나의 환경에서 제공한다. 특히 여러 지역에 흩어진 팀이나 디자인 리뷰와 개발자 커뮤니케이션이 잦은 조직이라면, Figma 도입으로 파일 동기화와 반복적인 공유 작업을 우선 줄여볼 만하다.

figma

피그마 페이지를 소개합니다 (새 탭에서 열림)

Figma Pages는 하나의 파일 안에서 브레인스토밍, 와이어프레임, 최종 디자인 등을 여러 페이지로 나누어 관리할 수 있게 해주는 기능이다. 디자인 단계나 플랫폼별 작업을 분리하면서도 파일을 벗어나지 않고 탐색·편집할 수 있어 정리와 협업이 쉬워진다. 다만 페이지를 버전 관리 용도로 사용해 대형 파일을 반복 복제하면 성능이 저하될 수 있으므로, 버전 관리는 별도의 Version History를 사용해야 한다. ### 디자인 단계를 분리하는 페이지 구성 - 브레인스토밍, 와이어프레이밍, 픽셀 단위의 최종 작업을 각각 다른 페이지에 배치할 수 있다. - 초기 단계의 자유로운 스케치와 최종 결과물을 분리해 파일 내 혼란을 줄인다. - 여러 작업 단계를 하나의 파일에서 관리하므로 문서를 오가며 작업할 필요가 없다. ### 플랫폼과 요소별 분류 - 모바일 앱을 제작할 때 iOS 화면과 Android 화면을 별도 페이지에 구성할 수 있다. - 복잡한 인터페이스에서는 공유 컴포넌트, 아이콘 등 특정 요소를 별도 페이지에 모아 관리할 수 있다. - 하나의 파일에서 여러 프로토타입을 제작해야 할 때 프로토타입별로 페이지를 나눌 수 있다. ### 페이지 관리 방식 - 디자인 파일의 왼쪽 패널에서 페이지를 추가·전환·삭제할 수 있다. - 페이지 메뉴는 조작이 끝나면 자동으로 접히며, 패널을 Control-click하면 열린 상태로 고정할 수 있다. - 컴포넌트를 다른 페이지로 옮기려면 마우스 오른쪽 버튼을 클릭한 뒤 **Move to Page**를 선택하면 된다. - Sketch 파일을 가져올 때는 Sketch에서 구성한 페이지와 심볼 구조가 Figma에도 동일한 방식으로 import된다. - 페이지 수에는 제한이 없다. ### 썸네일과 파일 탐색 - 브라우저에서 파일을 쉽게 훑어볼 수 있도록 대표 썸네일에 사용할 페이지를 설정할 수 있다. - 왼쪽 패널에서 원하는 페이지를 첫 번째에 배치하면 해당 페이지가 파일 썸네일에 활용된다. ### 공유 시 개인정보와 접근 범위 - 특정 페이지만 공유하더라도, 공유받은 사람은 그 페이지가 포함된 파일의 나머지 내용도 볼 수 있다. - 따라서 페이지를 보안 경계나 접근 권한 분리 수단으로 사용해서는 안 된다. - 민감한 디자인을 분리해야 한다면 별도의 Figma 파일을 만들어야 한다. ### 버전 관리와 성능 주의사항 - 페이지를 버전 관리 목적으로 추가로 만드는 것은 권장되지 않는다. - Figma에는 별도의 Version History 기능이 있으므로 이전 버전 확인과 복원에는 이를 사용해야 한다. - 큰 디자인 파일을 여러 페이지에 반복 복제하면 파일 용량과 렌더링 부담이 커져 성능이 저하될 수 있다. 실무에서는 페이지를 작업 단계, 플랫폼, 디자인 요소, 프로토타입 단위로 나누고, 접근 권한 분리와 버전 관리는 각각 별도 파일과 Version History로 처리하는 것이 적절하다.