어노테이션 역할과 사용 용도
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
볼빵빵오춘기