Likely something that every learner of Korean has wondered at some time or another, today's post is an elucidation of the differences between 감사하다 and 고맙다.
When speaking purely of the way in which the two words are used, the difference can be summarized as follows: 감사하다 is generally used in more formal situation, while 고맙다 has a softer, more familiar sense. This does not imply that 고맙습니다 is rude or informal, to be sure. It simply does not sound quite as formal as 감사합니다.
From an etymological perspective, the two words differ fundamentally in that 감사하다 is based on Hanja (Chinese characters used in Korean) while 고맙다 is a purely Korean word. 감사하다 can be analyzed as 감사(感謝) + 하다, literally meaning "to feel (感) thanks (謝)." This final character 謝 (pronounced "사" in Korean and "xie4" in Chinese) is the same one used in the Chinese expression "xie xie (謝謝)," also meaning "thank you."
고맙다 can be analyzed as 곰 + 압다 (adjectival affix), where 곰 is the Korean word for bear. 곰/ 고마 (cf. Japanese "kuma" 熊) refers to a god or respect in general. The original sense of the word 고맙다 was "to receive god's blessing, to be respected," and the word assumed the meaning of "to be thankful" beginning in the 18th century. In ancient times, bears were seen as divinely powerful animals, as is evident from the legendary story of Dangun founding Korea, according to which Dangun's mother was originally a bear (熊女 lit. "bear woman") who was impregnated by Hwanung, the son of the sky god himself. Bearing all of these previous meanings in mind, the original meaning of "고맙습니다" appears to have been closer to "may a bear bless you" than "thank you."
백문식. 우리말 어원 사전. 1st ed. 서울: 도서출판 박이정, 2014. Print.
For further reading about the Dangun legend:
On the difference in usage between 감사하다 and 고맙다: