혼자 스프링을 공부하다 보니, 이렇게 디테일한 부분은 항상 새롭다(...)
먼저 @Controller 는 클라이언트로 부터 요청이 왔을 때 dispatcherservlet이 handleradapter를 통해
컨트롤러를 찾기 위해 '컨트롤러' 역할을 한다 명시하는 것으로 알고 있었다.
하지만 @Component, @Service, @Repository는 모두 스프링 컨테이너에 등록하는 것으로
아무거나 사용하면 되는 줄 알았다. 하지만 소스 플젝을 보니 구분되어 사용된 것을
보고....아 뭔가 잘못 알고 있구나 싶어 갓---구글을 통해 찾은 내용을 정리한다!
@Controller : Presentation Layer에서 Contoller를 명시하기 위해서 사용
@Service : Business Layer에서 Service를 명시하기 위해서 사용
@Repository : Persistence Layer에서 DAO를 명시하기 위해서 사용
@Component : 그 외에 자동으로 스캔해서 등록하고 싶은 것들을 위해 사용
(+ 추가 @Component의 구체화된 형태로 @Repository, @Service, @Controller 등이 있다는 것.)
(롸..?)
또...다시 시작된 구글링..을 통해서 해당 어노테이션에 설명된 Layer는
계층화 아키텍처(Layered architecture)를 알아야 한다는 걸 깨닫게 되었다..ㅎㅎ
프리젠테이션 레이어(Presentation layer) 는 클라이언트와 최초로 만나는 곳으로 데이터 입출력이 발생하는 곳이다.
비즈니스 레이어(Business Layer)는 컨트롤러와 뷰를 연결해주며
퍼시스턴스 레이어(Persistence Layer)는 데이터 베이스에 접급하는 계층이라 보면 된다.
해당 어노테이션 관계를 그림으로 나타낸 것이다.
결국 @Component, @Service, @Repository는 Bean객체를 만드는 역할을 하지만, @Component가 가장 큰 단위고
@Service, @Repository 등 구체적으로 사용하면 어떤 부분에 쓰이는지 시각적으로 판단하기 편하다.
이는 나중에 AOP에서 어노테이션에 따라 PointCut을 할 수 있기 때문에 구분해서 사용하는 게 더 좋을 듯하다!
(물론 AOP는 아직도 어렵다..다시 강의들어야지...)
참고
https://docs.spring.io/spring-roo/reference/html/base-layers.html
https://namocom.tistory.com/421
http://blog.daum.net/question0921/797
https://springbootdev.com/2017/07/31/spring-framework-component-service-repository-and-controller/
'Spring' 카테고리의 다른 글
GSON toJson, fromJson에 대한 ...삽질?! (0) | 2020.07.25 |
---|---|
[JPA 공부일지] JPA와 DB설정 동작확인 (0) | 2020.01.27 |
[스프링부트 기초] 스프링부트 활용: 외부설정,프로파일,로깅 (0) | 2019.12.02 |
[스프링 프레임워크 핵심 기술] IoC 컨테이너 (0) | 2019.12.02 |
댓글