Program/Dictionary

[Dictionary] 영어 단어 시험지 ver 1.0 with Notion

nowkoes 2023. 8. 29. 02:39

영어 단어 테스트 프로그램

개요

필자의 Vocabulary Notion DB

 

 개발자들은 영어로 된 자료를 접할 일이 많다. 이는 프로그래밍의 역사가 미국에서 시작되었기 때문이고, 영어가 국제적인 커뮤니케이션 언어로 널리 사용되기 때문이다. 이런 배경 하에 필자는 영어로 된 기술 자료를 읽을 때마다 알게 된 새로운 단어나 표현들을 Notion에 기록해왔다.

 

 그러나, 그저 단어를 기록하는 것만으로는 기억에 오래 남기에는 부족하다고 느껴졌다. 이 단어들을 효과적으로 외우고 활용하기 위해서는 반복적인 연습이 필요하다. 이런 고민에서 출발하여, 필자는 이 단어들을 테스트할 수 있는 간단한 프로그램을 개발하게 되었다.


본문

기본 아이디어

 

API 호출 → 단어 저장 → 단어 시험 → 결과 출력

 

 노션은 사용자가 직접 데이터베이스를 구축할 수 있는 기능을 제공하며, 이 데이터베이스는 API를 통해 접근이 가능하다. 본 프로젝트에서는 파이썬을 활용하여 이 API를 호출하였다. 처음에는 C++로 직접 API 호출을 시도했으나, 웹 요청과 JSON 처리의 복잡성 때문에 파이썬의 라이브러리를 활용하는 것이 더 효과적이라고 판단하였다.

 API를 통해 받아온 데이터는 C++ 프로그램에서 처리되며, 사용자는 원하는 개수만큼의 영어 단어를 시험으로 받을 수 있다. 시험의 결과는 txt 파일로 저장되어 사용자에게 제공된다.


파일 구조 및 실행 예시

필자의 개발 폴더

 

 먼저 main.cpp에서 코드를 실행하면, 외부 파이썬 스크립트인 GetNotionAPI.py가 실행된다. 이 스크립트는 노션에서 데이터를 가져와 output.txt 파일에 저장한다. C++ 프로그램은 이 파일을 읽어 단어와 뜻을 파싱하여 사용자에게 문제를 제공한다.

 

 예를 들어 다음과 같이 DB가 구현되어 있다고 가정하자.

 

 

 그렇다면 프로그램을 실행하면 Vocabulary 데이터베이스에 있는 단어와 한국어 정의(meaning) 부분의 데이터를 GetNotionAPI.py에서 json 구조로 가져온다. 그리고 해당 파일을 output.txt 형식으로 저장하게 된다. 

 

 

 이렇게 저장된 파일을 C++ 에서 ifstream으로 연 후, 모든 내용을 저장한다. 그리고 nlohamnn의 json.hpp 라이브러리를 통해 해당 구조를 읽은 후, 단어들을 배열에 담은 후 시험 문제 출력이 시작된다.

 

 

 아직 오답, 정답을 처리하는 기능은 따로 구현되지 않아 해당 결과가 result.txt에 저장되고, 해당 파일을 열어서 시험 결과가 어떻게 되었는지 확인한다.

 

아직 문자열 너비 설정은 완료되지 않았다.


총평

까다로웠던 부분

 

 이 프로젝트를 진행하면서 가장 어려웠던 부분은 한글 문자열의 처리였다. 한글을 사용하기 위해 UTF-8 인코딩을 채택했지만, C++에서 문자열 인코딩에 관련된 문제를 겪었다. 이 문제를 해결하기 위해 여러 자료를 찾아보았고, 결국 Windows API를 사용하여 문제를 해결하였다.

 

처음 보는 json 구조

 

 또한, 웹 개발에 대한 지식이 부족하여 JSON 파일 처리에 어려움을 겪었다. 파이썬의 라이브러리를 활용하여 이 문제를 어느 정도 해결하였다.


개선사항

 개선 사항을 몇 가지 나열하자면

 

  1. 코드의 구조화: 헤더 파일과 구현 파일로 코드를 분리
  2. 객체 지향 설계: 기능마다 클래스를 생성하여 코드의 재사용성과 가독성 업그레이드
  3. 결과 출력의 정렬: result.txt에서 결과를 깔끔하게 출력
  4. 정답/오답 기능 추가

 

 이정도가 다음 버전으로 업그레이드 할 때 적용될 내용이다. 이러한 점들을 해결하고 아직 진행하고 있는 TeamCraetor도 어느 정도 안정화가 되면 사전 API를 받아오는 기능도 적용해볼까 고민 중이다. 자세한 코드 리뷰는 어느정도 코드가 안정화되고 나면 진행하도록 하겠다. 해당 파일이 궁금한 사람들은 여기 링크를 타고 들어가면 된다.

반응형