cmake is used to generate the solution files. Then you can compile it from visual studio. This works for the server, but the server database isn't the single source of truth. The server reads data from the DBC files which are taken from the client. This is why you need to update both the client and server depending on what you want to work.
If you choose to update the client then you have to work with Blizzard's in-house formats. The WoW client is a compiled binary that we don't have the full source code to so we cannot modify that directly. You can reverse engineer it and modify the binary to jump to injected arbitrary code, but this is not easy by any standards. To work with the WoW client files is a lot simpler though. Talking <= 3.3.5a Data is stored in MPQ's (archives), game data in DBC Files, images in BLP files, etc. See:
wowdev
To get the client to load any of your changes you must package it in a MPQ and give it a certain name by default. This is why the process seems so strange compared to other modding scenes.