GitHub Codespaces 개발 환경 트러블슈팅: 사파리 흰 화면과 포트의 비밀

GitHub Codespaces 개발 환경 트러블슈팅: 사파리 흰 화면과 포트의 비밀

최근 깃허브 코드스페이스(GitHub Codespaces)와 데스크톱 VS Code를 연동하여 PWA 실습 환경을 세팅하던 중, 브라우저에 화면이 나오지 않고 하얗게 멈추는 먹통 현상을 겪었습니다. 로컬 개발 환경과 클라우드 환경의 차이, 그리고 사파리(Safari) 브라우저의 보안 정책 때문에 발생한 복잡한 문제들을 하나씩 샅샅이 추적하며 해결한 과정을 기록으로 남깁니다.

💡 핵심 요약: 코드가 정상인데도 클라우드 개발 환경에서 화면이 하얗게 나온다면, 브라우저의 크로스 사이트 추적 방지 기능이 원인일 수 있습니다. 포트 전달 프로토콜을 변경하거나 ngrok 터널 주소를 활용하면 해결됩니다.

1. 얽히고설킨 3가지 포트의 정체 파악하기

깃허브 클라우드 워크스페이스를 데스크톱 VS Code로 연결하면 로컬 환경과 달리 여러 개의 포트가 자동으로 포워딩됩니다. 각 포트가 숨기고 있던 정체는 다음과 같았습니다.
  • 8443 포트 (웹 서버 원본): 실제 고담 호텔 예제 사이트가 구동되는 진짜 Express 백엔드 엔진입니다.
  • 4040 포트 (ngrok 대시보드): PWA 실습에 필수적인 암호화 도로(HTTPS)를 임시로 뚫어주는 ngrok 터널의 CCTV 감시 모니터 화면입니다. 웹사이트가 아닌 통신 로그만 보여주는 곳입니다.
  • 36627 포트 (VS Code 내부 통신용): 클라우드에 있는 깃허브 워크스페이스와 내 방에 있는 데스크톱 VS Code 앱이 서로 실시간 코드를 주고받기 위해 백그라운드에서 몰래 열어둔 원격 제어 통로입니다. 웹 브라우저로 접속하면 받아줄 데이터가 없어 'Cannot GET /' 에러를 뱉습니다.
결론적으로 개발자가 브라우저로 접속해 눈으로 확인해야 하는 진짜 주소는 8443 포트 혹은 ngrok이 열어준 외부 터널 주소(ngrok-free.dev) 단 하나뿐이었습니다.

2. 사파리(Safari)의 철벽 보안과 하얀 화면(Blank Page)의 원인

8443 포트의 보안 주소로 사파리 브라우저에 접속했을 때 화면에 아무것도 안 뜨는 치명적인 문제가 있었습니다. 네트워크 탭을 뜯어보니 HTML 문서 로드 자체가 붉은색 글씨로 차단되어 있었습니다.

원인은 사파리의 강력한 '개인정보 보호' 정책 때문이었습니다. 클라우드 환경인 Codespaces가 사용자 인증(로그인 상태)을 확인하는 프록시 과정을 사파리가 '악성 크로스 사이트 추적 행위'로 오해하고 연결을 완전히 차단해 버린 것입니다. 자바스크립트 파일조차 읽지 못해 콘솔창에 에러조차 뜨지 않는 완벽한 흰색 화면이 나타났던 것입니다.

3. 사파리 검문소를 뚫어낸 트러블슈팅 해결법

이 문제를 완벽하게 해결하고 코드가 정상 출력되도록 만든 조치 사항들입니다.
  1. 포트 전달 프로토콜 변경: VS Code PORTS 탭에서 8443 포트를 우클릭한 뒤, 프로토콜 설정을 HTTPS에서 HTTP로 전환했습니다. 사파리의 까다로운 외부 HTTPS 프록시 검문소를 우회하면서, Codespaces 내부 서버의 진짜 HTML/JS 파일들이 차단 없이 브라우저로 쏟아져 들어오기 시작했습니다. 최종 주소창은 안전하게 HTTPS가 유지되어 PWA 구동 조건도 충족했습니다.
  2. 사파리 추적 방지 기능 해제: 사파리 [설정] -> [개인정보 보호] 탭에서 '크로스 사이트 추적 방지'를 잠시 끄면 8443 순정 주소로도 깨끗하게 접속이 가능해집니다.
  3. 강력한 우회로, ngrok 주소 활용: 브라우저 보안 검사를 우회하기 가장 좋은 통로는 저자가 심어둔 ngrok 터널 주소였습니다. 사파리 보안 설정과 상관없이 원래부터 화면이 가장 완벽하게 뜨던 주소이므로, 환경이 꼬일 때는 스트레스받지 않고 그록 주소를 새 탭에 켜두는 것이 현명합니다.
  4. 개발자 도구 캐시 비활성화: PWA는 서비스 워커가 코드를 강력하게 캐싱하므로 수정 사항이 반영 안 될 때가 많습니다. 사파리 네트워크 탭에서 'Disable Caches(캐시 무시)' 체크박스를 반드시 켜두거나, 코드를 고칠 때마다 Cmd + Option + E를 눌러 캐시를 수동으로 비워주어야 실시간으로 바뀌는 화면을 관찰할 수 있습니다.

이제 외부 환경적인 에러와 사파리의 차단 벽을 완벽하게 허물었으니, 오프라인에서도 앱처럼 작동하는 PWA의 핵심 자바스크립트 로직과 서비스 워커(Service Worker) 학습에 본격적으로 집중할 준비가 끝났습니다!

댓글

인기 포스츠

"내 말이 그 말이야!" 원어민들이 매일 쓰는 맞장구 영어 표현 3가지

"인생에 참여하라" 삶을 변화시키는 영어 표현 2가지

2. Local Post Workspace Update and Technical SEO Template Deployment