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# 콘솔 애플리케이션을 만드는 방법은?
    
  • 코드 제안을 사용하여 새 코드 주석으로 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에 도움을 요청할 수 있습니다:

    CI/CD 오류를 설명해주세요: 현재 .NET SDK는 .NET 8.0을 지원하지 않습니다
    
  • 나중에 테스트를 생성하려면, Chat에게 /refactor 코드 작업을 사용하여 선택한 코드를 함수로 리팩터링하는 방법을 물어보세요.

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

    C#에서 async 및 await를 실제 예제와 함께 설명해주세요.
    
    error CS0122: 'Program'은(는) 보호 수준 때문에 접근할 수 없습니다에 대해 설명해주세요
    
  • /tests 코드 작업을 사용하여 테스트를 생성합니다.

다음 질문은 C# 솔루션에 생성된 테스트를 어디에 놓아야 하는지입니다. 초심자라면, 응용 프로그램 및 테스트 프로젝트가 동일한 솔루션 수준에 존재해야 하는지 알지 못할 수 있습니다.

  • GitLab Duo Chat은 프롬프트 질문을 요청하고 개선하는 데 도움을 줄 수 있습니다:

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

    /refactor into the public class
    
  • 또한 Chat를 사용하여 .gitlab-ci.yml 파일에서 테스트를 실행하는 방법을 물어볼 수 있습니다.

    /.gitlab-ci.yml에 테스트를 실행할 수 있는 작업 추가
    

자원:

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

이 예시에서, 하나의 메인 함수가 있는 기존 소스 코드가 있습니다. 코드가 반복되고 테스트할 수 없습니다.

GitLab Duo Coffee Chat: C++, SQLite 및 CMake 시작하기을 시청하세요.

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

  1. GitLab Duo가 활성화된 VS Code 또는 웹 IDE를 연다.
  2. 소스 코드를 선택하고, GitLab Duo Chat에게 함수로 리팩터링하는 방법을 물어봅니다. 더 정제된 프롬프트를 사용합니다:

    함수로 리팩터링
    

    이 리팩터링 단계는 선택한 전체 소스 코드에 대해 동작하지 않을 수 있습니다.

  3. 리팩터링 전략을 기능적 블록으로 분할합니다. 예를 들어, 데이터베이스에서 모든 삽입, 업데이트 및 삭제 작업을 반복합니다.

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

    CTest 테스트 프레임워크를 사용하여 테스트 생성
    
  5. 애플리케이션이 Boost.Test 프레임워크를 사용하는 경우 프롬프트를 개선합니다:

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

자원:

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

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

GitLab Duo Coffee Chat: Refactor C++ functions into OOP classes에서 이를 진행하는 과정을 시청하세요.

클래스 작업 시작하기

  • SQLite 클래스에서 기본 데이터베이스 클래스를 구현하고 상속하는 객체 지향 패턴을 어떻게 구현하는지 GitLab Duo Chat에 물어보세요.

    C++를 사용하여 기본 클래스를 사용한 일반적인 데이터베이스 구현과 SQLite 특정 클래스를 설명해 주세요. 소스 예제와 따라갈 단계도 제공해 주세요.
    
  • GitLab Duo Chat에게 구현 클래스에서 순수 가상 함수와 가상 함수 오버라이드에 대해 물어보세요.

    순수 가상 함수가 무엇이며 해당 클래스에서 상속하는 개발자에게 필요한 것은 무엇인가요?
    
  • 코드 작업을 통해 코드를 리팩터링할 수 있습니다. C++ 헤더 파일에서 함수를 선택하고 다음과 같은 명령을 사용하십시오.

    /클래스로 리팩터링하여 공용 함수와 비공개 경로/DB 속성으로 정의하세요. 기본 클래스 DB로부터 상속받으세요.
    
    /순수 가상 함수를 가진 기본 클래스를 구현 클래스로 리팩터링하세요. SQLite 특정 부분을 삭제하세요.
    
  • GitLab Duo Chat는 생성자 오버로딩, 객체 초기화, 공유 포인터를 사용한 최적화된 메모리 관리에 대해 안내해 줍니다.

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

더 나은 답변 찾기

  • 다음 질문은 충분한 컨텍스트를 제공하지 않았습니다.

    C++에서 컨텍스트를 제공하지 않고 가상 override를 사용해야 할까요?
    
  • 대신, 더 나은 답변을 얻기 위해 추가적인 컨텍스트를 추가하려고 하세요.

    상속된 클래스에서 순수 가상 함수를 구현할 때, 가상 함수 오버라이드 대신 그냥 함수 오버라이드를 사용해야 할까요? C++ 컨텍스트입니다.
    
  • 상대적으로 복잡한 질문은 새로 생성된 클래스에서 객체를 인스턴스화하고 특정 함수를 호출하는 방법에 관련되어 있습니다.

    C++에서 클래스에서 객체를 어떻게 인스턴스화하고 SQLite DB 경로를 생성자에 전달하고 함수를 호출할 수 있나요? 포인터를 선호합니다.
    
  • 결과적으로 유용할 수 있지만, 공유 포인터와 필요한 소스 코드 헤더에 대해 보완이 필요합니다.

    C++에서 클래스에서 객체를 어떻게 인스턴스화하고 SQLite DB 경로를 생성자에 전달하고 함수를 호출할 수 있나요? 공유 포인터를 선호합니다. 어떤 헤더를 포함해야 하는지 설명해 주세요.
    
  • 코드 제안은 std::shared_ptr 포인터 산술의 올바른 구문을 생성하고 코드 품질을 향상시키는 데 도움이 됩니다.

    // 변수를 사용하여 SQLite 경로 정의, 기본값은 database.db입니다
    
    // SQLite 클래스에 대한 공유 포인터 생성
    
    // 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 코드 작업을 사용하십시오.

    /stringstream으로 리팩터링
    
  • 또한 유틸리티 함수를 C++에서 정적 함수가 있는 클래스로 리팩터링하고, 해당 함수를 호출하는 방법을 Chat에게 물어보세요.

    정적 함수를 제공하는 클래스로 리팩터링
    
    클래스의 정적 함수를 호출하는 방법은 무엇인가요?
    

소스 코드를 리팩터링 한 후에는 더 많은 데이터베이스 유형을 지원하기 위한 기반과 전체적인 코드 품질이 향상됩니다.

리소스:

취약점 설명 및 해결

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

GitLab Duo Coffee Chat: Vulnerability Resolution Challenge #1를 시청하세요.

이 소스 코드 스니펫버퍼 오버플로 문제가 있는 보안 취약점을 소개합니다.

    strcpy(region, "Hello GitLab Duo Vulnerability Resolution challenge");

    printf("Contents of region: %s\n", region);

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

  1. GitLab Duo가 활성화된 VS Code 또는 Web 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: Solve problems with GitLab Duo Chat Beta Challenge

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

     이 CI/CD 오류를 설명하세요: build.sh: line 14: go command not found
    
  • 조급할 때 단 한 두 단어를 입력하면 어떻게 되나요?

    labels
    
    issue labels
    

    GitLab Duo Chat은 추가 맥락을 요청합니다.

  • 문제를 완전한 문장으로 다듬고 해결책을 요청하는 방식으로 질문을 다듬어보세요.

    GitLab에서 Label을 설명하세요. 효율적인 사용 예시를 제시해주세요.
    

리소스:

GitLab Duo를 활용하여 GitLab에 기여하기

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

GitLab 코드베이스는 방대하여 때로는 복잡한 알고리즘이나 응용 프로그램에 특화된 구현을 이해해야 합니다. 자세한 내용은 아키텍처 구성 요소를 확인하세요.

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

이 예에서의 도전 과제는 GitLab 프로필 페이지를 업데이트하고 소셜 네트워크 설정을 개선하는 것이었습니다.

여기서 녹화된 영상을 시청하세요: GitLab Duo Coffee Chat: Contribute to GitLab using Code Suggestions and Chat

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

  1. 선택한 코드 부분을 설명하는 /explain 코드 작업을 사용하여 HAML 템플릿이 작동하는 방법을 배웁니다.
  2. 코드 작업 프롬프트를 다듬고 대신 /explain how HAML rendering works을 요청할 수 있습니다.

또한, 직접 채팅 프롬프트에 작성할 수도 있습니다. 예를 들어:

haml에서 select를 채우는 방법

리팩터링 예시는 다음과 같습니다:

  1. /refactor into a HAML dropdown
  2. 기존 UI 폼 코드를 검토한 후 프롬프트를 /refactor into a HAML dropdown with a form select로 다듬을 수 있습니다.

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

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

코드 생성 프롬프트

다음 예시는 GitLab Duo의 지원되는 언어에 대한 유용한 코드 생성 프롬프트를 제공합니다. 코드 생성 프롬프트는 다중 행 주석을 사용하여 다듬을 수 있습니다.

이 예시들은 개발자 관계 팀이 유지 관리하는 GitLab Duo Prompts 프로젝트에 저장되어 있습니다.

C++ 코드 생성 프롬프트

분산 파일 노드를 관리하는 애플리케이션을 생성하세요.

// 분산 파일 노드를 관리하는 애플리케이션을 만드세요
// 노드의 건강 상태에 대한 개요 제공
// OOP 패턴 사용하여 기본 파일 노드 정의
// 기본 파일을 상속받은 특정 파일 시스템 추가

XDP 커널 이벤트에 연결하여 네트워크 트래픽을 측정하는 eBPF 프로그램을 생성하세요. 이 기능은 Linux 커널에서만 작동합니다.

// XDP 커널 이벤트에 연결하여 네트워크 트래픽을 측정하는 eBPF 프로그램을 생성하세요
// IP 주소별로 모든 패킷 카운트
// 요약 출력
// 필요한 헤더 포함

C# 코드 생성 프롬프트

다양한 센서에서 의료 분석 앱을 생성하고 데이터를 MSSQL에 저장하세요.

// 의료 분석 앱을 생성하세요
// 다양한 센서에서 데이터 수집
// MSSQL에 데이터 저장
// 센서 데이터에 액세스하는 메서드 제공

Go 코드 생성 프롬프트

Kubernetes를 위한 관찰성 애플리케이션을 생성하세요. 클러스터의 컨테이너, 파드 및 서비스 상태를 읽고 출력합니다.

// Kubernetes 관찰성을 위한 클라이언트 생성
// 기능을 만들어
// KUBECONFIG 환경 변수에서 kubernetes 설정 파일을 읽기
// kubernetes 컨텍스트, 기본 네임스페이스 생성
// 컨테이너, 파드, 서비스 상태 조사 및 개요 출력
// 필요한 패키지 가져오기
// 메인 패키지 생성

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 엔트리포인트 추가
# 생성, 업데이트, 삭제 기능 구현
# 사용자 데이터를 SQLite에 저장, 없는 경우 테이블 생성
# 포트 8080에서 서버 실행, TLS 지원
# requirements.txt에 필요한 패키지 주석으로 출력
# 기본으로 Python 3.10 사용

Ruby 코드 생성 프롬프트

로그 데이터를 Elasticsearch에 저장하는 로그 파서 애플리케이션을 만드세요.

# 로그 파서로 Ruby 앱 생성
# 로그 라인에서 민감한 문자열을 대체할 훅 제공
# 로그 형식을 지정하고 Elasticsearch에 저장

Rust 코드 생성 프롬프트

Rust 고급 프로그래밍을 배우는 데 도움이 되는 AI 지원 정보 블로그 글에서 예시를 사용하여 RSS 피드 리더 앱을 만드세요.

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

리소스

많은 사용 사례가 GitLab Duo Coffee Chat YouTube 재생 목록에서 실전 녹화로 제공됩니다. GitLab Duo Coffee Chat개발자 관계 팀이 유지 관리하는 학습 시리즈입니다.

블로그 리소스