Nutrepedia: Clojure와 HTMX로 구축된 다국어 영양 참고 도구
Nutrepedia는 29개 지역 로케일에 걸쳐 식품 영양 데이터를 빠르고 손쉽게 접근할 수 있도록 설계된 다국어 영양 참고 사이트입니다. 개발자 Jovan (llovan)이 구축했으며, 이 플랫폼은 무료이며, 영양 정보를 먼저 제공하는 레이어를 목표로 하여 많은 영양 도구에서 흔히 볼 수 있는 "칼로리 우선" 또는 "가입 우선" 장벽을 피합니다.
기술 스택 및 아키텍처
Nutrepedia는 효율성과 단순성에 중점을 둔 현대적인 함수형 프로그래밍 스택을 사용하여 구축되었습니다. 핵심 기술 선택은 다음과 같습니다:
- Backend: Clojure, HTTP-Kit, Compojure, 그리고 Hiccup.
- Frontend: 전체 페이지 새로 고침 없이 동적 업데이트를 제공하는 HTMX.
- Database: Postgres는 식품 데이터 저장, 현지화된 콘텐츠 관리, 관리자 워크플로, 작업 큐, 검색 등 다양한 역할을 수행합니다.
다국어 검색 구현
다양한 스크립트와 언어에 대한 검색을 처리하기 위해 Nutrepedia는 특정 데이터베이스 수준 검색 전략을 사용합니다:
- 라틴 문자 퍼지 검색: 철자와 악센트 변형을 처리하기 위해 Postgres의
pg_trgm와unaccent를 활용합니다. - CJK 및 비라틴 스크립트: 중국어, 일본어, 한국어에 대한 효율적인 검색을 지원하기 위해
PGroonga를 구현합니다. - 로마자 별칭: 시스템은 로마자 별칭을 별도로 인덱싱하여 사용자가 "rasbhari"와 같은 용어를 검색하면 힌디어 이름 "रसभरी"를 찾을 수 있게 합니다.
콘텐츠 규모 및 현지화
현재 플랫폼은 1,635개의 식품을 보유하고 있으며, 이들은 47,415개의 현지화된 페이지로 렌더링됩니다. 각 페이지는 현지화된 이름, 서빙 용어, 영양 정보 및 이미지를 제공합니다.
커뮤니티 피드백 및 기술 비판
Hacker News에 소개된 이후, 커뮤니티는 현지화와 데이터 정확성에 관한 여러 기술적·개념적 비판을 제공했습니다:
사용자 경험 및 접근성
사용자들은 다음과 같은 UI/UX 문제를 보고했습니다:
- 입력 동작: 모바일 기기(Firefox 및 기타 브라우저) 사용자는 서빙 크기를 입력할 때 키보드가 자동으로 닫히거나 입력 상자가 불안정하게 동작한다는 보고가 있었습니다.
- 네비게이션: 검색 결과가 하이퍼링크가 아니어서 사용자가 중간 클릭으로 새 탭에서 결과를 열 수 없다는 비판이 있었습니다.
- 접근성: Chrome의 Lighthouse 도구를 사용해 이미지 alt 텍스트와 색 대비를 개선하라는 제안이 있었으며, 특히 검색 바의 핑크 배경과 노란 텍스트가 읽기 어렵다는 점이 지적되었습니다.
데이터 정확성 및 지역 표준
여러 사용자는 미국 중심 데이터(USDA)와 국제 영양 표준 사이의 차이를 강조했습니다:
- 탄수화물 계산: 비평가들은 미국의 총 탄수화물 표시 방식(사용자가 섬유소를 직접 빼야 함)이 EU와 영국 표준과 달라, 섬유소가 별도로 표시된다는 점을 지적했습니다.
- 단위 현지화: 사용자는 "cup"이라는 단어를 다른 언어로 번역해도 실제 측정값(예: 236ml)이 번역되지 않을 수 있으며, 지역마다 "컵"의 크기가 크게 다른다는 점을 언급했습니다.
- 지역 식품 차이: 피드백에 따르면 USDA 데이터베이스는 영국이나 EU에서 생산된 가공 식품이나 특정 품종에 적용되지 않을 수 있으며, 이들 지역의 조리법이 미국 버전과 다를 수 있습니다.
기능 요청
사용자들은 도구의 유용성을 높이기 위한 여러 개선 사항을 제안했습니다:
- 기본 단위: 100g과 같은 기본 측정 단위를 설정하여 비교를 쉽게 할 수 있도록 하는 요청이 있었습니다.
- 식단 다양성 분석: 사용자가 식품 항목의 영양을 기준 주간 식단과 비교하여 전체 영양에 얼마나 다양성을 추가하는지 확인할 수 있도록 하는 제안이 있었습니다.