주메뉴 바로가기 본문 바로가기

알림

콘솔 이동 시 로그인이 필요합니다.

로그인하시겠습니까?

아니요

닫기

주문 불가 알림

주문권한이 없습니다.

콘솔에 접근할 수 없는 계정입니다.

확인

닫기

알림

신용카드 등록이 필요합니다.

신용카드 등록 페이지로 이동하시겠습니까?

아니요

닫기
C&C Tech
img

Amazon Q Developer : Deep Dive

img Sangho Lee(이상호)
| 2025.01.08
  • Q
  • AWS

AWS Q Developer의 기능들에 대해 조금 더 깊게 사용해봅니다.

Amazon Q?

Amazon Q는 소프트웨어 개발을 가속화하고 기업의 내부 데이터 활용 능력이 가장 뛰어난 생성형 AI 기반 도우미입니다.



Q에는 아래와 같은 각각 기능에 특화되어 분리된 제품을 제공됩니다.
  • Q Business : 기업용 생성형 AI 기반 어시스턴트
  • Q Developer : 소프트웨어 개발을 위한 AI 코딩 어시스턴트
제품 이외에도 특정 AWS 서비스에 특화된 것도 제공됩니다.
  • Amazon Q in QuickSight : BI 대시보드 구축, 시각화 생성, 복잡한 계산을 자연어로 수행하고, AI 기반 인사이트 요약 및 데이터 스토리를 제공하는 생성형 BI 도우미
  • Amazon Q in Connect : 콜센터 에이전트에게 실시간 고객 대화를 분석하여 적절한 응답과 조치를 추천하고 관련 회사 콘텐츠를 제공하는 AI 기반 고객 서비스 지원 도구
  • Amazon Q in Supply Chain : 급망 관리자들이 자연어로 공급망 상황을 질문하고 지능적인 답변을 얻으며, 다양한 시나리오를 탐색할 수 있게 해주는 AI 기반 공급망 분석 도구

본 글에서는 Q Developer에 대해서 탐구해보도록 하겠습니다.

Q Developer ?

Q Developer는 이름에서 알 수 있는 것 처럼 개발자를 위해 특화된 서비스입니다.(유사한 서비스로는 Copilot이 있습니다.)


Q Developer를 IDE와 통합하여 사용하면 개발 생산성을 높일 수 있습니다.
IDE 내에서 코드에 대해 채팅(질의/응답), 새로운 코드를 생성, 보안 취약점을 스캔, 특정 언어의 버젼 업그레이드 등 개발에서 필요한 전반적인 스킬에 대해 도움을 주는 도구입니다.
25년 01월 기준 지원되는 IDE는 아래와 같습니다.

  • Visual Studio Code
  • JetBrains
  • AWS Toolkit for Visual Studio
  • Eclipse(Preview)
IDE외에도 명령줄(CLI)를 통해서도 사용 가능합니다.

프리티어 / Pro

Q Developer는 프리티어, Pro(유료, 사용자당 월 19$) 두가지로 제공됩니다.
Pro에서는 프리티어에서 제공되는 모든 기능을 포함하여 제공하며, 일부 기능들에 대해서는 Limit이 더 높아 사용에 용이합니다.

가장 크게 기능적으로 차이를 보이는 것은 아래와 같습니다.

  • Customization(사용자 지정) : 팀의 내부 라이브러리, 독점 알고리즘 기술 및 엔터프라이즈 코드 스타일을 준수하는 방식으로 소프트웨어 개발을 지원
  • Management(대시보드, 사용자 관리) : 서비스를 사용하는 방법에 대한 유용한 데이터가 요약, Identity Center를 통한 사용자 관리

자세한 비용과 기능 비교는 https://aws.amazon.com/ko/q/developer/pricing/ 에서 확인 가능합니다.

Q Developer 기능 살펴보기

* 본 글에서는 Q Developer를 설치하는 방법에 대해서는 다루지 않으며, Pro 기준으로 사용하기 때문에 프리티어와는 차이가 있을 수 있습니다.

기능을 살펴보기위한 환경은 VScode(IDE)로 구성하였습니다.

VScode에 Q Developer Extensions을 설치하고 나면 아래와 같이 사용준비가 되며, 채팅 명령으로는 5가지에 대한 기능을 제공합니다.

  1. /transform : 전체 프로젝트의 코드 언어 버전을 업데이트
  2. /dev : Amazon Q를 사용하여 기능 개발을 위한 구현 계획 가져오기
  3. /test : Amazon Q를 사용해 코드에 대한 단위 테스트 생성
  4. /review : 보안 취약성 및 코드 품질 문제를 검토
  5. /doc : 코드를 이해하고 코드에 README 생성 및 업데이트
  6. /clear : 현재 대화를 지우고 이전 대화 컨텍스트 제거
  7. /help : Amazon Q의 가능한 작업, 불가능한 작업, 예시 질문, 빠른 명령 개요 확인
 :

채팅을 통한 기능 이외에도 인라인 제안도 아래와 같이 제공됩니다.




직접 코드 블록을 설정하고 우클릭을 통해 원하는 부분을 바로 채팅에 기능으로 전달할 수 있습니다.


지원되는 언어로는 많이 사용되는 java, python을 지원하며, SAP에서 사용되는 ABAP도 지원하며,
상세한 지원 언어 목록은 https://github.com/aws/aws-toolkit-vscode/blob/master/packages/core/src/shared/filetypes.ts 에서 확인 할 수 있습니다.

Q Developer 사용해보기

제공되는 몇가지 기능에 대해서 VSCode내에서 간단하게 사용하는 예시를 알아보도록 하겠습니다.

/dev 기능

코드를 생성하거나, 업데이트, 최적화 등 어플리케이션을 구축하는데 도움이 될 수 있습니다.

아래는 /Dev를 통해 10개의 난수를 발생시키고, 선택 정렬을 실행하는 C 코드 결과입니다.
  • /dev "write a C code to randomly generate 10 numbers and sort them in ascending order."
 
  • 명령에 따라 바뀌게 될 내용에 대해서 요약하여 답변을 알려줍니다.
  • 결과로 파일이 이미 있는데 해당 파일의 내용을 바꿀것인지에 묻는 답변입니다.
  • 파일 명 옆에 체크표시를 누르거나, 답변 제일 마지막에 "Accept all changes"를 누르면 아래와 같이 적용됩니다.


 
  • 위에서 만들어진 C언어 코드를, Python으로 언어를 변경하고 파일 확장자명도 바꾸는 명령을 실행해보도록 하겠습니다.
  • /dev "Please change the current code from C language to Python and also change the file extension to .py."
  • 동일하게 변경되는 사항들에 대한 답변을 알려주며, 채택(Accept)할지를 확인합니다.

  • Accept하게 되면, 기존 파일은 삭제가 된것처럼 되며, 새로운 확장자를 가진 "selection_sort.py"에 Python으로 만들어진 동일한 코드가 생성됩니다.
  • 화면 하단에 터미널창에서 처럼 정상적으로 난수 발생 후 정렬하는 정상동작 하는 코드로 변경이 되는것을 확인할 수 있습니다.

/Review 기능

Q Developer의 코드 문제를 검출할때는 CVSS를 고려하여 심각도를 계산하고, Critical ~ Low 등급으로 나눠서 표시해 줍니다.

아래는 취약점이 다수 존재하는 예시 Python 코드입니다.
import os
import sqlite3
from flask import Flask, request, jsonify

app = Flask(__name__)

# CVSS 기준: 기밀성, 무결성 - 명령어 주입 취약점
@app.route('/execute', methods=['POST'])
def execute_command():
    command = request.form.get('cmd')
    os.system(command)  # 사용자 입력을 검증하지 않고 실행

# CVSS 기준: 무결성 - SQL 인젝션 취약점
@app.route('/auth', methods=['POST'])
def authenticate_user():
    username = request.form.get('username')
    password = request.form.get('password')
    conn = sqlite3.connect('data.db')
    cursor = conn.cursor()
    query = f"SELECT * FROM users WHERE username = '{username}' AND password = '{password}'"
    cursor.execute(query)  # 파라미터화된 쿼리 미사용
    user = cursor.fetchone()
    conn.close()
    if user:
        return "Authentication successful"
    else:
        return "Authentication failed"

# CVSS 기준: 가용성 - 파일 리소스 누수
@app.route('/download', methods=['GET'])
def download_file():
    filename = request.args.get('file')
    file = open(filename, 'r')  # 파일 핸들러를 명시적으로 닫지 않음
    content = file.read()
    return content  # 대용량 파일 반환으로 성능 및 가용성 문제

# CVSS 기준: 기밀성 - 민감 정보 하드코딩
@app.route('/config', methods=['GET'])
def get_config():
    secret_key = "hardcoded_secret_key_1234"  # 하드코딩된 민감 정보
    db_password = "hardcoded_db_password"
    return jsonify({"secret_key": secret_key, "db_password": db_password})

# CVSS 기준: 기밀성, 무결성 - 디렉터리 탐색 취약점
@app.route('/view', methods=['GET'])
def view_file():
    filepath = request.args.get('path')
    with open(filepath, 'r') as file:  # 경로 검증 없이 파일 열기
        content = file.read()
    return content

# CVSS 기준: 무결성 - CSRF 방지 미구현
@app.route('/update', methods=['POST'])
def update_settings():
    setting_name = request.form.get('setting_name')
    setting_value = request.form.get('setting_value')
    # CSRF 토큰 없이 상태를 업데이트
    return f"Updated {setting_name} to {setting_value}"

# CVSS 기준: 기밀성, 무결성 - 인증 및 권한 부여 누락
@app.route('/admin', methods=['GET'])
def admin_panel():
    return "Welcome to the admin panel!"  # 인증 없이 민감한 정보에 접근 허용
Chat을 통해 /review 명령어를 타이핑 후 현재 활성화 된 파일을 대상으로 하였습니다.
아래 처럼 활성화된 파일을 기준으로 리뷰를 진행하고, 문제 심각도에 대해서 요약된 답변을 알려줍니다.



chat패널이 아닌 코드 문제(CODE ISSUES)를 확인하면 더 상세한 내용을 확인 할 수 있습니다.

특정 이슈를 선택하면 어떠한 부분이 해당 이슈 인것인지 코드 파일에서 연하게 블록이 잡히는것을 확인 할 수 있습니다.
  • Critical(CWE-798)   :  db_password = "hardcoded_db_password"


문제가 된 코드에 대해서 어떻게 수정하면 좋을지에 대한 제안을 아래와 같이 확인 할 수 있습니다.



제안된 코드를 적용할 경우 어떤것이 달라지는지 "Diff" 기능을 활용 할 수 있습니다.



해당 코드로 고치는 것을 적용시키기 위해서 직접 수정할 수도 있으며 "Accept Fix"를 누르게 되면 다음과 같이 자동으로 수정이 됩니다.

 >>> 

다음으로는 README와 같은 문서를 생성하는 것을 알아보도록 하겠습니다.

/Doc 기능

아래는 간단한 Bubble Sort와 실행에 걸린 시간이 출력되는 Python 코드입니다.

import random
import time

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break


numbers = [random.randint(1, 10000) for _ in range(10000)]

# Measure sorting time
print("Starting sort...")
start_time = time.time()
bubble_sort(numbers)
end_time = time.time()

# Calculate and print execution time
execution_time = end_time - start_time
print(f"Time taken to sort: {execution_time:.2f} seconds")
해당 코드를 기준으로 /doc 을 실행하면 아래와 같은 화면을 확인 할 수 있습니다.



해당 제안을 확인하고 추가 변경사항이 있으면 변경을 하면되고, 여기서는 바로 "Accept"로 제안을 수락하면 다음과 같은 파일이 생성됩니다.

그 외 기능

: Customizations

Amazon Q Developer는 팀의 내부 라이브러리, 독점 알고리즘, 그리고 엔터프라이즈 코드 스타일을 반영하여 소프트웨어 개발을 지원할 수 있습니다.
Amazon Q의 사용자 지정 기능은 회사의 코드베이스를 분석하여 이를 기반으로 한 제안을 제공하며, 데이터 소스를 연결하여 개발자 스타일에 최적화된 지원을 제공합니다.
사용자 지정은 계정 내에서 완전히 분리되며, 다른 고객 데이터와도 격리됩니다. Amazon Q Developer 관리자가 권한을 부여한 사용자만 해당 사용자 지정에 접근할 수 있습니다.

아래와 같이 Customizations에서 현황("Activated, Created, Creation Failed")을 확인 할 수 있으며,
생성시에 Customization할 Source를 연결하면 됩니다.

  • AWS CodeStar Connections
  • S3
2가지에 대해서 연결을 제공합니다.
또한, 만들기 위해서는 해당 언어로 된 코드가 최소 10개 이상, 총 2MB 이상이 필요합니다.
현재까지 지원되는 파일 확장자는 [java, py, jsx, tsx, js, ts] 입니다.




정상적으로 Created된 Customization을 Activated로 변경한 모습입니다.
중요한 부분은 Evaluation으로 아래와 같은 의미를 갖고 있습니다.
 

평가 (Evaluation)
이 숫자는 Amazon Q Developer 사용자 지정의 전반적인 효과를 나타내며, 가중된 편집 유사도를 기반으로 측정됩니다. 평균적으로 모델이 얼마나 개선되었는지를 보여주는 지표입니다.

  • 8–10 (매우 좋음)
    AWS는 이 사용자 지정을 활성화할 것을 권장합니다.

  • 5–7 (보통)
    코드베이스에 대해 기본 Amazon Q Developer 모델보다 약간의 개선을 제공합니다. 사용하기 전에 최적화를 시도하는 것이 좋습니다.

  • 1–4 (미흡)
    이 사용자 지정은 효과적이지 않을 수 있습니다. 사용 전에 최적화를 고려하세요.



정상적으로 만들어진 Customizations를 적용할 사용자 또는 그룹을 지정하여 적용할 수 있습니다.



AWS Console에서 Actiaved 및 사용자 또는 그룹 할당이 완료되면, 사용하고자 하는 IDE에서 해당 Customization을 선택하여 적용할 수 있습니다.




: Console to Code

Console-to-Code는 콘솔 작업을 기록한 다음 생성형 AI를 사용하여 원하는 언어와 형식으로 코드를 제안하는 기능입니다.
아래 예시는 EC2를 만들 때 아래와 캡쳐에서 처럼 "미리보기 코드"로 만들어질 코드를 확인 가능합니다.

현재는 [EC2, VPC, RDS]에서의 작업을 기록하고 Code로 변경하는 기능을 제공합니다.

마찬가지로 해당 기능도 Q Developer에 포함되어있는 것으로 Prompt Logging 활성화 된 경우 해당 S3로 로그가 남게 됩니다.


Q Developer PRO 관리하기


* 프리티어에서는 제공되지 않는 기능이 포함 되어있습니다.

Dashboard 를 통해서 현재 활성화된 Pro 구독 현황을 확인할 수 있으며, 어떤 기능(/dev, /doc, /test 등)을 사용하고 있는지 등 활성화된 사용자를 기준으로 사용현황에 대해 확인 가능합니다.
또한 Language 별로 필터를 적용할 수 있습니다.



Dashboard는 Settings에서 Enable 가능하며, 더 상세한 내용을 확인 하기 위해서는 Prompt Logging 설정을 통해 실제 사용자가 채팅한 내역을 수집하고 확인 할 수 있습니다.



아래와 같이 설정한 S3에 실제 채팅한 내용과 누가(User ID)했는지가 저장됩니다.

해당 자료들을 수집하여 문제가 되는 채팅을 하고 있는 것은 아닌지 감사 및 모니터링을 할 수 있으며,
사용자별 어떤 질의나 기능을 많이 하게 되는지 데이터 분석을 통해 인사이트를 도출할 수 있습니다.

결론

  • 생성형 AI 또는 기능이 포함된 서비스의 경우는 사용하는 사용자의 역량만큼 활용도가 결정될 것으로 생각됨.
  • Q Develeloper의 아직까지 영어만 지원함.
  • 사용법 자체는 어렵지는 않지만, 아직까지 모범사례 또는 예시를 찾아보는 것이 어려움.
img
Sangho Lee(이상호) | Cloud Architect Team

Cloud Architect로 컨설팅, 설계, 구축을 지원하고 있습니다.