2024년 7월 25일, AWS는 CodeCommit 서비스와 관련해 중요한 내용을 발표했습니다. 공식 블로그 게시물에 자세히 설명한 대로, AWS는 CodeCommit에 신규 고객 액세스를 종료하기로 했습니다. 기존 고객은 서비스를 계속 사용할 수 있지만 AWS는 보안, 가용성, 성능 개선에만 집중하고, 새로운 기능을 도입하지 않을 예정입니다.

이번 발표로 개발팀은 리포지터리를 다른 Git 제공업체로 마이그레이션하는 걸 고려하고 있습니다. 이러한 변화에 따라 GitLab으로 마이그레이션하고 다른 AWS 서비스와 통합하는 팀을 지원하고자 종합 가이드를 준비했습니다.

참고: AWS의 공식 마이그레이션 권장 사항의 자세한 내용은 해당 블로그 게시물을 참조하세요.

가이드 소개

이 가이드는 AWS 서비스와 통합을 고려하거나, AWS 호스팅 Git 리포지터리에서 GitLab.com으로 마이그레이션을 계획하며 GitLab을 사용하는 개발팀에 종합적인 정보를 제공합니다. 가이드는 네 가지 주요 섹션으로 구성됐습니다.

  • GitLab으로 병렬 마이그레이션: 위험을 최소화하며, 기존 AWS 호스팅 리포지터리에서 GitLab.com으로 점진적으로 마이그레이션하는 방법을 설명합니다.
  • AWS CodeBuild와 통합: GitLab 리포지터리를 AWS CodeBuild와 통합해 강력한 지속적 통합(CI) 환경을 설정하는 단계를 알려줍니다.
  • AWS CodePipeline과 통합: 효율적인 지속적 배포(CD) 파이프라인을 구축하기 위해 GitLab 리포지터리를 AWS CodePipeline과 연결하는 방법을 자세히 설명합니다.
  • CodePipeline과 CodeStar Connections를 위한 다운스트림 통합: 광범위한 서비스 액세스를 위해 GitLab-AWS 연결을 활용해 AWS 생태계 전반에 일련의 통합 가능성을 여는 방법을 소개합니다.

이 가이드에서는 GitLab과 AWS의 강력한 기능을 결합해 효율적이고 유연한 개발 워크플로를 만드는 방법을 배울 수 있습니다.

섹션 1: GitLab에 병렬 마이그레이션

AWS에서 호스팅되는 Git 리포지터리를 GitLab.com으로 마이그레이션하려는 사람들에게, 단계적 접근 방식인 이 섹션은 위험을 최소화하며 마이그레이션을 수행하는 방법을 소개합니다. GitLab의 Mirroring 기능을 활용하면, 기존 개발 흐름을 유지하며 새 환경을 테스트할 수 있습니다.

병렬 마이그레이션이 중요한 이유

대규모 시스템 마이그레이션에는 항상 위험이 있고, 이는 진행 중인 개발 작업, 기존 통합, 자동화된 프로세스에 잠재적 영향을 미칠 수 있습니다. 병렬 마이그레이션 접근 방식을 채택하면, 다음 이점이 있습니다.

  1. 위험 최소화: 기존 시스템을 계속 운영하며, 새로운 환경을 테스트할 수 있습니다.
  2. 원활한 전환: 개발팀은 새로운 시스템에 점진적으로 적응할 수 있습니다.
  3. 통합 테스트: 새로운 환경에서 모든 통합과 자동화를 철저히 테스트합니다.
  4. 미래 대비: 팀이 기존 CI와 병행해 GitLab CI/CD에 점진적으로 마이그레이션할 수 있습니다.

GitLab으로 바로 전환하려는 게 이미 알려졌다면, 병렬 마이그레이션이 필요하지 않습니다.

GitLab.com 마이그레이션 단계

1단계: GitLab.com에서 설정하기

  • 여러분 회사가 GitLab.com에 이미 사용하는 그룹이 있는지, SSO(Single Sign-On)가 설정됐는지 확인하세요. 설정됐다면 모두 사용하는 게 좋습니다.
  • 여러분 회사가 GitLab.com에 그룹이 없다면, GitLab.com을 방문해 새 계정을 만들거나, 기존 계정에 로그인하세요.
  • 새 회사 네임스페이스(GitLab.com의 root 레벨 그룹)를 만듭니다.
  • 회사 전체를 반영하는 이름을 선택합니다(아직 사용하지 않은 이름).

2단계: 리포지터리 가져오기

병렬 마이그레이션에서는, GitLab의 pull mirroring 기능을 사용해 AWS 호스팅 리포지터리의 변경 사항을 GitLab.com에 자동으로 동기화합니다.

  1. 대상 그룹 GitLab.com으로 이동합니다.
  2. 오른쪽 상단에 “New Project”를 클릭합니다.
  3. Create new project” 페이지에서 “Import project”를 클릭합니다.
  4. Import project” 페이지에서 “Repository by URL”을 클릭합니다.
  5. Git repository URL” 필드에 AWS 호스팅 리포지터리의 URL을 입력합니다.
  6. Git 리포지터리 URL 필드 아래에 “Mirror repository”를 체크합니다.
  7. 인증 설정: AWS CodeCommit Console에서 마이그레이션할 리포지터리의 Clone URL을 선택합니다. CodeCommit 리포지터리를 GitLab에 가져올 때, HTTPS CodeCommit URL을 사용해 GitLab Repository Mirroring으로 리포지터리를 복제할 수 있습니다. 또한 GitLab 내에서 ID와 액세스 관리(IAM) 사용자를 위해 AWS의 Git 자격 증명을 제공해야 합니다. 이 AWS 가이드에 따라 AWS CodeCommit용 Git 자격 증명을 만들 수 있습니다.
    AWS CodeCommit Console의 Clone URL. 출처=GitLab | 인포그랩 GitLab
    AWS CodeCommit Console의 Clone URL. 출처=GitLab

이 설정은 기본적으로 5분마다 AWS 호스팅 리포지터리에서 GitLab.com으로 변경 사항을 자동으로 가져옵니다.

자세한 내용은 GitLab Repository Mirroring 문서를 참조하세요.

3단계: 통합 테스트, 검증하기

  1. CI/CD 파이프라인: 기존 파이프라인을 복제하기 위해 GitLab CI에서 .gitlab-ci.yml 파일을 설정합니다. 다른 CI 도구에서 GitLab CI/CD로 마이그레이션 계획의 자세한 내용을 확인하세요.
  2. 이슈 추적: 프로젝트 이슈를 가져오고 워크플로를 테스트하세요.
  3. 코드 리뷰: Merge request 프로세스와 테스트 리뷰 워크플로를 설정합니다.

4단계: 점진적 마이그레이션하기

  1. 소규모 또는 중요하지 않은 프로젝트부터 시작해 GitLab.com에서 작업하는 데 익숙해지세요.
  2. 팀원에게 교육을 제공하고, 새로운 워크플로에 적응할 시간을 주세요.
  3. 통합과 워크플로에 문제가 없는지 확인하며, 점진적으로 더 많은 프로젝트를 마이그레이션하세요.

자세한 내용은 CodeCommit, GitLab 마이그레이션 자동화를 참조하세요.

5단계: 마이그레이션 완료하기

모든 테스트와 검증이 완료되고 팀이 새 환경에 익숙해지면, 전체 마이그레이션을 계획하세요. 프로젝트마다

  1. 마이그레이션 날짜를 정하고, 모든 이해관계자에게 알립니다.
  2. 최종 데이터 동기화를 수행합니다.
  3. GitLab 프로젝트에서 Mirroring 설정을 제거합니다.
  4. AWS 호스팅 리포지터리를 읽기 전용으로 설정하고, 모든 개발 작업을 GitLab.com으로 전환합니다.

6단계: 새로운 기능 채택 평가하기

개발자를 위한 GitLab의 협업, 워크플로 자동화 기능은 CodeCommit보다 훨씬 더 많습니다. ‘이러한 기능이 무엇인지’ 파악하세요. 특히 Merge request 프로세스는 CodeCommit보다 더 풍부합니다.

GitLab에서 리포지터리가 안정화되면, 기존 솔루션과 병행해 GitLab CI/CD를 매우 쉽게 실험할 수 있습니다. 팀은 프로덕션 워크플로에 영향을 주지 않으면서, GitLab CI/CD 자동화를 완성하는 데 시간을 할애할 수 있습니다.

또한 GitLab 아티팩트 관리는 릴리즈 기능과 다양한 패키지 레지스트리로 매우 강력합니다.

섹션 1 요약

GitLab에 병렬 마이그레이션 접근 방식을 채택하면, 위험을 최소화하며 원활하게 전환할 수 있습니다. 이 프로세스로 팀은 새로운 환경에 점진적으로 적응하고, 모든 통합과 자동화가 올바르게 작동하도록 할 수 있습니다. 컷 오버 마이그레이션은 ‘병렬 마이그레이션이 필요하지 않다’고 알려졌을 때만 단일 설정 체크박스를 생략합니다.

섹션 2: GitLab과 AWS CodeBuild 통합

이 종합 가이드는 AWS CodeBuild로 GitLab 리포지터리에서 코드를 빌드하고 테스트하려는 이들에게 효율적인 CI 파이프라인 설정을 돕습니다.

전제 조건

  • GitLab.com 계정
  • AWS 계정
  • AWS CLI(구성됨)

통합 단계

1단계: AWS CodeStar Connections에서 GitLab 연결 생성하기

  1. AWS Management Console에 로그인하고 CodeBuild 서비스로 이동합니다.
  2. 왼쪽 탐색 패널에서 “Settings” > “Connections”를 선택합니다.
  3. Create connection” 버튼을 클릭합니다.
  4. 공급자로 “GitLab”을 선택합니다.
  5. 연결 이름을 입력하고 “Connect to GitLab”을 클릭합니다.
  6. GitLab 인증 페이지로 리디렉션됩니다.
  7. 필요한 권한을 승인합니다.
  8. 성공하면, 연결 상태가 “Available”로 변경됩니다.
    AWS CodeStar Connections 설정. 출처=GitLab | 인포그랩 GitLab
    AWS CodeStar Connections 설정. 출처=GitLab

2단계: AWS CodeBuild 프로젝트 생성하기

  1. CodeBuild 대시보드에서 “Create build project”를 클릭합니다.
  2. 프로젝트 이름과 설명을 입력합니다.
  3. 소스 설정에서는 공급자로 “GitLab”을 선택합니다.
  4. 방금 생성한 연결을 선택하고, GitLab 리포지터리와 브랜치를 지정합니다.
    AWS CodeBuild 프로젝트 생성. 출처=GitLab | 인포그랩 GitLab
    AWS CodeBuild 프로젝트 생성. 출처=GitLab

참고: 3단계부터 특정 환경과 필요에 따라 설정을 구성하세요.

섹션 2 요약

이 섹션은 GitLab 리포지터리를 AWS CodeBuild와 통합하는 방법을 자세히 설명했습니다. 이 설정으로 GitLab의 코드 변경 사항이 AWS CodeBuild를 사용해 자동으로 빌드되고, 테스트 되는 지속적 통합 파이프라인을 사용할 수 있습니다.

섹션 3: GitLab과 AWS CodePipeline 통합

이 상세 가이드는 AWS CodePipeline으로 GitLab 리포지터리에서 지속적 배포를 구현하려는 이들에게 도움이 됩니다. 이제 GitLab을 AWS CodeStar Connections 공급자로 사용할 수 있어 통합이 훨씬 더 쉬워졌습니다.

전제 조건

  • GitLab.com 계정
  • AWS 계정
  • AWS CLI(구성됨)

통합 단계

1단계: AWS CodeStar Connections에서 GitLab 연결 생성하기

  1. AWS Management Console에 로그인하고, CodePipeline 서비스로 이동합니다.
  2. 왼쪽 탐색 패널에서 “Settings” > “Connections”를 선택합니다.
  3. Create connection” 버튼을 클릭합니다.
  4. 공급자로 “GitLab”을 선택합니다.
  5. 연결 이름을 입력하고 “Connect to GitLab”을 클릭합니다.
  6. GitLab 인증 페이지로 리디렉션됩니다.
  7. 필요한 권한을 승인합니다.
  8. 성공하면, 연결 상태가 “Available”로 변경됩니다.
    AWS CodeStar Connections 설정. 출처=GitLab | 인포그랩 GitLab
    AWS CodeStar Connections 설정. 출처=GitLab

2단계: AWS CodePipeline 생성하기

  1. CodePipeline 대시보드에서 “Create pipeline”을 클릭합니다.
  2. 파이프라인 이름을 입력하고 “Next”를 클릭합니다.
  3. 소스 공급자로 “GitLab”을 선택합니다.
  4. 방금 생성한 연결을 선택하고, GitLab 리포지터리와 브랜치를 지정합니다.
  5. 트리거 유형을 선택합니다. 리포지터리 내의 특정 브랜치와 파일 유형의 pull 또는 push 이벤트를 기반으로 CodePipeline 파이프라인 실행을 트리거할 수 있습니다.
    AWS CodePipeline 소스 공급자 추가. 출처=GitLab | 인포그랩 GitLab
    AWS CodePipeline 소스 공급자 추가. 출처=GitLab

AWS CodePipeline 연결 선택 또는 추가. 출처=GitLab | 인포그랩 GitLab
AWS CodePipeline 연결 선택 또는 추가. 출처=GitLab

참고: 3단계부터 특정 환경과 필요에 따라 설정을 구성하세요.

섹션 3 요약

이 섹션에서는 GitLab 리포지터리를 AWS CodePipeline과 통합하는 방법을 자세히 설명했습니다. 이 설정으로 GitLab의 코드 변경 사항이 AWS 환경에 자동으로 배포되는 지속적 배포 파이프라인을 사용할 수 있습니다.

섹션 4: GitLab으로 마이그레이션

GitLab과 AWS를 통합하면 개발과 배포 워크플로를 간소화하는 강력한 기능을 이용할 수 있으며, 소스 코드 관리 문제를 해결하는 데 도움이 됩니다. 통합은 여러 가지 방법으로 이뤄질 수 있고, 각각 고유한 이점이 있습니다.

  • AWS CodeStar Connections를 사용해 GitLab과 AWS 서비스를 연결하면, GitLab과 같은 외부 Git 리포지터리를 다양한 AWS 서비스와 연결해 더 일관된 워크플로를 구현할 수 있습니다. 이 설정은 GitLab 리포지터리에서 직접 자동화된 빌드, 배포, 기타 필수 작업을 지원해 개발 프로세스를 더 통합하고 간소화합니다.
  • AWS CodeStar Connections로 GitLab과 AWS CodePipeline을 연결하면, 전체 CI/CD 파이프라인을 생성해 자동화가 한 단계 더 발전합니다. 이 접근 방식은 GitLab과 AWS CodePipeline을 통합해 CodeBuild와 CodeDeploy와 같은 AWS 서비스를 사용하며, 소스 제어와 빌드부터 테스트, 배포까지 전체 프로세스를 자동화합니다. 이는 강력하고, 확장 가능하며, 효율적인 배포 프로세스를 보장합니다.
    AWS CodeStar Connections 통합. 출처=GitLab | 인포그랩 GitLab
    AWS CodeStar Connections 통합. 출처=GitLab

  1. AWS CodeStar Connections를 사용해 GitLab과 AWS 서비스 연결하기

    AWS CodeStar Connections는 외부 Git 리포지터리(예: GitHub 또는 Bitbucket)를 AWS 서비스에 연결하는 서비스입니다. CodeStar Connections로 GitLab을 AWS 서비스에 연결할 수도 있습니다. GitLab을 사용할 때, 커스텀 연결을 HTTP Git 서버로 설정해야 할 수 있습니다. 이 방법으로 GitLab에 연결할 수 있는 AWS 서비스는 다음과 같습니다.

    • AWS Service Catalog
      AWS Service Catalog는 조직이 AWS 리소스를 표준화하고 관리하는 데 도움이 됩니다. 이를 GitLab과 통합하면, 리소스 관리의 투명성이 향상되고 변경 사항 추적이 간소화됩니다. 특히 GitLab 커밋을 기반으로 카탈로그 업데이트를 자동화해 운영 효율성을 높일 수 있습니다.

    • AWS CodeBuild
      AWS CodeBuild는 소스 코드를 컴파일하고, 테스트를 실행하며, 배포 가능한 소프트웨어 패키지를 생성하는 관리형 빌드 서비스입니다. GitLab과 CodeBuild를 통합하면 코드 변경 사항이 GitLab에 push 될 때마다 자동화된 빌드 프로세스를 시작할 수 있습니다. 이로써 빌드의 일관성이 보장되고, 협업과 버전 제어가 더 쉬워집니다.

    • AWS Glue Notebook Jobs
      AWS Glue Notebook Jobs는 데이터 준비와 ETL(추출, 변환, 로드) 작업을 대화형으로 개발하고, 실행하는 서비스입니다. GitLab과 Glue Notebook Jobs를 통합하면 노트북과 ETL 스크립트의 버전 제어가 가능하고, 팀원 간 협업이 촉진되며, 데이터 처리 파이프라인의 품질 관리가 향상됩니다.

    • AWS Proton
      AWS Proton은 마이크로서비스와 서버리스 애플리케이션의 개발과 배포를 자동화하는 서비스입니다. GitLab과 AWS Proton을 통합하면 인프라를 코드로 관리하고, 배포를 자동화하며, 일관된 환경 관리를 보장해 더 효율적인 개발 프로세스를 구축할 수 있습니다.

      AWS CodeStar Connections가 더 많은 서비스를 지원하면서 GitLab과 추가 AWS 서비스 연결은 더 쉬워질 겁니다. CodeStar Connections를 지원하는 새로운 서비스를 정기적으로 확인하면 좋습니다.

  2. AWS CodeStar Connections(CodeDeploy 포함)로 CodePipeline과 GitLab 연결하기

    AWS CodePipeline은 소프트웨어 릴리즈 프로세스를 자동화하는 지속적 배포 서비스입니다. GitLab과 CodePipeline을 연결하려면, AWS CodeStar Connections를 사용해야 합니다. 이 설정은 GitLab 리포지터리를 소스로 지정하고, 전체 CI/CD 파이프라인을 자동화하도록 지원합니다. CodePipeline이 지원하는 주요 작업은 다음과 같습니다.

    • 소스 제어: AWS CodeCommit, GitHub, Bitbucket, GitLab
    • 빌드와 테스트: AWS CodeBuild, Jenkins
    • 배포: AWS CodeDeploy, Elastic Beanstalk, ECS, S3
    • 승인: 수동 승인
    • 인프라 관리: AWS CloudFormation
    • 서버리스: AWS Lambda
    • 테스트: AWS Device Farm
    • 커스텀 작업: AWS Step Functions

    GitLab과 CodePipeline을 통합하면, 코드 변경 사항이 GitLab에 push 될 때마다 자동으로 파이프라인을 트리거해 빌드부터 배포까지 일관된 프로세스를 유지할 수 있습니다. 아울러 GitLab의 버전 제어 기능과 결합하면, 배포 기록과 상태를 더 쉽게 추적해 더 유연하고 안정적으로 소프트웨어를 배포할 수 있습니다.

학습 내용

이 가이드는 AWS CodeCommit을 GitLab으로 마이그레이션하고, 두 서비스를 통합하는 방법을 소개했습니다. 다음 네 가지 주요 주제를 다뤘습니다.

  • GitLab으로 병렬 마이그레이션: 위험을 최소화하며, 기존 AWS 호스팅 리포지터리에서 GitLab.com으로 점진적으로 마이그레이션하는 방법
  • AWS CodeBuild와 통합: GitLab 리포지터리와 통합된 강력한 CI 환경 설정 단계
  • AWS CodePipeline과 통합: GitLab 리포지터리를 사용한 효율적인 지속적 배포 파이프라인 구축 방법
  • CodePipeline과 CodeStar Connections를 위한 다운스트림 통합: 광범위한 서비스 액세스를 위해 GitLab-AWS 연결을 활용해 AWS 생태계 전반에 일련의 통합 가능성 열기

모든 조직의 코드 호스팅과 통합 구현 전략은 고유하기에, 이 튜토리얼을 자체 GitLab + AWS 통합과 구현 전략의 시작점으로 사용할 수 있습니다.

추가 리소스

더 자세한 정보와 고급 구성 내용은 다음 리소스를 참조하세요.

궁금한 점이 있거나 지원이 필요하면 인포그랩, GitLab 지원팀 또는 AWS 지원팀에 문의하세요. 이 종합 가이드가 AWS-GitLab 통합 여정에 도움이 되길 바랍니다.

(이 포스트는 GitLab의 동의를 받아 공식 블로그의 영문 포스트를 우리말로 번역한 글입니다.)

지금 이 기술이 더 궁금하세요? 인포그랩의 DevOps 전문가가 알려드립니다.