전체 글452 79. 페이지 컨트롤러의 진화 (1) 프런트 컨트롤러를 도입하면 페이지 컨트롤러를 굳이 서블릿으로 만들어야 할 이유가 없다. 이번 절에서는 페이지 컨트롤러를 일반 클래스로 전환한다. 일반 클래스로 만들면 서블릿 기술에 종속되지 않기 때문에 재사용성이 더 높아진다. 이제 프런트 컨트롤러에서 페이지 컨트롤러로 작업을 위임할 때는 포워딩이나 인클루딩 대신 메서드를 호출해야 한다. 1. 프런트 컨트롤러와 페이지 컨트롤러의 호출 규칙 정의 프런트 컨트롤러가 페이지 컨트롤러를 일관성 있게 사용하려면, 다음 그림과 같이 호출 규칙을 정의해야 한다(그림 1). 프런트 컨트롤러와 페이지 컨트롤러 사이의 호출 규칙을 문법으로 정의해 두면 개발자들은 그 규칙에 따라 해당 클래스를 작성하고 호출하면 되기 때문에 프로그래밍의 일관성을 확보할 수 있어 유지보수에 도.. 2022. 7. 27. 78. 프런트 컨트롤러의 도입 (4) 6. MemberAddServlet 클래스를 페이지 컨트롤러로 만들기 회원 등록 서블릿 spms.servlets.MemberAddServlet 클래스에 대해 프런트 컨트롤러를 적용한다. package spms.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; impor.. 2022. 7. 26. 77. 프런트 컨트롤러의 도입 (3) 4. MemberListServlet 클래스를 페이지 컨트롤러로 만들기 이제 프런트 컨트롤러가 준비되었으니 기존의 서블릿을 페이지 컨트롤러로 변경한다. 먼저 spms.servlets.MemberListServlet 클래스를 수정한다. package spms.servlets; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import java.. 2022. 7. 25. 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. 이전 1 ··· 38 39 40 41 42 43 44 ··· 51 다음