Fastats는 국가통계포털(KOSIS)에서 제공하는 데이터를 더욱 빠르고 정확하게 검색할 수 있도록 돕는 검색 시스템입니다.
사용자는 자료의 목적을 말하기만 해도 챗봇이 키워드 혹은 통계 자료를 추천해 줍니다.
이를 통해 복잡했던 대한민국 통계청 자료 검색이 더욱 쉽게 개선됩니다.
- 배포 URL : https://k11a407.p.ssafy.io
- 로그인 없이 데모 확인 가능
팀원 | 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는 역색인 구조를 통해 빠른 Full-Text Search를 제공하여 사용자가 필요한 정보를 신속하게 조회할 수 있게 했습니다.
-
유연한 데이터 처리:
- Elasticsearch는 정형 데이터뿐만 아니라 비정형 데이터도 효율적으로 처리할 수 있어 다양한 형태의 데이터를 통합하여 검색하는 데 유리했습니다. 이는 통계 자료와 같이 다양한 형태로 존재하는 데이터를 다루는 데 큰 장점이 되었습니다.
-
한국어 분석기 Nori의 지원:
- 한국어 검색 최적화를 위해 Nori 분석기를 사용했습니다. 이는 한국어의 형태소 분석에 최적화되어 있어 대한민국 국민을 주요 사용자로 하는 통계청 데이터의 검색 성능을 크게 향상시켰습니다.
-
확장성:
- Elasticsearch는 분산형 아키텍처를 기반으로 하여 확장성이 뛰어납니다. 데이터 양이 증가해도 여러 노드에 데이터를 분산 저장하고, 성능 저하 없이 검색을 유지할 수 있습니다. 이 확장성은 향후 국가통계포털의 데이터가 증가할 것을 대비해 중요한 요소였습니다.
-
Kibana와의 통합 가능성:
- 시각화를 위해 Kibana와 쉽게 통합할 수 있다는 점도 Elasticsearch를 선택한 이유 중 하나입니다. 검색된 데이터를 대시보드 형태로 시각화하여 사용자에게 더 나은 경험을 제공할 수 있었습니다.
이와 같은 이유로 Elasticsearch는 Fastats 프로젝트의 빠르고 효율적인 검색 기능과 한국어 지원을 가능하게 해주는 중요한 기술로 채택되었습니다.
- Next.js: 클라이언트 측 UI 렌더링
- Spring Boot: 백엔드 비즈니스 로직 및 API 제공
- Elasticsearch: 데이터 검색 및 검색어 자동 완성 기능
- 🌟 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와 다른 방식으로 데이터를 처리하는 경험을 통해 새로운 성능 개선 포인트를 찾았습니다. |