I have never tried to build a Drupal application with paid membership. Both Ubercart and Drupal Commerce provide membership subscription feature. This example is a proof of concept on implementing paid membership on Ubercart.
1. Enable the Roles module in Ubercart.
2. Add a member role @ /admin/people/permissions/roles.
3. Go to Store -> Configuration -> Products -> Role assignment settings tab @ admin/store/settings/products to setup the member role.
4. Add a new product for membership subscription.
5. Edit the newly added product and goes to the Features tab. Add Role assignment as feature.
6. Select the SKU and save the feature.
7. Enable the Rules UI and you will find a list of rules which are related to the membership subscription.
8. Edit the Grant or renew purchased roles and update the condition such that the role will be granted or renewed when the order status is updated to Completed.
9. If the user purchase the memebership again before the role is expired, the new subscription period will be added to the expiration date. Moreover, the removal of role after expiration is done by Drupal Cron. So make sure the cron job runs properly.
If you prefer working with Drupal Commerce, you can refer to the following 2 modules.