갑사라는 명칭은 이미 고려 때부터 사용되었고, 조선 건국 초에도 태조가 사병적인 성격이 강한 내갑사(內甲士)를 두고 있었다. 그러나 이때 갑사는 수하병적(手下兵的)인 군사로서 사위 임무의 성격을 띤 것이었다.
그 뒤 1401년(태종 1)부터 왕권 호위를 담당하는 하나의 특수 병종으로 제도화하여 사병적인 성격의 갑사는 국가의 녹으로 운영되는 기간병으로 정착되었다.
이리하여 조선 초기에 서울의 시위병으로서, 한편으로는 대외적 변경 방비까지 담당하는 정예병으로서 양계갑사(兩界甲士)가 나타나게 되었다. 게다가 호환(虎患)을 방지하기 위한 착호갑사(捉虎甲士)까지도 설치되었다.
갑사에 입속할 수 있는 요건은, 첫째 대부분 부유한 지배계층의 자제가 아니면 어려웠다. 특히, 기갑사(騎甲士)는 본인이 말을 준비해야 했다. 그러나 양반자제나 한량·양인들도 봉족을 받고 갑사가 될 수 있는 길은 있었으며, 실제로 시위패(侍衛牌)·영진군(營鎭軍)·선군(船軍) 등도 취재 시험을 거쳐 갑사가 된 예가 많았다.
둘째, 갑사는 의장 군사의 성격도 겸했으므로 용모가 준수하고 무용이 있는 자만이 입속할 수 있었다. 때문에 아무리 부유한 양반자제라 하더라도 시위 군사로서의 자질을 갖추고 있지 않으면 입속할 수 없었다.
갑사에 대한 시취 제도가 완비되기 시작한 것은 세종 때 이후부터이다. 이후 시취는 점차 어려워져갔는데, 신장·힘·기·예를 모두 갖추어야 하는 엄격한 규제가 뒤따랐다. 세조 때도 엄격하기는 마찬가지여서 등수에 따라 군직에 편입되었다.
그러나 ≪경국대전≫이 성립되던 성종 때에 오면 이미 갑사의 수가 더욱 많아지고 질도 떨어져 시취도 많이 완화되었다. 갑사의 수는 처음 2,000인에서 점차 증가해갔다. 양계갑사·착호갑사 등으로 종류도 다양해져 1448년(세종 30) 이후에는 7,500인으로 늘어났다.
1475년(성종 6) 이후에는 1만 4800인으로 대폭 증가되어 ≪경국대전≫에 그대로 반영되었다. 그러나 상번갑사(上番甲士)의 복무 기간이 짧아지고, 번차가 늘어나 당번갑사의 수는 항상 1,000인에서 2,000인 사이가 되었다.
따라서, 갑사수의 변화에 따라 번차를 조절하여 그들에게 지급하는 녹봉은 별로 변동을 가져오지 않았다. 이러한 번차의 조절을 국가재정 면에서 합리점을 모색하는 동시에 필요한 인원을 그대로 확보할 수 있다는 이점을 살려나간 것이다.
초기의 갑사는 무반에 포함되어 사직(司直)·부사직(副司直)·부사정(副司正) 등의 품직을 갖는 수록군사(受祿軍士)였다. 그러나 일반 무반직과 달랐던 점은 번상할 때만 녹을 받았다는 점이다.
1410년에 갑사의 직계가 처음 나타나는데, 이 때 갑사 2,000인이던 것을 1,000인을 늘려 3,000인 전원에게 직계를 부여하였다. 그러나 인원이 대폭 늘어남에 따라 고품직을 줄이고 하위직을 늘려 정부 지출의 균형을 잡게 하였다.
1436년(세종 18)에 와서는 종전까지 문반에만 있던 정·종9품의 품계가 무반에도 설치되고 여기에 해당하는 사용(司勇)·부사용의 군직이 새로 정비되었다. 이에 따라 다시 고위직에 대한 개혁을 단행, 하향 조정하였다.
임면출척(任免黜陟)을 위한 도목(都目)은 번차에 따라 근무하는 성적 일수에 따라 이루어졌다. 여기서 특히 무예가 뛰어나다고 인정을 받으면 만호나 수령으로도 진출할 수 있었다.
이와 같은 갑사는 조선 초기 의흥삼군부를 중심으로 10위에 골고루 속해 있었다. 그러나 태종 이후 갑사와 비슷한 다른 특수 병의 수가 증가되어 이들은 실직에서 체아직(遞兒職)으로 변해갔다.
군제가 문종 이후에 5위제로 개편됨에 따라 갑사는 1457년(세조 3) 근장(近仗)과 함께 의흥위에 속했다가 1469년(예종 1)에 대졸(隊卒)과 함께 의흥위, 다시 ≪경국대전≫에 와서 보충대와 함께 의흥위에 속하여 중앙군의 기간병적 위치를 확보하게 되었다.