1. 특징
    1. 이 메서드는 특정 권한이 있는 사람만 실행할 수 있게 해주는 @Secured 어노테이션을 사용할수 있게 해준다.
    2. 클래스나 메서드에 권한 체크 어노테이션을 붙여서 접근 제어를 할수 있습니다.
    3. Configuration 클래스에 한 번만 선언하면 전체 어플리케이션에 적용됩니다.
  2. 장점
    1. 세밀한 권한 관리
      1. URL레벨이 아닌 메서드 레벨에서 권한을 체크할 수 있습니다.
    2. 메서드를 바로 보면 어떤 권한이 필요한지 알 수 있습니다.
    3. 같은 메서드를 여러 곳에서 호출해도 권한 체크가 자동으로 됩니다.
    4. 권한 정책 변경시 어노테이션만 수정하면 됩니다.
  3. 단점
    1. 러닝 커브
      1. 처음 접하면 개념 이해가 필요합니다.
      2. 권한 문제 발생 시 어디서 막혔는지 찾기가 어려워서 디버깅이 어렵다.
      3. 메서드 호출마다 권한 체크가 들어가서 약간의 성능저하가 있습니다.
  4. 예시
  5. 단계
    1. Configuration 설정
@Configuration
@EnableMethodSecurity(securityEnabled = true)
public class SecurityConfig {
	//이 설정으로 @Secured 어노테이션을 사용할 수 있게 됩니다.
	
}

2 단계

@Service
public class UserService {
	@Secure("ROLE_USER")
	public String getUserInfo(){
		return "사용자 정보";
	}
	
	@Secure("ROLE_ADMIN")
	public String deleteUser(Long userId){
		return "사용자 삭제 완료";
	}
}

3 단계

@RestController
@RequestMapping("/api/users")
public class UserController{
	private final UserService userService;
	
	public UserController(UserService userService){
		this.userService = userService;}
		
		@GetMapping("/info")
		public String getInfo(){
			return userService.getUserInfo(); //ROLE_USER 체크됨
		}
		
		@DeleteMapping("/{id}")
		public String deleteUser(@PathVariable Long id){
			return userService.deleteUser(id); //ROLE_ADMIN 체크됨
		}
	}