In a stand mixer fitted with the paddle attachment, add the milk, eggs, flour, sugar, yeast, and salt. Mix on low speed until the dry ingredients are completely moistened, about 2 minutes, then increase speed to medium and continue mixing, scraping down the sides of the bowl as needed, until a glossy dough forms and pulls away from the sides, 9–11 minutes. Scrape the dough off the paddle, add the butter, and mix on low speed for 1 minute. Increase the speed to medium and continue mixing, scraping down the sides and bottom of the bowl as needed, until the butter is incorporated, and the dough is very silky, shiny, and completely homogenous, 5–6 minutes more.
Lightly grease a large bowl with cooking spray, then transfer the dough to the bowl. Cover with a lid or plastic wrap and refrigerate for at least 6 hours or overnight.
Lightly grease two 9-inch loaf pans. Turn the dough out onto a lightly floured surface and divide into 2 pieces. Press a piece of dough into a 6-inch square with even thickness. Roll the square into a tight loaf shape, pinching the seam to seal. Lightly roll the loaf back and forth a few times to extend it to about 8½ inches long. Place the loaf, seam-side down, in one of the prepared pans. Repeat this process with the remaining piece of dough. Loosely cover both pans with plastic wrap and set aside at room temperature until the loaves are very gassy, puffed, slightly more than doubled in size, and just barely flush with the edge of the pan, about 3 hours.
Preheat the oven to 300°F, with a rack in the center. Bake, rotating the pans 180° once halfway through, until the loaves are evenly golden brown and cooked through, 55–60 minutes. Remove from the oven and let cool slightly, 2–3 minutes, then unmold the loaves onto a wire rack and let cool completely before slicing. The bread can be stored, tightly wrapped in plastic, at room temperature for up to 4 days.