A taxonomy is a way of grouping content. Categories and tags are the two WordPress provides out of the box; you can register others and attach them to any post type.
Hierarchical or flat
Hierarchical taxonomies behave like categories: terms can have parents, and they suit structured grouping such as topics. Flat taxonomies behave like tags, with no relationships between terms, and suit loose keywording.
Taxonomy or custom field?
If you want to filter or list content by a value, or give that value its own archive page, it is a taxonomy. If it is a detail that only ever gets displayed on the item itself, a duration, a price, a read time, it is a custom field. Getting this wrong is the most common modelling mistake, and it usually shows up when someone tries to build a filter on top of a text field.