본문 바로가기

교재 실습265

76. 프런트 컨트롤러의 도입 (2) 3. 프런트 컨트롤러 만들기 프런트 컨트롤러를 만든다. web06 프로젝트의 spms.servlets 패키지에 DispatcherServlet 클래스를 생성한다. 물론 HttpServlet 클래스를 상속받아야 한다. package spms.servlets; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servl.. 2022. 7. 24.
75. 프런트 컨트롤러의 도입 (1) 이번 절에서는 '프런트 컨트롤러'라는 디자인 패턴을 이용하여 좀 더 유지보수가 쉬운 구조로 MVC를 개선해본다. 컨트롤러를 만들다 보면 요청 데이터를 처리하는 코드나 모델과 뷰를 제어하는 코드가 중복되는 경우가 있다. 중복 코드들은 유지보수를 어렵게 하므로 프런트 컨트롤러를 통해 이 문제를 해결해본다. 1. 프런트 컨트롤러 패턴 다음 그림은 프런트 컨트롤러를 적용한 MVC 구조도와 클아이언트 요청을 처리하는 절차이다(그림 1). ① 웹 브라우저에서 요청이 들어오면, 제일 먼저 프런트 컨트롤러에서 그 요청을 받는다. 프런트 컨트롤러는 VO 객체를 생성하여 클라이언트가 보낸 데이터를 담는다. 그리고 ServletRequest 보관함에 VO 객체를 저장한다. 요청 URL에 따라 페이지 컨트롤러를 선택하여 실행.. 2022. 7. 21.
74. 미니 MVC 프레임워크 만들기 도입부 및 환경설정 요즘 프로젝트들은 대부분 프레임워크를 기반으로 개발을 진행한다. 이렇게 프레임워크를 도입하는 주요 이유는 초보 개발자라도 약간의 시간을 들여 프레임워크의 사용법만 익히면 웬만한 기능들을 큰 오류 없이, 성능의 큰 손실 없이 빠르게 개발할 수 있기 때문이다. 고객 입장에서도 최소한의 품질을 보장받을 수 있어 좋고, 개발회사도 인건비가 낮은 초보 개발자로 큰 문제없이 개발을 진행할 수 있어 좋은 것이다. 여기서 문제는 개발자이다. 프레임워크를 기반으로 개발을 진행하다 보면 5년, 10년이 지나도 프로그래밍 실력이 늘지 않는다. 복사와 붙여넣기만 하다 보니 프레임워크로 해결할 수 없는 요구사항이 들어오면 어떻게 대처해야 할지 막막해 한다. 그렇다고 프레임워크를 안 쓸 수는 없고, 이왕 쓰는거 제대로 알고 사용.. 2022. 7. 20.
73. DataSource와 JNDI (4) - ContextLoaderListener 클래스 변경 ContextLoaderListener 클래스를 수정한다. package spms.listeners; import java.sql.SQLException; import javax.naming.InitialContext; //import java.sql.Connection; //import java.sql.DriverManager; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; //import javax.servlet.annotation.WebListener; import jav.. 2022. 7. 19.
72. DataSource와 JNDI (3) 4. 서버에서 제공하는 DataSource 사용하기 DataSource를 사용하는 이유는 서버에서 관리하기 때문에 데이터베이스에 대한 정보가 바뀌거나 JDBC 드라이버가 교체되더라도 애플리케이션에는 영향을 주지 않기 때문이다. 그런데 앞의 예제는 BasicDataSource를 사용하기 때문에, DataSource의 이점을 누리지 못했다. 이번에는 서버에서 관리하는 DataSource를 사용해 보겠다. 실무에서도 주로 이 방법을 사용한다. - 톰캣 서버에 DataSource 설정하기 톰캣 실행 환경에서 DataSource를 설정한다. 서버 제품에 따라 DataSource를 설정하는 방법이 다르니 항상 서버의 메뉴얼을 참고한다. 톰캣 실행 환경 폴더에서 context.xml 파일을 찾는다(그림 1). 서버가.. 2022. 7. 18.
71. DataSource와 JNDI (2) 3. DataSource의 적용 MemberDao 클래스에 DBConnectionPool 대신 DataSource를 적용해본다. - DataSource 구현체 준비 JDBC를 사용하려면 JDBC API에 따라 작성한 구현체, 즉 JDBC 드라이버가 필요하듯이, DataSource를 사용하려면 javax.sql 패키지의 구현체가 필요하다. 웹 브라우저로 https://commons.apache.org/ 사이트에 접속한다. 컴포넌트 목록에서 'DBCP' 링크를 클릭한다. DBPC 컴포넌트 페이지에서 왼쪽 카테고리의 'Downloads' 링크를 클릭한다(그림 2). 다운로드 페이지에서 다음 그림과 같이 파일 목록에서 'commons-dbcp2-2.9.0-bin.zip' 링크를 클릭하여 파일을 내려받는다. 다만.. 2022. 7. 17.
70. DataSource와 JNDI (1) JDK 1.4 버전부터 포함된 DataSource에 대해 배운다. DataSource는 JDBC 확장 API를 정의한 javax.sql 패키지에 들어 있다. Java EE 서버(예 : 톰캣 서버)에서 DB 커넥션 풀을 관리하는 방법에 대해 알아본다. JNDI API를 사용하여 Java EE 서버 자원에 접근하는 방법을 배운다. 1. javax.sql 확장 패키지 javax.sql 패키지는 java.sql 패키지의 기능을 보조하기 위해 만든 확장 패키지다. 서버 쪽 데이터 소스에 대한 접근을 쉽게 하고, 좀 더 다양한 방법으로 데이터를 다룰 수 있는 API를 제공한다. 이 패키지는 JDK 1.4 부터 포함되었다. Java EE 에서도 기본 패키지로 정의되어 있다. javax.sql 패키지가 제공하는 주요 .. 2022. 7. 16.
69. DB 커넥션풀 (3) 3. MemberDAO에 DB 커넥션풀 적용하기 MemberDao 클래스에 DBConnectionPool을 적용한다. - DBConnectionPool 객체를 주입하기 위한 코드 준비 MemberDao 클래스 코드를 수정한다. public class MemberDao { //Connection connection; //Connection 객체 주입(의존성 주입, 역제어) /*public void setConnection(Connection connection) { this.connection = connection; }*/ DBConnectionPool connPool; //DBConnectionPool 객체 주입 public void setDbConnectionPool(DBConnectionPool c.. 2022. 7. 14.
68. DB 커넥션풀 (2) 2. DB 커넥션풀 만들기 web05 프로젝트의 spms.util 패키지를 생성하여 DBConnectionPool 클래스를 생성한다(그림 1). package spms.util; import java.sql.Connection; import java.sql.DriverManager; import java.util.ArrayList; public class DBConnectionPool { String url; String username; String password; ArrayList connList = new ArrayList(); //Connection 객체 보관할 ArrayList //DB커넥션 생성에 필요한 값 준비 public DBConnectionPool(String driver, Strin.. 2022. 7. 13.