Form 태그에는 왜 PUT, DELETE가 없을까?


웹 개발을 처음 배우다 보면 form 태그를 통해서 서버로 데이터를 보낸다고 배운다. 그런데 조금 더 공부하다 보면 GET, POST뿐 아니라 PUTDELETE를 사용해 어플리케이션을 만드는 경우가 많은 것을 볼 수 있다. 그런데 왜 form은 GET과 POST밖에 지원하지 않을까?

<form> 태그의 역사적 배경

HTML의 초기 버전은 간단한 웹 페이지와 상호작용에 중점을 두었다. 초기 웹은 주로 문서를 읽고 쓰는 데 초점을 맞췄고, GETPOST 메소드는 이 목적의 대부분을 충족시킬 수 있었다. <form> 태그가 설계될 당시, 웹은 주로 문서 지향적이었고, 복잡한 데이터 조작보다는 기본적인 데이터 제출에 중점을 두었다.

RESTful API가 등장하면서, PUTDELETE 같은 메소드의 중요성이 증가했다. 이러한 메소드들은 웹 애플리케이션에서 자원을 관리하는 데 필수적인 부분이 되었다. 하지만, 이러한 변화에도 불구하고, HTML 표준은 여전히 오직 GETPOST 메소드만 <form> 태그에서 지원한다.

PUTDELETE를 지원하려는 시도

2010년 W3C 버그 리포트에 HTML에 PUTDELETE를 지원하는 버그 리포트에서 해당 주제로 논의가 이뤄진 것을 볼 수 있다. 이슈에서 찬성측과 반대하는 측의 요지는 다음과 같다.

찬성 측: PUTDELETE를 HTML 폼에서 지원하는 것은 웹 애플리케이션의 기능을 확장하고, RESTful 시스템과의 상호작용을 간소화할 수 있다. 이는 개발자들이 HTTP PUT/DELETEETag 상호작용을 모방하는 복잡한 방법을 사용하지 않도록 도와줄 수 있다.

반대 측: PUTDELETE의 구현이 명확하지 않고, 이러한 메서드를 HTML 폼에서 사용하는 방법이 불분명하다. 또한, 이 기능을 추가하는 것은 추가적인 복잡성을 초래하며, 현재로서는 이러한 복잡성이 정당화되지 않는다.

결과적으로 이슈는 Won't fix로 닫혔고 이후에 W3C 이슈 트래커로 올라갔지만 현재까지 HTML 폼에서 PUTDELETE 메서드를 직접 지원하지 않는 상태이다.

참고자료

https://softwareengineering.stackexchange.com/questions/114156/why-are-there-no-put-and-delete-methods-on-html-forms