삼한시대 이서소국(伊西小國)이 신라와 여러 번의 전쟁을 치른 끝에 37년(유리왕 14) 신라에 정벌되었다. 유리왕은 구도성(仇刀城) 경내에 있었던 솔이성(率伊城)·경산성(驚山城)·오도산성(烏刀山城) 등의 세 개의 성을 합쳐 대성군을 설치하였다.
경덕왕 때 구도를 오악현(烏岳縣)으로, 경산을 형산현(荊山縣)으로, 솔이산을 소산현(蘇山縣)으로 각각 개칭하고 모두 밀성군(密城郡: 지금의 밀양)의 영현으로 하였다. 고려 초기 세 개 현을 다시 합쳐서 청도군(淸道郡)으로 고쳤다. 1109년(예종 4) 감무(監務)를 설치하였고, 충혜왕 때 지군사(知郡事)로 승격시켰다.
조선시대는 청도군의 남부지역을 차지하는 하남면(下南面)이었으나, 1914년 행정구역 개편 때 용산면(龍山面)과 밀양군 상동면(上東面)의 일부를 합쳐 대성면으로 고쳤다. 1940년 이후 청도면이 되고 다시 읍으로 승격되었다.
대성이라는 지명유래는 세 개의 성을 합친 ‘큰 고을’이라는 뜻에서 나왔다. 신라 때 이 지역은 경주의 서부지역을 방어하는 요충지였다. 조선시대에는 형산·오악에 옛 산성이 있었고 밀양과 청도를 연결하는 도로가 발달하였다.