발견된 주요 문제들:
광고가 페이지 이동 시 로드되지 않음
사용자가 홈, 커뮤니티, 청약 리스트 페이지 등에서 다른 페이지로 이동할 경우 광고가 정상적으로 표시되지 않음. 광고 영역은 비어 있고, 새로고침을 해야만 나타나는 문제가 빈번하게 발생함.
지도가 안정적으로 로드되지 않음
카카오 지도 컴포넌트가 간헐적으로 렌더링에 실패하며, 페이지 간 이동 시 지도 데이터가 비어 있거나 콘솔 오류가 발생함.
문제가 발생한 광고 위치
스크립트 중복 로딩
페이지마다 <Script>
또는 adsbygoogle.js
를 중복해서 불러오는 방식으로 구현되어, 동일한 스크립트가 여러 번 삽입되면서 충돌 또는 무효화됨.
전역 상태 오염 (hasPushedAd
)
광고 로딩 여부를 체크하는 전역 변수(hasPushedAd
)가 페이지 이동 후에도 유지되어, 새로 광고를 삽입하려 할 때 무시되거나 중복 호출됨.
레이스 컨디션
광고 컴포넌트가 마운트될 때 스크립트가 아직 로드되지 않아 adsbygoogle.push()
호출 시 오류 발생. 이로 인해 광고가 뜨지 않음.
초기화 방식 불일치
각 페이지에서 adsbygoogle.push()
를 호출하는 방식이 달라 예외처리나 에러 복구 로직이 부족함.
메모리 누수
광고 슬롯이 언마운트될 때 적절한 정리(cleanup)를 하지 않아 메모리가 낭비되고, 다음 페이지에서 충돌 가능성 증가.
SDK 의존성 문제
Kakao Maps SDK는 <script>
로 로드되며, 페이지 이동 시 이를 보장할 수 없음. SDK가 완전히 로드되기 전에 지도 렌더링을 시도하면 오류 발생.
로딩 상태 부재
SDK 또는 주소 좌표 데이터가 준비되지 않았음에도 Map
컴포넌트가 렌더링되어 빈 화면 또는 깨진 UI 발생.
에러 핸들링 부재
지도 렌더링 실패 시 사용자에게 아무런 피드백 없이 실패한 상태로 멈춤.
지오코딩 타이밍 문제
주소 → 좌표 변환이 Kakao SDK 로딩 전에 실행되며, API 응답이 없는 경우 빈 좌표 또는 에러 발생.
useGoogleAds.ts
– 광고 생명주기 전담 훅
ready
상태 감지)useKakaoMap.ts
– 안정적인 지도 로딩 전담 훅
GoogleAd.tsx
– 재사용 가능한 광고 컴포넌트slot
, format
등 인자화)홈 페이지
지도와 광고가 동시에 로딩되도록 개선. 지도가 준비될 때까지 로딩 표시 후 광고 삽입.
커뮤니티 게시글 리스트
게시글 목록 사이사이에 광고 컴포넌트를 삽입하며, UI 흐름을 해치지 않도록 padding 및 position 조정.
청약 리스트 페이지
카드 그리드 안에 광고를 자연스럽게 포함시킴. 2개마다 1개씩 삽입하는 등 그리드 흐름 고려.
청약 계산기 페이지
하단 고정형 배너 광고로 설계. 사용자 스크롤과 겹치지 않도록 z-index 및 fixed 위치 조정.
청약 상세 페이지
지도와 광고를 나란히 배치하고, 지도가 정상 로드되기 전까지는 광고만 노출.
스크립트 중복 제거
AdSense 스크립트를 전역에서 단 한 번만 로드하도록 설정. 초기 페이지 로딩 시 1회만 삽입됨.
생명주기 관리 강화
페이지 이동 시마다 광고 인스턴스 및 상태 정리. 메모리 누수 방지.
로딩 상태 표시
광고 및 지도 로딩 중 사용자에게 명확한 안내 제공.
에러 복구 기능
광고 또는 지도 로딩 실패 시 대체 콘텐츠 출력 또는 자동 재시도 기능 적용.
컴포넌트 통합 관리
광고 구현을 모두 GoogleAd
컴포넌트로 통일하여 유지 보수성과 확장성 향상.
신규 생성:
/src/hooks/useGoogleAds.ts
– 광고 로딩 및 생명주기 훅/src/hooks/useKakaoMap.ts
– 지도 로딩 및 에러 처리 훅/src/components/ui/google-ad.tsx
– 광고 재사용 컴포넌트업데이트된 기존 컴포넌트: