Hello

어노테이션 역할과 사용 용도

by 볼빵빵오춘기

어노테이션

https://luckygirljinny.tistory.com/154

 

Java 애너테이션(Annotation)

애너테이션(Annotation) 프로그래밍 언어에 영향을 미치지 않으며, 프로그램에게 유용한 정보를 제공하는 주석이다. 🧐 애너테이션의 등장 배경 소스코드, 문서 따로 관리 둘 중 하나만 변경하고

luckygirljinny.tistory.com

 

Spring Framework 어노테이션

@Configuration

자바 클래스를 Spring 설정 클래스로 지정한다.

주로 @Bean 어노테이션을 사용하여 빈을 정의한다.

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

 

@EnableWebSecurity

Spring Security 설정을 활성화한다.

@EnableWebSecurity 사용하면 Spring Security를 사용하여 애플리케이션을 보호할 수 있다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // Security configuration here
}

 

@EnableMethodSecurity

메서드 수준에서 보안을 적용할 수 있도록 활성화한다.

이를 통해 메서드 호출 시 접근 권한을 검사할 수 있다.

@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // Security configuration here
}

 

@Autowired

스프링의 의존성 주입을 수행하는 어노테이션이다.

주로 생성자, 필드, 메서드에 사용된다.

@Service
public class MyService {
    private final MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

 

@Bean

스프링 컨테이너에 빈을 등록하는 메서드에 사용된다.

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

 

@Controller

Spring MVC의 컨트롤러 클래스로 지정한다.

HTTP 요청을 처리하고 뷰를 반환하는 역할을 한다.

@Controller
public class MyController {
    @GetMapping("/home")
    public String home() {
        return "home";
    }
}

 

@GetMapping

HTTP GET 요청을 처리하는 메서드에 사용된다.

URL 경로를 매핑한다.

@Controller
public class MyController {
    @GetMapping("/home")
    public String home() {
        return "home";
    }
}

 

@PostMapping

HTTP POST 요청을 처리하는 메서드에 사용된다.

URL 경로를 매핑한다.

@Controller
public class MyController {
    @PostMapping("/submit")
    public String submit(@ModelAttribute MyForm form) {
        // handle form submission
        return "result";
    }
}

 

@RestController

@Controller와 @ResponseBody를 결합한 것이다.

JSON/XML 형식의 데이터를 반환하는 RESTful 웹 서비스 컨트롤러로 사용된다.

@RestController
public class MyRestController {
    @GetMapping("/api/data")
    public MyData getData() {
        return new MyData();
    }
}

 

Lombok 어노테이션

@Getter

Lombok이 자동으로 모든 필드에 대한 게터 메서드를 생성하도록 한다.

@Getter
public class MyClass {
    private String name;
}

 

@Setter

Lombok이 자동으로 모든 필드에 대한 세터 메서드를 생성하도록 한다.

@Setter
public class MyClass {
    private String name;
}

 

@ToString

Lombok이 자동으로 toString() 메서드를 생성하도록 한다.

@ToString
public class MyClass {
    private String name;
    private int age;
}

 

@Data

Lombok이 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 결합한 어노테이션이다.

@Data
public class MyClass {
    private String name;
    private int age;
}

 

@NoArgsConstructor

Lombok이 기본 생성자를 자동으로 생성하도록 한다.

@NoArgsConstructor
public class MyClass {
    private String name;
    private int age;
}

 

@Builder

Lombok이 빌더 패턴을 적용하여 객체를 생성할 수 있도록 한다.

@Builder
public class MyClass {
    private String name;
    private int age;
}

// Usage
MyClass myClass = MyClass.builder().name("John").age(25).build();

 

JPA 어노테이션

@Entity

클래스가 JPA 엔티티임을 나타낸다.

데이터베이스 테이블과 매핑된다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

@Table

엔티티 클래스와 매핑되는 테이블을 지정한다.

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

@Repository

스프링 데이터 접근 계층을 나타내며, 데이터베이스와의 상호작용을 처리하는 클래스에 사용된다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

 

@Modifying

JPA 쿼리 메서드에 사용되며, 데이터베이스의 데이터를 수정(UPDATE)하거나 삭제(DELETE)할 때 사용된다.

@Modifying
@Query("update User u set u.name = :name where u.id = :id")
void updateUserName(@Param("id") Long id, @Param("name") String name);

 

@Query

JPQL 또는 네이티브 SQL 쿼리를 정의하는 데 사용된다.

@Query("select u from User u where u.name = :name")
List<User> findByName(@Param("name") String name);

 

 

 

Spring 서비스 어노테이션

@Service

서비스 레이어를 나타내며, 비즈니스 로직을 처리하는 클래스에 사용된다.

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

 

@Transactional

메서드 또는 클래스에 트랜잭션 처리를 적용한다.

데이터베이스 작업이 성공적으로 완료되면 커밋하고, 오류가 발생하면 롤백한다.

@Service
@Transactional
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

 

Spring Boot 어노테이션

@SpringBootApplication

스프링 부트 애플리케이션의 메인 클래스를 지정한다.

@Configuration, @EnableAutoConfiguration, @ComponentScan을 결합한 것이다.

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

 

Spring 일반 어노테이션

@Component

스프링이 관리하는 빈을 정의한다.

@Service, @Repository, @Controller와 같은 특정 역할을 나타내는 어노테이션이 없을 때 사용된다.

@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기