Skip to content

계정별 한도로 대체된 nginx piki_llm zone 제거 #928

Description

@m-a-king

nginx 에는 두 개의 레이트리밋 zone 이 있다.

zone 한도 걸리는 경로
piki_general IP별 초당 20 (burst 40) /api/ 전체, /admin, /docs/
piki_llm IP별 분당 30 (burst 20) /wishlists, /wishlists/images, /tournaments/*/items/(link|images)

#339 로 계정별 아이템 등록 한도가 들어가면서 piki_llm 이 잉여가 됐다.

piki_llm 은 실질적으로 아무것도 막지 않으면서 nginx conf 의 복잡도만 차지한다. 경로 정규식 3개와 zone 정의, trailing slash 우회 방지 주석까지 딸려 있다.

배수가 180 에서 60 으로 줄었지만 결론은 그대로다. 60배 느슨한 층은 여전히 아무것도 막지 못한다.

무엇을

piki_llm zone 정의와 그것을 참조하는 location 3개를 제거한다. 대상 파일은 두 개다.

  • core/infra/nginx/api.piki.day.conf
  • core/infra/nginx/dev.api.piki.day.conf

제거 후 해당 경로들은 location /api/piki_general 을 그대로 상속한다.

piki_general 은 유지한다

두 zone 의 성격이 다르다.

zone 답하는 질문 앱이 대체 가능한가
piki_general 이 IP 가 서버를 죽이려 하나? 불가. 미인증 스캔·잘못된 경로·정적 자원까지 다 걸러야 하고, 인증 필터 이전에 끊어야 앱 스레드를 안 쓴다
piki_llm 이 IP 가 비싼 경로를 연타하나? 가능. 계정별 한도가 같은 질문에 훨씬 정확하게 답한다

주의: zone 키 변경은 reload 로 안 먹는다

limit_req_zone 의 키를 바꾸는 변경은 nginx -t 를 통과하고도 런타임에서만 emerg 로 죽는다(dev 502 사고, 2026-08-11). 이번 작업은 zone 을 제거하는 것이라 그 함정과 직접 겹치지는 않지만, piki_llm 을 참조하는 location 을 하나라도 남긴 채 zone 정의만 지우면 같은 방식으로 터진다. 정의와 참조를 함께 지웠는지 확인한다.

선행 조건

바로 지우지 않는다. 계정별 한도가 실제로 동작하는지 확인한 뒤 제거한다.

  • 계정별 429 가 실제로 발생하는지 (메트릭·로그)
  • 정상 사용자가 부당하게 막히지 않는지
  • Redis 장애 시 fail-open 이 의도대로 도는지

지금 지우면 계정별 한도에 버그가 있을 때 그 경로의 방어가 통째로 사라진다.

배포 상태: #339 는 2026-08-13 에 prod 로 promote 됐다(#904 포함). 즉 배포는 끝났고 위 확인만 남았다. 단 #927 이 계정 한도 값을 위시 10 · 토너먼트 30 에서 통합 30 으로 바꾸므로, 확인은 #927 배포 이후 기준으로 하는 편이 낫다.

참고

Metadata

Metadata

Assignees

Labels

refactor구조 개선, 외부 동작 불변

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions