Why do we need Composite node?
The Composite node is where the actual output from the compositor is connected to the renderer. Connecting a node to the Composite node will output the result of that node's full tree to the Renderer, leaving this node unconnected will result in a blank image. This node is updated after each render, but also if you change things in your node-tree (provided at least one finished input node is connected)
The Viewer node is a temporary, in-process viewer. It can be plug in anywhere to inspect an image or value map in your node tree.
From this you can say that the compositor node exist for the sole purpose of applying the composition to the render while viewer node is mainly used to see specific result of a certain group of nodes as well as it can do the job of a compositor node.
To further explain it:
The problem with the viewer node is that you will have to go into the Render Output panel and would have to select the viewer node to be displayed in it . And then you are free to save it. In highly detailed scenes we will be forced to make multiple renders , improving it gradually . That is where the Composite node comes to help - You wouldn't have to select the viewer node each time and save it.
Blender automatically composites a render if it's connected to a Composite node and will give you the finished result instantaneously. And that is the easiest way to put it...

You can also switch between Composite and View Layer as shown in here:-