지난 9월 12일 서울 위워크 삼성점에서 GitLab 코리아 17번째 밋업이 오프라인으로 진행됐습니다. 이날 행사는 코로나19에 따른 ‘사회적 거리 두기’ 해제 조치 이후 ‘인포그랩과 GitLab 코리아의 첫 오프라인 밋업’이라는 의미가 있었죠. 밋업 주제는 **‘효율성과 생산성 높이는 GitLab 마이그레이션’**이었습니다. 밋업은 두 개의 세션으로 진행됐는데요. 세션 1에서는 유인철 GitLab 코리아 이사가 **‘GitLab 마이그레이션으로 얻는 유익’**을 주제로 발표했고요. 세션 2에서는 인포그랩 DevOps 팀에서 **‘Jira, GitLab으로 쉽게 마이그레이션 하기’**를 주제로 발표와 시연을 선보였죠. 이 글에서는 이날 밋업의 주요 발표 내용을 살펴보겠습니다.
GitLab의 주요 마이그레이션 기능 이모저모
세션 1에서는 GitLab의 주요 마이그레이션 기능과 GitLab 마이그레이션의 성공 사례를 다뤘는데요. 유인철 GitLab 코리아 이사는 GitLab의 마이그레이션 기능을 1)Self-managed(자체 관리형)에서 SaaS로, 2)GitHub 또는 Bitbucket 또는 Jira에서 GitLab으로, 3)기타 도구에서 GitLab으로 마이그레이션 하는 기능 이렇게 3가지로 나눠 소개했습니다. 특히 각 기능이 필요한 상황과 고려할 점, 준비사항, 마이그레이션 될 내용, 마이그레이션 방법 등을 자세히 알아봤어요.
1.Self-managed → SaaS
마이그레이션 방법 | 내용 |
---|---|
Project Export/Import | GUI 기반으로 이관 |
Group Export/Import | 그룹 구성 정보만 주고받을 수 있음 |
Direct Transfer | 별도 파일을 이동하지 않고 그룹, 서브그룹, 프로젝트를 GitLab.com에 전송 |
유 이사는 Self-managed에서 SaaS로 마이그레이션 해야 하는 상황을 이렇게 설명했습니다. 1)GitLab 인스턴스를 관리하는 데 부담을 느낄 때, 2)매달 새로운 기능을 적용하는 업그레이드가 부담될 때, 3)공유 러너(Runner)를 최대한 활용해서 서버를 효율적으로 이용할 때, 4)고가용성이 필요할 때, 5)더 안정적인 개발 환경이 필요할 때, 6)전 세계 어디서든 바로 작업할 수 있는 개발 환경이 필요할 때이죠.
그러나 Self-managed에서 SaaS로 마이그레이션 하기에 앞서 미리 고려할 점이 있다고 해요. 첫째, Self-managed와 SaaS 간 기능 차이를 알아야 합니다. 일례로 맞춤형 git hooks는 지원되지 않고요. push rules를 사용해야 한다고 합니다. 둘째, 프로젝트 사이즈도 검토해야 하죠. 5GB 이하로 프로젝트 사이즈를 줄여야 합니다. 셋째, 러너 사용 전략을 고민해야 해요. GitLab에서는 공유 러너를 이용한 모든 job 시간의 합계를 ‘컴퓨터 할당량’이라고 하는데요. 이를 최대한 활용해야 합니다. 참고로 한 달 동안 사용할 수 있는 공유 러너 시간에는 제한이 있습니다.
이어서 유 이사는 Self-managed에서 SaaS로 마이그레이션 하는 방법 두 가지를 소개하고, 장단점을 각각 짚었습니다. 첫째, Project Export/Import 기능인데요. 이 기능을 사용하면 GUI(그래픽 사용자 인터페이스) 기반으로 이관할 수 있습니다. 내보내는(export) 파일이 5GB 이하면 쉽게 진행할 수 있죠. 그러나 5GB가 넘는 프로젝트에는 제약이 있고요. 동일한 사용자를 미리 만들어야 합니다.
둘째, Direct Transfer 기능인데요. 이 기능은 GitLab 15.6 버전부터 본격적으로 지원되고 있습니다. Direct Transfer 기능을 사용하면 별도 파일을 이동하지 않고도 그룹, 서브그룹, 프로젝트를 GitLab.com에 전송할 수 있는데요. ‘프로젝트까지 전송할지’ 여부도 선택할 수 있죠. 기능은 계속 업데이트되고 있고요. 일부 기능은 베타 단계이지만 정상적으로 동작합니다.
2.GitHub → GitLab
사전 준비 사항 |
---|
1.GitLab에서 Maintainer 권한이 있는 사용자가 수행 |
2.프로젝트에 있는 GitHub 계정은 외부 연결 메일 계정이 있어서 GitLab 과 매핑 가능 |
3.사용자 매핑 위해 GitHub의 이메일 주소가 GitLab에도 있어야 함 |
4.GitLab에서 import source로 GitHub이 활성화돼야 함 |
GitLab은 GitHub에서 GitLab으로 마이그레이션 하는 기능을 지원하고 있죠. 지난 8월 인포그랩 기술 블로그에서도 이를 자세히 소개했습니다. GitHub에서 GitLab으로 마이그레이션 할 때, Repository description(리포지터리 설명), Git repository data(Git 리포지터리 데이터), Branch protection rules(브랜치 보호 규칙), Collaborator(협업자), Issue, Pull request 등을 마이그레이션 할 수 있는데요. 이 밖에도 수많은 데이터를 마이그레이션 할 수 있죠. 앞서 언급한 인포그랩 기술 블로그에서 이 내용을 자세히 확인할 수 있습니다.
유 이사는 GitHub에서 GitLab으로 마이그레이션 할 때 사전 준비 사항으로 다음 내용을 제언했는데요. 첫째, GitLab에서 Maintainer 권한이 있는 사용자가 수행해야 합니다. 둘째, 프로젝트에 있는 GitHub 계정은 외부 연결 메일 계정이 있어서 GitLab과 매핑할 수 있죠. 셋째, 사용자 매핑을 위해 GitHub의 이메일 주소가 GitLab에도 있어야 합니다. 넷째, GitLab에서 import source로 GitHub이 활성화돼야 하는데요. 이는 Self-managed 사용자에게 적용되는 내용입니다.
GitHub Action에서 GitLab CI로 마이그레이션 할 수도 있죠. 이는 수동으로 진행해야 하지만 작업하기 쉽다고 하는데요. 첫번째, 마이그레이션 한 뒤에 .github/workflows
폴더를 보면 lint.yml
, smoke.yml
, unit.yml
이렇게 Action 파일 3개를 볼 수 있습니다. 두번째, import 된 프로젝트로 가서 WebIDE를 수행하고요. 세번째, 프로젝트 root에 .gitlab-ci.yml
파일을 생성합니다. 넷째, 앞서 언급한 Action 파일 3개의 주요 job 내용을 수동으로 복사해서 구성하고요.
3.Bitbucket 등 기타 도구 → GitLab
사전 준비 사항 |
---|
1.GitLab에서 Maintainer 권한이 있는 사용자가 수행 |
2.GitLab에서 import source로 Bitbucket이 활성화돼야 함 |
GitLab은 Bitbucket에서 GitLab으로 마이그레이션 하는 기능도 지원합니다. 마이그레이션 되는 데이터와 마이그레이션 되지 않는 데이터를 잘 구분해야 하는데요. 유 이사는 각 데이터를 다음과 같이 설명했습니다. 마이그레이션 할 수 있는 데이터는 Repository description, Git repository data, Pull request, Pull request comments입니다. 그러나 Pull request approval과 Attachments in Markdown, Task list, Emoji reaction은 마이그레이션 할 수 없고요.
Bitbucket에서 GitLab으로 마이그레이션 할 때는 다음 사항을 미리 준비해야 한다고 하죠. GitLab에서 Maintainer 권한이 있는 사용자가 수행해야 합니다. 또 GitLab에서 import source로 Bitbucket이 활성화돼야 하는데요. 이는 Self-managed 사용자에게 적용되는 내용입니다. 이밖에 유 이사는 GitLab으로 마이그레이션 할 수 있는 플랫폼으로 Bitbucket Cloud, Bitbucket Server, Clear Case, CVS, FogBugz, Gitea, Perforce, TFVC, Jira 등도 소개했습니다.
GitLab 마이그레이션 성공 사례 누가 있나
많은 조직이 GitLab으로 마이그레이션 해 개발 효율성과 생산성을 높이고 있는데요. 유 이사는 국내외에서 GitLab으로 마이그레이션 한 성공 사례를 여러 가지 공유했습니다. 이 글에서는 세 가지 사례를 추렸습니다.
1.B사(Bitbucket → GitLab)
B사는 Bitbucket에서 GitLab으로 마이그레이션 했는데요. 이 회사는 하나의 제품으로 CI/CD까지 수행할 수 있는 환경이 필요했습니다. 아울러 고가용성 또는 재해복구 환경을 구축하는 확장 가능한 솔루션도 원했는데요. B사는 프로젝트 약 100개를 Bitbucket에서 GitLab으로 마이그레이션 했습니다. GitLab에서 제공하는 UI를 사용해 진행했고요. 사용자 계정은 미리 매핑했죠. 이 회사는 GitLab Ultimate 에디션을 사용하고 있는데요. 다양한 보안 검증 스캐너를 활용해 보안 검사를 수행합니다. 올해 업그레이드 과정에서 Geo 서버 간에 불일치가 있었지만 재동기화 기능을 사용해 문제를 해결했고, 정상 작동 중이라고 하죠.
2.Verizon(Jenkins → GitLab CI)
Verizon은 Jenkins에서 GitLab CI로 마이그레이션을 진행했습니다. 이 회사는 마이그레이션에 약 1년을 투자했는데요. 이와 관련해 다음 작업을 수행했습니다. 데이터 마이그레이션과 이관 작업을 진행했고요. 표준 CI/CD 템플릿을 작성했죠. 또 연관된 시스템과 연동 이슈를 검토하고 해결했고요. 자동 스케일 아웃되는 공유 러너를 구축했습니다. 사용자를 교육하고, 전체 프로젝트도 관리했고요.
3.OW2(Jira → GitLab)
OW2는 Jira에서 GitLab으로 마이그레이션 했는데요. 이곳은 Jira 정보를 그대로 유지하도록 별도의 마이그레이션 도구를 개발했습니다. 이로써 이슈 간 연결 관계, 이슈 생성과 업데이트 날짜, 커밋과 이슈 간 연결 관계를 유지했죠. OW2는 오픈 소스 커뮤니티를 위한 비영리 조직인데요. 커뮤니티에서는 GitLab으로 마이그레이션 한 데 긍정적 반응을 보였습니다. 이들은 GitLab의 이슈 추적, 워크플로에 만족하고요. 매일 사용하면서 생산성 향상을 경험한다고 하죠.
Jira에서 GitLab으로 마이그레이션 해야 할 이유
세션 2에서는 Jira에서 GitLab으로 마이그레이션 하는 방법과 마이그레이션 이후 GitLab으로 프로젝트를 협업하는 방법을 다뤘습니다. 먼저 신철호(Dexter) 인포그랩 이사가 Jira에서 GitLab으로 마이그레이션 해야 하는 이유를 설명했는데요. Jira 서버(Server) 제품의 지원 중단 문제와 사용자에게 주어진 선택지의 실효성, DevOps 측면에서 GitLab이 대안인 이유를 각각 살펴봤습니다.
1.Jira 서버 제품 지원 중단
세션 2 발표 중 Jira 서버 제품 지원 중단 내용. 출처=인포그랩2024년 2월 15일부터 Jira의 서버 제품 지원이 중단되는데요. 기존 서버 사용자는 ‘Jira 클라우드(Cloud) 제품으로 갈지, Jira 데이터 센터(Data Center) 제품으로 갈지’ 선택의 기로에 서 있습니다. 일례로 데이터 센터 제품으로 가려면 비용이 상당합니다. 이 제품의 라이선스당 사용자 수는 500명 단위인데요. 1500명 상업용 연간 가격은 4만2000달러(한화 5590만원)이죠. 그다음 단계인 5011000명 가격은 7만2000달러(한화 9580만원)고요. 조직이 감당하기에 부담스러울 수 있습니 다.
신 이사는 사용자가 선택할 수 있는 대안으로 몇 가지 도구를 제시했습니다. Pivotal Tracker, IBM Engineering Requirements Management DOORS Next, Rally Software, GitLab, ServiceNow Agile Development, GitHub이 있죠. 신 이사는 “여기서 제일 좋은 선택은 조직에서 잘 쓰는 도구로 전환하는 것인데 GitLab이 좋은 대안이 될 수 있다”고 말했습니다. 이어서 일하는 방식의 변화 측면에서 조직이 요구받는 상황을 살펴봤어요.
2.DevOps 필요성 대두
세션 2 발표 중 Agile과 DevOps 관련 내용. 출처=인포그랩먼저 Agile과 DevOps가 부상했죠. 신 이사에 따르면, 2018~2019년 국내에 Agile 붐이 폭발적으로 일면서 ITSM(IT 서비스 관리)에도 Agile이 완성형으로 만들어졌고요. 그 이후 **‘이제 Agile만으로 소프트웨어 개발의 전체 라이프사이클에 필요한 툴셋을 사용하기 어렵다’**는 판단에 DevOps 니즈가 많이 생겼습니다. 신 이사는 “Jira가 Agile의 완성형을 갖춘 도구라면, GitLab은 DevOps의 완성형 도구”라고 설명했습니다.
과거에는 워터풀 방식과 Agile 방식을 섞어서 3개월, 6개월 단위로 일하며 이터레이션을 돌렸고요. 완료하지 못한 일은 마지막 이터레이션을 돌리며 릴리즈했습니다. 현재는 스프린트가 끝났을 때 릴리즈하고, 완료하지 못한 일을 스프린트 끝에 진행하다가 이제 필요할 때 언제든지 릴리즈하는 환경으로 바뀌고 있죠. 신 이사는 “그렇게 되려면 Agile만으로 안 되고, DevOps로 소프트웨어 전체 라이프사이클에 필요한 협업 과정을 완성형으로 만들어야 한다”고 설명했습니다.
3.포인트 솔루션 한계
세션 2 발표 중 포인트 솔루션 한계 내용. 출처=인포그랩이러한 DevOps를 무엇으로 구현할 수 있을까요? 시중에는 여러 도구가 있습니다. 지속적 테스트 도구, CI 도구, SCCM(System Center Configuration Manager) 도구 등이 그 예죠. DevOps를 구현하기 위해 여러 도구를 사용하면 팀 간에 의사소통 문제, 높은 학습곡선 문제, 변화 관리 문제 등이 생길 수 있습니다. 신 이사는 “새로운 버전이 업그레이드되거나, 입 퇴사자가 빈번하게 생기거나, 그에 따른 도구 변화 관리 asset을 충분히 만들지 않으면 여러 도구를 쓰면서 많은 장애물이 발생한다”고 말했습니다. 그러나 GitLab은 단일 도구 안에서 소프트웨어 전체 라이프사이클에 필요한 기능을 모두 갖추는 방향으로 발전하고 있고요. 현재 많은 부분에서 완성형을 띄고 있죠.