썸네일

[트러블슈팅] 405 에러

HTTP 405 Method Not Allowed: "너 여긴 어떻게 들어왔니?"

웹 개발을 하다 보면 가끔 마주치는 에러인데, 404(찾을 수 없음)나 500(서버 터짐)만큼이나 당황스러운 녀석이 바로 405 에러예요. 이름 그대로 '허가되지 않은 메소드'라는 뜻인데, 쉽게 말하면 문앞까지는 잘 찾아왔는데 "그 문으로 들어오려는 방식이 잘못됐다"고 서버가 거절하는 상황인 거죠.

1. 도대체 왜 뜨는 걸까? (주요 원인)

가장 흔한 이유는 '길(URL)'은 맞는데 '이동 수단(Method)'이 틀렸을 때예요. 예를 들면 이런 상황들이죠.

  • GET vs POST 배달 사고: 서버는 데이터를 등록하려고 POST 방식만 기다리고 있는데, 주소창에 주소를 직접 치고 엔터를 누르면(GET 방식) 서버가 "난 등록만 받는데 왜 그냥 들어와?"라며 405를 뱉어버려요.
  • HTML Form 태그의 실수: <form method="post">라고 써야 하는데 오타가 났거나, 기본값인 GET으로 날아갔을 때 서버 설정과 맞지 않으면 발생해요.
  • 보안 및 권한 설정: 특정 URL은 보안상 조회(GET)만 가능하게 막아뒀는데, 자바스크립트로 수정(PUT)이나 삭제(DELETE)를 요청하면 서버가 단호하게 거절합니다.
  • 정적 페이지에 요청할 때: .html 같은 정적 파일에다가 POST로 데이터를 던지면, 보통의 서버(Apache, Nginx 등)는 "파일 보여달라는데 왜 데이터를 보내?" 하고 당황하며 405를 띄웁니다.

2. 해결 방법: 하나씩 체크해보기

사실 405는 원인만 알면 고치는 건 시간문제예요. 아래 순서대로 확인해 보세요.

① 요청 메소드 확인하기 (Front-end)
내가 쏘는 방식이 서버가 원하는 방식과 같은지 보세요. 주소창에 주소를 직접 입력하는 건 항상 GET 방식이라는 점! 만약 데이터를 보내는 기능이라면 Ajax나 Axios 코드에서 method: 'POST'가 잘 들어가 있는지 확인해야 합니다.

② 컨트롤러 어노테이션 체크 (Back-end)
자바나 스프링을 쓰신다면 @GetMapping으로 만들었는데 화면에서 POST로 보내고 있진 않은지, 혹은 @RequestMapping에 특정 메소드를 지정해두고 다른 방식으로 부르진 않았는지 체크가 필요해요.

③ 서버 설정(Nginx/Apache) 살펴보기
간혹 서버 설정 파일에서 특정 메소드를 금지해두는 경우가 있어요. Allow Methods 설정에 내가 쓸 방식(GET, POST, PUT 등)이 포함되어 있는지 확인이 필요합니다.

3. 공부하며 느낀 짧은 생각

처음엔 에러 숫자만 봐도 머리가 아팠는데, 400번대 에러는 결국 "클라이언트(나)가 요청을 똑바로 안 했다"는 뜻이라 오히려 고맙기도 해요. 서버가 친절하게 "야, 이 방식은 안 돼!"라고 알려주는 거니까요.

결국 개발은 서버랑 끊임없이 대화하면서 맞춰가는 과정인 것 같습니다. 오늘도 에러 하나 해결하면서 레벨업했네요! 😊