CS

[12/13] MVC 패턴

콩스프 2022. 12. 13. 21:21

웹 어플리케이션의 아키텍쳐

모델 1

JSP + JavaBeans (Service) : 뷰와 로직이 섞여있음

 

장점 단점
구조가 단순함 - 출력과 로직 코드가 섞여 JSP 코드가 복잡해짐
- 프런트와 백엔드가 혼재되어 분할이 용이하지 않음
- 유지보수가 어려움

 

 

모델 2

JavaBean(Service) + JSP + Servlet : MVC 패턴과 유사함

 

장점 단점
- 뷰와 로직의 분리로 모델1에 비해 덜 복잡함
- 분업이 용이하며, 유지보수가 쉬움
- 모델1에 비해 습득이 어렵고, 작업량이 많음

 

 

MVC  패턴

  • 사용자어플리케이션을 사용 ➡ 원하는 기능을 처리하기 위한 모든 요청컨트롤러에 보냄
  • 컨트롤러모델을 사용하고, 모델은 알맞은 비즈니스 로직을 수행
  • 컨트롤러는 사용자에게 보여줄 뷰를 선택
  • 선택된 는 사용자에게 알맞은 결과 확인을 보여줌 ➡ 사용자에게 보여줄 데이터컨트롤러를 통해 전달받음

 

모델

  • 값과 기능을 가지고 있는 객체
  • 비즈니스 로직을 수행

모델 EX)

public class StudentVO {
    private int num;
    private String name;
    private int score;
    
  	...
}
public class StudentDAO {
    ArrayList<StudentVO> students;
    
    public StudentDAO() {
    	students = new ArrayList<StudentVO>();
    }
    
    //C
    public boolean insert(StudentVO svo) {...}
    
    //R
    public ArrayList<StudentVO> selectAll(StudentVO svo) {...}
    public StudentVO selectOne(StudentVO vo) {...}
    
    //U
    public boolean update(StudentVO svo) {...}
    
    //D
    public boolean delete(StudentVO svo) {...}   
    
   	 ...
}

 

 

  • 모델에 포함된 데이터의 시각화
  • 뷰에는 비즈니스 로직이 없음
public class View() {
    private Scanner sc;
    public int action;
    
    public View() {
    	sc = new Scanner(System.in)
    }
    
    public void printStudents(ArrayList<StudentVO> svo) { ... }
    public int getNum() { ... }
    public String getName() { ... }
    
   	 ...
}

 

 

컨트롤러

  • 전체적인 흐름을 제어
  • 모델 객체로의 데이터 흐름을 제어
  • 뷰와 모델의 역할을 분리
  • 컨트롤러 내에서 로직은 최대한 배제하고 모델과 뷰 사이의 연결 역할만 하도록 구현

컨트롤러 EX)

public class Ctrl {
    View view;
    StudentDAO model;
    
    public Ctrl() {
    	view = new View();
        model = new StudentDAO();
    }
    
    public void startApp() {
    	while(true) {
        	view.printMenu();
            if(view.action == 1) {
            	StudentVO svo = new StudentVO();
            	svo.setNum(view.getNum());
            	model.selectOne(svo);
            }
            	...
        }
    }
    	...
}

 

 

MVC 패턴을 사용하는 이유

  • 원래 개인 컴퓨터에서 작동하는 어플리케이션의 개발을 목적으로 만들어진 패턴
  • WWW(World Wide Web) 어플리케이션을 사용하기 위한 용도로도 폭넓게 사용되고 있음

 

장점

  • 각 컴포넌트의 코드 결합도를 낮출 수 있음
  • 코드의 재사용성을 높일 수 있음
  • 구현자들 간의 커뮤니케이션 효율성을 높일 수 있음

 

 

많이 실수하는 부분

 

1) Model에서 View의 접근 또는 역할 수행

  • View 에서 해야하는 출력 로직을 Model에서 수행하지않도록 주의해야 함
  • 로그는 개발자가 보는 것 ➡ 사용자가 보는 것이 아님
  • 사용자가 결과를 보게하려면 Model에서 비즈니스 로직 메서드의 return 타입을 boolean으로 하여
    Controller에 넘겨주고
    그 값이 true인지 false에 따라 View가 다르게 출력하도록 Ctrl에서 조합해주어야 함

 

2) View에서 일어나는 '과한' 값 검증과 예외 처리

  • 단일 책임원칙에 위반되는 것
  • 사용자의 권한 혹은 논리적인 값 (존재유무, 일치여부) 등은 Service Layer에서 하는 것이 좋음

 

3) View에서 일어나는 비즈니스 로직

  • View에서 Model을 생성하거나 연산을 수행하는 등의 실수를 조심해야 함

 

 

참고문헌

1) [10분 테코톡] 👩🏻‍💻👨🏻‍💻해리&션의 MVC 패턴