마케터가 바이브코딩으로 데이터 대시보드 만들고, 로딩 속도 개선한 과정과 팁

저는 GPTers 커뮤니티에서 마케팅을 담당하고 있으며, 커뮤니티 유저의 활성도를 판단하고 검색 유입 성과를 분석하기 위해 Mixpanel에서 게시글 조회수를 모니터링하고, Google Search Console(GSC)을 활용해 검색 노출 및 키워드 데이터를 확인하고 있습니다.

그리고 이러한 데이터를 기반으로 콘텐츠 마케팅 전반에 대한 가이드를 제시할 수 있다고 생각했습니다.

대시보드를 통해 해결하고 싶은 문제는 아래와 같습니다.

1. 두 사이트를 왔다 갔다 — Mixpanel에서 조회수 보고, GSC에서 검색 데이터 보고... 번거로움

  1. 게시글 바로 열기 불가 — Mixpanel에서 조회수 높은 글을 발견해도, 해당 글을 바로 열어볼 수 있는 링크가 없음

  2. 트렌드 파악 어려움 — 일별/월별 추이를 한눈에 보기 힘듦

전에는 이 방식을 게시글마다 점수를 부여해볼까 하고 접근한 적이 있었는데요.
평가지표를 만드는 것이 어렵기도 하고 크게 의미가 있을까 싶은 생각에 일단 두 서드파티의 데이터 수치를 시각적으로 보기 좋게 만드는 대시보드를 먼저 구현해봐야겠다 생각했습니다.

지난 번 이렇게 1차적인 틀을 만들었었고
이번 주는 본격적으로 데이터를 밀어 넣고 세부적인 것들을 완성했는데요.

많은 정보가 포함된 대시보드



대시보드를 만들고 나니, 예상치 못한 문제가 생겼습니다.
데이터가 10만 건이 넘으니 로딩이 2~3초씩 걸리며 생각이상으로 사용성이 안 좋았습니다.

그래서 클로드 코드와 이 문제를 해결한 방법, 과정을 소개드립니다.


속도 개선 1: 병렬 쿼리 (Promise.all)

뭔가요?

원래 데이터베이스에서 정보를 가져올 때, 하나씩 순서대로 가져옵니다.

1번 쿼리 실행 (0.5초) → 기다림 →
2번 쿼리 실행 (0.5초) → 기다림 →
3번 쿼리 실행 (0.5초) → 기다림 →
4번 쿼리 실행 (0.5초) → 기다림 →
5번 쿼리 실행 (0.5초) → 완료!

총 2.5초

병렬 쿼리는 이걸 동시에 실행하는 겁니다.

1번 쿼리 ─┐
2번 쿼리 ─┼─ 동시 실행 (0.5초) → 완료!
3번 쿼리 ─┤
4번 쿼리 ─┤
5번 쿼리 ─┘

총 0.5초

어떻게 적용했나요?

Claude Code에게 이렇게 말했습니다:

"이 5개 쿼리가 서로 의존성이 없으면 동시에 실행해서 속도 올릴 수 있어?"

그랬더니 Promise.all이라는 방법으로 5개 쿼리를 동시에 실행하도록 코드를 바꿔줬습니다.

결과: 2.5초 → 0.5초 (5배 빨라짐)




속도 개선 2: 디바운스 검색

뭔가요?

검색창에 "gpters"를 입력한다고 해봅시다.

원래는 이렇게 동작합니다:

g 입력 → 서버 요청
gp 입력 → 서버 요청
gpt 입력 → 서버 요청
gpte 입력 → 서버 요청
gpter 입력 → 서버 요청
gpters 입력 → 서버 요청

총 6번 서버 요청!

디바운스는 "입력이 멈추면 그때 요청"하는 방식입니다:

g 입력 → (대기)
gp 입력 → (대기)
gpt 입력 → (대기)
gpte 입력 → (대기)
gpter 입력 → (대기)
gpters 입력 → 0.5초 대기 → 서버 요청

총 1번 서버 요청!

게시글을 제목과 작성자로 검색하는 기능을 추가했는데, 검색어가 완성되기 전에 계속 호출을 하는 구조로 초기 설계가 되었었습니다. 예를 들어 '바이브코딩' 을 검색하고자 할 때, '바' 까지 쳤을 때도 검색이 돌아가고 있고 '바이' 까지 쳤을 때도 검색이 돌아가고 해서 이 부분을 고치고자 했습니다.

"검색할 때 타이핑할 때마다 API 호출되는 것 같은데, 입력 끝나고 잠깐 있다가 호출되게 해줘"

그랬더니 500ms(0.5초) 디바운스를 적용해줬습니다.

결과: 서버 요청 6회 → 1회 (서버 부하 83% 감소)


속도 개선 3: 차트 지연 로딩

뭔가요?

대시보드에 테이블 1개 + 차트 4개가 있었습니다. 원래는 이 5개를 다 불러올 때까지 화면이 안 뜹니다.

테이블 로딩 중... (1초)
차트 1 로딩 중... (0.5초)
차트 2 로딩 중... (0.5초)
차트 3 로딩 중... (0.5초)
차트 4 로딩 중... (0.5초)
→ 3초 후 화면 표시

지연 로딩은 중요한 것(테이블)부터 먼저 보여주는 방식입니다:

테이블 로딩 (1초) → 화면 표시! (차트는 로딩 중 표시)
차트들 로딩 (백그라운드에서 진행)
→ 1초 후 테이블 표시, 차트는 나중에 채워짐

어떻게 적용했나요?

Claude Code에게 이렇게 말했습니다:

"테이블이 먼저 뜨고, 차트는 나중에 로딩되게 해줘. 차트 자리엔 로딩 중 표시해주고."

결과: 체감 로딩 시간 3초 → 1초

실제 전체 로딩 시간은 같지만, 사용자가 기다리는 느낌이 훨씬 줄었습니다.


속도 개선 4: 데이터 필터링

뭔가요?

GSC 데이터 중 검색 노출(impressions)이 10 미만인 데이터는 분석에 의미가 없었습니다. 노출이 3번, 5번인 건 우연일 수 있으니까요.

그래서 "10번 이상 노출된 데이터만 보여줘"라고 필터를 걸었습니다.

결과

  • 원본 데이터: 96,806건

  • 필터 후: 23,867건

  • 75% 데이터 감소 → 로딩 속도 비례 개선


속도 개선 5: 페이지네이션

10만 건 데이터를 한 번에 다 불러오면 당연히 느립니다. 페이지네이션은 30개씩 끊어서 보여주는 방식입니다.
원래는 한 페이지에 게시글을 100개 까지 보이게 했다가 이 수를 줄이면서 한 페이지에 로딩되는 속도를 줄였습니다.

1페이지: 1~30번 데이터 (빠름)
2페이지: 31~60번 데이터 (빠름)
...

어차피 사용자는 한 번에 30개 이상 안 봅니다.

결과: 10만 건 로딩 → 30건 로딩 (3000배 데이터 감소)

바이브코딩 팁: 개발 용어 몰라도 됩니다

이 과정에서 제가 실제로 Claude Code에게 했던 코멘트입니다.
바이브코더로써 자세한 개발 언어를 몰라도 수정 가능할 것 같은 아이디어를 잘 던지기만 해도 서비스의 사용성이 크게 올라가는 것을 확인 했습니ㅏ.

내가 한 말

Claude가 이해한 것

"로딩 느린데 빠르게 해줘"

성능 최적화 필요

"이거 동시에 실행하면 안 돼?"

Promise.all 적용

"타이핑 끝나고 검색되게 해줘"

디바운스 적용

"테이블 먼저 보여줘"

지연 로딩 적용

"30개씩 끊어서 보여줘"

페이지네이션 적용

핵심: 원하는 결과를 설명하면 됩니다. 방법은 Claude가 알아서 찾아줍니다.

"Promise.all이 뭐야?"라고 물어보면 설명도 해줍니다. 그 설명 듣고 "아 그러면 적용해줘"라고 하면 됩니다.


마무리

개발자 없이, 개발 용어 모르고도 대시보드를 만들고 성능 최적화까지 했습니다.

중요한 건 "뭘 원하는지 명확히 설명하는 것"입니다.

"빨라졌으면 좋겠어" → "로딩이 3초인데 1초 안에 뜨게 해줘" "예쁘게 해줘" → "차트가 로딩될 때 빈 화면 말고 로딩 표시 보여줘"

구체적으로 말할수록 Claude Code가 정확하게 해줍니다.

바이브코딩, 운동 많이 됩니다.

3
5개의 답글
지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만