1인 개발 단낚시 5월 첫주 근황 | Play Store 스크린샷 직접 만들고 CSP 영구 픽스한 이야기
4월 마지막 주부터 5월 첫 주까지 단낚시(DanFish) 한 프로젝트만 붙잡고 있었습니다. 사용자 피드백 4건을 한꺼번에 처리하고, 안드로이드 앱 출시 준비, Play Store 스크린샷 자체 제작, CI 자동 배포에서 매번 회귀하던 CSP 문제 영구 픽스까지. 1인 개발자에게는 한 주가 정신 없이 지나갔지만 정리해 보면 의미 있는 변화가 많아서 기록으로 남겨 봅니다.
👋 오늘의 개발 근황
안녕하세요. 단감 사이드 프로젝트들을 혼자 굴리고 있는 단감입니다. 단낚시는 제가 제일 오래 굴리고 있는 프로젝트인데, 이번 주는 정말 단낚시 위주의 한 주였습니다. 운영 중인 다른 서비스들(단지도, 단여행, 단펫, 단글, 단마레)도 같이 챙겨야 하는데 한 곳에 사용자 피드백이 몰리면 자연스럽게 그쪽에 시간이 쏠리게 됩니다.
이번 주 단낚시 관련해서 처리한 작업 키만 7건이고, 그중 절반은 사용자 직접 보고로 시작된 일이었습니다. 1인 개발 서비스에서 사용자가 직접 알려주는 피드백은 정말 귀합니다. 그 자리에서 끝까지 따라가다 보면 내가 모르고 있었던 회귀 버그가 드러나는 경우가 많습니다.
🎯 이 프로젝트는 무엇인가
단낚시는 한국 연안·내수면에서 낚시할 때 어디로 가야 할지를 결정해 주는 서비스입니다. 수온·물때·기상 데이터를 모아 자체 낚시지수를 계산하고, 갯바위·선상·내수면 포인트별로 점수와 환경 정보를 보여 줍니다. 어종별 시즌 도감, 조과 등록과 자랑 피드, 동호회 그룹 기능까지 묶여 있어요. 웹은 fish.danmap.co.kr 에서 쓸 수 있고, 안드로이드 앱은 Play Store에 올라 있습니다.
1인 개발이라 욕심을 부리면 끝이 없는데, 단낚시는 '주말 출조 1시간 전에 30초 만에 결정 도와주기'를 핵심 사용자 시나리오로 두고 화면을 단순하게 유지하려고 합니다.
🛠️ 이번 주 뭐가 바뀌었나
먼저 5월 4일에는 Play Store 스크린샷을 7장 직접 만들었습니다. 갤럭시 단말 실기기로 캡처한 1080×2400 PNG 7장을 PIL 합성으로 후처리해 1080×1920 친근체 매뉴얼 스타일로 가공했어요. 표지·낚시지수 카드·피딩타임·어종 도감·조과 등록·조과 피드·그룹 7장 시나리오로 잡았고, 한국어 헤드라인 76px와 부제 40px를 단낚시 브랜드 컬러로 풀블리드 처리했습니다.
5월 3일에는 사용자 보고 4건을 한꺼번에 처리했습니다. 웹 마커 상세 패널이 viewport를 초과해 페이지 스크롤이 발생하던 문제를 max-height 부모 기준으로 픽스했고, 단지도 nginx에서 누락된 Google OAuth 콜백 워크어라운드 블록을 재삽입해 모든 단감 서비스의 SSO 로그인이 회복됐습니다.
같은 날, 단낚시 웹에서 SSO 로그인 후 다시 비로그인 상태로 보이는 묘한 증상도 잡았습니다. 운영 nginx의 CSP 헤더 connect-src 에 api.danmap.co.kr 가 누락돼 있어서 브라우저가 /auth/me fetch 를 차단하던 게 원인이었어요. 더 큰 문제는 이게 매 CI 배포마다 회귀하던 거였는데, GitHub Actions deploy.yml 에 CSP 가 하드코딩돼 있어서 배포 때마다 운영 nginx 설정을 덮어쓰고 있었거든요. deploy.yml 의 하드코딩 CSP 한 줄을 공용 snippet include 로 교체해서 영구 픽스했습니다.
안드로이드 앱은 v3.0.7+27 출시 준비를 마쳤습니다. 지도 우측 + 버튼 한 번이면 현재 지도 중심 좌표로 사용자 포인트를 등록할 수 있어요. 모바일은 한 손 조작이 편한 게 우선이라 웹의 long-press 방식 대신 '지도 중심 좌표 등록' UX 를 골랐습니다. Play Console 업로드까지 자동화로 끝내고 검토 전송까지 마쳤습니다.
📸 화면으로 보는 변화
💭 만들면서 느낀 점
이번 주 가장 마음에 남는 건 CSP 회귀 픽스 사건입니다. 처음에는 운영 nginx 설정 파일만 직접 고쳐서 끝났다고 생각했어요. 그런데 다른 commit 을 push 한 직후 같은 증상이 다시 보고되더라고요. CI 가 매 배포마다 nginx config 를 덮어쓰고 있었던 거죠. 같은 버그를 두 번 만나니까 화가 나기보다 '아, 시스템에 한 군데 더 있구나'라는 생각이 들었습니다.
1인 개발의 외로움 중 하나가 바로 이런 부분입니다. 회사라면 코드 리뷰에서 누군가 'CI에 같은 게 또 있는 거 아니에요?' 라고 짚어줄 텐데, 혼자 하면 같은 사건을 두 번 겪고 나서야 깨닫게 됩니다. 그래서 한 번 픽스할 때 비슷한 패턴이 다른 데에도 있는지 다시 한번 검색하는 습관을 들이려고 합니다. 이번에 단낚시 외 다른 SSO 서비스들의 deploy.yml 도 비슷한 하드코딩이 있는지 백로그에 잡아 뒀습니다.
Play Store 스크린샷 직접 만든 것도 의미가 컸습니다. 사용자가 매뉴얼처럼 보이게 해 달라고 콕 집어 요청했는데, 막상 만들고 나니까 '아, 이렇게 단계별 시나리오로 정리하니까 내가 만든 앱의 핵심 가치가 더 명확해지네'라는 생각이 들었어요. 스크린샷 한 장에 무엇을 보여 줄지 선택하는 게 결국 그 화면에서 사용자가 가장 중요하게 느낄 한 가지를 결정하는 일이더라고요. 디자인 작업이 단순한 비주얼 작업이 아니라 제품 결정 작업이라는 걸 1인 개발자도 7번째 스크린샷쯤 만들고 나면 깨닫게 됩니다.
🔗 직접 써보기
단낚시는 누구나 무료로 쓸 수 있어요. 주말 출조 계획이 있으시거나 평소 낚시에 관심이 있으셨다면 한 번 둘러봐 주세요. DanFish 바로가기 에서 사용해 보실 수 있고, 안드로이드 앱은 Play Store 에서 '단낚시'로 검색하시면 됩니다.
피드백은 언제든 환영입니다. 사용자 직접 보고 한 줄이 이번 주처럼 4건의 픽스로 이어지는 일이 자주 있어요. 다음 주에는 자체 낚시지수 알고리즘 개선 작업이 있어서 또 정리해서 들고 오겠습니다. 1인 개발자의 잔잔한 한 주 이야기 읽어 주셔서 감사합니다.