I plan to use web3 server side using NodeJs with geth. For production usage, should I do a
full sync or
fast sync is enough?
Also, how much space do I need to store the blockchain data for each of these sync types as on today?
Fast synchronization is usually OK, you download both blocks and states. However, using
full synchronization you only download the blocks, and compute the states yourself. It takes MUCH more time, but you are sure the states are valid. If you don't mind waiting it's always a plus to do it
full, but for most cases
Concerning the required size, you can take a look at this chart, which shows it very clearly.