오랫동안 왜 이 차이가 나는지 궁금했다. 이 기회에 한번 회사 동료분께 물어보았다.

일단 param[]의 형태는 예전에 많이 사용되던 형태이다. 이는 headercontent-typeapplication/x-www-form-urlencoded데이터로 설정이 되어 있을 때 이렇게 날라가게 된다. 이런 방식은 주로 JSP처럼 서버쪽에서 view를 처리하던 시절에 주로 사용하던 방식이라고 한다.

body를 보면 Form Data가 위와같이 날라가는 것을 확인할 수 있고, 이 값은 파싱되기 이전에 다음과 같이 쿼리스트링의 형태를 하고 있음을 알 수 있다.

즉, url에 쿼리스트링을 붙여 보내는 일반적인 방식과는 달리, 과거에는 바디에 이런 식으로 붙여서 보내는 것이다. 그리고 서버는 찰떡같이 이 데이터를 받아 list의 형태로 파싱하여 받는 것이고.

반면 []의 형태로 온전히 보내주는 것은 content-typeapplication/json; charset=utf-8으로 되어있는 최근추세에 맞는 방식이라고 한다. 요즘 나오는 대부분의 ajax호출 라이브러리는 이 방식을 채택하고 있다.

body를 살펴보면 위와 같이 파라미터가 전달된다. 전혀 위화감이 없다. 또한 content-typeapplication/json; charset=utf-8인 만큼 source를 살펴보면 json의 형태 그대로 전달되는 것을 알 수 있다.