타스를 VPS로 옮기고, LISA에서 매출을 물었습니다
최근 LISA 안에 타스와 대화하는 창을 붙였습니다.
고객별 매출을 보려면 메뉴를 열고, 기간을 고르고, 고객을 검색해야 했습니다. 필요한 기능은 있었지만, 업무 중에 궁금한 것이 생길 때마다 같은 과정을 거쳤습니다. LISA에 데이터가 있으니 타스에게 말로 물어볼 수 있으면 좋겠다고 생각했습니다.
그런데 채팅창이 생겼다고 타스가 우리 업무를 알게 되는 것은 아니었습니다. 대화는 됐지만, 매출을 물으면 실제로 조회하지 못했습니다. 여기까지 오기 전에는 타스가 돌아갈 서버부터 옮겨야 했습니다.
타스는 Hermes Agent를 기반으로 운영하는 저희 업무 에이전트의 이름입니다. 앞선 글에서 에이전트의 역할을 나누는 이야기를 했다면, 이번에는 그 타스를 어디에서 돌리고 LISA와 어떻게 연결했는지 남겨보려 합니다.
NAS에서 VPS로 옮겼습니다
LISA와 n8n을 NAS에서 운영하던 때에는 애플리케이션 코드 외에도 확인할 것이 많았습니다. 접속 경로가 살아 있는지, 컨테이너가 제대로 응답하는지, 자동화가 멈추지는 않았는지 살펴봐야 했습니다.
이전 준비 중에는 n8n 컨테이너가 실행 중으로 표시되는데도 외부에서 접속하면 502 오류가 나오는 상황이 있었습니다. 관리 화면에 ‘실행 중’이라고 나온다고 실제로 사용할 수 있는 상태는 아니었습니다. 화면 하나를 보고 정상이라고 판단하기 어려웠습니다.
9월에는 LISA와 n8n 등 기존 서비스를 VPS로 옮기고, Hermes도 그곳에서 운영하도록 구성했습니다. VPS는 인터넷에 있는 별도의 가상 서버입니다. 제 컴퓨터에서 작업하는 것과 별개로 서비스를 계속 운영할 환경을 마련한 셈입니다.
서버를 준비하고 파일을 복사하면 될 줄 알았는데, 옮겨야 할 것에 소스코드만 있는 것은 아니었습니다. LISA의 첨부파일도 있어야 했고, n8n의 기존 작업과 실행 기록도 이어져야 했습니다. 접속 주소는 그대로 쓰면서 새 서버로 연결해야 했습니다.
이 작업도 Codex와 함께 진행했습니다. 기존 NAS에 무엇이 있는지 먼저 확인하고 보관본을 만든 뒤, VPS의 별도 주소에서 LISA 로그인과 첨부파일, PDF 변환 등을 확인했습니다. 그다음 기존 주소의 연결을 바꿨습니다. NAS 쪽 실행은 중지하되, 이전 자료는 되돌아갈 수 있도록 남겨뒀습니다.
VPS에서는 LISA와 타스, n8n을 각각 Docker 컨테이너로 나눠 운영했습니다. 같은 서버에 있어도 실행 환경을 구분해두니, LISA를 수정할 때 어떤 서비스를 바꿔야 하는지 조금 더 분명해졌습니다. 타스에게 서버 전체를 자유롭게 다룰 권한을 주지는 않았습니다.

LISA와 타스, n8n의 운영 환경을 단순화한 개념도입니다. 외부 AI 모델 연결 등 일부 경로는 생략했습니다.
백업도 실제 복원까지 확인했습니다. 복사본이 있다는 설명만으로는 마음이 놓이지 않았습니다. 별도 공간에 다시 꺼내 파일과 데이터가 읽히는지 확인하는 과정이 필요했습니다. 기능을 하나 더 붙이는 동안에는 잘 보이지 않던 일들이 서버를 옮기면서 작업 목록에 들어왔습니다.
타스를 켜두는 것과 LISA를 읽게 하는 것은 별개였습니다
VPS에서 타스가 돌아가게 된 뒤, LISA 안에서도 대화할 수 있도록 붙였습니다. 업무 화면을 보다가 다른 메신저로 이동하지 않고 바로 물어보고 싶었습니다.
처음에는 타스에게 LISA의 매출을 물어도 조회 결과가 나오지 않았습니다. 연결이나 인증 문제인지 확인했는데, 원인은 더 단순했습니다. 타스에게 대화할 통로는 만들어뒀지만, 업무 데이터를 조회하는 통로는 아직 없었습니다.
제가 LISA를 만들었다는 것, 타스가 같은 서버에 있다는 것만으로 데이터가 저절로 연결되지는 않았습니다. 어떤 질문을 받으면 어디에서 무엇을 읽어올지 정해야 했습니다.
조회할 수 있는 범위를 정하고 연결을 붙였습니다. 질문에서 고객사와 기간 같은 조건을 정리하면, 서버가 허용된 조건인지 확인한 뒤 LISA의 업무 DB를 읽는 방식입니다. 질문으로 자유로운 SQL을 만들어 실행하도록 하지는 않았습니다.
조회 기준도 정해야 했습니다. 매출은 세금계산서 발행일을 보고, 갱신 후보는 등록된 만료일을 봅니다. 견적의 예상 발주일은 또 다른 기준입니다. 같은 고객의 기록이어도 어떤 날짜로 찾느냐에 따라 답이 달라졌습니다.
처음 연결했을 때는 전체 담당자별 매출을 보면서 특정 고객도 따로 확인해달라고 했더니, 전체 조회까지 그 고객으로 좁혀지는 경우가 있었습니다. 제가 덧붙인 말이 조회 범위를 바꿔버린 것입니다. 특정 고객에 대한 추가 확인과 전체 조회 조건을 구분하도록 고쳤습니다.
‘작년부터’라는 말에 막혔습니다
그다음에는 두 고객사의 작년부터 매출을 알려달라고 물었습니다. 제가 평소 업무에서 할 법한 질문이었습니다.
타스는 조회하지 못했다는 취지로 답했습니다. 데이터가 없는 것은 아니었습니다. 따로 DB를 확인하니 해당 내역이 있었습니다. 한 번에 조회할 수 있는 기간을 366일로 제한해둔 것이 문제였습니다. 작년 초부터 올해 10월까지의 기간은 그 범위를 넘었습니다.
사람에게는 짧은 질문인데, 프로그램에는 기간을 나누는 처리가 더 필요했습니다.
요청한 전체 기간은 유지하고 내부에서 연도별로 나눠 조회하도록 바꿨습니다. 두 고객사를 각각 두 해에 걸쳐 찾으면 실제 조회는 네 번 일어납니다. 그 결과를 같은 고객과 같은 기준 안에서 합치도록 했습니다.

두 고객사를 두 해에 걸쳐 조회하면 내부 조회는 네 번 일어납니다. 요청한 전체 기간과 고객별 구분은 유지했습니다.
이때 합계가 맞는지만 봐서는 부족했습니다. 고객명에 두 회사가 함께 적힌 거래가 있었고, 이를 한 회사의 매출로 모두 넣으면 해석이 달라질 수 있었습니다. 공동으로 등록된 이름은 별도로 보여주도록 했습니다. 만료일이 없는 기록을 보고 갱신이 끝났거나 누락됐다고 단정하지 않도록 하는 기준도 필요했습니다.
수정 후에는 실제 LISA 채팅에서 다시 질문하고, 답변의 품목과 합계를 DB 원본과 대조했습니다. 그 질문에 대해서는 일치하는 것을 확인했습니다. 다른 표현으로 물어도 같은 조건을 잘 잡는지는 계속 봐야 합니다.
답을 기다리면서 다시 나눈 역할
조회가 되자 이번에는 기다리는 시간이 눈에 들어왔습니다. 한 번은 두 고객사의 내역을 묻고 답변이 저장되는 데 약 49초가 걸렸습니다. 업무 중에 잠깐 확인하려고 던진 질문치고는 길게 느껴졌습니다.
당시에는 질문을 조회 조건으로 바꾸는 단계와 결과를 답변으로 쓰는 단계에서 각각 모델을 호출했습니다. 다만 전체 시간 중 어디에 얼마나 걸렸는지 기록이 충분하지 않아, DB가 느린지 모델이 느린지부터 확인해야 했습니다.
모델의 추론 강도만 낮춰보기도 했지만, 소수의 측정에서는 빨라졌다고 볼 만한 차이가 없었습니다. 설정 하나를 바꿔 해결할 문제라고 보기는 어려웠습니다.
고객과 기간이 분명한 단순 매출 질문은 코드가 조건을 처리하도록 보완했습니다. 품목별 표와 합계도 조회한 원본으로 코드가 만들고, 모델은 필요한 설명을 쓰도록 했습니다. 복잡하거나 뜻이 불분명한 질문은 기존 해석 과정을 거치게 했습니다.
답변 모양도 같이 바꿨습니다. 길게 풀어 쓴 문장보다 제품명, 수량, 단가, 매출과 이익이 표로 보이는 편이 확인하기 쉬웠습니다. 합계 행을 붙이되, 원가가 비어 있으면 0원으로 채우지 않도록 했습니다. 이익률도 각 행의 비율을 평균 내지 않고 합계 금액으로 계산했습니다.

표는 설명을 위해 만든 가상 데이터입니다. 실제 고객 정보나 운영 화면은 사용하지 않았습니다.
운영에 반영한 뒤 실제 질문을 보내고 화면의 표와 합계를 다시 원본과 비교했습니다. 응답 시간은 실행할 때마다 달랐습니다. 지금은 몇 초 빨라졌다는 숫자보다, 기다린 뒤 나온 결과를 제가 확인할 수 있는지가 더 신경 쓰입니다.
LISA를 처음 만들 때는 제가 쓸 기능을 하나씩 추가했습니다. 이제는 타스가 그 안의 데이터를 읽어 답하기 시작하니, 제가 당연하게 생각했던 업무 기준을 더 정확히 설명해야 했습니다. ‘매출’이라고 부르던 숫자의 날짜 기준부터, 비어 있는 원가를 어떻게 표시할지까지 말입니다.
VPS로 옮기는 작업과 타스를 연결하는 작업이 제게는 그렇게 이어졌습니다. 서버가 응답하는지 확인한 다음에는, 그 위에서 타스가 실제로 무엇을 조회했는지 확인하게 됐습니다.
요즘은 업무 중에 궁금한 것이 생기면 LISA 안에서 타스에게 물어봅니다. 답변에서 이상한 부분이 보이면 원본을 열어보고, 질문을 잘못 이해한 것인지 조회 기준이 빠진 것인지 다시 확인합니다. 다음에는 견적서를 첨부해서 초안을 만드는 과정도 따로 적어보려고 합니다.