iBGP has a restriction: routes learned from one iBGP peer aren't forwarded to another iBGP peer. This prevents loops inside the AS.
The consequence: Every iBGP router must peer with every other iBGP router. For routers, that's sessions.
With routers: sessions. With routers: sessions. This doesn't scale.
Solutions:
Route reflectors. Some routers become "reflectors" and forward routes to clients. Reduces mesh to hub-and-spoke.
Confederations. Split the AS into sub-ASes internally. Each sub-AS has a smaller iBGP mesh.