라우터(Router), 디스패쳐(Dispatcher), 컨트롤러(Controller)

Jan 23, 2024
라우터(Router), 디스패쳐(Dispatcher), 컨트롤러(Controller)
 
 
자바에서 라우터와 디스패쳐는 웹 어플리케이션에서 사용되며, HTTP 요청을 받아 적절한 컨트롤러에게 전달하는 역할을 한다.
 
notion image
 
디스패처, 컨트롤러 , DAO 를 사용하는 이유는 각 부분이 독립적으로 동작하고, 변경 사항이 있을 때 다른 부분에 미치는 영향을 최소화 할 수 있다. 즉, 하나의 클래스에 책임을 최소화함으로서 유지 보수가 쉬워지는 장점이 있다.
 
notion image
 
5개의 클래스를 생성했다. 각각의 클래스의 책임을 알아보자.

1. 메인 클래스

 
메인 클래스에서는 클라이언트가 입력한 URL 값을 받은 후 라우터에 연결한다.
 
public class App { public static void main(String[] args) { String url = "/insert" ; UserDAO dao = new UserDAO(); UserController con = new UserController(dao); Dispatcher dis = new Dispatcher(con); dis.route(url); } }
 
url 값을 받는다. 원래의 값은 “www.naver.com/insert “ 같은 방식으로 파싱 후 값을 받아야되지만
연습이기 때문에 /insert 로만 설정한다.
 
코드는 입력받은 URL 값을 route 가 있는 Dispatcher 에 전달하고 , Dispatcher UserController 에 전달하고 , UserController 는 UserDAO 에 전달, UserDAO 가 DB와 상호작용하는 구조이다.
 
 

2. 디스패쳐(Dispatcher)

 
디스패쳐는 URL 경로를 기반으로 들어오는 HTTP 를 해당 컨트롤러에 전달하는 역할을 한다. 웹 어플리케이션에서는 클라이언트의 요청을 적절한 컨트롤러에 전달하는 역할을 한다.
 
public class Dispatcher { private UserController con ; public Dispatcher(UserController con) { this.con = con; } public UserController getCon() { return con; } public void setCon(UserController con) { this.con = con; } public void route(String url){ if(url.equals("/insert")){ con.insert(); }else if(url.equals("/delete")){ con.delete(); }else if(url.equals("/update")){ con.update(); } } }
 
Dispatcher 클래스에 route 메서드가 있다. 받은 url 에 따라서 컨트롤러에 있는 메서드를 호출한다.
/insert 를 입력하면 컨트롤러의 insert() 를 호출한다. 하지만 insert 를 입력한다면 정확한 url 을 입력하지 않았기 때문에 컨트롤러에 연결되지 않는다.

3. 컨트롤러(Controller)

 
public class UserController { private UserDAO dao ; public UserController(UserDAO dao) { this.dao = dao; } public UserDAO getDao() { return dao; } public void setDao(UserDAO dao) { this.dao = dao; } public void insert(){ System.out.println("controller :insert"); dao.insert("oh","6677","01055114477"); } public void delete(){ System.out.println("controller : delete"); dao.delete(5); } public void update(){ System.out.println("controller : update"); dao.update("1133","01044445555",5); } }
 
컨트롤러는 디스패쳐를 통해 받은 URL 을 파싱 후 , 유효성 검사, 검증 후 DAO 와 연결하는 역할을 한다.
클라이언트가 /insert 를 입력했다면 insert() 메서드가 호출된다. insert 문은 값을 클라이언트에게 받아야 하지만 편의를 위해 임의로 값을 넣었다.
 
 
DAO 는 아래의 블로그를 확인하자
 
 

4. 실행

 
notion image
 
url 에 /insert 를 입력했을 때 정상적으로 컨트롤러와 연결된다.
 
notion image
 
테이블에 데이터가 추가된다.
 
notion image
notion image
 
/delete 를 사용하면 데이터가 삭제된다.
Share article

{CODE-RYU};