Repository navigation
[NM-617] feat: 제목 없이 남기는 의견 게시판 신설 (/feedback/) - #11
Merged
Merged
Conversation
사용자 의견을 메일보다 가볍게 받을 곳을 만든다. 글은 댓글처럼 닉네임 (비우면 익명)과 내용만 받고 제목은 두지 않는다. 남긴 글과 운영팀 답변은 같은 페이지에 공개된다. 스타일은 지원 페이지(landing.css)를 그대로 따랐다. 서버는 두지 않는다. 운영 계정 드라이브의 스프레드시트에 바인딩한 Apps Script 웹 앱이 읽기·쓰기를 맡고(scripts/feedback/Code.gs), 운영자는 시트의 답변·공개 칸으로 답변과 숨김을 관리한다. scripts/는 배포 산출물에 들어가지 않으므로 서버 코드는 공개 사이트에 올라가지 않는다. 보안상 판단: - @OnlyCurrentDoc으로 권한을 이 시트 하나로 줄였다. 웹 앱 액세스가 「모든 사용자」라 호출은 누구나 할 수 있지만, 할 수 있는 일은 공개 글 읽기와 글쓰기뿐이다. - 글은 textContent로만 그려 XSS를 막고, =·+·-·@로 시작하는 입력은 시트 수식으로 실행되지 않게 저장한다. - 작성 제한은 브라우저별로 건다(30초 간격, 시간당 5개). Apps Script는 IP를 알 수 없어 페이지가 저장한 무작위 ID로 구분한다. 사이트 전체 제한은 한 사람의 도배가 모두의 글쓰기를 막으므로 두지 않았다. ID를 바꾸는 봇은 막지 못한다 — 필요하면 Turnstile을 붙인다. - 「널스메이트」「운영자」 등이 들어간 닉네임은 운영팀 사칭이 되므로 페이지와 서버 양쪽에서 거절한다. - 전송은 keepalive로 보내 보내는 중에 창을 닫아도 요청이 끝까지 간다. 랜딩 푸터·FAQ, 지원 페이지 상단·푸터에서 게시판으로 연결하고, 사이트맵과 build-pages.py 배포 대상에 feedback을 추가했다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
390px 폭에서 확인한 두 가지를 고친다. - 헤더의 「홈으로」가 보이지 않았다. landing.css가 모바일에서 `.header-inner nav>a:not(.button)`을 숨기는데, 랜딩의 섹션 메뉴를 접는 규칙이 게시판 헤더 링크에도 걸렸다. 지원 페이지처럼 nav 밖에 두어 로고 말고도 돌아갈 길을 남긴다. - h1이 한 줄로 넘쳐 「들려주세요」가 잘렸다. landing.css의 h1은 nowrap이라 지원 페이지와 같이 white-space:normal로 푼다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
사용자 의견을 메일보다 가볍게 받을 의견 게시판을
/feedback/에 만든다.무엇이 바뀌나
/feedback/신설: 댓글처럼 닉네임(비우면 익명)과 내용만 받고 제목은 없다. 남긴 글과 운영팀 답변을 같은 페이지에 공개한다. 스타일은 지원 페이지를 따랐다.sitemap.xml과scripts/build-pages.py에feedback을 추가했다.서버 구조
별도 서버 없이 운영 계정 드라이브의 스프레드시트 + Apps Script 웹 앱이 읽기·쓰기를 맡는다.
scripts/feedback/Code.gsscripts/feedback/README.md운영은 시트의
글탭에서 한다. 답변 칸에 쓰면 「널스메이트 팀」 답변으로 보이고, 공개를N으로 바꾸면 숨겨진다.보안상 판단
@OnlyCurrentDoc으로 이 시트 하나만 접근한다. 웹 앱 액세스는 「모든 사용자」지만, 할 수 있는 일은 공개 글 읽기와 글쓰기뿐이다.textContent로만 그린다.=·+·-·@로 시작하는 입력은 수식으로 실행되지 않게 저장한다.keepalive로 보내 전송 중에 창을 닫아도 요청이 끝까지 간다.확인한 것
배포된 웹 앱에 대해 확인했다.
<script>가 든 글이 실행되지 않고 글자로 보임 (목업 데이터)keepalive요청이 리다이렉트를 거쳐 응답까지 받음검토 포인트
Code.gs의REQUIRE_APPROVAL을true로 하고 재배포한다.