The expressions can vary depending on what you're saying.
For a description of someone, we probably say it like this (in the order of frequency).
1. 그 사람은 고향이 강릉이다. He's hometown is 강릉. => 그 사람(은) 고향이 어디에요?
2. 그 사람은 강릉 사람이다. He hails from /belongs to 강릉. => 그 사람 어디 사람이에요?
3. 그 사람은 강릉 출신이다. He hails from 강릉. => 그 사람 어디 출신이에요?
4. 그 사람은 강릉에서 왔다. He comes/came from 강릉. => 그 사람 어디(에)서 왔어요?
("어디에서 사람이에요?" you mentioned is wrong. 에서 always implies an action and so doesn't work well with 이다 in 사람이에요. 어디 just modifies 사람 to imply 어디의 사람 (의 = of), which in effect means 어디에서 온 사람 (에서 here works with 오다, an action)).
Traditionally #1 is the most common expression. In Korean, 고향 is a much more important and warm sounding word than "hometown" in English, because most Koreans in the old times had this "old home" where their parents, relatives, and friends might still live (Koreans used to be earth-bound agricultural people who lived in the same town generation after generation).
When you ask a person directly:
1. 고향이 어디세요? (세요 is more polite than 예요)
2. 어디서 오셨어요?
3. 어느 나라 사람이세요? (If the person looks like a foreigner - one should be careful though)
4. 어디(에) 사세요? ("Where do you live?", not the same as the others)
(I think 어디 출신이세요? is not used very much as a direct question.)
When you introduce yourself:
1. 저는 고향이 부산이에요.
2. 저는 부산에서 왔어요.
3. 저는 부산 출신이에요.
4. 저는 부산에 있어요 / 살아요. (I currently live/work in Busan)
It used to be that we say -에서 왔어요 only when we're away from our home base, but nowadays people use it more widely influenced by English's "I come from ...". It still seems weird to me to hear 한국에서 왔어요 from someone residing in Korea. I think 한국 사람이에요 or 한국에 살아요/있어요 is better if you're currently in Korea.
I think "What city are you from?" you mentioned is rare in general context. You can ask exactly what country, city, or region a person is from, but I doubt it's very common.