Thanks to visit codestin.com
Credit goes to github.com

Skip to content

HurDong/fastats

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 프로젝트명 : Fastats

Fastats

Fastats는 국가통계포털(KOSIS)에서 제공하는 데이터를 더욱 빠르고 정확하게 검색할 수 있도록 돕는 검색 시스템입니다.
사용자는 자료의 목적을 말하기만 해도 챗봇이 키워드 혹은 통계 자료를 추천해 줍니다.
이를 통해 복잡했던 대한민국 통계청 자료 검색이 더욱 쉽게 개선됩니다.

🎨 데모

📧 팀원 소개

팀원 Email GitHub 역할
권용수 [email protected] @kwonwd 프론트엔드, 백엔드, AI 개발
김민지 [email protected] @minddong2 백엔드 개발
손영준 [email protected] @glenn-syj 백엔드, 인프라
송창용 [email protected] @krca5876 인프라
이주영 [email protected] @icodo98 백엔드, 인프라, 데이터 처리
허동민 [email protected] @hurdong 백엔드 개발

🚀 주요 기능

  • 🚀 데이터 전처리: 약 25만 건의 통계표 데이터를 전처리하고 적재
  • 🔄 데이터 최신화: Spring Batch를 사용하여 정기적으로 데이터 최신화 수행
  • 🔍 검색 기능: Elasticsearch를 통한 Full-Text Search 구현
  • 💬 챗봇: 사용자가 목적을 입력하면 관련 키워드 및 통계 자료 추천

📄 사용 기술 스택

  • FE: Next.js (w/ Typescript)
  • BE: Spring Boot (w/ Java 17), Spring Scheduler, Spring Batch, Spring Data JDBC/Elasticsearch/JPA(비교용), Elasticsearch, Logstash, Kibana, MySQL, MongoDB, Redis
  • Infra: Docker, Docker Compose, Docker Hub, Jenkins, NginX
  • AI : Spring AI, Ollama

🔍 기술 선택 배경

Elasticsearch 채택 이유

Elasticsearch는 대량의 텍스트 데이터에 대한 빠른 검색 및 분석을 가능하게 하는 오픈소스 검색 엔진으로, 프로젝트의 요구 사항에 적합한 몇 가지 주요 장점이 있어 채택하게 되었습니다:

  1. 빠른 검색 성능:

    • 국가통계포털의 데이터는 방대한 양의 통계 표로 구성되어 있어 이를 빠르게 검색하는 것이 중요했습니다. Elasticsearch는 역색인 구조를 통해 빠른 Full-Text Search를 제공하여 사용자가 필요한 정보를 신속하게 조회할 수 있게 했습니다.
  2. 유연한 데이터 처리:

    • Elasticsearch는 정형 데이터뿐만 아니라 비정형 데이터도 효율적으로 처리할 수 있어 다양한 형태의 데이터를 통합하여 검색하는 데 유리했습니다. 이는 통계 자료와 같이 다양한 형태로 존재하는 데이터를 다루는 데 큰 장점이 되었습니다.
  3. 한국어 분석기 Nori의 지원:

    • 한국어 검색 최적화를 위해 Nori 분석기를 사용했습니다. 이는 한국어의 형태소 분석에 최적화되어 있어 대한민국 국민을 주요 사용자로 하는 통계청 데이터의 검색 성능을 크게 향상시켰습니다.
  4. 확장성:

    • Elasticsearch는 분산형 아키텍처를 기반으로 하여 확장성이 뛰어납니다. 데이터 양이 증가해도 여러 노드에 데이터를 분산 저장하고, 성능 저하 없이 검색을 유지할 수 있습니다. 이 확장성은 향후 국가통계포털의 데이터가 증가할 것을 대비해 중요한 요소였습니다.
  5. Kibana와의 통합 가능성:

    • 시각화를 위해 Kibana와 쉽게 통합할 수 있다는 점도 Elasticsearch를 선택한 이유 중 하나입니다. 검색된 데이터를 대시보드 형태로 시각화하여 사용자에게 더 나은 경험을 제공할 수 있었습니다.

이와 같은 이유로 Elasticsearch는 Fastats 프로젝트의 빠르고 효율적인 검색 기능한국어 지원을 가능하게 해주는 중요한 기술로 채택되었습니다.

📊 ERD (Entity Relationship Diagram)

ERD

🔍 아키텍처

Arichitecture

  • Next.js: 클라이언트 측 UI 렌더링
  • Spring Boot: 백엔드 비즈니스 로직 및 API 제공
  • Elasticsearch: 데이터 검색 및 검색어 자동 완성 기능

🛠️ 기능 설명 & 화면 구성

1. 랜딩 페이지

  • 설명: 전처리된 약 25만개의 통계청 데이터를 검색할 수 있는 화면을 제공합니다. 기존 KOSIS 통계청의 검색 속도보다 훨씬 빠른 속도를 경험할 수 있습니다.
  • 랜딩 페이지

2. 검색어 제안

  • 설명: 해당 검색어의 오타를 검출하거나 해당 검색어와 유사한 검색어를 추천합니다.
  • 검색어 제안

3. 카테고리 분류

  • 설명: 카테고리에 알맞게 데이터를 정렬합니다.
  • 카테고리 분류

4. 대분류 분류

  • 설명: 통계표의 주제 혹은 통계 기관에 따라 분류합니다.
  • 대분류 분류

5. 챗봇 기능

  • 설명: 사용자의 입력에 따라 챗봇이 추천 검색어를 제시합니다.
  • 챗봇 기능

📈 향후 업데이트 계획

  • 🌟 V2 기능 추가: 사용자 맞춤 추천 기능 추가
  • 🚀 API 최적화: 검색 및 응답 시간 개선을 목표로 성능 최적화 진행

역할 분담

팀원 주요 담당 업무
권용수 - AI 부분 백엔드 코드 작성, 프론트엔드 코드 작성 및 AI 모델 연동
- NextJS를 이용한 프론트엔드 페이지 작성 및 디자인 구성
- 자율 프로젝트 영상 제작
김민지 - Ngram 분석기를 활용한 검색어 자동 추천
- Nori 분석기를 활용한 검색 기능 최적화
손영준 - 검색 메인 로직 및 카테고리 로직 작성, Elasticsearch 연동 작업, ELK 스택 연동 및 보안 설정
송창용 - 아키텍처 설계 및 Jenkins를 통한 CI/CD 파이프라인 구축, 그리고 ELK 스택의 연동 및 보안 설정
이주영 - 데이터 전처리를 위해 xls 파일 파싱 및 openAPI
- NextJS를 활용한 프런트 api 요청
허동민 - 성능 개선 로직 설계 및 구현
- Nori 분석기를 활용한 검색 기능 최적화
- 사용자 경험 개선을 위한 데이터 처리 로직 개발

🗒️ 느낀 점

팀원 느낀 점
권용수 - AI를 연동한 BE 코드 작성이 처음이라서 많이 헤맨 프로젝트였습니다. 시간이 조금만 더 있었다면 AI모델을 학습 시킬 수 있었을 것 같은데 하지 못해서 아쉽습니다.
- React기반의 NextJS를 처음 사용해보는데 어려움을 느꼈습니다. 이전에 프론트엔드를 했었는데 다시금 공부의 필요성을 느꼈습니다.
김민지 - RDBMS와 다르게 역색인 구조와 Tokenizer 기반으로 데이터를 다룬다는 점이 흥미로웠습니다. 특히 한국어 분석의 어려움(띄어쓰기, 복합명사 등)을 해결하는 과정에서 Nori 분석기의 강점을 체감할 수 있었습니다. 짧은 개발 기간 동안 사용자 경험을 최적화하기 위해 기여할 수 있어서 뿌듯했습니다.
손영준 - 통계청 검색 기능을 개선한다는 목표를 가지면서, 팀원들과 함께 짧은 시간에 집중적인 학습 및 개발로 ElasticSearch를 경험할 수 있게 되어 도움이 많이 되는 시간이었습니다. 특히, 통계청에서 기존에 제공하는 검색 기능을 어떻게 더 개선할 수 있을지 고민하며, 기술과 설계를 더욱 살펴볼 수 있어 좋았습니다.
송창용 - 개발을 할 때에는 당장 눈앞의 과제만을 수행하는 것이 아닌 전체적인 시야를 가져야 하는 것의 중요성을 깨달았습니다. 팀원들의 도움으로 인프라 구축을 마칠 수 있었고, 인프라 지식 뿐만이 아닌 개발을 할 때의 태도와 노하우들을 습득하는 가치있는 시간이었다고 생각합니다.
이주영 -짧은 개발 기간 때문에 아쉬움이 남는 프로젝트였습니다. 특히 빠르게 끝내줬어야할 데이터 전처리헤 생각보다 시간을 잡아먹혀서 다른 팀원들에게 조금 미안합니다. 그래도 다들 재촉하지 않고 자신이 맡은 부분을 빠르게 완성해 주어서 좋았습니다.
허동민 - 성능 개선 프로젝트를 경험하면서 실사용이 가능한 고도화된 웹서비스를 배포 및 유지보수하는 전략의 중요성을 배웠습니다.
- 엘라스틱 서치의 한국어 맞춤 분석기인 Nori를 사용하여 사용자 경험을 개선할 수 있었으며, JPA나 JDBC와 다른 방식으로 데이터를 처리하는 경험을 통해 새로운 성능 개선 포인트를 찾았습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 74.7%
  • TypeScript 15.2%
  • CSS 7.6%
  • Dockerfile 1.2%
  • Shell 0.6%
  • Python 0.6%
  • Batchfile 0.1%