Most SSRs are designed for AC switching and incorporate a triac as the switching element. This would only work on the AC input to your DC supply.
A relay would be fine otherwise. Just make sure that the contacts are capable of switching the voltage required and have a current rating greater than the expected load. Note that switching DC is harder on contacts due to arcing. AC has the advantage that the current falls to zero every half-cycle and the arc is automatically quenched. DC doesn't and you'll find that the contacts are usually de-rated for DC. You compensate by buying a beefier relay.
Finally, SSRs have no moving parts. If specified properly they can outlast relays which will suffer mechanical wear and tear.
In such design, if (the separate) supply powering the microcontroller accidentally goes off, or the microcontroller resets, would there be any issues related to the relay auto-switching the spindle to ON (even briefly) at such moments? I'm worried this could be mechanically dangerous.
You need to address the safety in every aspect of the design.
- The failure mode of your micro hardware or any semiconductor device is unpredictable. It could fail open-circuit or short-circuit. This can be addressed with clever electronics. See half-way down my answer to Self Checking Circuit for some idea on how this is done. For your application just assume that the electronics is untrustworthy.
- Your code could lock up due to a bug. To address this many systems use a watchdog timer to reset in the event of a lockup. This might use some of the principles of the fail-safe electronics used in the linked question above.
- The relay circuit would be wired so that the relay requires energy to close the contact to run the motor. This is common sense.
- You should add a hard-wired e-stop or safety guard switch to your system and use it! Either switch must be fail-safe in design. That means that when the switch is pressed or guard opened then the contacts are forced open and that you're not relying on a spring to open them for you.
Figure 1. Keyed guard safety interlock. Pulling the key out rotates a cam which drives the contacts open. The spring is used to close the contacts and, if it fails the machine will not be operable.
Finally, as part of the good design, check what the default state of your micro-controller outputs is. Normally on power-up they "tri-state" and go into high-impedance state and will not be able to turn anything on until your code enables the outputs. You need to make sure of this for your particular micro.