Annotation
- 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터
- 다양한 기능을 부여하는 역할을 한다.
- 예를 들어 Annotation을 사용하면 Spring Framwork는,
- 각각의 해당 클래스들이 어떤 역할을 하는지 정한다.
- Bean 주입해준다.
- 자동으로 getter, setter, toString, 생성자들을 생성해주기도 한다.
- 이와 같이 Annotation을 사용하면 코드량을 감소할 수 있고, 유지보수하기도 쉽고, 당연히 생산성도 증가한다. 뿐만 아니라 협업에서는 자유도가 떨어지므로 오히려 더 체계적인(?) 업무를 진행할 수 있다. (패턴이 정해져있기 때문에 코드 가독성도 그냥 원하는 대로 짜는 것보단 좋다.)
주요 Annotation(1)
@SpringBootApplication
- 스프링 부트의 가장 기본적인 설정을 선언
- auto-configuration을 담당하며, 스프링부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동적으로 설정
- 가장 먼저 읽기 때문에 프로젝트 최상단에 위치해야한다!
- @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지를 하나의 어노테이션으로 합친 것
- @EnableAutoConfiguration : spring Application context를 만들때 자동으로 설정하는 기능을 켠다. (classpath의 내용을 기반해서 자동으로 생성)
- @ComponentScan : @service, @repository, @controller, @configuration이 붙은 Bean들을 찾아서 Context에 bean등록 해주는 어노테이션
@Controller
- 전통적인 SPRING MVC 컨트롤러
- Model 객체를 만들어 데이터를 담고 View에 반환
- 프레젠테이션 레이어, 웹 요청과 응답을 처리
@RestController
- RESTful 웹 서비스 컨트롤러
- 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP응답에 담아 전송
- @Controller도 @ResponseBody를 사용해서 만들 수는 있지만 이러한 방식은 RESTFul 웹 서비스의 기본 동작이기 때문에 @Controller + @ResponseBody의 동작을 조합하여 만든 것이@RestController이다.
- 프레젠테이션 레이어, 웹 요청과 응답을 처리(view로 응답하지 X)
@Service
- 비즈니스 로직이나 responsitory layer 호출하는 함수에 사용한다.
- 서비스 레이어, 내부에서 자바 로직을 처리한다.
@Repository
-퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리한다.
@configuration
- @configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있음
@Configuration
public class SecurityConfiguration {...}
@Entity
@Slf4j
- 스프링 로그 메서드 지원(요청들의 기록을 남길 수 있음)
@Autowired
- 속성(필드), Setter method, Constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean에 주입
- 자동으로 의존하는 다른 객체를 찾아 연결해주는 어노테이션
@component @Bean
- @Component는 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 어노테이션
@Component(value="example")
public class Example{
public Example() {
System.out.println("ex");
}
}
- @Bean는 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려고 할 때 사용되는 어노테이션
- ex. ArrayList와 같은 라이브러리를 Bean으로 등록하기 위해서는 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고 @Bean 어노테이션을 사용
@Bean
public ArrayList<String> array(){
return new ArrayList<String>();
}