Pickly: 북마크 관리 서비스

카테고리 기반으로 웹 링크를 정돈하는 미니멀한 정보 아카이빙 플랫폼

프로젝트 개요

Pickly는 사용자 중심의 웹사이트 북마크 관리 서비스입니다. 카테고리 단위로 즐겨찾는 사이트를 정돈하며, Spring Boot + MySQL 기반의 안정적인 백엔드와 Jenkins CI/CD를 통해 운영 효율을 확보했습니다. URL 정규화·중복 제거, 메타데이터 비동기 수집, 링크 헬스체크 등 실사용에 필요한 기능을 포함합니다.

서비스 화면

북마크 목록 화면
카테고리 관리 화면
상세/메타데이터 미리보기

주요 기능

북마크 관리 API

북마크 등록/수정/삭제, 사용자별 데이터 분리, 예외 처리. URL 정규화 후 url_hash(unique)로 중복 방지.

사용자 지정 카테고리

카테고리 생성/수정/정렬, 북마크-카테고리 매핑. 소유권 검증 및 soft-delete 지원.

메타데이터·파비콘 비동기 수집

(선택) Open Graph/Title/Favicon 수집을 비동기 워커로 처리하고 TTL 캐시에 저장해 응답 지연 최소화.

가져오기/내보내기

(선택) Netscape 북마크 HTML/CSV 임포트·익스포트 지원으로 초기 온보딩과 백업 용이.

지속 가능한 배포 파이프라인

Jenkins Webhook → 빌드/테스트 → DB 마이그레이션(Flyway) → 배포 → 헬스체크/자동 롤백.

링크 헬스체크

(선택) 스케줄러로 404/301/타임아웃 스캔, 불량 링크 표시 및 자동 재시도.

아키텍처 구성도

architecture-0

Spring Boot 계층형 구조(Controller→Service→Repository) + DTO 분리.

  • 데이터: MySQL(북마크/카테고리/메타데이터), 제약: UNIQUE(user_id, url_hash)
  • URL 파이프라인: 정규화(프로토콜/호스트/쿼리정리·utm 제거/슬래시 통일) → 해시 생성 → 저장
  • 메타데이터: (선택) @Async/스케줄러/큐로 OG/Favicon 수집, Redis TTL 캐시
  • 배포: Jenkins 파이프라인(빌드/테스트/Flyway/배포/헬스체크), systemd 자동 재기동
  • 운영: 구조적 로깅, 요청 추적 ID, 기본 메트릭(요청수/오류율/워커 실패율)

기술 스택

Backend: Java, Spring Boot, Spring Data JPA, (선택) Spring Validation/@Async Database: MySQL, (선택) Redis(메타 캐시) Migration: (선택) Flyway 또는 Liquibase CI/CD: Jenkins(Webhook 파이프라인) Infra: AWS EC2, systemd, Shell Script, Gradle Security: JWT 또는 세션 + CORS/Rate Limit/입력 검증 Utility: Jsoup/HTML Parser(OG 수집), URL Canonicalizer

담당 역할

문제 해결 및 성과

회고 / 느낀 점