Skip to content

syeony/Research-SCI-Paper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

518 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RSP - 빅데이터 추천 & AI 기반 문헌 탐색 서비스


01

✍️ 개요


  • 서비스명: Research SCI Paper (RSP)
  • 프로젝트 기간: 2025. 09.01 ~ 2025.10.01
  • SSAFY 13기 특화 프로젝트
  • 목표: 논문 찾기 시간 단축

영상포트폴리오 바로 보러 가기

📽️ 주요 기능 시연


1️⃣ 메인 화면

  • 메인 검색창 화면입니다. 인터랙티브한 UI 구현에 집중하였습니다.

  • 마우스 X축 이동에 따른 파도의 움직임, 마우스 호버에 반응하는 RSP 로고와 “+” 버튼을 구현하였습니다.

02

  • 검색했던 내용을 local storage에 저장하고 불러와 최근검색내역 목록을 보여줍니다.

  • 키보드 네비게이션(↑↓ 키) 적용으로 검색어 선택을 이동시킬 수 있습니다.

02

  • 검색어를 입력하면 실시간 자동완성 기능을 제공합니다.

02

  • PDF 검색도 제공합니다.

02

  • 상세검색

02

2️⃣ 검색 결과 화면

02

  • 왼쪽 사이드바에서 시간, 정렬방식, 논문 타입을 선택하여 필터링할 수 있습니다.

02

  • 한 카드에는 키워드, 제목, 저자, 저널명, 년도, 인용수, 자체제작한 유사도/신뢰도 지수, 다운로드 버튼, 디테일페이지 이동 버튼, 마인드맵 페이지 이동 버튼이 있습니다.

02

3️⃣ 마인드맵 화면

  • 왼쪽에는 중앙 화면에 뜬 논문들 리스트를 보여주고, 오른쪽에는 해당 논문의 정보를 보여줍니다.

02

  • 더블클릭하여 유사논문들을 계층별로 확장해나갈 수 있습니다.

  • cntrl z로 되돌릴 수 있고 delete로 삭제할 수 있습니다.

02

4️⃣ 디테일 화면

  • 논문의 전체요약과 인덱스별 요약을 제공합니다.

  • 오른쪽엔 논문 pdf원본이 나타나며 논문의 페이지수, 확대비율, 하이라이팅 여부, 인쇄버튼, 저장버튼이 있습니다.

02

  • 하이라이팅 버튼을 누르면 중요부분이 강조됩니다.

02

✨ 기술적 특징


1. 검색 기능 최적화 - OpenSearch 사용한 하이브리드 검색 파이프라인을 설계 및 구현

  • 키워드 기반 정확 매칭(BM25), 의미 기반 유사도 검색(임베딩 기반 코사인 유사도)과 논문의 신뢰도를 유기적으로 결합하여, 학술논문 검색의  정확도를 향상
  • 요청 매개변수 설정, 비동기 HTTP, 제목 초록부터 파싱해서 정보가 충분하다고 판단되면 추가 파싱을 안하는 최적화를 통해 pdf 검색 시간을 78페이지 논문 기준 55-> 10초로 줄임

2. 마인드맵 연관 논문 조회 속도 개선 (배치 조회 + HashMap 활용)

  • 배치 조회를 활용해 필요한 데이터만, 최소 쿼리로 가져와 성능 최적화
  • 기존: 논문 리스트에서 반복문 O(n) -> 논문 ID로 HashMap 생성하여 중복 제거 O1
  • Hbase cold start : Spring 서버 시작 시 HBase 웜업 코드를 자동 실행하여 HBase 상태를 미리 점검(헬스 체크)하고, 실제 사용자 요청 전에 HBase를 깨워둠으로써 서비스 사용 시 데이터 접근 속도 향상
  • pdf url cors : Access-Control-Allow-* 헤더 추가해 프론트에서 pdf url 접근 가능하도록 PDF 프록시 서버 역할하는 api 제작
  • PostgreSQL 배치 조회(N+1 문제 해결), Stream 처리로 메모리 효율성 향상
  • 임베딩 모델: sentence transformer(all-mpnet-base-v2) 사용
  • 가장 많이 사용되는 SOTA 임베딩 모델 중 하나/성능 속도 밸런스 제일 좋음

3. 논문 요약 API 구현

  • 요약이 있는 경우 기존 요약을 들고오고, 없는 경우 새로 생성함
  • 없는 엔티티를 요청한경우 404, 있는데 요약이 불가능한경우 422, 이외는 500을 반환
  • 요약이 가능한 경우, 전문 요약과 섹터별 요약을 진행하며, 요약 이후 저장한 요약을 반환함
  • 이때, 단순 요약만 반환하는 것이 아니라 각 요약의 출처를 청킹하여 하이라이트가 가능하게 반환함

4. GitLab CI/CD를 통한 자동 배포 구현

  • 개발용 서버와 시연/릴리스용 서버를 별도 배포
  • 개발용 서버는 docker compose를 활용하여 프론트, 백, 프록시 컨테이너를 관리함
  • 릴리스용 서버는 k3s를 활용하여 무중단 배포를 구현하였으며 프론트 3, 백 3, 로드밸런서 1의 파드를 관리함
  • 또한 AWS ECR로 이미지를 관리하며, helm 패키지 관리자를 사용하여 롤백에 용이한 시스템을 구축하였음

5. 마인드맵 기반 연관 논문 탐색 시스템 구현

  • ReactFlow + d3-force 레이아웃을 활용해 논문 간 관계를 직관적으로 시각화
  • 히스토리 관리(Undo 20단계), 노드 캐싱(paperDetailCache, searchCache) 으로 성능 최적화
  • Radial + Force Layout 혼합 배치로 확장 시 겹침 최소화, 뷰포트 자동 포커싱 제공
  • Alt+클릭으로 collapse/expand 전환, transition 애니메이션으로 자연스러운 UX 구현

6. 논문 상세 열람 페이지 성능 개선

  • PDF Blob 캐시(pdfCache) 를 활용해 50MB 용량 관리 및 재사용 → 로딩 속도 단축
  • 하이라이팅 파이프라인: 문장 인덱싱 + 임베딩 유사도(all-MiniLM-L6-v2) 비교로 키문장 자동 강조
  • 컨트롤러 단축키 (Ctrl+±/0, 페이지 점프), 사이드바 접기로 사용자 편의성 강화
  • 요약 API 연동해 섹션별 요약·출처 기반 하이라이팅을 제공

7. 검색 화면 UI/UX 개선

검색 메인 화면

  • 커서 x축 움직임에 따라 높이 약 20% 높아지는 인터랙티브한 파도 구현
  • 커서 호버할때 인터랙티브한 로고 움직임 구현
  • PDF drag and drop 구현

검색 결과리스트 화면

  • 검색 시 React Router state로 복잡한 데이터 전달하여 상태 관리
  • 최근 검색어 캐싱(local storage) 및 리스트 10개씩 페이지네이션으로 성능 최적화
  • 검색 시 자동완성, 최근검색에서 키보드 네비게이션(↑↓ 키) 적용하여 UX 향상

⚒️ 시스템 아키텍처


02

Front-end 패키지 구조


 rsp/                              # React + TypeScript + Vite 기반 프론트엔드 프로젝트
  │
  ├── 📁 public/                   # 정적 자산 (favicon, 이미지 등)
  │
  ├── 📁 src/                      # 소스 코드 메인 디렉토리
  │   ├── 📄 App.tsx              # 루트 컴포넌트 (라우팅 설정)
  │   ├── 📄 main.tsx             # 엔트리 포인트
  │   │
  │   ├── 📁 components/          # 재사용 가능한 UI 컴포넌트
  │   │   ├── 📁 common/          # 공통 컴포넌트 (ErrorBoundary, LoadingSpinner 등)
  │   │   ├── 📁 dialog/          # 모달/다이얼로그 컴포넌트
  │   │   ├── 📁 layout/          # 레이아웃 컴포넌트 (Header, PageHeader)
  │   │   ├── 📁 mindmap/         # 마인드맵 관련 컴포넌트
  │   │   │   ├── 📁 nodes/       # 마인드맵 노드 컴포넌트
  │   │   │   ├── 📁 panels/      # 마인드맵 패널 컴포넌트
  │   │   │   └── 📁 utils/       # 마인드맵 유틸리티 함수
  │   │   ├── 📁 paper/           # 논문 관련 컴포넌트
  │   │   ├── 📁 pdf/             # PDF 관련 컴포넌트
  │   │   ├── 📁 search/          # 검색 관련 컴포넌트
  │   │   └── 📁 ui/              # 기본 UI 컴포넌트
  │   │
  │   ├── 📁 pages/               # 페이지 컴포넌트
  │   │   ├── 📄 SearchPage.tsx          # 검색 메인 페이지
  │   │   ├── 📄 SearchResultsPage.tsx   # 검색 결과 페이지
  │   │   ├── 📄 MindmapPage.tsx         # 마인드맵 페이지
  │   │   └── 📄 PaperDetailPage.tsx     # 논문 상세 페이지
  │   │
  │   ├── 📁 hooks/               # 커스텀 React hooks
  │   ├── 📁 services/            # API 호출 및 외부 서비스 연동
  │   ├── 📁 types/               # TypeScript 타입 정의
  │   ├── 📁 utils/               # 유틸리티 함수
  │   ├── 📁 lib/                 # 외부 라이브러리 설정
  │   ├── 📁 assets/              # 에셋 파일 (폰트, 아이콘)
  │   ├── 📁 styles/              # 스타일 파일
  │   ├── 📁 workers/             # Web Workers
  │   └── 📁 __tests__/           # 테스트 파일
  │
  ├── 📁 dist/                    # 빌드 산출물 디렉토리
  ├── 📁 node_modules/            # npm 패키지 의존성
  │
  ├── 📄 package.json             # 프로젝트 설정 및 의존성 정의
  ├── 📄 package-lock.json        # 의존성 버전 고정
  ├── 📄 tsconfig.json            # TypeScript 설정
  ├── 📄 vite.config.ts           # Vite 빌드 도구 설정
  ├── 📄 tailwind.config.js       # Tailwind CSS 설정
  ├── 📄 eslint.config.js         # ESLint 린트 설정
  ├── 📄 jest.config.js           # Jest 테스트 설정
  ├── 📄 postcss.config.js        # PostCSS 설정
  ├── 📄 nginx.conf               # Nginx 웹서버 설정
  ├── 📄 Dockerfile               # Docker 컨테이너 설정
  └── 📄 README.md                # 프로젝트 문서

BackEnd 패키지 구조


 ● Spring Boot 프로젝트의 패키지 구조입니다:

  📁 패키지 구조 및 기능

  src/main/java/com/butakhae/rsp/

  ├── 📁 author/           - 저자 관련 기능
  │   ├── entity/         - 저자 엔티티 클래스
  │   └── repository/     - 저자 데이터 접근 계층
  │
  ├── 📁 common/          - 공통 기능 및 유틸리티
  │   ├── config/        - 공통 설정 클래스들
  │   ├── constant/      - 상수 정의
  │   └── exception/     - 예외 처리 클래스들
  │
  ├── 📁 concept/         - 개념/컨셉 관련 기능
  │   ├── entity/        - 개념 엔티티 클래스
  │   └── repository/    - 개념 데이터 접근 계층
  │
  ├── 📁 config/          - 애플리케이션 설정
  │
  ├── 📁 hbase/           - HBase 데이터베이스 연동
  │   ├── client/        - HBase 클라이언트
  │   ├── config/        - HBase 설정
  │   └── model/         - HBase 모델 클래스
  │
  ├── 📁 journal/         - 저널/학술지 관련 기능
  │   ├── entity/        - 저널 엔티티 클래스
  │   └── repository/    - 저널 데이터 접근 계층
  │
  ├── 📁 mindmap/         - 마인드맵 기능
  │   ├── controller/    - 마인드맵 REST API 컨트롤러
  │   └── service/       - 마인드맵 비즈니스 로직
  │
  └── 📁 paper/           - 논문 관련 핵심 기능
      ├── controller/    - 논문 REST API 컨트롤러
      ├── dto/          - 데이터 전송 객체
      ├── entity/       - 논문 엔티티 클래스
      │   └── id/       - 복합키 관련 클래스
      ├── exception/    - 논문 관련 예외 클래스
      ├── repository/   - 논문 데이터 접근 계층
      ├── service/      - 논문 비즈니스 로직
      └── util/         - 논문 관련 유틸리티

  기타 구조

  - src/main/resources/ - 설정 파일, 정적 리소스
  - src/test/java/ - 테스트 코드

프로젝트 산출물 및 메뉴얼


팀원 소개

박경찬 박승균 박준형 오승연 김민 김수진
마인드맵 페이지 구현, 논문 상세 페이지 구현 opensearch 검색 최적화, UI 디테일 수정 논문 데이터 수집 및 저장, 임베딩 메인페이지, 검색페이지 구현 CI/CD 구축, 논문 요약 API UI/UX 디자인, 검색/마인드맵/논문상세 API

About

빅데이터 기반 논문 탐색 웹서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors