1.
Controller 파트에서 Service 레이어가 관념적으로 존재 한다.
XxxServiceImpl 은 Service 레이어를 구현한 클래스 이다.
정석적인 개념은 아니고, 이해를 위해 정리.
Impl은 Implements를 의미 한다.
("무언가의 개념을 해당 클래스에서 구현 했다" 라는 의미)
Service 레이어 :
DAO를 사용하는 "주체" 가 되는 공간.
즉, DAO를 열심히 사용 하기 때문에, Controller 파트 이다.
이때, Controller 가 DAO를 열심히 사용 하기 위해서,
DAO의 메서드 시그니쳐를 잘 맞춰서 사용 하면 좋다.
맞춘다 ?
메서드 시그니쳐를 강제한다 ?
>> XxxService 인터페이스를 생성 해서, 그 인터페이스를 구현 하기 !
2.
C에서 M의 DAO와 VO를 사용할텐데,
이때, DAO의 비즈니스 메서드의 메서드 시그니쳐를 통일하면 서로가 좋다.
/*
비즈니스 메서드
비즈니스 로직
핵심 관심 (concern)
핵심 로직
핵심 메서드
CRUD
*/
모두 같은 의미 이다.
위의 이미지 처럼, XxxService 인터페이스를 작성 한다.
비즈니스 메서드의 input, output, 메서드명을 모두 정해준다.
3.
위의 BoardService 인터페이스를 구현한 클래스
>> BoardServiceImpl
이렇게 인터페이스의 미완성 메서드들이 구현된 모습을 확인 할 수 있다.
이때,
인터페이스를 구현한 이 클래스에서, 여러가지의 비즈니스 메서드를 사용 하기 위해서,
private BoardDAO boardDAO 라는 멤버변수가 필요 하다.
그래서 꼭 필요하니까, 둘은 의존 관계 의 개념이고,
결국, 의존 주입을 해줘야 한다.
원래 라면 ~ @Autowired 어노테이션이 작성된 멤버는
메모리에 올라와 있어야, 의존관계로 설정 해주기 때문에,
객체화를 해야 하는데,
이 객체화는 .xml 파일에서,
<bean> 태그를 사용해서 해줬었다.
근데, 이 BoardDAO 자료형을 지정한 패키지 범위 내에서,
이미, 어노테이션을 통해 객체화가 됬다면 !
<bean> 태그를 사용할 필요가 없어 진다.
이때는, 이미 메모리에 해당 자료형의 객체가 올라와 있기 때문에 == 객체화
그냥 @Autowired 어노테이션을 사용 하면 된다.
BoardDAO 클래스 내부를 확인 하면 아래와 같다.
이렇게 @Repository("boardDAO") 어노테이션 으로,
객체화를 해주세요 ~ 라고 작성 되어 있는 모습을 확인 할 수 있다.
근데, 이걸 작성하는 이유는 무엇일까 ?
4.
@Repository 어노테이션
@Repository 어노테이션은 @Component를 "상속" 받은 어노테이션 이다.
스프링 컨테이너는 @Repository 어노테이션을 "Model 파트에서 "객체화" 하는거구나 ?"
라고 자동으로 인지 한다.
그래서 스프링 컨테이너가 메모리를 관리하기에 유리 해진다.
>> 속도 향상.
즉,
1) 스프링 컨테이너가 메모리를 관리하기 좋게 ~
2) 이곳이 Model 파트 라는것을 한눈에 알기 쉽게 하기 위해 ~ (가독성)
그래서, @Repository 어노테이션을 사용 하는 것이다.
여기서 boardDAO 라는 참조변수를 객체화 해주기 때문에,
다른곳에서 의존 주입을 위해 사용된 @AutoWired 이 걸려있는 멤버를,
.xml 에서 <bean class = "패키지명.자료형" id ="객체명"> 을 안해줘도 된다 !
5.
@Component를 "상속" 받은 어노테이션으로
@Repository 어노테이션 외에,
@Service 어노테이션 도 존재 한다.
스프링 컨테이너는 @Service 어노테이션을 "Controller 파트에서 "객체화" 하는거구나 ?"
라고 자동으로 인지 한다.
그래서, 아 해당 클래스는 Controller 파트 이구나 ~ 라는것을 알기 쉽게
@Service 어노테이션 을 사용 한다.
자바에서 어노테이션을 사용 하기 위해서는,
.xml 파일 내부에, 아래와 같이 코드를 작성 하면 된다.
com.spring 폴더 하위에 있는 모든 폴더를 대상으로 범위 지정 해서,
객체화 할 대상을 (자료형) 스캔 하겠다는 의미.
.xml 파일 생성 방법
이곳에,
6.
MySQL 과 다르게, 오라클은 PK에 Auto_increment (자동증가) 를 걸 수 없다.
그래서 서브쿼리로 해결 한다.
((SELECT (MAX(BID) + 1 FROM BOARD)
>> 가장 큰 값에 + 1을 해줘 ~
근데, 게시글이 없으면 ? 에러가 발생 하기 때문에 ~ 아래와 같이 작성 해야 한다.
(SELECT NVL(MAX(BID),0)
NVL >> 만약에 MAX 값이 없다면, 0으로 대체해줘 ~ 라는 함수 이다.
1000번 부터 시작 하고 싶으면 ,1000 으로 하면 된다.
'Spring 프레임워크 > 이론' 카테고리의 다른 글
Spring MVC 패턴의 구조 파악 3 (Controller 파트) (0) | 2023.08.04 |
---|---|
Spring MVC 패턴의 구조 파악 2 (Controller 파트) (0) | 2023.08.03 |
Spring MVC 패턴의 구조 파악 (Controller 파트) (0) | 2023.08.02 |
IoC 로 객체를 호출 하기 (어노테이션 & .xml) (0) | 2023.08.01 |
Spring 프레임워크 기본 개념 (개요) 2 (0) | 2023.08.01 |