JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] IP당 요청 수 제한하기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Nginx
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 Nginx 입문/실전
slug
rate-limit-by-ip
type
post
updatedAt
Dec 6, 2025 04:47 AM

✅ IP당 요청 수 제한하기

📖
리버스 프록시(Reverse Proxy)란?
위 강의에서 리버스 프록시(Reverse Proxy) 서버의 역할은 들어오는 요청을 관리하고 보안 처리하는 것이라고 얘기했다. 대표적인 사용 예시가 요청 수를 제한하는 것이다. 요청 수를 제한함으로써 악의적인 반복 요청으로부터 서버를 보호할 수 있다. 지금부터 Nginx를 활용해 백엔드 서버(Spring Boot 서버)로 들어오는 요청 수를 제한해보자.
 
  1. Nginx 설정 파일 수정
    1. /etc/nginx/conf.d/sites/api.jscode.p-e.kr
      # limit_req_zone : 요청 수를 제한하기 위한 메모리 공간(zone)과 요청 속도(rate)를 정의 # $binary_remote_addr : 요청 수를 제한하는 기준을 클라이언트의 IP로 설정 # zone=mylimit:10m : 메모리 공간(zone)의 이름을 mylimit이라고 지정, 메모리 공간의 크기를 10MB 제한 (약 16만개의 IP 주소를 관리할 수 있음) # rate=3r/s : 1초에 최대 3개의 요청만 허용 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=3r/s; server { # limit_req_zone에서 정의한 mylimit이라는 조건을 이 server 블럭에 적용 limit_req zone=mylimit; # 요청이 제한됐을 때 429(Too Many Requests) 상태 코드를 반환 limit_req_status 429; server_name api.jscode.p-e.kr; location / { proxy_pass http://localhost:8080; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/api.jscode.p-e.kr/fullchain.pem # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/api.jscode.p-e.kr/privkey.pm; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = api.jscode.p-e.kr) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name api.jscode.p-e.kr; return 404; # managed by Certbot }
       
  1. 변경된 Nginx 설정 내용 적용하기
    1. # Nginx 설정 파일 중 문법 에러가 있는 지 체크 $ sudo nginx -t # Nginx의 설정 파일이 바뀐 경우 아래 명령어를 입력해줘야 설정 파일이 반영된다. $ sudo nginx -s reload
       
  1. 요청 수 제한이 적용됐는 지 확인해보기
    1. 요청 수 제한을 적용시킨 주소로 새로고침을 통해 여러번 요청을 보내보면, 아래와 같이 429(Too Many Requests) 응답을 받게 된다.
      notion image
 
 
👨🏻‍🏫
지금까지 백엔드 서버(Spring Boot) 앞단에 리버스 프록시 서버(Nginx)를 둠으로써, 들어오는 요청을 HTTPS로 보안 처리도 해보고 들어오는 요청의 수를 제한해보기도 했다. 이로써 외부의 요청으로부터 백엔드 서버(Spring Boot)를 보다 더 안전하게 보호할 수 있게 됐다.
author
JSCODE 박재성
category
Nginx
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 Nginx 입문/실전
slug
type
series-footer
updatedAt
Dec 6, 2025 05:04 AM
📎
이 글은 비전공자도 이해할 수 있는 Nginx 입문/실전 강의의 수업 자료 중 일부입니다.