why does FName for if there is FString already?

it seems that FString is strong enough to cover all circumstances, but still FName is there.

they are duplicate, or they are created to be 2 same classes. but, in the end, what is the purposes? is there any special reason, special scenes?

FName is typicaly used and optimized with identifiers, such as tags, object names or event names and is usually immutable. Whereas FString is optimized for text handling and formatting.