[Spring] 어노테이션

어노테이션

@SpringBootApplication

  • 스프링이 실행되기 위한 파일이라는 의미의 어노테이션.
  • Main 메소드가 들어있는 코드, 어플리케이션을 나타낸다.

@SpringBootTest

  • 스프링부트 테스트를 위한 어노테이션이다.
  • 스프링 컨테이너와 함께 테스트를 실행하기에, 진짜 스프링을 띄우는 것과 같이 동작한다.

@Component

  • 컴포넌트 스캐닝을 통해 자동으로 스프링 빈에 등록하기 위해서 사용하는 어노테이션이다.
  • Controller, Service, Repository 등의 내부에도 들어가있다.

@Controller

  • spring container에, 해당 객체를 생성해서 스프링에 넣어두고, 관리하기 위한 어노테이션이다.
  • Controller를 통해서 외부 요청을 받아 처리한다.

@Service

  • spring이 올라올 때, 해당 객체를 spring container에 등록해 관리하기 위한 어노테이션이다.
  • Service를 통해서 비스니스 로직을 만들어 수행한다.

@Repository

  • 마찬가지로 해당 객체를 spring container에 등록해 관리하기 위한 어노테이션이다.
  • Repository를 통해서 데이터를 저장한다.

@Autowired

  • 생성자에 붙여 spring container의 객체와 연결시키기 위한 어노테이션이다.
  • spring container에, 자동으로 컨트롤러를 등록하면서 필드로 존재하는 객체의 생성자도 호출한다.
  • 그러면 앞서 service로 등록해 spring container 안에 존재하는 객체를 가져다가 연결시켜준다.
  • 생성자가 하나이고, 인자로 받는 객체가 Bean으로 등록된 경우, 해당 어노테이션을 생략할 수 있다고 한다!

@Configuration

  • 스프링에 Bean으로 등록할 객체를 직접 설정하는 Config 클래스에 붙여주는 어노테이션이다.
  • 이 어노테이션이 붙어있는 클래스 안에서 @Bean을 이용해 등록해주면 된다.

@Bean

  • 자바 코드로 스프링 빈을 직접 등록하기 위해 생성자 위에 써주는 어노테이션이다.
  • 해당 어노테이션이 있는 클래스에 대해 객체를 만들어 스프링 빈으로 등록해주는 것.
  • 그러나 Controller의 경우 자바 코드로 직접 등록하지 않고, 컴포넌트 스캔을 이용한다.

@Test

  • junit에 속한 것으로, 테스트 하는 메소드라는 의미로 붙여주는 어노테이션이다.

@AfterEach

  • 각 테스트 메소드가 수행된 후마다 호출되는 메소드라는 의미로 붙여주는 어노테이션이다.

@BeforeEach

  • 각 테스트 메소드가 수행되기 전에 매번 호출하는 메소드라는 의미로 붙여주는 어노테이션이다.

@Entity

  • JPA가 관리하는 Entity가 된다는 의미로 붙여주는 어노테이션이다.

@Id

  • Primary Key로 설정한다는 의미의 어노테이션이다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

  • Identity : DB가 알아서 ID를 생성해주는 전략

@GetMapping(path)

  • 해당 경로로 get 방식으로 요청이 오면 수행할 메소드를 매핑하는 어노테이션이다.

@PostMapping(path)

  • 해당 경로로 Post 방식으로 요청이 오면 수행할 메소드를 매핑하는 어노테이션이다.

@Transactional

  • 스프링 AOP 기반으로 만들어진 어노테이션이다.
  • 이 어노테이션이 붙어있는 클래스는, 해당 타입의 Proxy가 새로 만들어진다.
  • 그러면 기존 코드는 건들지 않고, 기존 기능에 추가 기능까지 수행하는 역할을 한다.

  • 만약 이 어노테이션이 테스트 케이스에 붙어있으면, 테스트 시작 전에 트랜잭션을 시작하고 완료 후에 항상 Rollback을 수행해 실제 DB에 반영되지 못하도록 한다.

@Commit

  • DB에 쿼리 수행 내용을 반영하기 위해 사용하는 어노테이션

@Target

  • 어노테이션을 정의한 파일(@interface)에 사용하는 어노테이션
  • 이 어노테이션을 어디에 쓸 수 있는지 표시하는 용도. 여기선 메소드를 타겟으로 한다.

@Retention

  • 어노테이션을 정의한 파일(@interface)에 사용하는 어노테이션
  • 이 어노테이션 정보를 언제까지 유지할 것인지 표시하는 용도이다.

@Aspect

  • 어노테이션을 읽어 처리하는 역할을 수행하는 Aspect 클래스라고 명시해주는 어노테이션이다.

@Around(“@annotation(Annotation_name)”)

  • AOP를 이용한 Aspect 클래스의 구현을 위해 수행할 메소드에 붙이는 어노테이션이다.
  • 정의한 일들을
  • 이 어노테이션이 붙은 메소드는 joinPoint라는 인터페이스 타입의 파라미터를 받을 수 있다.
  • 이는 어노테이션이 붙은 타겟, 즉 @Annotation_name 이 붙은 메소드를 받는 것이다.

@Order(value)

  • Bean의 우선순위가 필요할 때 사용하는 어노테이션
  • 객체가 생성되어 Bean으로 등록되는 순서나, 주입받는 우선순위 등을 설정하기 위해 사용한다.
  • 주의할 점은, 주입 받는 여러 개의 Bean중 일부만 @Order를 써주게 되면 나머지 Bean은 임의의 순서로 적용된다.




© 2020.07. by Sanggoe

Powered by Sanggoe