Hacker News

Show HN: Make math automatic with Mathy

Show HN: 수학 풀이를 자동화하는 Mathy

Mathy는 이미 배운 수학 내용을 짧게 반복 연습해 빠르고 정확하게 떠올리도록 돕는 무료 앱입니다. FSRS로 복습 시점을 정하고, 문제와 답을 결정론적으로 생성·검증하며, 핵심 기능은 계정 없이 오프라인에서도 작동합니다.

AI 요약

Mathy는 새로운 수학 개념을 가르치는 앱이 아니라, 이미 배운 내용을 짧게 반복해 자동으로 떠올리는 능력(automaticity)을 기르는 연습 도구입니다. 개발자는 Math Academy를 매일 사용하면서도 이동 중 약한 부분을 빠르게 연습할 도구가 필요했다고 설명합니다. 수학 플래시카드로 많이 쓰이는 Anki는 수학 문제를 만들고 관리하기 번거로웠고, 적합한 대안을 찾지 못해 직접 만들었습니다. 목표는 매일 공부시키는 일이 아닙니다. 익숙해질수록 권장 연습 간격을 늘려, 필요할 때만 짧게 복습하도록 설계했습니다.

학습 범위와 사용 흐름

Mathy는 학습 중인 개념을 대신 설명하거나 진단하지 않습니다. 사용자가 학년, 과정, 주제를 골라 연습할 대상을 정합니다. 개발자는 Math Academy 같은 도구로 개념을 먼저 익힌 뒤 Mathy에서 해당 주제를 연습하는 방식을 예로 듭니다. 대상은 암산으로 풀 수 있는 문제, 직접 회상하거나 짧은 절차로 답할 수 있는 내용입니다. 대체로 3~5초 안에 답하는 수준의 숙련을 목표로 합니다.

연습은 권장 복습, 자유 연습, 시간 제한 모드로 나뉩니다. ‘Daily Math’, ‘Timed Math’, ‘Endless Math’, ‘60-Second Sprint’에서 원하는 방식으로 풀 수 있고, 스프린트에서는 정해진 시간에 최고 점수를 노립니다. 레벨, 경험치(XP), 수학 메달, 연속 기록 같은 가벼운 게임 요소도 넣었습니다. 권장 일정에 맞춘 연속 기록은 연습이 필요 없는 날도 이어지는 것으로 계산합니다.

복습 일정과 자동성 판정

복습 일정에는 FSRS(Free Spaced Repetition Scheduler)를 사용합니다. FSRS가 기억 상태와 다음 복습 시점을 정하고, Mathy는 별도의 대기열 정책으로 재학습, 예정된 복습, 새 목표, 취약한 내용, 유지 연습, 혼동하기 쉬운 내용을 묶어 실제 연습 순서를 구성합니다. 앱 첫 화면에서는 권장 연습과 다음 복습 날짜를 보여줍니다.

자동성은 한 번 맞혔는지가 아니라 시간이 지나도 반복해서 정확하게 답하는지를 기준으로 삼습니다. 정확도, 최근 정답 비율, 응답 시간, 복습 간격, 단서 범위를 함께 살펴봅니다. 실패하면 학습을 잠시 중단하는 규칙을 적용하고, 실력이 떨어지는 징후가 나타나면 다시 검토하도록 합니다. 개발자는 자동 시뮬레이션으로 수년간의 연습 기록을 시험했지만, 실제 사용 기록을 바탕으로 판정 방식도 계속 조정할 예정이라고 밝힙니다.

문제 생성과 답 검증

문제는 미리 정한 회상 목표와 매개변수화한 문제 유형을 바탕으로 만듭니다. 문제 유형마다 입력 범위, 수학 규칙, 답 형식, 제외 조건, 표시 방식을 정하고, 해당 조건 안에서 여러 변형을 생성합니다. AI가 실행 중에 문제나 정답을 만들어내는 방식은 쓰지 않습니다. 생성한 문제에는 안정적인 ID를 부여해 같은 변형을 재현하고, 문제 순서가 달라져도 같은 답안 기준으로 채점합니다.

숫자 답을 입력하면 공백과 기호를 정리한 뒤 결정론적 파서로 해석하고, 분수·소수·백분율 등 정규 형태로 바꿔 비교합니다. 예를 들어 동등한 값을 허용하는 문항에서는 1/2, 0.5, 50%, 2/4를 같은 값으로 처리합니다. 다만 분수나 백분율 형식 자체를 묻는 문제는 요구한 표현을 답으로 입력해야 합니다. 문법이 잘못된 답에는 값 비교 전에 형식 오류를 알립니다. 선택형과 구조화된 답도 각각 정해진 규칙으로 검사합니다.

문제는 ‘영역 > 주제 > 개념 > 회상 목표 > 문제 변형’ 구조로 정리합니다. 회상 목표 하나마다 복습 상태를 따로 관리합니다. 예를 들어 7×8과 8×7은 같은 목표의 서로 다른 표현으로 볼 수 있지만, 56÷7은 별도 회상 목표입니다. 문제 유형은 이 지식 구조와 별도로 문제를 작성하고 생성하는 단위입니다. 학년과 과정별 경로는 내부 수학 구조에 덧붙인 분류이며, 공통 핵심 교육과정(Common Core)을 참고하되 암산 연습에 맞지 않는 내용은 빠집니다.

앱 구조와 남은 과제

앱은 React Native로 만들었으며 iPhone, iPad, 웹에서 같은 코드 기반을 사용합니다. 연습, 채점, 일정 관리, 진행 상황 저장은 기기나 브라우저 안에서 이뤄져 계정이나 연습용 백엔드가 필요하지 않습니다. 오프라인에서도 핵심 기능을 쓸 수 있고 무료입니다. 다만 진행 상황은 기기 간 동기화되지 않으며, 앱을 삭제하거나 브라우저 데이터를 지우면 기록이 사라질 수 있습니다. 개발자는 향후 계정과 동기화를 선택 기능으로 추가하는 방안을 검토합니다. 알림, 리더보드, 대결 기능도 후보입니다.

개발자는 핵심 앱을 며칠 만에 만들었지만, 실제 사용 과정에서 발견한 작은 불편과 문제 표현·입력 방식 등을 다듬느라 앱스토어 제출까지 약 2주가 걸렸다고 설명합니다. 특히 고급 수학 내용을 작은 모바일 화면에 표시하는 일, 문제 내용의 범위와 다양성을 늘리는 일이 남았습니다. 사용자 피드백에서는 안드로이드 키보드가 제출 버튼을 가리는 문제, 삼각비 문항에 직각삼각형 그림이 필요하다는 의견이 나왔습니다.

Hacker News 반응

  • @tehnoslow — 좋은 프로젝트입니다. AI가 정답을 만들지 않고 문제를 결정론적으로 생성한다는 점이 좋습니다.
    • @gmays — 감사합니다. AI가 그럴듯하지만 틀린 내용을 만들 가능성을 피하고 싶어서 이 방식은 필수 조건이었습니다. 그래서 구현과 테스트·검증에 시간이 많이 들었지만 결과에 만족합니다.
  • @rahimnathwani — Pixel에서 안드로이드 키보드가 초록색 버튼을 가립니다. 숫자 문제를 풀 때 앱 안의 숫자 키패드로 숫자를 입력한 뒤 안드로이드 키보드의 엔터 키를 눌러야 합니다. 어색하지만 자주 쓰면 익숙해질 수도 있겠습니다.
    • @gmays — 알려주셔서 감사합니다. 오늘 밤 이 버그를 살펴보고 수정본을 배포하겠습니다. Mac과 iPhone에서만 시험해 봐서 피드백이 도움이 됩니다.
    • @fn-mote — iOS에서도 키보드가 뜨는 방식이 꽤 산만합니다.
    • @gmays — 알려주셔서 감사합니다. 오늘 밤 수정하겠습니다.
  • @rglover — 얼마 전 바로 이런 걸 찾고 있었습니다. 수학을 잘하지 못해서 노트북을 떠나서도 연습할 수 있는 도구가 필요했습니다. 브라우저에서도 작동하는 점이 좋습니다. 정말 잘 만들었습니다.
    • @gmays — 감사합니다. 저도 비슷한 상황입니다. 몇 년 전 수학을 다시 공부한 경험을 쓴 글도 있습니다.
    • @rglover — 글도 재미있게 읽었습니다. 오늘 Math Academy를 처음 알았는데 자세한 소개도 고맙습니다.
  • @AlchemistCamp — Math Academy를 일찍부터 사용해 온 사람으로서, 작은 기능 단위 연습에 집중한 이런 프로젝트가 반갑습니다. 암기를 가볍게 보는 시각도 있지만, 기초 기술을 자동으로 떠올릴 수 있으면 더 어려운 내용을 훨씬 더 빠르게 익힐 수 있습니다.
    • @gmays — 감사합니다. Justin Skycak의 글을 읽고 자동성의 이점을 알게 됐습니다. 한 번 알고 나면 자동성이 부족해 발목을 잡는 부분과, 자동성이 실력의 한계를 높이는 데 도움이 될 부분이 보이기 시작합니다.
  • @fn-mote — 기하와 삼각법 문제를 풀어 봤는데 설명이 너무 간략합니다. 삼각법은 변 이름을 표시한 직각삼각형 그림을 보여주면 좋겠습니다. 핵심 정보만 주는 방식은 사인과 코사인을 혼동하는 문제를 해결하는 데 도움이 되지 않습니다. 암기 연습이라면 그림을 더 넣어 주세요. 실제 응용에서는 변수 이름이 달라지기도 합니다. 앱을 바꿔야 할지는 모르겠지만, 개발자가 그 점을 고려했는지는 잘 모르겠습니다.
    • @gmays — 좋은 의견입니다. 표시 방식을 살펴보겠습니다.
  • @andai — Anki는 제가 실제로 겪는 문제와 반대 방향에 맞춰져 있었습니다. 공부 시간을 줄이려면 복습을 어렵게 만들어야 하니, 제게는 고통을 키우는 셈입니다. 시간이 부족한 게 아니라 의지력이 부족합니다. 즐겁고 쉬워야 계속합니다. 그렇지 않으면 그만두고 기억도 사라집니다. 반복 연습을 쉽게 만들었더니 오히려 더 유창해졌습니다. 복습을 더 자주 하도록 목표 기억률을 높이고, 정답까지 걸린 시간을 점수로 쓰면 Anki를 조금 수정해서 같은 방식으로 쓸 수도 있겠다고 생각했습니다. 수학 문제는 산수 다음 단계부터 만드는 일이 어려웠습니다. 문제를 어떻게 생성했나요?
    • @gmays — 제품 개발자라서 문제 카드부터 시작하기보다 원하는 사용자 경험과 모바일 화면의 제약부터 정리했습니다. 개발용 앱에 모든 문제 유형을 보여주는 화면을 만들어 표시와 입력 방식을 확인했습니다. 그 뒤 문제 생성 시스템을 구성해 4만 개가 넘는 문제를 다룰 수 있겠다는 확신을 얻었습니다. 문제 유형과 입력 범위·수학 규칙·답 형식·제약·표시 규칙을 명시하고, 결정론적 컴파일러로 생성합니다. 정답은 화면에 보이는 문장이 아니라 수학 구조에서 계산합니다. 정수와 유리수는 정확한 산술을 쓰고, 더 복잡한 기호 계산은 오프라인 검증 절차를 거칩니다. 생성과 검증을 분리하며, 모든 문제는 수학·도메인·스키마·답 형식·표시 검사를 통과해야 합니다. 유한한 문제 공간은 전수 검사하고, 큰 문제 공간은 속성·경계·불변 조건·회귀 테스트를 적용합니다. 검증된 정의와 결과, 실행 표현은 콘텐츠 다이제스트로 연결합니다. 내용을 바꾸면 다시 검증합니다.
    • @andai — 정말 상세한 설명입니다. 이것만으로도 좋은 글이 되겠습니다. 문제 유형을 정의하는 일이 지식 그래프를 만드는 것과 같은가요? 그래프는 어떻게 구성했나요? 그리고 SymPy를 모바일 앱에 넣어 배포하나요?
    • @gmays — 둘은 관련은 있지만 다릅니다. 지식 그래프는 ‘영역 > 주제 > 개념 > 회상 목표 > 문제 변형’ 구조입니다. 문제 유형은 경계가 정해진 문제 묶음을 생성하는 작성·생성 단위라서 그래프 노드와 일대일 대응하지 않습니다. 내부 그래프는 수학 개념과 독립적으로 연습할 수 있는 회상 기술을 중심으로 만들고, 학년·과정은 그 위에 매핑합니다. SymPy는 iOS 앱에 포함하지 않습니다. 콘텐츠를 만드는 오프라인 검증 과정에서만 쓰며 앱에는 검증된 콘텐츠만 들어갑니다. 앱 실행 중에는 Python, SymPy, AI, 제한 없는 컴퓨터 대수 시스템(CAS)을 사용하지 않습니다.
  • @yurimo — 계정을 두지 않으려는 이유는 이해하지만, 기기 간 진행 상황을 연결할 수 있으면 좋겠습니다. iCloud 동기화는 어떨까요?
    • @gmays — iCloud 동기화는 생각하지 못했습니다. 무료 앱이라 동기화 저장 비용을 감당하기 어려웠는데, iCloud를 쓰면 사용자가 진행 상황과 메달, 도전 기록을 저장하는 비용을 부담할 수 있겠습니다. 안정적으로 구현할 방법을 살펴보겠습니다.
  • @drivebyhooting — 교육과정은 어떻게 정했나요? 3학년 과정을 해봤는데 수준이 적절한지 판단하기 어렵습니다. Duolingo Math, IXL, Khan Academy 등의 교육과정과 비교해 봤나요?

원문: Hacker News / 번역·요약: Trawling