1966년 경기도 용인군 기흥면(현 용인시 기흥구)에서 태어났다. 기흥초등학교, 신갈중학교, 수원 유신고등학교, 고려대학교 농업경제학과를 졸업하였다. 이후 중소기업은행에서 근무하였다.
2006년 제4회 전국동시지방선거에서 열린우리당 후보로 용인시의회 의원 선거에 출마하여 당선되었고, 2010년까지 용인시의회 의원을 역임했다. 한편 2009년부터 2010년까지 민주당 경기도당 대변인을 역임하였다. 2010년 지방선거에서는 용인시장 선거 출마를 희망하였지만, 공천을 받지 못하고 탈락했다.
그러나 새옹지마라고 2011년부터 기흥구 지역위원장을 맡은 후, 2012년 제19대 국회의원 선거에서 윤승용 전 참여정부 청와대 대변인을 경선에서 누르면서 공천장을 확보했다. 그리고 민주통합당 후보로 경기도 용인시 을 선거구에 출마하여 새누리당 정찬민 후보를 꺾고 당선되었다. 이후 민주통합당 정책위원회 부위원장, 새정치민주연합 디지털소통본부 부본부장, 새정치민주연합 교육연수국 부원장 등을 역임하였다. 2012년 대선 경선 정국에서는 손학규의 대변인을 맡았기 때문에 계파적으로는 손학규 계열로 분류된다.
2016년 제20대 국회의원 선거에서 더불어민주당 후보로 경기도 용인시 을 선거구에 출마하여 당선되었다. 용인 토박이라서 지역 기반이 워낙 탄탄했기 때문에 더불어민주당에서 수원-용인 지역, 일명 용수벨트 9개 선거구 중에 처음부터 당선을 장담했던 곳이라고 한다.