Project Detail

최우수 수상 프로젝트

마이브러리 (MyBrary)

나만의 콘텐츠를 책으로 출판하는 크리에이터 SNS

사용자가 앨범, 웹 소설, 레시피북 등 다양한 콘텐츠를 직접 출판할 수 있는 SNS 플랫폼으로, 디지털 환경 속에서 아날로그 감성을 경험할 수 있도록 지원합니다.

기간

2024.01 ~ 2024.02

팀 구성

6명 (FE 3 / BE 3)

기술 스택

10개 기술 사용

Problem

어떤 문제를 풀었나

기존 SNS는 단순 텍스트나 이미지 중심의 콘텐츠 공유에 그쳤으며, 사용자가 창작자로서 자신만의 콘텐츠를 체계적으로 정리하고 출판하는 경험을 제공하지 못했습니다.

Contribution

내 핵심 기여

채팅 및 카테고리 관리 기능 개발 · 이메일 인증 및 실시간 알림 기능 구현

Outcome

무엇을 증명했나

최우수 성과와 함께 사용자가 직접 창작자가 되어 자신만의 콘텐츠를 책 형태로 출판

한눈에 보기

사용자가 앨범, 웹 소설, 레시피북 등 다양한 콘텐츠를 직접 출판할 수 있는 SNS 플랫폼으로, 디지털 환경 속에서 아날로그 감성을 경험할 수 있도록 지원합니다.

Target User

누구를 위한 프로젝트인가

자신만의 콘텐츠를 창작하고 공유하고 싶은 크리에이터

Core Experience

사용자에게 주는 핵심 경험

나만의 콘텐츠를 책으로 출판하는 크리에이터 SNS

Why It Matters

왜 의미 있는가

사용자가 직접 창작자가 되어 자신만의 콘텐츠를 책 형태로 출판

사용자가 직접 창작자가 되어 자신만의 콘텐츠를 책 형태로 출판앨범, 웹 소설, 레시피북, 여행 모음집 등 다양한 콘텐츠 형식 지원디지털 환경 속에서 아날로그 감성을 경험할 수 있는 UI/UX

Background

Purpose | 목적

디지털 시대의 다양한 SNS 중에서, 사용자가 직접 창작자가 되어 자신만의 콘텐츠를 책 형태로 출판할 수 있는 독특한 공간을 제공합니다. 앨범, 웹 소설, 요리 레시피북, 여행 모음집 등 자신만의 다양한 콘텐츠를 직접 만들고 공유할 수 있게 하여 디지털 환경 속에서 아날로그 감성을 경험할 수 있는 새로운 형태의 SNS를 제시합니다.

Problem | 해결하려던 문제

기존 SNS는 단순 텍스트나 이미지 중심의 콘텐츠 공유에 그쳤으며, 사용자가 창작자로서 자신만의 콘텐츠를 체계적으로 정리하고 출판하는 경험을 제공하지 못했습니다.

Target User | 타겟 사용자

자신만의 콘텐츠를 창작하고 공유하고 싶은 크리에이터

Key Features | 핵심 기능

What makes this project special

1

사용자가 직접 창작자가 되어 자신만의 콘텐츠를 책 형태로 출판

2

앨범, 웹 소설, 레시피북, 여행 모음집 등 다양한 콘텐츠 형식 지원

3

디지털 환경 속에서 아날로그 감성을 경험할 수 있는 UI/UX

4

Elasticsearch 기반 실시간 검색으로 빠른 콘텐츠 탐색

5

WebSocket 기반 실시간 채팅 및 알림 기능

Technical Specifications | 기술 사양

Engineering details and infrastructure

System Architecture | 시스템 아키텍처

시스템 아키텍처

Engineering Highlights | 기술 하이라이트

Elasticsearch 실시간 검색

MySQL LIKE 쿼리 대비 검색 속도 50% 이상 향상 (100~150ms → 40~60ms), HTML 태그 포함 텍스트도 효율적으로 검색

비동기 데이터 동기화

CompletableFuture와 @Async를 활용한 MySQL-Elasticsearch 실시간 동기화 구현

Redis 기반 이메일 인증

SMTP를 통한 이메일 전송 및 Redis TTL 기반 인증 코드 관리로 보안성 강화

WebSocket/STOMP 실시간 기능

실시간 채팅 및 알림 기능 구현, JWT 토큰 기반 인증 및 인터셉터로 보안 강화

Docker Compose 인프라 통합

MySQL, Redis, ELK Stack, Nginx 포함 인프라 통합 관리 및 배포 간소화

커스텀 어노테이션 도입

@Nickname 커스텀 어노테이션과 HandlerMethodArgumentResolver로 닉네임 검증 로직 중앙 집중화

Technology Stack | 기술 스택

Spring Boot
JPA
QueryDSL
MySQLMySQL
RedisRedis
ElasticsearchElasticsearch
WebSocket
DockerDocker
AWS EC2
NginxNginx

Challenges & Solutions | 도전 과제

Technical challenges encountered during the project and solutions

1

비동기 처리를 통한 Elasticsearch 데이터 동기화

Problem

RDB LIKE 쿼리의 성능 저하, HTML 태그 포함 텍스트 검색 비효율, MySQL-Elasticsearch 간 데이터 동기화 문제가 있었습니다.

Solution

CompletableFuture와 @Async를 활용한 비동기 프로그래밍으로 MySQL 저장 시 Elasticsearch에 동시 적재, HTML 태그 포함 텍스트도 효율적으로 검색 가능하도록 구성했습니다.

Benefits
검색 속도 50% 이상 향상 (100~150ms → 40~60ms)비동기 처리로 애플리케이션 응답성 향상실시간에 가까운 데이터 동기화 실현
2

이메일 인증 및 실시간 알림 시스템

Problem

이메일 전송의 신뢰성과 속도 보장, 인증 코드의 보안성과 유효기간 관리, 효율적인 실시간 알림 시스템 구축이 필요했습니다.

Solution

JavaMailSender를 활용한 SMTP 이메일 전송, Redis TTL 기반 인증 코드 저장 및 유효성 관리, 빠른 데이터 접근 속도를 활용한 검증 최적화를 구현했습니다.

Benefits
신뢰성 있는 이메일 인증 시스템 구축인증 코드 검증 지연 최소화보안성 강화 및 사용자 경험 개선
3

닉네임 중복 검사 및 유효성 검증 개선

Problem

닉네임 검증 로직이 컨트롤러에 분산되어 코드 중복과 가독성 저하, 일관되지 않은 검증 로직 문제가 있었습니다.

Solution

@Nickname 커스텀 어노테이션과 HandlerMethodArgumentResolver를 구현하여 닉네임 검증을 단일 진입점에서 처리, 중앙 집중화된 유효성 검증 로직을 구현했습니다.

Benefits
코드 중복 제거 및 가독성 향상일관된 검증 기준 적용유지보수 용이성 향상

Retrospective | 프로젝트 회고

마이브러리 프로젝트는 사용자가 직접 창작자가 되어 콘텐츠를 책 형태로 출판할 수 있는 SNS를 구축하는 과정에서 Elasticsearch, Redis, WebSocket 등 다양한 기술을 실무적으로 적용할 수 있었던 프로젝트입니다.

Successes | 잘한 점

검색 속도 향상

Elasticsearch 도입으로 검색 성능 최적화, API 응답 속도 100~150ms에서 40~60ms로 개선

이메일 인증 로직 도입

SMTP와 Redis를 활용한 이메일 인증 시스템 구축으로 보안성 강화

코드 가독성 향상

커스텀 어노테이션을 통해 닉네임 검증 로직을 중앙 집중화하여 코드 중복 제거

인프라 통합 및 배포 용이성

Docker Compose로 MySQL, Redis, ELK Stack, Nginx 통합 관리 및 배포 간소화

Improvements | 아쉬운 점

수동 배포의 불편함

CI/CD 파이프라인 미도입으로 배포 작업이 수동으로 이루어져 시간과 효율성 측면에서 불리

데이터 동기화 전략의 한계

CDC 대신 애플리케이션 레이어 비동기 프로그래밍으로 동기화, 데이터 일관성 측면에서 완벽하지 않은 해결책

최신 버전 도입의 어려움

Spring 최신 버전으로 인해 Elasticsearch 라이브러리 Deprecated, 공식 문서와 커뮤니티 자료 활용 필요

Future Directions | 향후 방향

1

CI/CD 파이프라인 도입으로 배포 자동화

2

CDC 기반 데이터 동기화 전략 적용

3

모니터링 및 로깅 시스템 고도화