Code Suggestions
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
Code Suggestions는 다음에서 사용할 수 있습니다: GitLab Duo Code Suggestions는 개발 중에 생성형 AI로 코드를 제안해 코드를 더 효율적으로 작성하도록 돕습니다. GitLab Duo에는 GitLab 17.2 이상이 필요합니다.
Model information
- 기본 LLM
- Amazon Q 용 LLM: Amazon Q Developer
- GitLab Duo with self-hosted models에서 사용 가능
히스토리
- 2024년 2월 15일부터 GitLab Duo Pro 애드온이 필요하도록 변경되었습니다. 이전에는 이 기능이 Premium 및 Ultimate 구독에 포함되어 있었습니다.
- 2024년 10월 17일부터 지원되는 모든 GitLab 버전에서 GitLab Duo Pro 또는 GitLab Duo Enterprise 애드온이 필요하도록 변경되었습니다.
- GitLab 17.6에서
fireworks_qwen_code_completion이라는 플래그와 함께 Fireworks AI 호스팅 Qwen2.5 코드 완성 모델 지원이 도입되었습니다. - GitLab 17.11에서 Qwen2.5 코드 완성 모델 지원이 제거되었습니다.
- GitLab 17.11에서 기능 플래그
use_fireworks_codestral_code_completion을 통해 Fireworks 호스팅Codestral이 기본적으로 활성화되었습니다. - GitLab 18.0에서 GitLab Duo Core를 포함하도록 변경되었습니다.
- GitLab 18.1에서 Fireworks 호스팅
Codestral이 기본 모델로 활성화되었습니다. - GitLab 18.2에서 코드 생성의 기본 모델이 Claude Sonnet 4로 변경되었습니다.
- GitLab 18.6에서 기능 플래그
code_suggestions_context가 제거되었습니다. - GitLab 18.10에서 GitLab Credits와 함께 GitLab.com의 Free 티어에서 사용할 수 있게 되었습니다.
- Code Suggestions에 대한 GitLab Duo Core 사용자 액세스가 변경되었습니다. GitLab 19.0부터 GitLab Duo Agent Platform의 일부로 제공됩니다.
Code Suggestions는 다음에서 사용할 수 있습니다:
- GitLab Duo Agent Platform. 과금은 사용량 기반입니다.
- GitLab Duo Pro 또는 Enterprise, GitLab Duo with Amazon Q. 과금은 보유한 애드온을 따릅니다.
GitLab Duo Code Suggestions는 개발 중에 생성형 AI로 코드를 제안해 코드를 더 효율적으로 작성하도록 돕습니다.
사전 요구 사항#
- GitLab Duo Core가 켜져 있어야 합니다.
- IDE에 Code Suggestions가 설정되어 있어야 합니다.
- 기본 GitLab Duo 네임스페이스가 설정되어 있거나, GitLab Duo를 사용할 수 있는 프로젝트가 열려 있어야 합니다.
GitLab Duo에는 GitLab 17.2 이상이 필요합니다. GitLab Duo Core를 사용하고 최선의 사용자 경험과 결과를 얻으려면 GitLab 18.0 이상으로 업그레이드합니다. 이전 버전도 계속 동작할 수 있지만 경험이 저하될 수 있습니다.
Code Suggestions 사용#
Code Suggestions를 사용하려면 다음과 같이 진행합니다:
-
IDE에서 프로젝트를 엽니다.
-
코드를 작성합니다. 입력하는 동안 제안이 표시됩니다. Code Suggestions는 커서 위치에 따라 코드 스니펫을 제공하거나 현재 줄을 완성합니다.
-
요구 사항을 자연어로 설명합니다. Code Suggestions는 제공된 컨텍스트를 바탕으로 함수와 코드 스니펫을 생성합니다.
-
제안을 받으면 다음 중 하나를 수행할 수 있습니다:
- 제안을 수락하려면 Tab을 누릅니다.
- 제안의 일부만 수락하려면 Control+Right arrow 또는 Command+Right arrow를 누릅니다.
- 제안을 거부하려면 Esc를 누릅니다. Neovim에서는 Control+E를 눌러 메뉴를 빠져나갑니다.
- 제안을 무시하려면 평소처럼 계속 입력합니다.
여러 코드 제안 보기#
히스토리
- GitLab 17.1에서 도입되었습니다.
VS Code의 코드 완성 제안에는 여러 제안 옵션이 있을 수 있습니다. 사용 가능한 제안을 모두 보려면 다음과 같이 진행합니다:
- 코드 완성 제안 위에 마우스를 올립니다.
- 대안을 순서대로 확인합니다. 다음 중 하나를 사용합니다:
- 키보드 단축키를 사용합니다:
- Mac에서는 Option+[를 눌러 이전 제안을, Option+]를 눌러 다음 제안을 확인합니다.
- Linux와 Windows에서는 Alt+[를 눌러 이전 제안을, Alt+]를 눌러 다음 제안을 확인합니다.
- 표시된 대화 상자에서 오른쪽 또는 왼쪽 화살표를 선택해 다음이나 이전 옵션을 확인합니다.
- 키보드 단축키를 사용합니다:
- Tab을 눌러 원하는 제안을 적용합니다.
코드 완성 및 코드 생성#
Code Suggestions는 코드 완성과 코드 생성을 함께 사용합니다:
| 코드 완성 | 코드 생성 | |
|---|---|---|
| 목적 | 현재 코드 줄을 완성하는 제안을 제공합니다. | 자연어 주석을 기반으로 새 코드를 생성합니다. |
| 트리거 | 입력할 때 트리거되며, 보통 짧은 지연이 있습니다. | 특정 키워드가 포함된 주석을 작성한 뒤 Enter를 누를 때 트리거됩니다. |
| 범위 | 현재 줄 또는 작은 코드 블록으로 제한됩니다. | 컨텍스트를 기반으로 전체 메서드, 함수, 클래스까지 생성할 수 있습니다. |
| 정확도 | 작은 작업과 짧은 코드 블록에서 더 정확합니다. | 복잡한 작업과 큰 코드 블록에서 더 정확합니다. 더 큰 대규모 언어 모델(LLM)을 사용하고, 추가 컨텍스트(예: 프로젝트에서 사용하는 라이브러리)가 요청에 함께 전송되며, 사용자의 지시가 LLM에 전달되기 때문입니다. |
| 사용 방법 | 코드 완성은 입력 중인 줄에 자동으로 완성을 제안합니다. | 주석을 작성하고 Enter를 누르거나, 빈 함수 또는 메서드를 입력합니다. |
| 사용 시점 | 한두 줄의 코드를 빠르게 완성할 때 코드 완성을 사용합니다. | 복잡한 작업이나 큰 코드베이스, 자연어 설명을 기반으로 새 코드를 처음부터 작성할 때, 또는 편집 중인 파일이 5줄 미만일 때 코드 생성을 사용합니다. |
Code Suggestions는 항상 두 기능을 함께 사용합니다. 코드 생성만 또는 코드 완성만 사용할 수는 없습니다. 두 기능을 따로 끌 수도 없습니다.
코드 생성 모범 사례#
코드 생성에서 최선의 결과를 얻으려면 다음을 따릅니다:
- 간결함을 유지하면서 최대한 구체적으로 작성합니다.
- 생성하려는 결과물(예: 함수)을 명시하고 달성하려는 내용을 상세히 적습니다.
- 사용하려는 프레임워크나 라이브러리 같은 추가 정보를 덧붙입니다.
- 각 주석 뒤에 공백이나 새 줄을 추가합니다. 이 공백은 지시가 끝났음을 코드 생성기에 알립니다.
- Code Suggestions가 사용할 수 있는 컨텍스트를 검토하고 조정합니다.
예를 들어 특정 요구 사항을 가진 Python 웹 서비스를 만들려면 다음과 같이 작성할 수 있습니다:
# Create a web service using Tornado that allows a user to sign in, run a security scan, and review the scan results.
# Each action (sign in, run a scan, and review results) should be its own resource in the web service
...
AI는 비결정적이므로 동일한 입력을 주어도 매번 같은 제안을 받지 못할 수 있습니다. 품질 높은 코드를 생성하려면 명확하고 구체적으로 작업을 서술합니다.
사용 사례와 모범 사례는 GitLab Duo 예시 문서를 참고합니다.
성능#
Code Suggestions의 기본 응답 시간과 스트리밍, 프롬프트 캐싱, 연결 구성 옵션을 설명합니다.
응답 시간#
Code Suggestions는 생성형 AI 모델로 동작합니다.
- 코드 완성의 경우 제안은 대체로 지연이 짧아 1초 미만이 걸립니다.
- 코드 생성의 경우 알고리즘이나 큰 코드 블록은 생성에 5초 이상 걸릴 수 있습니다.
개인 액세스 토큰으로 GitLab.com 또는 GitLab 인스턴스에 대한 보안 API 연결이 이루어집니다. 이 API 연결은 IDE/에디터의 컨텍스트 윈도를 GitLab 이 호스팅하는 서비스인 GitLab AI Gateway로 안전하게 전송합니다. 게이트웨이가 대규모 언어 모델 API를 호출하고, 생성된 제안이 다시 IDE/에디터로 전송됩니다.
스트리밍#
코드 생성 응답은 VS Code, JetBrains IDE, Visual Studio, Eclipse에서 스트리밍되므로 생성된 코드가 더 빨리 나타납니다. Neovim에서 스트리밍하려면 실험 기능인 고스트 텍스트 기능이 필요합니다.
코드 완성에는 스트리밍이 적용되지 않습니다.
프롬프트 캐싱#
히스토리
- GitLab 18.0에서 도입되었습니다.
프롬프트 캐싱은 Code Suggestions의 지연을 줄이기 위해 Fireworks 호스팅 모델 전체에서 기본적으로 활성화되어 있습니다.
프롬프트 캐싱이 활성화되면 코드 완성 프롬프트 데이터가 모델 공급업체의 메모리에 일시적으로 저장됩니다.
프롬프트 캐싱은 캐시된 프롬프트와 입력 데이터를 다시 처리하지 않게 해 지연을 크게 줄입니다. 캐시된 데이터는 영구 저장소에 기록되지 않습니다.
다음 범위에서 프롬프트 캐싱을 끌 수 있습니다:
- GitLab.com에서는 최상위 그룹 단위로 끌 수 있습니다.
- GitLab Self-Managed에서는 인스턴스 단위로 끌 수 있습니다.
이 설정은 모든 GitLab Duo Agent Platform 기능에 적용됩니다.
직접 및 간접 연결#
히스토리
- GitLab 17.2에서
code_suggestions_direct_access라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다. - GitLab 19.5에서 직접 연결이 AI Gateway
/v4/code/suggestions엔드포인트를 사용하도록 변경되었습니다.
기본적으로 코드 완성 요청은 지연을 최소화하기 위해 IDE에서 AI Gateway로 직접 전송됩니다.
이 직접 연결이 동작하려면 IDE가 https://cloud.gitlab.com:443에 연결할 수 있어야 합니다. 네트워크 제한 등의
이유로 연결이 불가능하면 모든 사용자에 대해 직접 연결을 비활성화할 수 있습니다. 이렇게 하면
코드 완성 요청이 GitLab Self-Managed 인스턴스를 거쳐 간접적으로 전송되고, 인스턴스가 다시 그 요청을
AI Gateway로 보냅니다. 이 경우 요청 지연이 길어질 수 있습니다.
에디터 확장은 GitLab Language Server를 사용해 AI Gateway와 통신하여 코드 제안을 받습니다.
Language Server는 직접 연결 요청을 AI Gateway /v4/code/suggestions 엔드포인트로 보냅니다.
AI Gateway가 직접 연결 요청을 거부하면 Language Server는 자동으로 간접 연결로 전환하며,
간접 연결은 지연이 더 깁니다.
이전 버전의 Language Server는 GitLab 19.5에서 더 이상 사용되지 않으며 GitLab 21.0에서 제거될 예정인 v2 엔드포인트를 사용합니다. GitLab 21.0 이전에 에디터 확장을 최신 버전으로 업데이트합니다. 자세한 내용은 이슈 605661을 참고합니다.
직접 또는 간접 연결 구성#
사전 요구 사항:
- GitLab Self-Managed 인스턴스의 관리자여야 합니다.
- 오른쪽 위에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- GitLab Duo features를 확장합니다.
- Connection method에서 다음 중 하나를 선택합니다:
- 코드 완성 요청의 지연을 최소화하려면 Direct connections를 선택합니다.
- 모든 사용자에 대해 직접 연결을 비활성화하려면 Indirect connections through GitLab Self-Managed를 선택합니다.
- Save changes를 선택합니다.
- 오른쪽 위에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- AI-native features를 확장합니다.
- 다음 중 하나를 선택합니다:
- 직접 연결을 활성화해 코드 완성 요청의 지연을 최소화하려면 Disable direct connections for code suggestions 체크박스를 선택 해제합니다.
- 직접 연결을 비활성화하려면 Disable direct connections for code suggestions 체크박스를 선택합니다.
제한 사항#
파일 콘텐츠 잘라내기#
LLM 한도와 성능상의 이유로 현재 열려 있는 파일의 내용은 다음과 같이 잘립니다:
- 코드 완성의 경우 32,000 토큰(약 128,000자)으로 잘립니다.
- 코드 생성의 경우 80,000 토큰(약 320,000자)으로 잘립니다.
커서 위쪽의 내용이 아래쪽 내용보다 우선합니다. 커서 위쪽 내용은 왼쪽부터 잘리고, 커서 아래쪽 내용은 오른쪽부터 잘립니다. 이 수치는 Code Suggestions의 최대 입력 컨텍스트 크기를 나타냅니다.
코드 생성 한도 상향 지원은 이슈 585841에서 제안되었습니다.
출력 길이#
LLM 한도와 성능상의 이유로 Code Suggestions의 출력은 다음과 같이 제한됩니다:
- 코드 완성의 경우 64 토큰(약 256자)으로 제한됩니다.
- 코드 생성의 경우 2048 토큰(약 7168자)으로 제한됩니다.
결과 정확도#
GitLab은 생성되는 전체 콘텐츠의 정확도를 계속 개선하고 있습니다. 다만 Code Suggestions는 다음과 같은 제안을 생성할 수 있습니다:
- 관련 없는 제안.
- 불완전한 제안.
- 파이프라인 실패로 이어질 수 있는 제안.
- 보안상 취약할 수 있는 제안.
- 불쾌감을 주거나 배려가 부족한 제안.
Code Suggestions를 사용할 때도 코드 리뷰 모범 사례는 그대로 적용됩니다.