Epson Innovation Challenge
엡손은 프린터와 스캐너의 새로운 사용자 경험과 문제 해결을 위해 혁신적인 개발자들과 관심 있는 모든 분을 위한 챌린지를 개최하였다. Epson Connect API를 기반으로 서비스를 기획 및 개발하는 챌린지이다.
AIGOO(아이고)는 Epson Innovation Challenge에 참여하며 AI 기술과 Epson Connect API를 활용해 아티스트와 글로벌 팬 간 손 편지 소통하는 서비스를 기획하였다. 이 회고에서 프로젝트의 주요 과정을 돌아보며 배운 점과 아쉬운 점을 정리하고, 앞으로의 개선 방향을 생각해 보고자 한다.
프론트엔드 기술 스택
화면 설계
UX/UI 주도하에 와이어 프레임과 기능 설계서를 반영하여 화면 설계를 만들었다.
많은 상의 끝에 AIGOO의 기획과 어울릴 수 있도록 '손편지'라는 아날로그적 감성을 느낄 수 있는 디자인으로 가면 좋겠다고 정했다. 또한, 편리하고 자연스러운 사용자 경험을 제공할 수 있도록 설계하였다.
API를 통해 외부 기기를 작동시키는 작업은 처음이었는데, 생각보다 크게 복잡하거나 어려운 것은 아니었다. 오픈 API와 다를 거 없이 API_KEY와 DEVICE 값 등을 설정하고 주어진 엔드포인트로 API를 호출하면 된다.
시간상으로 백엔드에서 해당 API의 엔드포인트를 구축하였지만, 다음에는 직접 Next.js의 API 라우팅을 사용하여 API 엔드포인트를 만들어서 적용해 보고 싶다.
Next.js API Routes를 사용하여 OpenAI API를 통해 키워드 분석하는 데이터를 받아왔다. 사용자는 API URL에 쿼리 스트링으로 키워드를 전달하고, 코드는 OpenAI API를 호출하여 키워드의 정의, 동의어, 반의어, 예시 문장 등을 JSON 객체 형태로 반환한다.
Next.js는 프론트엔드와 백엔드를 모두 개발할 수 있는 프레임워크이다. API Routes를 통해 서버리스 함수를 쉽게 작성할 수 있다. 앞으로 풀스택 프레임워크의 기능을 적극적으로 활용해 봐야겠다고 느꼈다.
알고 보면 크게 어렵지 않는 기능인데, 무엇이든지 일단 해봐야 아는 것 같다. 일단 해보면 걱정했던 것보다 크게 어렵지 않다는 걸 다시 느낀다. 새로 배우는 것에 두려움보다 도전하는 마음으로 많이 시도하며 부딪혀봐야겠다.
//app/API/gptapi/route.ts
import OpenAI from "openai";
import type { NextRequest } from "next/server";
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
export const POST = async (req: NextRequest) => {
try {
const { searchParams } = req.nextUrl;
const keyword = searchParams.get("keyword");
if (!keyword) {
return new Response(JSON.stringify({ error: "키워드가 필요합니다." }), { status: 400 });
}
const response = await openai.chat.completions.create({
response_format: { type: "json_object" },
model: "gpt-4o",
messages: [
{
role: "system",
content:
"keyword를 분석하여 JSON 객체로 반환해. keyword가 한글이라면 translated: keyword를 영어로 번역한 값, definition: keyword의 영어 사전적 의미, synonyms: 한글 동의어 리스트, antonyms: 한글 반의어 리스트, example: 한글로 된 예시 문장, translatedExample: example을 영어로 번역한 값. keyword가 영어라면 translated: keyword를 한국어로 번역한 값,definition: keyword의 한글 사전적 의미, synonyms: 영어 동의어 리스트, antonyms: 영어 반의어 리스트, example: 영어로 된 예시 문장, translatedExample: example을 한국어로 번역한 값.",
},
{
role: "user",
content: keyword,
},
],
temperature: 0,
max_tokens: 300,
top_p: 0,
frequency_penalty: 0,
presence_penalty: 0,
});
const completion = response.choices[0].message.content;
return new Response(JSON.stringify({ completion }));
} catch (error) {
console.error("Error in handler:", error);
return new Response(JSON.stringify({ error: `${error}` }));
}
};
백엔드에서 손편지 번역과 키워드 분석, AI 학습 자료 생성 기능에 활용한 AI 기술이다. 이번 서비스를 구현하면서 AI 기술의 발전을 크게 느낄 수 있었다. 서비스에서 기대한 수준의 데이터를 받아볼 수 있었고, 많은 인공지능 기술을 손쉽게 서비스에 적용해 볼 수 있었다는 점이 놀라웠다.
Naver CLOVA OCR은 이미지나 스캔본 문서에 있는 텍스트를 인식하여 텍스트 데이터로 변환하는 기술이다. 방대한 텍스트 데이터와 이미지 데이터를 학습하여 높은 정확도의 텍스트 인식을 수행한다.
ETRI(과학기술정보통신부)에서 제공하는 NLU OPEN API는 한국어 문장을 입력받아 한국어 어휘 형태 및 의미와 문장의 구조 및 의미를 분석하여 언어를 이해하는 기술을 제공하여 편지 내용이 정확하게 번역될 수 있도록 한다.
Google AI의 Gemini LLM (Large Language Model)를 사용하여 텍스트를 번역하고, 저장한 키워드를 기반으로 학습자료를 생성한다.
AI 기술을 활용하여 손편지 번역, 키워드 분석, 학습 자료 생성 등의 기능을 구현하면서 AI 기술의 발전을 직접 확인할 수 있었다. 아직 AI 모델의 원리와 적용 방법에 대한 이해를 높이기 위해 더 많은 학습이 필요하지만, 인공지능과 자연어 처리 기술을 적용하는 방법을 이해할 수 있는 좋은 기회였다.
멘토와의 만남을 통해 프로젝트 관련 질문뿐만 아니라 기술적인 질문에 상세한 답변으로 많이 배울 수 있었다.
Epson 제품 활용 방안
우리 서비스에서 어떻게 엡손에 대한 새로운 솔루션을 제시할 수 있을지가 중요하다
Epson Connect API 피드백
API 사용 과정에서 발생했던 문제점이나 개선점 등 피드백을 전달하는 것도 필요하다.
웹 서비스 보안 측면
웹 서비스 개발 시 보안에 대한 신중한 고려가 필요하다. 백엔드 코드 내 사용 시에는 컴팩트하게, 외부 사용 시에는 타이트하게 조절하여 보안 취약점을 줄여야 한다.
발표 자료 방향
해당 서비스를 통해 Epson과의 어떤 시너지 효과를 창출할 수 있는지 명확하게 제시한다.
이번 Epson Innovation Challenge에 참여하면서 Epson과 AI 기반의 서비스를 개발하는 새로운 경험을 쌓을 수 있었다.
배운 점 중 하나는 새로운 기술에 시도해보는 것이 중요하다는 것이다. 처음 접하는 Epson Connect API나 OpenAI API를 활용해 보면서, 예상보다 어렵지 않다는 것을 알게 되었고, 그 과정에서 새로운 기술을 배우고 적용하는 데 자신감을 얻을 수 있었다. AI와 같은 새로운 기술에 대해 지속해서 학습하며, 더 완성도 높은 서비스를 개발해 보고 싶다는 마음이 들었다.
너무 멋있다!!!!!!!!!! AI 찍먹이라니 대단하잖아!!!!