Officials said at least 15 people were killed there, including three children – two 10-year-olds and a toddler – while a further nine people were taken to hospital.
One resident, Serhii Lubivskyi, 58, was in the block of flats when the missile struck.
“My neighbours are gone, no one is left… only the kitchens were left standing,” he said.
“My flat is on the seventh floor… we felt the impact, we heard the explosion.”
Image: An aerial view shows a damaged block of flats hit by a Russian missile
Another resident, Olga, said: “At first the windows were blown out, then came the explosion. Everything flew out.”
Moscow has frequently launched long-range missile attacks during the 14-month war, often indiscriminately hitting civilian areas.
However, the Kremlin has denied its military aims at civilian targets.
The Russian defence ministry said the long-range cruise missiles launched overnight were aimed at places where Ukrainian military reserve units were staying before their deployment to the battlefield.
It comes as Ukraine prepares to launch its much-talked-about counteroffensive to reclaim territory taken by Russia.
The offensive will involve tanks and weapons from Western powers, including the US, the UK and Germany.
Britain has given Challenger 2 tanks, the US has sent Abrams, while German Leopard 2 tanks have also been handed over to Kyiv for use in the offensive.
Please use Chrome browser for a more accessible video player
1:34
Why does Ukraine need new tanks?
Russia, meanwhile, has been fortifying its occupied territory for months in anticipation of Kyiv’s planned assault – which is widely expected once warmer weather returns.
Ukraine and its Western military backers hope a push by thousands of Ukrainian troops trained at Western bases will shift the dynamics of the war – which has mostly seen Russia on the offensive throughout winter.