JupyterLab에서 Amazon Q Developer 사용하기

    목차
반응형

Amazon Q Developer

= 개발자를 위한 챗봇이다. 코드를 어떻게 작성해야 해결할 수 있을지 물어보고, 에러가 있을 때 해결방법을 알려주는 기능을 제공한다. 여기까지는 일반 LLM과 다른 점을 찾기 힘들다고 할 수 있겠지만 이외에도 [프로젝트의 전체 코드 확인 및 자동 주석 추가], [보안 취약점 확인 및 개선법 제공], [AWS 콘솔에서 오류 발생 시 해결책 제시], [네트워크 연결성 및 VPC 접근성 분석], [Code Transformation(Java 8에서 17로 업그레이드 기능)] 등을 제공한다.

여기에 가장 추천하고 싶은 기능은 코드 작성 도우미인 [Code Whisperer]이다. Code Whisperer는 Github Copilot과 유사한 작업을 하여 코드 문맥이나 주석에 맞춰 새로운 코드를 추천해주고 작성까지 해주는 기능이다. 원래 해당 기능이 먼저 출시되었으나 Amazon Q가 출시하면서 여기에 통합이 되었다. Amazon Q는 AWS 콘솔, VS Code, 팀즈 등에서 사용할 수 있으며, JupyterLab에서는 2024년 7월 현재 Code Whisperer 기능만 사용할 수 있다.

Amazon Q Developer는 무료 버전과 유료 버전이 있다. 무료 버전은 월 단위로 제한이 있긴 하지만, Code Whisperer 기능만 주로 쓰는 나는 아직까지 제한에 걸려본 적이 없다.

 

 

JupyterLab에 Amazon Q 설치하기

1. `jupyterlab >= 4.0`에서만 지원하므로 Jupyter Lab 버전을 우선 확인하자.

2. `pip install amazon-q-developer-jupyterlab-ext`을 통해 패키지를 설치

3. `jupyter server extension enable amazon_q_developer_jupyterlab_ext`를 입력하여 jupyter 서버에서 Amazon Q 확장을 허용하도록 하자

4. AWS 공식 페이지에 적혀있는 방법에 따라 빌더 ID로 로그인해주자. (무료이다!)

 

인코딩 오류 해결

3번의 커맨드를 입력했는데도 불구하고 jupyter lab에서 저 커맨드를 실행하라는 에러메시지를 던지는 오류가 있다. jupyter lab을 킨 프롬프트창의 로그를 확인해보면 아래와 같이 인코딩 오류가 발생했을 수 있다.

Traceback (most recent call last):
      File "C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\jupyter_server\extension\manager.py", line 323, in add_extension
        extpkg = ExtensionPackage(name=extension_name, enabled=enabled)
      File "C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\jupyter_server\extension\manager.py", line 187, in __init__
        self._load_metadata()
      File "C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\jupyter_server\extension\manager.py", line 196, in _load_metadata
        self.module, self.metadata = get_metadata(name, logger=self.log)
      File "C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\jupyter_server\extension\utils.py", line 65, in get_metadata
        module = importlib.import_module(package_name)
      File "C:\Users\username\Anaconda3\envs\myenv\lib\importlib\__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
      File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
      File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 850, in exec_module
      File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
      File "C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\amazon_q_developer_jupyterlab_ext\__init__.py", line 9, in <module>
        data = json.load(fid)
      File "C:\Users\username\Anaconda3\envs\myenv\lib\json\__init__.py", line 293, in load
        return loads(fp.read(),
    UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 1689: illegal multibyte sequence

위 로그처럼 18번째 줄에 찍혀있는 `C:\Users\username\Anaconda3\envs\myenv\lib\site-packages\amazon_q_developer_jupyterlab_ext\__init__.py`을 열고 해당 파일의 8~9번째 줄 코드에 다음과 같이 `encoding='utf-8'`을 추가해준다.

with (HERE / "labextension" / "package.json").open(encoding='utf-8') as fid:
    data = json.load(fid)

 

이후 jupyter lab 서버를 닫고 다시 열면 jupyter lab 좌하단에서 Amazon Q를 사용할 수 있다고 체크표시로 알려준다.

 

 

Code Whisperer 사용하기

체크표시가 떠있는 Amazon Q를 클릭해보면 숏컷을 확인할 수 있다.

자동 제안 기능은 코드 작성이 어느 정도 되어있고, 반복적인 코드를 작성하게 될 때가 아니면 잘 작동하지 않는 체감이 든다. 그렇기 때문에 코드를 처음부터 작성하고 싶다면 Manual Invoke로 코드를 제안받는 걸 추천하고 싶다.

 

1. Alt+C로 코드를 추천받는다.

"S3에 저장된 csv 데이터 가져오기"라는 주석을 작성하고 코드를 추천받았다.

 

 

2. 방향키 (위, 아래)를 통해 제안들을 확인한다.

1은 `boto3`를 통해 데이터를 가져오는 거고 2는 `s3fs`를 통해 가져오도록 제안하고 있었다.

 

 

3. Tab을 눌러 제안을 허용한다.

나는 1의 `boto3` 제안이 더 끌려서 1에 두고 Tab을 눌렀다.

그러면 자동으로 코드가 작성이 된다.

 

 

4. 과정을 반복하여 완성한다.

# S3에 저장된 csv 데이터 가져오기
import boto3
import pandas as pd
import numpy as np
import io
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='XXXXXX', Key='data/전체���.csv')
df = pd.read_csv(io.BytesIO(obj['Body'].read()))

위 코드는 내가 주석만 작성하고 이후로는 Code Whisperer가 알아서 작성한 코드이다. 한글이 일부 깨지는 문제와 불필요한 numpy를 호출한 약간의 찐빠는 냈지만 주석에 맞춰 기능 자체는 잘 추천해준다.

 

 

아래처럼 여러 줄을 추천해줄 때도 종종 있다.

 

 

여담

나는 Code Whisperer가 Amazon Q로 바뀌기 전, `amazon-codewhisperer-jupyterlab-ext` 패키지로 Code Whisperer를 사용하고 있긴 했지만 별로였다. 제안을 바꾸기 위해 방향키를 누르면 다음 코드블럭으로 넘어가는 버그와, 탭을 누르면 들여쓰기가 되어버려 꼭 앞 한글자를 써준 뒤 탭을 눌러야만 작성이 되는 버그로 인해 많이 불편한 상황이었다. 그래도 눈물을 머금고 꾸역꾸역 사용하고 있었으나 어느 날부터 `CodeWhisperer: InvalidClientException: Client is expired` 오류가 나며 빌더 ID 로그인도 되지 않았다. '아니 이게 무슨 일이지... X신 같긴 해도 잘 쓰고 있었는데... jupyter lab에서 VS Code로 넘어가야 하나...'하고 고민하고 있었는데 `amazon-q-developer-jupyterlab-ext`로 변경되었다는 것을 알게 되었다. AWS에서 `amazon-q-developer-jupyterlab-ext`를 내버리면서 기존 클라이언트를 없애 이전 패키지를 사용할 수 없게 된 것 같다. 그러면서 위에 설명했던 버그들까지 고치면서 아주 좋은 패키지가 되었다.

 

 

`CodeWhisperer: InvalidClientException: Client is expired` 에러 고치겠다고 AWS Q&A 따라했다 실패하고, 혹시 jupyter lab 버전 문제인가 싶어 재설치하고, 그랬더니 404 에러나서 jupyter lab 폴더를 아예 삭제했다가 재설치 했다는 이야기는 덤.

728x90
반응형