What is the difference between Yakshas & Gandharvas?
The primary difference is their origin. Puranas describes the origin story of Yakshas:
Vishnu Purana - Next from lord Brahma, in a form composed of the quality of rajas, was produced hunger, of whom anger was born: and the god put forth in darkness beings emaciate with hunger, of hideous aspects, and with long beards. Those beings hastened to lord Brahma. Some of them yelled, "Protect us", and were thence called Rákshasas. Others who yelled, "Let us eat!", were called Yakshas.
Another story in the Bhagavata Purana says that Yakshas were created by Brahma before Rakshasas. The Yakshas then wanted to eat Brahma, so Brahma cried out "Protect me!", and from that he created Rakshasas who protected him. The word "rakshasa" has the word "raksha" in it, which means "protect". Yaksha means "eat".
So from this and other verses, we can see that Rakshasas and Yakshas are closely related.
Gandharvas have a different origin as mentioned subsequently in the same Vishnu Purana:
The Gandharvas were next born, imbibing melody: drinking of the goddess of speech, they were born, and thence their appellation.
Gandharva here includes Apsaras too, since Gandharvas and Apsaras are basically the male and female counterpart to each other. Gandharvas and Apsaras are very handsome. Gandharvas are the husbands of Apsaras:
Atharva Veda - The Apsaras, you know, are your wives; You, the Gandharvas, are their husbands. Speed away, you immortals, do not go after mortals (humans)!
They are known for their promiscuous lifestyle, and so the "gandharva vivaha (love marriage)" is named after them.
Another description of Yakshas:
Vishnu Purana - Glory to Lord Vishnu, who are the Yakshas, whose nature is charmed with sounds, and whose frivolous hearts perfect knowledge cannot pervade.
I have read that Gandharvas are related to music and Yakshas are related to nature.
Correct. Yakshas like to live in forests.
Are both divine? Semi-divine? Celestial?
They are all celestial beings. Yakshas and Gandharvas are non-belligerent, materialistic, celestial beings:
Manusmriti 12.47 - Gandharvas, Guhyakas, ‘Yakṣas,’ the attendants of the gods, and all the Apsaras, represent the high state among those partaking of ‘Rajas.’
Rakshasas on the other hand, even though they are paired with Yakshas often, are bloodthirsty and very violent.
Manusmriti 12.44 - Cāraṇas, Suparṇas, hypocritical men, Rākṣasas, and Piśācas—represent the highest state among those partaking of the quality of ‘Tamas.’
Glory to Lord Vishnu, who art all Rakshasas, that walk by night, sprung from the quality of tamas, fierce, fraudulent, and cruel.
So, the main difference between Yakshas and Gandharvas is origin and physical appearance. The main similarity is that they are rajasic and partake in material enjoyments and are not belligerent.