Difference between portsnap and pkg

New to freeBSD : I just installed a FreeNAS server. It's very interesting : the ZFS and the jail concept are both stunning.
While going further, and installing some applications on the system, in tutorials, sometime to install package, "pkg" command is used, and some other times, the "portsnap" command plus "make install" are used.
So, I wonder what is the difference between portsnap and pkg : are they 2 different methods to do the same thing, or applications are either in the pkg system or in the portsnamp system.

So, "portsnap" is used to keep the catalog of packages up to date, and "pkg" to install packages, right ?

Thank for (so quick) reply !
FreeBSD has two different ways to do the same thing (install a package). You can do it using ports and configuring and compiling all the packages. You can do it using packages. Packages is prebuild ports with the default configuration. Ports are slower and "unstable" but you have the possibility to negotiate with dependencies and set flags. From the other side pkg as binary package manager is fast and stable. Is not compiling and is not so flexible cause of flags configuration lack. For old hardware machines better to deal with pkg way. On newer machines, just use ports and mixing pkg's and ports is not hurting your system

Now portsnap is used to keep the catalog of every port on your system. To update all your ports tree you run portsnap fetch extract. To update your pkg catalog you run pkg update