It may not be necessary while you are developing, but you should do it when you go to production.
Moreover, if you use production data, you might want to run a set of replicas in order to have a backup, if something fails, do not lose your data and do not interrupt your service.
Databases are hungry for memory, so to share it with other processes is a bad idea. On the application server, you probably need more processor than memory, so you can use high processor instance types (c.medium, c1.xlarge) and use high memory types for your DB (m2.large, etc.) (High performance copies are cheaper)
In addition, from an architectural point of view, it is better to be able to scale the number of application servers regardless of the database. If you put application servers and databases on the same computer, this can lead to problems if you later have to switch to another.
source share