I'm trying to connect with my NodeMCU through internet using a web app developed by me, what I already achieved was to control it through wifi in the same network using a static IP (which still wasn't very stable), but what I need this time is to be able of controlling it from anywhere in the world, without having to change the public ip in my web app everytime it changes, I found information about NO_IP but I'm not pretty sure of how it works.
As already answered in this question, almost every dynamic dns provider uses their own protocol. The protocols are often HTTP-based.
The NodeMCU needs to periodically check its public IP address and send a request like this to update the ip address (for no-ip)
Full specifications: https://www.noip.com/integrate/request
Note: from your question, it seems like you already have port forwarding set up and only need to account for your home IP being changed every now and then. If that's not the case, this answer will be insufficient.
I have an idea how to solve your problem. You could periodically check external IP and mail it to yourself when it changes from ESP8266, so you will have a fresh info every time. You can also extend your app which you use to control devices, so it checks the email and when it detects one with a specific subject like "NEW IP ADDR ASSIGNED" it can parse the email and extract the new IP address from the message body. I have done something similar in python and pure Linux shell script.