본문 바로가기

Study Information Technology

Spring Boot에서 사용자 정의 어노테이션 사용하기

728x90
반응형

Spring Boot에서 사용자 정의 어노테이션 사용하기

Overview

Spring Boot는 자바 기반의 웹 애플리케이션 프레임워크로, 개발자가 빠르고 효율적으로 애플리케이션을 구축할 수 있도록 다양한 기능을 제공합니다. 이 중에서 사용자 정의 어노테이션(Custom Annotations)은 코드의 가독성과 유지보수성을 높이고, 반복적인 작업을 줄이는 데 큰 도움을 줍니다. 이번 글에서는 Spring Boot에서 사용자 정의 어노테이션을 만드는 방법과 이를 활용하는 다양한 예시를 자세히 설명하겠습니다.

사용자 정의 어노테이션 만들기

1. 어노테이션 정의하기

어노테이션을 정의하기 위해서는 @interface 키워드를 사용합니다. 어노테이션 정의 시에는 필요한 속성을 정의할 수 있으며, 기본값을 설정할 수도 있습니다. 예를 들어, 특정 메소드가 관리자 권한을 가진 사용자만 접근할 수 있도록 제한하는 어노테이션을 정의할 수 있습니다.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AdminAccess {
String value() default "Admin";
}

이 어노테이션은 메소드에만 적용될 수 있으며, 런타임에 반영됩니다.

2. 어노테이션 활용하기

정의한 어노테이션을 사용하여 실제 기능을 구현해봅시다. 예를 들어, AdminAccess 어노테이션이 붙은 메소드에 접근할 때, 권한을 체크하는 로직을 추가할 수 있습니다. 이를 위해 Spring AOP(Aspect-Oriented Programming)를 활용할 수 있습니다.

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class AdminAccessAspect {

@Before("@annotation(adminAccess)")
public void checkAdminAccess(AdminAccess adminAccess) throws Throwable {
// 여기서 사용자 권한을 체크하는 로직을 구현합니다.
// 예를 들어, 현재 사용자가 관리자 권한이 있는지 확인
boolean isAdmin = checkIfUserIsAdmin();
if (!isAdmin) {
throw new SecurityException("권한이 부족합니다.");
}
}

private boolean checkIfUserIsAdmin() {
// 실제 권한 확인 로직을 구현합니다.
return true; // 예시로 항상 true를 반환
}
}

이제 @AdminAccess 어노테이션이 붙은 메소드가 호출될 때마다, AdminAccessAspect가 해당 메소드에 대한 접근 권한을 체크합니다.

3. 사용자 정의 어노테이션 활용 예제

간단한 Spring Boot 애플리케이션을 통해 사용자 정의 어노테이션을 활용하는 방법을 보겠습니다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class CustomAnnotationExampleApplication {

public static void main(String[] args) {
SpringApplication.run(CustomAnnotationExampleApplication.class, args);
}
}

@RestController
@RequestMapping("/api")
class ApiController {

@GetMapping("/admin")
@AdminAccess
public String getAdminData() {
return "관리자 전용 데이터";
}

@GetMapping("/public")
public String getPublicData() {
return "공용 데이터";
}
}

위 코드에서는 @AdminAccess 어노테이션이 붙은 getAdminData 메소드는 관리자 권한이 있는 사용자만 접근할 수 있습니다.

에러 처리 및 해결 방법

어노테이션을 사용할 때, 몇 가지 에러가 발생할 수 있습니다. 대표적인 에러와 해결 방법을 살펴보겠습니다.

1. @Aspect 관련 에러

에러 메시지:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminAccessAspect': Lookup method resolution failed

해결 방법:
@Aspect 어노테이션을 사용하는 클래스는 @Component로 등록되어야 하며, Spring AOP 관련 설정이 제대로 되어 있는지 확인해야 합니다. @EnableAspectJAutoProxy 어노테이션을 @SpringBootApplication 또는 @Configuration 클래스에 추가해줍니다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication
@EnableAspectJAutoProxy
public class CustomAnnotationExampleApplication {
public static void main(String[] args) {
SpringApplication.run(CustomAnnotationExampleApplication.class, args);
}
}

2. 런타임 시 SecurityException

에러 메시지:

java.lang.SecurityException: 권한이 부족합니다.

해결 방법:
권한 체크 로직을 수정하거나, 사용자 권한이 올바르게 설정되었는지 확인합니다. checkIfUserIsAdmin 메소드가 실제로 사용자 권한을 정확히 검증하도록 구현해야 합니다.

참고문서

  1. Spring Framework Reference Documentation
  2. Spring Boot Documentation
  3. Java Annotation Documentation
  4. Spring AOP Guide

위의 자료들은 Spring Boot와 Java에서 사용자 정의 어노테이션 및 AOP 관련 기능을 이해하는 데 큰 도움이 될 것입니다.

728x90
반응형