카카오뱅크 answer 블로그 해부: Next.js App Router + GSAP으로 만든 금융 콘텐츠 플랫폼
참고 안내 — 이 글은 외부에서 관찰 가능한 정보(DOM 구조, HTTP 응답, 공개 에셋 등)를 기반으로 작성된 개인적인 기술 분석이며, 학습과 참고 목적으로 제공됩니다. 내부 소스 코드에 직접 접근한 것이 아니므로 실제 구현 구조와 다를 수 있습니다. 분석 대상 사이트의 공식 입장과는 무관합니다.
- Next.js App Router + CloudFront로 구축된 SSR 블로그 — 금융 기업의 콘텐츠 마케팅 플랫폼이 이 정도 기술 스택을 쓴다는 것 자체가 인상적입니다.
- GSAP SplitText + SmoothScroll로 텍스트 애니메이션과 스크롤 경험을 프리미엄 수준으로 끌어올렸습니다.
- 블루(#1279FF) 단일 브랜드 컬러 + Pretendard Variable 폰트 + 다크모드까지 지원하는, 디자인 시스템이 완성된 기업 블로그입니다.
“은행 블로그가 이렇게까지 잘 만들어야 해?” — blog.kakaobank.com을 처음 열면 드는 솔직한 감상입니다. KakaoBank answer는 카카오뱅크의 공식 블로그인데, 일반적인 기업 블로그의 수준을 훌쩍 넘어 하나의 독립된 콘텐츠 플랫폼처럼 설계되어 있습니다.
오늘은 이 사이트를 프론트엔드 개발자 관점에서 낱낱이 해부하며, 기술 선택의 이유와 실무에서 가져갈 수 있는 인사이트를 뽑아보겠습니다.
첫인상: KakaoBank answer를 처음 열었을 때
첫 화면에서 눈에 띄는 건 극단적인 화이트스페이스입니다. 상단 GNB는 “KakaoBank answer” 로고 + Home/Life/Brand 3개 탭 + 검색/다크모드 토글만으로 구성됩니다. 군더더기가 전혀 없습니다.
히어로 영역은 좌측에 큰 일러스트(파란 배경 + 핑크 하트 3D 일러스트), 우측에 날짜·제목·요약·태그가 배치됩니다. “좋은 사람, 언제까지 찾아봐야 할까?”라는 제목이 눈길을 잡는데, ‘연애의경제학’이라는 태그에서 알 수 있듯 금융을 일상 콘텐츠로 풀어내는 카카오뱅크의 브랜딩 전략이 첫 화면부터 드러납니다.
히어로 아래 “최신 콘텐츠” 섹션은 Swiper 슬라이더로 3개 카드를 가로 스크롤합니다. 썸네일 + 제목 + 날짜의 미니멀한 카드 구조입니다.
그리고 스크롤을 내리면 — 놀라울 정도로 하단 여백이 넓습니다. 풀페이지 캡처에서 보이듯 콘텐츠 영역 이후 푸터까지 거대한 공백이 있는데, 이건 콘텐츠가 동적으로 로드되거나 의도적인 여유 공간으로 보입니다.
기술 스택 해부
프레임워크: Next.js App Router
카카오뱅크 answer는 Next.js App Router로 구축되었습니다. 2024년 이후 출시된 기업 사이트 중에서도 App Router를 메인으로 채택한 좋은 사례입니다.
감지된 시그니처:
- /_next/static/chunks/main-app-*.js (App Router 전용)
- /_next/static/chunks/app/home/page-*.js (app 디렉토리 라우팅)
- /_next/static/chunks/app/error-*.js (error.tsx)
- /_next/static/css/*.css (5개 CSS 번들)
- data-precedence="next" (Next.js CSS 우선순위 시스템)
- webpack-*.js (Webpack 번들러)
왜 Next.js App Router인가? 블로그는 SEO가 핵심입니다. App Router의 서버 컴포넌트를 활용하면 콘텐츠를 서버에서 렌더링한 뒤 클라이언트에 전달할 수 있어, 검색 엔진이 콘텐츠를 완벽하게 크롤링합니다. 또한 app/home/page.js에서 보이듯 라우트 기반 코드 스플리팅이 자동으로 적용됩니다.
호스팅 & CDN: CloudFront
서버 응답 헤더:
- Server: envoy (서비스 메시 프록시)
- via: cloudfront.net (CloudFront CDN)
- x-amz-cf-pop: ICN57-P4 (인천 엣지 로케이션)
- HTTP/2 308 리다이렉트 (/ → /home)
AWS CloudFront를 CDN으로 사용하며, Envoy 프록시가 앞단에 있습니다. 한국 사용자에게 ICN(인천) POP에서 서빙되므로 응답 속도가 빠릅니다. HTTP/2를 지원하고, 루트 URL은 /home으로 308 영구 리다이렉트됩니다.
애니메이션 라이브러리: GSAP + SmoothScroll
감지된 애니메이션 스택:
- GSAP (GreenSock Animation Platform)
- GSAP SplitText 플러그인 (텍스트 분할 애니메이션)
- GSAP TextPlugin (텍스트 타이핑/모핑 효과)
- SmoothScroll.min.js (부드러운 스크롤 경험)
여기서 주목할 건 GSAP SplitText입니다. 이건 GSAP의 유료 플러그인(Club GreenSock 멤버십 필요)인데, 텍스트를 글자/단어/줄 단위로 분할해서 개별 애니메이션을 적용할 수 있습니다. 카카오뱅크 급의 예산과 디자인 퀄리티 요구사항이 있어야 도입할 수 있는 기술이죠.
💡 실무 팁: GSAP SplitText의 무료 대안으로는 splitting.js가 있습니다. CSS-only 텍스트 분할이 가능하고, GSAP의 기본(무료) 트윈과 조합하면 비슷한 효과를 낼 수 있습니다.
슬라이더: Swiper
Swiper 관련 클래스가 192회 등장합니다. swiper-slide만 174개인데, 히어로 슬라이더, 최신 콘텐츠, 시리즈 등 사이트 전반에서 대량으로 사용됩니다. Slick.js 대신 Swiper를 선택한 건 Next.js/React 환경과의 호환성과 터치 제스처 지원 때문으로 보입니다.
디자인 시스템 분석
컬러 팔레트
흥미로운 점은 카카오의 시그니처 옐로(#FFFC00)가 9회나 등장하면서도, 메인 브랜드 컬러는 블루(#1279FF)라는 것입니다. 카카오뱅크는 모기업 카카오와 차별화된 블루 아이덴티티를 가지고 있고, 블로그에서도 이를 일관되게 유지합니다.
일러스트에서는 파스텔 톤(#C5BDFF, #FEC7E4, #FFD3BA, #61E5FF)이 자유롭게 사용됩니다. 딱딱한 금융 이미지를 벗어나 친근하고 캐주얼한 느낌을 주기 위한 전략입니다.
타이포그래피: Pretendard Variable
감지된 폰트:
- /font/pretendardvariable.css (외부 로딩)
- PretendardVariable (가변 폰트)
Pretendard Variable을 로컬 호스팅으로 사용합니다. /font/pretendardvariable.css 경로에서 셀프 호스팅하고 있어 CDN 의존성 없이 폰트를 제공합니다. Pretendard는 한국어 환경에서 가장 인기 있는 오픈소스 폰트이고, Variable 버전은 하나의 폰트 파일로 모든 웨이트를 커버하므로 성능 면에서도 우수합니다.
레이아웃 & 반응형

데스크톱에서는 히어로가 좌(이미지) : 우(텍스트) 2컬럼 레이아웃이지만, 모바일에서는 이미지 → 텍스트 세로 스택으로 자연스럽게 전환됩니다. GNB는 모바일에서 햄버거 메뉴로 바뀌고, 검색과 다크모드 토글은 유지됩니다.
특이한 점은 모바일에서도 태그 칩(문화, 연애의경제학)이 그대로 노출된다는 것입니다. 콘텐츠 발견성을 위해 태그를 숨기지 않은 세심한 결정입니다.
UX 패턴 깊이 파기
네비게이션
GNB 구조:
├─ Home (메인 피드)
├─ Life (생활 금융 콘텐츠)
└─ Brand (브랜드 스토리)
딱 3개. 기업 블로그의 GNB가 이렇게 단순한 건 드뭅니다. 보통 기업 블로그는 카테고리를 5 ~ 10개씩 나열하는데, 카카오뱅크는 Life/Brand 두 축으로만 구분했습니다. 이 미니멀한 IA(정보 설계)는 사용자가 “어디를 눌러야 하지?”라는 고민 없이 콘텐츠에 집중하게 만듭니다.
접근성 면에서도 인상적입니다:
접근성 속성:
- role="navigation" (2개)
- role="menubar" (3개)
- role="menuitem" (8개)
- role="banner" / "main" / "contentinfo" (1개씩)
- aria-label (14개)
- aria-hidden (4개)
- aria-expanded, aria-controls (각 1개)
WAI-ARIA 역할을 교과서적으로 적용했습니다. role="menubar" → role="menuitem" 계층 구조, role="banner"(헤더), role="main"(본문), role="contentinfo"(푸터)까지 빠짐없이 설정되어 있습니다.
다크모드
GNB 우측에 달 아이콘(🌙) 토글이 있고, prefers-color-scheme이 4회, dark-mode 클래스가 1회 감지됩니다. 시스템 설정을 자동 감지하면서도 수동 전환을 지원하는 하이브리드 방식입니다.
다크모드 배경은 #292A34(짙은 네이비 블랙)로, 순수 블랙(#000)이 아닌 따뜻한 어둠을 사용합니다. 이건 카카오뱅크 앱의 다크모드와 톤을 맞춘 것으로 보입니다.
인터랙션 & 애니메이션
카카오뱅크 answer의 인터랙션 스택은 다른 기업 블로그와 확연히 다릅니다:
| 기술 | 용도 | 특징 |
|---|---|---|
| GSAP Core | 요소 트윈 애니메이션 | 프리미엄 이징 곡선 |
| GSAP SplitText | 텍스트 글자별 애니메이션 | 유료 플러그인 |
| GSAP TextPlugin | 텍스트 타이핑/모핑 | 유료 플러그인 |
| SmoothScroll | 부드러운 스크롤 물리 | 네이티브 스크롤 대체 |
| Swiper | 콘텐츠 슬라이더 | 터치 제스처 지원 |
GSAP 유료 플러그인을 2개나 사용하는 기업 블로그는 흔치 않습니다. 이건 “블로그도 브랜드 경험의 일부”라는 카카오뱅크의 철학이 반영된 결정입니다.
정보 구조
| 순서 | 섹션 | 역할 |
|---|---|---|
| 1 | 히어로 (피처드 포스트) | 최신 하이라이트 콘텐츠 |
| 2 | 최신 콘텐츠 (Swiper) | 최근 발행 포스트 탐색 |
| 3 | (여백) | 호흡, 콘텐츠 소화 시간 |
| 4 | 푸터 (Go to, Company, SNS, Contact) | 사이트맵 + 외부 링크 |
다른 블로그 대비 섹션이 적습니다. 히어로 1개 + 최신 콘텐츠 1개 + 푸터. 끝입니다. “더 보여주자”는 욕심을 버리고 핵심 콘텐츠에만 집중시키는 구조인데, 이 미니멀리즘이 오히려 프리미엄 느낌을 만듭니다.
SEO & 웹 표준
메타 태그 분석
<title>답이 되는 금융이야기 | KakaoBank answer</title>
<meta name="description" content="카카오뱅크의 브랜드 이야기와
생활 속 금융 이야기를 전하는 카카오뱅크 공식 블로그입니다."/>
- OG 태그:
og:title,og:description,og:url,og:site_name,og:locale,og:image,og:type모두 설정 - 프리로드: 시리즈 대표 이미지 3장을
<link rel="preload" as="image">로 선제 로딩 - 이미지 최적화: WebP 감지(2건), srcSet 지원(7건)
성능 최적화
성능 관련 감지:
- preload: 9건 (이미지 3 + 스크립트 4 + CSS 2)
- srcSet: 7건 (반응형 이미지)
- WebP: 2건 (차세대 이미지 포맷)
- CSS 번들: 5개 (Next.js 자동 코드 스플리팅)
- JS 청크: 11개 (라우트별 분할)
- async 스크립트: 모든 JS 청크에 async 속성
Next.js의 자동 코드 스플리팅 덕분에 JS가 11개 청크로 분할되어 있고, 모두 async로 로딩됩니다. 이미지 프리로드(3건)와 srcSet 반응형 이미지도 적용되어 있어, 기업 블로그 치고 성능 최적화 수준이 높습니다.
배울 점 & 아쉬운 점
참조할 만한 기술
1. 극단적 미니멀 GNB3개 탭으로 끝내는 용기. 복잡한 카테고리 대신 Home / Life / Brand라는 직관적 분류는 사용자 인지 부하를 최소화합니다. 블로그나 포트폴리오 사이트에 바로 적용할 수 있는 패턴입니다.
2. 히어로 영역의 매거진 레이아웃<!-- 2컬럼 매거진 히어로 패턴 -->
<section class="hero" style="display: grid; grid-template-columns: 1.2fr 1fr; gap: 48px;">
<div class="hero-visual">
<!-- 파란 배경 + 3D 일러스트 -->
</div>
<div class="hero-content">
<time>2026.03.05</time>
<h1>좋은 사람, 언제까지 찾아봐야 할까?</h1>
<p>요약 텍스트...</p>
<div class="tags">
<span>문화</span>
<span>연애의경제학</span>
</div>
</div>
</section>
이미지와 텍스트를 동등한 비중으로 배치하는 매거진 스타일은, 기존 “히어로 이미지 위에 텍스트 오버레이” 패턴보다 가독성이 좋습니다.
3. Pretendard Variable 셀프 호스팅Google Fonts나 CDN 대신 /font/ 경로에서 직접 서빙합니다. FOUT(Flash of Unstyled Text)를 최소화하고 외부 의존성을 제거하는 좋은 패턴입니다.
개선 여지
- 풀페이지 하단 여백이 과도합니다 — 콘텐츠 영역 이후 푸터까지 빈 공간이 너무 넓어 사용자가 “페이지가 덜 로드된 건가?” 혼란을 느낄 수 있습니다
- WebP 적용이 2건에 불과합니다 — 히어로 일러스트 등 주요 이미지에도 WebP/AVIF를 적용하면 로딩 속도를 더 개선할 수 있습니다
- 콘텐츠 탐색 경로가 부족합니다 — 메인 페이지에서 카테고리별 필터, 인기 포스트, 시리즈 진입점 등 발견성(discoverability)을 높이는 섹션이 추가되면 좋겠습니다
- 구조화 데이터(JSON-LD)가 감지되지 않습니다 —
Article,BlogPosting스키마를 추가하면 검색 결과에서 리치 스니펫을 얻을 수 있습니다
마무리: 개발자가 가져갈 인사이트
- 기업 블로그도 프로덕트다 — Next.js App Router + GSAP + CloudFront까지 동원한 카카오뱅크의 접근은, 블로그를 “마케팅 부서의 숙제”가 아닌 브랜드 경험의 핵심 채널로 본다는 뜻입니다.
- 미니멀리즘은 용기다 — GNB 3개, 메인 섹션 2개, 태그 기반 분류. 적게 보여줄수록 더 강한 인상을 남깁니다.
- 애니메이션에 투자하라 — GSAP SplitText 같은 프리미엄 텍스트 애니메이션은 사이트 전체의 체감 품질을 한 단계 올립니다. 예산이 없다면
splitting.js+ CSS로 시작해 보세요. - 접근성은 선택이 아니다 —
role="menubar",aria-label,aria-expanded등을 빠짐없이 적용한 것은 국내 기업 사이트 중에서 모범적입니다. - 폰트는 셀프 호스팅이 정답 — Pretendard Variable을
/font/경로에서 직접 서빙하는 패턴은 성능과 안정성 모두를 잡습니다.
자주 묻는 질문 (FAQ)
Q. 카카오뱅크 블로그는 어떤 프레임워크로 만들었나요?Next.js App Router로 구축되었습니다. /_next/static/chunks/app/ 경로의 JS 번들과 data-precedence="next" CSS 속성에서 확인할 수 있습니다.
네, splitting.js(무료)로 텍스트를 글자/단어 단위로 분할한 뒤 CSS 애니메이션이나 GSAP 기본(무료) 트윈을 적용하면 유사한 효과를 낼 수 있습니다.
Q. 다크모드는 어떻게 구현되어 있나요?prefers-color-scheme 미디어 쿼리(시스템 감지)와 dark-mode 클래스(수동 토글)를 병행하는 하이브리드 방식입니다. 다크모드 배경색은 순수 블랙이 아닌 #292A34(짙은 네이비)를 사용합니다.
Swiper는 트리쉐이킹을 지원하므로 사용하는 모듈만 번들에 포함됩니다. 다만 174개의 swiper-slide가 감지된 만큼, 가상화(virtual slides) 옵션을 활용하면 DOM 노드 수를 줄여 성능을 더 최적화할 수 있습니다.
CloudFront가 정적 에셋 캐싱과 글로벌 CDN을, Envoy가 서비스 메시 내의 트래픽 라우팅과 로드밸런싱을 담당합니다. 마이크로서비스 아키텍처에서 흔히 보이는 조합으로, 카카오뱅크 내부 인프라와 통합된 구조로 추정됩니다.
📌 함께 보면 좋은 다른 글
참고 안내 — 이 글은 외부에서 관찰 가능한 정보(DOM 구조, HTTP 응답, 공개 에셋 등)를 기반으로 작성된 개인적인 기술 분석이며, 학습과 참고 목적으로 제공됩니다. 내부 소스 코드에 직접 접근한 것이 아니므로 실제 구현 구조와 다를 수 있습니다. 분석 대상 사이트의 공식 입장과는 무관합니다.