Spring Streotypes
org.sprinframework.stereotype 패키지에는 Bean 객체로 등록하기 위한
다양한 annotation이 존재한다.
@Controller, @Service, @Repository, @Componenet 등등..
표기된 어노테이션을 보고 해당 클래스가 프로젝트에서 어떤 역할을 맡고 있는지 판단할 수 있고
각 클래스가 담당하는 역할을 개념적으로 구분할 수 있다.
Streotypes의 주된 목적은 구현적 의미보다는 개념적인 의미의 역할 구분이다.
@Component
서비스의 주된 흐름에서 속하지 않는 애들한테 붙여준다.
Controller, Service, Repository가 아닌 평범한 Bean 객체 표현 시 사용..
가장 기초가 되는 어노테이션으로 @ComponentScan을 활용하는 과정에서 spring boot가 검색하는 기초가 된다.
@Component
public class AppComponent {
// ...
}
@Controller
사용자의 입력을 처리하기 위한 부분을 나타내는 어노테이션.
주로 @RequestMapping과 사용.
사용자가 사용할 수 있는 인터페이스를 구현하는 용도로 사용됨.
@Controller
public class AppController {
// ...
}
백엔드 서버에서는 HTML 뿐만 아니라 데이터를 응답할 수도 있다.
@ResponseBody 어노테이션을 활용하면 spring boot에선 HTML view가 아닌 데이터를 응답한다는 의미로 해석하게 된다.
@RestController 어노테이션을 사용하면 @Controller의 역할을 하며 등록된 모든 메소드에 @ResponseBody를 포함시켜준다.
@GetMapping("/students")
public @ResponseBody List<StudentDto> readStudents() {
return service.readStudents();
}
@Service
주된 비즈니스 로직을 구현.
다양한 컴포넌트의 기능을 활용하고, db 조회 기록을 활용해
실제 서비스를 제공하기 위한 주요 기능 담당
@Service
public class AppService {
// ...
}
@Repository
데이터베이스와 직접적으로 소통하는 요소를 지칭하는 어노테이션.
데이터베이스와 소통한 결과를 Service에 응답한다.
@Repository
public class AppRepository {
// ...
}
@Configuration & @Bean
프로젝트 내부에서 활용하기 위한 설정에 필요한 정보들을 모아둔 곳.
@Component
public class AppComponent {
// ...
}
프로젝트에서 외부 API를 활용한다고 했을 때,
외부 API에 요청을 보내기 위한 로직은,
비즈니스 로직 외의 부분으로서 @Component를 활용해서 만들어 볼 수 있다.
@Component
public class AppComponent {
private final AppConfigData data;
public void useApi() {
// 여기서 data 활용
}
}
이때 connectionUrl 같은 경우 Component에서 로직을 진행하기 위한 데이터라기 보다는
로직을 수행하기 위해 필요한 설정에 가깝다.
그래서 이런 설정적인 요소를 담아두기 위해 Configuration을 만들고,
거기에 해당하는 내용을 다루게끔 역할을 분리하는 용도로 활용된다.
이때 이러한 설정을 구성하고, 메소드의 결과로 반환하고 싶을 때
@Bean 어노테이션을 사용한다.
@Configuration
public class AppConfig {
@Bean
public AppConfigData connectionUrl() {
if (/* 통신 정상 작동 확인*/)
return new AppConfigData("main-url");
else return new AppConfigData("backup-url");
}
}
@Bean 어노테이션을 활용하면 Configuration 내부에서 정의한 메소드의 결과만 따로 Bean 객체로서 관리해줌.
Bean 객체를 만드는 과정에서 로직이 필요한 경우 활용 가능 ?
또는 외부 라이브러리에서 제공하는 클래스 활용 시에도 사용 가능.
아래 예제는 구글에서 만든 Gson이라는 라이브러리의 클래스를 Bean 객체로 등록해서 사용할 수 있게 해주는
Configuration과 Bean이다.
@Configuration
public class GsonConfig {
@Bean
public Gson gson() {
return new Gson();
}
}
'멋쟁이 사자처럼 > TIL' 카테고리의 다른 글
230619 10주 1일차 TIL. Queue, HTTP (0) | 2023.06.19 |
---|---|
230615 9주 4일차 TIL. JPA 복습, create, readAll (0) | 2023.06.18 |
230613 TIL. 후위표기법, DFS, MyBatis (0) | 2023.06.13 |
230612 TIL. Stack, Call Stack, 괄호 검사, lombok (0) | 2023.06.12 |
230609 8주 4일차 TIL. @PathVariable, Thymeleaf th:, @{} (0) | 2023.06.11 |