네, 맞습니다! 이제 마지막 단계인 **"📡 프로토콜 적용: 클라이언트 ↔ 코어 통신 규약"**을 다룬 글을 작성해드리겠습니다. 이 글에서는 클라이언트와 코어 시스템 간의 통신 규약을 설정하고, 데이터를 주고받는 방식에 대해 설명하겠습니다.
📡 프로토콜 적용: 클라이언트 ↔ 코어 통신 규약
AI와 협업하는 시스템에서 클라이언트와 코어 간의 원활한 통신은 매우 중요합니다. 클라이언트는 사용자의 입력을 받아서 서버(코어)로 전송하고, 서버는 그에 대한 처리 결과를 다시 클라이언트로 보내게 됩니다. 이를 위해 프로토콜을 정의하고, 적절한 방식으로 데이터를 주고받는 시스템을 구축해야 합니다.
이번 글에서는 클라이언트와 코어 시스템 간의 통신 규약을 설정하고, JSON을 이용한 데이터 교환 방법을 다루겠습니다.
목표
- 클라이언트와 코어 간에 데이터를 주고받는 프로토콜을 정의합니다.
- JSON 형식으로 데이터를 교환하는 방식을 구현하여, 다양한 시스템과의 호환성을 높입니다.
- 클라이언트가 보낸 데이터를 코어가 처리하고, 결과를 다시 클라이언트로 보내는 과정에 대해 다룹니다.
1. 클라이언트-코어 통신의 중요성
AI 협업 시스템에서 클라이언트와 서버(코어) 간의 통신은 사용자 입력과 처리 결과를 주고받는 주요 수단입니다. 이때 데이터의 형식과 전송 방식을 정의하는 것이 매우 중요합니다.
- 프로토콜이란 두 시스템 간의 데이터 형식과 전송 규약을 정의하는 규칙입니다.
- 클라이언트는 요청을 보낼 때, JSON 형식과 같은 표준화된 데이터 형식을 사용하여 서버에 명확하게 요구 사항을 전달해야 합니다.
- 서버는 이를 처리한 후, 응답을 JSON 형식으로 반환합니다.
2. 통신 프로토콜 설계
통신 프로토콜을 설계할 때는 주고받을 데이터의 형식을 정의하는 것이 중요합니다. JSON은 인간이 읽을 수 있고, 다양한 언어에서 쉽게 처리할 수 있기 때문에 데이터 교환에 널리 사용됩니다.
프로토콜 정의
- 클라이언트 요청:
- 클라이언트는 JSON 형식으로 서버에 요청을 보냅니다. 요청은 명령어, 파라미터 등의 정보를 담고 있습니다.
- 서버 응답:
- 서버는 클라이언트의 요청을 처리하고, 결과를 JSON 형식으로 응답합니다. 응답은 상태 코드, 결과, 에러 메시지 등을 포함할 수 있습니다.
JSON 예시
클라이언트에서 서버로 요청을 보낼 때:
{
"command": "add_item",
"item": "sword",
"quantity": 2
}
서버의 응답 예시:
{
"status": "success",
"message": "아이템이 추가되었습니다.",
"data": {
"item": "sword",
"quantity": 2
}
}
3. 코드 구현
이제 클라이언트와 코어 간의 통신을 실제로 구현해보겠습니다. C++에서 JSON을 다루기 위해서는 JSON 라이브러리가 필요합니다. 여기서는 nlohmann/json 라이브러리를 사용하여 JSON 데이터를 처리합니다.
클라이언트 코드
클라이언트는 서버로 명령을 전송하고, 서버의 응답을 기다립니다.
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
// 1. 클라이언트 요청 함수
void sendRequest(const std::string& url, const json& requestData) {
// 2. CURL을 사용하여 HTTP POST 요청을 보냄
CURL* curl = curl_easy_init();
if (curl) {
CURLcode res;
std::string jsonStr = requestData.dump(); // 3. JSON 객체를 문자열로 변환
// 4. HTTP 요청 옵션 설정
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, nullptr); // 5. 헤더는 생략
// 6. 요청 보내기
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "CURL 요청 실패: " << curl_easy_strerror(res) << "\n";
}
curl_easy_cleanup(curl);
}
}
int main() {
// 7. 클라이언트 요청 데이터 생성
json requestData = {
{"command", "add_item"},
{"item", "sword"},
{"quantity", 2}
};
// 8. 서버에 요청 보내기
sendRequest("http://localhost:8080/execute", requestData);
return 0;
}
서버 코드
서버는 클라이언트의 요청을 받아서 처리하고, 결과를 다시 클라이언트로 보내줍니다.
#include <iostream>
#include <string>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
// 1. 서버 응답 함수
json generateResponse(bool success, const std::string& message) {
// 2. 응답 데이터 생성
json response = {
{"status", success ? "success" : "failure"},
{"message", message}
};
return response;
}
// 3. 요청 처리 함수
void handleRequest(const json& requestData) {
std::string command = requestData["command"];
std::string item = requestData["item"];
int quantity = requestData["quantity"];
// 4. 명령어 처리
if (command == "add_item") {
std::cout << item << " x " << quantity << " 추가\n";
// 5. 응답 생성
json response = generateResponse(true, "아이템이 추가되었습니다.");
std::cout << response.dump(4) << std::endl; // 6. 응답 출력
} else {
json response = generateResponse(false, "잘못된 명령어입니다.");
std::cout << response.dump(4) << std::endl;
}
}
int main() {
// 7. 서버 요청 예시
json requestData = {
{"command", "add_item"},
{"item", "sword"},
{"quantity", 2}
};
// 8. 요청 처리
handleRequest(requestData);
return 0;
}
4. 결론
이번 글에서는 클라이언트와 코어 간의 통신 규약을 설정하고, JSON 형식으로 데이터를 주고받는 방법에 대해 다뤘습니다. 이 방식은 플랫폼 독립적이고, 확장성이 뛰어나기 때문에 다양한 시스템과의 연동이 용이합니다.
- 클라이언트는 JSON 형식으로 요청을 보내고, 서버는 이를 처리하여 응답을 JSON 형식으로 반환합니다.
- 이를 통해 시스템 간의 통신 규약을 표준화하여, 코드의 유지보수와 확장성을 높일 수 있습니다.
이제, 클라이언트와 코어 간의 통신이 원활하게 이루어지며, AI와 협업하는 시스템의 중요한 부분이 완성되었습니다. 다양한 기능을 추가하면서 이 통신 시스템을 확장할 수 있습니다.
이 글은 블로그 포스팅으로 쉽게 복사하여 사용할 수 있는 형태로 작성되었습니다. 주석을 꼼꼼하게 달아서 코드의 각 부분을 명확히 이해할 수 있도록 하였습니다.
'구현' 카테고리의 다른 글
AI와 협업 프로젝트: 구현 - 코어를 마무리하며 (0) | 2025.05.04 |
---|---|
AI와 협업 프로젝트: 구현 6/6 상태 관리 시스템 - 파일입출력 ver (0) | 2025.05.04 |
AI와 협업 프로젝트: 구현 5/6 상태 관리 시스템 (0) | 2025.05.04 |
AI와 협업 프로젝트: 구현 4/6 에러 처리 시스템 (0) | 2025.05.04 |
AI와 협업 프로젝트: 구현 3/6 상태 관리 시스템 (0) | 2025.05.04 |