@AuthenticationPrincipal이 Spring Security에서 인증된 사용자 객체를 SecurityContextHolder로부터 바로 주입해주는 표준 방식
@Auth 어노테이션을 사용했을 때는 별도의 커스텀 방식으로 인증 객체를 주입java.lang.NullPointerException: Cannot invoke "org.example.expert.domain.user.enums.UserRole.name()" because "userRole" is null

@AuthenticationPrincipal: Spring Security의 기본 제공 방식@AuthenticationPrincipal은 Spring Security가 자동으로 설정한 SecurityContext에서 Principal을 가져와 컨트롤러에 주입하는 어노테이션SecurityContextHolder에 저장된 사용자 정보(주로 Principal)를 컨트롤러의 파라미터로 쉽게 주입할 수 있도록 해줌.JwtAuthenticationToken이 SecurityContext에 저장되고, 이를 통해 AuthUser 객체가 자동으로 @AuthenticationPrincipal로 컨트롤러에 전달.Principal 객체를 처리하기 때문에, 추가적인 설정 없이 바로 사용 가능.@Auth: 커스텀 방식@Auth는 일반적으로 Spring Security가 제공하는 방식이 아니며, 커스텀한 방식으로 사용자 인증 객체를 주입할 때 사용.@Auth 어노테이션을 사용하려면, Spring MVC의 HandlerMethodArgumentResolver를 통해 SecurityContextHolder에서 사용자 인증 정보를 가져와야.AuthUser 객체가 주입되지 않거나, 인증 정보가 제대로 전달되지 않아 null이 발생할 수 있음.@Auth 어노테이션을 통해 AuthUser 객체를 주입하려면 올바른 ArgumentResolver 또는 필터 설정이 필요하지만, 그 과정에서 userRole이나 다른 필드가 제대로 주입되지 않거나 SecurityContextHolder에서 데이터를 제대로 꺼내오지 못했던 것 같다.@AuthenticationPrincipal은 Spring Security에서 제공하는 기본적인 주입 방식이므로, 별도의 설정 없이도 올바르게 인증된 사용자 객체가 주입되며, 그로 인해 문제가 해결
