AI

깃헙을 연결하면 크레딧을 주는 이유

클로드가 깃헙 계정을 연결하면 클라우드에서 쓸 선불 크레딧을 줍니다. 공짜로 주는 것이 아니라 무엇을 사는 것인지, 깃헙 문서에 적힌 권한 구조를 따라가며 읽었습니다.

크레딧, 깃헙 연결, 저장소와 이력이 순서대로 이어지는 도표
© Cho Works

클로드 화면에 안내가 하나 떴습니다. 깃헙 계정을 연결하면 클라우드에서 쓸 선불 크레딧을 준다는 내용이었습니다. 액수까지 적혀 있었습니다.

공짜로 주는 것은 없습니다. 저 크레딧이 무엇을 사는 것인지 알고 싶어서, 연결 버튼 뒤에서 실제로 무슨 권한이 오가는지 깃헙 공식 문서부터 읽었습니다. 액수는 제품 화면의 프로모션이라 공개 문서에서는 찾지 못했습니다. 그래서 숫자는 그대로 두고 구조만 봅니다. 구조는 문서에 다 적혀 있습니다.

연결이라는 한 단어에 두 가지가 들어 있다

깃헙 앱에는 인가와 설치가 있습니다. 비슷해 보이지만 다른 일입니다.

설치는 저장소 쪽입니다. 앱이 어느 저장소에 닿을지, 거기서 무엇을 읽고 쓸지를 정합니다. 인가는 계정 쪽입니다. 앱이 내 프로필을 확인하고, 내가 닿을 수 있는 것이 무엇인지 알고, 나를 대신해 행동하게 하는 것입니다.

둘은 따로 놉니다. 설치만 하고 인가를 안 할 수도 있고, 인가만 하고 설치를 안 할 수도 있습니다. 연결 화면의 버튼 하나가 둘 중 어느 쪽인지, 혹은 둘 다인지는 화면에 적힌 목록을 봐야 압니다.

인가 화면에서 승낙하는 것은 세 가지입니다. 내 깃헙 신원을 확인하는 것, 내가 접근할 수 있는 자원이 무엇인지 아는 것, 그리고 나를 대신해 행동하는 것입니다. 세 번째가 이 글의 주제입니다.

앱은 나와 앱이 둘 다 할 수 있는 것만 한다

여기가 제일 중요합니다. 대신 행동한다는 말이 내 권한을 통째로 넘긴다는 뜻은 아닙니다.

앱이 할 수 있는 것은 교집합입니다. 제가 저장소에 쓰기 권한이 있어도 앱에 읽기 권한만 있으면 앱은 읽기만 합니다. 제가 저장소 A 와 B 에 닿고 앱이 B 와 C 에 닿으면, 앱이 저를 대신해 닿는 곳은 B 하나입니다. 토큰은 주인이 가진 것 이상을 만들어 내지 못합니다.

반대쪽도 성립합니다. 앱이 조직에 설치되어 있어도 제가 못 보는 저장소는 앱도 저를 대신해서는 못 봅니다. 그래서 조직에 앱을 깔았다고 끝이 아니고, 구성원 각자가 인가를 해야 그 사람을 대신할 수 있습니다.

연결 화면에서 볼 것은 문구가 아니라 저장소 목록입니다. 전부 선택이 기본값으로 잡혀 있는지, 고를 수 있는지를 봅니다.

남는 이름은 내 이름이다

앱이 저를 대신해 한 일은 앱 이름이 아니라 제 이름으로 남습니다. 이슈에 댓글을 달면 제 프로필 사진이 작성자로 뜨고, 옆에 앱 배지가 함께 붙습니다.

감사 로그도 같습니다. 행위자는 저로 기록되고, 대신 programmatic_access_type 항목에 GitHub App user-to-server token 이라고 적힙니다. 사람이 직접 했는지 앱이 대신했는지는 그 한 줄로 갈립니다.

회사 저장소를 쓰신다면 이 문장을 한 번 더 읽으시는 편이 좋습니다. 커밋과 댓글의 책임은 계정 주인에게 남습니다.

연결하지 않으면 무슨 일이 일어나는가

클라우드 세션은 깃헙 연결 없이는 저장소를 집지 못합니다. 길은 둘입니다. 웹 온보딩에서 클로드 깃헙 앱을 인가하거나, 터미널에서 /web-setup 으로 이미 쓰던 gh 토큰을 넘기거나.

앱이 설치되지 않은 저장소에서 클라우드 세션을 열면 어떻게 될까요. 원격에서 받아 가지 못하니 로컬 저장소를 통째로 묶어 올립니다. 모든 브랜치의 이력이 들어가고, 추적 중인 파일의 미커밋 변경도 함께 올라갑니다. 자격 증명처럼 보이는 파일 이름은 빼고 뺀 목록을 알려 주지만, 그것은 이름으로 거르는 것입니다.

연결을 안 하면 안 올라가는 것이 아닙니다. 연결을 안 하면 더 많이 올라갑니다. 크레딧 안내문이 말하지 않는 부분이 여기입니다.

그래서 크레딧은 무엇을 사는가

세 가지를 산다고 읽었습니다.

첫째는 연결 상태 그 자체입니다. 한 번 인가된 연결은 계속 살아 있습니다. 크레딧은 한 번 쓰면 없어지지만 연결은 남습니다. 비용은 일회성이고 얻는 것은 지속형입니다.

둘째는 자동 고침이 도는 자리입니다. 앱이 설치된 저장소에서는 PR 의 CI 실패와 리뷰 댓글에 클로드가 스스로 반응해 고쳐 밀 수 있습니다. 사람이 시작하는 도구에서 사건이 시작하는 도구로 바뀝니다. 쓰는 횟수를 사람의 손이 아니라 저장소의 활동량이 정하게 됩니다.

셋째는 기록입니다. 세션과 브랜치와 PR 이 쌓이면 다음에도 같은 곳에서 여는 편이 싸집니다. 옮기는 비용은 도구가 아니라 쌓인 것에서 나옵니다. 기록하게 해 두는 것이 다음을 연다고 적은 적이 있는데, 그 이야기를 만든 쪽에서 되돌려 받은 셈입니다.

정리하면 크레딧은 할인이 아니라 진입 비용의 대납입니다. 처음 한 번을 대신 내 주고, 그다음부터는 습관이 값을 냅니다.

연결하기 전에 볼 세 가지

전략을 알았다고 연결이 나쁜 것은 아닙니다. 저는 연결했습니다. 대신 세 가지를 봅니다.

저장소 목록. 전부 선택 대신 필요한 것만 고릅니다. 앱이 닿는 범위가 교집합의 한쪽이므로, 이쪽을 좁히면 전체가 좁아집니다.

자동 고침. 켜면 댓글 하나가 작업을 부릅니다. 댓글로 배포가 도는 저장소라면 켜지 않습니다.

철회 경로. 인가는 언제든 검토하고 철회할 수 있습니다. 어디서 끊는지를 연결하기 전에 확인해 두면, 끊을 일이 생겼을 때 찾지 않아도 됩니다.

무료라는 말이 붙으면 값이 어디에 숨었는지 찾는 버릇이 필요합니다. 이번 경우 값은 돈이 아니라 접근 범위였고, 다행히 그 범위는 문서에 전부 적혀 있었습니다. 읽고 고르면 됩니다.