본문 바로가기

GPT 활용법

ChatGPT를 활용하여 에러 코드 수정하기

ChatGPT 대표 로고

 

 

에러 코드를 ChatGPT로 잡을 수 있을까?

오늘은 ChatGPT를 사용해서 에러 코드를 잡는 방법에 대해서 설명하겠습니다. 전문적인 기술이 아닌 저만의 팁이니 간단하게 보셔도 될거 같습니다. 자신의 방법과 결합하여 사용하면 더 좋을 것 같습니다. 

 

저번 시간까지 서버로부터 받는 Json 데이터를 담을 수 있는 모델 클래스를 GPT로 생성하는 방법에 대해 알아보았습니다. GPT는 기계이기 때문에 코드에 많은 에러를 담고 있습니다. 이를 빠르게 잡을 수 있는 팁을 살펴보겠습니다.

 

[GPT 활용법] - [GPT 활용법] Json 포맷 데이터를 모델 클래스로 바꾸기

 

[GPT 활용법] Json 포맷 데이터를 모델 클래스로 바꾸기

Json 양식을 담을 수 있는 모델 클래스를 ChatGPT로 어떻게 만들까? 저번 글에서는 예시 모델 클래스를 바탕으로 새로운 모델 클래스를 프롬프트를 통해 생성하는 방법에 대해 알아보았습니다. 오

app-developement-sharing-forum.tistory.com

 


 

 

코드를 짤 때 어떤 순으로 작성하시나요? 코드를 짜고 에러가 나오면 수정하고 빌드 후에 빌드가 안 되면 다시 그 에러 코드 보고 수정하지 않나요?

 

우리가 에러를 수정하는 과정

 

 

아마 위 사진과 같은 방법대로 수정하실겁니다. 사람마다 차이가 있다면 구글에 어떻게 질문을 잘하는지 차이지요. 또한 코드를 그대로 갖다 붙이는 분도 계시고 구글에 있는 글을 참고해서 새로운 코드를 작성하여 에러를 해결하시는 분들도 계실겁니다. 그래도 공통적인 부분은 에러를 인터넷에 찾아보고 해결한다는 점입니다. 

 

에러 코드 전부를 입력하면 토큰 초과 에러가 나옴

 

 

만약 GPT에 해당 사진처럼 빽빽하게 모든 에러 로그를 다 복사하여 붙여넣기하여 질문하면 어떻게 될까요? 일단 에러 전문을 드레그하는데 시간이 걸리고 질문에 붙여넣기 하는데 시간이 오래 걸릴겁니다. 그리고 무엇보다 너무 긴 글은 GPT가 답해주지 않습니다. 그 이유는 예전에 1강에서 설명했듯이 정해진 토큰 양 때문에 그렇습니다. GPT 3.5 기준 1개의 질문에 할당하는 토큰양이 정해져 있습니다. 따라서 사진과 같은 식으로 질문하면 GPT는 대답을 해주지 않습니다.

 

PostMan을 실행할 때 대표적 에러 메세지가 나오는 부분

 

 

GPT에게 질문하는 방법

그러면 어떤 식으로 질문해야할까요? 조금 작은 범위에서 큰 범위로 질문을 확대하는 방법입니다. 일단 에러 로그를 살펴봅니다. 보통 에러의 위쪽 부분에 핵심적인 문장이 있을 확률이 있습니다. 그 이유는 위에서 아래로 에러를 담는 범위가 확대되기 때문이죠. 다시 말해 첫째줄은 에러를 담은 함수 안에서 그 줄에서 생긴 문장, 둘째줄은 에러가 생긴 함수 이름, 셋째는 그 함수를 다은 클래스 위치 이런식으로 에러가 구성되어 있습니다.

 

질문하는 순서

 

 

핵심적인 가장 위 에러를 담은 줄을 복사합니다. 그리고 에러가 담긴 부분과 에러, 에러가 담긴 부분을 담은 함수 그리고 질문을 같이 GPT에게 질문합니다. 대답이 시원치 않은 경우 더 큰 범위인 함수 가 담긴 전체 클래스를 붙여넣기하고 에러, 질문을 GPT에게 질문합니다. 그래도 원하는 답이 안 나오면 페이지 전체를 붙여넣고 에러, 질문을 합니다. 여기서 핵심은 에러를 전체 복사하지 않았다는 점입니다. 에러는 핵심적인 부분만 복사했습니다. 확장되는 것은 에러를 담은 코드의 범위이지요. 그러면 예시 코드를 보면서 어떻게 수정 과정을 거치는지 살펴봅시다.

 

 

GPT를 활용한 에러 수정 예시

 

Swift 코드에서 에러가 생긴 부분

 

 

해당 코드에는 두 가지 에러가 생겼습니다. Swift는 파이썬과 같이 런을 하기 전에 에러를 체크할 수 있습니다. C언어나 Java와 다른 부분이지요. 일단 저는 항상 에러 메세지를 읽어봅니다. 간단히 해석하면 위에 것은 이미지를 UI에 그릴때 쓰는 UIImage 함수는 frame를 초기화 시 지정하는 매소드가 없다는 뜻이고 두번째는 이미지에 터치 이벤트 권한을 부여할 때 이런 방식으로는 부여할 수 없다는 뜻이죠. 에러 메세지 의미는 이 글에서는 중요하지 않습니다.

 

에러 수정 사 프롬프트에 작성하는 양식

 

 

일단 핵심 에러 메세지를 찾았다면 에러 코드, 에러 코드를 담은 함수와 에러 메세지를 복사 붙여넣기합니다. 여기서 중요한 점은 에러 코드는 코드 스니펫을 사용한 점이고 에러는 큰 따옴표로 감쌌다는 점입니다. 꼭 구분하시길 바랍니다. 구분하지 않거나 줄바꿈 만으로는 GPT는 어디까지가 코드고 어디까지가 에러인지 판단하기 힘듭니다. 그림처럼 두 개의 에러 메세지를 한 번에 입력할 수도 있습니다. 여기서도 코드 스니펫, 큰 따옴표로 에러와 에러 메세지를 구별했습니다. 그럼 GPT는 잘 해결했을까요?

 

GPT의 대답(Swift)

 

 

GPT가 바꾼 코드를 보면 UIImage를 UIButton으로 바꾸었습니다. 그 이유는 UIButton에는 초기화 시 frame을 설정하는 매소드가 있기 때문입니다. 또한 터치 이벤트 권한 설정도 두 가지 방법이 있는데 그 중 하나의 방법을 에러 코드가 충족하기 때문에 UIButton으로 바꿨습니다. 하지만 우리는 화면에 버튼을 만들기보다 이미지를 만들고 거기에 터치 이벤트 권한을 주고 싶습니다. 그러면 어떻게 해야할까요?

 

 

추가적인 명령어 입력

 

질문을 보면 따로 에러 코드, 에러 코드를 담은 함수, 에러 메세지를 넣지 않았습니다. 그 이유는 GPT는 맥락을 이해하기 때문에 이전 질문에서 벌써 질문을 통해 GPT가 함수, 코드를 인식하고 있기 때문입니다. 따라서 cancelButton을 버튼에서 이미지로 바꾸고 터치 이벤트 권한도 위임하라고 GPT에게 명령하였습니다. 그럼 GPT가 잘 변환시켰을까요?

 

GPT가 수정한 부분

 

네 사진에서 보다시피 UIButton을 사용하기 않고 UIImage로 잘 설정하였습니다. 그리고 frame도 UIImage 방식으로 설정하였고 터치 이벤트도 UIImage 방식으로 잘 선언하였습니다. 만약 여기서 제가 원하는 답이 나오지 않았다면 어떻게 했을까요? 아마 setTextFieldDesign 함수를 담고 있는 클래스 전체를 복사하여 에러 메세지와 에러 코드를 입력했을겁니다. 그래도 답이 안 나오면 페이지 전체를 복사하여 GPT에게 입력했을겁니다. 그 이유는 코드 범위가 커질 수록 해당 코드가 어느 부분에 속해있고 어떤 이유로 존재하는지 GPT가 판단하기 때문입니다. 하지만 처음부터 범위가 넓은 코드를 입력하는 것 자체가 노력이 들기 때문에 작은 범위부터 시작하는 것을 추천합니다. 이상 앱개발지식나눔이였습니다.