Service와 ServiceImpl
Service와 ServiceImpl
- MVC패턴에서 ServiceImpl은 비지니스로직을 수행하는 역할을 말한다.
- 여기서 비지니스로직이란, 기능을 구현하는 구현부이다. 비지니스 로직을 수행하기 위해 Service는
interface
파일로 ServiceImpl은class
파일로 작성한다.
Service Model의 역할
- MVC패턴의 핵심은 View는 자신이 요청할 Controller만 알고 있으면 되고, Controller는 화면에서 넘어오는 매개변수들을 이용해 Service객체를 호출하는 역할을 한다. Service는 불필요하게 Http통신을 위한 순수한 자바 객체로 구성된다.
- => 즉, 자신을 어떤 컨트롤러가 호출하든 상관없이 필요한 매개변수만 준다면 자신의 비지니스 로직을 처리할 수 있다.(모듈화를 통해 재사용성 향상)
- Web기반이 아닌 native app으로 View단이 변경되어도 Service는 View에 종속적인 코드가 없기 때문에 그대로 재사용할 수 있어야 한다. 그리고 추가적인 요청사항이 들어오면 기존 소스를 수정하는게 아니라 기존 Service인터페이스를 구현한 다른 클래스를 구현해 그 객체를 사용하도록 한다.
인터페이스와 인터페이스 구현 클래스로 분리할 경우 장점
- 느슨한 결합을 유지하여 각 기능 간 의존관계를 최소화할 수 있다.
- 의존관계의 최소화로 인해 기능의 변화에도 최소한의 수정으로 개발할 수 있는 유연함을 가질 수 있다.
- 모듈화를 통해 어디서든 사용할 수 있도록 하여 재사용성을 높인다.
- 스프링의 IoC/DI기능을 이용한 빈 관리 기능을 사용할 수 있다.
용어 개념 설명
Controller
- : 클라이언트의 요청을 받아 해당 요청을 처리하는 로직을 작성한다.
- 클라이언트의 요청에 대한 응답을 반환한다.
Service
- : 비즈니스 로직을 추상화한 인터페이스.
- 인터페이스를 사용하면 구현 세부 정보를 숨기고 클라이언트 코드와 분리할 수 있어서 유지보수성과 확장성을 높인다.
ServiceImpl
: Service 인터페이스를 구현하는 클래스.
Service 인터페이스에서 선언된 모든 메서드를 구현하기 때문에 해당 인터페이스에서 정의된 모든 비즈니스 로직을 구현해야 한다.
따라서 SErvice 인터페이스를 구현하는 공간이 ServiceImpl이다.
→ Service(인터페이스)와 ServiceImpl(구현체)을 분리해야 하는 이유는 유연성과 확장성 때문이다.
인터페이스를 사용하는 이유는 객체지향 특징 중 하나인 다형성 때문이다.
Service 인터페이스를 구현한 여러 개의 ServiceImpl 클래스가 있을 경우 이를 모두 해당 Service 인터페이스의 메서드를 구현하기 때문에 동일한 인터페이스에 대해 다른 구현제를 만들어 사용할 수 있어서 유연성과 확장성을 제공한다.
만약 추후에 ServiceImpl의 구현이 변경되어도 인터페이스를 변경하지 않고도 기존 코드를 수정하지 않고 새로운 ServiceImpl을 추가할 수 있다.
DAO (Data Access Object)
DAO는 주로 데이터베이스와의 통신을 위한 메소드들을 가지고 있으며, 이 메소드들은 SQL 쿼리를 실행하여 데이터를 가져오거나 조작한다. DAO는 Service나 Controller에서 호출되어 특정 작업을 수행하고, 이를 통해 데이터베이스와 상호작용하여 데이터를 가져오거나 조작한다.
- 데이터베이스에 접근하여 데이터를 조작하는 역할을 담당하는 클래스다.
VO (Value Object)
- 일반적으로 데이터베이스의 특정 레코드를 표현하는 객체이며, 테이블의 각 컬럼들에 대응하는 필드와 getter/setter 메소드를 가지고 있다.
- VO 객체는 Service나 Controller에서 사용되어 클라이언트의 요청을 처리하거나, 다른 객체와 데이터를 주고받는 데 사용된다.
- 데이터베이스에서 가져온 특정 테이블의 데이터를 자바 객체로 매핑하는 클래스이다.
ServiceImpl에서의 DAO와 VO
e.g. 게시판 글쓰기 기능 구현
- DAO 객체를 생성
- 게시판 글쓰기에 필요한 데이터를 DB에서 조회한 후, VO 객체에 데이터 매핑
- 게시판 글쓰기에 필요한 비즈니스 로직 처리
- 비즈니스 로직 처리 결과를 DAO 객체의 메서드를 호출하여 DB에 저장.
이때 저장할 데이터는 VO 객체에서 추출
클라이언트의 요청을 받아서 응답하는 것까지의 과정
클라이언트로부터 요청이 들어와서 처리하는 과정은 보통 다음과 같은 순서로 이루어진다.
- 클라이언트가 웹 브라우저를 통해 요청(Request)을 한다.
- 요청을 받은 DispatcherServlet이 HandlerMapping을 통해 해당 요청을 처리할 Controller를 찾는다.
- 찾은 Controller는 ServiceImpl을 호출하고, 필요한 데이터를 요청한다.
- ServiceImpl은 DAO를 호출하여 데이터베이스에서 필요한 데이터를 가져온다.
- 가져온 데이터를 VO 객체로 매핑(mapping)한다.
- ServiceImpl은 Controller로 반환할 데이터를 VO 객체로 만들어서 반환한다.
- Controller는 받은 VO 객체를 View에 전달하기 위해 ModelAndView 객체에 담아서 반환한다.
- DispatcherServlet은 반환된 ModelAndView 객체를 ViewResolver를 통해 실제 View로 변환한다.
- 변환된 View는 HttpServletResponse 객체에 쓰여져 클라이언트에게 응답(Response)된다.
즉, 클라이언트의 요청을 처리하는 전체적인 과정에서
VO 클래스는 데이터베이스에서 가져온 데이터를 자바 클래스로 매핑하여 사용하고,
ServiceImpl과 Controller 간의 데이터 전달을 위해 사용된다.
이 과정을 통해 클라이언트의 요청을 받아서 응답하는 전체적인 웹 애플리케이션의 동작을 수행한다.
'Java' 카테고리의 다른 글
VSCode에서 Java 실행환경 세팅하기 (0) | 2024.06.11 |
---|---|
[Java] Java 11 설치 (0) | 2024.03.20 |
[Java] 05-1. 참조 타입과 참조 변수 (0) | 2024.03.20 |
[Java] 04-2. 반복문: for문, while문, do-while문 (0) | 2024.03.20 |
[Java] 04-1. 조건문: if문, switch문 (0) | 2024.03.20 |