뱅크샐러드에서 테스트 데이터를 생성하는 방법 (feat. LLM)

뱅크샐러드에서 테스트 데이터를 생성하는 방법 (feat. LLM)

안녕하세요. 뱅크샐러드 QA팀 Tech Lead Manager 송의초경입니다.

뱅크샐러드에서 다루는 마이데이터는 데이터의 특성상 테스트 데이터를 생성하는 것이 항상 큰 과제입니다. 테스트를 수행하기 위해 만들어야 하는 테스트 데이터가 너무 복잡하고 많았죠. 그런데 LLM의 등장으로 이 문제에 대한 해결책을 찾게 되었습니다.

이 글에서는 뱅크샐러드에서 LLM을 활용해 어떻게 테스트 데이터를 생성하고 있는지 설명하려고 합니다.



테스트 데이터는 왜 필요할까요?


테스트 데이터를 미리 구성하는 것은 효과적이고 신뢰할 수 있는 테스트를 위해 매우 중요합니다.

사전에 준비된 테스트 데이터는 테스트의 일관성과 재현성을 보장하며, 다양한 시나리오를 포괄적으로 검증할 수 있게 해줍니다. 이는 예상치 못한 버그를 조기에 발견하고, 엣지 케이스를 효과적으로 처리할 수 있게 합니다.


뱅크샐러드에서는 어떤 테스트 데이터가 필요할까요?


뱅크샐러드와 같은 마이데이터 기반 종합 자산관리 서비스에는 복잡하고 다양한 테스트 데이터가 필요합니다. 이는 은행 계좌, 신용카드, 대출, 투자, 보험 등 다양한 금융 상품 정보를 포함해야 하며, 각 사용자의 고유한 금융 패턴과 자산 구조를 현실적으로 반영해야 합니다.

예를 들어, 한 사용자의 급여 입금 내역, 신용카드 사용 패턴, 투자 포트폴리오의 변동, 대출 상환 내역 등이 서로 연관되어 있으면서도 현실적인 패턴을 보여야 합니다.

이러한 데이터는 익명성을 보장하면서도 시간이 흐름에 따라 지속적으로 생성해줘야 합니다. 이런 복잡한 데이터를 테스트를 수행할 때마다 수작업으로 생성하는 것은 매우 어려우면서도 많은 시간이 소요되는 작업입니다.


figure-1

LLM을 이용하면 어떤 이점이 있을까요?


LLM을 활용하면 현실 사용자와 유사한 테스트 데이터를 생성할 수 있습니다. LLM은 방대한 양의 실제 데이터를 학습하여 인간의 언어 패턴과 데이터 구조를 이해하고 있기 때문에, 실제 사용자 데이터와 매우 유사한 패턴과 특성을 가진 데이터를 만들어낼 수 있습니다.

예를 들어, 금융 거래 데이터를 생성할 때 LLM은 일반적인 소비 패턴, 계절적 변동, 특별 이벤트에 따른 지출 증가 등을 자연스럽게 반영할 수 있습니다. 또한, 개인의 소득 수준에 따른 지출 패턴의 차이, 연령대별 투자 성향의 차이 등 복잡한 사회경제적 요인들도 고려하여 데이터를 생성할 수 있습니다.

이렇게 생성된 데이터는 단순히 무작위로 만들어진 것이 아니라, 실제 세계의 복잡성과 다양성을 반영하고 있어 더욱 효과적인 테스트를 가능하게 합니다.

그럼 본격적으로 LLM을 이용해 테스트 데이터를 생성했던 방법에 대해 공유해 보겠습니다. 가장 먼저 프롬프트 엔지니어링을 통해 우리가 원하는 데이터를 생성했습니다.




프롬프트 엔지니어링


  • 페르소나 설정
    • LLM이 실사용자와 같은 데이터 생성을 위해 역할을 부여하기 위해 구체적인 페르소나를 만듭니다. 예를 들어:
    - 이름: 이영희 (42세, 여성)
    - 직업: 전업주부
    - 가족 구성: 남편, 자녀
    - 라이프스타일: 자녀 교육 중심, 주말 가족 활동
    - 재무 목표: 가정 경제 모니터링, 현금 흐름 파악

상세하게 설정된 페르소나는 LLM이 맥락을 이해하고 적절한 데이터를 생성하는 데 도움을 줍니다.

  • 원하는 데이터 형식(JSON)과 구조 명시
    • LLM에서 반환하는 결과 값을 예상할 수 없기 때문에 필요한 구조에 대해 명시하고 반환하도록 주문합니다.
  • 퓨샷(few-shot) 학습을 위한 예시 데이터 포함
    • 반환된 결과값을 API를 통해 내역을 추가하기 위해 Json 형식의 예시를 첨부합니다.

위 언급된 프롬프트 엔지니어링을 통해 아래와 같은 프롬프트를 만들어주었습니다.
Message(
  role = "user",
  content = "사용자 정보: ...\n" +
      "소비 성향: ...\n" +
      "작업 설명: ...\n" +
      "${readJsonFileAsString("Json File Path")} 이건 가계부 내역 예시야. " +
      "결과 출력: JSON 형태의 String으로, 설명 없이 결과값만 출력"
)



데이터 구조화 및 후처리


LLM이 생성한 데이터가 우리가 원하는 대로 생성되지 않을 가능성이 있고 불필요한 설명이나 특수문자들을 포함할 수 있습니다. Json 형식의 구조화된 데이터가 필요하므로 구조화를 위한 프롬프트를 추가하고 후처리를 수행합니다.

  • 마크다운 형식 제거
  • 불필요한 설명이나 주석 제거
  • JSON 파싱 및 유효성 검사



API 연동

데이터 가공 후 만들어진 Json 데이터를 기반으로 API를 통해 자산 내역을 생성합니다.

  • JSON을 Kotlin/Java DataClass로 매핑
  • API를 통해 개발 서버에 데이터 전송



자동화

지금까지의 데이터 생성 프로세스를 자동화하여 지속적으로 새로운 내역을 생성할 수 있도록 합니다.

  • 전체 과정을 Task로 구성
  • GitHub Actions를 이용한 Cron Job 설정
  • 매일 자동으로 새로운 데이터 생성 및 서버 업로드

이렇게 LLM을 이용해 자동화된 테스트 데이터 생성 결과물 중 일주일치 가계부 내역을 살펴볼까요?

figure-2


  • 월요일: 관리비와 보험료 납부
  • 수요일: 마트 쇼핑, 외식, 서점 방문
  • 목요일: 자녀 보험비 납부, 카페 이용
  • 주말: 가족 활동 (토이저러스, 아쿠아리움 방문)

어떠신가요? 실제 40대 가정주부의 가계부처럼 보이시나요? 개인적으로는 아주 맘에 드는 결과물이었습니다.

프랜차이즈를 위주로 알맞은 금액을 설정한 지출 내역을 만들어, 제가 예상한 것보다 더 개인화된 데이터를 생성하고 있는 모습입니다. 이렇게 자동적으로 생성된 테스트 데이터를 통해 저희 QA팀은 실 사용자와 비슷한 환경에서 테스트를 수행할 수 있게되었고 장기간의 내역이 필요한 기능 테스트도 시간의 낭비없이 즉각적으로 수행할 수 있게 되었습니다.

자동화된 테스트 데이터 생성은 페르소나만 추가하면 여러 계정에서 만들 수 있도록 구성하여 QA팀이 수행하는 테스트 뿐만아니라 개발 시에도 사용될 수 있도록 전 구성원에게 공유되고 있습니다.


사례에서 볼 수 있듯이 앞으로 더욱 정교한 LLM의 등장과 함께, 테스트 데이터 생성뿐만 아니라 자동화된 테스트 케이스 작성, 버그 예측 등 다양한 QA 영역에서 LLM의 활용이 확대될 것으로 기대하고 있습니다. 감사합니다.




보다 빠르게 뱅크샐러드에 도달하는 방법 🚀

지원하기

Featured Posts

post preview
post preview
post preview
post preview
post preview

Related Posts