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



주요 기능
북마크 관리 API
북마크 등록/수정/삭제, 사용자별 데이터 분리, 예외 처리. URL 정규화 후 url_hash(unique)로 중복 방지.
사용자 지정 카테고리
카테고리 생성/수정/정렬, 북마크-카테고리 매핑. 소유권 검증 및 soft-delete 지원.
메타데이터·파비콘 비동기 수집
(선택) Open Graph/Title/Favicon 수집을 비동기 워커로 처리하고 TTL 캐시에 저장해 응답 지연 최소화.
가져오기/내보내기
(선택) Netscape 북마크 HTML/CSV 임포트·익스포트 지원으로 초기 온보딩과 백업 용이.
지속 가능한 배포 파이프라인
Jenkins Webhook → 빌드/테스트 → DB 마이그레이션(Flyway) → 배포 → 헬스체크/자동 롤백.
링크 헬스체크
(선택) 스케줄러로 404/301/타임아웃 스캔, 불량 링크 표시 및 자동 재시도.
아키텍처 구성도

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
담당 역할
도메인 & API 설계
Entity-DTO 분리, (user_id, url_hash) 제약, URL 정규화·해시 설계. REST API 및 단위 테스트 작성.
메타데이터 파이프라인
(선택) OG/Favicon 비동기 수집기 구현, TTL 캐시·재시도·타임아웃·리다이렉트 제한 적용.
CI/CD 구축 및 운영
Jenkins 파이프라인 구성(빌드/테스트/마이그레이션/배포/헬스체크), systemd 유닛/자동 복구 스크립트 작성.