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 패턴을 적용하고 있다.

Servlet 사진 1

 

2. MVC Architecture 단계별 이해하기

1. 원시적 애플리케이션 프로그램 구조

  • 시스템은 위에서 아래로 실행되므로 아래 그림처럼 최초 화면부터 로직을 거쳐 결과 화면 현출까지 구성되어 있다.
  • 비즈니스 로직에서는 데이터베이스에 접근하여 데이터를 처리한다.

Servlet 사진 2

 

  • 이처럼 모든 흐름을 하나의 소스 코드에서 관리하는 경우 아래처럼 진행되기 때문에 두 가지 문제점이 발생한다.

Servlet 사진 3

  1. 중복되는 코드 작성의 우려가 있다.
  2. 일부 수정 사항이 발생하면 모든 로직의 쿼리에 영향을 준다.

 

  • 이러한 문제들로 비즈니스 로직 재사용성 저하되므로 이를 해결하기 위하여 각각의 로직을 분리하여 코드를 작성하고 호출하도록 개선한다.

 

2. DAO

💡 DAO(Data Access Object) : 데이터베이스에 접근하기 위한 용도의 객체
⇒ CRUD 연산을 담당하는 메소드의 집합으로 이루어진 클래스
C(Create) : 삽입(insert)
R(Read) : 조회(select)
U(Update) : 수정(update)
D(Delete) : 삭제(delete)

 

  • DAO의 사용 목적은 쿼리문 단위로 기능을 분리해 재사용하기 위함이다.
    • 기능을 하나의 로직으로 통째로 묶어 사용하는 것보다 잘게 분리해 놓을수록 재사용 가능성이 높아지기 때문이다.
     

Servlet 사진 4

  • 위의 블럭 조각을 예시로 볼 때도, A 조각보다는 잘게 쪼개진 B조각이 더 많은 블럭에 끼워 맞출 수 있으므로 활용도가 높다.

 

  • 생산성과 유지보수성을 고려했을 때 작은 단위로 구분하는 편이 훨씬 - 유리하므로, 작은 단위로 구성하고 이를 모아둔 것이 DAO이다.

Servlet 사진 5

 

  • 논리적 작업은 하나의 트랜잭션으로 작동해야 하고, 하나의 트랜잭션은 반드시 하나의 Connection으로 수행해야 한다.

Servlet 사진 6

  • 따라서 Connection을 통제하는 쪽은 논리 기능을 하는 기능 수행 쪽이고, DAO는 해당 Connection을 매개변수로 빌려줘 사용하도록 하는 것이다.
  • 조회 결과를 담은 resultSet은 java.sql 패키지에 의존하고 있고, 그 의존에 의한 영향을 최소화하기 위하여 resultSet은 데이터베이스에 직접 접근하는 DAO 클래스 내에서만 사용하고 기능 수행단에서 쓰지 않는 것이 일반적이다.

 

3. Service

  • DAO를 활용해 아래처럼 구성하면 화면과 로직이 하나의 코드로 이루어진다.

Servlet 사진 7

  • 이 경우에는 문제점은 크게 세 가지로 볼 수 있다.
    1. 화면마다 로직을 작성해야 한다.
    2. 화면이나 로직 둘 중 하나만 다른 경우(같은 화면-다른 로직 or 다른 화면-같은 로직)에 매번 파일을 새로 작성해야 한다.
    3. 화면단 코드를 작성하는 프론트엔드 개발자와 기능 로직의 코드를 작성하는 백엔드 개발자가 다른 경우가 많은데, 같은 파일에 화면과 로직을 동시에 포함하면 작업 시 충돌 가능성이 있다.

⇒ 따라서 Service 클래스를 추가하여 화면과 로직을 분리한다.

Servlet 사진 8

 

  • Connection 객체의 autoCommit 속성을 통해 DML 처리 후 자동 commit 여부를 지정할 수 있는데, 보통 비즈니스 로직을 하나의 트랜잭션으로 처리할 수 있도록 false로 설정한다.
    • commit/rollback 여부는 하나의 트랜잭션을 처리하는 로직에서 처리한다.
     

Servlet 사진 9

  • Service 역할에는 비즈니스 로직에서 처리를 위하여 다음 두 가지도 포함된다.
    • connection에 대한 전반적 라이프사이클 관리
    • transaction 제어

 

  • 즉, 트랜잭션 제어를 담당하는 클래스에서 connection의 open부터 commit, rollback과 객체 반납을 처리하는데 해당 Class들의 패키지가 Service이다.

Servlet 사진 11

  • MVC 패턴에서 가장 핵심은 model이고, 그중에서도 service이다.
  • ⇒ SOA (Service Oriented Architecture)

 

4. Controller

  • Service가 추가되더라도 view에서 service를 직접 호출하는 결합(의존)이 여전히 존재한다.
    • service 이름, 내용 등이 바뀌면 view에도 영향을 준다
    • 비즈니스 로직을 직접 호출한다.
    • 사용 기기 종류 등에 따른 view가 추가될 때마다 service의 수정에 영향을 받는 파일 갯수가 늘어난다.
     

Servlet 사진 12

  • 각 view에 특성에 따라 service 내용을 수정해야 하는 경우도 발생한다. 예를 들어 web과 Android는 값 전달 방식이 다른데, 비즈니스 로직에 view마다 적용되는 로직을 작성하고 수정해야 한다.

⇒ view-service 간 의존 관계 낮추고자 controller를 추가하여 중간 다리 역할을 하도록 한다.

 

  • Controller 역할을 다음과 같다.

Servlet 사진 13

  • view에서 파라미터 값을 받아 필요에 따라 가공하여 service로 전달한다.
    • 시간 등의 정보는 view에서 받으면 사용자 조작으로 이상한 정보를 입력할 가능성이 있으므로 Controller에서 생성하기도 한다.
  • service 로직 처리 결과를 받아 view 호출 및 결과 반환한다.

 

5. MVC Architecture 완성

  • 결과적으로 프로그램 흐름 구성은 아래처럼 구성된다.

Servlet 사진 14

 

  • 흐름에 따라 처리하는 내용을 간략하게 보면 아래 그림과 같다.

Servlet 사진 15

 

  • 이 구조를 계층 구조로 나누어보면 아래와 같다.

Servlet 사진 16

💡 DTO (Data Transfer Object)
여러 계층간 데이터 전송을 위해 다양한 타입의 데이터를 하나로 묶어 전송할 용도의 클래스이다.
(VO, Bean, Entity 등은 모두 DTO를 의미한다.)

DTO 클래스의 필수 작성 조건
- 모든 필드의 접근 제한자는 private (외부에서 직접 접근 불가해야 함)
- 기본생성자와 모든 필드를 초기화하는 생성자
- 모든 필드에 대한 setter/getter
- toString Overriding을 이용한 필드 값 반환용 메소드
- 직렬화 처리 (DB와 byte 단위로 데이터 송수신하기 위함)

DTO 클래스 작성 시 참고 사항
- 컬럼 하나에 DTO 필드(변수) 하나가 대응되도록 만드는 것이 일반적이다.
- 필드 네이밍은 컬럼명을 낙타봉 표기법으로만 바꿔주면 된다.
728x90
반응형

+ Recent posts