I am trying create an application using NodeJS, web3, ganache and write a smart contract with solidity on Ethereum as a part of my final year project. Reading the documentations, I still have a few questions which I could not understand -
1) When we deploy the smart contract via web3 (server code), where does the smart contract actually get deployed? Because the JSON contract build file is still on the server, right?
2) Does every user need to have their own deployed version of smart contract?
3) If we are deploying smart contract via server for each user, wouldn't it create a bottleneck on the server? Because all the requests are going to the server first, then how is the application decentralized?
4) Do users need to install ganache, metamask, etc. if they want to connect to the application running on a private Ethereum blockchain network?
Please clarify my doubts and correct my understanding if I am wrong.