안녕하세요. 이제 곧 노년층에 접어들 것 같은 모브한 임베디드 엔지니어입니다.
임베디드 분야에 종사하다 보니 'AI는 관계없다'고 생각했었는데, 회사나 고객들이 AI로 가득 차기 시작해서 급하게 공부하고 있습니다.
하지만 재미있는 기기가 나왔는데도 불구하고, 관련 기사를 보면 임팩트가 강하거나 즉물적인 내용이 많은 것 같아 저는 다른 방향으로 나아가게 되었습니다.
계기는 AI를 가지고 놀다가 시간이 순식간에 지나가는 경험을 한 것입니다.
그래서 생각했습니다. AI에게 매니지먼트를 맡겨보자 하고요.
'○시가 되면 알려줘'라고 말해두었더니, 대화 도중에 알림을 주었습니다.
…………즉, 어느 정도의 유연성이 가능하고, AI와의 상호작용은 시스템화할 수 있다는 것입니다.
다만 전제 조건으로, AI와의 상호작용은 프롬프트(Prompt)를 거쳐 이루어진다는 점입니다.
즉, mermaid로 표현하면 다음과 같습니다.
sequenceDiagram
나->>AI : (REQ) 뭔가 재주를 보여줘. 지금 당장.
AI-->>나: (RES) 무리한 요구다
이러한 상호작용, 즉 요청(Request)과 응답(Response)이 인터페이스의 전부입니다.
(참고로 그림으로 만들지는 않습니다. mermaid는 보안 문제가 종종 발생하기 때문에요. 저는 좋아하지만요.)
앞서 말씀드린 '○시가 되면 알려줘'는 (RES)에 결과를 추가하는 형태가 됩니다.
이번 프롬프트는 이를 강화한 형태입니다.
덧붙여 Python으로 Doxygen의 XML을 파싱(parse)하는 스크립트를 만들어 달라고 요청합니다.
당신은 Python 프로그래머 전문가로서 다음 조건에 따라 스크립트를 생성해 주세요.
# 상호작용 관련 조건
* 조건과의 일치 여부는 당신과 저의 상호작용 속에서 당신이 항상 일치 여부를 확인해야 합니다.
...
```python를 열고 같은 답변 내에서 연속으로 끝까지 출력해 주세요.
* 복사-붙여넣기 시 파일로 하나로 결합할 수 있도록, 코드 블록 사이에는 불필요한 설명 없이, 블록 바로 앞에 ' # --- 분할 파츠1 ---'과 같은 주석만 기재해 주세요.
* 각 블록의 끝이나 시작이 중복되거나 로직이 누락되지 않도록 완전히 연속된 코드로 만들어 주세요.
* 다음 요구사항에 명시되지 않은 답변은 삼가 주세요.
* 본 애플리케이션은 '입력 요건'에 기재된 정보를 입력으로 하고, '기능 요건'에 의한 처리를 거친 결과를 이용하여 '출력 요건'에 기재된 출력을 수행하는 것입니다.
* 이후 요구사항을 분류하며 작성할 것이지만 형식은 '요건 번호 : 요건 내용'으로 합니다. 요건 내용이 여러 줄일 경우, : 이후를 다음 줄부터 기재해 주세요.
# 요구 기재 내용에 대한 요구
DREQ_COM_001_00 : 요건 번호가 중복된 경우는 지적할 것
DREQ_COM_002_00 : 요건 내용이 모순되는 경우는 지적할 것
# 공통 구현 요구
CREQ_COM_001_01 : 본 스크립트는 Python 스크립트여야 합니다.
CREQ_COM_001_02 : 이 스크립트는 콘솔 애플리케이션이다.
CREQ_COM_003_01 : 식별자는 라이브러리 내에 정의된 식별자나 예약어를 제외하고 영문 소문자와 언더바를 사용하여 작성해야 한다. (단, 상수는 대문자와 언더바로 작성한다.)
CREQ_COM_003_02 : 설정 요소의 상수는 접두사로 `CFG_`를 사용해야 한다.
CREQ_COM_003_03 : DocString에 대응하여 주석을 작성해야 한다.
CREQ_COM_003_04 : 이 스크립트의 주석은 기본적으로 일본어로 작성하는 것이 좋다. (다른 요구사항과 모순되는 경우에는 다른 언어도 허용한다.)
CREQ_COM_003_05 : 이 스크립트의 오류나 사용자에게 전달하는 메시지는 일본어로 해야 한다. (대응책이 예측 가능한 경우에는 대응책도 세트로 기재해야 한다.)
CREQ_COM_003_10 : 파일 시작 부분에 메타 정보와 인코딩 지정을 추가해야 한다.
CREQ_COM_003_11 : `CREQ_COM_003_10`의 기재에 이어, 다음 줄부터 주석으로 파일 헤더를 작성해야 한다.
CREQ_COM_003_12 : 파일 헤더 내용은 다음과 같다:
* 스크립트 개요
* 사용 방법
* 주의 사항
* 실행 환경
* 실행 가능한 Python의 최신 버전
* 실행에 필요한, 위 Python에서 표준으로 사용되지 않는 라이브러리 목록
CREQ_COM_003_21 : 파일 끝 부분에 주석으로 파일 푸터를 작성해야 한다.
CREQ_COM_003_22 : 파일 푸터 내용은 다음과 같다. (각 항목을 장(章) 단위로 나누어야 하며, 괄호 안의 부분은 장의 문자열로 사용하지 않는다.)
* AI 확장 요구사항
* AI 제안 요구사항
* AI 지적 사항 ("요구사항 기재 내용에 대한 요구사항"으로 지적된 내용)
CREQ_COM_003_31 : 스크립트 내의 각 요소는 요구사항과 연관되어야 한다. DocString 주석의 비고(備考)로 기재하고, 로직 내에 기재하는 경우에는 일반 주석으로 작성한다. (상수나 변수의 클래스 사용 위치, 함수의 호출 위치 등)
CREQ_COM_003_41 : 요구사항과 연관 지을 수 없는 요소는 요구사항을 생성하고, 파일 푸터의
# 애플리케이션 입력 요구사항
IREQ_APP_001_01 :
입력되는 설정(Config)은 다음과 같습니다.
* CFG_XML_PATH: Doxgen이 생성한 XML 디렉토리 경로
* CFG_OUT_PATH: 분석 결과 출력 디렉토리 경로
# 애플리케이션 출력 요구사항
OREQ_APP_001_01 : XML 분석 결과를 출력합니다.
OREQ_APP_001_02 : 결과는 YAML 형식으로 해주세요.
# 애플리케이션 기능 요구사항
FREQ_APP_001_01 : XML 분석 결과로서 각 함수를 기반으로 함수, 참조된 함수, 매크로, 변수, 상수를 트리 형태로 정리한 데이터를 생성합니다.
FREQ_APP_001_02 : 함수의 참조가 순환하는 경우 순환을 감지하고 더 이상 깊이 파고들지 않고 다음 분석을 진행해 주세요.
FREQ_APP_001_03 : 분석 결과 중에서 함수의 참조, 피참조 관계가 있는 항목에 대해서는 트리를 병합(merge)해 주세요.
FREQ_APP_002_01 : 분석은 'Doxgen이 생성한 XML 디렉토리 경로'로 지정된 디렉토리에 있는 모든 XML 파일에 대해 수행합니다.
FREQ_APP_003_01 :
경로 삽입(Path Injection) 및 탐색(Traversal) 취약점 방어
외부에서 입력되는 불특정 파일 경로를 안전하게 다루기 위해, 스크립트 설정 로딩 단계에서 모든 경로 정보를 정규화(normalize)하고 절대 경로화(absolute path)하는 처리를 추가해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
이번 프롬프트에서 검토한 내용은 다음과 같습니다.
(대략적으로 CREQ_COM_003_22 결과에 모아서 출력됩니다.)
- 요구사항과 코드의 연결(매핑)
- 요구사항에 없는 코드의 통제
- 인지하지 못했던 요구사항에 대한 AI의 피드백
이를 통해 스스로 놓쳤던 부분을 요구사항으로 재정의하고,
같은 작업을 여러 번 AI와 주고받으면 PDCA 사이클이 되어 품질도 올라갈 것입니다... 아마도요.
좀 더 적극적으로 다른 접근 방식으로 제안해 줄 수 있는 요구사항을 추가해도 좋을 것 같습니다.
FREQ_APP_003_01 같은 것은 별도로 보안 부서에 의견을 구한 결과의 요구사항입니다.
복사 붙여넣기가 귀찮다. (위 이야기와는 연결되지 않지만)
파일을 생성해서 공유해 주는 AI만 있으면 좋을 텐데, 그렇지 않은 AI도 있으니 말이죠.
이것 역시 프롬프트 내에서 조건 분기(conditional branching)를 하면서 전환하는 방식일까요... 아니면 비슷한 시도를 하는 사람이 있을 테니, 관련 기사를 찾아보는 것이 먼저일지도 모르겠습니다.