"The main question is why magento2 has this feature?".
It is done this ways in order to have a fully Module design pattern.
In magento 1 the public assets (js, css, images) were placed in some public folders that reside outside the module itself.
For example: js,
In Magento 2 modules are actually modules. Everything related to a module goes in the module folder.
This includes public assets.
But the module folders should not be public for everyone.
So in order to make the public assets public you need to run
This will copy (or symlink) the public assets to a public folder.
Now if i would like to do some changes in those files then where i should do those changes? In the main file and again need to run the static-content:deploy command ? Or we can do in both places together.
You should never manually modify the files in the public folder. your changes will be overwritten the next time you run
This applies to the live environments also.
As a strategy to deploy, I'm not really sure about it.
You can pre-generate your static files somewhere else before deployment, then just move them when the deployment is done.
Or simply run
static-content:deploy after your deployment. But this might make some users see something else for a few seconds that pass between the deployment and when the static files are generated.