교육 도서 통합 검색·자료실 웹서비스
본 프로젝트의 요구사항(통합 검색, 도서 상세와 수록 자료 다운로드, 독서 교육 제안 카드 목록, 301 리다이렉트 호환)을 기반으로 직접 구현하는 프로젝트입니다.
프로젝트 개요
본 프로젝트의 요구사항(통합 검색, 도서 상세와 수록 자료 다운로드, 독서 교육 제안 카드 목록, 301 리다이렉트 호환)을 기반으로 직접 구현하는 프로젝트입니다. Java Spring Boot와 Thymeleaf 서버 렌더링 구조로 이용자 페이지를 설계했습니다.
작업 범위
- 통합 도서 검색: 단일 검색창에서 도서명·작가명·시리즈를 함께 조회하고 교과서·참고서·단행본을 구분해 카드로 보여주는 화면입니다
- 도서 상세·자료 다운로드: 도서 소개와 작가 정보, 연동된 수록 자료를 한 화면에 모아 보여주고 자료를 바로 내려받을 수 있는 상세 화면입니다
- 독서 교육 제안: 자료 중심 카드로 독서 교육 제안을 보여주고, 하나의 자료에 연결된 여러 도서를 카드 안에서 함께 확인하는 화면입니다
- 기존 주소 호환 안내: 인쇄물 QR 코드가 가리키는 기존 주소로 접속하면 새 통합 주소로 안내되고, 이용자가 이동 경로를 확인할 수 있는 화면입니다
주요 업무
- 통합 도서 검색 화면: GET 쿼리 파라미터 기반으로 검색 조건을 URL에 담아 결과 주소를 공유할 수 있게 하고, 도서 유형 필터와 정렬을 서버에서 처리합니다
- 도서 상세·자료 다운로드 화면: 도서와 자료의 N:M 관계를 조회해 자료 유형별로 묶어 표시하고, 다운로드 요청은 서버 컨트롤러를 거쳐 파일 응답으로 전달합니다
- 독서 교육 제안 화면: 자료와 도서의 다대다 연동 정보를 카드 단위로 조합하고, 목록 내 검색과 학년·주제 필터를 같은 화면에서 적용합니다
- 기존 주소 호환 안내 화면: 기존 도메인 경로를 신규 경로로 연결하는 매핑 테이블을 두고 301 응답으로 이동시키며, 매핑이 없는 경로는 검색 화면으로 안내합니다




프로젝트 핵심 과제
도서명·작가명·시리즈를 동시에 조회할 때 한글 형태소와 부분 일치 검색 품질을 맞추는 MySQL 인덱스 전략 설계
기존 DB 스키마에서 N:M 구조로 옮기는 과정에서 중복 작가·시리즈 데이터를 정합성 있게 병합하는 이관 규칙 설계
인쇄된 QR 주소처럼 변경할 수 없는 구 경로를 빠짐없이 신규 주소로 연결하는 매핑 누락 탐지 방식 설계
한글 파일명 자료 다운로드가 브라우저별로 동일하게 동작하
응답 헤더 인코딩 대응 필요
핵심 기능 상세
통합 도서 검색
단일 검색창에서 도서명·작가명·시리즈를 함께 조회하고 교과서·참고서·단행본을 구분해 카드로 보여주는 화면입니다.
- Spring MVC GET 핸들러와 검색 조건 DTO 바인딩으로 쿼리스트링 기반 검색 구조 설계
- MySQL FULLTEXT 인덱스와 JPA Specification을 조합한 도서·작가·시리즈 동시 조회 구현
- Thymeleaf 프래그먼트로 필터 칩과 카드 그리드를 재사용 단위로 분리
도서명·작가명·시리즈를 한 번의 쿼리 흐름으로 조회하고 유형별 배지로 구분하는 검색 구조를 구현하며, 검색 결과 URL을 그대로 공유할 수 있도록 설계합니다.


도서 상세·자료 다운로드
도서 소개와 작가 정보, 연동된 수록 자료를 한 화면에 모아 보여주고 자료를 바로 내려받을 수 있는 상세 화면입니다.
- 도서-자료 매핑 테이블 조인 조회와 자료 유형별 그룹핑 뷰 모델 구성
- Spring ResponseEntity 기반 스트리밍 다운로드와 Content-Disposition 한글 파일명 인코딩 처리
- 도서·작가·카테고리 연관 조회의 N+1 방지를 위한 fetch join 적용
한 권의 도서에 연결된 여러 자료를 유형별로 묶고 다운로드 경로를 서버에서 통제하는 상세 구조를 설계합니다.


독서 교육 제안
자료 중심 카드로 독서 교육 제안을 보여주고, 하나의 자료에 연결된 여러 도서를 카드 안에서 함께 확인하는 화면입니다.
- 자료 중심 조회 쿼리에서 연동 도서를 묶음 조회하는 DTO 프로젝션 구현
- 카드 내 연동 도서 썸네일 스트립과 더보기 접기 컴포넌트 구성
- 목록 내 검색과 필터 상태를 쿼리스트링으로 유지하는 페이지네이션 설계
하나의 자료를 여러 도서에 연결해 보여주는 카드 구조와 목록 내 검색·필터를 같은 화면 흐름으로 설계합니다.


기존 주소 호환 안내
인쇄물 QR 코드가 가리키는 기존 주소로 접속하면 새 통합 주소로 안내되고, 이용자가 이동 경로를 확인할 수 있는 화면입니다.
- URL 매핑 테이블과 Spring 인터셉터 기반 301 Location 응답 구현
- Nginx 서버 블록에서 구 도메인 요청을 애플리케이션으로 전달하는 설정 구성
- 매핑 누락 경로를 폴백 검색 페이지로 보내는 예외 처리 설계
인쇄물에 남는 기존 주소를 신규 구조로 연결하는 매핑·301 응답 흐름을 구현하고, 누락 경로는 검색으로 안내하는 폴백을 설계합니다.


프로젝트 진행 단계
기존 기능 역공학 및 MySQL 스키마 재설계 · 2026.10
기존 화면·기능을 스펙 기준으로 분석하고 도서·작가·카테고리·자료 N:M ERD와 이관 스크립트를 설계합니다
Spring Boot 검색·상세 API 개발 · 2026.10
통합 검색 GET 핸들러, 도서 상세, 자료 다운로드 컨트롤러와 Thymeleaf 템플릿을 구현합니다
독서 교육 제안 및 301 매핑 구현 · 2026.10
자료 중심 카드 화면과 기존 주소 301 리다이렉트 매핑, 검증 스크립트를 구현합니다
Ubuntu·Nginx 배포 구성 및 통합 검증 · 2026.10
Linux 환경 배포 구성과 Nginx 리버스 프록시 설정을 작성하고 URL 매핑 전수 검증을 수행합니다
개발 결과
기술적 주안점
- 도서명·작가명·시리즈를 한 번의 쿼리 흐름으로 조회하고 유형별 배지로 구분하는 검색 구조를 구현하며, 검색 결과 URL을 그대로 공유할 수 있도록 설계합니다
- 한 권의 도서에 연결된 여러 자료를 유형별로 묶고 다운로드 경로를 서버에서 통제하는 상세 구조를 설계합니다
- 하나의 자료를 여러 도서에 연결해 보여주는 카드 구조와 목록 내 검색·필터를 같은 화면 흐름으로 설계합니다