DATA & DB · 문제·단원·개념을 저장하기 시작한 이유
지난 STEP 014에서는 데이터베이스를 ‘웹서비스의 기억장치’라고 설명했습니다. 그렇다면 MathGenix에는 왜 데이터베이스가 필요했을까요?
처음에는 가장 중요한 것이 ‘AI가 수학 문제를 만들어내는 것’이었습니다. 버튼을 누르면 문제 하나가 생성되고, 화면에 결과가 나타나는 것만으로도 충분해 보였습니다.
그런데 문제 수가 늘어나면서 상황이 달라졌습니다. 문제를 단순히 만드는 것과, 만든 문제를 나중에도 다시 찾아 쓰는 것은 전혀 다른 문제였습니다.
오늘의 목표
- MathGenix가 단순 문제 생성기에서 데이터베이스가 필요한 서비스로 바뀐 이유를 이해합니다.
- 문제 하나에 실제로 어떤 정보가 함께 저장되어야 하는지 알아봅니다.
- 문제와 단원, 개념의 관계가 왜 중요한지 이해합니다.
- 다음 STEP 016에서 Neo4j를 선택한 이유를 이해할 준비를 합니다.
01. 문제를 만드는 것만으로는 서비스가 되지 않았습니다
처음에는 AI에게 조건을 주고 수학 문제를 생성하는 기능 자체가 핵심이었습니다. 하지만 문제가 계속 만들어지기 시작하면 곧 이런 질문이 생깁니다.
- 이 문제는 몇 학년 문제인가?
- 어느 단원에 속하는가?
- 어떤 개념을 사용한 문제인가?
- 난이도는 어느 정도인가?
- 정답과 해설은 무엇인가?
- 비슷한 문제는 또 무엇이 있는가?
문제 본문만 저장해서는 이런 질문에 제대로 답할 수 없습니다. 문제와 함께 여러 정보를 체계적으로 저장해야 했습니다.
02. 문제 한 개에는 생각보다 많은 정보가 붙습니다
수학 문제 한 개를 단순한 문장 하나로만 보면 데이터베이스가 필요 없어 보일 수 있습니다. 하지만 실제 서비스를 만들려고 하면 문제 하나에 많은 정보가 따라붙습니다.
- 문제 내용
- 정답
- 해설
- 학년
- 대단원
- 중단원
- 세부 개념
- 난이도
- 문제 유형
- 생성 날짜
- 검토 여부
이 정보가 함께 저장되어 있어야 나중에 ‘고1 방정식 중 난이도 중 수준 문제만 보여줘’ 같은 요청을 처리할 수 있습니다.
03. 가장 중요한 것은 ‘문제와 개념의 연결’이었습니다
MathGenix에서는 문제 자체도 중요하지만, 그 문제가 어떤 개념과 연결되어 있는지를 아는 것이 더 중요했습니다.
예를 들어 어떤 문제는 ‘이차방정식’이라는 단원에 속하면서 동시에 ‘근과 계수의 관계’라는 세부 개념을 사용할 수 있습니다. 다른 문제는 같은 단원에 있지만 전혀 다른 개념을 사용할 수 있습니다.
즉 단순히 문제 목록을 저장하는 것보다 ‘이 문제는 어떤 개념과 연결되어 있는가’를 표현할 수 있어야 했습니다.
04. 표 형태로 저장하면 안 되는 걸까요?
물론 가능합니다. 처음에는 표처럼 문제 번호, 학년, 단원, 난이도 등을 한 줄에 넣는 방식으로도 저장할 수 있습니다.
하지만 데이터가 늘어날수록 ‘관계’를 표현하는 일이 복잡해집니다. 한 문제가 여러 개념과 연결되거나, 하나의 개념이 수많은 문제와 연결될 수 있기 때문입니다.
엑셀로 비유하면 한 칸에 ‘이차방정식, 근과 계수, 판별식’처럼 여러 내용을 계속 적어 넣는 상황과 비슷합니다. 처음에는 괜찮지만 나중에는 연결 관계를 찾고 관리하기가 점점 어려워집니다.
05. 그래서 데이터 구조를 다시 생각하게 됐습니다
이 지점에서 MathGenix는 단순한 문제 생성 프로그램이 아니라 ‘문제와 개념을 관리하는 서비스’로 성격이 바뀌기 시작했습니다.
필요한 것은 문제를 많이 저장하는 것뿐 아니라, 문제와 학년, 단원, 개념이 어떻게 연결되어 있는지를 함께 관리하는 구조였습니다.
쉽게 말하면 ‘문제 보관함’을 만드는 단계에서 ‘문제 지도’를 만드는 단계로 넘어간 것입니다.
06. 문제 지도를 만든다는 것은 어떤 의미일까요?
예를 들어 다음과 같은 연결을 생각해볼 수 있습니다.
- 문제 A → 고등학교 1학년
- 문제 A → 방정식
- 문제 A → 이차방정식
- 문제 A → 근과 계수의 관계
- 문제 B → 고등학교 1학년
- 문제 B → 방정식
- 문제 B → 판별식
이렇게 연결해두면 나중에 특정 개념과 관련된 문제만 찾거나, 비슷한 개념을 사용하는 문제들을 묶어보는 일이 훨씬 쉬워집니다.
07. MathGenix는 왜 이런 구조가 중요했을까?
MathGenix의 목적은 문제 하나를 보여주는 데서 끝나지 않습니다. 사용자가 원하는 조건에 맞는 문제를 찾고, 비슷한 문제를 만들고, 특정 단원의 문제만 모아 시험지를 만들 수 있어야 합니다.
그러려면 각 문제의 위치와 연결 관계를 서비스가 기억하고 있어야 합니다.
결국 데이터베이스는 단순한 저장공간이 아니라 MathGenix가 ‘문제를 이해하고 관리하게 만드는 기반’이 되었습니다.
08. 여기서 Neo4j를 만나게 됩니다
이제 다음 질문이 생깁니다.
문제, 단원, 개념 사이의 연결을 쉽게 표현할 수 있는 데이터베이스는 없을까?
이 질문을 따라가면서 MathGenix에서는 Neo4j라는 그래프 데이터베이스를 사용하게 됩니다.
그래프 데이터베이스는 데이터를 표의 한 줄로만 보는 대신, ‘점과 점의 연결’처럼 표현하는 방식입니다.
다음 STEP 016에서는 왜 일반적인 표 형태 데이터베이스 대신 Neo4j를 선택했는지 아주 쉽게 설명합니다.
09. 초보자는 여기서 무엇만 기억하면 될까요?
지금 단계에서 데이터베이스 설계 방법이나 어려운 용어를 외울 필요는 없습니다. 아래 세 가지만 기억하면 충분합니다.
- 웹서비스는 나중에도 다시 사용할 정보를 저장해야 합니다.
- 문제 하나에도 학년, 단원, 개념, 난이도처럼 여러 정보가 함께 붙습니다.
- MathGenix에서는 특히 ‘문제와 개념의 연결’을 관리하는 것이 중요했습니다.
10. AI에게 데이터 구조를 물어볼 때는 이렇게 질문하세요
데이터베이스를 처음 접하는 사람이라면 AI에게 어려운 구조부터 설계해달라고 하기보다, 내가 저장하려는 정보를 먼저 설명하는 것이 좋습니다.
예를 들어 이렇게 질문할 수 있습니다.
수학 문제를 저장하는 서비스를 만들려고 합니다. 문제마다 학년, 단원, 개념, 난이도, 정답을 저장하고 싶고, 하나의 문제가 여러 개념과 연결될 수도 있습니다. 데이터베이스를 처음 배우는 사람 기준으로 어떤 식으로 구조를 생각하면 되는지 쉽게 설명해주세요.
이렇게 질문하면 AI가 기술 이름부터 나열하기보다 내 서비스에서 필요한 데이터 구조를 중심으로 설명하도록 유도할 수 있습니다.
SUMMARY
- MathGenix는 문제를 생성하는 것만으로는 충분하지 않았습니다.
- 문제마다 학년, 단원, 개념, 난이도, 정답 같은 여러 정보가 필요했습니다.
- 특히 문제와 개념 사이의 연결을 저장하고 관리하는 것이 중요했습니다.
- 이 때문에 단순한 문제 보관이 아니라 데이터 구조를 고민하게 됐습니다.
- 그 과정에서 관계를 표현하기 쉬운 Neo4j를 검토하게 됐습니다.
ONE LINE TAKEAWAY
MathGenix에 데이터베이스가 필요했던 이유는 문제를 많이 저장하기 위해서가 아니라, 문제와 개념의 관계를 기억하기 위해서였습니다.
NEXT IN SERIES
STEP 016 — 일반 데이터베이스 대신 Neo4j를 선택한 이유: 문제와 개념을 ‘연결’해서 저장하기
참고 자료
- Neo4j Documentation — Graph database concepts
- PostgreSQL Documentation — Database basics