Soy comes from the verb ser, whilst estoy comes from estar.
This may sound quite complicated, but it’s really simple!
Soy
We use soy when we are talking about permanent things, things that do not change from day to day, or hour to hour.
For example, I might say “Soy estudiante” meaning "I am a student."
Being a student is something that will stay true throughout the day, so we use soy.
Estoy
On the other hand, we use estoy when we are talking about states or variable things, like the weather or somebody’s mood or location.
For example, I could say “estoy harto” meaning "I am fed up."
Being fed up is a temporary state and so we use estoy.