본문 바로가기

일상

같은 소스를 두 서비스로 배포할 때 태그 붙이는 법 (서비스별 접두어 태그)

반응형

소스 저장소 하나로 웹과 관리자 화면처럼 서비스 두 개를 따로 배포할 때, 태그가 겹쳐서 무엇을 어디에 반영했는지 헷갈리는 문제를 푸는 방법입니다.


사용자용 웹과 관리자용 화면이 같은 저장소에서 빌드되는 구조였습니다. 코드 대부분을 같이 쓰고, 빌드할 때 설정만 달리해서 두 서비스로 나눠 배포합니다.


문제는 태그였습니다. 웹을 배포하려고 만든 태그로 관리자 화면도 같이 배포하고 있어서, 태그 목록만 봐서는 그 태그가 웹 배포였는지 관리자 배포였는지, 둘 다였는지 알 수가 없었습니다.


평소에는 큰 문제가 없다가 두 서비스를 같은 날 따로 반영하는 날에 터집니다. 웹은 새 태그로 나가고 관리자는 예전 태그 그대로인데, 기록상으로는 둘이 구분되지 않습니다.


- 태그 하나를 두 서비스가 같이 쓰면 무엇을 어디에 반영했는지 기록이 남지 않는다

- 태그 이름에 서비스 접두어를 붙여 서비스마다 따로 만든다

- 같은 커밋에 태그 두 개가 붙어도 아무 문제가 없다

- 배포 잡에서는 자기 접두어 태그만 보이게 걸러준다


1. 태그 하나를 같이 쓸 때 생기는 일

태그는 원래 "이 커밋을 이 이름으로 배포했다"는 기록 역할을 합니다. 그런데 서비스 두 개가 태그 하나를 같이 쓰면 이 기록이 반쪽짜리가 됩니다.



특히 곤란한 게 롤백할 때입니다. 관리자 화면만 문제가 생겨 이전 버전으로 돌리려고 해도, 어느 태그가 관리자 기준으로 마지막 정상 버전이었는지 태그만으로는 알 수 없습니다.


2. 서비스 접두어를 붙여 따로 만든다

해결은 단순합니다. 태그 이름 앞에 서비스 이름을 붙이고, 서비스마다 태그를 따로 만듭니다. 웹을 배포할 때는 웹 태그를, 관리자를 배포할 때는 관리자 태그를 새로 딴 뒤 그 태그로 배포합니다.



두 서비스를 같은 커밋으로 한꺼번에 배포하는 날에는 같은 커밋에 태그가 두 개 붙게 됩니다. 이건 git 에서 전혀 문제가 되지 않고, 오히려 "이날 두 서비스가 같은 버전으로 나갔다"는 사실이 기록에 그대로 남습니다.


- 웹만 반영하는 날: 웹 태그만 새로 딴다

- 관리자만 반영하는 날: 관리자 태그만 새로 딴다

- 같이 반영하는 날: 같은 커밋에 태그 두 개를 단다


이렇게 하면 서비스별로 태그 목록을 보는 것만으로 배포 이력이 그대로 읽힙니다.


3. 배포 잡에서는 자기 태그만, 최신 태그가 먼저

태그가 서비스별로 나뉘면 배포할 때 다른 서비스 태그를 잘못 고르는 실수를 막아야 합니다. 젠킨스의 Git Parameter 를 쓴다면 태그 필터로 자기 접두어 태그만 보이게 할 수 있습니다.



실제로 배포 잡마다 태그 필터를 걸어 두니, 웹 배포 잡에는 웹 태그만, 관리자 배포 잡에는 관리자 태그만 떠서 고를 때 헷갈릴 일이 없었습니다. 정렬은 최신순으로 두고, 기본 선택값을 TOP 으로 설정했습니다. 그러면 빌드 화면을 열었을 때 목록 맨 위의 최신 태그가 미리 선택된 상태로 뜹니다.


대부분은 방금 딴 태그를 배포하니 확인하고 빌드 버튼만 누르면 되고, 예전 태그로 롤백할 때만 목록에서 직접 고르면 됩니다. 매번 긴 목록에서 최신 태그를 찾아 누르다가 한 칸 아래 태그를 잘못 고르는 실수도 같이 줄어듭니다.


참고로 태그를 고르는 화면이 있어도 소스를 받는 설정이 그 태그를 실제로 써야 의미가 있습니다. 이 부분은 젠킨스에서 태그를 골라 배포했는데 master가 나갈 때 에 따로 정리해 두었으니 태그 배포를 설정할 때 같이 확인해 보시면 좋습니다.


4. 규칙은 짧게, 이름은 정해진 모양으로

접두어 태그는 규칙이 흐트러지면 금방 다시 엉망이 됩니다. 그래서 모양을 하나로 정해두는 게 좋습니다.


- 서비스-버전 형태로 고정한다 (예: web-1.4.2, admin-1.4.2)

- 서비스 이름은 배포 잡 이름과 같은 말을 쓴다

- 태그는 배포 직전에 따고, 이미 배포한 태그는 옮기지 않는다


마지막 항목이 중요합니다. 이미 배포한 태그를 지웠다가 다른 커밋에 다시 붙이면, 같은 이름인데 내용이 다른 태그가 생겨 기록을 믿을 수 없게 됩니다.


5. 정리

같은 소스를 여러 서비스로 배포한다면 태그도 서비스 단위로 나눠야 기록이 제 역할을 합니다.


- 태그를 같이 쓰면 무엇을 어디에 반영했는지 남지 않는다

- 태그 앞에 서비스 접두어를 붙이고 서비스마다 따로 만든다

- 같은 커밋에 태그 여러 개는 문제가 되지 않는다

- 배포 잡에서는 태그 필터로 자기 태그만 보이고, TOP 으로 최신 태그를 미리 선택해 둔다

- 배포한 태그는 옮기지 않는다


태그를 따는 수고가 조금 늘어나는 대신, 나중에 "그때 뭐가 나갔지?"를 물었을 때 태그 목록만 보고 바로 답할 수 있게 됩니다.


여기까지 같은 소스를 두 서비스로 배포할 때 태그 붙이는 법에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!

반응형