본관은 진주(晉州). 자는 사백(斯伯). 유운장(柳雲章)의 증손으로, 할아버지는 유세기(柳世基)이고, 아버지는 삼도수군통제사 유진항(柳鎭恒)이다. 어머니는 구식(具侙)의 딸이다.
1774년(영조 50) 무과에 급제한 뒤 1776년(정조 즉위년) 무과중시에 급제하여 선전관이 되고, 1780년 평산부사를 거쳐 1782년 8월 죄인 신형하(申亨夏)를 정배할 때 이를 법대로 다스리지 않았다 하여 도배(徒配)되었다.
1785년 다시 기용되어 경상좌도수군절도사에 승진하였고, 장용영이 설치되면서 병방(兵房)으로서 업무를 주관하였다. 1792년 평안도병마절도사를 거쳐 이듬해 우포도대장이 되었다. 그 뒤 금군별장(禁軍別將)·좌포도대장에 제수되었으나, 1797년 민가의 실화로 인하여 파직되었다가 다시 우포도대장으로 복직되었다. 이어 1804년(순조 4) 삼도수군통제사가 되었다.
1807년 다시 좌포도대장이 되었으나 수하 병졸들의 군기를 문란하게 한 책임을 지고 파직되었다. 1811년 다시 기용되어 홍경래(洪景來)의 난이 일어나자 박기풍(朴基豊)을 대신하여, 양서순무사중군(兩西巡撫使中軍)으로 군기를 쇄신한 뒤 정주성을 폭파시켜 난을 평정하였다.
1812년 다시 우포도대장이 되었고, 이 해 6월 난의 평정에 따른 상벌을 논의하는 중 항복한 반군 1,917명을 모두 처형한 것이 문제가 되어 공과상반(功過相半)이라는 것으로 대간에서 삭직을 요청하였다. 다음해 좌포도대장을 지내고 죽었다. 1834년 병조판서에 추증되었으며, 시호는 무숙(武肅)이다.