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
**게시판 글쓰기 기능 구현**
1. DAO 객체를 생성
2. 게시판 글쓰기에 필요한 데이터를 DB에서 조회한 후, VO 객체에 데이터 매핑
3. 게시판 글쓰기에 필요한 비즈니스 로직 처리
4. 비즈니스 로직 처리 결과를 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 간의 데이터 전달을 위해 사용됩니다
. 이 과정을 통해 클라이언트의 요청을 받아서 응답하는 전체적인 웹 애플리케이션의 동작을 수행합니다.
'여니의 프로그래밍 study > Spring & Spring Boot' 카테고리의 다른 글
SpringBoot 소셜 로그인 구현 (1) | feat. KakaoTalk (0) | 2023.06.24 |
---|---|
Servlet에 대해 알아보자 (0) | 2023.05.04 |
[스프링부트] 개발하며 만난 에러 기록집 ( = 계속 업데이트 될 예정) (0) | 2022.06.01 |
[스프링부트] "JWT 토큰"과 세션 기반 인증의 차이점 (0) | 2022.03.27 |
[스프링부트] Error parsing HTTP request header (0) | 2022.03.23 |