birchholt 직접 해보고 남기는 기록

자동화를 붙이기 전에 저장소를 먼저 쪼갰습니다

이 사이트는 원래 제 개인 위키 저장소 안에 폴더 하나로 들어 있었습니다. 지금은 별도 저장소로 나와 있습니다. 코드가 커져서가 아니라 아직 붙지도 않은 자동화 때문입니다.

계기 — 아직 일어나지 않은 일

이 사이트에 글을 자동으로 올리는 스크립트를 붙일 계획이 있었습니다. 붙이려면 그 스크립트에 저장소 쓰기 권한을 줘야 합니다.

토큰을 만들기 직전에 한 번 따져봤습니다. 이 토큰이 정확히 어디에 쓸 수 있게 되는가.

위키 저장소에 들어 있던 것

같은 저장소 안에 이런 것들이 있었습니다.

사이트 코드는 그중 폴더 하나였습니다.

토큰 하나가 이 전부에 쓰기 권한을 갖게 되는 구조였습니다.

토큰은 저장소보다 잘게 못 자릅니다

여기가 핵심이었습니다. 저는 막연히 “권한을 좁게 주면 되지"라고 생각하고 있었습니다.

좁힐 수 있는 단위가 저장소까지입니다. 어떤 저장소에 접근할지는 고를 수 있지만, 한 저장소 안에서 “이 폴더만"은 안 됩니다. 세밀한 권한 토큰이든, 배포 키든, 워크플로가 쓰는 기본 토큰이든 마찬가지입니다.

사이트 폴더에만 쓰기라는 권한은 만들 수가 없었습니다. 줄 수 있는 건 이 저장소 전체에 쓰기뿐입니다.

사고가 나야 문제인 게 아닙니다. 스크립트가 얌전히 돌아도, 토큰이 유출되지 않아도, 권한 범위가 필요보다 넓다는 사실 자체가 남습니다. 그리고 그 범위 안에 사이트와 아무 상관 없는 개인 기록이 들어 있었습니다.

흔한 기준이 틀렸습니다

이 시점에 제가 처음 세운 기준은 이거였습니다.

라이브에 배포되는 것을 분리한다

말이 되는 것 같지만 적용해보니 이상한 결과가 나왔습니다.

같은 위키에는 티스토리 블로그 스킨 두 벌도 들어 있습니다. 이건 편집하면 실제 서비스가 바뀌는, 완전히 라이브인 물건입니다. 위 기준대로면 이것도 빼내야 합니다.

그런데 뺄 이유가 없었습니다. 스킨은 제가 손으로만 고칩니다. 토큰이 붙을 일이 없습니다.

기준을 고쳐 적었습니다.

자동화가 쓰기 권한을 갖는 것을 분리한다

라이브인가자동화가 쓰는가결과
이 사이트분리
티스토리 스킨 2벌아니오그대로 둠

「라이브 배포 여부」와 「자동화가 쓰는가」는 자주 같이 가지만 같은 기준이 아닙니다. 그리고 권한을 나눌 때 필요한 건 뒤쪽입니다.

다른 방법은 없었나

저장소를 쪼개는 건 되돌리기 번거로운 일이라, 안 쪼개고 되는 길부터 찾아봤습니다. 셋을 봤고 셋 다 같은 벽에 부딪혔습니다.

서브모듈로 두기. 사이트 폴더만 별도 저장소로 만들어 위키 안에 얹는 방식입니다. 그런데 이건 결국 저장소를 하나 더 만드는 것입니다. 분리는 이미 일어나고, 거기에 서브모듈 관리 비용만 얹힙니다. 얻는 게 없었습니다.

브랜치를 갈라서 자동화는 한 브랜치만 쓰게 하기. 토큰 권한이 브랜치 단위로도 안 잘립니다. 브랜치 보호 규칙은 누가 push할 수 있는지를 정하는 것이지 토큰이 닿는 범위를 좁히는 장치가 아닙니다. 그리고 개인 기록은 어차피 기본 브랜치에 그대로 있습니다.

민감한 것만 빼내기. 위키에서 뺄 것을 골라보려 했는데, 골라낼 대상이 대부분이었습니다. 조사 기록과 결정문이 위키의 본체지 부록이 아닙니다. 남길 것을 고르는 쪽이 훨씬 적었고, 그게 사이트 폴더 하나였습니다.

⇒ 우회로를 찾다가 원래 답으로 돌아왔습니다. 나갈 것은 사이트 쪽입니다.

나중에 하면 비싸집니다

미룰 수도 있었습니다. 자동화가 아직 안 붙었으니까요.

미루면 비싸지는 이유가 명확했습니다. 지금은 폴더를 옮기고 원격 주소만 새로 잡으면 끝입니다. 자동화가 몇 달 돌고 나면 그 저장소에는 자동 커밋 이력이 쌓입니다. 그때 분리하려면 이력까지 갈라내야 하고, 그건 전혀 다른 난이도입니다.

“나중에 정리하자"의 비용이 시간이 갈수록 오르는 종류라서 먼저 했습니다.

실제로 한 일

옮기는 것 자체는 짧았습니다. 정작 신경 쓴 건 끊어지는 링크였습니다.

위키에는 이 사이트를 왜 이렇게 만들었는지에 대한 기록이 여러 편 있습니다. 어떤 정적 생성기를 왜 골랐는지, 무엇을 올릴지 같은 것들입니다. 폴더를 들어내면 그 기록들이 가리키는 곳이 사라집니다.

그래서 원래 자리에 문서 한 장을 남겼습니다. 코드는 없고 이런 것만 적혀 있습니다.

몇 달 뒤의 저는 분명히 원래 자리부터 찾아볼 겁니다. 그때 빈 자리를 만나지 않게 하는 게 이 문서의 목적입니다.

부수 이점 하나

의도한 건 아닌데 따라온 게 있습니다.

호스팅을 저장소 연동 방식으로 바꾸고 싶어지면, 저장소 루트가 곧 사이트 루트여야 설정이 단순합니다. 폴더 하나가 사이트인 구조에서는 빌드 경로를 따로 지정해야 합니다.

분리하고 나니 그 설정이 그냥 필요 없어졌습니다.

정리