728x90
반응형
[Servlet] Servlet Listener란? 웹 애플리케이션의 생명주기 관리하기
[Servlet] Servlet Listener란? 웹 애플리케이션의 생명주기 관리하기
[Servlet] Servlet Filter 구현 예제와 실전 적용 방법 [Servlet] Servlet Filter 구현 예제와 실전 적용 방법[Servlet] Servlet에서 Request와 Response를 가공하는 가장 좋은 방법 | Wrapper 클래스1. Servlet Filter1. Servlet Fil
crushed-taro.tistory.com
1. MVC Architecture
1. MVC Architecture 개요
1. Model - View - Controller
- 웹 어플리케이션 개발 시 MVC 패턴을 적용하여 각각의 역할별 작업이 가능하도록 분담하는 설계 패턴을 의미한다.
- 대부분의 웹 어플리케이션 구조는 MVC 패턴을 적용하고 있다.
2. MVC Architecture 단계별 이해하기
1. 원시적 애플리케이션 프로그램 구조
- 시스템은 위에서 아래로 실행되므로 아래 그림처럼 최초 화면부터 로직을 거쳐 결과 화면 현출까지 구성되어 있다.
- 비즈니스 로직에서는 데이터베이스에 접근하여 데이터를 처리한다.
- 이처럼 모든 흐름을 하나의 소스 코드에서 관리하는 경우 아래처럼 진행되기 때문에 두 가지 문제점이 발생한다.
- 중복되는 코드 작성의 우려가 있다.
- 일부 수정 사항이 발생하면 모든 로직의 쿼리에 영향을 준다.
- 이러한 문제들로 비즈니스 로직 재사용성 저하되므로 이를 해결하기 위하여 각각의 로직을 분리하여 코드를 작성하고 호출하도록 개선한다.
2. DAO
💡 DAO(Data Access Object) : 데이터베이스에 접근하기 위한 용도의 객체
⇒ CRUD 연산을 담당하는 메소드의 집합으로 이루어진 클래스
C(Create) : 삽입(insert)
R(Read) : 조회(select)
U(Update) : 수정(update)
D(Delete) : 삭제(delete)
- DAO의 사용 목적은 쿼리문 단위로 기능을 분리해 재사용하기 위함이다.
- 기능을 하나의 로직으로 통째로 묶어 사용하는 것보다 잘게 분리해 놓을수록 재사용 가능성이 높아지기 때문이다.
- 위의 블럭 조각을 예시로 볼 때도, A 조각보다는 잘게 쪼개진 B조각이 더 많은 블럭에 끼워 맞출 수 있으므로 활용도가 높다.
- 생산성과 유지보수성을 고려했을 때 작은 단위로 구분하는 편이 훨씬 - 유리하므로, 작은 단위로 구성하고 이를 모아둔 것이 DAO이다.
- 논리적 작업은 하나의 트랜잭션으로 작동해야 하고, 하나의 트랜잭션은 반드시 하나의 Connection으로 수행해야 한다.
- 따라서 Connection을 통제하는 쪽은 논리 기능을 하는 기능 수행 쪽이고, DAO는 해당 Connection을 매개변수로 빌려줘 사용하도록 하는 것이다.
- 조회 결과를 담은 resultSet은 java.sql 패키지에 의존하고 있고, 그 의존에 의한 영향을 최소화하기 위하여 resultSet은 데이터베이스에 직접 접근하는 DAO 클래스 내에서만 사용하고 기능 수행단에서 쓰지 않는 것이 일반적이다.
3. Service
- DAO를 활용해 아래처럼 구성하면 화면과 로직이 하나의 코드로 이루어진다.
- 이 경우에는 문제점은 크게 세 가지로 볼 수 있다.
- 화면마다 로직을 작성해야 한다.
- 화면이나 로직 둘 중 하나만 다른 경우(같은 화면-다른 로직 or 다른 화면-같은 로직)에 매번 파일을 새로 작성해야 한다.
- 화면단 코드를 작성하는 프론트엔드 개발자와 기능 로직의 코드를 작성하는 백엔드 개발자가 다른 경우가 많은데, 같은 파일에 화면과 로직을 동시에 포함하면 작업 시 충돌 가능성이 있다.
⇒ 따라서 Service 클래스를 추가하여 화면과 로직을 분리한다.
- Connection 객체의 autoCommit 속성을 통해 DML 처리 후 자동 commit 여부를 지정할 수 있는데, 보통 비즈니스 로직을 하나의 트랜잭션으로 처리할 수 있도록 false로 설정한다.
- commit/rollback 여부는 하나의 트랜잭션을 처리하는 로직에서 처리한다.
- Service 역할에는 비즈니스 로직에서 처리를 위하여 다음 두 가지도 포함된다.
- connection에 대한 전반적 라이프사이클 관리
- transaction 제어
- 즉, 트랜잭션 제어를 담당하는 클래스에서 connection의 open부터 commit, rollback과 객체 반납을 처리하는데 해당 Class들의 패키지가 Service이다.
- MVC 패턴에서 가장 핵심은 model이고, 그중에서도 service이다.
- ⇒ SOA (Service Oriented Architecture)
4. Controller
- Service가 추가되더라도 view에서 service를 직접 호출하는 결합(의존)이 여전히 존재한다.
- service 이름, 내용 등이 바뀌면 view에도 영향을 준다
- 비즈니스 로직을 직접 호출한다.
- 사용 기기 종류 등에 따른 view가 추가될 때마다 service의 수정에 영향을 받는 파일 갯수가 늘어난다.
- 각 view에 특성에 따라 service 내용을 수정해야 하는 경우도 발생한다. 예를 들어 web과 Android는 값 전달 방식이 다른데, 비즈니스 로직에 view마다 적용되는 로직을 작성하고 수정해야 한다.
⇒ view-service 간 의존 관계 낮추고자 controller를 추가하여 중간 다리 역할을 하도록 한다.
- Controller 역할을 다음과 같다.
- view에서 파라미터 값을 받아 필요에 따라 가공하여 service로 전달한다.
- 시간 등의 정보는 view에서 받으면 사용자 조작으로 이상한 정보를 입력할 가능성이 있으므로 Controller에서 생성하기도 한다.
- service 로직 처리 결과를 받아 view 호출 및 결과 반환한다.
5. MVC Architecture 완성
- 결과적으로 프로그램 흐름 구성은 아래처럼 구성된다.
- 흐름에 따라 처리하는 내용을 간략하게 보면 아래 그림과 같다.
- 이 구조를 계층 구조로 나누어보면 아래와 같다.
💡 DTO (Data Transfer Object)
여러 계층간 데이터 전송을 위해 다양한 타입의 데이터를 하나로 묶어 전송할 용도의 클래스이다.
(VO, Bean, Entity 등은 모두 DTO를 의미한다.)
DTO 클래스의 필수 작성 조건
- 모든 필드의 접근 제한자는 private (외부에서 직접 접근 불가해야 함)
- 기본생성자와 모든 필드를 초기화하는 생성자
- 모든 필드에 대한 setter/getter
- toString Overriding을 이용한 필드 값 반환용 메소드
- 직렬화 처리 (DB와 byte 단위로 데이터 송수신하기 위함)
DTO 클래스 작성 시 참고 사항
- 컬럼 하나에 DTO 필드(변수) 하나가 대응되도록 만드는 것이 일반적이다.
- 필드 네이밍은 컬럼명을 낙타봉 표기법으로만 바꿔주면 된다.
728x90
반응형
'이것 저것 개발 공부 > Servlet' 카테고리의 다른 글
[Servlet] 자바 서블릿과 네트워크 | 요청과 응답이 오가는 과정을 파헤쳐보자 (0) | 2025.05.25 |
---|---|
[Servlet] Servlet과 JSP로 구현하는 MVC 패턴 | Java 웹 구조의 이해 - 2 (0) | 2025.05.24 |
[Servlet] Servlet Listener란? 웹 애플리케이션의 생명주기 관리하기 (0) | 2025.05.20 |
[Servlet] Servlet Filter 구현 예제와 실전 적용 방법 (0) | 2025.05.15 |
[Servlet] Servlet에서 Request와 Response를 가공하는 가장 좋은 방법 | Wrapper 클래스 (0) | 2025.05.13 |