고구려-당 전쟁
고구려-당 전쟁은 645년에서 668년까지 고구려와 당나라 사이에서 벌어졌던 전쟁이다.
수 양제(煬帝)는 고구려-수 전쟁에서 크게 패하였으나, 정신을 차리지 못하고 양저우의 별궁에서 사치스러운 행각을 벌이고 있었다.
이때 수나라 내부에서는 고구려 원정의 실패와 엄청난 대토목 공사로 이미 국력이 피폐해져 각지에서 반란군이 일어났으며, 지방의 호족들도 독립적인 정부를 세웠다. 또한 귀족 계층인 관롱 집단(關隴集團)마저 등을 돌려 수나라는 정치적인 기반마저 잃어버렸다.
617년, 태원 유수 이연 역시 반란에 가담하였다. 이연은 수의 수도인 장안(長安)으로 들어가, 황태손인 양유를 황제로 잇게 했다. 또한, 자신은 수의 대승상이 되었다. 때마침 수 양제가 강도에서 그의 시위장이자 우문 술(宇文述)의 아들인 우문 화급(宇文化及)·우문 지급(宇文智及) 형제에게 암살되자, 이연은 국호를 당(唐)으로 하고 스스로 제위에 올랐으며, 공이 컸던 둘째 아들 이세민을 진왕(秦王)에 봉했다.
이세민은 또한 각지에서 당나라를 따르지 않는 지방의 호족 세력과 반란군들을 모두 제압하고, 624년 중국을 재통일 하였다.
이후 이세민의 인기가 높아지자 이를 불안하게 여긴 형 황태자 이건성(李建成)과 막내동생 제왕(齊王) 이원길은 이세민을 죽일 모책을 세웠고, 급히 자신들 계파의 대신들을 불렀다. 이건성파 중에는, 위징(魏徵), 왕규, 배적(裵寂) 등이 있어, 이세민 제거 작전을 세운다. 그러나, 이것을 알아챈 이세민은 처남 장손무기(長孫無忌)와 장군 이정(李靖), 서세적(徐世勣) 등을 이용해, 도리어 역으로 그들을 이용하려 했다.
626년 7월 2일, 이세민은 부황 이연에게, 형제들이 자기를 죽이려 모함한다 아뢰었고, 이연은 그들을 장안의 궁성으로 불렀다. 그들이 궁성의 현무문으로 들어온 순간, 매복한 이세민의 군사들이 이건성과 이원길에게 화살을 쐈고, 그 자리에서 그들은 살해당했는데, 이를 현무문의 변이라 한다. 3일 뒤에 이연은 할 수 없이 이세민을 황태자로 삼고, 2개월 뒤에 그에게 양위하였다. 이에 이세민이 9월 4일에 황제에 올랐으며, 이듬해에 연호를 정관(貞觀)이라 하니, 이가 바로 당나라 제2대 황제인 태종이다. 태종은 630년 동돌궐을 제압하였다. 이에 거란과 해, 습, 실위가 당에 스스로 속하였다.
한편, 중국에서 이와같은 소용돌이가 한참일 때, 고구려는 전쟁으로 흐트러진 국내의 상황을 바로잡기 위해 노력하였다. 특히 당나라에 자주 사신을 보내 호의적인 태도를 유지했으며, 당나라와 평화적인 관계를 맺고자 했다. 고구려 영류왕은 수 양제의 고구려 침공 때 포로가 된 한인(漢人)을 송환하고 고구려의 포로를 찾아왔다. 624년 당에 조공(朝貢)하고 당 고조(高祖)로부터 상주국(上柱國) 요동군공(遼東郡公) 고구려왕에 봉해졌다. 영류왕은 당에 봉역도(封域圖)를 바치고 제후국임을 인정하였다.
그러나 이세민이 태종으로 즉위한 뒤로 당나라는 고구려에 대한 노골적인 적대 행위를 감행했고, 631년에 당나라가 고구려의 전승을 기념하기 위해 만든 경관(京觀)을 헐어버렸다. 같은해 영류왕은 동북쪽의 부여성(扶餘城)으로부터 동남쪽 바다에 이르는 천리장성(千里長城)의 축조를 시작하였고, 연개소문(淵蓋蘇文)에게 역사(役事)의 감독을 맡겼다. 연개소문은 강경파 외교론자였으며, 이는 온건파 귀족들과의 갈등으로 이어졌다.
당의 세력은 점점 더 강해져 635년에는 토욕혼을, 640년에는 고창국을 격파하였다. 이로써 당나라에 대항할 세력은 동쪽의 고구려를 제외한 대부분 소멸되었다.
640년 영류왕은 세자 고환권(高桓權)을 보내 당의 국자감에 입학시켰다. 자세한 기록은 없어서 사유는 알 수 없지만 이러한 일국의 왕자를 적국에 보낸 다는 것는 당나라와 전쟁을 할 뜻이 없음을 나타낸 것이었다. 그러나 641년에 당나라는 직방랑중(주로 군사지도를 관리하는 벼슬) 진대덕(陳大德)을 사신으로 보내 고구려의 정세를 염탐하는 등 고구려와 당나라의 관계는 점차 긴장되어 갔다.
642년 연개소문의 세력이 강해지자 여러 대인(大人)들이 왕과 상의하여 연개소문을 죽이려 하였다. 그것을 미리 안 연개소문은 자기 부(部)의 군사를 모아 거짓으로 열병(閱兵)한다면서 잔치를 베풀어 대신들을 초대한 뒤 모두 죽였는데, 이때 죽은 자가 100여명에 이르렀다고 한다. 그리고 궁궐로 가서 영류왕을 죽이고 대신 왕의 조카인 장(臧)을 새 왕으로 세우니, 그가 바로 고구려의 마지막 왕인 보장왕(寶藏王)이다.
연개소문은 막리지에 오르고 이전 귀족회의가 가지고 있던 병권(兵權)과 인사권(人事權)을 장악하였으며, 스스로 대막리지(大莫離支) 자리에 오르며 절대 권력을 행사하였다. 또한 연개소문은 외교정책을 대당강경책(對唐强硬策)으로 이끌었다.
한편, 고구려와 백제의 침입을 받은 신라는 위기를 느끼고 김춘추(金春秋)를 고구려에 보내 화친을 요청하지만 연개소문은 이를 거절하였다. 이에 신라는 당나라로 사신을 보내 고구려를 견제해 줄 것을 요청하였고, 중재에 나선 당나라가 고구려로 사신으로 사농승(司農丞) 상리현장(相里玄奬)을 보내 고구려를 협박하였다. 이에 연개소문은 "우리가 신라와 간극이 벌어진 지는 벌써 오래다. 지난번 수나라가 쳐들어왔을 때 신라는 그 틈을 타 우리 땅 500리를 빼앗아 그 성읍을 모두 차지했으니 그 땅을 돌려주지 않으면 싸움은 그칠 수 없을 것이다. "라고 사신에게 대답하였다.
이러한 보고를 받고 태종은 다시 644년에 장엄(蔣儼)을 보내 협박했지만 연개소문은 이를 일축하고 그를 토굴에 가둔다. 이로써 전쟁의 빌미를 제공했다. 이에 당 태종은 "요동은 원래 중국 땅인데 수나라가 네 번이나 군사를 일으켰으나 취하지 못했다. 내가 지금 동정(東征)함은 중국을 위해 자제(子弟)의 원수를 갚고 고구려를 위하여 군부의 치욕을 씻으려 할 뿐이다. 또 사방이 크게 평정되었는데 오직 고구려만 평정되지 않았으니 내가 더 늙기 전에 이를 취하려 한다. "라고 하였다.
당 태종은 장작 대감을 설치해 전선을 제조하고, 식량을 영주로 집결하여 전쟁을 준비하였다. 그러나 많은 대신들이 수나라의 예를 들어 고구려 정벌에 반대하였으나 태종은 자신감에 충만하여 이를 강행하였다.
결국 644년 10월, 당 태종은 연개소문의 시역을 성토한다는 명분으로 고구려를 침공하였다.
644년 6월 당은 고구려의 요동 공격을 명령한 후 11월 수륙 양면으로 약 50만 명에 달하는 대규모 원정군을 편성해 공격을 시작했다. 이때 당군은 각종 공성용(攻城用) 기구를 총동원했다. 당 태종은 다음해 2월에 낙양(洛陽)을 출발하여 직접 원정길에 올랐다. 또한 돌궐과 거란으로 구성된 이민족의 군대도 다수 동원되었다.
당 태종은 정예군 6만 명을 유주에 집결시키고, 요동을 향해 세 갈래 길로 진군하기 시작했다. 총 사령관인 이세적(李世勣)이 정예 선발대 6만 명을 이끌었고 현도성으로 향했다. 이도종에게 6만의 군사로 신성을 치게 하고, 장검에게 6만의 군사로 건안성을 치게 했다. 당 태종의 친정군 20만이 뒤를 따랐다. 거기에 당 태종이 친히 거느린 6도행군 36만이 뒤따랐다. 또한 장량(張亮)이 상륙군 4만3000을 포함한 수군 10만명, 1000척의 함대로 등주에서 출발하였다. 본대가 80만에 이르렀지만 새로운 수레의 발명으로 수송부대가 본대의 2배에서 1/4로 줄어들었다. 그래도 수송부대를 합쳐서 100~104만에 이르는 부대였다.
이세적(李世勣)의 당의 선봉 요동도행군은 유성을 떠나면서, 형세를 과장하여 마치 회원진을 향하는 것으로 위장하였다. 하지만 비밀리에 북쪽 샛길로 크게 돌아서 우회하여, 고구려가 예상치 못하던 북쪽 통정진으로 진군하였다. 이렇게 방어하는 상대의 허를 찌르는 기습 전법은 고대부터 현대에 이르기까지 수 차례 반복되었다. 과거 카르타고의 한니발이 로마를 침공할 때 로마로 들어오는 길목 마르세이유에서 방어진을 치고 있는 로마군을 피해 북쪽으로 크게 돌아서 알프스산맥을 넘어 로마를 침입하여 허를 찔렀고, 1940년5월, 2차세계대전 당시 서부전선에서 독일이 프랑스의 주력부대가 방어하는 마지노선이 아닌 세당의 아르헨 산골로 독일의 주력 기갑부대를 집중시켜 돌파하여 영국-프랑스군의 허를 찔렀듯이, 수 백년 전 사마의가 요동 공손연 정벌 때 그랬던 것처럼, 당의 대군도 고구려 주력이 방어하고 있던 강한 곳을 피하고 전혀 예상치 못한 곳으로 기습 도하하였다. 과거 고구려-수 전쟁때 수나라가 정공법으로 요하를 건너려고 엄청난 인적, 물적 손실을 치뤘던 것에 비하면 한층 전략적으로 연구한 허허실실의 기습이었다. 당나라 군도 고구려의 방어를 만만치 않게 본 결과이다.
마침내 여름 5월 1일(음력 4월 1일), 이세적이 이끄는 당의 선봉 요동도행군은 통정진에서 요하를 건너 현도성에 이르렀다. 고구려의 각 성들은 모두 성문을 닫고 수비태세로 들어갔다. 작은 현도성이 쉽게 함락되자 5월 5일(음력 4월 5일), 선봉부대의 부대총관 강하왕 이도종은 군사 수천 명을 거느리고 고구려의 요동지역 제1의 요지인 신성에 이르렀고, 절충도위 조 삼량은 기병 10여 명을 데리고 직접 성문을 위압하였다. 하지만 10여 일간의 신성 공격이 여의치 않자 5월 15일(음력 4월 15일), 당군은 군량이 보관되어 있던 개모성으로 기민하게 이동하였다. 연개소문은 주변의 작은 성 가시성의 700명을 보내 개모성을 지원하도록 하였다. 치열한 공방전에 당나라 행군총관 강확이 활에 맞아 전사하였지만 마침내 (5월 26일(음력 4월 26일) 이 세적과 강하왕 도종이 개모성을 쳐서 빼앗고, 개모성의 인구 2만 호와 양곡 10만 석을 탈취한 후, 개모성을 개주(蓋州)로 개칭하였다.
한편 두 번째 남쪽 방면으로는 영주 도독 장검이 이민족으로 편성된 군사를 거느리고 선봉이 되어 요수의 남쪽 하구를 건너 건안성을 급습한다. 당의 갑작스러운 기습에 고구려 군사는 격파되어 수천 명이 전사하였고 건안성으로 후퇴하였다.
세 번째 해로를 통한 방면으로는 장량(張亮)이 당의 수군을 거느리고 산동의 동래로 부터 바다를 지나 비사성(卑沙城)을 습격하였다. 비사성은 사면이 절벽으로 되어있고, 다만 서문으로만 오를 수 있는 천혜의 요새이다. 하지만 유격전에 명성을 떨친 당나라 장수 정명진(程名振)이 군사를 데리고 선봉으로 야습을 시행하였고 부총관 왕 대도가 먼저 성에 올랐다. 5월 31일(음력 5월 1일), 마침내 성이 함락되고 남녀 8천 명이 죽었다. 천혜의 요새였던 비사성은 예상과 달리 당의 야간 기습에 너무나 쉽게 함락되고 말았다.
4월29일, 마침내 고구려의 요동 최대의 성, 요동성으로 당의 이도종이 이끄는 요동도행군의 선발 기병부대가 도달하였다. 요동성은 과거 고구려가 점령하기 전 중국의 한나라 시절부터 삼국시대 공손씨의 지배를 받을 때는 양평성으로 불리었었고 예전 사마의가 함락시키고 공손연을 참수했던 그 성이다. 이때 당 태종 이세민이 직접 이끄는 주력 친정군은 요하의 늪 지대에 이르렀는데, 진흙이 2백여 리나 펼쳐져 있어 사람과 말이 통과할 수 없었다. 장작 대장 염 입덕이 흙을 퍼부어 다리를 만들었다. 이에 따라 군사들이 행군을 멈추지 않고 늪 지대 동쪽으로 통과하였다.
한편 급박한 상황 속에 고구려는 신성과 국내성의 보병과 기병 4만 명을 긴급히 보내 요동성을 구원하려 하였다. 이때 고구려 4만군의 지휘관은 미상이다. 5월8일, 고구려의 4만 구원군은 요동성에 도착하였고, 당의 이세적이 이끄는 요동도행군의 선봉 이도종이 이끄는 요동도행군의 선발 기병부대와 요동성 앞에서 마주치게 되어 교전을 시작한다. 고구려 4만 구원군을 맞아 당의 이도종은 4천 명의 기병으로 이에 대항하려 하였으나 너무 적었다. 그리하여 당군의 군사들은 모두 병력의 차이가 현격하다 하여, 도랑을 깊이 파고 보루를 높이 쌓으며 왕이 올 때까지 기다리는 것이 좋겠다고 말하였다. 하지만 이도종이 말했다. "고구려는 군사가 많음을 믿고 우리를 경시하고 있으나, 그들은 멀리서 왔기 때문에 피곤한 상태이므로 공격하면 반드시 이길 수 있다. 이렇게 하여 길을 깨끗이 닦아놓고 왕을 기다리는 것이 마땅할 것이다. 어찌하여 왕 앞에 적을 넘겨 드리려 하는가?" 도위 마문거가 말했다. "강한 적을 만나지 않고서야 어떻게 장사의 능력을 드러내겠느냐?" 이도종은 말을 마치자, 말을 채찍질하여 달려가 공격하였다. 이도종이 용맹히 돌진하여 가는 곳마다 고구려 군사가 쓰러졌다. 이에 당나라 군사들의 마음이 약간 안정되었다.
하지만 본격적인 전투가 시작되고 고구려의 대군이 전열을 가다듬고 반격하자 숫적으로 열세를 보이던 당군은 패주하게 된다. 행군 총관 장군예가 퇴주하고 당 나라 군사가 크게 패배하였다. 이도종은 흩어진 군사를 수습하여 높은 곳에 올라섰다. 그는 고구려 군대의 진영이 혼란스러운 것을 보고, 다시 기병 수천 명을 이끌어 돌격해왔다. 하지만 이 때 이세적이 이끄는 요동도행군의 군대가 도착하여 고구려 군을 협공하였다. 이리하여 고구려 군사가 크게 패배하여 물러나니, 사망자가 1천여 명이었다.
신성과 국내성에서 급파되었던 고구려 지원군 4만의 거센 공격을 우선 뿌리친 이세적의 요동도행군은 당 태종 이세민의 친정군을 기다렸고 당 태종의 친정군은 요수를 건넌 다음 다리를 철거하여, 마침내 5월10일 요동성에 도달하여 이세적의 요동도행군과 합류하였다. 당 태종은 강하왕 이도종을 위로하여 상을 주고, 마문거를 몇 급 올려 중랑장으로 삼고, 장군예의 목을 베었다. 이세민은 직접 수백 명의 기병을 거느리고 요동성 밑에 가서, 군사들이 흙을 지고 참호를 쌓는 것을 보았다. 이세민은 직접 제일 무거운 것을 자기 말에 실었다. 이에 시종들이 다투어 흙을 운반하여 성 밑에 쌓았다.
당군은 이세적의 지휘 하에 밤낮 없이 12일 간 요동성을 맹공격하였다. 여기에 당 태종 이세민의 친정군이 합류하여 정예 부대를 이끌고 성을 수백 겹으로 포위하였다. 북소리와 함성이 천지를 진동시켰다. 성 안에는 주몽의 사당이 있었고, 이 사당에는 쇠사슬 갑옷과 날카로운 창이 있었는데, 망녕되게도 이전 연 나라 시대에 하늘이 내려 준 것이라고 하였다. 바야흐로 포위 태세가 긴박해지자, 미인을 부신으로 분장시켜 놓고 무당이 말하기를 "주몽이 기뻐하니 성은 반드시 보전될 것이다"라고 하였다. 또한 요동성에는 백제가 황색 칠을 한 쇠 갑옷을 바치고, 또 검은 쇠로 만든 무늬있는 갑옷이 있어 군사들에게 입혀 종군하였다.
요동성은 요동지역 최대의 성이자 고구려의 거점이었다. 하지만 요동성은 험준한 산에 의지하여 구축된 신성, 백암성, 안시성 같은 다른 고구려의 산성과는 달리 평지에 지어진 성이었다. 당나라 군은 예전 고구려-수 전쟁 때 수나라군이 동원했던 포차보다 훨씬 위력적이고 강력한 개량된 포차를 동원하였다. 당군은 이러한 신형 포차를 열지어 놓고, 큰 돌을 3백 보 이상 날려 보냈다. 돌이 맞는 곳마다 모두 허물어졌다. 아무리 철옹성인 요동성이라도 평지에서 이러한 포차 공격에는 취약할 수 밖에 없었다.
고구려 군은 나무를 쌓아 누대를 만들고 그물을 쳤으나 돌을 막을 수 없었다. 당나라 군사는 충거로 성 위의 집을 부수었다. 이 때 남풍이 세게 불자 당왕 이세민이 민첩한 군사로 하여금 장대의 꼭대기에 올라가서 성의 서남루를 불사르게 하였다. 불이 성 안으로 타들어가자 이세민은 곧 장병들을 지휘하여 성에 오르게 하였다.
마침내 5월17일, 과거 고구려-수 전쟁때 수나라가 총력을 기울여도 함락되지 않았던 요동 최대의 요새 요동성이 함락되었다. 요동성은 고구려 요동지역의 가장 크고 상징적인 요동 최대의 성이었다. 이때 성이 함락하여 사망자가 1만여 명이었다. 당 나라는 군사 1만여 명과 남녀 주민 4만 명을 생포하고, 양곡 50만 석을 탈취하였으며, 요동성을 요주(遼州)로 개칭하였다. 당군은 이제 뒤이어 남쪽의 백암성(白巖城)으로 몰려가 공격을 시작했다.
한편 고구려는 요동성에 이어 이번에는 백암성을 구원하기 위해 오골성(烏骨城)의 고구려 군 1만명을 긴급히 출동시켰다. 고구려 지원군은 백암성에 도착하였고, 마침 백암성을 공격하려던 철륵출신 총관이었던 선봉 계필하력(契苾何力)의 선발 기병부대를 요격한다. 이 때 계필하력은 고구려 장수 고돌발에게 옆구리가 창에 찔리는 큰 부상을 입고 낙마한다. 목숨이 경각에 달린 순간, 당나라 장수 설만비가 가까스로 고구려 기병의 포위를 뚫고 중상을 당한 계필하력을 구해낸다. 당의 기병부대는 패퇴하여 물러났고 당군을 물리친 고구려 지원군은 백암성에 입성하여 합류하였다.
하지만 5월28일, 이제는 당 태종 이세민의 친정 대군이 백암성으로 몰려왔다. 이세적은 백암성 서남 쪽을 공격하고, 당 태종 이세민은 서북쪽으로 갔다. 당군이 총공세로 나서고 당의 우위대장군 이사마는 성 앞까지 진격하여 공격하던 중 고구려 군사의 화살을 맞고 쓰러졌다. 백암성은 신성과 같이 험준한 산에 의지하여 지은 산성으로 당군이 신형 포차를 앞세워 공성에 나섰지만 평지의 성 요동성과는 달리 역시 함락이 역시 용이하지 않았다.
하지만 신성과 달리 백암성은 내부의 결속때문에 무너지게 된다. 백암성주 손대음(孫代音)이 비밀리에 심복을 보내 항복하기를 청하고, 성에 나와 칼과 도끼를 던지는 것으로 신호를 삼겠다고 하면서 말하기를 "저는 항복하기를 원하지만 성 안에 따르지 않는 자가 있다"라고 하였다. 이세민은 당 나라 깃발을 사자에게 주면서 "틀림없이 항복하겠으면 이 깃발을 성 위에 세우라"고 하였다. 손대음이 그 깃발을 세우니 성 안 사람들은 당 나라 군사가 이미 성에 올랐다고 생각하여, 모두 손대음을 따라 항복하였다. 마침내 6월1일 백암성이 함락되었다.
이세민은 요동을 공격하여 승리하였을 때, 백암성이 항복을 청했다가 얼마 후에는 후회하였다. 이세민은그들의 변심을 보고 노하여 군사들에게 명령하였다. "성을 빼앗으면 마땅히 빼앗은 사람과 물건을 모두 전사들에게 상으로 주리라. " 이 때 이세적은 이세민이 백암성의 항복을 받으려는 것을 알아채고, 갑병 수십 명을 데리고 와서 이세민에게 말했다. "사졸들이 화살과 돌을 무릅쓰며 목숨을 돌보지 않고 싸우는 것은, 노획물을 탐내기 때문입니다. 지금 성이 거의 함락되어 가는데 어찌하여 항복을 받음으로써 전사들의 마음을 저버리려 합니까?" 당 태종 이세민은 말에서 내려와 사과하며 말했다.
"장군의 말이 옳다. 그러나 군사를 함부로 풀어 사람을 죽이고, 그들의 처자를 사로잡는 것은, 내가 차마 저지를 수 없는 행위이다. 장군의 부하로서 공로가 있는 자에게는 내가 창고의 물건으로 상을 줄 것이다. 장군으로 인하여 이 성이 속죄받기를 원한다. "
이세적은 물러나와 성 안의 남녀 1만여 명을 잡아, 물가에 장막을 치고 그들의 항복을 받았다. 그런 후에 곧 먹을 것을 주고, 80세의 노인에게는 정도에 따라 비단을 주었다. 다른 성의 군사로서 백암성에 와있던 자들은 전부 위로하여 타이르고, 양식과 군기를 주어 원하는 곳으로 가게 하였다. 이보다 앞서서 요동성 장사가 부하에게 피살되는 사건이 발생했었다. 그 성의 성사 한 사람이 장사의 처자들을 데리고 백암성으로 도망해왔었다. 이세민은 그의 의리를 가상히 여겨 비단 다섯 필을 주고, 장사의 상여를 만들어 평양으로 보냈다. 백암성을 암주(巖州)로 개칭하고, 항복한 고구려 백암성 성주 손대음을 자사로 삼았다. 이로써 고구려의 요동방어선의 중심부였던 요동성, 백암성이 차례로 당군의 수중에 넘어가게 되어 고구려는 절체절명의 위기를 맞게 된다.
한편 요동성, 백암성을 차례로 함락시킨 당나라 군은 방향을 돌려 아직 함락시키지 못한 북쪽의 고구려 요동방어선 제1의 요지 신성을 다시 공략하기 위해 다시 재공격하였다. 앞서 고구려가 신성과 국내성, 오골성을 근거지로 계속 지원군을 보내자, 당군으로써는 신성을 북쪽에 남겨두고 남쪽으로 진공하는 것이 부담이 되었다. 하지만 평지의 요동성과는 달리 신성은 산성으로써, 백암성과 마찬가지로 당군이 포차를 밀집하여 공성하기 어려웠다. 성 내부의 내분이 일어나 함락되었던 백암성과 달리 신성의 방어전은 굳건했다. 전투는 상당히 치열했고 당시 당나라 군이 점령한 개모성에 진주한 당나라 장수 위정은 매일 밤 들려오는 북과 함성소리로 두려워했다고 회고할 만큼 전투는 치열했다.
하지만 훗날 당나라가 고구려와의 645년 신성전투, 건안성전투, 주필산전투, 667년 금산전투를 당나라와 고구려의 4대전투로 회고한 것처럼 큰 전투였지만 당나라 군은 수확을 얻지 못하고 물러났다. (안타깝게도 이렇게 수 차례 당나라의 거센 공격을 막아낸 용맹한 신성의 성주 이름은 미상이다. )
한편 건안성(建安城)방면에서도 역시 당나라 장검의 부대가 와해되며 고구려는 방어에 성공한다. 건안성 성주 고원은 고구려 군을 이끌고 장량의 당나라 부대를 기습해 성공하는 등 당나라 군을 계속 괴롭혔다. 이때 당나라의 진영에서는 건안성(建安城) 공격을 앞두고 많은 의견이 오고갔다. 이세적은 건안성이나 오골성(烏骨城)이 중요하지만 안시성을 먼저 점령하지 않으면 배후로부터 공격을 받아 당나라의 군량미 수송에 차질이 생길 것이라 주장하였다. 그러나 태종은 안시성이 연개소문의 정변 때도 안시성 성주가 복종하지 않아 공격을 받았으나, 항복시키지 못한 점을 들어 우회할 것을 주장했다. 결국 당 태종은 이세적의 의견에 따르기로 결정하였다.
신성과 건안성에서 고구려의 강력한 반격으로 밀려난 당군은 요동성에서 수일간 전열을 정비한 후 작전회의를 한 후 방향을 남쪽으로 돌려 안시성으로 진격한다.
선봉이었던 요동도행군 제1군 장사귀가 이끄는 선발부대가 안시성 부근에 도달하였고 안시성의 고구려 군과 격전을 벌인다. 안시성의 고구려 군은 당군을 포위, 섬멸직전으로 몰아 넣었다. 이 때 당나라의 장수인 유군앙이 고구려 군에 겹겹이 포위당하여 빠져나오지 못하고 있었다. 이러한 위급한 시기에 당시 사병이었던 설인귀가 단창필마로 뛰어들어가 고구려 군의 장수 한명의 목을 잘라 말에 걸었다. 고구려 군의 포위망이 뒤로 물러나고, 유군앙은 겨우 구조된다. 그는 일개 사병으로서 장수가 해야 할 일을 했던 이 전투 이후 설인귀의 명성은 군중에 알려지게 되었다. 당의 선발부대는 더이상 공격하지 못하고 당 태종의 대군을 기다리게 된다.
요동 방어선 북단의 신성, 최남단의 건안성이 당군의 공격을 막아내고 있으나 중앙의 요동지역 최대의 요동성과 그리고 주변 백암성, 개모성등이 차례로 함락되어 요동의 위기는 이제 극단을 치달았다. 6월11일, 당 태종의 당의 대군은 남하하여 안시성 부근까지 진격하였다. 한편 고구려에서는 요동방면에 위기상황을 타개하고자, 거국적인 15만 대군을 긴급히 요동방면으로 급파한다.
마침내 6월 20일, 당의 대군을 맞아 고구려의 대군은 안시성 부근에 도착하여 강 건너 당군을 마주 보고 건곤일척의 승부를 하게 되었다.
이전과 이후의 한국사에서 수 많은 이민족의 침입이 있었지만 대부분의 전쟁 양상은 침공한 이민족을 상대로 농성 혹은 적은 규모의 군으로 항전하였지만 이렇게 단일 전투에서 15만명이상의 대군을 동원하여 이민족의 대군과 평원에서 대등하게 대회전을 했던 경우는 거의 유일하다. 또한 중국의 한족과-한국의 한민족 간에 벌어진 단일 전투 사상 거의 유일한 대규모 평원 대회전 전투가 된다. (이후 중국 측 사서에는 667년 고구려와 당의 금산전투에서 고구려 군 20만이 동원되었다는 기록이 있으나 자세한 전투의 기록은 없다. )
당나라 진영에서 당 태종 이세민은 작전 회의에서 "지금 고구려 군에게 전략이 있다면 그것은 다음의 세 가지이다. 첫 째는, 군사를 이끌고 직접 앞으로 나가서, 안시성과 연결되는 보루를 쌓고, 높은 산의 험한 지세에 의지하여 성 안의 곡식을 먹으면서 말갈군을 풀어 우리의 마소를 약탈하는 것이다. 이렇게 되면 우리가 공격한다고 해도 빨리 항복받을 수 없고, 돌아가려 해도 늪지가 장애가 될 것이므로, 우리 군사들은 앉아서 곤란한 지경에 처하게 된다. 이것이 상책이다. 둘 째는, 성 안의 군사를 데리고 야간 도주를 하는 것이다. 이것이 중책이다. 셋 째는, 자기의 지혜와 재능을 모르고, 우리와 대적하는 것이다. 이것이 하책이다. 그대들은 두고 보라. 그들은 필히 하책으로 나올 것이니, 그들을 사로잡게 되는 작전이 내 눈 앞에서 벌어질 것이다. "
사서에 기록된 당 태종 이세민이 언급한 첫 번 째 전략은 적의 대군이 몰려왔을 때 단기 승부로 바로 맞서지 않고 험한 지형의 장점에 의지하여 장기전으로 전쟁을 몰고 가며 침공군의 보급의 약점을 공략하는 고구려 방어군의 가장 확실한 전략이었다.
한편 반대 편 고구려 진영에서는 나이 많고 경험이 풍부한 대대로 고정의가 북부욕살 위두대형 고연수와 남부욕살 대형 고혜진에게 말했다.
"진왕(당 태종)은, 안으로는 여러 영웅들을 쳐 없애고, 밖으로는 오랑캐들을 굴복시켜 스스로 왕이 되었으니, 이는 세상을 제도하라는 천명을 받은 인재이다. 지금 그가 전국의 군사를 이끌고 왔으므로 이에 대적할 수는 없다. 나의 계책은, 군사를 정비하되 싸우지 않고, 여러 날을 두고 지구전을 펴면서 기습병을 보내 그들의 군량 수송로를 차단하는 것이다. 저들은 군량이 떨어지면 싸우려 해도 싸울 수 없고, 돌아가려 해도 갈 길이 없게 될 것이다. 이 때만이 우리가 승리할 수 있는 때이다. "
고구려에도 인물이 있었다. 고구려의 노회한 대대로 고정의는 이러한 당나라 침공군의 약점을 정확히 간파하여 당과 바로 승부를 내기보다는 최대한 침공군과 전투를 피하고 지구전을 통해 침공군을 약점을 최대화하려 하였다. 역사적으로도 이러한 외세의 침략에 맞서 지구전을 통해 먼거리 원정군의 약점을 극대화하는 전략은 동서고금을 막론하고 수 차례 있었다. 한니발의 카르타고 침공군에 맞섰던 로마가 그랬고 중국 삼국시대 촉의 제갈량의 침공에 맞섰던 위나라 사마의가 그랬다. 하지만 그 당시에도 침공군에 맞선 이러한 대 전략에 상반되게 전장 분위기와 혈기를 못 이겨 일선 지휘관들에 의해 수 차례 치명적인 패배를 기록했던것처럼 당시 고구려 군의 선봉 고연수와 고혜진은 기만의 명수 당 태종의 계략에 넘어가게 된다.
당 태종은 곧 장손무기 등 신하들과 함께 수백 명의 기병을 데리고 고지에 올라 산천의 형세 가운데 복병시킬 수 있는 곳과 병력의 출입이 가능한 곳을 관찰하였다. 이 때 강 건너의 고구려 군은 말갈군과 연합하여 진을 치고 있었으니 그 진의 길이는 40리에 달할 정도로 형세가 컸다.
당 태종이 이러한 고구려의 대군을 보고 크게 두려워하는 기색을 나타냈다. 고구려-당 전쟁 시작 이래 늘 숫적으로 당나라 군이 우위에 있었고 맞서는 고구려 군이 이렇게 많은 수가 몰려와 진을 치고 있는 모습을 당 태종은 본 적이 없었다. 이 때 강하왕 이도종이 말했다. "고구려는 전력을 다하여 천자의 군대를 방어하고 있으니, 틀림없이 평양의 수비에는 약점이 있을 것입니다. 저에게 정예군 5천 명을 주시어, 그들의 근본을 뒤엎게 하십시오. 그리하면 싸우지 않고도 수십만 군사를 항복시킬 수 있습니다. "
이것은 예전 로마의 스키피오가 한니발의 카르타고 대군을 앞에 두고 카르타고의 수도를 급습하여 함락시켰던 것이나 중국 삼국시대 때 위나라 장수 등애가 촉나라를 공략하기 위해 한중에 주둔하고 있는 강유의 촉군을 피해 촉의 수도 성도를 기습하는 계책과 같았다. 하지만 자존심이 강한 당 태종 이세민은 이런 모험적인 전략을 채용하지 않고 정공법으로 물리치려 하였다.
한편 선봉 고연수와 고혜진은 군사를 거느리고 강을 건너 안시성 밖 40리까지 진군하였다. 당 태종 이세민과 당군의 수뇌부가 걱정하는 것은 고구려의 대군이 안시성과 연계하여 수성 및 지구전을 펼치는 것이었다. 따라서 고구려 군을 최대한 끌어 들이기 위해 앞서 고구려 고돌발에게 중상을 입은 계필하력(契苾何力) 대신 돌궐 출신 좌위대장군 아사나두이에게 명하여 돌궐의 기병 1천 명을 이끌고 고구려 군을 유인하기 위해 공격을 하였다. 첫 교전에서 당 나라 군사가 크게 패하였고, 선봉 고연수는 "다루기가 쉽구나"라고 말하며, 앞을 다투어 진격하였다. 마치 수 백년 전 고구려-위 전쟁때 관구검의 유인전술에 고구려 동천왕이 말려들었던 것처럼 고연수는 안시성 동남방 8리 지점까지 진격하여 산에 의지하여 진을 쳤다.
고구려 군을 안쪽으로 끌어 들이는데 성공한 당 태종은 다시 한번 고구려 군을 방심하게 하려고 사신을 보내 고연수에게 거짓으로 말했다.
"나는 너희 나라의 권력 있는 신하가 임금을 시해한 죄를 물으러 온 것이니, 우리가 서로 전투를 하게 된 것은 나의 본심이 아니다. 너희 나라 경내에 들어오니 마초와 양식이 충분하지 않아 몇 개 성을 빼앗기는 하였으나, 너희 나라가 신하의 예절을 지킨다면 잃었던 성은 반드시 돌려 줄 것이다. "
이미 초전에 승리를 거둔 고연수는 이 말을 믿고, 방심하여 제대로된 수비 태세를 더 갖추지 않았다.
6월21일 밤, 이세민은 문무관을 불러 계책을 의논한 다음, 이세적에게 보병과 기병 1만 5천 명을 주어 서쪽 고개에 진을 치게 하고, 장손무기와 우진달에게 정예군 1만 1천 명을 주어 기습병을 조직하였다. 그들은 산의 북쪽에서 협곡으로 나와 우리 군사의 후면을 공격하게 하고, 이세민은 직접 보병과 기병 4천명을 이끌고 북과 나팔을 옆에 끼고 깃발을 눕혀서 산으로 올랐다. 이세민은 모든 군대에게 북과 나팔 소리가 들리면 일제히 맹공하라고 명령하였으며, 또한 관리에게는 항복받을 장막을 조회당 옆에 설치하도록 명령하였다.
이 날 밤, 유성이 고연수의 고구려 군 진영에 떨어졌다. 6월22일 아침, 마침내 고연수 등은 유인하러 온 이세적, 장손무기의 군사가 적은 것만 보고 군사를 동원하여 공격하려 하였다. 당 태종 이세민은 전방의 고구려 군을 유인하려던 장손무기의 부대에서 먼지가 일어나는 것을 보고는, 북을 치고 나팔을 불며 깃발을 들게 신호를 보내도록 하였다. 이에 따라 당의 모든 군사들이 북을 치고 함성을 지르며 진격하였다. 갑작스러운 당의 대군의 사방에서 몰려들자 고연수는 크게 놀라 군사를 나누어 방어하려 하였다. 그러나 고구려 진영은 사방에서 몰려드는 당군의 공격에 이미 큰 혼란에 빠지고 말았다.
동서고금을 막론하고 포위된 쪽은 거의 일방적인 학살전이 이루어 졌다. 카르타고 전쟁때 한니발군이 로마군을 포위에 넣고 일방적인 학살전을 벌였던 칸나에 전투 때도 그랬던 것처럼 삼면이 포위된 고연수의 고구려 군과 말갈군은 거의 일방적으로 몰리고 있었다.
전투 당일 비가 왔던 것으로 추정된다. 사서에는 마침 천둥과 번개가 쳤는데, 당나라 군에서 사병 설인귀가 기이한 복장을 하고, 고함을 치면서 고구려 진영으로 깊숙히 들어왔다고 기록되어 있다. 당나라의 대군이 이 때를 이용하여 공격해왔다. 또한 한 쪽에서는 신라의 골품 귀족 출신이었던 좌무위 과의(左武衛 果毅)설계두는 당군의 선봉에서 서서 포위된 고구려 군과 격렬한 전투 중 전사했다. 삼면으로 포위된 고구려 군은 크게 패하였고 고연수, 고혜진은 마침내 당의 공격 포위망을 빠져 동쪽 강가로 다시 돌아왔으나 이미 3만여 명의 사망자가 생겼다.
고연수, 고혜진은 남은 군사를 거느리고 강 건너 고구려 본군으로 합류하려 하였으나 이미 당 태종은 장손무기에게는 교량을 전부 철거하여 고구려 군사의 귀로를 차단하게 하였다. 결국 고구려 본대와 합류하지 못한 고연수, 고혜진은 강을 건너지 못한 채 남은 군을 이끌고 북쪽 산에 의지하여 자체 수비를 강화하였다. 이제 당 태종 이세민은 모든 부대에 명령하여 고구려 군사를 포위하게 하고, 이로써 고구려 군은 완전히 고립되었다.
한편 치열한 전투가 끝나고 당 태종은 신라인 임에도 자국인보다 목숨 바쳐 싸우다 전사한 설계두에 크게 감명받아 측근을 시켜 설계두의 시신에 어의(御衣)를 덮어주고, 대장군에 추증하고, 예로써 장사를 지내 주었다. 또한 당 태종은 활약이 뛰어났던설인귀의 공을 크게 치하하며 그를 유격 장군으로 임명하였다.
6월23일, 포위된 고연수 고혜진의 고구려 군을 구원하고자 고구려 군이 강을 건너 대공격을 시작한다. 그리고 이에 맞서 고구려 군의 도하를 저지하려던 당나라 군과 큰 교전을 시작된다. 이 때 밀려온 고구려 대군을 맞서기 위해 선봉으로 지휘하던 당나라 좌무위장군 왕군악이 전사할 정도로 전투는 치열했다.
하지만 후방의 고구려 본군은 고립된 고연수와 고혜진의 부대에 도달하지는 못한 것으로 보인다. 포위된 고연수와 고혜진의 부대는 더 이상 버티지 못하고 마침내 남은 군사 3만 6천8백 명을 이끌고 항복하였다. 당 태종 이세민은 욕살 이하의 관장 3천 5백 명을 선발하여 당나라 지역으로 옮기고, 나머지는 모두 석방하여 평양으로 돌아가게 하였으며, 말갈인 3천 3백 명은 전부 생매장 하였다. 말 5만필·소 5만두·명광 갑옷 1만 벌을 노획하였으며, 기타의 기자재도 노획하였다. 이세민이 갔던 산의 명칭을 주필산으로 개명하고, 고연수를 홍려경, 고혜진을 사농경에 임명하였다.
당 태종이 이끄는 당나라 군은 아직 후방에 고구려 대군의 일부가 있었지만 안시성 앞 주필산에서 고구려 군을 크게 격파하고 선봉 고연수와 고혜진이 항복하고 3만여 고구려 군이 투항하였다. 이제 당나라 군은 눈 앞의 안시성을 향해 정조준하기 시작한다.
7월5일, 당나라 군은 안시성(安市城) 동쪽 고개로 이동하였고 부근의 작은 성 후황성과 은성을 공격하여 함락시켰다. 고구려의 대군은 아직 건재하고 있었고 고구려 군과의 전투 중 많은 희생자를 내게 된다. 당측의 사서에는 7월13일 수많은 전사자의 시체에 표식을 하고 이후 일부군대가 퇴각할 때 같이 귀환하도록 하였다.
8월8일 고구려 군의 첩자 고죽리가 당나라 군에 포로로 잡혔다. 이에 따른 구체적인 기록은 없으나 사서에는 이후 고죽리는 다시 당나라 진영을 탈출한 것으로 기록되어 있다. 그리고 8월10일 드디어 당 태종의 당의 대군은 안시성 공격을 시작한다. 이에 안시성 사람들이 당군의 깃발과 일산을 바라보고, 즉시 성에 올라 북을 두드리고 함성을 지르니 당 태종이 크게 분노하였다. 이세적은 성이 함락되는 날 안시성의 남자를 모두 구덩이에 묻어 버릴 것을 황제에게 요청하였다. 안시성 사람들은 이 말을 듣고 더욱 굳게 수비하였다. 당 나라 군사가 오랫동안 공격하였으나 안시성을 함락시킬 수 없었다. 무엇보다 요동성과 개모성 함락에 큰 활약을 보인 당군의 공성 신무기였던 각종 포차들의 활약이 현저히 떨어졌다. 안시성은 평지의 요동성과 달리 산에 의지한 산성이다. 따라서 중국의 중원이나 요동성 같은 평지에서 큰 효과를 발휘했던 신무기의 효과들이 크게 반감되었다.
안시성 공략이 어려워지자, 이때 고연수·고혜진 등이 태종에게 "저희들이 이미 대국에 몸을 맡겼으니, 정성을 바치지 않을 수 없습니다. 천자께서 빨리 큰 공을 이루어 우리가 처자와 만나게 하여 주기를 원합니다. 안시성 사람들은 그의 가족들을 생각하여 자진하여 싸우고 있기 때문에 빨리 함락시키기는 쉽지 않습니다. 저희들은 고구려의 10여 만 명의 병력을 가지고 있었음에도 불구하고, 황제의 깃발을 보는 것만으로 사기가 꺾여 허물어졌으며, 백성들의 간담이 서늘하였습니다. 오골성의 욕살은 늙어서 수비가 견실할 수 없으니, 군사를 옮겨 그곳을 공격한다면, 아침에 도착하면 저녁에는 승리할 것이며, 도중에 있는 여타의 작은 성들은 위풍만 보고도 반드시 허물어질 것입니다. 이러한 연후에 그곳의 자재와 군량을 거두어 북을 울리며 전진하면, 그들은 틀림없이 평양을 지켜내지 못할 것입니다. "라고 하여 안시성 대신 오골성을 직접 공격할 것을 주청하였다. 여러 신하들이 또 말했다.
"장량의 군사가 사성에 있으니, 그를 부르면 이틀이면 올 수 있습니다. 고구려가 두려워 하고 있는 틈을 이용하여, 장 량의 군사와 힘을 합하여 오골성을 함락시키고, 압록강을 건너 곧바로 평양을 빼앗는 것이 이번 일에 달렸습니다. "
지난 번 주필산 전투를 앞두고 고구려 15만 대군과 대치하였을 때 강하왕 이도종의 의견과 비슷하였다. 마침내 마음이 흔들린 당 태종 이세민이 이 말을 따르려 하자 장손무기가 홀로 나서서 다음과 같이 말했다. "천자의 원정은 보통 장수들의 정벌과는 다르다. 따라서 모험을 하면서 요행을 바랄 수는 없다. 지금 건안성과 신성의 무리가 아직도 10만이나 되는데, 우리가 만약 오골성으로 간다면, 고구려 군사들이 반드시 우리의 뒤를 추격할 것이다. 그러므로 먼저 안시성을 점령하고 건안성을 취한 후에 군사를 먼 곳으로 진군시키는 것이 옳다. 이것이 만전의 계책이다. " 장손무기의 말을 듣고 이세민은 곧 앞서의 계획을 중지하였다.
당 태종은 안시성이 만만치 않음을 깨닫고 건안성 패잔병(장량의 6만의 수군)과 이도종, 장검의 군사등을 모두 모았다. 당 태종 친정군과 6도행군 56만도 안시성으로 집결했다. 어느 날 태종은 성 안에서 들리는 닭과 돼지의 소리를 듣고 이세적에게 밤 중 안시성에서의 기습 공격에 대비할 것을 명하였다. 이날 밤, 안시성의 군사 수백 명이 성에서 줄을 타고 내려왔다. 태종은 이 말을 듣고 직접 성 밑에 와서 군사를 소집하여 재빨리 공격하였다. 안시성 군사 중에 사망자가 수십 명이나 되었고, 나머지는 도주하였다.
그럼에도 안시성 공략은 난공불락이었다. 당군은 강하왕 이도종의 건의로 성의 동남 쪽에 토산을 쌓아 점점 성으로 접근해왔다. 성 안에서도 역시 성벽을 더욱 높게 쌓아 굳게 방어하였다. 양군은 하루에도 6, 7회씩 교전하였다. 당나라 군사의 충거와 포석이 누대와 성위의 작은 담을 허물었으나, 성 안에서는 그 때마다 목책을 세워 부서진 곳을 막았다.
당나라는 60일 동안 총인원 50만 명을 동원하여 토산(土山)을 쌓았다. 토산이 완성되자, 이 토산의 꼭대기가 성보다 높게 되어 밖에서는 성 안을 내려볼 수 있었다. 이도종이 과의(果毅)부복애(傅伏愛)를 시켜 500명의 군사를 거느리고 산정에 주둔하여 적을 대비하게 하였다. 그러던 중에 산이 폭우로 허물어지면서 성을 덮치는 바람에 성의 일부가 무너졌다. 토산이 무너지자 안시성의 군사 수백 명이 성이 허물어진 곳으로 나가 싸워서 마침내 토산을 탈취하여 그곳에 참호를 파고 수비하였다. 태종은 토산을 빼앗기자 진노하여 부복애의 목을 베어 조리를 돌리고, 장수들에게 명령하여 성을 공격하게 하였다. 고구려측 군사 1만, 당군 3만이 전사하였다.
결국 이길 수 없자, 도종이 맨발로 황제의 깃발 아래 가서 죄를 청했다. 이에 태종은 이도종에게 "너의 죄는 죽어 마땅하지만, 나는 전한 무제가 왕회를 죽인 것이 진 목공이 맹명을 등용한 것만 못하다고 생각하고 있으며, 또한 너는 개모성과 요동을 점령한 공로가 있기 때문에 특별히 용서한다. "라고 하였다.
이날 토산 전투, 그리고 그 뒤 펼쳐진 토산 쟁탈전에서 당군 수만명이 목숨을 잃었고 고구려의 피해도 만만치 않았다. 또 3일간의 토산 쟁탈전 이전의 석달간 공방전에서 당군은 하루 2~3천의 피해를 입었다고 전해진다. 하루 피해인원을 평균 2500이라 쳐도 무려 20만이 넘는 사상자를 낸 것이었다. 고구려측도 안시성 군사 중 요서전에 따라갈 수 있을만한 인원이 3만이 채 안되었다고 한다. 전투는 그만큼 치열했는데, 당 태종이 안시성주 양만춘의 화살에 맞아 한쪽 눈을 잃었다는 야설도 있다. 당의 공격을 막아낸 안시성의 성주에 대하여 역사서에는 어떠한 자료도 없이 그냥 "안시성의 성주"로만 기록되고 있었다. 특히 《삼국사기》의 저자 김부식은 안시성주에 대해 크게 칭송하면서 이름이 남아있지 않은 것을 한탄하였다. 그러나 조선 시대 송준길(宋浚吉)의 《동춘당선생별집》과 박지원의 《열하일기》에는 안시성 성주의 이름을 "양만춘(梁萬春)" 혹은 "양만춘(楊萬春)"이라고 밝히고 있다.
645년 9월 18일 마침내, 당 태종은 요동이 추워지고, 병사들과 군마를 관리하기 힘든 것과 군량이 떨어질 것을 예측하여 군대의 철수를 명령하였다.
9월20일, 당나라 군은 점령하고 있었던 요동성에 도착하였고 9월21일, 당나라 군대는 요택으로 달아났다. 당나라 군대가 선택할 수 있는 퇴각로는 3개가 있는데, 요하 하구는 고구려 건안성이 버티고 있어 갈 수가 없다. 따라서 당나라 군대는 진흙밭인 요택을 건너는게 아닌 요하 중류로 가야만 했다. 하지만 당나라 군대는 이 길을 가지 않았다. 이는 요동 지역의 고구려 군을 의식한 것이라고 추측된다. 태종은 이세적과 이도종에게 명령하여 보병과 기병 4만을 이끌고 후군으로 서게 하였다. 그들이 요동에 이르러 요수를 건너려 하였다. 그러나 습지 때문에 수레와 말이 통과할 수 없었다. 태종은 장손무기에게 명령하여 1만 명의 군사로 하여금 풀을 베어 진흙길을 메우게 하고, 물이 깊은 곳에서는 수레를 다리로 삼아 건너도록 하였다. 태종이 직접 말채찍으로 나무를 묶어 이 일을 도와 주었다.
겨울 10월, 태종은 포구에 이르러 말을 멈추고, 진흙길 메우는 작업을 독려하였다고 좋게 말했지만, 이세민 조차 나서지 않을 정도로 심각한 사지(死地)를 건너고 있었다. 20일동안의 퇴각은, 바람과 눈이 휘몰아쳐 군사들의 옷이 젖고 폭풍과 눈 엄청난 추위에 동사하여 죽은 군사가 매우 많고 소, 말 10마리중 일고여덟마리가 죽는 비참한 결과를 초래했다. 혹자는 고구려 군이 후미를 공격해 피해를 입은것을 모두 추위때문에 죽었다고 핑계한다며 비판하기도 한다.
당 태종은 퇴각하는 길에서 "만일 위징이 있었다면, 나로 하여금 이번 원정을 못하게 하였으리라. "라고 말하였다. 이때 당 태종의 퇴각에 관련하여 많은 이견이 있는데, 근대의 역사학자인 신채호는 태종이 패전의 수치를 감추고자 일부러 자신들의 전과를 부풀리고, 피해는 최소화 하였다고 비판하였다. 또한 신채호는 《조선상고사》에서 연개소문이 베이징 일대 또는 중국 내륙까지 당 태종을 추격했다고 주장했다.
그러나 이를 두고 한국의 역사학계에서는 당나라 군이 퇴각로를 함락시킨 요동성 일대로 하지 않고, 진펄지대인 요택으로 한 점과 많은 양식을 이전에 고구려에게서 탈취하였는데, 군량미가 떨어진다는 것을 핑계로 당군이 서둘러 퇴각한 점. 그리고 황제가 직접 퇴각을 도왔다는 점과 자신들의 구체적인 피해상황은 정확히 하지 않은 점을 들어 이 전쟁을 당나라의 패배로 보고 있다. 일각에서는 퇴각로가 요동 주요 성을 우회한것으로 보아서 이당시 고구려 군이 요동성 등 10성을 회복했을것이라고도 한다.
한편, 항복한 고연수는 항복한 뒤로부터 항상 분개하고 한탄하다가, 얼마 후에 홧병으로 죽고, 고혜진은 결국 장안에 도착하였다.
고구려가 멸망을 한 이유도 있지만, 고구려관련된 기록은 현재 거의 남아있지않고 대부분 중국측 사서 (《구당서》·《신당서》·《자치통감》 등)에만 의존하고 있고 또 그것을 바탕으로 쓴 삼국사기정도의 사서에 의존하고 있으며 최근 발견되고 있는 고구려 유민 묘비명을 통해 추정만을 하고 있다. 중국측 역사서는 대부분 승전한 기록 등은 다소 과장하는 측면도 있고 패전한 기록은 기록하지 않고 누락시키는 경우가 많다.
또한 중국측 사서에 의존 하다보니 후대에 전해지는 고구려인들 또한 대부분 중국측에 항복 혹은 포로로 잡혔던한 인물들, 즉 손대음·고연수·고혜진·고돌발 등의 인물들 만이 기록에 남아 있다. 제1차 고구려-당 전쟁에서 중국 측 사서에 기록되어 있는 당에 투항하지 않은 고구려측의 장군, 지휘관은 단지 이름만이 전해지는 주필산 전투의 대대로고정의만이 전해질 뿐이다.
이것은 이후 벌어지는 고구려 멸망 때 까지 고구려-당 전쟁 동안 계속 이어지며 이후 결국 중국 당나라에 투항한 인물들, 즉 연개소문의 아들 연남생과 그의 자손들, 묘비명으로 밝혀진 고구려 유민 고질·고현·고족유·이타인 등 만이 전해진다.
전쟁과 관련되어서도 누락 또는 전과가 과장되거나 의문스러운 기록도 많다. 당 태종의 당군이 요동성을 함락한 이후 주필산 전투 때 까지 상당한 시간의 지체가 있는데 이것에 대한 기록이 없으며 이후 벌어진 끝까지 함락되지 않은 신성 및 건안성 전투의 기록도 생략되어 있으며 (신성·건안성 전투는 주필산전투와 이후 667년의 금산전투와 더불어 당나라 초기 고구려와의 4대전투 중의 하나로 기록될 정도의 큰 전투이다) 후대에 안시성 전투 때문에 잘알려진 주필산 전투 또한 전투 초기의 당군의 승리한 부분만이 남아 있고 이후의 기록이 전혀 없다. 현대의 학자들은 당시 정예 당나라의 대군이 단지 안시성을 함락시키지 못해서 회군하지 않았을 것으로 추측하고 있다. 주필산 전투같은 양 측 수십만이 격돌한 큰 전투에서 남아있는 기록은 단지 초전에 고연수, 고혜진이 항복한 기록뿐이기 때문이다.
645년 고구려 원정에서 실패하고 돌아온 당나라는 복수심이 컸다. 과거 모든 내전에서 승전 했으며 밖으로 주변 모든 이민족 정벌에 성공했던 터라 패전의 분함을 참지 못하는 당나라인들이 많았다. 특히 고구려 원정 때 참전했던 왕부참군 교보명은 장안으로 돌아와서 사공 방현령에게 고구려를 취할 수 있는 방법을 진언했고 방현령은 소개장을 써서 당 태종에게 올렸다.
당 태종이 교보명을 부르자 이에 교보명은 그 앞에서 말하길 "자신이 직접 평양에 가서 고구려를 설득하고 그것이 안되면 한나라때의 자객 부개자처럼 연개소문의 목을 베어 그 나라를 항복시키겠다"라고 하였다. 이에 당 태종은 그 용기를 가상히 여겨 자신이 찾던 자가 이와같은 인물이라고 칭찬했지만 그를 차마 사지인 고구려에 보내지 못하고 대신 자신의 옆에 두었다.
646년 당은 동쪽의 고구려를 제외한 거의 유일한 위협세력이었던 북쪽의 설연타마저 멸망시켰다. 646년8월, 철륵의 11개 부족장이 보내온 사신들이 공물을 바치며 당에 충성을 맹세하였다.
647년 보장왕 6년, 당나라 태종이 마지막 남은 숙적 고구려 침공을 다시 하려 하였다. 당나라 조정의 논의가 다음과 같았다.
"평원의 다른 족속들과 달리 고구려는 산에 의지하여 성을 만들었기 때문에 조기에 함락시킬 수 없습니다. . 앞서 왕이직접 원정했을 때, 그 백성들은 농사를 짓지 못했으며, 우리가 정복한 성에서는 곡물들을 수확하였으나, 가뭄이 계속되어 백성의 태반이 식량이 부족하게 되었습니다. 이제 만약 적은 군사를 자주 보내, 그 영역을 번갈아 침략하여 그들로 하여금 방어에 지치게 하고, 쟁기를 놓고 싸움터로 나가게 한다면, 수년 내에 천리의 들판은 적막해질 것이며, 민심은 저절로 이반될 것이니, 이렇게 되면 압록강 이북은 싸우지 않고도 빼앗을 수 있을 것입니다. "
따라서 당 태종은 이때부터 지속적으로 국지적인 소모전을 통해 고구려의 변경을 끊임없이 침범하여 고구려의 변방을 피폐하게 만든 후에 고구려를 크게 침공하는 것으로 전략을 수정한다. 역사적으로 강국이 주변 국을 침공할 때 대규모 원정을 통해 정복한다. 과거 역대 중화왕조도 그랬고 이후에도 그랬다. 하지만 이 당시 당나라에게 고구려 정복은 그만큼 쉽지 않았고 결국 상대적으로 소국의 약점을 물고 늘어지는 장기적 전략을 채용한 것이다. 그 만큼 한번에 정복할 수 없는 상대로 인식하고 있었다.
당 태종 이세민은 유격전에 능한 좌무위 대장군 우진달을 청구도행군대총관으로 삼고, 우무위 장군 이해안을 보좌관으로 하여, 군사 1만여 명을 출동시켜, 누선을 타고 내주로부터 해로로 진격케 하고, 또한 태자 첨사 이세적을 요동도행군대총관으로 삼고, 우무위 장군 손이랑 등을 보좌관으로 하여, 군사 3천 명을 거느리고, 영주 도독부의 군사와 함께 신성으로 진격하게 하였다. 이 두 부대에는 모두 수전에 익숙하고 전투에 능한 자들을 선발하여 배속시켰다. 당나라의 이 세적의 군사가 요수를 건너 남소 등의 몇 성을 지났는데, 고구려 군이 모두 성을 등지고 싸웠으므로, 이세적의 당군이 이들과 교전하였고 외성을 불지르고 돌아갔다.
가을 7월, 당나라는 유격전에 능한 우진달·이해안 등을 다시 보내어 고구려 국경에 들어와 1백여 차례 싸웠다. 당군은 석성을 격파하고, 적리성 아래까지 진격해왔다. 고구려 군사 1만여 명이 나가 싸웠다. 당나라 장수 이해안이 고구려 군사를 공격하여 이 때 사망한 고구려 군사가 3천명이었다.
또한 당 태종은 장차 해로를 통한 대대적인 침공을 위해 송주 자사 왕파리 등에게 명령하여, 강남 12주의 공인들을 징발하여, 큰 배 수백 척을 만들어 고구려를 공격하려 하였다.
당 태종이 조서를 내려 우무위 대장군 설만철을 청구도행군대총관으로 삼고, 우위 장군 배행방으로 그를 보좌케 하여 장병 3만여 명과 누선 및 전함을 가지고 내주로부터 바다를 건너 고구려를 공격하였다.
여름 4월, 오호진 장수 고신감이 군사를 거느리고 바다를 건너와 공격하였다. 그는 우리의 보병, 기병 5천명과 역산에서 조우하여 우리 군사를 이겼다.
그날 밤, 고구려 군사 1만여 명이 당군의 고신감의 배를 습격하다가 당군의 복병이 출동하여 물러났다.
마침내 당 태종은 고구려가 피폐되었다고 판단하고, 다음 해에 30만 대군을 출동시켜 일거에 멸망시킬 것을 논의에 붙였다. 하지만 이 때 당의 신하들이 의견을 말했다. "대군이 동방으로 원정하기 위해서는 반드시 1년의 군량미를 갖추어야 합니다. 그리고 이러한 군량을 마소나 수레에 실을 수는 없으니, 마땅히 선박을 준비하여 수로로 운반해야 할 것입니다. 수 나라 말기에 검남 지방만은 도적의 침입이 없었고, 지난 번의 요동 정벌 때에도 검남이 참여하지 않았으니, 그곳의 부유한 백성들로 하여금 선박을 만들게 해야할 것입니다. " 따라서 당 태종이 이 말을 따라 좌령 좌우부 장사 강위를 검남도에 파견하여, 나무를 베어 선박을 만들게 하였다. 큰 배 중에는, 길이가 1백 척, 넓이가 오십 척이 되는 것이 있었다. 이 배들은 따로 사신을 파견하여 수로를 통하여 무협에서 강남과 양주를 거쳐 내주로 가게 하였다.
요동지역의 고구려 변경을 집중적으로 공격하였던 당나라는 이번에는 장군 설만철 등으로 하여금 보다 고구려의 안쪽을 공격하게 하였다. 설만철이 이끄는 당군은 바다를 건너 압록강으로 들어와서, 압록강 하구의 고구려 요충지 박작성 남쪽 40리 지점에 진을 쳤다. 지정학적으로 압록강 하구는 고구려의 최후 방어선에 해당하는 군사적 절대 요충지이다. 훗날 661년 제2차 고구려-당 전쟁 때에도 계필하력(契苾何力)이 이끄는 당의 대군이 이곳을 급습하여 점거하였다.
기습 침공해온 당나라 군을 맞아 박작성 성주 소부손이 보병과 기병 1만여 명을 거느리고 방어하였다. 설만철이 우위 장군 배행방으로 하여금 보병과 모든 군사를 거느리고 소부손의 고구려 군을 일제히 공격하자 고구려 군사가 무너졌다. 배행방 등이 진격하여 포위하였으나, 박작성은 산을 이용한 험준한 요새였으며, 압록강으로 튼튼하게 막혀 있었기 때문에 쉽게 함락시키지 못하였다. 한편 고구려는 장군 고문으로 하여금 오골성·안지성 등 여러 성의 군사 3만여 명을 거느리고 와서 두 진으로 나누어 구원하였다. 당나라 설만철이 군사를 나누어 이에 대응하여, 고구려 군사들과 크게 격전을 벌인 후 물러났다.
당 태종은 또한 내주 자사 이도유에게, 군량과 기계를 운반하여 오호도에 비축하라는 명령을 내렸다. 이는 장차 대 정벌을 일으키려는 것이었다.
하지만 다음 해 649년 보장왕 8년, 여름 4월, 당나라 태종이 사망하였다. 당 태종은 유언으로 조칙을 내려 더 이상의 고구려 정벌을 중지하게 하였고 이로써 당나라와의 국지전은 중단되었으며 그 해 대거 고구려를 침공하려던 당의 계획 또한 백지화되었다.
당 태종이 사망하며 모든 고구려 침공 관련 중단할 것을 유언으로 남긴 이후 한동안 고구려와 당의 국지전은 당분간 없이 소강상태를 유지하였다.
이무렵 당은 당 태종 사망 이후 당 고종이 등극하였고 장손무기가 사실상 권력을 쥐고 당 태종 시절의 정관의 치에 이은 영휘의 치로 불리는 안정적인 정세에 있었고 이후 당나라 측천무후와의 내부 권력 투쟁이 발생하면서 대외적으로 신경 쓸 겨를이 없었다.
654년 보장왕 13년 겨울 10월, 고구려는 당에 빼앗긴 거란에 대한 영향력을 발휘하기 위하여 장수 안고로 하여금 고구려 군과 말갈군을 보내어 거란을 공격하게 하였다. 하지만 거란의 송막 도독 이굴가가 고구려의 침공에 대항하여 신성에서 고구려 군을 기습하여 고구려 군 5백명을 참살하고 7백여필의 말을 빼앗는 전과를 얻고 고구려의 공격을 막아 내어 고구려 원정군을 물리친다.
또한 그 해, 신라에는 김춘추가 왕위에 오른다. 그 다음 해 655년 보장왕 14년 봄 정월, 고구려가 백제·말갈과 더불어 신라의 북쪽 변경을 침공하여 33개 성을 점령하였는데, 이렇게 고구려에 신경을 쓰지 못하는 사이 백제, 고구려와 끊임없이 전쟁을 치루며 수세에 몰린 신라의 김춘추는 위기타개책으로 또 다시 당에게 구원요청을 하였고 당나라가 이를 받아들여 고구려를 견제하기 위해 또 다시 소규모의 고구려 침공을 계획하게 된다.
이에 655년 보장왕 14년 2월, 당나라는 신라를 구원 요청 때문에 영주 도독 정명진(程名振)과 좌위 중랑장 소정방을 보내어 군사를 거느리고 와서 공격하였다.
정명진은 과거 645년 제1차 고구려-당 전쟁 때 고구려의 비사성을 야간 기습하여 함락 시켰던 유격전에 능하여 명성을 떨치는 유격전의 적임자였다.
여름 5월, 또 다시 정명진이 이끄는 당군이 요하를 건너 오자, 고구려 군사는 상대방 군사가 적은 것을 보고, 성문을 열고 귀단수를 건너가 전투를 벌였다.
정명진 등은 고구려를 맹공하여 크게 격전이 벌어졌고, 이 때 고구려쪽은 군사 1천여 명이 피해를 보았다. 정명진의 당나라 군은 고구려의 외성과 촌락에 불을 지르고 바로 철수했다.
보장왕 17년 여름 6월, 당나라 영주 도독 겸 동이 도호 정명진(程名振)과 우령군 중랑장 설인귀가 군사를 거느리고 요서지역의 고구려 영토를 기습 침범하였다. 당나라 설인귀는 이 때 부장이 아닌 처음으로 군을 직접 지휘하게 되었는데 고구려의 적봉진을 함락시키고 고구려 군사 100여명을 포로로 잡는 공을 세운다. 당나라의 침범이 예사롭지 않자 이에 고구려에서는 대장 두방루(豆方婁)에게 3만의 병사를 붙여 파견하여 요격하였고 정명진과 설인귀의 당나라 군에 대적하여 크게 격전이 벌어졌다.
다음 해 보장왕 18년 겨울 11월, 이번에는 당나라 우령군 중랑장 설인귀가 처음으로 단독으로 군대를 지휘하여 고구려 요서지역 영토를 침범한다. 이에 고구려는 대장 온사문(溫沙門)이 이에 요격하러 출병, 횡산(요양부근의 화표산)에서 설인귀의 부대와 치열하게 전투를 하였다.
또한 이어서 설인귀의 당나라 군은 석성으로 침입하여, 고구려 군과 전투를 한다. 특히 이 전투에서는 당나라 측 사서에 당시 지휘하던 설인귀의 활약이 묘사되어 있는데 설인귀는 단기로 진격하여 고구려 군의 궁사를 생포한 일화가 소개되어 있다. 석성 전투가 시작되자 마자, 고구려 군에는 한 신궁(神弓)이 있어서 원거리에서 연속하여 당나라 군의 병사 10여명을 사살하는 신기를 보이자, 설인귀가 이에 활을 맞 쏘지 않고 직접 말을 몰고 달려 들어서 그 고구려 신궁을 생포하였다.
앞서 당나라는 설연타(薛延陀)를 멸망시켜서 사실상 고구려를 제외한 주변국을 모두 제압하였다. 또한 당나라와 신라의 연합작전으로 소정방(蘇定方)이 이끄는 당나라의 대군이 바다를 건너 백제를 침입, 멸망시킴으로써 고구려는 외교적으로 완전히 고립된 상황을 맞이하게 되었다. 이것은 제1차 고구려-당 전쟁 때와 달리 고구려 남쪽에서는 신라 군 또한 당나라 군을 도와 고구려를 공격함으로써 고구려는 남과 북 양쪽으로 공격을 받게 되는 더한 어려움에 처하게 되었다. 또한 660년 백제의 멸망 시 당나라는 13만이나 되는 대군을 해상을 통해 공격하여 성공한 자신감으로 제2차 고구려-당 전쟁 때는 대대적인 해상으로의 침공작전을 기획하게 된다.
660년 음력 6월에 소정방이 군사 13만 명을 이끌고 신라와 함께 백제를 침략하였다. 나·당 연합군의 공세에 밀려 백제는 결국 멸망하고 말았다.
661년 보장왕 20년, 이에 고구려는 장군 뇌음신(惱音信)과 말갈 장군 생해(生偕)를 보내서 신라의 술천성(述川城, 현 경기도 여주시 금사면 일원)을 공격했으나 함락시키지 못하고 이어서 신라의 북한산성(北漢山城)을 공격하였다. 성주인 대사(大舍) 동타천(冬陁川)의 용맹한 반격으로 회군하였다.
661년 백제를 멸망시킨 나·당 연합군은 그 여세를 몰아 고구려로 진격하였다. 당나라 군은 평양을 직접 공격하였고, 당 고종은 4만4천 명의 병력을 징발하여 고구려의 변방을 공격하였다. 그러나 백제 부흥군은 왜국으로 부터의 구원군의 지원을 받으며 나·당 연합군의 후미를 치는 바람에 신라 군이 다시 남진하여 백제부흥군과 싸워야 했으며, 그 상황을 이용하여 고구려는 서북 변방에 병력을 집결시켜 당나라 군을 격퇴하였다.
이에 당나라 군은 그 해 음력 4월에 다시금 대군을 거느리고 수륙양공 작전을 구사하며 평양을 향해 진군하였다. 하지만 이번에도 당나라 군이 패하자 당나라 조정에서는 고구려와 휴전해야 한다는 여론이 일어났으며, 이에 밀린 당 고종은 일시적으로 고구려 공략을 중지하였다.
661년 보장왕 20년 5월, 고구려는 백제 부흥군 지원을 위해 장군 뇌음신(惱音信)과 말갈의 장군 생해(生偕)의 군대와 연합하여 신라의 칠중성(七重城, 현 경기도 파주시 적성면)을 침공하였다. 칠중성은 고구려가 수차례 신라를 침공했던 신라 북부지역의 요지였다. 20여 일간 신라 군은 맹렬히 저항했다. 마침내 함락이 용이하지 않아 고구려 군은 포위를 풀고 물러나려 하였으나 칠중성 내부에 분열이 생기면서 함락하게 된다. 고구려 군이 물러날 기세를 보이자 성 내부의 대나마(大奈麻) 비삽(比歃)이라는 관리가 몰래 고구려 진영으로 편지를 보내어 "성의 식량이 떨어지고 힘이 다했으니 이제 공격하면 반드시 항복을 받을 수 있다"라고 하였다. 이에 뇌음신과 생해의 고구려·말갈 군은 다시 맹렬히 공격한다. 성주였던 필부(匹夫)는 비삽이 배신한 것을 알고 그의 머리를 베어 성밖으로 던지면서 성 안의 신라 군사들에게 말하였다. " 충신과 의로운 병사는 죽어도 굴하지 않는다. 힘써 노력하라. 성의 존망이 이 한 번의 싸움에 달렸다"라고 하였다. 그러나 병사의 기운이 피로하고 지쳐 죽고 부상한 자가 절반이 넘었다. 고구려와 말갈군이 바람을 타고 불을 질러 다시금 성을 맹공격하였고 성주 였던 필부와 그의 군사들은 명렬히 저항하였으나 결국 모두 전사하고 마침내 성은 함락되고 말았다. 이 소식은 신라 서라벌까지 전달되었고 무열왕은 크게 슬퍼하여 그의 관등을 급찬(級湌)으로 추증하였다.
이제 뇌음신과 생해의 고구려·말갈 군은 지만 군사를 옮겨 북한산성을 포위하여 공격을 시작한다. 고구려 군은 열흘이 지나도록 포위망을 풀지 않고, 포차(抛車)를 벌려 놓고 돌을 던지며 북한산성을 공격하였다. 신라 북한산성의 성주(城主)인 대사(大舍) 동타천(冬陁川)은 군사를 지휘하여 20여 일간을 견뎠으나 군량과 힘이 다하여 마침내 신라군은 위태롭게 되었다. 하지만 시기적으로 전투 당시 장마철로 진입하던 때로 추정된다. 《삼국사기》에는 별안간 큰 별이 고구려군진에 떨어지고 번개와 벼락이 치며 큰비를 퍼부으니, 고구려군은 포위를 풀고 물러갔다고 기록되어 있다. 실제로 장마가 시작되는 시기로써 고구려 군이 철수한 것으로 판단된다.
고구려와 신라의 칠중성·북한산성 전투는 중국 측 사서에는 등장하지 않으며 《삼국사기》에만 등장한다. 661년은 이미 백제가 망한 직후이므로 백제 부흥군을 지원 또는 백제 멸망에 따른 신라 견제를 위해 고구려가 신라를 공격한 것으로 추측된다. 주목할 것은 말갈의 장수와 말갈 군사가 신라 침공에 동원되었는데, 661년 시점에도 말갈은 고구려와 긴밀한 유대관계를 맺고 있었다는 추측이 가능하다.
661년 보장왕 20년 음력 8월에 당나라는 드디어 총력을 다해 고구려 공격에 나섰다. 당군은 총 44만의 대군을 6개의 부대로 편성하였다.
예전 수나라의 침공, 그리고 당 태종의 제1차 침공 때와 확연한 차이는 주력 침공군은 해상으로 바다를 건너 고구려에 상륙하였다는 점이다. 과거에는 고구려 침공 시, 수 양제·당 태종은 수군을 통한 공격도 있었지만 엄연히 주력은 육상을 통한 요하를 건너 요동으로 진공하던 전통적인 방식이었다.
하지만 이번 당나라의 제2차침공은 전혀 다른 방식으로 기획되었다. 과거 중화왕조의 전통적인 침공방식이었던 요하를 건너서 요동을 경유하던 방식에서 벗어나 해상을 통해 대단위 침공하는 방식이었다. 이미 당 태종 때 부터 오랜 기간 선박을 건조하고 수군을 양성하여 충분한 준비를 마쳤기에 총 6개의 대부대 중 2개의 대부대인 소사업(蕭嗣業)의 부여도행군(扶餘道行軍)과 정명진(程名振)의 누방도행군(鏤方道行軍)은 과거 전통적인 침공루트인 요하를 건너 요동지역으로 침공하였지만 이것은 고구려의 주의를 끌려는 양동작전이었고 실제 정작 주력이자 대다수라 할 수 있는 4개의 대부대, 계필하력(契苾何力)의 요동도행군(遼東道行軍)·소정방의 평양도행군(平壤道行軍)·임아상(任雅相)의 패강도행군(浿江道行軍)·방효태의 옥저도행군(沃沮道行軍)은 해상을 통해 바다를 건너 침공하려 하였다. 계필하력의 정예 요동도행군은 고구려의 국토상 중단 부분인 압록강 하구를 점령하여 북쪽 요동지역과 고구려 남부지역을 단절시키고, 한편 나머지 다른 3개의 대부대는 고구려 수도 평양성의 대동강 하구에 상륙하여 방어군을 일소한 후 고구려 수도 평양성을 순식간에 침공하여 함락시키려 하였다. 특히 평양성을 직공하려는 소정방·방효태·임아상의 부대는 660년 백제 침공 때도 성공적으로 해상 침공 작전을 수행했던 진짜 주력 부대였다.
당의 이런 대담한 해상을 통한 대단위 침공작전은 이후 한국전쟁 때 인천상륙작전, 2차세계대전 때 연합군의 노르망디 상륙작전 등으로 세계 전쟁사에서도 자주 재연되었다. 무엇보다 전년도에도 소정방·방효태 등은 같은 방식으로 성공적으로 백제를 침공하여 해안에서 방어군을 요격하고 백제의 수도 사비성을 순식간에 포위 함락시킨 성공적인 경험이 있었다. 또한 파견된 군사와 부대의 규모 또한 지난번 백제 정벌 시 소정방이 이끄는 13만군의 해상을 통한 침공작전의 규모를 훨씬 상회하는 3배가 넘었다. 또한 국토의 면적 및 동원할 수 있는 군사력 또한 고구려는 백제와 규모 자체가 달랐음으로 우선 고구려의 주력군이 방어진을 치고 있는 요동지역의 고구려 대군을 묶어두기 위한 양동작전으로써 과거 비사성 함락과 수차례 소규모 침공작전을 성공적으로 수행했던 게릴라전에 능했던 정명진을 파견하여 요동과 북쪽 부여 방면으로도 2갈래로 침공하였다.
그리고 정작 진짜 주력이었던 대다수의 부대는 해상을 통한 침공으로 4개의 부대가 상륙하였고 그 중 고구려와 수차례 실전경험이 있던 계필하력이 이끄는 요동도행군은 압록강하구에, 그리고 전년 백제 침공을 성공적으로 수행했던 소정방이 이끄는 평양도행군과 방효태의 옥저 도행군 그리고 임아상의 패강도행군을 합쳐서 수십만이 고구려의 수도 평양성으로 몰려 들었다.
이 정도의 대단위 상륙작전은 규모 면에서도 과거 한국전쟁 때 더글러스 맥아더가 이끌던 미군의 인천상륙작전을 훨씬 상회하며 2차세계대전 때 연합군의 노르망디 상륙작전에 비견될 정도의 대규모 침공작전이었다. (하지만 제1차 고구려-당 전쟁 때와는 달리 요동지역 및 그 외 지역의 구체적인 전투 기록및 일지가 남아 있지 않다)
661년 보장왕 20년 가을 8월, 마침내 소정방의 평양도행군, 방효태의 옥저도행군, 임아상(任雅相)의 패강도행군 등의 당나라 대군은 패수, 지금의 대동강하류에 상륙하였다. 이들은 정확히 1년 전 백제침공 때도 똑같이 백제영토였던 기벌포에 상륙하여 방어하던 백제 군을 물리치고 백제 수도 사비성을 함락시킨 승리의 경험이 있었다. 장소는 달랐지만 시작은 같았다. 갑작스러운 당의 수십만 대군이 바다로부터 기습적으로 밀려오자 해안에서 격렬히 반격하던 고구려 군사들도 크게 격파당하였고 결국 인근 마읍산을 탈취당하였으며 마침내 얼마 멀지 않는 평양성까지 도달하여 포위하였다.
또한 9월, 계필하력(契苾何力)의 요동도행군은 압록강 하류로 상륙한다. 고구려에서는 대막라지 연개소문이 그의 아들 연남생에게 고구려 정예부대 정병 수 만명을 이끌고 압록강을 수비하게 하고 있었고 당나라의 모든 부대가 건너오지 못하였다. 하지만 661년의 겨울은 아주 빨리 찾아왔고 계필하력의 요동도행군이 압록강에 도착하였을 때는 압록강에 얼음이 얼었다. 계필하력은 군사를 이끌고 얼음 위로 강을 건너 북을 두드리고 함성을 지르며 기습 공격해왔고 이에 방심하던 고구려 군사가 패주하였다. 계필하력이 수십 리를 추격하며 고구려 군사 3만명을 죽였다. 남은 군사는 모두 항복하였고, 연남생은 간신히 자기 몸만 피하여 달아났다.
이렇게 개전초기 당의 주력 대군은 순식간에 대동강에 상륙하여 방어하던 고구려 군을 물리치고 평양성을 포위하였고 또다른 정예주력부대는 압록강 하류를 방어하던 고구려 정예부대를 섬멸하고 진주하게 되어 고구려는 주력 대다수 군이 있는 압록강 이북 요동 지역 및 국내성과 압록강 이남의 수도 평양이 단절되는 위기까지 맞게 된다. 마치 과거 한니발의 카르타고 주력부대와 대치하던 로마군이 스키피오의 지휘하에 뒤를 돌아 카르타고의 수도를 직공하여 함락시켰던 상황과 비슷하게 되었다. 전쟁의 양상은 처음 당나라가 기획했던 방향으로 순조롭게 진행되었다. 철옹성이었던 고구려의 수도 평양성이지만 외부의 지원을 받을 수 없게 완전히 포위된 고립 상황이 되어 큰 위기를 맞게 되었다.
하지만 전쟁의 양상은 갑자기 전혀 다른 방향으로 흐르게 된다. 661년 10월, 흉노(匈奴)의 별종인 철륵(鐵勒)의 회흘부(迴紇部) 추장 비속독의 대규모 봉기가 일어난다. 본국 당나라에서는 수도 장안이 위급해지는 긴급상황이 발생하게되고 당나라는 정인태를 대총관으로 철륵도행군을 편성하여 출진시켰고 그리고 병력이 부족하여 고구려로 출병했던 소사업(蕭嗣業)의 부대를 회군시켜서 선악도행군으로 긴급히 편성하였고 설인귀·손인사·유심례 등을 부총관으로 참전시켜 철륵과의 전쟁에 나섰다. 하지만 정인태가 이끄는 당의 철륵도행군은 전멸을 당해 당은 큰 위기에 빠졌고 이를 타개하기 위해 철륵 출신의 계필하력(契苾何力)의 정예 요동도행군 마저도 철륵 전선에 추가 투입을 위해 긴급히 군사를 철수하라는 조서가 있었으므로 계필하력이 이끄는 주력 요동도행군도 다시 바다를 건너 당으로 돌아가야 했다.
또한 661년의 겨울은 빨리 찾아왔고 무척이나 추웠다. 이렇게 갑작스러운 철륵의 반란에 따른 당나라 내부 문제가 발생하여 고구려에 출정했던 상당수의 부대가 이미 급히 당나라로 회군하자, 해상으로 대거 침입하여 평양성을 포위한 소정방의 평양도행군·임아상(任雅相)의 패강도행군·방효태의 옥저도행군 등의 당의 대부대는 이제 역으로 적국 한가운데에서 완전 고립상태에 빠진다. 허를 찌르는 해상으로의 고구려 내부 깊숙히 침공한 작전은 좋았지만 갑작스럽게 상황이 바뀌자 이젠 오히려 적국 한가운데 깊숙히 고립되어 사지에 빠진 상태가 되었다.
게다가 고구려 국토의 중단 부분이었던 요충지 압록강 하구를 점령했던 계필하력의 요동도행군의 철수하여 완전히 고립되어 버렸다. 마치 2차세계대전의 독소전 당시 소련 내부에 깊숙히 진입했다가 퇴로가 끊겨서 소련군에게 포위되어 전멸 위기를 당한 스탈린그라드 전투의 프리드리히 파울루스의 독일군의 형국과 비슷했다. 당의 군사들은 무릎을 끌어안고 곡소리를 했다고 기록에 나와 있을 정도로 절망적인 상황에 빠진다. 소정방은 함자도총관 유덕민을 긴급히 신라에 보내어 식량 및 군사 원조를 요청한다. 1년 전 660년 백제 침공 때 순식간의 해안의 백제 군을 요격하고 백제의 수도 사비성을 함락했던 때 와는 상황이 너무나도 달랐다. 고구려의 수도 평양성은 견고했고 장기전으로 이어졌고 이것은 때 이른 고구려의 겨울의 추위를 맞게 되어 따뜻한 중국 남부에서 징발되었던 당의 침공군을 더욱 힘들게 하였다. 또한 압록강 부근에 진주했던 계필하력의 정예 요동도행군의 철수로 요동지역과의 단절이 해제되면서 북쪽의 정예 고구려 군이 대단위로 수도 평양성으로 몰려올 수 있었다. 이제 당의 대군은 각지에서 몰려드는 고구려의 대군에 역으로 포위되어 전멸 위기에 놓이게 되었다.
한편 바다로 직접 건너온 방효태가 지휘하는 옥저도행군은 중국 영남지역의 수군으로 구성되어 있었으며 상륙하여 패수, 현재 대동강 상류의 사수 부근에 주둔하였다. 임아상(任雅相)의 패강도행군과 소정방의 평양도행군은 평양성을 포위하고 있였다.
661년 보장왕 20년 12월, 날씨가 몹시 추워서 패수가 얼어 붙었고 당나라 군대가 높은 망루가 있는 수레인 운차와 성문을 깨뜨리는 충팽을 앞세우고 북과 징을 울리며 공격해왔다. 고구려 병사들은 용감하고 씩씩했으므로, 총반격에 나서서 당군을 크게 물리치고 당군의 두 진지를 빼앗았다. 이제 당은 다만 두 진지만이 남아 있었으므로, 다시 추가로 총공격하여 밤에 빼앗을 계획을 세워놓고 있었다.
661년의 겨울은 빨리 찾아왔고 무척이나 추웠다. 게다가 갑작스러운 철륵의 반란에 따른 당나라 내부 문제가 발생하여 고구려에 출정했던 상당수의 부대가 이미 급히 당나라로 회군하였다. 따라서 해상으로 대거 침입했던 소정방의 평양도행군, 임아상의 패강도행군, 방효태의 옥저도행군 등의 당의 대부대는 이제 완전 고립상태에 빠진다. 허를 찌르는 해상으로의 고구려 내부 깊숙이 침공한 작전은 좋았지만 갑작스럽게 상황이 바뀌자 이젠 오히려 적국 한가운데 깊숙히 고립되어 사지에 빠진 상태가 되었다.
게다가 압록강 하구를 점령했던 계필하력(契苾何力)의 요동도행군의 철수로 육로로의 식량보급도 끊겨 버렸다. 마치 2차세계대전의 독소전 당시 소련 내부에 깊숙히 진입했다가 퇴로가 끊겨서 소련군에게 포위되어 전멸 위기를 당한 파울루스 독일 집단군의 형국과 비슷했다. 당의 군사들은 무릎을 끌어안고 곡소리를 했다고 기록에 나와 있을 정도로 절망적인 상황에 빠진다. 소정방은 함자도총관 유덕민을 긴급히 신라에 보내어 식량 및 군사 원조를 요청한다. 1년 전 660년 백제 침공 때 순식간의 해안의 백제 군을 요격하고 백제의 수도 사비성을 함락했던 때와는 상황이 너무나도 달랐다. 고구려의 수도 평양성은 견고했고 때이른 고구려의 겨울은 추위와 고립으로 당의 대군은 전멸 위기에 놓이게 만들었다.
662년 보장왕 21년 2월, 드디어 고구려 군은 각지의 부대를 모아 각각 고립된 당의 대군에 총공격을 나선다. 특히 방효태가 이끄는 옥저도행군은 따듯한 중국 남부 영남지역의 부대로 고구려의 추위를 견디기 더더욱 어려웠다. 대막리지 연개소문의 지휘하에 고구려의 대군은 당의 임아상의 패강도행군, 방효태의 옥저도행군을 공격하여 완전히 몰살시켰다. 이 전투에서 패강도행군은 완전히 무너졌고 대총관 임아상은 행방불명되었다. 한편 옥저도행군 대총관 방효태는 그의 부장들이 포위망을 뚫고 유백영이나 조계숙의 다른 진영으로 탈출하기를 권하였으나 방효태는 '유백영등이 어떻게 나를 구원하겠는가? 또 내가 데리고 온 향리 자제 5천여명이 이제 모두 죽었는데 어찌 나 한 몸만 살아남길 구하겠는가?' 하였다. 이어서 연개소문이 이끄는 고구려 군이 육박하여 공격하니 죽은 자가 수만명에 달했고 방효태는 몸에 화살이 고슴도치처럼 집중되어 그 아들 13인과 방효태가 이끈 옥저도행군은 사수에서 몰살하였다.
당군의 고구려 협공 요청에 따라 신라 군이 평양으로 향하던 도중, 평양을 포위하고 있던 소정방으로부터의 다급한 군량수송 요청이 함자도총관 유덕민을 통해 들어왔다. 적지에 들어가 군량을 수송하고 돌아와야 하는 어려운 작전에 누구도 자원하려는 자가 없는 가운데, 김유신이 스스로 임무를 수행하겠다고 자청해왔다. 문무왕은 기뻐하며 곧 떠나려는 김유신에게 "국경을 넘어서부터, 상벌은 마음대로 하라(出疆之後 賞罰專之可也). " 라고 하는 면책특권을 주었다. 12월 10일에 유신은 군량 수송을 위해 부장군 김인문·김진복(金眞服)·김양도 등과 함께 쌀 4천 섬과 조(租) 22,250섬을 당군 진영까지 수송할 수송부대를 이끌고 고구려 국경으로 들어갔다.
662년 보장왕 21년 2월 16일(음력 정월 23일)에 칠중하(七重河)를 건넜다. 김유신은 고구려 군이 큰길에서 지킬 것을 염려해 일부러 험하고 좁은 길을 택해 나아갔는데, 이따금 길에서 적병을 만나 싸워서 이기면서 장새(獐塞, 현 황해도 수안군 일원)의 험한 곳에 이르렀다. 겨울의 혹한에 사람과 말이 지치고 피곤해 쓰러지는 자가 속출하는 앞에서 김유신은 웃옷을 벗고 직접 채찍을 잡고 말을 몰아 앞에서 사람들을 이끌었다. 그렇게 험한 길을 빠져나와 휘하의 보기감(步騎監) 열기(裂起)·구근(仇近) 등 15명을 먼저 평양에 보내어 신라 군이 도착했음을 소정방은 알렸는데, 이때 소정방은 난새와 송아지를 종이에 그려 보냈다. 원효(元曉)의 풀이로 이것이 신라 군에게 "어서 군사를 돌리라(速還)"는 암호임이 확인되었고, 양오(楊隩)에 진을 친 유신은 김인문과 김양도·김군승 부자를 보내어 당의 진영에 군량을 보내고, 소정방의 평양도행군은 군량을 받자마자 바로 바다를 통해 다시 대철수 작전을 수행했다. 마치 제2차세계대전 초기, 독일군에 의해 완전 포위된 연합군이 다이나모 작전을 통해 됭케르크에서 세기의 대철수작전을 했던 것과 양상이 같았다.
김유신의 명령으로 당의 진영에 갔던 김양도 등은 따로 군사 8백 명과 함께 뱃길로 귀국했는데, 김유신은 퇴각하는 길에 고구려 군의 기습에 대비해 북과 북채를 모든 소의 허리와 꼬리에 매달아 뛸 때마다 소리를 내게 하고, 또 땔나무를 쌓아 놓고 태워서 연기와 불이 끊이지 않게 해놓는 등의 교란 작전을 펼치면서 밤중에 몰래 표하(瓢河, 임진강)에 이르렀다. 강을 건너기에 이르러 김유신은 "나중에 건너는 놈은 베겠다!"는 명을 내렸고, 군사들이 다투어 강을 건너는데 반쯤 건너자 고구려 병사들이 추격해 와서 미처 건너지 못한 신라 병사들을 잡아 죽였다. 김유신은 다음날 고구려 병사를 뒤쫓아 격퇴하였다. 신라 군이 강나루를 건너 강가에서 쉬는데 고구려 군이 또 다시 강을 건너 공격 해 왔다. 하지만 노련한 백전노장 김유신의 신라 군은 이미 방비가 되어 있었다. 신라 군은 이번에 쇠뇌를 이용한 집단사격으로 고구려 군을 역습했고 추격전을 펼쳤던 고구려 장수였던 소형(小兄) 아달혜(阿達兮)를 사로잡는 전과를 올렸으며 고구려 군을 만여 명이나 쓰러뜨려 패퇴시키고 무사히 신라로 귀환하였다.
제2차 고구려-당 전쟁에서도 고구려는 당나라를 물리쳤지만, 요동지역에서만 전쟁이 치루어졌던 제1차 고당 전쟁때와는 달리 제2차 고당 전쟁때는 당군이 6갈래로 대대적인 침공을 하였으며 후반에는 신라 군도 북진하여 평양성에 합류하였다.
따라서 고구려는 요동지역을 포함, 그 후방인 압록강 이남 지역 전체가 주 전장터가 되었다. 평양성은 오랫동안 포위되었었고 당의 요청에 따라 신라도 침공군을 보내어 북진하여 평양성에 합류하여서 고구려 남부지역을 포함 고구려의 전 지역의 경제 활동에 막대한 피해를 입었다. 한편 당나라는 백제 원정의 성공으로 자신감을 얻어 또 다시 대규모 고구려 원정을 하였으나 도중에 철륵이 봉기하여 철륵과의 전쟁을 치루게 되었고 또 고구려의 강력한 저항에 따른 실패하여 이로 인해 많은 장병과 군수물자를 잃고 피해가 적지 않아 고구려 원정을 사실상 당분간 포기하는 상태가 되었다.
2차 고구려-당 전쟁의 기록은 예전 제1차 고구려-당 전쟁 때보다도 더 남아있는 기록이 빈약하며 대부분이 생략되어 있다. 당나라는 예전 고구려-수 전쟁, 제1차 고구려-당 전쟁 때와 마찬가지로 총 6개 방면 44만군의 거국적인 출병을 하였으나 중국측 사서에는 단지 계필하력(契苾何力)의 요동도행군이 압록강 유역의 고구려 연남생의 부대를 이기고 급히 철군한 것, 그리고 소정방의 평양도행군이 대동강 유역에 상륙하여 평양성을 포위한 것, 사수 대첩으로 전해지는 옥저도행군의 방효태와 그의 아들들이 전멸한 기록 정도만이 짧게 남아 있다. 따라서 육로로 진격했던 소사업(蕭嗣業)의 부여도행군과 정명진의 누방도행군의 요동지역에서의 전투기록과 행적이 전혀 나와 있지 않으며 해상으로 대대적으로 침공했던 계필하력의 요동도행군·소정방의 평양도행군·임아상(任雅相)의 패강도행군·방효태의 옥저도행군의 상세한 이동 및 전투기록이 남아 있지 않아 자세한 전황 및 전쟁의 추이에 대해서는 알 수 없다.
664년에서 666년 사이, 보장왕 23년 ~ 25년 연개소문이 죽고 그의 맏아들 연남생(淵男生)이 부친을 대신하여 막리지가 되었다. 연남생은 아버지 연개소문의 대를 이어 대권을 장악한 뒤, 지방의 여러 성을 순시하였다. 이 틈을 타 동생 2남 연남산(淵男産)·3남 연남건(淵男建)이 정변을 일으켜 수도를 장악하였다. 이후 형 연남생의 아들 연헌충(淵獻忠)을 죽이고 왕명을 빌려 소환하자, 연남생은 국내성(國內城)으로 달아났다. 그 곳 세력을 규합해 고구려 중앙정부에 대한 반격에 나섰다. 먼저 오골성(烏骨城)을 치는 한편 당나라에 대형(大兄) 불덕(弗德)을 보내 구원을 요청하려 하였으나 요동을 통과하지 못하였다. 고구려 평양 중앙정부의 압력이 가해지자, 연남생은 남으로 내려가 고구려 수도 평양을 치는 대신 서북 요동방면으로 진로를 바꾸었다. 연남생은 또다시 대형 염유(冉有)를 다시 당나라에 보내 구원을 청하였으나 회답이 없자, 이번에는 아들 연헌성(獻誠)을 당나라에 보내어 거듭 구원을 청하였다.
666년 6월, 마침내 당 고종이 좌효위 대장군 계필하력(契苾何力)으로 하여금 군사를 거느리고 나가 연남생을 맞이하게 하였다. 연남생은 이에 고질, 고현, 책성도독 이타인, 고족유 등 국내성의 귀족들 및 부하들을 데리고 탈출하여 당 나라로 도주하였다. 666년 6월 7일, 우효위대장군 계필하력을 요동도안무대사로 임명하여 병사를 이끌고 연남생을 지원한다. 연헌성을 우무위장군으로 임명하여 길안내를 맡게 한다.
한편 고구려에서는 666년 8월, 보장왕이 연남건을 대막리지로 삼아 내외의 군사에 대한 직무를 겸직하도록 하였다. 666년 12월, 고구려가 형제간 내부 권력투쟁이 발생하는 동안 연개소문의 동생이자, 연남생·연남건 형제의 숙부인 고구려의 대신 연정토(淵淨土)가 고구려 남쪽의 12성, 763호, 3,543명을 데리고 신라에 투항 해 버렸다. 북쪽에서는 연남생이 당에게, 남쪽에서는 연정토가 신라에게 각각 투항하여 고구려 심각한 내부 분열로 위기를 맞게 된다.
666년 12월, 마침내 당 고종은 이세적(李績)을 요동도행군대총관으로 임명하고, 사열소상백(司列少常伯) 학처준(郝處俊)을 부대총관으로 임명한다. 계필하력(契苾何力)·방동선도 부대총관 겸 안무대사가 된다. 수륙제군총관과 운량사인 두의적(竇義積)·독고경운(獨孤卿雲)·곽대봉(郭待封)등은 이세적의 지휘를 받아서 함께 고구려를 공격한다. 당나라는 하북의 모든 세금을 끌어모아 고구려 침공에 모든 것을 쏟아 붓는다.
중국측의 사서에도 제3차 고구려-당 전쟁의 초기 전투 부분은 기록이 없다. 하지만 당 고종이 고구려 출병을 위한 인사발령을 한 시기가 666년 12월로 보아 적어도 다음 해 667년 봄에는 요하를 건넜으리라고 추측 된다. 하지만 이후에 고구려의 북서쪽 변경 요충지 신성(新城, 지금의 요동성 무순의 북쪽에 있는 고이산성)이 함락되는 시점은 667년 9월이므로 거의 6개월 이상 이세적의 당나라 군대는 신성 전선에서 고구려의 저항을 뚫지 못하고 대치했을 것으로 추측된다.
667년 9월 14일, 오랫동안 외적으로 부터 철옹성이었던 고구려 최고의 요새 신성이 마침내 함락된다. 이세적은 마침내 고구려의 군사요지 신성을 차지하게 되었고, 계필하력(契苾何力)에게 성을 지키게 하였다. 이세적이 처음에 요하를 건너올 때 모든 장수들에게 말했다. "신성은 고구려 서쪽 변경의 요충지이기 때문에 이곳을 먼저 얻지 않으면 다른 성을 쉽게 빼앗을 수 없다. "
과거 모용씨부터 수나라, 당나라에 이르기 까지 수 백 차례의 공격에도 함락되지 않았던 신성은 이번에도 당군의 침공에 역시 오랫동안 강력히 저항하였다. 하지만 적은 내부에 있었다. 신성은 내부의 분열로 함락되었다. 신성 사람 사부구 등이 끝까지 용맹하게 항전하던 신성 성주를 결박하여 성문을 열고 나와 항복하였다. 이세적이 군사를 이끌고 계속 진격하자 16개 성이 모두 항복하였다.
신성은 전략적으로 아주 중요한 곳이었다. 그러나, 이세적은 금방 얻은 신성의 방어에 소홀하였다. 고구려의 요충지였던 신성의 수복을 위해 대막리지 연남건이 신속하게 군대를 보내어 곧바로 반격을 개시하였고 신성의 당군을 야습하였다. 하지만 신성의 방동선과 고구려 항장 고간의 당군이 위기에 처했을 때 설인귀가 병사를 이끌고 미친듯이 달려갔다. 그리하여 열세에 있던 당나라 군은 졸지에 우세로 바뀌어 반격하였고, 가까스로 신성의 당군을 위기에서 구해냈다.
신성을 함락시키고 집결한 당의 대군은 667년 10월, 당나라 방동선과 고구려 항장 고간을 선봉으로 동남쪽으로 진공을 시작한다. 이에 맞서 고구려 또한 대막리지 연남건은 요충지였던 신성을 회복하기 위해 고구려의 주력이자 정예부대 20만 대군을 모두 소집하여 당의 군대를 요격하려 보냈다.
마침내 고구려의 20만 대군은 동남쪽으로 진공하던 방동선과 고간의 당나라 선봉 부대를 금산에서 만나게 되었고 곧이어 치열한 격전이 벌어진다. 방동선과 고간의 당나라 군대는 갑작스러운 고구려 대군에게 밀려 크게 대패하고 도망치고 이에 승기를 잡고 고구려 군이 계속하여 추격하였다. 하지만, 또 다시 설인귀의 군대가 신속하게 구원하어 나타나 측면에서 갑작스러운 반격에 나섰고, 이에 고구려 군은 혼란에 빠져 크게 패하여 5만명을 잃고 무너져 후퇴하였다.
고구려의 주력 대군에 반격을 가하여 후퇴시킨 설인귀, 방동선, 고간의 당나라 군은 이제 승리를 틈타 남소(南蘇, 지금의 요동 무순 동쪽 소자하와 혼하가 만나는 곳), 목저(木底, 요녕 신빈 서목기진), 창암(蒼巖, 국내성 서쪽)의 3성을 신속히 점령하고, 고구려를 떠나 당에 투항했던 연남생의 고구려 군대와 마침내 회합하게 된다. 이제 당의 군대는 당에 투항한 연남생의 고구려 군과 연합되어 금산에서 대치하고 있는 고구려 대군과 다시 격돌하게 된다.
자세한 전투기록은 중국측 사서에도 나와 있지 않지만 당에 항복한 연남생의 고구려 군을 포함하여 모두 집결한 이세적의 당나라 대군은 금산(金山)에서 고구려 군과 건곤일척의 대 전투를 치루었으며 고구려 군을 크게 패퇴시켰다. 치열한 전투가 끝난 후 당 고종은 친필서신을 직접 써서 금산전투에서 공이 컸던 설인귀를 위무한다.
금산전투는 당나라 초기에 드물게 보는 대규모 전투였고, 당의 역사서에 나와 있는 당이 고구려와 싸운 4대 전투 중 전쟁의 향방을 가른 가장 중요한 전투였고, 과거 제1차 고구려-당 전쟁 때의 주필산 전투와 같은 고구려와 당의 대군이 격돌한 대규모의 전투였다.
이로써 과거 수나라의 고구려 정벌, 당나라의 제1차 침공 때와 같은 전통적인 중화 왕조의 동방 침입 루트에 대한 고구려의 천리장성 방어선은 아직 요동 남단의 안시성, 건안성들이 건재하였지만 요충지 신성과 그 후방의 주변 남소, 목저, 창암성들이 함락되었고 방어선 실질적으로 고구려의 주 방위선이었던 천리장성 방어선은 붕괴 되었다.
무엇보다도 과거 645년 제1차 고구려-당 전쟁 때는 개모, 요동, 백암 등 요동의 주요 성들이 함락 되었지만 고구려 주력부대는 보존되어 안시성 근처 주필산에서 당나라의 군대와 대치하고 있었고, 661년 제2차 고구려-당 전쟁 때는 비록 압록강 유역에서 연남생이 이끄는 고구려 군대가 궤멸하고 수도 평양성이 포위되었지만 역시 고구려의 주력부대는 요동에 존재하고 있어 당나라 군대의 작전 행동에 제약이 있을 수 밖에 없었다. 하지만 제3차 고구려-당 전쟁에서는 요충지 신성의 함락과 연남생이 이끄는 투항세력에 이어 금산전투를 통하여 기본적으로 고구려 군의 주력 정예부대는 소멸되어 버렸고 이후 전쟁의 전개는 당과 고구려의 군사적 균형이 무너져 고구려의 일방적인 열세로 돌아서게 된다.
신성과 주변 16성을 함락시키고 금산전투에서 고구려 주력 대군과 격전을 치루어 소멸시켰지만 여기서 당군은 과거 제1차 고구려-당 전쟁 때처럼 바로 남하하지 않고 오히려 방향을 바꾸어 북쪽으로 진군할 계획을 세운다. 북쪽의 고구려 후방지역을 급습하여 후방을 안전히 하고 남하하려 하였다.
667년 11월 하순, 당군의 설인귀는 2000명의 현갑기(당나라의 정예병)병을 데리고, 전진하여 부여성으로 향한다. 부하 장수들은 극력 반대했다. 병력이 너무 적다는 이유에서이다. 그러나 설인귀는 "병사는 많아야 하는 게 아니라, 어떻게 써야하는 것이 중요하다."라고 하고 병사를 데리고 신속히 이동했다.
한편 고구려의 부여성에서는 10만에 가까운 고구려 군대를 신성으로 다시 보내어 잃어버린 전쟁의 주도권을 되찾아 오고자 했다. 하지만 고구려 군은 당나라 군이 이렇게 빨리 도착할 줄은 몰랐다. 겨울인데다 동북이어 하얀 눈이 내린 곳에서 갑자기 설인귀의 2000명 현갑기병은 모두 흰 옷을 입고 고구려 군의 진영으로 뛰어 들어 기습하였다. 고구려 군은 백색의 옷을 입은 당나라 군이 예상치 못하게 갑자기 쳐들어 오자 크게 혼란에 빠졌고, 결국 2만여의 병사를 잃고, 나머지 7만여의 병사들은 부여성으로 되돌아가서 수비를 하게 된다. 2000명을 이끌고 전진한 설인귀는 668년 2월 20일 부여성을 기습하여 점령하였다. 이에 크게 놀란 부여천 안에 있는 부여성 주변 40여 성이 모두 항복하기를 요청하였다.
이렇게 북쪽의 부여성과 주변 40여성이 함락되어 고구려는 이제 북쪽지역의 예비 병력자원의 손실하게 되어 더더욱 전력의 열세를 초래하게 되었다. 아직 요동 남쪽지역의 안시성, 건안성 등의 요충지들은 함락되지 않고 저항하고 있었지만 한편 당나라는 과거 고구려-당 제2차 전쟁 때와 같이 바다를 건너서 해상으로도 대부대를 보내어 대대적인 침공을 동시에 시행하고 있었다.
2차 고구려-당 전쟁 때와 마찬가지로 당나라는 해상을 통해서도 대대적으로 침공한다. 특히 고구려의 요충지였던 압록강 하구와 수도 평양은 과거 당나라가 수 차례 해상을 통하여 침공을 했었다.
당나라는 곽대봉의 지휘하에 수군을 이끌고 바다를 통하여 평양으로 직공한다. 이세적은 별장 풍사본을 파견하여 곽대봉에게 군량과 병기를 공급케 하였는데, 풍사본의 배가 파괴되어 약속 기일을 놓쳤으므로 곽대봉의 진영에서 군사들이 굶주렸다.
이에 따라 그가 이세적에게 편지를 보내려다가, 만일의 경우 적에게 발견되어 내부의 허실이 알려질까 두려워 이합시를 지어서 이세적에게 보냈다. 이세적이 이를 보고 노하여 말하기를 "군사의 일이 바야흐로 위급한데 시가 도대체 무엇인가? 필히 목을 베겠다. "라고 하였다. 행군 관기 통사 사인 원만경이 그 시의 뜻을 해석하여 주었다. 이세적은 그 때서야 다시 군량과 병기를 곽대봉에게 보냈다. 원만경이 편지를 써서 말하기를 "압록강은 고구려의 요충지인데 고구려는 지킬 줄 모르는가?"라고 비웃었다.
하지만 이 서신을 보낸 사자가 고구려 군에게 잡혔고 이를 보고 고구려 총사령관 대막리지 연남건은 회보하기를 "삼가 명령을 듣겠다."라고 하고, 즉시 고구려 군사를 옮겨 압록강 나루에 진을 쳤다. 이에 따라 당 나라 군사가 압록강을 건너오지 못하고 교착상태에 빠졌다. 이 곳의 전략적 중요성 때문에 지난 제2차 고구려-당 전쟁 때도 대막라지 연개소문은 연남생에게 정예병을 주어 방어하고 있던 곳이다. 후에 당 고종은 이 말을 듣고 경솔한 행동으로 이적행위를 한 원만경을 영남으로 유배하였다.
이로써 고구려는 제1차 요하 방어선, 제2차 천리장성 방어선 (요동반도의 천산산맥을 중심으로 연결된 고구려 성의 방어선)이 모두 무너졌으나 최후의 보루 제3차 압록강 방어선을 구축했다. 하지만 국내성 등 압록강 중류지역의 과거 연남생의 세력권이었 곳은 이미 당나라와 호응하고 있었기에 근본적으로 방어하기엔 이미 한계가 있었다.
한편 당나라 시어사 가언충이 임무를 받들고 요동전선에서 당나라로 귀국하였다. 당 고종은 "군대 내부 상황이 어떠한가?"라고 물었다. 그가 대답하였다. "반드시 승리할 것입니다. 이전에 선제께서 고구려에 죄를 물었을 때 뜻대로 되지 않은 것은, 적에게 빈틈이 없었기 때문입니다. 속담에 '군대에도 중매잡이가 없으면 중도에 돌아선다'는 말이 있습니다. 이제 남생이 형제끼리 싸워 우리의 향도가 됨으로써, 적의 내부 상황을 우리가 모두 알고 있으며, 또한 장수들은 충성스럽고 군사들은 힘을 다하고 있기 때문에 반드시 승리한다고 말씀드리는 것입니다. 그리고 고구려의 [비기]에는 '9백년이 되기 전에 80대장이 있어 고구려를 멸망시킨다'라는 말이 있는데, 고씨가 한 나라 때 나라를 세워 지금 9백 년이 되었고, 이적의 나이가 80입니다. 적들은 거듭 흉년이 들고, 백성들은 항상 수탈을 당하고 팔려갔으며, 지진으로 땅이 갈라지고, 이리와 여우가 성에 들어오고, 두더지가 문에 구멍을 뚫으며, 인심이 흉흉하니, 이번 원정이 마지막이 될 것입니다. "
668년 보장왕 27년 봄 정월, 이에 크게 고무된 당 고종은 이번이 고구려정복을 위한 마지막 기회라 여기고 당나라의 남은 모든 국력을 쏟아 붓고자 우상 유인궤를 요동도부대총관으로 삼고, 학처준과 김인문 등으로 하여금 그를 보좌하게 하여 추가로 병력을 파병하였다.
추가로 파병된 유인궤가 이끄는 당나라 요동도부대는 압록강 전선에서 고착화되어 있는 이세적, 연남생 등의 당의 대군과 합류하려 빠르게 진군한다. 선봉부대 중 하나인 학처준의 부대는 안시성 부근에 도달하였다. 학처준의 당군이 안시성 부근에 진을 치고 아직 군사 대열을 짓지 못하였을 때, 안시성의 고구려 군사 3만 명이 용맹하게 공격하니 당나라 군사들이 크게 패하였다. 학처준은 의자에 앉아서 한참 마른 밥을 먹던 도중에, 고구려의 맹렬한 공격을 받자, 정예 군사를 선발하여 고구려 군사를 겨우 물리치고 후퇴하였다. 이후 유인궤, 학처준의 부대는 이세적의 부대에 다같이 합류하여 압록강을 도하한 것으로 보아 안시성 등 요동지역에서 격렬히 저항하는 고구려의 성들을 함락시키지 못하고 그대로 통과하여 압록강 전선에서 고구려 군과 대치하던 이세적의 부대에 합류한 것으로 추정된다.
한편 668년 여름 4월, 혜성이 필성과 묘성 사이에 나타났다. 이 때 당나라에 있던 허경종이 "혜성이 동북방에 보이는 것은 고구려가 장차 멸망할 징조이다"라고 말하였다.
한편 고구려 대막리지 연남건은 이번에는 부여성을 구원하기 위하여 또 다시 군사 5만 명을 부여성 방면 북쪽으로 보냈는데, 남하하는 이세적이 이끄는 당나라 대군과 설하수에서 조우하여 큰 격전이 벌어졌고 고구려 군이 크게 패하여 사망자가 3만여 명이나 되었다.
과거 손자병법의 손자, 한니발, 나폴레옹, 롬멜 등 고대 부터 중세, 근대에 이르기 까지 명장들의 군대의 운용은 자신의 부대를 최대한 집중시킨 후 적의 부대를 분산시켜 왔다. 하물려 병력의 수적 열세의 상황에서도 적은 수의 부대를 집중하여 운영하여 많은 수의 적군을 개별 격파하였다. 하지만 안타깝게도 이 시점의 고구려 군의 총사령관이었던 대막리지 연남건은 집중과 타격이라는 병법의 첫 번째 원칙과는 무관하게 지속적으로 군대를 곳곳에 분산하였고, 무엇보다 이미 주력부대의 궤멸로 병력이 부족한 상황임에도 적의 대부대를 막고자 곳곳으로 전력을 분산하는 악수를 두었고 결국 도처에서 패전하고, 이후에라도 반격을 할 수 있는 여력까지 모두 상실하는 결과를 가져오게 되었다.
이제 당나라 부대를 총지휘하는 이세적은 이 기세를 몰아 대행성으로 진격하였다. 이세적의 당군은 대행성에서도 고구려 군을 물리치고 함락시켰고, 이제 다른 도로 출동 하였던 모든 당나라 군들이 모두 이세적의 부대에 합류하여 압록책으로 진군하여 왔다. 대행성에서 필사적으로 대적하여 싸웠으나 패하였던 고구려 군은 이미 기세에서 밀려 대거 남하하던 이세적 등의 당나라 대군에게 쫓겨 압록강 남쪽으로 밀려나고 말았다. 이로써 아직 요동지역 서남부의 안시성 등 많은 성들이 여전히 저항하고 있었지만 고구려의 최종 방어선 압록강 전선은 완전히 무너졌다.
압록강 전선을 돌파한 이세적 등이 이끄는 당나라 대군은 압록강 전선에서 계속 후퇴하던 고구려 군을 추급하여 압록강 건너 2백여 리를 추격해 와서 고구려의 성을 함락시키고 동이족을 욕보였다는 의미로 이름을 욕이성(辱夷城)이라고 개칭 하였다. (정확한 위치는 알 수 없으나 압록강에서 남쪽으로 200리 라는 기록으로 볼 때 지금의 청천강 중류의 평안남도 안주로 추정된다)
한편 당나라 고종은 고구려를 협공하기 위해 신라에게도 군사를 징발케 하여 남쪽으로 부터 진군하게 하였다. 이에 신라 문무왕은 호응하고자 김흠순(金欽殉)·김인문(金仁問)을 장군으로 임명하여 군사를 출동시켰다. 이 때 김유신은 병중이라 출진하지 못하였다. 668년 음력 6월, 고구려의 남부의 군사 요충지였던 대곡성(大谷城)·한성(漢城) 등 2군 12성이 항복하였다. 특히 고구려 한성(현재 황해도 재령·사리원으로 추정된다)은 국내성·평양성과 더불어 고구려의 3성이라고 불리던 고구려 남부의 정치·경제·군사·인구의 중심지였다.
8월 12일(음력 6월 29일), 신라 군은 이제 고구려 수도 평양을 향하여 북진을 시작하였고 이미 곳곳에서 고구려 군이 항복하여 특별한 저항 없이 평양성 부근까지 북진하였다. 7월 신라 군은 평양 부근 사천벌에 도달하였고 그제서야 고구려 군이 반격을 시작한다. 크게 격전이 벌어졌으나 고구려 군이 크게 패하였다. 계속 북진하던 신라 군은 마침내 668년 10월 31일(음력 9월 21일), 평양에 주둔하고 있는 당나라 군대와 합류하여 평양성을 포위하였다.
오랜 전쟁으로 국토 전역이 시달린 고구려는 이미 북쪽과 남쪽 곳곳의 여러 성에서 도망하고 항복하는 자가 부지기수였다. 계필하력(契苾何力)이 먼저 군사를 이끌고 평양성 밖에 도착하고, 이세적의 휘하의 당의 대군이 도착했으며 이 때 연남생이 이끄는 당에 투항한 고구려 군도 포함되어 있었다. 곧이어 신라 군도 합류하여 당나라, 신라의 연합군은 한 달이 넘도록 평양을 포위하였다. 마침내 보장왕은 연남산으로 하여금 수령 98명을 거느리고 성 밖으로 나가 백기를 들고 이 적에게 항복하게 하였다. 이세적은 예를 갖추어 접대하였다.
하지만 항복하려는 보장왕과 달리 대막리지 연남건은 끝까지 항복하지 않으며 성문을 닫고 수비하며 대항하였다. 연남건은 자주 군사를 성 밖으로 출동시켜 싸웠으나 그 때 마다 패배하였다. 연남건은 승려 신성(信誠)에게 군사에 관한 일을 맡겼다. 신성은 소장 오사·고요묘 등과 함께 이세적에게 비밀리에 사람을 보내 내응하겠다는 뜻을 전했다. 5일 뒤에 신성이 성문을 열었다. 이세적은 군사를 풀어 성위에 올라가 북을 치고 함성을 지르며 불을 지르게 하였다. 당나라 군과 연남생의 투항한 고구려 군, 그리고 신라 군이 성안으로 쇄도하여 대격전이 벌어졌다. 연남생을 따라 당에 항복한 고구려 군 중에 용맹이 뛰어난 고현도 최선봉에 서서 평양성에 난입하였으며 난전 중에 평양성 군주 술탈은 신라 군과의 교전중에 전사하였다. 한편 대막리지 연남건은 스스로 칼을 들어 자신을 찔렀으나 죽지 않았다. 마침내 당나라 군사가 보장왕과 연남건 등을 붙잡았다. 수뇌부가 항복했음에도 불구하고 남아있던 고구려 병사들은 여전히 당나라에 대항하여 싸웠지만, 결국 고구려는 멸망하고 말았다.
668년 12월, 포로가 되어 당에 끌려간 보장왕은 사평태상백원외동정, 연남산은 사재 소경, 당군과 내통하여 평양성문을 열었던 승려 신성(信誠)은 은청 광록대부, 연남생은 우위 대장군, 연남생을 따라 당에 투항하여 평양성 공격에 선봉에 섰던 고현은 의성부 좌과의도위 총관이 되었다. 그리고 마지막까지 저항했던 대막리지 연남건은 검주로 유배시켰다. 고구려 지역의 5부, 176성, 69만여 호를 나누어 9도독부, 42주, 1백 현으로 만들고, 평양에 안동 도호부를 설치하여 고구려를 통치하게 하였다. 우위위 대장군 설인귀를 검교안동도호를 삼아, 군사 2만 명을 거느리고 이 지역을 진무하게 되었다.
비록 수도 평양이 함락되며 보장왕이 항복하고 고구려는 멸망했지만 아직 안시성을 비롯한 요동지역의 많은 성을 비롯하여 여러 곳에서 당에 항복하지 않고 아직 항전하고 있었고, 특히 고연무·검모잠·고정문 등의 각지의 고구려 지도자들은 구국 운동을 벌이며 치열한 대당 항쟁을 하게 된다. 그리고 이 성들의 저항으로 훗날, 고구려를 계승한 발해의 건국으로 마침내 꽃을 피우게 된다. 심지어 발해는 해동성국이라고도 불릴정도로 성장하였다.
4차례에 걸린 핵폭탄과같던 고수전쟁으로 고구려의 국력은 크게소진되어있었다. 이 엄청난 피해에 더불어 30년만에 다시 당나라가 중원을 통일하고 쉬지않고 침략전을 강행해오니 고구려는 그야말로 터지기 직전이였다.. 고수전쟁시절만하더라도 단 1개의 성도 뺏기지않을만큼 국력이 강성했으나 고당전쟁때 요수를 지키지도 않고 비사성같은 수군최대요새가 금방함락되거나 복속된 이민족들의 대다수가 이탈하는걸보면 국력이 소진될때로 소진되었다가 집권층의 분열이 큰 타격이되어 멸망해버린것같다.
그래도 고대 한국의 국가들끼리 비교해볼때 유일하게 중원의국가들과 군사적인 규모 등에서 밀리지않는 (예를 들어 당나라가 주력부대 30만으로 쳐들어오면 고구려도 그에 버금가는 주력부대20만을 동원할정도) 정도로 강했던 나라였다.