GitLab Duo 예제

다음 사용 사례에서는 GitLab Duo를 사용한 실제 예제를 설명합니다. 소프트웨어 개발을 시작하고 기존 소스 코드를 리팩터링하는 방법을 알아보세요. 원인 분석을 통해 디버깅 문제를 해결하고, 보안 취약점을 해결하며, DevSecOps 라이프사이클의 모든 단계를 활용하는 방법을 배워보세요.

개발 도전을 해결하기 위해 GitLab Duo 사용

C# 애플리케이션 시작

이 예에서는 C# 애플리케이션을 열고 GitLab Duo AI 기능을 사용하여 더 효율적으로 작업하는 방법을 살펴봅니다.

GitLab Duo Coffee Chat: C# 시작하기에서 이러한 단계를 시청하세요.

도전 과제는 GitLab REST API를 쿼리하는 CLI 도구를 생성하는 것입니다.

  • GitLab Duo Chat에게 새 C# 프로젝트를 시작하는 방법과 dotNET CLI를 사용하는 방법을 배우세요.

    VS Code에서 빈 C# 콘솔 애플리케이션을 만드는 방법
    
  • Code Suggestions를 사용하여 새 코드 주석으로 REST API 클라이언트를 생성하세요.

    // REST API에 연결하고 응답을 출력합니다
    
  • 생성된 소스 코드에 대한 설명이 필요할 수 있습니다: /explain 코드 작업을 사용하여 REST API 호출 방법에 대한 통찰력을 얻으세요.

Code Suggestions 주석에서 성공적으로 소스 코드를 생성한 후 CI/CD 구성이 필요합니다.

  • Chat은 C#용 .gitignore 파일 및 .gitlab-ci.yml 구성의 모베스트 프렉티스를 도와줄 수 있습니다:

    C# 프로젝트용 .gitignore 및 .gitlab-ci.yml 구성을 보여주세요.
    
  • CI/CD 작업이 실패하는 경우, 현상 분석을 통해 문제를 이해할 수 있습니다. 또는 오류 메시지를 복사하여 GitLab Duo Chat에 도움을 요청하세요:

    현재 .NET SDK가 .NET 8.0을 지원하지 않는 CI/CD 오류를 설명해주세요
    
  • 나중에 테스트를 생성하려면, 코드 작업 /refactor을 사용하여 선택한 코드를 함수로 리팩터링할 것을 요청하세요.

  • Chat은 프로그래밍 언어별 특정 키워드 및 함수 또는 C# 컴파일러 오류를 설명할 수 있습니다.

    C#에서 async 및 await를 실제 예제와 함께 설명해주세요.
      
    error CS0122: 'Program' is inaccessible due to its protection level 에 대한 설명
    
  • /tests 코드 작업을 사용하여 테스트를 생성하세요.

다음 질문은 C# 솔루션에 생성된 테스트를 어디에 위치해야 하는지에 대한 것입니다. 초보자로서는 응용 프로그램 및 테스트 프로젝트가 가져야 하는 동일한 솔루션 수준에 존재해야한다는 것을 모를 수 있습니다.

  • GitLab Duo Chat은 질문을 하고 개선하여 도와줄 수 있습니다:

    C# 및 VS Code에서 테스트 프로젝트에서 프로젝트에 대한 참조를 추가하는 방법
      
    기존 솔루션에서 다른 프로젝트에 대한 참조를 추가하기 위한 C# .csproj 파일에 추가할 수 있는 XML 구성을 제공해주세요
    
  • 때로는 더 나은 결과를 얻기 위해 질문을 정제해야 할 수 있습니다. /refactor into the public class 프롬프트는 테스트 프로젝트에서 접근할 수있는 코드 제안을 생성합니다.

    /refactor into the public class
    
  • .gitlab-ci.yml 파일에서 테스트를 실행하는 방법에 대해 Chat에게 물어보기 위해 /refactor 코드 작업을 사용할 수도 있습니다.

    /refactor add a job to run tests (the test project)
    

리소스:

SQLite로 C++ 애플리케이션 리팩터링

이 예에서는 단일 main 함수가 있는 기존 소스 코드가 있습니다. 코드가 반복되어 테스트할 수 없습니다.

GitLab Duo Coffee Chat: C++, SQLite 및 CMake 리팩터링에서 이러한 단계를 시청하세요.

소스 코드를 재사용 가능하고 테스트 가능한 함수로 리팩터링하는 것이 좋은 첫 번째 단계입니다.

  1. GitLab Duo가 활성화된 VS Code 또는 Web IDE에서열기.
  2. 소스 코드를 선택하고 GitLab Duo Chat에게 함수로 리팩터링하도록 요청하십시오. 정제된 프롬프트를 사용하여:

    함수로 리팩터링하기
    

    이 리팩터링 단계는 전체 선택된 소스 코드에 적용되지 않을 수 있습니다.

  3. 리팩터링 전략을 기능 블록으로 분할하십시오. 예를 들어, 데이터베이스의 모든 삽입, 업데이트 및 삭제 작업에 대해 반복하십시오.

  4. 다음 단계는 새로 생성된 함수에 대한 테스트를 생성하는 것입니다. 소스 코드를 다시 선택하십시오. 특정 테스트 프레임워크에 대한 /tests 코드 작업을 사용할 수 있습니다.

    CTest 테스트 프레임워크를 사용하여 테스트
    
  5. 애플리케이션이 대신 Boost.Test 프레임워크를 사용하는 경우, 프롬프트를 정제하십시오:

    Boost.Test 프레임워크를 사용하여 테스트
    

리소스:

C++ 함수를 객체지향 코드로 리팩터링

이 예에서는 기존 소스 코드가 함수로 래핑되어 있습니다. 앞으로 더 많은 데이터베이스 유형을 지원하기 위해 코드를 클래스 및 객체 상속으로 리팩터링해야 합니다.

GitLab Duo Coffee Chat: C++ 함수를 OOP 클래스로 리팩터링에서 이러한 단계를 시청하세요.

클래스 작업 시작

  • GitLab Duo Chat에게 C++에서 베이스 데이터베이스 클래스 및 SQLite 특정 클래스를 구현하는 방법에 대해 설명하세요:

    C++를 사용하여 베이스 클래스를 사용한 범용 데이터베이스 구현 및 상속된 SQLite 클래스에 대한 소스 예제 및 따라야 할 단계를 설명해주세요.
    
  • 학습 커브에는 구현 클래스에서 순수 가상 함수 및 가상 함수 오버라이드에 대해 GitLab Duo Chat에게 묻는 것이 포함됩니다.

    순수 가상 함수란 무엇이며 해당 클래스에서 상속받은 개발자가 필요한 내용은 무엇인가요?
    
  • 코드 작업을 사용하여 코드를 리팩터링할 수 있습니다. C++ 헤더 파일에서 함수를 선택하고 정제된 프롬프트를 사용하세요:

    public 함수와 private path/db 속성을 가진 클래스로 리팩터링하고 베이스 클래스 DB를 상속하십시오
      
    순수 가상 함수가 있는 베이스 클래스로 리팩터링하고 SQLite 특정 부분을 제거하십시오.
    
  • GitLab Duo Chat은 생성자 오버로딩, 객체 초기화 및 공유 포인터를 사용한 최적화된 메모리 관리에 대해 안내할 수 있습니다.

    클래스에서 함수 구현을 추가하는 방법은?
      
    클래스 속성에 값을 클래스 생성자 호출을 통해 전달하는 방법은?
    

더 나은 답변 찾기

  • 다음 질문에는 충분한 맥락이 제공되지 않았습니다.

    오버라이드 대신 가상 오버라이드를 사용해야합니까?
    
  • 대신 더 나은 답변을 얻기 위해 더 많은 맥락을 추가하려고 노력하세요.

    파생된 클래스에서 순수 가상 함수를 구현할 때 C++ 맥락에서 가상 함수 오버라이드를 사용해야합니까?
    
  • 상대적으로 복잡한 질문은 새로 생성된 클래스에서 객체를 인스턴스화하고 특정 함수를 호출하는 방법에 관한 것입니다.

    C++에서 클래스에서 객체를 어떻게 인스턴스화하고, SQLite DB 경로를 호출하고 함수를 호출할까요? 포인터를 사용하도록하세요.
    
  • 결과는 도움이 될 수 있지만, 공유 포인터 및 필요한 소스 코드 헤더에 대한 정제가 필요합니다.

    C++에서 클래스에서 객체를 어떻게 인스턴스화하고, SQLite DB 경로로 생성자를 호출하고 함수를 호출할까요? shared 포인터를 선호하며 필요한 헤더를 설명해주세요.
    
  • Code Suggestions은 std::shared_ptr 포인터 산술의 올바른 구문을 생성하는 데 도움이 되며 코드 품질을 향상시킬 수 있습니다.

    // 변수에 SQLite 경로 정의, 기본 값은 database.db
      
    // SQLite 클래스에 대한 shared 포인터 만들기
      
    // OpenConnection을 사용하여 데이터베이스 연결 열기
    

코드 리팩터링

  • 소스 코드를 리팩터링한 후, 컴파일러 오류가 발생할 수 있습니다. Chat에게 오류에 대해 설명해 달라고 요청하십시오.

    오류 설명: 'db'는 'SQLiteDB'의 비공개 멤버입니다.
    
  • 특정 SQL 쿼리 문자열을 여러 줄로 나누어 효율적인 편집을 위해 리팩터링해야 합니다.

    std::string sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL)";
    
  • 소스 코드를 선택한 후, /refactor 코드 작업을 사용하십시오:

    /refactor를 사용하여 stringstream으로 여러 줄로 나누기
    
  • C++에서 유틸리티 함수를 클래스로 리팩터링하고, 그 후에 Chat에게 그 함수를 호출하는 방법에 대해 물어보세요.

    클래스에서 정적 함수를 제공하도록 리팩터링
      
    클래스 내의 정적 함수를 어떻게 호출합니까?
    

소스 코드를 리팩터링한 후, 더 많은 데이터베이스 유형을 위한 기반을 마련하고 전반적인 코드 품질을 향상시켰습니다.

자원:

취약점 설명 및 해결

이 예제에서, C에서 감지된 보안 취약점을 GitLab Duo의 도움을 통해 수정해야 합니다.

GitLab Duo Coffee Chat: 취약점 해결 챌린지 #1 시청

이 소스 코드 조각버퍼 오버플로우로 인한 보안 취약점을 소개합니다:

    strcpy(region, "Hello GitLab Duo Vulnerability Resolution challenge");
    
    printf("Contents of region: %s\n", region);

SAST 보안 스캐너는 이 문제를 감지하고 보고할 수 있습니다. 취약점 설명을 사용하여 문제를 이해하세요. 취약점 해결은 MR을 생성하는 데 도움이 됩니다. 제안된 변경 사항이 요구 사항에 맞지 않거나 문제를 발생시키는 경우 코드 제안Chat을 사용하여 세부 사항을 정리할 수 있습니다. 예를 들어:

  1. GitLab Duo가 활성화된 VS Code 또는 웹 IDE를 열고 설명서를 추가하기 위한 주석을 추가합니다:

        // 잠재적인 버퍼 오버플로우 방지
           
        // 아래는 가능한 AI 생성 코드입니다
        strncpy(region, "Hello GitLab Duo Vulnerability Resolution challenge", pagesize);
        region[pagesize-1] = '\0';
        printf("Contents of region: %s\n", region);
    
  2. 제안된 코드를 삭제하고 다른 방법을 사용하여 가능한 버퍼 오버플로우를 피해주세요.

        // snprintf()을 사용하여 잠재적인 버퍼 오버플로우 방지
           
        // 아래는 가능한 AI 생성 코드입니다
        snprintf(region, pagesize, "Hello GitLab Duo Vulnerability Resolution challenge");
           
        printf("Contents of region: %s\n", region);
    
  3. 추가로, GitLab Duo Chat을 사용하여 질문해주세요. /refactor 코드 작업을 통해 다양한 제안을 생성할 수 있습니다. 특정 알고리즘 또는 함수를 선호하는 경우 프롬프트를 개선하세요:

    snprintf을 사용하여 리팩터
    

자원:

GitLab에 대한 질문에 답하기

이 예에서, 챌린지는 문제를 해결하기 위해 GitLab Duo Chat Beta를 활용하는 것입니다.

여기서 녹화본 시청: GitLab Duo Coffee Chat: GitLab Duo Chat Beta 챌린지 문제 해결

  • CI/CD 오류를 설명하기 위해 GitLab Duo Chat을 사용할 수 있습니다.

     CI/CD 오류 설명: build.sh: line 14: go command not found
    
  • 성급함으로 인해 한 두 단어만 입력할 경우 어떤 일이 벌어지나요?

    레이블
      
    이슈 레이블
    

    GitLab Duo Chat은 더 많은 맥락을 요청합니다.

  • 문제를 설명하고 해결 방법을 요청하는 전체 문장으로 귀도 리파인하세요.

    GitLab의 레이블을 설명하세요. 효율적인 사용을 위한 예시를 제공해주세요.
    

자원:

GitLab에 기여하기 위해 GitLab Duo 사용하기

GitLab Duo 사용은 GitLab 코드베이스에 기여하는 데 중점을 두고 있으며, 고객이 더 효율적으로 기여할 수 있는 방법을 제공합니다.

GitLab 코드베이스는 방대하며 때로는 복잡한 알고리즘이나 애플리케이션 특정 구현을 이해해야 합니다. 더 자세한 내용은 아키텍처 컴포넌트를 검토하세요.

프론트엔드에 기여: 프로필 설정

이 예제에서, GitLab 프로필 페이지를 업데이트하고 소셜 네트워크 설정을 개선하는 것이 목표였습니다.

녹화본은 여기에서 시청하세요: GitLab Duo Coffee Chat: 코드 제안 및 대화를 통한 GitLab 기여

GitLab Duo Chat은 코드 설명과 리팩터 및 테스트 생성에 도움이 될 수 있습니다. 코드 제안은 기존 코드를 완료하고 Ruby, Go 또는 VueJS에서 새로운 기능 및 알고리즘을 생성할 수 있습니다.

  1. 선택한 코드 섹션을 설명하기 위해 /explain 코드 작업을 사용하고 HAML 템플릿이 어떻게 작동하는지 배웁니다.
  2. 코드 작업 프롬프트를 세세하게 조정하고 /explain how HAML rendering works 대신 질문해서 사용할 수도 있습니다.

또는 직접 채팅 프롬프트에 쓸 수도 있습니다. 예:

haml에서 select를 채우는 방법

리팩터링은 다음을 포함합니다:

  1. /refactor를 사용하여 HAML 드롭다운으로 변경
  2. 기존 UI 폼 코드를 검토한 후, /refactor를 사용하여 HAML 드롭다운 및 폼 선택으로 변경으로 프롬프트를 세세하게 조정했습니다.

GitLab Duo Chat은 오류 디버깅에도 도움이 되었습니다. 오류 메시지에 접두어를 추가했습니다:

이 오류를 설명해주세요: undefined method `icon` for

코드 생성 프롬프트

다음 예제는 GitLab Duo에서 지원하는 언어에 대한 유용한 코드 생성 프롬프트를 제공합니다. 코드 생성 프롬프트는 지원되는 언어에 대해 멀티라인 주석을 사용하여 조정할 수 있습니다.

이 예제들은 개발자 관련 팀이 유지보수하는 GitLab Duo 프롬프트 프로젝트에 저장되어 있습니다.

C++ 코드 생성 프롬프트

분산 파일 노드를 관리하는 응용 프로그램을 생성합니다.

// 분산 파일 노드를 관리하는 응용 프로그램 생성
// 노드의 상태 개요 제공
// OOP 패턴 사용하여 기본 파일 노드 정의
// 기본 파일에서 상속된 특정 파일 시스템 추가

XDP 커널 이벤트에 부착하여 네트워크 트래픽을 메트릭하기 위해 eBPF 프로그램을 생성합니다. Linux 커널에서만 작동합니다.

// `XDP` 커널 이벤트에 부착하여 네트워크 트래픽을 메트릭하는 `eBPF` 프로그램 생성
// IP 주소별로 모든 패킷 수를 카운트
// 요약 출력
// 필요한 헤더 포함

C# 코드 생성 프롬프트

다양한 센서에서 의료 분석기 응용 프로그램을 생성하고 데이터를 MSSQL에 저장합니다.

// 의료 분석기 응용 프로그램 생성
// 다양한 센서에서 데이터 수집
// 데이터를 MSSQL에 저장
// 센서 데이터에 액세스하는 메서드 제공

Go 코드 생성 프롬프트

Kubernetes를 위한 관측 가능한 애플리케이션을 생성하고 클러스터 내 컨테이너, pod, 서비스의 상태를 읽고 출력합니다.

// Kubernetes 관측 가능한 클라이언트 생성
// 함수 생성
// KUBECONFIG env var에서 Kubernetes 구성 파일 읽기
// Kubernetes 컨텍스트, 기본 네임스페이스 생성
// 컨테이너, pod, 서비스 상태 검사 및 개요 출력
// 필요한 패키지 가져오기
// 메인 패키지 생성

여기서 녹화본을 시청하세요: GitLab Duo Coffee Chat: Go 및 Kubernetes Observability를 활용한 코드 생성 챌린지

Java 코드 생성 프롬프트

다양한 데이터 소스를 사용하여 데이터 분석 애플리케이션 생성하여 메트릭을 저장합니다. 데이터 쿼리 및 집계를 위한 API 제공.

// 데이터 분석 애플리케이션 생성
// 다양한 입력 소스 및 값 구문 분석
// 메트릭을 열 지향 형식으로 저장
// 데이터 쿼리 및 집계를 위한 API 제공

JavaScript 코드 생성 프롬프트

ReactJS를 사용하여 직원들을 위한 유급 휴가 애플리케이션 생성 및 날짜-시간 선택기를 구현합니다.

// 사용자를 위한 유급 휴가 애플리케이션 생성
// ReactJS에서 날짜-시간 선택기 생성
// 시작 및 종료 옵션 제공
// 선택한 국가에 따라 공휴일 표시
// 서버 API에 요청 보내기

PHP 코드 생성 프롬프트

GitLab 릴리스용 RSS 피드 수집기를 생성하고 제목으로 필터링할 수 있도록 합니다.

// GitLab 릴리스를 보여주는 웹 양식 생성
// https://about.gitlab.com/atom.xml에서 RSS 피드 가져오기
// 제목에 대한 필터 옵션 제공

Python 코드 생성 프롬프트

Flask를 사용하여 사용자를 관리하기 위한 REST API를 사용하는 웹 서버를 생성하고 그들을 SQLite에 저장합니다.

# Flask 웹서버 생성
# ID별 사용자를 관리하기 위한 REST API 엔트리포인트 추가
# 만약 없는 경우 테이블에 사용자 데이터 저장
# 서버를 8080 포트에서 실행, TLS 지원
# requirements.txt에 필요한 패키지를 출력하는 주석으로 추가
# 기본값으로 Python 3.10 사용

Ruby 코드 생성 프롬프트

로그 데이터를 Elasticsearch에 저장하는 로그 파서 애플리케이션을 생성합니다.

# 로그 파서로 Ruby 애플리케이션 생성
# 로그 라인에서 민감한 문자열을 대체하기 위한 후크 제공
# 로그 포맷을 지정하고 Elasticsearch에 저장

Rust 코드 생성 프롬프트

블로그 기사 AI의 도움으로 고급 Rust 프로그래밍 배우기의 예제를 활용하여 RSS 피드 리더 애플리케이션을 생성합니다.

    // 소스 배열을 반복하고 HTTP를 사용하여 RSS 피드 항목에서 데이터 가져오는 함수 생성
    // 결과를 새로운 해시 맵에 저장
    // 해시 맵을 터미널에 출력

리소스

많은 사용 사례들은 GitLab Duo Coffee Chat YouTube 재생 디렉터리에서 실습 녹화로 제공됩니다. GitLab Duo Coffee ChatDeveloper Relations 팀‘이 유지하는 학습 시리즈입니다.

블로그 리소스