GitLab을 활용한 코드 관리와 프로젝트 관리 방법

GitLab 소개

GitLab은 웹 기반의 Git 저장소(manager)이며, 이슈 트래킹, 연속 통합, 연속 전달 등의 기능을 제공합니다. 조직이 코드를 보다 효과적으로 관리하고 팀의 생산성을 높이는데 도움을 줍니다.

다음은 git을 이용해 GitLab 서버에 코드를 푸쉬(push)하는 예시입니다.


    git init
    git add README.md
    git commit -m "first commit"
    git branch -M main
    git remote add origin git@gitlab.com:your_username/your_repository.git
    git push -u origin main

GitLab의 주요 기능

GitLab은 팀원들이 코딩, 테스팅, 디버깅, 배포 등의 전체 개발 단계를 통합적으로 관리할 수 있는 플랫폼을 제공합니다. 그러므로 개발자는 힘들게 스위치하는 시간을 절약하고 생산성을 높일 수 있습니다.

버전 관리


    git checkout -b new-feature
    git add new_feature.rb
    git commit -m "Start developing a new feature"

2. GitLab 설치 및 설정

GitLab 설치 및 초기 설정을 모두 완료해야 실제로 GitLab을 사용할 수 있습니다.

2.1 서버에 GitLab 설치

서버에 GitLab을 설치하는 가장 일반적인 방법은 Omnibus 패키지를 사용하는 것입니다.


    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates tzdata

설치가 완료되면, GitLab 패키지를 다운로드하고 설치합니다.


    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
    sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ee

2.2 GitLab 초기 설정

GitLab 설치 후에는 웹 인터페이스를 통해 초기 설정을 진행합니다. 이때, root 사용자의 비밀번호를 설정하고 이메일 주소와 사용자명을 입력합니다.


    git config --global user.email "your_email@example.com"
    git config --global user.name "Your Name"

3. 프로젝트 생성 및 설정

GitLab을 이용하여 프로젝트를 생성하고 기본 설정을 적용하는 것은 매우 간단합니다. 웹 인터페이스에서 ‘New Project’ 버튼을 클릭하여 새로운 프로젝트를 생성할 수 있습니다.

3.1 프로젝트 생성

‘New Project’ 버튼을 클릭한 후, 프로젝트 이름과 설명을 입력하고 ‘Create Project’ 버튼을 클릭합니다. 이후 GitLab은 자동으로 해당 프로젝트에 대한 Git 저장소를 생성합니다.

3.2 프로젝트 초기 설정

프로젝트를 생성한 후에는 프로젝트 설정을 변경하거나 추가할 수 있습니다. 예를 들어, 프로젝트 메인페이지에 표시되는 README 파일을 만들거나, 깃허브 리모트 저장소에 연결하는 등의 설정을 변경할 수 있습니다.

또한, 로컬 환경에서 해당 프로젝트를 작업하기 위해 저장소를 클론(clone)하는 것도 필요합니다. 다음 명령어를 통해 프로젝트를 로컬에 클론할 수 있습니다.

 
    git clone https://gitlab.example.com/username/projectname.git

로컬에서 작업 완료 후, 변경사항을 저장소에 푸시(push)할 수 있습니다.

 
    git add .
    git commit -m "Initial commit"
    git push -u origin master

4. 코드 버전 관리

GitLab은 코드 버전 관리를 하는 데 아주 적합한 플랫폼입니다. 즉, 여러 개발자들이 동일 코드에 작업을 하며 서로의 작업 내용을 병합하는 등의 작업을 수월하게 할 수 있습니다.

4.1 GitLab에서의 코드 버전 관리 이해

GitLab에서의 코드 버전 관리는 Git의 기능을 기반으로 합니다. Git은 분산형 버전관리 시스템으로, 개발자 사이의 협업과, 코드의 이력을 관리하는 데 매우 유용합니다.
개별 개발자의 로컬 저장소와 원격 저장소 사이의 작업을 동기화하는 기능을 제공합니다.

4.2 GitLab에서의 코드 버전 관리 실습

GitLab에서 코드 버전 관리를 위한 기본적인 Git 명령어들은 다음과 같습니다:

1. 코드 변경 사항을 스테이지(Stage)하기


    git add filename   # 특정 파일 스테이지하기
    git add .          # 모든 변경 사항 스테이지하기

2. 스테이지된 변경 사항 커밋하기


    git commit -m "Commit message"

3. 변경 사항을 원격 저장소에 푸시하기


    git push origin master

4. 원격 저장소의 최신 변경 사항을 로컬 저장소에 반영하기


    git pull origin master

5. 이슈 및 태스크 관리

GitLab은 이슈 추적 및 태스크 관리 기능도 제공하며, 이를 통해 프로젝트의 효율적인 관리를 지원합니다. 이 기능은 개발 팀이 프로젝트의 전반적인 진행 상황을 파악하고, 각 이슈와 태스크에 대한 상태를 관리하는 데 도움을 줍니다.

5.1 이슈 생성 및 관리

GitLab에서 이슈를 생성하려면, 프로젝트 메뉴에서 ‘Issue’ 탭을 선택한 뒤 ‘New issue’ 버튼을 클릭합니다. 이슈 생성 페이지에서 제목과 설명을 입력하고, 필요한 경우 레이블, 마일스톤, 담당자를 지정합니다. 이후 ‘Submit Issue’ 버튼을 클릭하면 이슈가 생성됩니다.

이슈를 관리하기 위해서는, ‘Issue’ 탭에서 각 이슈의 상태를 확인하고, 필요에 따라 이슈를 열거나 닫을 수 있습니다. 또한 이슈에 대한 댓글이나 이슈를 완료한 후 완료된 코드를 연결할 수도 있습니다.

5.2 태스크 생성 및 관리

태스크는 프로젝트 팀원들이 수행해야 할 각각의 작업을 나타냅니다. 이슈 내에서 체크리스트 형태로 생성될 수 있으며, 각 태스크의 진행 상황을 명확하게 파악하는 데 도움을 줍니다.

이슈나 머지 요청에서 태스크 리스트를 생성하려면, 에디터에 대시 (-) 뒤에 공백과 함께 할일 항목을 적어주면 됩니다. 체크박스가 자동으로 생성됩니다.


- [ ] Task 1
- [ ] Task 2
- [x] Completed Task

위 예시에서, 첫 번째와 두 번째 태스크는 아직 완료되지 않았음을 나타내며, 세 번째 태스크는 이미 완료된 것을 나타냅니다.


6. 브랜치 관리 및 Merge Request

버전 관리 시스템에서 브랜치는 중요한 기능입니다. 브랜치를 사용하면 코드베이스에서 분리된 작업 영역을 생성할 수 있어, 팀원 각각이 독립적으로 작업할 수 있습니다. 이는 특히 개발 중인 기능과 안정적인 기능을 분리하거나, 여러 버전의 코드를 유지 관리하는 데 유용합니다.

6.1 브랜치 생성 및 관리

새로운 브랜치를 생성하는 명령은 아래와 같습니다.


    git branch feature-branch

해당 브랜치로 이동하려면 ‘checkout’ 명령을 사용합니다.


    git checkout feature-branch

브랜치를 원격 저장소에 푸시할 때는 아래와 같이 실행합니다.


    git push origin feature-branch

6.2 Merge Request 실습

브랜치에서 작업한 내용을 메인 브랜치에 병합하기 위해 Merge Request를 생성할 수 있습니다. GitLab에서 아래와 같이 Merge Request를 생성합니다.

1. 해당 프로젝트로 이동하여 ‘Merge requests’를 클릭합니다.
2. ‘New merge request’를 클릭합니다.
3. Source branch (변경사항을 가진 브랜치)와 Target branch (변경사항을 병합할 브랜치)를 지정합니다.
4. ‘Compare branches and continue’를 클릭한 뒤 필요한 정보 (Title, Description 등)를 추가합니다.
5. ‘Submit merge request’를 클릭하여 Merge Request를 생성합니다.

이후 병합 작업은 프로젝트 관리자나 해당 권한을 가진 사용자가 ‘Merge’ 버튼을 통해 수행할 수 있습니다.


7. CI/CD 파이프라인 구축

GitLab에서 Continuous Integration(지속적 통합)과 Continuous Delivery/Deployment(CD, 지속적 배포) 파이프라인을 구축할 수 있습니다. CI/CD 파이프라인은 소프트웨어 개발 프로세스에서 코드 통합, 테스트, 배포 과정을 자동화하여 품질 향상과 배포 시간 단축 등의 이점을 제공합니다.

7.1 GitLab-ci.yml 파일 작성

GitLab의 CI/CD 파이프라인은 `.gitlab-ci.yml` 파일에 정의됩니다. 이 파일에 파이프라인의 각 단계를 명시하고, 어떻게 실행될지 작성합니다.

“`yaml
stages:
– build
– test
– deploy

build_job:
stage: build
script: echo “Building the app”

test_job:
stage: test
script: echo “Testing the app”

deploy_job:
stage: deploy
script: echo “Deploying the app”
“`

7.2 Job, Stage 구성

`.gitlab-ci.yml` 파일은 여러 ‘jobs’로 구성됩니다. 각 ‘job’은 CI/CD 파이프라인의 하나의 태스크로, 별도의 환경에서 실행되는 스크립트의 집합입니다.

‘jobs’는 ‘stages’로 구분됩니다. `’stages’` 키워드는 CI/CD 파이프라인의 실행 순서를 정의합니다. 위의 예시에서는 ‘build’, ‘test’, ‘deploy’ 순서대로 단계가 실행됩니다.

각 ‘job’에는 ‘stage’를 지정해 해당 단계에서 실행되도록 합니다. ‘script’ 키워드에는 특정 ‘job’을 수행하기 위한 명령어를 작성합니다.

이외에도 ‘only’, ‘except’ 등의 키워드를 이용해 ‘job’의 실행 조건을 세부적으로 지정할 수 있습니다.


8. GitLab Pages를 이용한 웹사이트 제작

GitLab Pages를 사용하면 GitLab 저장소로부터 정적 사이트를 호스팅할 수 있습니다. 이를 이용하면 프로젝트 보고서, 개인 블로그, 조직의 웹사이트 등 다양한 형태의 사이트를 제작할 수 있습니다.

8.1 GitLab Pages 이해

GitLab Pages는 GitLab 통합 태스크 러너인 GitLab CI/CD를 통해 정적 사이트를 생성합니다. 정적 사이트 생성기인 Jekyll, Hugo, Hexo 등 많은 도구와 호환됩니다.

8.2 GitLab Pages를 이용한 웹사이트 제작 실습

GitLab Pages의 웹사이트 제작은 `.gitlab-ci.yml` 파일 설정에서 시작합니다. GitLab Pages에서 호스팅되는 웹사이트의 콘텐츠는 `public` 디렉토리가 되어야 합니다.


pages:
  script:
  - mkdir .public
  - cp -r * .public
  - mv .public public
  artifacts:
    paths:
    - public
  only:
  - master

이 예시에서는 모든 푸시에 대해 파일을 `.public` 디렉토리로 복사하고, 이 디렉토리 이름을 `public`으로 변경합니다. 이 CI/CD 작업은 `master` 브랜치에만 적용합니다.

이제 기본 HTML 문서를 만들어 봅시다. `index.html` 파일에 아래의 내용을 추가합니다.




    
        GitLab Pages Example
    
    
        

Hello, GitLab Pages!

이 변경 사항을 커밋하고 푸시하면, GitLab CI/CD가 자동으로 작업을 수행하고 웹사이트를 GitLab Pages에 배포합니다.


9. 프로젝트의 설정 관리

GitLab에서 프로젝트 설정을 관리하면 프로젝트에 대한 다양한 인프라 구성을 제어할 수 있습니다.

9.1 환경 변수 설정

CI/CD 파이프라인에 사용되는 비밀 키나 애플리케이션 설정 등의 중요 정보는 Git 저장소에 직접 저장하면 안 됩니다. 이런 정보는 GitLab에서 제공하는 Secret Variables 또는 CI/CD Variables를 사용해 안전하게 관리하고 필요할 때에만 CI/CD 파이프라인에서 사용할 수 있습니다.


variables:
  TEST_VARIABLE: "Hello, GitLab!"

위의 `.gitlab-ci.yml` 설정은 모든 CI/CD Job에서 `TEST_VARIABLE` 환경 변수를 사용할 수 있게 해줍니다.

9.2 사용자, 권한 관리

GitLab 프로젝트의 일부 혹은 모든 사용자에게 권한을 부여하거나 제거함으로써 사용자 및 권한을 관리할 수 있습니다. ‘Settings > Members’에서 사용자를 찾아 권한을 수정합니다.

GitLab에서는 사용자 권한을 ‘Guest’, ‘Reporter’, ‘Developer’, ‘Maintainer’, ‘Owner’ 등 다양한 레벨로 나눕니다. 각 레벨은 프로젝트 리소스에 대한 접근 권한을 다르게 부여합니다. 예를 들어, ‘Guest’는 프로젝트를 볼 수만 있고, ‘Developer’는 코드를 푸시하거나 병합 요청을 넣을 수 있으며, ‘Owner’는 프로젝트 설정을 변경할 수 있습니다.


10. 마무리 및 GitLab 활용 팁

GitLab은 강력한 웹 기반의 버전 관리 시스템으로서, 코드 관리만이 아니라 프로젝트 관리도 가능하게 해주는 도구입니다. 이를 이용해 개발 플로우를 효율적으로 관리하고 팀원 간의 커뮤니케이션을 원활하게 할 수 있습니다.

10.1 꾸준한 커밋과 푸시

소스 코드 작업 결과를 주기적으로 커밋하고 푸시함으로써, 변경사항을 명확하게 추적할 수 있습니다. 또한, GitLab은 커밋 메시지를 통해 이슈를 자동으로 닫는 기능도 제공합니다. ‘Fixes #이슈번호’ 방식의 커밋 메시지를 사용하면 해당 이슈를 자동으로 닫을 수 있습니다.

10.2 마스터 브랜치 보호

‘마스터’ 브랜치는 프로젝트의 핵심 브랜치로, 무분별한 변경으로부터 안전하게 보호해야 합니다. GitLab에서는 브랜치 보호 기능을 제공하므로, 이를 이용해 마스터 브랜치를 보호하는 것이 좋습니다.


# 브랜치를 보호
$ git branch -d branchname
# 경고: 삭제 'branchname' 되돌릴 수 없습니다. 계속하시겠습니까? [y/N]

10.3 이슈와 마일스톤 활용

GitLab의 이슈와 마일스톤 기능을 활용하면, 작업의 우선순위를 결정하고 진행 상황을 효과적으로 관리할 수 있습니다. 이슈를 레이블로 관리하고, 마일스톤을 정해서 일정을 관리해 보세요.

GitLab을 효율적으로 사용하기 위한 마지막 팁은 지속적인 학습과 실험입니다. GitLab에서 제공하는 다양한 기능을 최대한 활용하려면, GitLab에 대한 지속적인 학습과 새로운 기능에 대한 실험을 해보세요.


Leave a Comment