본문 바로가기
Spring

[SpringBoot] annotations 의미를 간략하게 기술

by 루에 2022. 6. 20.
반응형

@Data

Lombok을 설치하면 사용할 수 있는 어노테이션. 아래 기술하는 것들을 한 번에 설정할 수 있다.

@toString - 해당 메소드의 모든 필드를 출력하는 toString 메소드를 생성합니다.
@EqualsAndHashCode - hashcode와 equals 메소드를 생성합니다.
@Getter / @Setter - 말 그대로 getter함수와 Setter 함수를 생성합니다.
@NoArgsConstructor - 파라미터를 요구하지 않는 생성자를 생성합니다.  
(access =AccessLevel.PROTECTED) 를 추가하게 될 경우 기본생성자의 접근 권한을 protected로 제한하게 됩니다. 
@RequiredArgsConstructor - 파라미터를 요구하는 생성자를 생성합니다. 
@AllArgsConstructor - 모든 인자를 가진 생성자를 생성합니다. 

 

@Builder

Lombok에 builder 패턴을 쉽게 설정하게 해주는 어노테이션. 빌더 패턴이란, 매개변수에 기본값을 부여하여 사용자가 일부 매개변수만 set하고 build하여 객체를 생성할 수 있도록 하는 것. kotlin으로 가면 쓸 일이 없어질 듯 하다.

https://devfunny.tistory.com/423

 

[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기

들어가기 전 Lombok을 사용하여 구현하기 전, 라이브러리를 사용하지 않고도 구현할 줄 알아야한다. 아래 포스팅을 참고하자. devfunny.tistory.com/409 [SpringBoot + JPA] DTO, Entity의 빌더패턴 적용기 도입..

devfunny.tistory.com

@ToString

매개변수들을 리턴해주는 toString 함수를 자동으로 오버라이드 해줌

 

@AllArgsConstructor

클래스에 존재하는 모든 매개변수에 대한 생성자를 자동 생성

 

@NoArgsConstructor

파라미터가 없는 생성자를 자동 생성

 

@Retention(RUNTIME)

어노테이션이 실제 적용되고 유지되는 범위 지정

RetentionPolicy.RUNTIME 은 컴파일 이후에도 JVM 에 의해서 계속 참조가 가능합니다. 주로 리플렉션이나 로깅에 많이 사용됩니다.
RetentionPolicy.CLASS 은 컴파일러가 클래스를 참조할 때까지 유효합니다.
RetentionPolicy.SOURCE 은 컴파일 전까지만 유효합니다. 즉, 컴파일 이후에는 사라지게 됩니다.

 

@Target(PARAMETER)

컴파일러가 이 어노테이션이 언제 혹은 어디에 사용될지 결정하기 위한 어노테이션

ElementType.PACKAGE : 패키지 선언 시
ElementType.TYPE : 타입 선언 
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언 
ElementType.CONSTRUCTOR : 생성자 선언 
ElementType.FIELD : 멤버 변수 선언 
ElementType.LOCAL_VARIABLE : 지역 변수 선언 
ElementType.METHOD : 메서드 선언 
ElementType.PARAMETER : 전달인자 선언 
ElementType.TYPE_PARAMETER : 전달인자 타입 선언 
ElementType.TYPE_USE : 타입 선언 

https://sanghye.tistory.com/39

 

@Slf4j

SLF4J는 다양한 Logging Framework(java.util.logging, logback, log4j)의 추상화를 제공합니다.
SLF4J는 Compile 시 하나의 logging framework와 binding 해줍니다.

https://hello-bryan.tistory.com/331

 

@Autowired

생성자, setter 등에 사용하여 매개변수에 값을 자동으로 넣어준다.

의존객체가 2개 이상이면 오류가 발생한다.(@Qualifier 또는 @Resource 를 사용해 bean을 특정시켜야 오류가 나지 않는다)

https://maivve.tistory.com/184

 

[Spring] Spring Annotation 으로 쓰이는 @Autowired 를 사용하는 이유 쉽게 풀어보자!

안녕하세요. Spring Framework 를 사용하다보면 MVC 중 컨트롤러에서 자주 사용하는 이 @Autowired 에 대해 알아보려 합니다. 예를 들어 @Autowired private TempBc tempBc; 이렇게 사용하곤 하는데요. 왜 저기서..

maivve.tistory.com

 

 

@EnableWebSecurity

@EnableGlobalMethodSecurity

@RequiredArgsConstructor

초기화 되지 않은 모든 final 필드, @NonNull과 같이 제약조건이 설정되어있는 모든 필드들에 대한 생성자를 자동으로 생성한다.

 

@Configuration

@Bean

Spring의 DI Container에 의해 관리되는 POJO(Plain Old Java Object)를 Bean이라고 부르며, 이 어노테이션을 붙여 수동으로 bean으로 등록한다. Configuration 안에서 선언해야 싱글톤이 보장되므로 함께 사용해야 한다.

  • 수동으로 스프링 컨테이너에 빈을 등록하는 방법
  • 개발자가 직접 제어가 불가능한 라이브러리를 빈으로 등록할 때 불가피하게 사용
  • 유지보수성을 높이기 위해 애플리케이션 전범위적으로 사용되는 클래스나 다형성을 활용하여 여러 구현체를 빈으로 등록 할 때 사용
  • 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해 주어야 싱글톤이 보장됨

https://mangkyu.tistory.com/75

 

@EnableJpaRepositories

JpaRepository를 자동으로 bean으로 등록해주는 어노테이션.

  • JpaRepository에 대한 설정정보를 자동적으로 로딩하고 이 정보를 토대로 Repository 빈을 등록하는 역할
  • @SpringBootApplication 어노테이션 안에 이미 등록되어 있어 스프링 부트를 사용할 경우에는 따로 어노테이션을 추가할 필요가 없어집니다.
  • Spring에서는 @Configuration 클래스에서 사용해야함
  • 기본적으로 해당 Config 클래스의 하위 패키지를 스캔

https://jyj98020.tistory.com/372

 

Spring Boot Main Annotation

@SpringBootApplication @ComponentScan("xx.xxx.*") @EnableJpaRepositories("xx.xxx.*") @EntityScan("xx.xxx.*") @MapperScan("xx.xxx.xxx") @EnableOAuth2Client @SpringBootApplication 스프링 부트의 가장..

jyj98020.tistory.com

https://parkadd.tistory.com/106

 

[Spring Data JPA] JpaRepository를 상속받기만 하면 빈으로 등록된다?

Spring Data Jpa를 사용하면서 우리가 사용하는 Repository 인터페이스는 아래와 같습니다. import org.springframework.data.jpa.repository.JpaRepository; public interface AccountRepository extends JpaRepo..

parkadd.tistory.com

 

@Order

객체가 bean으로 등록될 때 우선순위를 지정(낮을수록 높음)

 

@Primary

@Qualifier

@Named

컨테이너에서 주입할 대상이 여러개가 되는 경우가 있다. 이럴 경우 우선권을 설정하여 부여하도록 하는 어노테이션.

bean에 qualifier 속성에 이름을 지정하고 @Qualifier(name="XXX")로 사용

@Named는 속성 부여할 필요 없이 bean id를 가지고 사용

위 두 방법으로 명시적으로 사용할 수 있으나, 그렇게 하지 않고 하나의 객체를 상속받아 구현한 bean이 여러개일 경우 기본값이 될 것 하나에 @Primary를 붙이면 그 놈이 우선순위를 갖게된다. 기본값을 지정한다고 볼 수 있다.

 

@Getter

@Setter

set/get 함수를 자동으로 만든다.

 

@Value

application.properties에 지정하는 프로퍼티 값을 읽어와서 자동 할당한다.

 

@Component

직접 작성한 class를 bean으로 등록하기 위한 어노테이션

 

@EnableCaching

자주 변하지 않는 정보를 캐싱한다.

 

@EnableAsync

비동기를 위한 어노테이션. 어노테이션을 클래스에 지정하고 비동기로 동작시키고 싶은 함수에 @Async 어노테이션을 사용하면 멀티 쓰레드로 동작하게 한다.

 

@ApiOperation

Swagger 어노테이션. api에 대한 설명

@ApiImplicitParam

Swagger 어노테이션. api의 파라미터에 대한 설명

@ApiOperation(
        value = "사용자 정보 조회"
        , notes = "사용자의 ID를 통해 사용자의 정보를 조회한다.")
    @ApiImplicitParam(
        name = "id"
        , value = "사용자 아이디"
        , required = true
        , dataType = "string"
        , paramType = "path"
        , defaultValue = "None")

https://velog.io/@gillog/Swagger-UI-Annotation-%EC%84%A4%EB%AA%85

 

@PathVariable

@RequestParam이나 @GetMapping 등에서 path 속성에 {id} 등 variable을 지정했을 때 함수에서 참조하기 위한 어노테이션.

function(@PathVariable id) 이런식으로 사용

 

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다.
  • JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 를 붙여야 한다.
  • 예를들어 member 클래스에 @Entity가 붙으면 member라는 테이블에 매핑이 되는것임.

@Id

  • primary key에 매핑되도록 하는 어노테이션

@GeneratedValue

  • strategy = GenerationType.IDENTITY 옵션은 기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 따로 할당하지 않아도 데이터베이스가 자동으로 AUTO_INCREMENT를 하여 기본키를 생성해준다.

@JoinColumn

  • foreign key를 매핑할 때 사용하는 어노테이션

@Enumerated(EnumType.STRING)

  • Enum 클래스에 선언된 상수의 이름을 String 클래스 타입으로 변환하여 DB에 넣어줌

https://velog.io/@wnsghks4104/Spring-boot-Annotation-%EC%A0%95%EB%A6%AC2Entity-%EA%B4%80%EA%B3%84

 

[Spring boot] Annotation 정리2(Entity 관계)

@Entity@Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다.JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 를 붙여야 한다.예를들어 member 클래스에 @Entity가

velog.io

 

@Table

entity와 매핑할 테이블 이름을 지정. 지정하지 않을 경우 엔티티 이름으로 사용

Name : 매핑할 테이블 이름 (default. 엔티티 이름 사용)

Catalog : catalog 기능이 있는 DB에서 catalog 를 매핑 (default. DB 명)

Schema : schema 기능이 있는 DB에서 schema를 매핑

uniqueConstraints : DDL 생성 시 유니크 제약조건을 만듦. 스키마 자동 생성 기능을 사용해서 DDL을 만들 때만 사용

https://data-make.tistory.com/610

 

[JPA] 엔티티와 매핑. @Entity, @Table, @Id, @Column..

| 엔티티와 매핑 객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @JoinColumn 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..

data-make.tistory.com

 

@Repository

스프링은 DAO관련 빈을 자동등록 대상으로 만들때 사용하도록 @Repository 어노테이션을 제공한다.
@Component를 부여해도 되지만, 스프링에서는 @Repository 어노테이션을 권장한다.
둘다 똑같이 빈을 생성한다는 의미이지만, 이름을 달리해서 얻는 이점이 있다.
생성하는 빈의 종류를 나누어서 AOP 적용 대상 그룹을 만드는 등,
특정한 어노테이션을 갖는 그룹에 부가적인 기능을 부여할 수 있다.
예를들어, @Repository 는  DAO관련된 빈만 생성하니, DAO관련 부가기능을 @Repository를 이용해서 적용하면 된다. 

https://m.blog.naver.com/kbh3983/220908370180

 

[Spring] Stereotype Annotation - @Component, @Repository, @Service, @Controller, @Store

Stereotype Annotation : 스테레오타입 어노테이션이란? Stereotype : 고정된 문구란 의미 디폴트로 적...

blog.naver.com

 

@AutoConfigureMockMvc

MockMvc를 제어하는 어노테이션.

https://we1cometomeanings.tistory.com/65

 

#3-3_ 스프링부트 테스트코드 작성시 @WebMvcTest 와 @AutoConfigureMockMvc 의 차이점

스프링부트 테스트 코드를 작성할 때 java.lang.NullPointerException이 떴다. 그래서 @WebMvcTest 을 @AutoConfigureMockMvc으로 변경해줬다. 그렇다면 @WebMvcTest 와  @AutoConfigureMockMvc은 무엇일까? 우선..

we1cometomeanings.tistory.com

 

@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)

@SpringBootTest

통합 테스트를 위한 어노테이션. 모든 bean 객체 등을 Mock으로 생성해준다.

 

@ExceptionHandler

Controller 계층에서 발생하는 에러나 Exception을 잡아서 처리해주는 핸들러 역할을 한다.

Service나 Repository 계층에서 발생하는 것들은 잡지 않는다.

 

자세한건

https://velog.io/@kiiiyeon/%EC%8A%A4%ED%94%84%EB%A7%81-ExceptionHandler%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC

 

@RestControllerAdvice

@ControllerAdvice와 동일한 기능을 수행하고 추가적으로 ResponseBody를 통해 객체를 리턴할 수 있다.

@ExceptionHandler, @ModelAttribute, @InitBinder 에 대해 AOP를 적용해 처리하기 위한 어노테이션이다.

 

가령 아래와 같은 코드라면 정해진 범위 내에서 Exception이 발생하면 eClassName() 함수가 AOP로 동작하여 에러를 처리할 것이다.

@RestControllerAdvice
public class A() {
	@ExceptionHandler(Exception.class)
    private eClassName(Exception e){
    	// todo
    }
}

 

 

@PreAuthorize

@PostAuthorize

@Secured

일반적으로 스프링에서 요청에 대한 권한 별 접근은 configure(http)에서 하게 되는데, 다른 방법을 찾아보면 controller에서 이 어노테이션을 붙여서 권한 접근 제어를 할 수 있다. preauthorize는 실행 전에, post는 실행 후에 검증한다. secured도 실행 전에 검증하는데 Pre와의 차이점은 value로 표현식을 사용할 수 있느냐 없느냐이다. Pre는 표현식으로 or, and 조건을 걸 수 있는 반면 secured는 {"A","B"} 이런식으로 표현해야 한다.

 

 

 

반응형

댓글