일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바스크립트심화
- 자바 실습
- 중학수학
- html/css
- CSS
- JSP/Servlet
- 연습문제
- 컴퓨터비전
- 컴퓨터구조
- JSP
- 자바스크립트
- 머신러닝
- 정보처리기사실기
- 혼공머신
- 디버깅
- 데이터분석
- 파이썬
- 데이터베이스
- 중학1-1
- 상속
- ChatGPT
- 개발일기
- 딥러닝
- 자바
- JDBC
- c언어
- rnn
- SQL
- 정보처리기사필기
- 순환신경망
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
MVC 패턴(모델 2)을 사용한 게시판 4 - MVC 패턴의 Controller 역할을 하는 서블릿과 커맨드 패턴 명령 처리 클래스 만들기 본문
MVC 패턴(모델 2)을 사용한 게시판 4 - MVC 패턴의 Controller 역할을 하는 서블릿과 커맨드 패턴 명령 처리 클래스 만들기
huenuri 2024. 12. 16. 13:20지금까지 내가 만든 서블릿은 비즈니스 로직이 기술되어 있고 요청 URL Mapping을 지정해 놓고 원하는 작업을 위해 서블릿에 기술한 요청을 했다. 그런 다음 직접 해당 허블릿을 호출하여 원하는 비즈니스 로직을 수행했다.
게시판 만들기 프로젝트
아래는 모델 2 방식이 아니라 이전 방식으로 프로그래밍을 해서 동작시킨다는 가정 하에 볼 수 있는 그림이다. 이번 장에서는 아래와 같이 실행하지 않는다. 모델 1 방식에서는 다음과 같이 요청하는 것을 보여주고 모델 2와 비교하려는 것이다.
이렇게 특정 이름의 파라미터에 명령어 정보를 담아서 전달한 후 각 명령어에 따른 로직을 처리하는 코드를 별도의 클래스로 작성하는 것을 커맨드 패턴이라고 한다.
모델은 일반적인 클래스 파일이기 때문에 외부에서 직접 연결할 수 없어 컨트롤러가 요청을 받아 요청에 해당하는 모델을 수행하도록 한다. 컨트롤러를 통해서 비즈니스 로직 처리를 위해 모델을 호출하고 처리가 완료되면 화면을 출력하기 위해 모델에서 처리한 결과를 뷰로 전달하는 역할을 한다.
[직접 해보기] MVC 패턴의 Controller 역할을 하는 서블릿 만들기
1. 서블릿 파일 만들기
2. 코드 작성하기
이 창에 쿼리 스트링 형태로 주소창에 다음과 같이 쓴다.
여기에는 아무것도 뜨지 않는다. 콘솔창에서 확인해 보면 무엇을 요청받았는지 확인할 수 있다.
자바에서는 비슷한 형태의 클래스들로 유사한 작업을 할 때 클래스마다 완전히 다른 이름의 메스드로 접근해서 작업을 하도록 하는 것보다 동일한 이름의 메서드로 접근할 수 있도록 하는 것이 개발자에게 편의를 제공한다. 이렇게 사용 방법은 한 가지(메서드 이름이 동일)인데 구체적인 기능이 다양하도록 설계해 놓으면 유사한 작업을 하는 클래스들은 같은 방법으로 사용할 수 있다. 이를 다형성이라고 한다.
다형성을 위해서는 비슷한 형태의 클래스를 여러 개 정의해야 할 경우 클래스들 사이의 공통적으로 갖는 메서드를 인터페이스 내의 추상 메서드로 정의해놓는다. 이 인터페이스의 구현 클래스에서 상속을 받아 서브 클래스에서 적합한 로직을 기술하도록 한다. 이를 상속받은 서브 클래스에서 오버라이딩하지 않으면 컴파일 에러가 발생하기 때문에 강제로 동일한 접근 방식을 취할 수 있도록 한다.
우리가 작성할 모델들은 컨트롤러에서 요청이 들어오면 작업에 알맞은 모델 내의 비즈니스 로직이 수행되도록 해야 한다. 그렇기에 컨트롤러에서 동일한 방식으로 모델을 접근할 수 있도록 하기 위해서는 이들 모델들이 상속받아야 하는 인터페이스를 설계해 두고 이를 상속받아 사용하도록 한다.
다음은 컨트롤러에서 요청이 들어오면 한 가지 방식으로 모델 내의 비즈니스 로직이 수행되도록 하기 위한 추상 메서드를 인터페이스에서 정의한다. 인터페이스 이름은 Action이라고 하겠다.
[직접 해보기] 모델을 동일한 방식으로 실행하기 위한 인터페이스
1. 인터페이스 만들기
2. 추상 메서드 정의하기
모든 객체들은 Action 인터페이스의 상속을 받는 구현 객체이어야 하기 때문에 이를 액션 객체라고 부른다. 컨트롤러에서는 직접 모델을 생성하지 않는 대신 액션 객체를 생성해내는 팩토리(공장) 역할을 하는 클래스를 통해서 생성한다.
객체를 생성해내는 클래스를 따로 설계해서 작업하는 것을 팩토리 패턴이라고 한다. 이번에는 요청이 들어오면 이에 해당하는 액션 객체를 생성해 주는 클래스를 설계하겠다. 액션 객체를 생성할 것이기 때문에 이름은 AcionFactory로 한다.
[직접 해보기] 커맨드 패턴으로 작업 처리를 위한 명령 처리 클래스
1. 클래스 생성하기
2. 클래스 코드 작성하기
BoardSevlet 클래스의 doGet() 메서드에서 ActionFactory 객체를 생성한 후 BoardServlet을 요청하면서 전달된 command 요청 파라미터 값을 ActionFactory 객체의 getAction() 메서드에 전달해 준다. getAction() 메서드가 리턴해준 action 객체로 execute() 메서드를 호출한다.
아직 모델 클래스를 만들지 않았고 ActionFactory의 getAction() 메서드 역시 액션 객체를 생성하지 않고 null을 리턴한다. 이를 action 레퍼런스 변수에 저장해둔다. null을 받아서 execute() 머서드를 호출하면 예외가 발생하기 때문에 action 레퍼런스 변수가 null인지 체크하여 null이 아닐 경우에만 execute() 메서드가 호출되도록 한다.
위에서 기술한 내용을 BoardServlet 클래스의 doGet() 메서드에 추가한다.
[직접 해보기] BoardServlet 클래스에 코드 추가하기
이번에는 null이 아니고 boad_list로 받았다.
학습을 마치고
여기까지 해서 아침 공부를 마치려고 한다. 이제 절반 정도 실습 프로젝트가 남아있다. MVC 패턴이 어떻게 작동되는지도 알게 되었고 이 학습을 마치면 혼자서 홈페이지도 만들어볼 수 있을 것 같은 예감이 든다. 정말 어렵게만 느껴지던 JSP/서블릿 공부도 나름 할만해졌다.
공부하는 것이 날마다 재미있는 건 아니고 하기 싫을 때도 많지만 그래도 내가 하고 싶은 프로젝트를 진행할 때는 좀더 흥미로울 것 같다.