볼타랩은 회원가입이 없는 사이트예요. 그런데 티어리스트에는 선수평가, 베스트스쿼드 TOP1~3 카드에는 댓글 — 사람들이 글을 남길 공간이 두 곳 있습니다. 선수평가가 먼저 있었고, 댓글은 베스트스쿼드를 만들면서 같은 구조를 가져와 확장한 거예요. 문제는 둘 다 회원가입 없이 돌아가다 보니, 스팸과 어뷰징을 어떻게 막을지였습니다.
닉네임 + 4자리 번호
가입 없이 본인 글만 수정·삭제할 수 있게 하려고, 댓글은 선수평가 기능의 패턴을 그대로 가져왔어요. 닉네임(1~12자)과 4자리 숫자를 입력받는 방식인데, 이 4자리 숫자는 원래 값 그대로 저장하지 않고 안전하게 변환해서 저장합니다. 비밀번호라기보다는 "내 글 찾는 번호" 정도의 가벼운 느낌으로 설계했어요. 4자리로 짧게 잡은 것도, 회원가입 없는 사이트에서 복잡한 비밀번호를 요구하면 오히려 진입장벽이 되니까요.
비밀번호를 잊어버리면?
PIN을 잊어버리면 복구할 방법이 없어요 — 애초에 계정이 없는 구조라 "비밀번호 찾기" 자체가 불가능합니다. 대신 문의하기 페이지를 만들어서, 작성 당시 닉네임과 스쿼드 순위(또는 선수평가라면 선수 이름), 내용 일부, 대략적인 작성 시간을 적어 보내면 운영자가 확인 후 대신 삭제해드리는 구조로 만들었어요. 댓글은 삭제만 가능하고, 선수평가는 운영자 비밀번호로 수정도 가능합니다. 운영자는 개별 PIN과 무관하게 모든 댓글·선수평가를 다룰 수 있는 별도 권한을 갖고 있어서 가능한 방식이에요.
댓글은 선수평가보다 짧고 빡빡하게
댓글 글자 수는 2~100자로 제한했어요. 기존 선수평가(300자)보다 훨씬 타이트한데, 댓글은 평가라기보다 즉흥적인 반응 공간이라 길게 쓸 이유가 없다고 판단했습니다. 그래서 짧은 시간에 연달아 쓰는 것도 선수평가보다 더 엄격하게 제한했어요. 작성 제한은 화면과 서버 양쪽에서 겹쳐 확인하고, 이 과정에서도 방문자의 실제 IP 같은 식별 정보는 그대로 저장하지 않아요.
댓글은 줄바꿈 없이 한 줄로만 받습니다. 혹시 여러 줄을 입력해도 줄바꿈은 공백으로 접혀서 한 줄로 저장돼요. 긴 댓글로 레이아웃이 깨지는 걸 막기 위한 선택입니다.
왜 1~3위 카드에만 댓글을 여는지도 의도적인 선택이에요. 전체 스쿼드에 다 열면 반응이 분산되고 노이즈만 늘어나는데, 상위 3개 조합에만 모아두면 그 자체로 "이 조합들이 특히 주목받고 있다"는 신호가 되거든요.
운영자 사칭 막기
운영자를 사칭하지 못하게 "운영자", "볼타랩"처럼 사칭에 쓰일 만한 아이디는 예약해 뒀어요. 띄어쓰기나 특수문자를 섞은 변형도 함께 걸러지게 했고, 반대로 평범한 단어까지 막히지 않도록 기준을 조절했습니다. 이 기준은 운영하면서 계속 보완해 나갈 부분이에요.
예약 아이디로는 일반 사용자가 글을 못 쓰고, 운영자 인증을 거쳐야만 [운영자] 배지를 달고 쓸 수 있어요.
무작위 대입은 기능 전체가 함께 막는다
비밀번호를 여러 번 틀리면 일정 시간 동안 입력이 제한돼요. 이 제한은 댓글 기능 혼자 쓰는 게 아니라 선수평가·댓글·운영자 인증이 함께 공유합니다. 기능별로 따로 만들지 않고 하나로 합친 건, 어차피 같은 공격이면 어디서 들어오든 같이 막아야 의미가 있다고 봤기 때문이에요.
지금은 댓글 0개
솔직히 말하면, 이 글을 쓰는 지금 기준으로 실제 댓글은 0개예요. 선수평가는 5개 달렸는데, 아직 댓글까지 쓸 만큼 트래픽이 크지는 않습니다. 그래도 스팸 방지, 모더레이션, 신원 확인까지 구조는 다 갖춰놨으니 트래픽이 늘었을 때 바로 쓰일 준비는 끝난 상태예요.