개발자의 학습 패턴을 이해하는 스마트 북마크 관리 시스템
개발자는 학습 과정에서 수십 개의 공식 문서, 기술 블로그, 레퍼런스를 참고합니다. 하지만 브라우저 기본 북마크는 태그 분류, 통합 검색, 자동 분류 기능이 부족해 자료를 다시 찾기 어렵습니다.
- AI 자동 분석: URL 입력만으로 제목, 설명, 태그, 카테고리 자동 추출 (Google Gemini)
- 개발자 전용 구조: 기술 스택별 카테고리, 다중 태그 지원
- 빠른 검색: 제목/설명/URL/태그 통합 검색 (SQL Injection 방어)
- URL 기반 학습 자료 저장 (제목, 설명, 썸네일)
- 카테고리별 분류 (Spring, React, Database 등)
- 다중 태그 지원 (1:N 관계)
- URL 입력 시 제목/설명 자동 추출
- 적합한 태그 추천
- 카테고리 자동 분류
- 키워드 기반 검색 (제목/설명)
- 카테고리/태그 필터링
- SQL Injection 방어
- JWT 기반 인증
- Spring Security 권한 관리
- 사용자별 데이터 격리
| 기술 | 버전 | 용도 |
|---|---|---|
| Spring Boot | 4.0.0 | 백엔드 프레임워크 |
| Java | 17 | 프로그래밍 언어 |
| Spring Data JPA | - | ORM, N+1 최적화 |
| Spring Security | - | JWT 인증/인가 |
| MySQL | 8.0 | 관계형 데이터베이스 |
| Gradle | 9.2.1 | 빌드 자동화 |
| JUnit 5 + H2 | - | 단위 테스트 |
| Jsoup | 1.17.2 | HTML 파싱 |
| Swagger | 3.0 | API 문서화 |
| 기술 | 버전 | 용도 |
|---|---|---|
| React | 19.2.0 | UI 라이브러리 |
| React Router | 7.9.6 | SPA 라우팅 |
| Tailwind CSS | 3.4.1 | 유틸리티 CSS |
| Axios | 1.13.2 | HTTP 클라이언트 |
- Google Gemini API (2.5 Flash): AI 기반 URL 분석
Controller (REST API)
↓
Service (비즈니스 로직)
↓
Repository (JPA)
↓
MySQL Database
POST /api/auth/register # 회원가입
POST /api/auth/login # 로그인 (JWT 발급)GET /api/bookmarks # 전체 조회
POST /api/bookmarks # 생성
GET /api/bookmarks/{id} # 단일 조회
PUT /api/bookmarks/{id} # 수정
DELETE /api/bookmarks/{id} # 삭제
GET /api/bookmarks/search?keyword= # 검색
POST /api/bookmarks/analyze # AI 분석 (public)GET /api/categories # 전체 조회
POST /api/categories # 생성
PUT /api/categories/{id} # 수정
DELETE /api/categories/{id} # 삭제GET /api/tags # 전체 조회
POST /api/tags?name= # 생성
GET /api/tags/{id} # 단일 조회Swagger UI: http://localhost:8080/swagger-ui.html
- Java 17 이상
- Node.js 20 이상
- MySQL 8.0 이상
# 1. 리포지토리 클론
git clone https://github.com/YOUR_USERNAME/LearnHub.git
cd LearnHub/LearnHub_backend/learnhub-project
# 2. 환경 변수 설정
export SPRING_DATASOURCE_PASSWORD=your_mysql_password
export GEMINI_API_KEY=your_gemini_api_key
# 3. MySQL 데이터베이스 생성
mysql -u root -p
CREATE DATABASE learnhub;
# 4. 애플리케이션 실행
./gradlew bootRun서버: http://localhost:8080
cd LearnHub_frontend
npm install
npm start애플리케이션: http://localhost:3000
cd LearnHub_backend/learnhub-project
# 전체 테스트 실행
./gradlew test
# 테스트 커버리지 리포트 생성 (JaCoCo)
./gradlew test jacocoTestReport
open build/reports/jacoco/test/html/index.html- CategoryServiceTest, TagServiceTest 작성
- Controller 통합 테스트 (MockMvc)
- 테스트 커버리지 70% 달성
- MySQL Full-text Index 적용
- 통합 검색 (제목 + 설명 + URL + 태그)
- 검색 성능 최적화
- Redis 캐싱 적용 (자주 조회되는 북마크 목록)
- JMeter 부하 테스트 및 병목 지점 개선
- DB 인덱스 최적화
- Tag 구조 개선 (사용자별 소유권)
- 대시보드 통계 페이지 (카테고리별 북마크 수, 자주 조회한 태그 등)
- 북마크 공유 기능 (Public/Private 설정)
LearnHub/
├── LearnHub_backend/
│ └── learnhub-project/
│ ├── src/
│ │ ├── main/java/org/example/learnhubproject/
│ │ │ ├── controller/ # REST API 엔드포인트
│ │ │ ├── service/ # 비즈니스 로직
│ │ │ ├── repository/ # JPA Repository (N+1 최적화)
│ │ │ ├── entity/ # JPA 엔티티
│ │ │ ├── dto/ # DTO 객체
│ │ │ ├── security/ # JWT, Spring Security
│ │ │ ├── config/ # 설정 클래스
│ │ │ └── exception/ # 예외 처리
│ │ └── test/java/.../service/ # 서비스 계층 테스트
│ └── build.gradle
│
├── LearnHub_frontend/
│ ├── src/
│ │ ├── components/ # React 컴포넌트
│ │ ├── pages/ # 페이지 컴포넌트
│ │ └── services/ # API 호출 (Axios)
│ └── package.json
│
└── README.md
Choi Jun Hyuk
- GitHub: Jun3671
- Email: wnsgur33787@gmail.com
- Blog: https://velog.io/@jjun3671/posts
⭐ 이 프로젝트가 도움이 되었다면 Star를 눌러주세요!
