Kim attended Ansan Technical High School in Ansan, Gyeonggi-do, South Korea. In 2004, he led his team to the first national championship ever, pitching four-consecutive complete game victories in the tournament with a 0.96 ERA, and was named MVP.
In 2005, Kim was selected for the South Korea national junior team that was runner-up at the 6th Asian Junior Baseball Championship in Seoul, South Korea. He earned two wins against Chinese Taipei, and pitched a five-inning no-hitter against Japan.
In 2006, Kim competed for the South Korea national junior team in the 22nd World Junior Baseball Championship in Havana, Cuba. He led his team to the gold medal, earning four of South Korea's six wins. Kim tossed a five-hit complete gameshutout to lead South Korea to a 1–0 victory over Chinese Taipei in the quarterfinals, and pitched two wins over Canada in the semifinals and USA in the final. He posted a solid 0.87 ERA and 22 strikeouts throughout the tournament, and was named the Most Valuable Player.
Signed by the SK Wyverns, Kim made his professional debut on April 10, 2007. He was in the Wyverns' starting pitching rotation for most of the 2007 KBO League season. Although his performance was inconsistent, he showed signs of promise as a rookie, including pitching a one-hit victory in 71⁄3 innings over the Doosan Bears, facing MVP Daniel Rios in the 2007 Korean Series.
In the 2008 season, Kim had a career year. He went 16–4 with a 2.39 ERA and 150 strikeouts in 162 innings pitched. Kim ended the season as the KBO League leader for both wins and strikeouts.
At the 2008 Olympic Games, Kim contributed to his team's victories as results of 1–0 with a 1.26 ERA and 12 strike outs in 3 games. In the semifinal game against Japan, he gave up one earned run and six hits in eight innings for Korea to get the victory. Kim did not allow a runner past first base after the 3rd inning, when Japan scored on a walk, a sacrifice and a single by Norichika Aoki.
In March 2009, Kim competed for the South Korea national baseball team in the 2009 World Baseball Classic, where they finished runner-up. He started against Japan in South Korea's first game in Tokyo, Japan, but suffered one of his worst games, giving up eight runs in just 1.1 innings of a 14–2 loss to Japan. Kim couldn't get over the disastrous start in Tokyo, struggling in the exhibition games against MLB teams before the start of Round 2. Command of his pitches became a trouble spot, and Team Korea manager Kim In-sik pitched him in relief until the end of the competition.
On August 2, 2009, Kim was hit with a batted ball hit by Kim Hyun-soo when he had one of the worst pitching performances in his KBO League career, allowing 4 runs in just 2 innings against the Doosan Bears. He suffered a fracture on the back of his hand and he was out for the season as the result. However, he won the 2009 ERA title, pitching 138.1 innings which enabled him enough to qualify for the ERA title.
On November 4, 2014, Kim was posted to MLB. The San Diego Padres won the bidding with a bid of $2 million. However, contract negotiations ended without an agreement and Kim returned to the SK Wyverns.
With an overhand delivery Kim pitches a fastball usually sits around 90 mph (tops out at 96 mph), and his changeup, slider and curveball are all major league average pitches. Like other young pitchers, Kim still has problem in his control and command.