본문 바로가기

GPT 활용법

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

DallE로 만든 GPT 심플한 로고

 

Json 양식을 담을 수 있는 모델 클래스를 ChatGPT로 어떻게 만들까?

저번 글에서는 예시 모델 클래스를 바탕으로 새로운 모델 클래스를 프롬프트를 통해 생성하는 방법에 대해 알아보았습니다. 오늘은 Json 양식을 GPT에게 제공하고 이를 담는 모델 클래스를 생성하는 방법에 대해 알아보겠습니다.

 

[GPT 활용법] - [ChatGPT 활용법] 예시 모델 클래스를 바탕으로 새로운 클래스 만들기

 

[ChatGPT 활용법] 예시 모델 클래스를 바탕으로 새로운 클래스 만들기

ChatGPT를 활용해서 모델 클래스를 어떻게 만들 수 있을까? 저번 글에서 예시 코드를 통해 패턴화된 코드 생성하는 방법을 배웠습니다. [GPT 활용법] - ChatGPT에게 예시 코드 제공해서 패턴화된 코드

app-developement-sharing-forum.tistory.com

 


 

Restful API에 대한 간단한 정리

 

서버에서 오는 Json 데이터 양식 그대로 새로운 모델 클래스 만드는 방법에 대해 알아보겠습니다. 형식이 같은 예시 코드로 만드는 것이 아닌 데이터만 가지고 새로운 코드를 만든다는 점이 저번 챕터와 다른 포인트입니다.

 

Restful API Method

 

 

 간단하게 Restful API에 대해서 설명하고 넘어가겠습니다. Restful API는 클라이언트와 서버가 통신하기 위해 만든 약속입니다. 클라이언트는 가볍게 말하면 우리의 핸드폰 혹은 컴퓨터라고 생각하면 좋습니다. 서버와 통신할 때 공통된 룰을 정하여 소통합니다. 그럼 어떤 룰을 정할까요? 일단 get부터 delete까지 데이터 메소드를 정합니다. 이 API 함수가 어떤 역할을 할지 밝히는 것이지요.

 

 

Swagger, Postman

 

 

위 두 사진은 현재 실무에서 가장 많이 쓰는 API 프롬프트입니다. 많은 API를 실제 제대로 통신이 되나 테스트할 때 많이 사용하지요. Postman과 스웨거 모두 데이터를 담는 방식만 다르지 둘다 똑같은 형식으로 서버에 전달하고 데이터를 전송받습니다. 저는 주로 스웨거를 쓰기 때문에 이것을 기준으로 설명드리겠습니다. 

 

 

Swagger를 통한 Json 데이터 확인하기

 

 

위 사진은 회원정보를 Get 하는 API 함수입니다. api-key, token, url, method를 담아 서버에 데이터를 전송하였고 거기에 대한 응답을 data라는 Map 형식으로 받았습니다. 여기서 api-key는 약간 오직 나만 알고 있는 집문 비밀번호이고 토큰은 경비 아저씨에게 요청할때마다 발급받는 아파트 단지 신분증같다고 할 수 있습니다. url은 집 주소이구요 method는 방문 목적 정도로 비유할 수 있겠습니다.

 

 

Postman으로 Json 데이터 확인

 

 

위 사진은 Postman으로 데이터를 Get하는 API 모듈입니다. 스웨거와 같이 필요한 조건을 입력하고 헤더에 api-key, token을 넣습니다. 결국 스웨거와 포스트맨 둘다 전달하는 것은 같지만 조건을 넣는 방식이 약간 다르다는 점입니다. 개인 프로젝트일 때는 개인적으로 Postman 추천드립니다.

 

 

여기서 유심히 봐야할 점은 클라이언트와 Restful API 사이 Json입니다. 문자열 형식으로 데이터가 통신되며 클라이언트에서 fromMap 함수로 긴 문자열을 Json Serialize decode로 분류하여 Map으로 바꾸고 그것의 key, value를 일치시켜 모델 클래스에 저장합니다. 그럼 예시 데이터 바탕으로 어떻게 새로운 모델 클래스가 탄생하는지 살펴볼까요?

 

ChatGPT로 개인정보 모델 만들기

서버로부터 받은 개인 정보 Json 파일

 

 

위 사진의 데이터는 서버로부터 받는 데이터를 그대로 복사한 사진입니다. 회원 정보 데이터를 서버로부터 받고 있네요. 그럼 서버로부터 이 데이터를 받는 모델 클래스를 만들어야합니다. 스웨거에 200 응답 코드로 통신이 성공했을 때 response body에 있는 데이터를 그대로 복사합니다.

 

 

GPT에 작성할 양식

 

 

그리고 복사한 데이터를 저번에 배운 코드 스니펫 안에 넣습니다. 그 후 줄바꿈을 하고 Swift 언어로 GPT에 모델 클래스를 만들거라고 명시합니다. 그리고 Map 형식 data에 있는 key들을 모두 모델 클래스 멤버 변수로 선언하고 fromMap 함수를 만들어달라고 했습니다. 저번 시간에도 말했지만 fromMap은 다른 개발자들도 모델 클래스에서 많이 쓰는 이름의 함수입니다. 목적이 뚜렸하기 때문에 fromMap만 GPT에게 입력해도 ‘모델 클래스 속 fromMap은 데이터를 담는 기능을 수행한다.’를 내포하고 있기 때문에 쉽게 단어 하나만으로 원하는 기능을 하는 함수를 만들 수 있습니다. 마지막으로 모델 클래스 이름도 밝히고 있네요.

 

GPT가 제작한 모델 클래스

 

data 안에 있는 key를 맴버 변수로 잘 선언했습니다. 하지만 여기서 주의해야할 점이 있습니다. 맴버 변수의 데이터 타입이 예상한 것과 다를 수 있습니다. 예를 들어 서버에서는 birthDate를 문자열이 아닌 DateTime 변수로 줄 수 있습니다. 그것을 GPT는 인식하지 못하고 문자열로 처리할 수 있습니다. 그래서 꼭 꼼꼼히 데이터 타입이 의도한 것과 일치하는지 알아볼 필요가 있습니다.

 

 그럼 GPT로 만든 모델 클래스는 어떤 이점이 있을까요? 맴버 변수 선언, fromMap 함수를 만들 때 오타를 방지할 수 있습니다. 맴버 변수가 10개가 넘어갈 때 fromMap을 만들다가 key에 오타가 있으면 데이터 들어오지 않을 수 있습니다. 위 명령어 처럼 일괄적으로 다루고 관리할 수 있다는 점이 GPT의 장점입니다.

 

지금까지는 data Map에서 데이터가 하나만 담긴 케이스만 봤습니다. 그러면 이제는 리스트로 오는 케이스를 살펴보겠습니다.

 

 

리스트로 들어오는 벳지 데이터

리스트로 오는 데이터를 받을 수 있는 모델 클래스 만들기

 

 

 해당 사진은 배지 리스트 코드입니다. 우리가 앱에서 어떤 활동을 완료하면 배지를 주는데 그 리스트를 서버로부터 받는 것입니다.

 

단수 데이터와 복수 데이터

 

 

왼쪽은 데이터가 단일 개수인 Json 파일이고 오른쪽은 복수인 데이터입니다. 이 둘은 다르기 때문에 GPT에서도 다르게 처리할 필요성이 있습니다.

 

 

 

 

 

하지만 아까 분명 복수 데이터와 단수 데이터 처리가 다르다고 했는데 명령어가 같은게 이상하지 않나요?

 

 

잘못된 명령어로 인한 GPT가 생성한 코드

 

 

결국 복수 데이터에 단수 데이터에 쓰이는 명령어를 쓰니 리스트의 첫번째 인덱스만 처리하였습니다. 첫번째를 제외한 나머지는 전부 누락되었죠. 그럼 질문을 어떻게 바꿔야할까요?

 

수정된 프롦프트 명령어

 

 

일단 배지가 10개 있다고 합시다. 그럼 각 배지를 담을 수 있는 모델 클래스와 그 모델 클래스를 가지는 상위 버전 모델 클래스가 필요합니다. 그래서 일단 data에 있는 복수 정보 각각 Badge 모델 클래스에 담고 그 다수의 Badge 모델 클래스를 다시 Badges에 담으라고 명령합니다. 그러면 Badges의 datas 맴버 변수로 Badge 리스트에 접근할 수 있습니다.

 

 

수정된 복수 데이터를 처리하는 코드(Swift)

 

 

Badges의 fromMap을 봅시다. datas가 key이고 value로 리스트를 가진 서버 응답을 리스트만 도출했습니다. 그리고 리스트에 있는 인덱스 하나하나를 badge의 fromMap으로 처리했습니다. 여기서도 주의할 점은 badge의 fromMap의 key의 스펠링이 data의 스펠링과 맞는지 꼭 체크해봐야합니다.

 

 

정리

 

 예시 데이터는 두 가지 종류가 있습니다. 단수, 복수 이 두가지에 따라 질문이 다릅니다.

 

단수 데이터, 복수 데이터에 따른 다른 GPT 명령어

 

 

일단 공통점부터 살펴보겠습니다. 공통점은 데이터를 감싸는 코드 스니펫과 함께 질문을 하는 형식을 사용하는 것입니다. 그리고 다른 점은 질문입니다. 단수 데이터는 함수이름, 언어 지정, fromMap 함수만 만들어달라고 요청하면 되지만 복수 데이터는 모델 클래스를 두 개 만들어야합니다. 그리고 두 개의 fromMap 함수를 만들어야합니다. 모델 클래스 만드는 방법은 언어마다 그리고 스타일마다 다릅니다. 중요한 것은 꼭 이렇게 만들지 않아도 데이터를 코드 스니펫으로 감싸고 모델 클래스를 만든다고 선언해야합니다. 코드 스니펫, ‘모델 클래스 생성한다.’ 를 꼭 기억하세요. 그리고 이런 방식으로 모델 클래스를 만든다면 해당 두 가지 질문 형식을 사용하는 것도 괜찮습니다.

 

이상 글을 마치겠습니다. 마지막에 있는 명령어 그대로 사용해도 무방하니 한 번 사용해보시길 바랍니다!