Day85 - [Spring]Service, Model 부분 만들기

2021. 6. 16. 23:01Spring

이번에는, Service 부분과 Model 부분을 만들어 봅시다

 

저번 포스팅 까지, Controller 와 view 는 어떻게 만드는지 대충 알겠죠?

 

이번에는 분기가 나누어 지는 Service 부분과 , DB 에 접근 하는 Model 부분을 만들어 봅시다.

 

Service, Model 만들기

Service 부분과 Model 의 DAO 부분은 먼저, 인터페이스를 만들고, 그 인터페이스를 implements 하는 Service 와 DAO 를 만듭니다.

 

이 때, Controller 에서는 Service 를 실행하고, Service 는 DAO 를 실행 합니다.

 

Controller 에서 Service 는 기본적으로 JAVA에서는 멤버변수로 "Service service = new ServiceImpl()" 을 사용합니다.

하지만, Spring 에 넘어오면서, 이 부분을 Ioc 에 넣어줄 수 있습니다.

".xml" 부분에서 말이죠

이렇게, ".xml" 파일에서 미리 객체화를 했다면, 어노테이션 을 사용해서 Service 부분을 사용할 수 있습니다.

 

그런데, 이렇게 사용하게 되면 Service 부분이 많아지게 되면, 일일히 다 ".xml" 파일에서 미리 객체화를 해주어야 합니다.

 

그래서,  아래의 "context:component-scan" 을 사용 합니다.

이는 "base_package" 뒤에 있는 패키지명 에 있는 @Controller , @Service , @Repository 를 전부 읽어서 자동으로 Ioc 에 class 를 객체화 합니다.

 

즉. Service 에 @Service 를 붙이면 알아서 Ioc 에 객체화를 해줍니다.

이는, DAO 부분에서도 같은데요, DAO 부분에서는 @Repository 를 사용 합니다.

※ 경로 중간에 * 가 들어가면, 중간은 어떤 것이든 들어가도 상관 없고, 끝이 dao 로 끝나는 패키지 란 뜻 입니다.

 

그리고, @Service , @Repository 의 () 안에 , 이 Service 부분과 DAO 부분을 어떤 이름으로 사용할 건지 명시 합니다.

보통은 매개변수와 같은 이름.

 

위와 같이 설정하게 된다면, 자동으로 알아서 멤버변수는 객체화를 하게 됩니다.

 

Controller 에서 Service 사용하기

Controller 에서는 위와 같이 Service Interface 를 멤버변수로 가지고 있고, 위의 방법들을 통해서 객체화를 합니다.

 

그리고, service 가 필요한 부분에 아래와 같이 사용 합니다.

Service 에서 DAO 사용하기

마찬가지로, Service 에서는 DAO Interface 를 멤버변수로 가지고 있고, 위의 방법들을 통해서 객체화를 합니다.

 

그리고, DB 에 접근 해서, 필요한 값들을 추가,수정,삭제 등을 하고, 화면에 뿌려질 데이터를 가지고 옵니다.

DAO 에서 DB 에 접근하기 ( 가정 )

아직, DB 에 연결하는 코드는 안 짯기 때문에, DB 에 연결한다고 가정을 하면 아래와 같이 사용 합니다.

 

흐름을 어느정도 아시겠죠?

 

Controller -> Service -> DAO -> DB

 

이 때, Service 와 DAO 는 Interface 를 가지고 있습니다. ( Interface 는 사용법 )

 

DB 에 저장된 데이터 list 는 아래처럼 가지고 올 수 있습니다.

 

DB 에 저장된 데이터를 가지고 있는 DAO 에 접근해서, list 를 반환하는 메서드를 만듭니다.

Service 에서 DAO 에 접근합니다.

Controller 에서 Service 에 접근한 후, 가지고 나온 데이터를 view 에 전달 합니다.

view 에서는 Controller 를 통해서 가져온 데이터를 화면에 사용 합니다.

 

<c:forEach> 를 사용하기 위해서, JSTL 를 추가 합니다

 

이제 데이터를 저장하는 방법과, 화면에 가져와서 나타내는 것 까지 알아 보았습니다.

 

그러면 삭제하는 방법도 알아보도록 합시다

데이터의 삭제는, 현재 DAO 부분에 list 로 되어 있기 때문에, .remove(index) 를 사용하면 됩니다.

 

그래서, view 화면에 삭제 버튼을 만들고, 삭제 버튼을 누르면 컨트롤러를 경유하도록 url 을 주면 되는데, 이 때 어떤 데이터를 삭제할 지에 대한 index 값을 같이 넘겨주면 됩니다.

 

마침 위에서, <c:forEach> 를 사용하면서, varStatus 를 만들었습니다.

※ idx.index 를 사용하면, 현재 반복중인 횟수를 알 수 있음 0부터 시작

 

<c:forEach> 안에, 아래처럼 버튼을 만들어 주면 되겠습니다

그리고 컨트롤러, 서비스, DAO 에서 삭제하는 메서드를 만들어 주면 됩니다.

 

-컨트롤러 부분-

 -서비스 부분-

-DAO 부분-

추가적으로, 컨트롤러 에서는 삭제 처리가 완료 되었음을 메세지로 view 화면에 보내 줍시다.

RedirectAttributes 의 addFlashAttribute 를 사용하면 되겠습니다.

-view 부분-

java script 내에서, 넘어온 msg 를 사용하기 위해서 <c:out value="${msg }" /> 를 사용했습니다.

 

 

p.s : 오늘 학원에 간만에 나가서, 집에서 git 에 올린 걸 다운로드 받았는데, 에러가 발생함. ( project -> properties -> "taget 검색" -> server 확인 ) , 이클립스에서 깃에 올라온 프로젝트라는 걸 알기 위해서는, import 해야 함.

집에 있는 Tomcat 버전과, 학원에 있는 Tomcat 버전이 달라서 그런 것으로 추청.