Sofia 시스템 소개
Sofia 시스템 - 배경설명
Sofia 시스템은 개발 시기에 따라 구버전과 신버전으로 나뉩니다.
- Sofia 구버전 (fullstack)은 2019년 말 기획되어 2020년 초 개발되었습니다. PHP, Bootstrap, jQuery를 활용해 개발되었습니다. 해당 버전은 cafe24 호스팅으로 시작해 한국과학영재학교 학생회 산하 정보부 서버로 이관되었습니다.
- Sofia 신버전 (frontend, backend)은 2026년 초 개발되었습니다. 구버전의 여러 문제점을 개선해 재작업했으며, 프론트엔드와 백엔드를 분리해 개발되었습니다. 프론트엔드는 React SPA, 백엔드는 Kotlin Spring Boot REST API입니다. 해당 버전은 AWS, Cloudflare 등에 배포되었습니다.
Sofia 시스템 - 요구사항
Sofia의 핵심 요구사항은 다음과 같습니다.
- 사용자: 번역버디(사용자)와 번역버디장(관리자)이 있다.
- 업무: 번역버디장은 번역버디에게 업무를 배정하고, 번역버디는 완료된 업무를 보고한다.
여기에 더해, 핵심 요구사항을 매끄럽게 제공하기 위한 보조 요구사항은 다음과 같습니다.
- 기간: 관리자는 번역버디 운영을 학기 단위로 관리하기 위해, 모집/번역/정산 기간을 분리한다.
- 가입: 사용자는 관리자에게 신청하고, 이를 관리자가 승인함으로써 번역버디가 된다.
- 용어: 관리자는 번역 용어 통일을 위해 번역 가이드라인을 관리한다.
Sofia 시스템 - 인터페이스
Sofia 시스템은 두 개의 인터페이스로 이루어져 있습니다. 이처럼 인터페이스를 분리한 이유는 사용자마다 적합한 방식이 달랐기 때문입니다.
- 카카오 인터페이스는 번역버디가 사용합니다.
- 2019년 번역버디 업무 프로세스는 카카오톡을 통한 번역버디장의 업무배정 알림 - 카카오톡을 통한 번역버디의 보고로 이루어졌습니다.
- 카카오 인터페이스는 해당 업무의 경험을 그대로 유지하는 데 적합한 방식이었습니다.
- 웹 인터페이스는 번역버디장이 사용합니다.
- 카카오톡은 접근성이 높고 사용이 간편하지만 세밀한 제어를 하거나, 대량의 데이터를 조회하는 번역버디장 업무에는 부적합합니다.
- 카카오톡 응답 길이 제한이 있고, 채팅 말풍선에 원시 텍스트 데이터를 꽉 채워서 돌려주는 방식은 부정적인 UX를 줄 수 있기 때문입니다.
첫 번째 인터페이스는 카카오 인터페이스입니다. 카카오톡은 채널(구 플러스친구)에서 사용자가 메시지를 보낼 때, 응답 방식을 정의할 수 있는 기능을 지원하며, 크게 두 가지 방식을 사용할 수 있습니다.
- WYSIWYG 에디터를 사용해 정적인 응답 반환
- 스킬 서버를 연동해 동적인 응답 생성
특히 스킬 서버는 HTTP 서버의 일종으로, 카카오에서 정의한 스킬 요청을 받아 스킬 응답을 반환할 수 있기만 하면 서버의 구현은 무관합니다. Sofia는 정적인 응답이 가능한 홈 화면에는 에디터를 활용하고, 동적인 응답이 필요한 가입, 조회 등 로직에서는 스킬 방식을 활용해 두 방식 모두를 사용했습니다. 카카오 인터페이스는 서버와 결합도가 매우 낮았기 때문에 Sofia 구버전에서 신버전으로 재개발하는 과정에서도 거의 바뀌지 않았습니다.
두 번째 인터페이스는 웹 인터페이스입니다. 전형적인 웹 대시보드로, 여러 관리 기능을 지원합니다. Sofia 구버전에서는 Bootstrap과 jQuery를 혼합해 구현되었습니다. 구버전의 웹 인터페이스는 PHP 코드에 섞여서 구현되어 있었고, MVC 등 아키텍처가 전혀 적용되지 않아 서버와 결합도가 엄청나게 높았습니다. 때문에 Sofia 신버전으로 재개발하는 과정에서 React SPA로 처음부터 완전히 재개발했습니다.
Sofia 구버전에서는 카카오 스킬 요청과 웹 요청은 같은 서버에서 모두 처리되었습니다. 카카오 스킬 요청은 /action.php에서, 웹 요청은 /web/adm/*.php에서 처리되었습니다. 웹 요청의 경우 프론트엔드 로직도 PHP 서버에서 구현되었습니다.
Sofia 신버전에서도 카카오 인터페이스와 웹 인터페이스는 같은 서버를 공유하지만, 구버전과 달리 신버전에서는 백엔드 서버가 View를 담당하지 않고 REST API로서만 기능한다는 것이 차이점입니다. 신버전 서버는 카카오 스킬 요청에 특화되어 단일 엔드포인트로 처리하는 /api/kakao/skill 엔드포인트와, 웹 인터페이스에 기능을 제공하는 기타 엔드포인트로 분리되어 있습니다.