Here is simple and effective explanation of NgModule
NgModules configure the injector and the compiler and help organize related things together.
NgModule metadata does the following:
Every Angular app has at least one module, the root module. You bootstrap that module to launch the application.
Declares which components, directives, and pipes belong to the module.
Makes some of those components, directives, and pipes public so that other module's component templates can use them.
Imports other modules with the components, directives, and pipes that components in the current module need.
Provides services that the other application components can use.
The root module is all you need in a simple application with a few components. As the app grows, you refactor the root module into feature modules that represent collections of related functionality. You then import these modules into the root module.
Read this article it will clear the all fundamental of Angular NgModules
References
Angular NgModules article link