← 목록으로
개발일지

퍼블리싱 작업물 공개/비공개 토글 추가 · 로그인 로딩 피드백 개선

2

퍼블리싱 작업물에 공개/비공개 토글을 추가하고, 로그인 스피너가 화면 전환 전에 먼저 꺼져버리던 문제를 고친 날입니다.


퍼블리싱 작업물 공개/비공개 토글

/admin/publishing에서 관리하는 웹·게임 퍼블리싱 작업물은 public/publishing, public/game-publishing 폴더에 있으면 무조건 목록에 노출되는 구조였습니다. 잠깐 숨기고 싶어도 폴더 자체를 지우거나 옮겨야 했고, 되돌리려면 다시 배포가 필요했습니다.

PublishingProject, GamePublishingProject 테이블에 published 컬럼(기본값 true)을 추가하고, 어드민 카드마다 공개/비공개 토글 스위치를 달았습니다. 글쓰기 페이지에 이미 있던 발행 토글과 같은 pill 스타일을 그대로 가져다 썼습니다.

토글을 끄면 해당 작업물은 /design/web/publishing, /design/game-ad/game-publishing 목록에서 바로 빠집니다. 직접 URL로 접근하는 건 막지 않았습니다 — 필요한 건 "목록에서 감추기"였지 "접근 차단"은 아니었기 때문입니다.

스키마 변경을 실제 Turso DB에 반영할 때 한 가지 걸린 게 있었습니다. prisma db push가 참조하는 DATABASE_URL이 예전 프로젝트 경로(E:/...)를 가리키는 죽은 값이라 실행이 안 됐습니다. Turso는 @libsql/client로 직접 연결해서 ALTER TABLE ... ADD COLUMN published BOOLEAN DEFAULT true를 실행하는 걸로 대신했습니다.


로그인 스피너가 너무 일찍 꺼지는 문제

지난번 로그인 페이지에 로딩 스피너를 추가했는데, 로그인이 여전히 멈춘 것처럼 보인다는 얘기가 나왔습니다. 원인을 보니 스피너 자체가 문제가 아니라 꺼지는 타이밍이 문제였습니다.

signIn()이 응답을 받는 순간 기존 코드는 finally에서 무조건 setLoading(false)를 실행해 스피너를 껐습니다. 하지만 그 뒤 router.push('/admin')으로 실제 화면이 뜨기까지는 세션 확인, 게시글 목록 조회 같은 별도 네트워크 왕복이 더 필요합니다. 그 사이 구간엔 아무 피드백이 없어서, 스피너는 꺼졌는데 화면은 그대로인 시간이 생겼습니다.

로그인 성공 시엔 setLoading(false)를 호출하지 않도록 바꿨습니다. 로딩 상태는 에러가 났을 때만 해제하고, 성공 시엔 /admin으로 실제 전환되어 로그인 컴포넌트 자체가 사라질 때까지 스피너가 계속 돌도록 했습니다.

지연의 근본 원인(Netlify 서버리스 콜드 스타트로 추정)은 그대로지만, 적어도 그동안 시스템이 응답 중이라는 건 계속 보여줍니다.