- MVC 정의
Model : 데이터를 관리
View : 눈에 보이는 화면
Controller 요청에 따른 코드 흐름을 제어
- 데이터 흐름 정의
서버 -> Controller -> Service -> DAO -> Service -> Controller -> 서버
- Bean 간단 정의
Bean | 설명 |
@Bean | 메서드를 통해 반환하는 객체를 Bean으로 등록 |
@Component | 개발자가 만든 클래스 객체를 생성해서 Bean으로 등록 |
@Controller | Component의 일종 사용자 요청에 따라 자동으로 호출되는 메서드를 가지고 있는 Bean을 등록 |
@RestController | Component의 일종 사용자의 요청에 따라 자동으로 호출되는 메서드를 가지고 있는 Bean을 등록 Resttful API 서버 구성시 사용 |
@ControllerAdvice | 예외가 발생 했을때 사용할 Global Exception Handler로 사용할 Bean을 등록 |
@Service | Controller에서 호출하는 메서드를 가지고 있는 Bean을 정의 @Component로 정의한 Bean과 차이는 없음 |
@Repository | @Service로 정의한 Bean에서 호출하는 메서드를 가지고 있는 Bean을 정의 데이터 베이스와 관련된 작업을 구현 @Component로 정의한 Bean과 차이가 없음 DAO 역할을 한다. |
- @ComponentScan
특정 패키지를 지정해서 해당 페이지에 @Component라는 이름으로 정의 되어져 있는 클래스들을 객체를 생성해서 Bean으로 등록을 하라는 명령.
- Java 프로젝트에서의 컴포넌트 스캔 사용
// 스캔할 패키지를 지정한다.
@ComponentScan("com.example.controller")
@ComponentScan("com.exmaple.dao")
@ComponentScan("com.example.service")
public class ServletAppContext implements WebMvcConfigurer{
- XML 프로젝트에서의 컴포넌트 스캔 사용
- @Component
일반 적인 Bean 정의.
우리가 주입 받아서 사용할 목적으로 만든다.
@Component
public class UserController {
- @Controller
@Component를 이용해서 Bean을 만든 것과 동일 하다. 다만 이 Bean은 Spring MVC에게 Controller 역할을 한다는 것을 알려준 것이다.
@Controller
public class UserController {
SPRING MVC에서 어떠한 요청(예:GET요청)이 발생 했을때 그 요청 정보를 분석 해서 아래와 같이 요청과 매핑되어져 있는 메서드를 자동으로 호출 해준다.
@GetMapping("/login")
public String login() {
return "user/login";
}
- @Service
@Component 한것과 차이는 없다. 그냥 의미상 Service 역할을 한다는 것을 알려 준 것.
@Service
public class UserService {
- @Repository
@Component 한것과 차이는 없다. 그냥 의미상 DAO역할을 한다는 Bean 이라는 것을 알려 준 것.
DB와 관련된 작업을 구현 한다.
@Repository
public class UserDao {
- @Autowired
사용할 빈을 자동 주입 받는다.
아래에선 Controller에서 사용하기 위해 UserService Bean을 주입 받았다.
@Controller
public class UserController {
@Autowired
private UserService userService;
기본 적인 전체 구조를 한번 더 정리 하자면 @Repository 에서 DB와 관련된 작업을 하고 이것을 @Service 에서 주입 받아서 작업을 한 뒤 @Controller 에게 넘겨 준다.
반드시 이렇게 되는 것은 아니지만 이렇게 코드를 다 분리해서 만들어야지만 추후 유지보수 시에 용이하다.
'프로그래밍 > SPRING' 카테고리의 다른 글
[SPRING] Mybatis 소개와 설정 그리고 사용 하기 요약 (0) | 2022.05.12 |
---|---|
[SPRING MVC] Bean 설정 시 ServletContext 와 RootContext 기준 (0) | 2022.05.09 |
[SPRING MVC] mybatis 설정 xml (0) | 2022.05.05 |
[SPRING] SPRING MVC 코드 동작 순서 (interceptor의 호출) (0) | 2022.05.05 |
[SPRING] 실행된 sql 확인 하는 방법 (0) | 2022.04.10 |