The main fact that has to be accounted for is that many languages have phonological processes that distinguish heavy from light syllables, for example in Mongolian, stress is assigned to the first "heavy" syllable; in Arabic (broadly speaking: much dialect divergence and fine-grained specifics differ), stress is within the last 3 syllables and the determination is based on whether a potentially skipped syllable is heavy or light. However, what defined "heavy" versus "light" varies by language. A pre-generative observation (from Jakobson as I recall) is that long vowels and diphthongs count for defining "heavy" if the distinction is made at all, and coda consonants may as well. In Arabic, coda consonants do; in Mongolian, they don't. Following the classical "long vowels are equivalent to two vowels" analysis, a mora is thus "vowel", plus optionally "one coda consonant".
There are a number of problems that led to widespread adoption of moraic theory. The alternatives are the skeletal theories, CV theory (Clements & Keyser) and vanilla X-theory (Hyman and subsequent developments), where there is (approximately) one skeletal unit per segment, or two units for long segments. The problem with both of these theories is that they don't provide a representational means of picking out the things that are relevant for syllable-weight processes. Onset consonants get in the way of easily determining whether a syllable is "heavy" or "light". although there were all sorts of ad hoc devices that allowed some of the facts to be accounted for (such as a "projection", whereby you temporary render invisible certain elements). The fact of generally limiting syllables to a two-way distinction is also a bit problematic for skeletal theories: you need some means of neutralizing the difference between CVVCCCC, CVVC and CVC syllables.
Moraic theory tries to solve these and other problems by positing a thing "mora" notated μ where syllables always have one and maybe two moras, and where segmental length is derived from moraic structure (a geminate consonant is moraic; a long vowel has two moras). However, as with most proposals in phonological theory, there are inconvenient problems and arbitrary stipulations that mess up this picture. One is the distinction between light, heavy and super-heavy syllables. One approach is simply to say that a syllable can have three moras, not just two, but this proposal in controversial. Classical Arabic illustrates the problem, sorta, in that final long vowels and VC rhymes act like final short vowels, but elsewhere VV and VC rhymes define "heavy". The conservative approach has been to exploit the separate concept of extraprosodicity on final material, so that a language can exclude one final consonant, or all final consonants, or half of a final long vowel (or a final short vowel) from the computation. The reason for this is that systematic and robust 'heavy vs. super-heavy' distinctions are pretty much limited to special treatments of final syllables. Vastly more has and can been said about this topic.
You can sort of read this article on vowel length, this about moras, sorta this about geminates, and sorta this article by Draga Zec on ("sorta" means that you may have to dig to get the actual articles): the mora article is in the wild, the others are in the Blackwell's Companion to Phonology. You might also read this paper, which is a kind of minimal-theory analysis of a dialect of Saami that has complex length distinctions that are well suited to a classical analysis in terms of syllables with one or two moras, but non-trivial alignment between moras and segments. I think the question of how moras connect to particular segments is the biggest unresolved issue in moraic phonology (that is, what do moras dominate?), and how those connections are made (the algorithmic content) is the second biggest.