서비스 붕괴를 막는 방패: Rate Limit와 악성 파일
악의적인 폭탄 요청으로부터 서버를 보호하는 Rate Limiting과, 시스템을 장악하려는 악성 파일 업로드를 차단하는 방법을 배웁니다.
서버 보안은 해킹 명령어만 막는다고 끝나는 것이 아닙니다. 어떤 악성 유저가 로그인 비밀번호를 알아내기 위해 초당 1만 번씩 무작위로 로그인을 시도하면 어떻게 될까요? 해커는 정보를 훔치지 않아도 서버를 과부하로 죽게 만들 수 있습니다. 또한, 프로필 사진을 올리라고 만든 파일 업로드 버튼에 교묘하게 악성 실행 바이러스 파일을 올려 서버를 통째로 털어버리기도 합니다. 이번 시간에는 바이브코딩 초보들이 서버를 오픈하자마자 당하기 쉬운 무차별 폭탄 요청 공격과 악성 파일 업로드 공격을 막아내는 철벽 방패를 세워봅시다.
초당 1만 번의 무차별 공격: Rate Limiting
여러분이 쇼핑몰 선착순 할인 이벤트를 열었는데, 특정 해커가 매크로 프로그램을 돌려서 '구매하기' 버튼을 초당 1만 번씩 누르고 있습니다. 서버는 이 1만 번의 요청을 모두 성실하게 처리하려다가 결국 헉헉대며 뻗어버리고(DDoS 공격), 선량한 유저들은 접속조차 하지 못합니다.
이런 무식한 폭탄 공격을 막아주는 현관문 앞의 강력한 기도(경호원)가 바로 레이트 리미트(Rate Limiting)입니다.
Rate Limiting의 작동 원리
악성 유저 (해커 IP)
1초에 1만 번 접속 시도
Rate Limit 경호원 (미들웨어)
Rate Limit 경호원 (미들웨어)
1초에 5번까지만 허용 규칙 확인
초과된 9995번은 즉시 쫓아냄 (HTTP 429 Too Many Requests)
Rate Limit 경호원 (미들웨어)
허용된 5번의 정상 요청만
내부 백엔드 서버 (통과)
비개발자인 우리가 직접 이 복잡한 속도 제한 알고리즘을 짤 필요는 전혀 없습니다. Go 언어 생태계에는 훌륭한 Rate Limit 외부 패키지들이 이미 존재합니다.
AI에게 명확히 지시하기
바이브코딩 시 AI에게 이렇게 한 줄만 명확히 지시하면 됩니다. "서버가 DDoS 공격이나 무차별 대입 공격에 죽지 않도록, 모든 핸들러(API) 앞단에 같은 IP에서 초당 10번 이상 요청하면 차단(HTTP 429 에러 반환)하는 Rate Limit 미들웨어를 추가해 줘."
서버를 장악하는 트로이 목마: 악성 파일 업로드
게시판 본문에 사진을 첨부하거나 유저 프로필 사진을 바꾸는 기능은 거의 모든 서비스의 필수입니다. AI에게 "사진 업로드 기능 만들어줘"라고 지시하면, 단순히 파일을 받아서 서버 컴퓨터 안의 폴더에 저장하는 엉성한 코드를 짜줍니다.
해커는 이때 `.jpg` 사진 파일 대신에 백엔드 서버를 조종할 수 있는 `.php`나 `.sh` 같은 해킹 스크립트 파일을 올립니다. 만약 이 파일이 서버에 고스란히 저장되고, 해커가 그 파일의 인터넷 주소를 알아내어 톡 누르는 순간 여러분의 서버는 완전히 해커의 손에 넘어가게 됩니다 (원격 코드 실행 공격).
안전한 파일 업로드를 위한 실무 수칙
권장
- 파일의 확장자(.jpg)는 해커가 1초 만에 위조할 수 있습니다. 확장자를 믿지 말고, 백엔드에서 파일 내부의 실제 지문(MIME Type, Magic Number)을 검사하여 진짜 이미지가 맞는지 확인하세요.
- 파일을 저장할 때는 해커가 올린 원본 이름(virus.php)을 싹 지워버리고, 랜덤하게 생성한 복잡한 영문 숫자 조합(예: 3a9f...b2.jpg)으로 강제로 파일명을 바꿔치기해서 저장하세요.
- 서버 컴퓨터 안에 직접 파일을 저장하지 마세요. AWS S3 같은 분리된 전용 파일 저장소를 이용하는 것이 실무의 정석입니다.
주의
- 사용자가 업로드한 파일을 절대 백엔드 서버의 코드가 실행되는 폴더 근처에 두지 마세요. 해킹 스크립트가 실행될 수 있습니다.
- 검사 없이 무조건 용량이 무제한인 파일을 받도록 놔두면 안 됩니다. 해커가 100GB짜리 쓰레기 파일을 올려서 디스크 용량을 꽉 채워 서버를 마비시킵니다. 반드시 업로드 최대 용량(예: 5MB)을 제한하세요.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.로그인 페이지를 구축했는데, 해커가 매크로 프로그램을 사용하여 비밀번호를 무작위로 대입하며 1초에 5,000번씩 로그인 요청 폭탄을 날려 서버가 멈출 위기에 처했습니다. 이렇게 비정상적으로 쏟아지는 특정 IP의 과도한 트래픽을 감지하고, 초당 5회 이상 요청 시 에러(429 Too Many Requests)를 뱉으며 튕겨내도록 방어하는 보안 기술의 이름은 무엇인가요?
3줄 요약
- 1매크로나 해킹 봇이 초당 수천 번의 비정상적인 폭탄 요청을 날려 서버를 다운시키는 것을 막으려면 API 앞단에 Rate Limiting(속도 제한) 방어벽을 세워야 합니다.
- 2파일 업로드 시 파일명과 확장자는 100% 위조될 수 있으므로, 서버단에서 파일의 진짜 정체(MIME 타입)를 깐깐하게 검사하고 최대 용량을 강제로 제한해야 합니다.
- 3업로드된 파일은 서버 컴퓨터 안에 저장하는 대신 원본 이름을 버리고 랜덤한 문자열로 변경하여 외부의 안전한 스토리지(S3 등)에 격리 보관하는 것이 실무 보안의 정석입니다.