GitLab Duo 예시

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

개발 과제 해결을 위해 GitLab Duo 사용

C# 애플리케이션으로 시작

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

아래 링크에서 GitLab Duo Coffee Chat: C# 시작하기 을(를) 시청하세요.

도전 과제는 GitLab REST API에 대한 CLI 도구를 생성하는 것입니다.

  • 새로운 C# 프로젝트를 시작하는 방법 및 dotNET CLI 사용법을 학습하려면 GitLab Duo Chat에 물어보세요:

    VSCode에서 빈 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에 복사하여 도움을 요청할 수 있습니다:

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

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

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

다음 질문은 C# 솔루션에서 생성된 테스트를 어디에 두어야 하는지입니다. 초보자라면 애플리케이션 및 테스트 프로젝트가 동일한 솔루션 수준에 존재해야 한다는 것을 알지 못할 수 있습니다.

  • C# 및 VS Code에서 기존 솔루션의 프로젝트에 참조를 추가하는 방법에 대해 GitLab Duo Chat에게 물어보고 질문을 정제하세요:

    기존 솔루션의 다른 프로젝트에 참조를 추가하려면 어떻게 해야 하나요?
      
    기존 솔루션의 다른 프로젝트에 참조를 추가하기 위한 .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)
    

자원:

C++ 응용 프로그램 리팩터링 with SQLite

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

아래 링크에서 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: C++ 함수를 ‘OOP’ 클래스로 리팩터링 을(를) 시청하세요.

클래스 작업 시작

  • 기본 데이터베이스 클래스에 대한 객체 지향 패턴을 구현하고 C++에서 SQLite 특정 클래스를 상속하는 방법에 대해 GitLab Duo Chat에게 물어보세요:

    C++에서 기본 클래스 및 SQLite 특정 클래스를 사용한 일반적인 데이터베이스 구현을 설명해주세요. 소스 예제 및 따를 단계를 제공해주세요.
    
  • 학습 곡선에는 구현 클래스에서 순수 가상 함수 및 가상 함수 재정의에 대해 GitLab Duo Chat에게 물어보는 것이 포함됩니다.

    순수 가상 함수와 해당 클래스를 상속하는 개발자에게 필요한 것은 무엇인가요?
    
  • 코드 작업은 코드를 리팩터링하는 데 도움이 됩니다. C++ 헤더 파일에서 함수를 선택하고 정제된 프롬프트를 사용하세요:

    공개 함수와 비공개 경로/DB 속성을 가진 클래스로 리팩터링하고 기본 클래스 DB를 상속으로부터 상속
      
    순수 가상 함수가 호출된 DB라는 기본 클래스로 기본 클래스로 이동합니다. SQLite 특정 부분을 삭제합니다.
    
  • GitLab Duo Chat은 또한 생성자 오버로딩, 객체 초기화 및 공유 포인터를 사용하여 최적화된 메모리 관리와 같은 것에 대해 안내합니다.

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

더 나은 답변 찾기

  • 다음 질문은 충분한 맥락을 제공하지 못했습니다.

    virtual override 대신에 단순히 override를 사용해야합니까?
    
  • 대신에, C++에 대한 맥락을 더 추가하여 더 나은 답변을 받아보세요.

    상속된 클래스에서 순수 가상 함수를 구현할 때, 가상 함수 오버라이드를 사용해야 할까요, 아니면 단순히 함수 오버라이드를 사용해야 할까요? C++에 대한 맥락입니다.
    
  • 비교적 복잡한 질문은 새로 만든 클래스에서 객체를 생성하고 특정 함수를 호출하는 방법과 관련이 있습니다.

    C++에서 클래스에서 객체를 어떻게 생성하고, SQLite DB 경로로 생성자를 호출하고, 함수를 호출할 수 있을까요? 포인터를 선호합니다.
    
  • 결과는 유용할 수 있지만, shared pointer 및 필요한 소스 코드 헤더를 보완해야 합니다.

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

    // 변수에 SQLite 경로 정의, 기본 값은 database.db
      
    // SQLite 클래스에 대한 shared pointer 생성
      
    // 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으로 변환
    
  • 또한 유틸리티 함수를 클래스에 정적 함수로 리팩터링하고, 그 후에 Chat에게 해당 함수를 호출하는 방법을 물어보세요.

    정적 함수를 제공하는 클래스로 /refactor
      
    해당 클래스의 정적 함수를 호출하는 방법은 무엇인가요?
    

소스 코드를 리팩터링한 후에, 더 많은 데이터베이스 유형에 대한 기반을 구축하고 전반적인 코드 품질을 향상시킵니다.

자원:

취약점 설명 및 해결

이 예시에서는 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을 생성하는 데 도움이 됩니다. 제안된 변경 사항이 요구 사항에 맞지 않거나 문제를 유발할 가능성이 있는 경우, Code SuggestionsChat을 사용하여 보완하세요. 예를 들어:

  1. GitLab Duo를 활성화하여 VS Code 또는 Web IDE를 열고 지침이 포함된 주석을 추가하세요.

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

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

    snprintf을 사용하여 /refactor
    

자원:

GitLab에 대한 질문에 대한 해답

이 예시에서의 도전 과제는 문제를 해결하기 위해 GitLab Duo Chat Beta를 탐구하는 것입니다.

여기에서 녹화를 시청하세요: GitLab Duo Coffee Chat: GitLab Duo Chat Beta를 사용하여 문제 해결 챌린지

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

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

    labels
      
    issue labels
    

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

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

    GitLab에서 라벨들을 설명해 주세요. 효율적인 사용 예시를 제공해주세요.
    

자원:

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

GitLab Duo 사용은 GitLab 코드베이스에 기여하는 데 중점을 두며, 고객이 더 효율적으로 기여하는 방법에 대해 다룹니다.

GitLab 코드베이스는 크며 때로는 복잡한 알고리즘이나 애플리케이션별 구현을 이해해야 할 때가 있습니다. 더 많은 정보를 알아보려면 아키텍처 컴포넌트를 확인하세요.

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

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

녹화본은 여기에서 시청하세요: GitLab Duo Coffee Chat: 코드 제안 및 채팅을 사용하여 GitLab에 기여하기

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

  1. /explain 코드 작업을 사용하여 선택한 코드 부분을 설명하고 HAML 템플릿의 작동 방식을 배울 수 있습니다.
  2. 코드 작업 프롬프트를 다듬어 /explain how HAML 렌더링이 작동하는지로 대체할 수 있습니다.

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

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++ 코드 생성 프롬프트

분산 파일 노드를 관리하는 애플리케이션을 만듭니다.

// Create an application to manage distributed file nodes
// Provide an overview the health state of nodes
// Use OOP patterns to define the base file node
// Add specific filesystems inherited from the base file

XDP 커널 이벤트에 첨부되어 네트워크 트래픽을 메트릭하는 eBPF 프로그램을 만듭니다. 리눅스 커널에서만 작동합니다.

// Create an eBPF program which attaches to XDP kernel events
// Count all packets by IP address
// Print a summary
// Include necessary headers

C# 코드 생성 프롬프트

다양한 센서에서 데이터를 수집하고 MSSQL에 데이터를 저장하는 의료 분석 앱을 만듭니다.

// Create a medical analyzer app
// Collect data from different sensors
// Store data in MSSQL
// Provide methods to access the sensor data

Go 코드 생성 프롬프트

쿠버네티스를 위한 옵저버빌리티 애플리케이션을 만들어 클러스터의 컨테이너, pod, 서비스 상태를 읽고 출력합니다.

// Create a client for Kubernetes observability
// Create a function that
// Read the kubernetes configuration file from the KUBECONFIG env var
// Create kubernetes context, namespace default
// Inspect container, pod, service status and print an overview
// Import necessary packages
// Create main package

Java 코드 생성 프롬프트

메트릭을 위한 다양한 데이터 소스를 가진 데이터 분석 애플리케이션을 만듭니다. 데이터 쿼리와 집계를 위한 API를 제공합니다.

// Create a data analytics app
// Parse different input sources and their values
// Store the metrics in a columnar format
// Provide an API to query and aggregate data

JavaScript 코드 생성 프롬프트

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

// Create a Paid Time Off app for users
// Create a date-time picker in ReactJS
// Provide start and end options
// Show public holidays based on the selected country
// Send the request to a server API

PHP 코드 생성 프롬프트

GitLab 릴리스를 위한 RSS 피드 가져오기를 만들어 제목으로 필터링을 허용합니다.

// Create a web form to show GitLab releases
// Fetch the RSS feed from https://about.gitlab.com/atom.xml
// Provide filter options for the title

Python 코드 생성 프롬프트

Flask를 사용하여 SQLite에 사용자를 저장하고 REST API를 사용하여 사용자를 관리하는 웹서버를 만듭니다.

# Create a Flask webserver
# Add REST API entrypoints to manage users by ID
# Implement create, update, delete functions
# User data needs to be stored in SQlite, create table if not exists
# Run the server on port 8080, support TLS
# Print required packages for requirements.txt in a comment.
# Use Python 3.10 as default

Ruby 코드 생성 프롬프트

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

# Create a Ruby app as log parser
# Provide hooks to replace sensitive strings in log lines
# Format the logs and store them in Elasticsearch

Rust 코드 생성 프롬프트

블로그 게시물 AI의 도움을 받아 Rust 프로그래밍 고급 학습의 예시를 사용하여 RSS 피드 리더 애플리케이션을 만듭니다.

    // Create a function that iterates over the source array
    // and fetches the data using HTTP from the RSS feed items.
    // Store the results in a new hash map.
    // Print the hash map to the terminal.

자원

많은 사용 사례가 GitLab Duo Coffee Chat YouTube 재생 디렉터리에서 실습을 통해 제공됩니다. 개발자 리레이션 팀이 유지하는 GitLab Duo Coffee Chat은 학습 시리즈입니다.

블로그 자료