However, I never formally studied CS and I feel like this has left large gaps in my understanding. I don't have a strong grasp of fundamental CS topics like compilers, operating systems, object oriented design, algorithms, etc.
I want to address these gaps in my learning so I can become a better developer. My first instinct is to go to free resources online, but I'm not sure if it's really possible to get a good understanding that way, or if it would take too long. The other option would be to apply for something like Georgia Tech's OMSCS program to get more intensive and formal training.
What are your recommendations for me? Is it possible to "teach myself" the foundations of CS? And if so, is it even necessary?
If you’re doing anything web or mobile related it’s not necessary to study traditional CS.
Yes, it's not only possible, it's not even that rare. And it is necessary.
You teach yourself this stuff the same way you'd learn it in a classroom. Study books and quality websites on the topic. And, mostly, practice practice practice.