Video of the attack before daybreak showed the charred ruins of buildings in the small town of Serhiivka, about 50km from Odesa.
The Ukrainian President’s office said three Kh-22 missiles fired by warplanes struck an apartment building and a campsit as he condemned Russia over the attacks in his nightly address.
He said: "In the Odesa region, the dismantling of rubble after the Russian missile attack on Serhiivka is underway.
“Three missiles hit an ordinary residential building, a nine-story building in which no one hid any weapons, military equipment, or ammunition, as Russian propagandists and officials always tell about such strikes.
“It was a simple house, about 160 people. It was inhabited by ordinary people, civilians. The recreation centre was also destroyed by this strike - an absolutely typical object for the seaside area.
"I emphasize: this is a deliberate, purposeful Russian terror, not some mistakes or an accidental missile strike.
“Four people from one family were killed... The murdered boy, 12 years old, whose name was Dmytro... As of now, there are 21 people on the list of the dead, and about 40 are wounded. The numbers have been changing all day, unfortunately, the death toll is increasing."
He added that he was grateful to the US and "personally to Biden" for the new support package for Ukraine announced today, which includes "very powerful NASAMS systems".
Large numbers of civilians died in Russian air strikes and shelling earlier in the war, including at a hospital, a theatre used as a bomb shelter and a train station.
Until this week, mass casualties involving residents appeared to become less frequent as Moscow concentrated on capturing eastern Ukraine’s Donbas region.
Odesa is Ukraine’s biggest port and the headquarters of its navy.