Make the gravy base. Melt the butter in a medium to large saucepan over medium heat. Add the shallots and cook for 4-5 minutes, until soft.
Sprinkle the flour on top of the melted butter and stir for 1 minute to create a thick paste. Continue to cook for 4-5 minutes, stirring frequently, to cook the flour. This helps remove any raw flour taste from the gravy.
Turn the heat up to medium-high and whisk in the broth. Continue to cook to a boil and whisk frequently for 2-3 minutes, or until thickened.
Remove the mixture from the heat and stir in the salt and pepper. Cool completely and store in an airtight container or jar for up to 3 days. If you aren't making this ahead of time, turn the heat off and leave the roux on the stove until the turkey is done. Continue with the next steps as directed.
Finish the gravy with turkey drippings (Note 3 without turkey drippings). When the turkey is done roasting, remove it to a platter or cutting board to rest. Remove the roasting rack if using one. Carefully pour the turkey drippings from the bottom of the pan through a fine mesh sieve to strain into a measuring cup or bowl.
Place the roasting pan over two burners both set to medium heat. Add the white wine and scrape the brown bits (fond) from the bottom of the pan with a wooden spoon or spatula. Simmer for 2-3 minutes, to reduce and cook off the alcohol.
Reduce the heat to low and slowly whisk in the gravy base. Simmer until smooth and slightly thickened, about 2 minutes. If the gravy is too thick, add a splash of the reserved turkey juices to thin it out. When the gravy reaches your desired consistency, stir in the heavy cream if using. Taste and adjust add more kosher salt and black pepper as needed. Keep the gravy over very low heat until you’re ready to serve. It may thicken more as it warms so add more pan drippings or broth as needed.