I apologize if that sounded dismissive, the use of the word "technically" wasn't meant to refer to you not being correct about it being an attack or it being illegal. I was refering to how it may only technically mean that NATO therefore can't be defined as defensive, especially in comparison with Russia.
For the purposes of defining what it means for an alliance to be (comparatively) defensive, it can be argued that never attacking anyone is the wrong aspect to focus on. The motivation of any attacks is what matters more, as well as the circumstances and outcomes. Not to mention that you also have to define properly what NATO is and what it therefore means for NATO to attack.
NATO, as in all of it, did attack Serbia. NATO, as in the alliance as a whole, didn't attack Iraq, for example. Other attacks are on a sliding scale between these two extremes. That's one distinction - a war waged by one or more NATO states isn't necessarily a NATO war.
Secondly, Serbia is now a sovereign democratic country. NATO didn't attack it to take it over. NATO attacked Serbia to stop a genocide that Serbia started. Russia is attacking Ukraine to take it over. That's another distinction.
Russia does have similar sounding excuses, they would say that they don't intend to take it over, that they only try to depose a fascist government, and that they seek to help the Donetsk and Lugansk independent republics.
However, Ukrainian government wasn't particularly fascist, Russia did meddle to help instigate the separatism in the first place, and they did already take over Crimea, part of the Ukrainian territory, so objectively, in comparison, their excuses are much more flimsy. Or, to be exact, much more actual excuses.
If we can't agree on any of that, then there's no point in arguing about this at all.
To bring this full circle, trying to cause peace and stop genocide could technically be a war crime, yes. Even then, it's a goal that a defensive alliance might decide to pursue.