PICK-A-MEME
🐱
🐶
🐻
🐱
두구두구...
🐱
야근 5일차의
그 표정
PICK-A-MEME
아티클 시리즈

피카밈 개발기

가벼운 가챠형 밈 서비스 뒤에 실무 수준 백엔드를 의도적으로 설계한 1개월 풀스택 기록. 토이 프로젝트에도 Clean Architecture·DDD를 적용한 이유, 분산 락 기반 하트 동시성 제어, Redis 캐시·Rate Limiting·OAuth2 디버깅까지 기술적 선택과 실패를 솔직하게 담았습니다.

총 13편 2026.05 – 2026.06
총 13편
01
백엔드 개발자가 풀스택을 선택한 이유

Pet-Pass 실패 후 피카밈을 시작한 이유. 백엔드 개발자가 풀스택을 선택한 배경과 3가지 원칙.

2026.05.13 · 1분 읽기
02
AI에게 계층 규칙을 가르치는 방법

Clean Architecture와 Gradle 멀티모듈로 레이어를 나눈 설계 결정. AI 협업 시 도메인 계층 규칙을 강제한 방법.

2026.05.15 · 1분 읽기
03
하트 하나 쓰는 데 락이 필요했던 이유

BASIC 하트는 Redis, SPECIAL 하트는 JPA — 저장소 분리 이유와 Redisson 분산 락 구현기.

2026.05.17 · 1분 읽기
04
로그아웃이 5번 깨졌다

HttpOnly Cookie 로그아웃이 5차에 걸쳐 깨진 이유. 크로스 오리진 Set-Cookie, host-only 쿠키, JSESSIONID까지.

2026.05.19 · 1분 읽기
05
모든 밈을 R2에 저장하지 않기로 한 이유

완성된 밈 이미지를 R2에 즉시 저장하지 않는 Lazy Upload 전략. 비용 발생 시점 자체를 설계한 이야기.

2026.05.21 · 1분 읽기
06
OAuth2 state가 사라진다

STATELESS 정책 적용 시 OAuth2 state가 사라지는 이유. CookieOAuth2AuthorizationRequestRepository 구현기.

2026.05.22 · 1분 읽기
07
느린 DDoS는 어떻게 막는가

Cloudflare 뒤에서 Redis 토큰 버킷으로 Rate Limiting을 구현한 이유. CF-Connecting-IP 기반 저속 공격 방어 전략.

2026.05.24 · 1분 읽기
08
미션 시스템이 무너진 곳은 미션이 아니었다

미션 시스템 도입 후 터진 버그 4가지. 새 기능은 기존 시스템과의 접점에서 깨진다는 교훈.

2026.05.26 · 1분 읽기
09
i18n의 갈림길 — 백엔드가 번역할 것인가, 프론트가 할 것인가

한국어 서비스에 영어를 추가할 때 번역 책임을 어디에 둘 것인가. Spring MessageSource vs 클라이언트 사전 방식 트레이드오프.

2026.05.28 · 1분 읽기
10
@Cacheable이 1줄로 보이는 이유 (와 숨은 함정)

Redis @Cacheable 어노테이션 뒤에 숨은 AOP 프록시, self-invocation 함정, 제네릭 타입 직렬화 문제.

2026.05.30 · 1분 읽기
11
코드 한 줄 없이 이미지를 50% 줄인 이야기

Cloudflare Polish(Lossy)와 R2 커스텀 도메인 전환으로 코드 변경 없이 이미지 전송 용량을 절반으로 줄인 사례.

2026.06.01 · 1분 읽기
12
9일 남은 Railway, OCI로 이관하다

Railway 무료 플랜 종료 9일 전 OCI 이관 전 과정. OOM 방어, GHCR CI/CD, Nginx+SSL까지 6단계.

2026.06.02 · 1분 읽기
13
피카밈 1개월 — 무엇을 다시 안 할 것인가

피카밈 1개월 개발 회고. TASK 60+개, BUG 7개, PR 100+개 — 반복하지 않을 것들과 AI 협업의 솔직한 평가.

2026.06.03 · 1분 읽기