- 스테레오 타입 어노테이션이라고 하며,해당 클래스가 어떤 역할을 하는지 명확히 확인이 가능합니다.
(@Component,@Repository,@Service,@Controller등)- 어노테이션 기반 AOP (관점 지향) 프로그래밍이며,
실제 구현보다 역할적인 구분에 초점이 맞춰져 있습니다.
구성요소라는 뜻으로, 개발자가 작성한 Class를 Bean으로 등록한다는 것입니다. ( 해당 클래스를 빈으로 등록해라 )
사용 예시
- 해당 클래스는
Bean으로 등록하여 Spring이 관리한다는 것입니다.
@ComponentScan: Component가 붙은 어노테이션을 Scan(검색) 합니다.main메소드에 있는SpringBootApplication어노테이션에는@ComponentScan이 내장되어있습니다.
👀 알고 있는 @Service, @Controller, @Repository 등의 어노테이션은 @Component 어노테이션을 내장하고있어 main 메소드 실행시 Scan이 되는것입니다.
Bean 으로 만드는 것입니다.@Configuration 어노테이션이 들어간 클래스에서 사용합니다.
- 설정파일을 만들기 위한 어노테이션 or
Bean을 등록하기 위한 어노테이션 입니다.@Configuration을 사용함으로써 가시적으로,Bean을 등록할것이며, 설정파일이라는것을 알수있습니다.
<역할> Bean을 등록할때 "싱글톤" 을 보장합니다. (뒤에서 다룰 내용)
@Controller 와 달리 view 반환없이 문자열 뒤에서 배울 JSON 데이터를 주로 반환 합니다.@RestController = @Controller + @ResponseBody 이며
@ResponseBody란 ?
서버 ➡ 클라이언트 응답 이며, 자바 객체를 JSON 기반의 HTTP Body로 변환 합니다.
✔ @RestController 예제 코드
@RestController // ResponseBody + Controller
@RequiredArgsConstructor
public class AppController {
private final AppService appService;
@GetMapping("read")
public String readOne(){
appService.readStudent(1L);
return "read-done";
}
}
✔ @Controller 와 ResponseBody 사용한 예제
@Controller
@RequiredArgsConstructor
public class AppController {
private final AppService appService;
@GetMapping("read")
public @ResponseBody String readOne(){
appService.readStudent(1L);
return "read-done";
}
}
실무에서는 @RestController 와 @Controller 클래스를 별도로 만들어서 관리하는 것이 일반적입니다.
반복적인 CRUD 작업을 JPA가 처리 해준다고 합니다.
- 인터페이스 프로젝트를 생성후,
extends JpaRepository <내가 사용할 Entity 클래스, 그 Entity의 ID 컬럼의 타입>상속하여 사용합니다.
save 메소드 public void createStudent() {
// save 메소드 없이 되는이유는 JPA가
// 기본적인 CRUD 메소드를 자동으로 해줌
studentRepository.save(newEntity);
}
save 메소드 처럼 Read Update Delete 메소드도 다 제공합니다.
SQL 쿼리문 없이 메소드를 커스텀하여 DB에 접근할수 있습니다.
SELECT * FROM students ORDER BY Name;쿼리문가 동일한 작용을 합니다.
❗❗ 중요
Lombok 라이브러리를 사용하여 편하게 getter, setter, 생성자 주입을 할수 있습니다. 하지만, 지루한 반복을 편리하게 해주는것이지 사용 의미를 알고있어야 합니다.JPA 개념도 마찬가지입니다. SQL 작성하는 방법을 모르고 JPA 만 사용할줄 알면 좋은 개발자가 되지 못합니다.