상세 컨텐츠

본문 제목

[Spring] 어노테이션(Annotaiton)

IT/기초

by SINAFLA 2021. 8. 8. 16:52

본문

반응형



어노테이션(Annotation)이란

  • Annotaion(@) 은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술입니다.
  • 메타데이터로 실제 데이터가 아닌 Data를 위한 데이터라고도 부릅니다. JDK5부터 등장했습니다.
  • 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법 중 하납니다.

어노테이션(Annotation) 사용 이유

  • 모든 기능을 코드로 처리를 하면 길어질 경우 사소한 것도 헷갈릴 수 있습니다. 그래서 지금 하고 있는 일들이 어떤 것인지 명시해준다 생각하시면 됩니다.

어노테이션(Annotation) 사용 순서

  1. 어노테이션 정의
  2. 클래스에 어노테이션을 배치
  3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능 실시

리플렉션(Reflection)이란

  • 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 생성자(Constructor), 멤버 필드(Member Variables) 그리고 멤버 메서드(Member Method) 등을 사용할 수 있도록 합니다.
  • 컴파일 시간(Compile Time)이 아니라 실행 시간(Run Time)에 동적으로 특정 클래스의 정보를 객체화를 통해 분석 및 추출해낼 수 있는 프로그래밍 기법입니다.

자주 사용하는 어노테이션(Annotation) 종류

@ComponentScan

  • @Conpomnent와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean 등록을 해줍니다.
  • 자동으로 등록되는 Bean의 이름에서 클래스의 첫문자가 소문자로 바뀐 이름이 자동적용 됩니다.

@Component

  • @Component 은 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation입니다.
  • 추가 정보가 없으면 class의 이름을 camelcase로 변경한 변경한 이름이 Bean ID로 사용됩니다.
  • @Bean과 달리 @Component는 value를 이용해 Bean의 이름을 지정합니다.

@Bean

  • @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들때 사용됩니다.

@Autowired

  • 속성, setter method, constructor(생성자)에서 사용하며 Type에 따라서 Bean을 주입 해줍니다.
  • 이 Annotation을 사용할 시 스프링이 자동적으로 값을 할당합니다.
  • Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용합니다.

Bean을 주입받는 방식

  • @Autowired
  • setter
  • 생성자(@AllArgsContstructor 사용) - 권장방식

@Controller

  • Spring의 Controller를 의미한다. Spring MVC에서 Controller 클래스에서 쓰입니다.

@RestController

  • Spring에서 Controller 중 view로 응답하지 않는 Controller를 의미합니다.
  • method의 반한 결과를 JSON형태로 반환합니다.
  • @Controller + @ResponseBody를 사용한 반환값과 동일합니다.

@Service

  • 비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도입니다.

@Repository

  • DataBase에 접근하는 method를 가지고 있는 class에서 쓰입니다.

@Configuration

  • @Configuration 은 Bean에 등록할 메소드가 있는 클래스에 적용합니다. @Bean을 해당 class의 method을 적용하면 @Autowired로 Bean을 부를 수 있습니다.

@Qualifier("id명")

  • @Autowired와 같이 쓰이며, 같은 타입의 Bean 객체가 있을 경우 해당 아이디를 적어 원하는 Bean이 주입될 수 있도록 합니다.

@PropertySource

  • 해당 프로퍼티 파일(application.properties 파일 등)을 로딩하여 사용할 수 있게합니다.

@ConfigurationProperties

  • yaml 파일을 읽습니다.
  • 속성 클래스를 따로 만들어 두고, 그 위에 (prefix="etc")을 써서 프로퍼티의 접두사를 사용할 수 있습니다.

@Value

  • 프로퍼티 파일에서 값을 가져와 적용할 때 사용합니다.

@SpringBootAppliction

  • @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지가 하나로 합쳐진 어노테이션입니다.

@RequestMapping

  • 요청 URL을 어떤 method가 처리할지 매핑해주는 어토테이션입니다.
  • 요청 받는 형식이 정의되지 않으면 Default로 Get 방식으로 처리됩니다.

@ModelAttribute

  • view, 즉 화면에서 전달해주는 parameter를 Class(VO/DTO)의 멤버 변수로 binding 해주는 어노테이션입니다.

@GetMapping

  • RequestMapping(method = RequestMethod.GET)과 같습니다.

@RequestBody

  • 요청이 온 데이터(JSON이나 XML형식)를 바로 Class나 Model로 매핑하기 위한 어노테이션입니다.
  • POST, PUT, PATCH로 요청을 받을 때에 요청에서 넘어온 body 값들을 자바 타입으로 파싱해줍니다.

@RequestHeader

  • Request의 Header 값을 가져올 수 있습니다. 메소드의 파라미터에 사용합니다.

@RequestParam

  • @PathVariable과 비슷합니다. request의 Parameter에서 가져옵니다. method의 파라미터에 사용됩니다.

@ResponseBody

  • HttpMessageConverter를 이용해 JSON 혹은 xml로 요청에 응답할 수 있게 해주는 어노테이션입니다.
  • JSON 형식의 값을 응답할 때 사용하는 어노테이션으로 문자열을 리턴하면 그 값을 Http Response Header가 아닌 response body에 들어갑니다.
  • 객체를 return하는 경우 Jackson 라이브러리에 의해 문자열로 변환되어 전송됩니다.

@PathVariable

  • URL에서 특정값을 변수로 받아올 경우 사용합니다.

@ExceptionHandler

  • 해당 클래스의 예외를 캐치하여 처리합니다.

@Transactional

  • 데이터베이스 트랜잭션 설정하고 싶은 method에 어노테이션을 적용하면 method 내부에서 일어나는 데이터베이스 로직이 전부 성공하게 되거나 데이터베이스 접근 중 하나라도 실패하면 다시 롤백해주는 어노테이션입니다.

@Scheduled

  • 정해진 시간에 실행해야하는 경우(배치파일)에 사용합니다.

Lombok 어노테이션(Annotation) 종류

@NoArgsConstructor

  • 기본 생성자를 자동으로 추가합니다.
  • Entity 클래스를 프로젝트 코드상에서 기본 생성자를 생성하는 것은 금지하고 JPA에 의해 Entity 클래스를 생성하는 것을 허용하기 위해 추가합니다.

@AllArgsConstructor

  • 모든 필드 값을 파라미터로 받는 생성자를 추가합니다.

@RequiredArgsConstructor

  • final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 추가합니다.

@Getter

  • Class 내 모든 필드의 Getter method를 자동 생성합니다.

@Setter

  • Class 내 모든 필드의 Setter method를 자동 생성합니다.

@Builder

  • 어느 필드에 어떤 값을 채워야 할지 명확하게 정하여 생성 시점에 값을 채워줍니다.

@Data

  • @Getter, @Setter, @EqualsAndHashCode, @AllArgsConstructor을 포함한 Lombok에서 제공하는 필드와 관련된 모든 코드를 생서합니다.

JPA 어노테이션(Annotation) 종류

@Entity

  • 실제 DB의 테이블과 매칭될 Class임을 명시합니다. 테이블과 매칭될 클래스

@Table

  • Class 이름을 테이블 이름 정보로 매핑합니다.

@Id

  • 해당 테이블의 PK 필드를 나타냅니다.

@GeneratedValue

  • PK의 생성 규칙을 나타냅니다.

@Column

  • 테이블의 컬럼을 나타내며, 굳이 선언하지 않더라도 해당 Class의 필드는 모두 컬럼이 됩니다.
반응형

관련글 더보기

댓글 영역