개발자를 위한 AI (1부, IDE)

  • 나쁜 코드를 쓰는 시간을 줄이면 어때요?
  • 네, 그리고 줄 바꿈은 고양이 모양으로 하자요!

현재 문서에는 RAG 및 의미 분석 기능 지원이 없습니다.

IDE

코드를 바탕으로 그 코드가 무엇을 하는지 설명하는 기능은 어떨까요?

PyCharm/IDEA에서 작업 중이라면 Devoxx 플러그인을 사용할 수 있으며, 이 플러그인은 LLM을 호출하여 코드 리뷰 및 원하는 모든 작업을 수행할 수 있습니다.

아래에서는 이 플러그인을 LM Server API 서비스와 연동하는 방법을 살펴보겠습니다.

기능

  • 로컬 및 클라우드 언어 모델 지원: Anthropic, Groq, Ollama, OpenAI, …
  • 선택된 코드 조각에 대한 팁 제공
  • 코드 리뷰
  • 코드가 무엇을 하는지 설명 생성

설치 계획

  • 플러그인 설치 (아래 참조)
  • Ollama, LMStudio 또는 GPT4All이 실행 중인지 확인
  • 설정에서 프롬프트를 업데이트
  • 선택 사항: 클라우드 LLM 제공업체의 API 키 추가
  • 플러그인 사용 시작

플러그인을 마켓플레이스에서 설치하세요. 만약 설치가 안 되는 경우 (수출 통제 규정으로 인해, 오픈소스는 가능함):

…이 경우 다른 컴퓨터에서 이 플러그인을 복사하거나 GitHub에서 다운로드하세요. 다음 폴더와 파일을 주의해서 확인하세요 (Ubuntu 예시):

# 홈 디렉토리 내에서
$ find . -iname 'devoxx*'
./.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
./.cache/JetBrains/PyCharmCE2025.1/DevoxxGenie
./.cache/JetBrains/PyCharmCE2025.1/plugins/DevoxxGenie.zip
./.local/share/JetBrains/PyCharmCE2025.1/DevoxxGenie
```- DevoxxGenie.zip 파일을 `~/.local/share/JetBrains/PyCharmCE2025.1` 폴더 또는 IDEA에 따라 해당 폴더에 압축해 풀어주세요. 제 경우 PyCharmCExxx 폴더는 없었기 때문에 수동으로 생성해야 했습니다.
- `~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml` 설정 파일을 업로드해주세요.
- 선택 사항입니다. 플러그인과 그 아카이브를 캐시에 추가해야 할 수도 있습니다.

이제 IDE를 실행하면 설치된 플러그인 목록에 미리 설정된 설정이 적용된 플러그인이 보일 것입니다:

![IDE 설정 창에서 설치된 플러그인이 표시되고, 중국어, 일본어, 한국어 등 언어 패키지가 포함된 모습입니다. (AI 생성 이미지)|690x367](upload://zhRPNYpgtdcMU1upNbivGsosnJG.png)

## 설정

1. 플러그인 설치 후, 메뉴의 **File** → **Settings**로 이동하여 LLM의 설정을 조정하세요. 예를 들어, 온도, 최대 출력 토큰 수, 재시도 횟수, 타임아웃 등을 설정할 수 있습니다. 원하시면 LLM API 키를 추가로 입력할 수도 있습니다.

   > DevOps는 API 서비스를 제공할 수 있으며, 이는 보안이 없는 HTTP 서버로 동작합니다. 민감한 데이터를 다루는 경우, 이 서비스를 원격으로 사용하지 마세요. 왜냐하면 트래픽이 탈취될 수 있고, 공개된 데이터가 해커에 의해 악용될 수 있기 때문입니다.

   LM Studio에서 컨텍스트 윈도우를 올바르게 설정하려면 URL `http://localhost:1234/api/v0`을 사용해야 한다고 명시되어 있지만, 이는 오류입니다. 모델을 로드할 때 컨텍스트 윈도우를 수동으로 확장해야 합니다 (예: 4096 → 8192).

   ![DevoxxGenie 설정 창에서 사용자가 다양한 로컬 LLM 제공자 및 OpenAI의 URL을 설정하는 모습입니다. (AI 생성 이미지)|599x500](upload://a1TZn4KG3kqBYd9sq6XNl2XWXa.png)

   **Prompts** 탭에서는 시스템 프롬프트와 사용자 요청을 구성할 수 있습니다.

   시스템 프롬프트는 사용자 요청과 함께 전송되며, 작업 범위, 검색 제약 조건, 출력 형식 등을 정의합니다. 이는 매우 중요한 요소입니다.

   시스템 프롬프트에서 다음 줄을 제거하세요:

The Devoxx Genie is open source and available at GitHub - devoxx/DevoxxGenieIDEAPlugin: DevoxxGenie is a plugin for IntelliJ IDEA that uses local LLM's (Ollama, LMStudio, GPT4All, Jan and Llama.cpp) and Cloud based LLMs to help review, test, explain your project code..
You can follow us on Bluesky @ @devoxxgenie.bsky.social on Bluesky.


모든 언어 모델은 마크다운 표기법을 이해하므로, 목록, 서브포인트, 코드 블록 등 구조화된 프롬프트를 작성할 수 있습니다.

> DevOps: 기본 프롬프트(제약 조건 포함)는 다음 파일에 정의되어 있습니다.
> 
> ``` 
> ~/.config/JetBrains/PyCharmCE2025.1/options/DevoxxGenieSettingsPlugin.xml
> ```
> 
> 모델은 러시아어 요청을 영어로 번역할 수 있습니다. 잘못된 용어 번역은 응답 품질에 큰 영향을 미치며, 질문이 부정확할 경우도 마찬가지입니다. 예를 들어, "페이지에 설명이 있는 곳을 찾아줘"와 "페이지 링크를 제공해줘"라는 두 질문을 비교해보세요. 어느 경우에 봇이 링크를 제공할까요? 정확히 원하는 것을 요청하세요 (사람에게 문제를 제시할 때와 같은 방식으로).

<br>

2. **Web search** 탭에서는 모델이 인터넷과 상호작용할 수 있는 옵션(기본값으로 활성화됨)이 있습니다. Google Web Search 개인 API 키가 있다면 사용할 수 있습니다.

3. RAG 설정의 세부 사항은 이후에 추가될 예정입니다:

![DevoxxGenie 설정 창에서 프로젝트 스캔 및 복사 설정과 함께 ChromaDB를 사용하는 Retrieval-augmented Generation (RAG) 설정이 표시된 모습입니다. (AI 생성 이미지)|675x500](upload://gYED7Xn3c0twmTBEwwXsRF0f3pK.png)

## 플러그인 사용 방법

1. 이제 원본 파일을 열고 코드 조각을 선택하거나, 프로젝트 파일을 우클릭하여 컨텍스트 창에 추가하세요.

**Devoxx** 버튼을 클릭하세요:

![컴퓨터 화면에서 플러그인 사용 방법을 보여주는 이미지](upload://...)터미널 창에 쉘 코드가 표시되고, 프로젝트 파일이 있는 폴더들이 열려 있습니다. (AI 이미지 캡션)|600x305](upload://2aBOJ4FADHQqiRrCP6OETygGNFT.png)

2. 적절한 모델을 드롭다운 목록에서 선택하세요. 아쉽게도 목록에 일부 모델은 사용에 적합하지 않을 수 있습니다(예: 임베딩 모델). 모델 필터는 설정할 수 없습니다.

![다양한 머신러닝 모델 목록(예: GPT 및 Qwen 기반 모델, RAG 및 웹 인터페이스 설정 포함)이 화면에 표시됨. (AI 이미지 캡션)|507x500](upload://wgYHxRY5QimRgxam4SGxLL60KSd.png)

3. 초대 문맥을 정의한 후 질문을 제출하거나 다음 명령어를 사용할 수 있습니다: `/test`, `/review`, `/explain`, `/help`.

4. 선택한 LLM으로부터 응답을 받으면 코드 위의 버튼을 사용하여 예시 코드를 클립보드에 복사하거나 파일에 붙여넣을 수 있습니다. 또는 스크립트의 작동 설명을 Markdown 형식으로 작성된 텍스트를 받을 수 있으며(기본적으로 영어로 제공되나, 프롬프트에서 원하는 언어를 지정할 수 있습니다).

## 출력 예시

모델 `qwen2.5-coder-14b-instruct`를 사용한 `/explain` 명령어의 스크립트 분석 결과:

- 코드 줄 수: 500

- 모델 컨텍스트 윈도우: 8192 (기본값 4096에서 확장됨)

- 토큰 수:

```json
"usage": {
 "prompt_tokens": 6298,
 "completion_tokens": 620,
 "total_tokens": 6918
}
  • RTX 5060Ti 카드에서의 분석 시간: 10초

  • 응답 품질: 내 상황에서 매우 만족스럽습니다. 모델은 코드와 주석을 바탕으로 구조화된 설명을 생성하여 이 코드의 기능을 명확히 설명해 줄 수 있었습니다.

스포일러

물론입니다! 이 스크립트를 더 쉽게 이해할 수 있도록 주니어 개발자에게 설명해 드리겠습니다.

개요

이 스크립트는 Tesseract를 사용해 PDF 및 이미지 파일(JPG/JPEG)을 처리하는 데 사용됩니다. PDF가 텍스트를 포함하는지 확인하고, 필요 시 TIFF 및 PNG 형식으로 변환한 후 OCR을 수행합니다. 모든 작업은 자세한 보고서를 위해 로그로 기록됩니다.

핵심 구성 요소

  1. 색상 정의:

    • GREENNC는 터미널에서 색상 출력을 위한 변수입니다.
  2. 도움말 함수 (show_help):

    • 스크립트 사용법, 설명, 옵션, 실행 예시를 제공합니다.
  3. 인자 파싱:

    • while 루프와 case 문을 사용해 명령줄 인자를 파싱합니다.
    • DPI 설정, 압축 유형, OCR 언어, 처리 후 TIFF/PNG/TXT 파일 유지 여부 등의 옵션을 제공합니다.
  4. 유효성 검사:

    • 제공된 DPI가 유효 범위(72~1200)에 있는지 확인합니다.
    • 압축 알고리즘이 지원되는 유형(group4, lzw, zip)인지 확인합니다.
  5. 로그 설정:

    • 모든 작업과 출력을 기록할 로그 파일을 초기화합니다.
  6. 파일 탐색:

    • 지정된 디렉터리 또는 제공되지 않은 경우 현재 디렉터리에서 PDF 및 JPG/JPEG 파일을 find 명령어로 탐색합니다.
  7. PDF 파일 처리:

    • 각 PDF에 대해 pdftotext를 사용해 텍스트가 이미 존재하는지 확인합니다.
    • 텍스트가 존재하면 텍스트 포함 PDF로 로그 기록합니다.
    • 텍스트가 없으면 TIFF 및 PNG 형식으로 변환 후 TIFF에 OCR을 수행합니다.
  8. 이미지 파일 처리:

    • 각 JPG/JPEG 파일에 대해 Tesseract를 직접 사용해 OCR을 수행합니다.
  9. 통계 계산:

    • 인식된 총 문자 수, 단일 파일에서 최대 문자 수, 문자 수 분포 등 다양한 통계를 계산합니다.
    • 스캔된 PDF 비율 및 평균 인식 속도를 계산합니다.
  10. 요약 생성:

    • 처리된 모든 파일, 통계, 사용된 옵션을 포함한 상세 요약 보고서를 생성합니다.
    • 이 요약은 터미널과 로그 파일에 모두 기록됩니다.

사용 예시

특정 옵션을 사용해 스크립트를 실행하는 예시:

./work2.sh --dpi 600 --compress lzw --lang rus+eng --no-keep-tiff --no-keep-txt ./docs
```이 명령은 DPI를 600으로 설정하고, TIFF 파일에 LZW 압축을 사용하며, OCR에는 러시아어와 영어를 지정하고, 처리 후 TIFF/PNG/TXT 파일을 유지하지 않습니다.

### 결론

이 스크립트는 OCR 기능을 갖춘 PDF 및 이미지의 배치 처리를 위한 종합적인 도구입니다. 상세한 로깅 및 통계를 제공하여 문서 처리 작업에서 자동화 및 분석에 유용합니다.

결론

기능이나 문서화를 위한 최적의 해결책을 찾는 데 매우 유용한 도구입니다.

작동 방식

개발 중인 전체 흐름은 다음과 같습니다. 다음 글에서는 GitLab에서 머지 리퀘스트(MR) 전에 AI 코드 리뷰를 사용하는 방법에 대해 설명하겠습니다.

graph LR
    classDef pclass fill:#f5f5dc
    classDef wclass fill:#f96
    classDef pmclass fill:#4f7
    classDef yclass fill:#ff9
    classDef oclass fill:#ffbf00

    B(IDEA) -- |코드 사전 검토| B1(AI Devoxx):::pclass
    B1 -- C(수정):::wclass
    C -- D{자체 검토}:::oclass
    B -- |너의 코드가 완벽하다| F
    F -- H2{코드 리뷰}:::oclass
    H2 -.- |수정 필요| B1
    D -- |검토 완료| F(MR):::pmclass
    H2 -- E(병합)

참고 링크

테스트 결과

Python 스크립트 102줄의 코드 리뷰 결과입니다. 일부 모델은 모델 메모리 로딩 시간 및 워밍업 시간을 제거하기 위해 두 번째 실행을 시도했습니다. ‘Recom’ 열에는 모델이 제안한 추천 수가 표시됩니다. 플러스 기호(+)는 상세 분석을 의미합니다. 'Code = none’은 수정된 코드 예시를 출력하지 않는다는 뜻입니다. 분석 시간은 ‘1st’, ‘2nd’ 열에 초 단위로 표시됩니다.

Arch VL Model Params Quant GB Recom Code 1st 2nd
1 qwen3 deepseek-r1-0528-qwen3 8b q8_0 8.71 3 - 126
2 llama deepseek-r1-distill-llama 8b q4_0 5.28 6 - 34 s
3 qwen3 deepseek-r1-0528-qwen3 8b q4_k_m 5.03 3 none 85
4 gemma3 gemma-3 12b q6_k 9.66 10+ - 84
5 gemma3 :eye: gemma-3 4b q8_k_xl 6.84 11+ - 49
6 gemma3n gemma-3n 6.9b q8_0 7.35 2 none 20
7 gemma3 gemma-3 12b q4_k_m 7.30 10++ - 66
8 gemma3 :eye: gemma-3 4b q8_0 4.98 4 - 41
9 llama llama-3-gpt4o-ru 8b q4_k_m 4.92 8 none 25
10 llama llama 3.2 8x3b q3_k_s 8.25 6 - 24
11 llama llama 3.1 8b q6_k 6.60 8 - 25
12 llama llama 3.1 8b q8_0 8.54 8 - 35
13 phi3 phi-4 15b q4_k_m 9.05 12 - 47 34
14 phi3 phi-4-reasoning 15b q4_k_m 9.05 13 - 66 14
15 llama mistral-nemo-2407 12b q6_k 10.06 5 - 40 25
16 llama oh-dcft-v3.1-gemini-1.5-flash 8b 6_k 6.60 5 - 29 27
17 qwen3 qwen3-14b-gemini 14b q4_k_m 9.00 13+ - 127 76
18 qwen3 qwen3-8b 8b q8_0 8.71 14+ - 63 43
19 qwen2 qwen2.5-coder 14b q4_k_m 8.99 8 - 47 36
20 qwen2vl qwen2.5-vl 7b q8_0 8.10 8+4 - 41 36
21 qwen2vl spaceQwen2.5-vl 3b f16 6.18 3 - 30

최종 코드는 작동 여부를 검증하지 않았으며, 분석 깊이에 대한 주관적 평가를 제공합니다. 특히 5번, 7번, 14번, 18번 모델이 흥미롭고, 20번 모델도 상대적으로 유용합니다. 이 모델들을 사용해 선택된 포럼 주제를 요약한 결과는 Phi 4가 가장 우수하며, Gemma 3과 Qwen 3도 괜찮습니다. Gemma 3는 이미지 인식 기능을 가지고 있고, Qwen은 자주 영어로 전환됩니다.

테스트는 RTX 5060Ti 16GB(15.5GB, 모델 크기가 9.5GB를 초과하면 로드 불가)에서 수행되었으며, Qwen은 자주 영어로 전환되므로 요약에 적합하지 않습니다.

서버: https://lmstudio.ai

컨텍스트 길이가 4096에서 8192로 증가했습니다.

코드 리뷰 및 챗봇용:

코드 리뷰, 챗봇 및 요약용:

챗봇 및 요약용:

이미지 인식용: