← 프로젝트 목록

Farmeme

추천 밈 탐색 및 클립보드 저장 서비스

Mash-Up 14기 | 2024.03 — 2024.10

Project Overview

홈에서 추천하는 밈을 빠르게 확인하고, 키워드·카테고리로 탐색하는 밈 앱 서비스입니다. 사용자가 반응을 남기고 클립보드에 밈 이미지를 저장할 수 있는 기능을 제공합니다.

Architecture

Farmeme의 전체 시스템 구조입니다. 고해상도 이미지 처리와 안정적인 배포 파이프라인 구축에 중점을 두었습니다.

Farmeme Architecture Diagram

Key Technical Points

  • 이미지 압축 및 처리 파이프라인 (Sharp / HEIC)

    아이폰에서 촬영된 HEIC 포맷 이미지를 비롯한 대용량 이미지가 그대로 업로드되면서 응답 지연과 S3 저장 비용 증가가 발생했습니다. 서버 사이드에서 Sharp 라이브러리를 활용해 포맷 변환 및 품질 압축 파이프라인을 구성하여 이미지 처리 흐름을 표준화했습니다.

  • Layered Architecture (Controller - Service - Model)

    Controller - Service - Model 레이어를 명확히 분리하여 비즈니스 로직의 응집도를 높이고 유지보수성을 확보했습니다. 밈 추천 로직과 검색 로직을 Service 레이어에서 독립적으로 관리하여 각 기능의 수정이 다른 레이어에 영향을 주지 않도록 설계했습니다.

  • CI/CD 자동화 (GitHub Actions)

    Pull Request 생성 시 lint, 타입 검사, 단위 테스트를 자동 실행하고, main 브랜치 병합 시 EC2 자동 배포까지 이어지는 파이프라인을 구성했습니다. 배포 과정의 수동 개입을 없애 개발 사이클을 단축했습니다.

Technical Challenges

  • PNG 이미지 압축 — quality를 낮춰도 크기가 안 줄었던 이유

    Sharp로 PNG 이미지를 처리할 때 quality(80) 옵션을 설정했음에도 파일 크기가 전혀 줄지 않는 현상을 발견했습니다. 원인은 PNG의 무손실(lossless) 압축 방식에 있었습니다. PNG는 quality 옵션이 적용되지 않으며, 파일 크기를 줄이려면 WebP 또는 JPEG로 포맷 자체를 변환해야 합니다. (관련 글)

Tech Stack

Node.js Express TypeScript MongoDB Atlas AWS S3 Firebase (FCM) GitHub Actions