← 포트폴리오 목록

학술 논문 아카이브 플랫폼

해외 학술 논문 저장소에서 반복적으로 발생하는 PDF 인코딩/디코딩 오류, DB 매핑 오류, PDF 뷰어 렌더링 오류를 레거시 코드 분석과 버그 픽스 관점에서 직접 재현하고 해결하는 프로젝트입니다.

프로젝트 납품 요약

아래 프로젝트 개요와 핵심 기능에서 구현 화면을 확인할 수 있습니다.

서비스 타입Web
업종교육 플랫폼
기술 스택
ReactTypeScriptPHPLaravelMySQLPDF.jsTailwind CSSRedis
주요 기능
  • 논문 업로드 PDF 인코딩/디코딩 처리
  • PDF 뷰어 렌더링 엔진
  • 논문 카테고리 DB 매핑 브라우징
  • 논문 상세정보 및 인용정보 관리

프로젝트 개요

범위: 개발, 디자인, 기획

해외 학술 논문 저장소에서 반복적으로 발생하는 PDF 인코딩/디코딩 오류, DB 매핑 오류, PDF 뷰어 렌더링 오류를 레거시 코드 분석과 버그 픽스 관점에서 직접 재현하고 해결하는 프로젝트입니다. PHP 디버깅으로 원인을 특정하고, 기존 서버 배포 환경과 호환되는 구조로 PHP + Laravel 백엔드와 React 프론트엔드를 구현합니다.

작업 범위

  • 논문 업로드 PDF 인코딩/디코딩 처리: 연구자가 PDF 논문 파일을 업로드하면 문자 인코딩과 바이너리 손상 없이 서버에 안전하게 저장하고, 다운로드 시에도 원본과 동일한 파일을 내려받을 수 있도록 처리합니다
  • PDF 뷰어 렌더링 엔진: 연구자가 논문을 다운로드하지 않고도 브라우저 내에서 즉시 PDF 전문을 열람할 수 있는 뷰어 화면을 제공합니다
  • 논문 카테고리 DB 매핑 브라우징: 연구자가 좌측 트리에서 학술 분야별 대단계·소단계 카테고리를 펼쳐가며 해당 분류에 속한 논문 목록을 탐색할 수 있습니다
  • 논문 상세정보 및 인용정보 관리: 연구자가 논문 상세 화면에서 저자·저널·발행연도·초록·인용정보를 확인하고, 관리자는 같은 화면에서 메타데이터를 직접 수정할 수 있습니다

주요 업무

  • 논문 업로드 PDF 인코딩/디코딩 처리 화면: PHP multipart 업로드 스트림을 바이너리 세이프 모드로 처리하고, 파일명·메타데이터에는 mb_convert_encoding으로 UTF-8 정규화를 적용해 인코딩 불일치로 인한 파일 손상을 방지하는 구조를 설계합니다
  • PDF 뷰어 렌더링 엔진 화면: PDF.js 기반 렌더링 라이브러리의 워커 경로와 폰트 리소스 로드 순서를 정상화하고, 렌더링 실패 시 대체 뷰(이미지 폴백)로 전환되는 구조를 구현합니다
  • 논문 카테고리 DB 매핑 브라우징 화면: 카테고리 테이블과 논문 테이블 간의 외래키 매핑 정합성을 재정의하고, 다층 트리 구조를 재귀 쿼리로 조회해 대단계 목록이 정상 노출되도록 구현합니다
  • 논문 상세정보 및 인용정보 관리 화면: 학술 논문 저장소의 메타데이터 스키마(저자·저널·DOI·초록)를 정의하고, 관리자 편집 폼의 입력 검증 및 저장 오류를 재현·수정하는 구조를 구현합니다
학술 논문 아카이브 플랫폼
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

다국어 파일명과 다양한 인코딩이 혼재된 PDF 업로드 환경에서 파일 손상 없이 저장하는 로직 설계

다층 카테고리 구조에서 대단계 목록 노출 오류를 재현하고 근본 원인을 특정하는 DB 매핑 검증

PDF.js 워커 로드 실패 시 사용자가 인지할 수 있는 폴백 경험을 제공하는 렌더링 예외 처리 설계

레거시 PHP 코드베이스의 기존 로직을 훼손하지 않으면서 메타데이터 검증을 추가하는 점진적 리팩터링

구현 내용

핵심 기능 상세

핵심 기능 1

논문 업로드 PDF 인코딩/디코딩 처리

연구자가 PDF 논문 파일을 업로드하면 문자 인코딩과 바이너리 손상 없이 서버에 안전하게 저장하고, 다운로드 시에도 원본과 동일한 파일을 내려받을 수 있도록 처리합니다.

  • PHP fopen/fwrite 바이너리 세이프 스트림 처리로 업로드 파일 무결성 보장
  • mb_convert_encoding + mb_detect_encoding으로 파일명·메타데이터 인코딩 정규화
  • MySQL BLOB 대신 파일시스템 저장 + 경로 매핑 테이블로 대용량 PDF 관리 구조 설계

업로드부터 다운로드까지 바이너리 무결성을 유지하는 파이프라인을 구현하여 인코딩 깨짐으로 인한 파일 손상 문제를 구조적으로 차단합니다.

논문 업로드 PDF 인코딩/디코딩 처리
논문 업로드 PDF 인코딩/디코딩 처리 실제 화면
핵심 기능 2

PDF 뷰어 렌더링 엔진

연구자가 논문을 다운로드하지 않고도 브라우저 내에서 즉시 PDF 전문을 열람할 수 있는 뷰어 화면을 제공합니다.

  • PDF.js worker 스크립트 경로를 CDN 절대경로로 고정해 로드 실패 방지
  • 페이지 단위 지연 렌더링(lazy render)으로 대용량 논문의 초기 로딩 속도 개선 구조 설계
  • 렌더링 오류 발생 시 다운로드 링크로 자동 대체되는 폴백 UI 구현

브라우저 네이티브 PDF 뷰어 없이도 페이지 넘김·확대/축소·검색이 가능한 인라인 뷰어를 자체 구현합니다.

PDF 뷰어 렌더링 엔진
PDF 뷰어 렌더링 엔진 실제 화면
핵심 기능 3

논문 카테고리 DB 매핑 브라우징

연구자가 좌측 트리에서 학술 분야별 대단계·소단계 카테고리를 펼쳐가며 해당 분류에 속한 논문 목록을 탐색할 수 있습니다.

  • 카테고리-논문 다대다 관계를 정규화된 중간 테이블로 재설계
  • 재귀 CTE 쿼리로 다층 카테고리 트리를 한 번의 조회로 구성
  • React 트리 컴포넌트에서 선택 카테고리를 URL 쿼리와 동기화해 딥링크 지원

카테고리-논문 매핑 오류를 DB 스키마 재설계로 근본 해결하고, 트리 탐색과 목록 필터링이 즉시 반영되는 구조를 구현합니다.

논문 카테고리 DB 매핑 브라우징
논문 카테고리 DB 매핑 브라우징 실제 화면
핵심 기능 4

논문 상세정보 및 인용정보 관리

연구자가 논문 상세 화면에서 저자·저널·발행연도·초록·인용정보를 확인하고, 관리자는 같은 화면에서 메타데이터를 직접 수정할 수 있습니다.

  • 저자·저널·DOI 등 학술 메타데이터 스키마를 별도 테이블로 정규화
  • 관리자 편집 폼에 필드 단위 유효성 검증(DOI 형식, 발행연도 범위) 적용
  • Laravel Form Request로 서버 측 검증과 클라이언트 검증 이중화 구현

메타데이터 등록·수정 시 발생하던 저장 오류를 서버 측 트랜잭션 처리와 입력 검증으로 구조적으로 해소합니다.

논문 상세정보 및 인용정보 관리
논문 상세정보 및 인용정보 관리 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

레거시 DB 구조 분석 및 카테고리 스키마 재설계 · 2026.09

기존 논문·카테고리 테이블 관계 분석, 정규화된 매핑 테이블 및 재귀 트리 쿼리 설계

STEP 2

PDF 업로드·인코딩 처리 API 개발 · 2026.09

Laravel 기반 업로드 API 구현, 바이너리 세이프 스트림 처리 및 인코딩 정규화 로직 적용

STEP 3

PDF 웹 뷰어 및 카테고리 브라우징 UI 개발 · 2026.09

React 기반 트리 사이드바·블록 콘텐츠 화면 구현, PDF.js 뷰어 통합

STEP 4

메타데이터 관리 및 통합 테스트 · 2026.09

관리자 편집 폼 검증 로직 구현, 업로드-뷰어-브라우징 전 구간 통합 테스트 수행

개발 결과

PDF 바이너리 무결성 처리 구조 설계업로드·다운로드 전 구간에서 바이너리 세이프 스트림과 인코딩 정규화를 적용해 파일 손상을 구조적으로 차단합니다
재귀 카테고리 트리 쿼리 구현CTE 기반 재귀 쿼리로 다층 카테고리 트리를 단일 조회로 구성해 DB 매핑 오류를 근본 해결합니다
PDF.js 뷰어 폴백 구조 구축워커 경로 고정과 렌더링 실패 폴백 UI로 브라우저 내 논문 열람 안정성을 확보하는 구조를 설계합니다
메타데이터 입력 검증 이중화 구현Laravel Form Request 서버 검증과 클라이언트 검증을 이중화해 논문 등록·수정 저장 오류를 방지하는 구조를 설계합니다

기술적 주안점

  • 업로드부터 다운로드까지 바이너리 무결성을 유지하는 파이프라인을 구현하여 인코딩 깨짐으로 인한 파일 손상 문제를 구조적으로 차단합니다
  • 브라우저 네이티브 PDF 뷰어 없이도 페이지 넘김·확대/축소·검색이 가능한 인라인 뷰어를 자체 구현합니다
  • 카테고리-논문 매핑 오류를 DB 스키마 재설계로 근본 해결하고, 트리 탐색과 목록 필터링이 즉시 반영되는 구조를 구현합니다

유사한 프로젝트를 기획하고 계신가요?

필요한 기능과 일정을 알려주시면 개발 범위를 함께 정리하겠습니다.

프로젝트 문의