국권상실을 전후해 간도와 연해주지방으로 옮겨온 의병 출신의 애국지사와 교민들은 각기 독립운동단체를 결성하고 독립군기지를 설치해 장차 독립전쟁에 대비한 독립군을 양성하고 있었다. 간도지방의 독립군부대는 1919년의 3 · 1운동을 계기로 더욱 활발한 활동을 벌여나갔다.
1919년 8월에 서일(徐一) · 김좌진 · 이장녕(李章寧) · 김규식(金奎植) · 최해(崔海) · 정훈(鄭勳) · 이범석 등이 조직한 북로군정서는 북만주 일대 독립운동의 중심이었다. 북로군정서는 국경에 가까운 밀림지대인 길림성 왕청현(吉林省汪淸縣) 서대파구(西大坡溝)에 본부를 두고 있었으며, 사관연성소(士官練成所)를 설치해 독립군을 양성하였다.
1919년 8월 이후에는 의병장 출신인 홍범도가 이끄는 대한독립군 및 국민회군 등이 국경을 넘어와 일본군과 격전을 벌이고 철수하는 일이 종종 있었다. 유명한 봉오동전투(鳳梧洞戰鬪)도 독립군의 침공작전에 시달린 일본군이 그 근거지를 공격하다가 패배한 전투였다.
이처럼 활발한 독립군의 활동에 커다란 위협을 느낀 일본은 간도지방의 독립군을 소탕할 방법을 찾기 위해 고심하였다. 그러던 중 1920년 10월의 혼춘사건(琿春事件)을 조작, 이를 구실로 간도에 대규모의 병력을 파견하였다. 일본군의 간도 출병에 앞서 중국군측으로부터 독립군 ‘토벌’ 방침을 통고받은 독립군부대들은 봉천성(奉天省)의 경계지역인 화룡현(和龍縣)의 이도구(二道溝) · 삼도구(三道溝) 방면으로 이동하였다.
이와 함께 북로군정서도 일단 안도현(安圖縣)으로 이동해 서로군정서와 합류한 다음 백두산 지역에 기지를 새로이 건설한다는 방침을 세우고 9월 17일부터 이동을 시작하였다. 연길현(延吉縣)을 거쳐 화룡현 서부지역으로 이동한 북로군정서부대는 10월 10일경안도현 경계지역인 삼도구 청산리에 도착하자, 부근의 이도구로 이동해 있던 홍범도부대와 더불어 일본군의 간도 출병에 대한 대책을 협의하였다.
10월 19일의 회의에서는 일본군과 싸워야 한다는 주전론과 일본군과의 싸움을 피해야 한다는 피전론이 맞섰으나, 여러 가지 이유로 피전론이 채택되었다. 그런데 이 때 이미 일본군이 부근까지 진출해 있었기 때문에 독립군부대는 일본군을 피하기 위해 병력을 급히 후방으로 이동시켰다. 김좌진부대는 계속 일본군의 동태를 파악하면서 자제했으나, 추적을 따돌릴 수 없다고 판단해 일본군과 일전을 감행하기로 결정하였다.
10월 21일 비전투원들로 편성된 제1제대와 전투요원으로 편성된 제2제대는 각각 김좌진과 이범석의 지휘 하에 청산리 백운평(白雲坪) 바로 위쪽의 고개마루와 계곡 양쪽에 매복, 전투준비에 돌입하였다. 청산리계곡은 동서로 약 25㎞에 달하는 긴 계곡으로서, 계곡의 좌우는 인마(人馬)의 통행이 곤란할 정도로 울창한 삼림지대였다.
오전 9시경 야스가와(安川)가 이끄는 추격대가 계곡의 좁은 길을 따라 이범석부대의 매복지점으로 들어서자, 매복한 독립군들은 일제사격을 가해 일거에 그들을 전멸시켰다. 뒤이어 야마타(山田)가 지휘하는 본대가 그 곳에 도착하면서, 독립군과 사이에 치열한 총격전이 벌어졌다.
그러나 일본군은 유리한 지형을 이용한 독립군의 상대가 될 수 없었다. 독립군의 정확한 조준사격에 견디지 못한 일본군은 200명이 넘는 전사자를 남긴 채 패주하였다. 김좌진은 이범석에게 명령을 내려, 패주하는 적을 추격하지 말고 부대원을 이끌고 갑산촌(甲山村)으로 철수하도록 하였다.
김좌진부대가 철수하던 시각에 그 곳에서 얼마 안 떨어진 이도구 완루구(完樓溝)에서는 홍범도부대가 일본군의 공격을 받고 있었다. 홍범도부대는 한때 남북으로 협공하는 일본군의 포위 속에 빠졌으나 재빨리 빠져나왔다. 그리고 중앙으로 진격한 일본군의 한 부대를 공격해서 결과적으로 일본군의 다른 부대와 함께 중앙의 일본군을 협공하는 데 성공하였다.
결국, 오후 늦게부터 시작되어 다음 날 새벽까지 계속된 전투에서 일본군 한 부대 400여명이 전멸당하였다. 독립군과 일본군은 군복의 색깔이 거의 같았기 때문에 일본군이 자기 부대를 독립군으로 오인했던 것이다.
한편, 22일 새벽갑산촌에서 합류한 김좌진부대의 제1 · 2지대는 그 곳 주민들로부터 부근의 천수동(泉水洞)에 일본군 기병대가 머물고 있다는 정보를 입수하자, 그 곳으로 이동해 일본군 기병중대를 전멸시켰다. 이들은 독립군부대를 공격하기 위해 어랑촌(漁郎村)에 주둔하고 있던 아즈마(東正彦)부대의 일부였다.
일본군 대부대의 반격이 있으리라 생각한 김좌진은 부대원을 어랑촌 부근의 고지로 이동시켜, 오전 9시부터 포위공격해오는 일본군을 막아냈다. 이 때 부근에 있던 홍범도부대도 포위되어 있던 김좌진부대를 도와 일본군과의 전투에 참가하였다. 어랑촌 일대의 치열한 접전에서 독립군은 일본군의 공격을 약화시키며 커다란 승리를 거두었다.
날이 저물자 김좌진부대와 홍범도부대는 추격하는 적을 최종적으로 분쇄하고 철수하기 시작하였다. 다음 날인 23일부터 이들은 추적하는 일본군 수색대와 산발적인 접전을 벌이면서 고동하(古洞河)를 따라 상류로 이동하였다. 독립군의 행방을 추적하던 일본군은 25일 밤 고동하계곡의 독립군 야영지를 포착하고 급습하였다.
불의의 습격을 당한 독립군은 어둠을 이용해 신속히 대피하였다가 전열을 정비, 진지를 점령한 일본군을 역습하였다. 독립군이 사방을 포위하고 사격을 가하자 공수(攻守)가 바뀐 데 당황한 일본군은 많은 사상자를 내면서 고지로 퇴각하였다. 후퇴한 일본군이 새벽에 방어태세를 갖추자 독립군은 이들을 버려둔 채 안도현 지역으로 이동하였다.
이와 같이 10월 21일부터 시작된 청산리대첩에서 독립군은 26일 새벽까지 10여 회의 전투를 벌인 끝에 적의 연대장을 포함한 1,200여 명을 사살하였고, 독립군측은 전사자 100여 명을 내었다.
청산리대첩은 독립군이 일본군의 간도 출병 후 그들과 대결한 전투 중 가장 큰 규모였으며, 독립군이 최대의 전과를 거둔 가장 빛나는 승리였다. 이 전투에 참가한 주력부대의 하나인 북로군정서군의 병력은 그 해에 사관연성소를 졸업한 298명을 포함해 약 1,600명이었고, 무기는 소총 1,300정, 권총 150정, 기관총 7문을 갖추고 있었다.
전투에 참가한 간부는 총사령관 김좌진, 참모부장 나중소, 부관 박영희(朴寧熙), 연성대장 이범석, 종군장교 이민화(李敏華) · 김훈(金勳) · 백종렬(白鍾烈) · 한건원(韓建源), 대대장서리 제2중대장 홍충희(洪忠憙), 제1중대장서리 강화린(姜華麟), 제3중대장 김찬수(金燦洙), 제4중대장 오상세(吳祥世), 대대부관 김옥현(金玉玄) 등이었다.
또 하나의 주력부대인 홍범도부대는 대한독립군 · 국민회군 · 의군부 · 한민회(韓民會) · 광복단 · 의민단 · 신민단 등이 홍범도의 지휘 아래에 연합한 부대였으며, 그 병력은 약 1,400명이나 되었다.