[오늘가챠] TCG 렌더링 최적화: Cloudinary 미디어 실시간 변환과 Lazy Loading
·
◈ Yermi Project/오늘가챠🃏
수백 장의 고화질 일러스트(카드)가 한 번에 뷰포트를 채우는 '오늘가챠' 앱 특성상, 미디어 렌더링 최적화는 프론트엔드 성능의 절대적인 지표입니다. 이를 우아하게 해결한 최적화 여정을 공유합니다.1. On-the-fly 실시간 트랜스포메이션의 마법보통 백엔드 개발 시 유저가 이미지를 업로드하면, 원본, 중간 사이즈, 작은 썸네일 사이즈로 각각 리사이징 툴(ImageMagick 등)을 거쳐 S3 버킷에 별도로 저장해 두는 무거운 배치를 돌립니다. 이 지루한 작업을 글로벌 미디어 CDN 서버인 Cloudinary에 100% 외주화했습니다.극한의 자동 압축 (f_auto, q_auto)Cloudinary에 원본 이미지 하나만 올려두면, 프론트엔드 태그에서 URL 파라미터만 살짝 변경하여 요청을 때립니다.원본..
[KubeCon Japan 2026] 둘째 날 키노트 (1) : 첫 걸음과 신뢰의 기반📖
·
▣ Infra & DevOps/KubeCon Japan 2026⚓
둘째 날 아침 메인홀입니다. 첫날 키노트가 AI 인프라와 스케일 이야기로 가득했다면, 둘째 날은 색깔이 완전히 달랐습니다. 사람과 커뮤니티로 시작해서 전력과 땅 이야기로 끝났습니다. 발표가 여덟 개나 이어져서 두 편으로 나눠 정리합니다. 이번 글에서는 커뮤니티와 신뢰 기반을 다룬 네 개를 묶었습니다.📕 오픈소스는 코드가 아니라 커뮤니티다Where Will Cloud Native Take You? — Jeffrey Sica (Head of Projects, CNCF) 둘째 날 문을 연 발표인데 영화 이야기로 13분을 채웠습니다. 영화 '마션' 아시죠. 대부분이 모르는 건, 이게 영화가 되기 전에, 심지어 살 수 있는 책이 되기 전에 그냥 한 사람의 웹사이트였다는 사실입니다. 작가 Andy Weir는 원래..
[Kafka] 공책, lease, epoch: 전부 로컬에서 재현하기 [Spring Boot + Kafka + PostgreSQL로 만드는 팬아웃 릴레이: lease와 epoch 펜싱]
·
▣ Infra & DevOps/Kafka🐦‍🔥
2편의 결론은 "그룹 1개 + DB 장부"였다. 3편은 그 구조를 docker compose 한 방으로 로컬에 띄우고, 송신자를 죽여 승계와 펜싱이 실제로 동작하는 것을 로그로 확인한다.무엇을 짓는가허브 스캔 접수(프로듀서) ──► Kafka scan-events ──► relay ×2 ──► WS ──► 제휴사 ×3 :8081 key=운송장, 파티션 3 (그룹 1개) :9091~9093 │ PostgreSQL :5433 ..
[KubeCon Japan 2026] 165일에서 30분으로 : JAL이 4,000명을 움직인 방법✈️
·
▣ Infra & DevOps/KubeCon Japan 2026⚓
첫날 마지막 세션인 오후 5시 10분 발표였습니다. 도입부 훅이 워낙 좋아서 피곤할 시간대였는데도 끝까지 집중해서 들었습니다. From 165 Days to 30 Minutes: Breaking Enterprise Silos with Platform EngineeringAoi Nishijima (스크럼 마스터), Moeka Okamura (개발자), Kohei Yamamoto (프로덕트 오너) — JAL Digital🌎 165일이면 무엇을 할 수 있을까JAL Digital은 일본항공 그룹의 IT 조직입니다. 운항 관리, 항공기 정비, 예약, 공항 체크인처럼 안전과 직결된 미션 크리티컬 시스템을 담당합니다. 여행 회사답게 여행 이야기로 시작했습니다. 남미 대륙 전체를 일주하는 TV 로드트립 프로그램이 정..
[KubeCon Japan 2026] Beyond the Code : CNCF TOC가 말하는 기술 리더십🤝
·
▣ Infra & DevOps/KubeCon Japan 2026⚓
첫날 오후 4시 30분, 메인홀 패널 세션입니다. 코드 이야기가 아니라 사람 이야기였는데 오히려 그래서 오래 기억에 남았습니다. Beyond the Code: Fostering Shared Vision and Technical Leadership in CNCF Communities 패널 구성이 화려했습니다. Kevin Wang(CNCF TOC, Huawei), Karena Angell(CNCF TOC 의장, Red Hat), Katie Gamanji(CNCF TOC, Apple), Mauricio "Salaboy" Salatino(Diagrid, Java Champion), 그리고 모더레이터 Faseela Kundattil(Ericsson).🔄 컨트리뷰터에서 기술 리더로 : 무엇이 바뀌었나모더레이터의 ..
[오늘가챠] 유저의 수집욕을 자극하라: 자체 업적 및 뱃지 시스템 구축
·
◈ Yermi Project/오늘가챠🃏
'오늘가챠' 앱의 핵심 재미 요소는 단순히 카드를 모으는 것을 넘어, 특정한 조건을 달성했을 때 뱃지(업적)와 보상을 획득하는 것입니다. 이를 구현하기 위해 백엔드에서 랭킹 통계와 배지 룰을 어떻게 조합했는지에 대한 이야기입니다.1. 하드코딩과 동적 생성의 조화뱃지는 'SSR 10장 수집', '특정 테마(음식) 50장 수집' 등 조건이 매우 다양합니다. 이를 일일이 DB에 데이터로 관리하면 유지보수가 어려워, 자바 코드 레벨에서 명시적으로 관리하는 BadgeDef 레코드를 도입했습니다. 실제 BadgeService.java의 뱃지 정의 코드입니다.// BadgeService.java — 뱃지 정의 레코드와 핵심 뱃지 목록public record BadgeDef(String id, String catego..
[Kafka] 커밋 오프셋에는 운송장 번호 칸이 없다 [Kafka 커밋 오프셋의 한계와 DB 장부 설계]
·
▣ Infra & DevOps/Kafka🐦‍🔥
1편에서 우리는 "제휴사별 컨슈머 그룹"이라는 자연스러운 설계를 세웠고, 그게 조건에 따라 표준일 수도 무의미할 수도 있다는 데까지 왔다. 2편은 그 조건을 가르는 판별식을 코드 레벨의 물리적 근거까지 파고든다.무거운 조항 두 개제휴사와의 협의 테이블에서 이런 조항이 확정됐다고 하자.운송장별 확인(ACK): "우리는 운송장별로 '몇 번 스캔까지 잘 반영했는지'를 알려주겠다. 장애 후 재전송은 우리가 확인한 위치 다음부터 해달라."회수(Catch-up): "못 받은 구간은 나중에 요청하겠다. 그때 보낸 것과 동일한 내용으로 달라. 일주일 지난 것도." 유실이 용납되지 않는 연동에서는 흔하고 합리적인 요구다. 실제로 GitHub 웹훅 설정 화면에는 배달 건별 성공/실패와 [Redeliver] 버튼이 있고, ..