어려서부터 학문에 뛰어나 약관의 나이로 사마시에 합격하여 생원이 되었으며, 1660년(현종 1)에 증광시(增廣試)에 병과로 급제하여 승문원(承文院)에 들어갔다. 1664년(현종 5)에 김만균(金萬均)이 할머니의 원수인 청나라의 사신을 접대할 수 없다는 주장을 둘러싸고 이를 비판하는 서필원(徐必遠)과 옹호하는 송시열(宋時烈)을 중심으로 서인 내부에서 공의(公義) · 사의(私義) 논쟁이 발생하였다. 이때 당시 정언(正言)으로 있으면서 서필원에게 동조하였다가 박세당(朴世堂) · 오시수(吳始壽) 등과 함께 오사(五邪)로 낙인찍히고 체직되었으나 곧 지평(持平)으로 제수되었다.
1666년(현종 7), 병자호란 당시 납치되었던 안추원(安秋元)이 도망쳐 나온 일로 청나라 사신에게 현종이 모욕을 당하였는데, 얼마 후 정지화(鄭知和), 민점(閔點)과 함께 동지사 서장관(書狀官)으로 임명되어 일행을 엄하게 단속하여 후환이 없게 하라는 왕명(王命)을 받고 파견되었다. 무사히 임무를 완수하고 돌아와서는 부사직(副司直)으로서, 백성을 아끼고 간언을 받아들이며 근검 절약을 요청하는 등 6개 조항에 대한 응지소(應旨疏)를 올려 마장(馬裝)을 하사받았다.
경신 대기근 속에서 1672년(현종 13)에 이선(李選)과 함께 충청도 수재순시어사(水災巡視御使)가 되어 백성을 구휼(救恤)하는 데 힘썼으며, 대궐의 전각 수리를 반대하고, 문무과 합격자 발표에 신은(新恩) · 창악(倡樂) · 경연(慶宴) 등 사치스러운 행사를 금지하도록 요청하여 허락을 받았다. 숙종 대에 들어서 황해도관찰사와 춘천부사, 그리고 승지를 역임하였다.
학자로서도 문명이 높았으며, 저서로는 『 구봉집(九峯集)』이 있다.