Annotation 메모장!!

청포도봉봉이·2023년 3월 26일
0

메모오

목록 보기
1/11
post-thumbnail

@ActiveProfiles

@ActiveProfiles("local")
  • @ActiveProfiles는 스프링 프레임워크에서 제공하는 어노테이션 중 하나로, 테스트 코드에서 사용할 프로파일을 설정할 수 있다.

  • 스프링 프레임워크에서는 여러 개의 프로파일을 사용하여 환경에 따라 설정 값을 변경할 수 있다. @ActiveProfiles 어노테이션을 사용하면, 테스트 코드에서 어떤 프로파일을 사용할지 설정할 수 있다. 예를 들어, @ActiveProfiles({"test"})와 같이 설정하면, 테스트 코드에서는 "test" 프로파일을 사용하게 된다.

  • 프로파일을 설정하는 것은 데이터베이스 설정, 외부 서비스 연결 등의 환경에 따라 달라지는 설정을 다룰 때 유용하다. 특히, 테스트 코드에서는 로컬 환경과 운영 환경에서 다른 설정을 사용해야 할 경우가 많으므로, @ActiveProfiles 어노테이션을 사용하여 쉽게 프로파일을 변경할 수 있다.

  • @ActiveProfiles 애노테이션은 JUnit과 TestNG과 같은 테스트 프레임워크에서 사용할 수 있으며, 스프링 부트와 같은 스프링 기반의 프로젝트에서 많이 사용된다.


@Bean

  • @Bean 어노테이션은 스프링에서 Bean으로 등록될 메서드에 붙입니다.
  • 스프링 컨테이너는 @Bean이 붙은 메서드를 호출하고, 반환된 객체를 Bean으로 등록합니다.
    이후 스프링 컨테이너는 등록된 Bean을 관리하고, 필요한 곳에서 주입(inject)합니다.

@RequiredArgsConstructor

  • @RequiredArgsConstructor 어노테이션은 Lombok에서 제공하는 어노테이션입니다.
  • 클래스의 생성자를 자동으로 생성해주는데, final 키워드가 붙은 필드만 생성자의 인자로 받습니다.
    이를 통해 불변성(immutability)을 보장할 수 있습니다.

@Repository

  • @Repository 어노테이션은 데이터베이스와 관련된 작업을 수행하는 클래스에 붙입니다.
    이를 통해 스프링은 해당 클래스를 데이터 액세스 계층(Data Access Layer)에서 사용될 수 있는 Bean으로 등록합니다.
  • 또한, @Repository 어노테이션을 붙이면 스프링이 발생하는 데이터 액세스 예외(DataAccessException)를 일관된 예외(DataAccessException)로 변환해주는 기능도 제공합니다.

@SpringBootTest

  • @SpringBootTest 어노테이션은 스프링 애플리케이션의 통합 테스트를 작성할 때 사용됩니다.
  • 스프링 애플리케이션이 실행되고, 실제로 컨테이너가 생성되기 때문에, 다른 테스트 어노테이션과는 달리 느리고, 실제 DB와 연결하는 등 더 많은 자원을 사용합니다.



@Transactional

  • @Transactional 어노테이션은 트랜잭션 처리를 위해 메서드나 클래스에 붙입니다.
  • 스프링에서는 AOP(Aspect Oriented Programming)를 이용해 @Transactional 어노테이션이 붙은 메서드나 클래스의 실행을 트랜잭션으로 묶어줍니다. 이를 통해 일관된 데이터 처리를 보장할 수 있습니다.

@Autowired

  • @Autowired 어노테이션은 스프링 컨테이너에서 Bean을 주입받을 때 사용됩니다.
  • 스프링은 @Autowired 어노테이션이 붙은 필드, 생성자, 메서드의 매개변수 등에 자동으로 Bean을 주입해줍니다.
  • Bean을 주입받을 때는 타입(Type)으로 찾아서 주입해주기 때문에, 같은 타입의 Bean이 여러 개일 경우, @Qualifier 어노테이션을 함께 사용하여 구분해줄 수 있습니다.
  • 예를 들어, 아래와 같이 @Qualifier 어노테이션을 사용하여 Bean의 이름으로 찾아서 주입받을 수 있습니다.
@Autowired
@Qualifier("memberService")
private MemberService memberService;

@Test

  • @Test 어노테이션은 JUnit에서 테스트 메서드를 작성할 때 사용됩니다.
  • @Test 어노테이션이 붙은 메서드는 JUnit에서 테스트 대상으로 인식되어 실행됩니다.
  • JUnit은 테스트 메서드를 실행할 때, 메서드마다 새로운 인스턴스를 생성합니다.
  • 이를 통해 각각의 테스트가 독립적으로 실행될 수 있습니다.
  • @Before, @After, @BeforeClass, @AfterClass 등의 어노테이션과 함께 사용하여 테스트 환경을 설정할 수 있습니다.
  • 예를 들어, 아래와 같이 @Before 어노테이션을 사용하여 테스트 실행 전에 데이터를 초기화할 수 있습니다.
@Before
public void setUp() {
    // 데이터 초기화
}

@BeforeEach

  • @BeforeEach 어노테이션은 JUnit 5에서 사용되는 어노테이션으로, @BeforeEach는 이름 그대로 각각의 테스트 메서드마다 실행되며, @BeforeEach는 테스트 메서드 간의 의존성을 최소화하고 각각의 테스트를 분리하여 독립적으로 실행할 수 있는 유연한 테스트 코드를 작성하는 데 도움이 됩니다.

@Before vs @BeforeEach

  • @Before 어노테이션은 JUnit 4에서 사용되는 어노테이션으로, 각각의 테스트 메서드가 실행되기 전에 실행되는 메서드를 정의할 때 사용됩니다.
  • @BeforeEach와 @Before는 기능적으로는 동일하지만, JUnit 5에서는 @BeforeEach를 사용하는 것이 권장됩니다.
  • @Before는 모든 테스트 메서드 실행 전에 한 번만 실행됩니다.

@After

  • @After : 각각의 테스트 메서드가 실행된 후에 실행됩니다.

@BeforeClass

  • @BeforeClass : 테스트 클래스 내에 있는 모든 테스트 메서드가 실행되기 전에 한 번 실행됩니다. static 메서드로 정의되어야 합니다.

@AfterClass

  • @AfterClass : 테스트 클래스 내에 있는 모든 테스트 메서드가 실행된 후에 한 번 실행됩니다. static 메서드로 정의되어야 합니다.

@Before과 @After 어노테이션은 각각의 테스트 메서드마다 실행되며, 테스트 메서드의 실행 전/후에 수행할 작업을 정의할 수 있습니다.


@BeforeClass와 @AfterClass 어노테이션은 각각의 테스트 클래스에서 한 번씩만 실행되며, 테스트 클래스 전체의 실행 전/후에 수행할 작업을 정의할 수 있습니다.


@Data

  • @Data는 Lombok 라이브러리에서 제공하는 어노테이션(annotation) 중 하나입니다.

  • @Data 어노테이션을 사용하면 클래스 내부의 모든 필드에 대해 생성자, getter, setter, toString, equals, hashCode 등의 메서드를 자동으로 생성할 수 있습니다.


@QueryProjection

Spring Data JPA는 엔티티(entity)를 조회하기 위해 Repository 인터페이스를 제공하며, 이를 사용하여 데이터베이스에서 엔티티를 조회할 수 있습니다. 하지만 때로는 엔티티의 일부 정보만을 조회해야 하는 경우가 있습니다. 이런 경우에는 엔티티 대신 DTO(Data Transfer Object)를 사용하여 필요한 정보만을 조회할 수 있습니다.

  • @QueryProjection 어노테이션은 DTO에 대한 생성자를 자동으로 생성해주는 기능을 제공합니다. 이 어노테이션을 사용하면 쿼리에서 가져온 데이터를 DTO에 매핑하는 과정에서 생성자를 직접 작성하지 않아도 됩니다.

public class UserDto {
    private Long id;
    private String name;

    @QueryProjection
    public UserDto(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    // getters and setters
}

QUser qUser = QUser.user;
List<UserDto> userDtos = queryFactory
    .select(Projections.constructor(UserDto.class, qUser.id, qUser.name))
    .from(qUser)
    .where(qUser.age.gt(age))
    .fetch();
  • 위 코드에서는 Projections 클래스의 constructor 메서드를 사용하여 DTO 클래스의 생성자를 호출하고, 결과를 매핑합니다. @QueryProjection 어노테이션을 사용하면 생성자를 직접 작성하지 않아도 되므로 코드를 간결하게 유지할 수 있습니다.

  • @QueryProjection 어노테이션의 경우, QType을 생성하여 사용합니다. 컴파일러로 타입을 체크할 수 있지만, DTO에 Querydsl 의존성과 DTO까지 Q파일을 생성해야 하는 단점이 있습니다.


@Profile

  • @Profile 어노테이션은 Spring의 Profile 기능을 활용하기 위해 사용됩니다.
  • Profile은 Spring 애플리케이션이 실행될 때, 환경에 맞게 빈을 로드하고 설정을 변경하는 기능입니다.
  • @Profile 어노테이션을 사용하면, 특정한 환경에서만 사용할 빈을 정의할 수 있습니다.
  • 예를 들어, @Profile("dev")라고 정의하면, dev 환경에서만 해당 빈이 사용되게 됩니다.

@Component

  • @Component 어노테이션은 Spring에서 Bean으로 등록하고자 하는 클래스에 사용됩니다.
  • @Component 어노테이션을 사용하면 해당 클래스를 Bean으로 등록할 수 있으며, 이후에 Spring 컨테이너에서 해당 빈을 사용할 수 있게 됩니다.

@PersistenceContext

  • @PersistenceContext 어노테이션은 JPA(Java Persistence API)를 사용하는 애플리케이션에서 EntityManager를 주입받기 위해 사용됩니다.
  • EntityManager는 JPA에서 데이터베이스와 상호작용하는데 사용되는 객체입니다.
  • @PersistenceContext 어노테이션을 사용하면, 해당 필드에 EntityManager가 주입되어 데이터베이스와 상호작용할 수 있게 됩니다.

@PostConstruct

  • @PostConstruct 어노테이션은 Bean이 초기화된 후에 실행될 메소드를 지정하기 위해 사용됩니다.
    Bean이 생성된 이후에 어떠한 초기화 작업을 해야할 경우, @PostConstruct 어노테이션을 붙인 메소드를 작성하면 해당 Bean이 생성될 때 자동으로 실행됩니다.

@AllArgsConstructor

  • @AllArgsConstructor 어노테이션은 모든 필드를 매개변수로 갖는 생성자를 자동으로 생성합니다. 이는 클래스의 모든 필드를 인자로 받는 생성자를 만들어주는 편리한 방법입니다. 주로 객체를 초기화할 때 사용됩니다.

@NoArgsConstructor

  • @NoArgsConstructor은 매개변수 없는 기본 생성자를 자동으로 생성합니다. 이 생성자는 클래스의 인스턴스를 생성할 때 사용됩니다. 예를 들어, 직렬화된 객체를 역직렬화할 때는 매개변수가 없는 생성자가 필요합니다.
profile
자존감 낮아질 시간에 열심히 학습하고 커밋하자

0개의 댓글