발해를 멸망시킨 거란(요)은 송나라와 맞서며 고려가 송과 가까운 것을 경계했다. 993년 거란 장수 소손녕이 쳐들어오자 서희가 적진에 가서 담판을 벌였다. 그는 고려가 고구려를 이은 나라임을 밝히고, 여진이 길을 막아 거란과 교류하지 못한다는 논리로 오히려 압록강 동쪽의 강동 6주를 얻어 냈다.
1010년 거란은 고려의 정변을 구실로 다시 침입해 개경을 불태웠고, 현종은 나주까지 피란했다. 고려는 거란 왕의 군대가 돌아가는 길에 양규 등이 반격해 큰 피해를 주었다.
1018년 거란 장수 소배압이 10만 대군으로 세 번째 침입하자, 강감찬이 이끄는 고려군은 흥화진 등에서 적을 괴롭힌 뒤 1019년 돌아가던 거란군을 귀주에서 크게 무찔렀다. 살아 돌아간 거란군은 수천 명에 불과했다고 한다. 이후 고려는 개경에 나성을 쌓고, 압록강 어귀에서 동해안까지 천리장성(1033~1044)을 쌓아 북쪽을 지켰다.