Language/JSP

9월 20일 D+39 [JSP13장 : 웹 어플리케이션 구조]

구일일구 2022. 9. 20. 17:22
반응형

* LogonDBBean에서 getConnection() 메소드를 따로 만들었을 때 : getConnection()을 쓰는 다른 객체들을 함께 그룹핑하기 불가능

JSP만을 이용하는 경우의 문제

* 동일한 로직을 수행하는 코드가 중복될 가능성이 높음

* 문제점 : 기능 변경 발생 시 여러 코드에 동일한 수정을 반영해 주어야 함(누락될 가능성 발생 ➡️ 버그 발생 가능성 높음)

 

클래스를 이용한 중복 제거

* 클래스를 이용해서 중복된 코드를 한 곳으로 분리

* 화면 요청 처리하는 JSP + 실제 로직을 수행하는 클래스로 분리 : 일반적인 구성

 

웹 어플리케이션의 일반적인 구성

* Service 클래스: 사용자의 요청을 처리하는 기능 제공. DAO 클래스를 통해서 DB 연동 처리. 가입 신청 처리, 글 목록 제공 등의 기능 구현

* DAO 클래스: DB와 관련된 CRUD 작업 처리(SQL 쿼리 실행)

* JSP(뷰): Service 클래스가 실행한 결과를 화면에 출력, Service가 기능을 수행하는데 필요한 데이터 전달

* MVC 프레임워크: 사용자 요청을 Service에 전달, Service 실행 결과를 JSP와 같은 뷰에 전달. 스프링 MVC / 스트러츠 와 같은 프레임워크

 

DAO의 구현

* CRUD를 위한 메서드 정의

  • insert() 메서드 : INSERT 쿼리를 실행한다
  • select() 메서드 : SELECT 쿼리를 실행한다. 검색 조건에 따라 한 개 이상의 select() 메서드 제공
  • update() 메서드 : UPDATE 쿼리를 실행한다
  • delete() 메서드 : DELETE 쿼리를 실행한다.

* 테이블과 매핑될 클래스 작성

 

DAO에 Connection 전달 방법

* DAO 클래스의 메서드에서 직접 Connection을 생성: 1개 이상의 DAO 메서드 호출을 하나의 트랜잭션을 처리 불가

* DAO 객체 생성 시, 생성자에서 Connection을 전달 받기: 1개 이상의 DAO 메서드 호출을 트랜잭션으로 묶을 수 있음 / 불필요하게 DAO 객체를 매번 생성하는 단점

* DAO 클래스의 메서드 파라미터로 : 1개 이상의 DAO 메서드 호출을 트랜잭션으로 묶을 수 있음 / DAO 객체를 매번 생성할 필요 없음

 

서비스 클래스의 구현

* 사용자의 요청을 처리하기 위한 기능을 구현

* DAO를 통해서 데이터에 접근

* 코드 예

 

서비스 클래스와 트랜잭션

* 서비스가 제공하는 기능이 트랜잭션 필요시 Connection.setAutoCommit(false)로 트랜잭션 처리

 

서비스 클래스와 예외 처리

* 서비스 클래스의 메서드는 서비스가 제공하는 기능에 알맞은 예외를 발생시키는 것이 좋음

* 서비스 메서드 내부에서 처리

 

 

싱글톤 패턴을 이용한 서비스 / DAO 구현

* 싱글톤 패턴 : 클래스 당 한 개의 객체만 생성되도록 제약하는 구현 패턴

- 구현 방식

* 서비스나 DAO는 매번 객체를 생성할 필요가 없으므로, 싱글톤 패턴 적용하기에 적합

 

ConnectionProvider의 구현

* 서비스에서 Connection을 직접 생성할 경우 : JDBC URL 등이 변경될 경우 모든 코드를 변경할 수도 있음

➡️➡️ 유지보수에 불리함

* 이런 이유로 Connection을 제공하는 역할을 가진 클래스를 별도로 작성함

 

방명록 구성 예시

반응형