내성(內城)·외성(外城)·신성(新城) 등 3개의 성으로 구성되어 있다. 이 중 내성은 고구려시대에 축조된 것이며, 외성은 조선시대에, 신성은 17세기경에 축조된 것이다.
내성은 동서로 긴 형태로 성벽의 길이는 2,280m이다. 능선과 절벽 및 구릉을 이용하여 성벽을 쌓았는데, 성벽의 아래부분은 장대석(長大石)으로 기초를 만들었고 그 위에 3∼4단을 퇴물림형식으로 쌓아올렸다.
치(稚 : 성벽에서 돌출시켜 쌓은 성벽)는 동·남·북쪽 성벽에 각각 2개소씩 모두 6개가 설치되어 있다. 문지(門址)는 동·남·북의 3면에 있으며, 장대(將臺)는 서·남·동쪽의 성벽에 설치되어 있다. 서장대(西將臺)에는 고려시대에 만든 백상루(百祥樓)가 세워져 있다.