자바에서 라우터와 디스패쳐는 웹 어플리케이션에서 사용되며, HTTP 요청을 받아 적절한 컨트롤러에게 전달하는 역할을 한다.

디스패처, 컨트롤러 , DAO 를 사용하는 이유는 각 부분이 독립적으로 동작하고, 변경 사항이 있을 때 다른 부분에 미치는 영향을 최소화 할 수 있다. 즉, 하나의 클래스에 책임을 최소화함으로서 유지 보수가 쉬워지는 장점이 있다.

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 문은 값을 클라이언트에게 받아야 하지만 편의를 위해 임의로 값을 넣었다.
4. 실행

url 에 /insert 를 입력했을 때 정상적으로 컨트롤러와 연결된다.

테이블에 데이터가 추가된다.


/delete 를 사용하면 데이터가 삭제된다.
Share article