본문 바로가기

Dev.BackEnd/Servlet&JSP

(11)
#미니 MVC FrameWork 작동원리 정리 First, 웹 애플리케이션의 실행WAS가 실행되면 서블릿 컨테이너( Tomcat )가 '메소드' 를 호출한다.이 메소드는 ContextLoaderListener.java 에 있는 contextInitialized(event) 메소드이다.실행이라는 event를 인자로 받아 실행되는 것이다.ContextLoaderListener 클래스는 ServletContextListener라는 인터페이스를 구현하고 있다.WAS의 실행을 Listen하고 있는 것이다. contextInitialized(event) 메소드의 역할이 메소드는 ServletContext 저장소에서 propertiespath를 꺼내온다.그리고 이 propertiespath를 이용하여 ApplicationContext 클래스를 생성한다.이 App..
#미니 MVC FrameWork 만들기 네번째 단계, 의존성 주입 자동화 미니 MVC Framework 만들기 네번째 단계,프로퍼티와 어노테이션을 활용한 의존성 주입 자동화. 문제점 착안, 지금까지, 각 요청에 따른 페이지 컨트롤러를 생성하고, DAO객체를 주입하는 과정을 하드코딩을 통해 해결했다. 그 결과 ContextLoaderListener 클래스가 매우 지저분해졌다. 이를 해결하기 위해 프로퍼티 파일과 어노테이션을 이용하여, 객체를 생성하고 의존성을 주입하는 부분을 자동화할 것이다. 해결방안,프로퍼티 파일에 설정된 객체와 어노테이션을 통해 설정된 객체를 준비하는 일을 할 ApplicationContext라는 클래스를 만든다. 이 클래스는 ContextLoaderListener에 의해 호출된다. 구체화,ContextLoaderListener> 웹 애플리케이션이 실행되면서..
#미니 MVC FrameWork 만들기 세번째 단계, 프런트 컨트롤러 자동화 미니 MVC Framework 만들기 세번째 단계,리플랙션 API를 이용하여 프런트 컨트롤러를 자동화 하자. 문제점 착안, 프런트 컨트롤러에서 VO 객체를 생성하는 부분이 상당히 지저분하다. 각 요청에 따른 Member 객체를 생성해야하기 때문이다. 나중에 요청이 개수가 더 많아질 경우에, 그에 맞는 VO를 또 생성하는 코드를 작성하는 것은 유지보수성을 떨어뜨린다. 해결방안,DataBinding을 이용하자. getBinder라는 메소드를 선언하는 DataBinding Interface를 만들고, 각각의 페이지 컨트롤러들이 DataBinding Interface를 구현한다. 페이지 컨트롤러는 이 getBinder라는 메소드를 통해 프런트 컨트롤러에게 요청에 필요한 DataName과 DataType을 전달한..
#미니 MVC FrameWork 만들기 두번째 단계, DAO 조작 미니 MVC Framework 만들기 두번째 단계,MemberDao Interface를 통한 다형성 핸들링,Dao를 외부로부터 주입받아 의존성을 주입하자. 문제점 착안,현재까지는 MemberDao를 ContextLoaderListener에서 생성하여 ServletContext에 보관한 다음에, 각각의 서블릿에서 꺼내 사용하였다. 이렇게 되면 각각의 서블릿에서 중복되는 코드가 발생하며 유지보수성이 떨어지게 된다. 그리고 MemberDao 클래스에 작성된 쿼리문들은 Mysql기반으로 작성되어 있다.만약에, 서비스를 구축하고 있는 데이터베이스의 종류가 변경된다면,쿼리문 뿐만 아니라, MemberDao에 관련된 코드들을 모두 수정해야하는 상황이 발생한다. 해결방안,각각의 페이지 컨트롤러에는 MemberDao를 ..
#미니 MVC FrameWork 만들기 첫번째 단계, 컨트롤러의 분리 미니 MVC Framework 만들기 첫번째 단계,DispatchServlet(Front-Controller)과 Controller들(Page-Controller)로 분리 문제점 착안,기존의 아키텍쳐에서는 하나의 서블릿에서 요청을 받고 각각의 모델에 해당하는 작업들을 요청하는 방식이었다. 이렇게 되면 각각의 컨트롤러의 몸집이 거대해진다. 그리고 각각의 서블릿이 한 가지 역할을 수행하는 서블릿이므로 코드의 재사용성이 떨어진다. (코드를 살펴보면 중복되는 코드가 많다는 것을 알 수 있다.) 그래서 프런트 컨트롤러와 페이지 컨트롤러 두 가지로 컨트롤러를 분리하려고 한다. 설계프런트 컨트롤러는 요청을 받고 그에 맞는 응답을 전달하는 서블릿으로 그 역할을 제한한다. 프런트 컨트롤러의 역할은 브라우저로부터 오는 요..
5. Model 1 에서 Model 2 까지 변화과정 3편 5. Model 1 에서 Model 2 까지 변화과정 3편controller역할 뿐만 아니라 view 역할과 model 역할까지 모두 하는 서블릿부터 만든 다음에,그 서블릿으로부터 기능들이 하나씩 분리되는 과정을 보이려고 한다. 5. ServletContextListener 리스너란 사건이 발생했을 때, 알림을 받는 객체를 말한다. 서블릿을 보면, 매 요청마다 MemberDao memberDao = new MemberDao( ); 를 통해 DAO 인스턴스를 생성한다.요청할 때마다 객체를 만들게 되면 많은 가비지가 생성되고, 실행 시간이 길어진다. 그래서 DAO를 ServletContext에 저장한다. AppInitServlet에 DAO 객체를 준비해도 되지만, 웹 애플리케이션 이벤트를 이용하는 것이 더 ..
4. Model 1 에서 Model 2 까지 변화과정 2편 4. Model 1 에서 Model 2 까지 변화과정 2편controller역할 뿐만 아니라 view 역할과 model 역할까지 모두 하는 서블릿부터 만든 다음에,그 서블릿으로부터 기능들이 하나씩 분리되는 과정을 보이려고 한다.Model 21. 값 객체 ( Value Object ) 생성하기 Member.javaVO란 값을 담는 용도로 사용하기 위한 객체를 말한다. 계층 간 또는 데이터를 전달하는데 이용하여 데이터 수송 객체(DTO)라고도 불린다. 각종 값들을 갖고 있으며 get메소드와 set메소드로 이루어져 있다. 컨트롤러(Servlet)에서 생성하면 뷰(JSP)에서 그것을 참조하여 화면을 출력하는 것이다. 즉, 서블릿에서 값을 set해 놓으면, JSP에서는 값을 get하여 출력하는 것이다. 2. Vi..
3. Model 1에서 Model 2까지 변화과정 1편 3. Model 1 에서 Model 2 까지 변화과정 1편controller역할 뿐만 아니라 view 역할과 model 역할까지 모두 하는 서블릿부터 만든 다음에,그 서블릿으로부터 기능들이 하나씩 분리되는 과정을 보이려고 한다. Model 1 방식의 웹 애플리케이션 구축1. 서블릿 작성 회원 정보를 ArrayList 형식으로 갖고 있는 서블릿을 생성한다.MemberListServlet.java DriverManager 1DriverManager.registerDriver(new com.mysql.jdbc.Driver());csmysql Database와 연동할 코드이다. executeQuery 123456789conn = DriverManager.getConnection( "jdbc:mysql://loc..