๐ท ํ๋ก ํธ ์ปจํธ๋กค๋ฌ
โ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋จ์ผ ํธ๋ค๋ฌ๊ฐ ๋ฐ์์ ์ฒ๋ฆฌ ํ๋ฆ์ ์ ์ดํ๋ ํจํด์ด๋ค.
์ฆ ์น ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ ๋ค์ด์ค๋ ์์ฒญ์ ๊ฐ๊ฐ์ ์๋ธ๋ฆฟ์ด ์๋ ํ๋์ ์๋ธ๋ฆฟ์ด ๋ฐ์ ์์ฒญ ์ฒ๋ฆฌ์ ํ์ํ ํด๋์ค์๊ฒ ๋๊ฒจ์ฃผ๋ฉฐ ์ฒ๋ฆฌ๋ฅผ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค.
โ ์ ์ฌ์ฉํ ๊น?
์๋ธ๋ฆฟ์ ์๋ฒ๊ฐ ์คํํธ๊ฐ ๋ ๋ค์
์ฒซ ๋ฒ์งธ ์์ฒญ์ด ๋ค์ด์ค๊ฒ ๋ ๊ฒฝ์ฐ ํฐ์บฃ์ด ์๋์ผ๋ก ์์ฑ์ ํด์ค๋ค.
ํ๋ฒ ์์ฑ์ด ๋์ด์ง ์๋ธ๋ฆฟ์ ์ฌ์์ฒญ์ ๋๊ธฐํ๊ธฐ ์ํด ์ฌ๋ผ์ง์ง ์๊ณ ๊ณ์ ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ Destroy() ๋ฉ์๋ ์ฆ ์ ๋ฒ๊ฐ ์ข ๋ฃ๋ ๋ ์ฌ๋ผ์ง๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
์์ฒญ์ด ๋ค์ด์ค์ง๋ ์์๋๋ฐ ๋ค์์ ์๋ธ๋ฆฟ์ด ํญ์ ๋๊ธฐ ์ค์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ์๋นํ๊ธฐ ๋๋ฌธ์
์์ฒญ๋ง ๋ฐ๋ ์๋ธ๋ฆฟ ํ๋๋ก ํต์ผํด์ค ํ์๊ฐ ์๋ค.
๐ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ๋ชจ๋
โพ FrontController
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋๊ฒจ์ฃผ๋ ์ญํ
โพ ActionFactory
์์ฒญ์ ํ์ํ ๊ธฐ๋ฅ์ ๋ํ ํด๋์ค๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉ๊ฐ๋ฅํ๋๋ก ์ ๊ณตํด์ฃผ๋ ํด๋์ค์ด๋ค.
โ ์ด๋ Factory ๊ฐ์ฒด๋ ๋จ์ผ ์์ฑ์ ๊ถ์ฅํ๋ค.
์ฆ ์ธ์คํด์ค๋ฅผ 1๊ฐ๋ง ์์ฑํ๋๋ก ๊ตฌํํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ฑ๊ธํค ํจํด์ด๋ผ๊ณ ํ๋ค.
โพ Bean
๊ฐ ์์ฒญ์ ๋ฐ๋ผ ์์ฑ๋๋ ํด๋์ค์ด๋ฉฐ, ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ฃผ๋ ํด๋์ค์ด๋ค.
๋์ ์ผ๋ก ์์ฒญ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค์ ๋คํ์ฑ์ ํ์ฉํ์ฌ ๊ตฌํํ๋ค.
๐ฅ ๊ตฌํ
โ๏ธ Bean
Bean์ ๋คํ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์์ฑํด๋ ๋ค
๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํด๋์ค๋ค์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
๊ฐ๋จํ๊ฒ ํ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ๋ค.
โพ ์ธํฐํ์ด์ค ์์ฑ
//ํ์ผ๋ช : Controller public interface Controller { public String doUser(HttpServletRequest request, HttpServletResponse response); }
๐ doUser() : ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฉ์๋๋ฅผ ์ถ์ํ ํ์ฌ ํด๋์ค๋ค์ด ๊ตฌํํ๊ฒ ํ๋ค.
โพ ํ์ ๋ฆฌ์คํธ ํด๋์ค ์์ฑ (mList)
public class mList implements Controller{ @Override public String doUser(HttpServletRequest request, HttpServletResponse response) { memberService service = new memberService(); //์์ฒญ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ request.setAttribute("mlist", service.selectList()); //์ต์ข ๋งคํ ๋ฆฌํด return "/member/memberList.jsp"; } }
๐ Controller ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
Service ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ DAO์ ์ ๊ทผํด ๋ฐ์์จ ๊ฒฐ๊ณผ๋ฅผ request์ ์ ์ฅํ๊ณ ์ต์ข ์ ์ผ๋ก ์ด๋๋ url์ ๋ฐํ
์ฆ ์์ฒญํ ํ์์ list๋ฅผ ์ ์ฅํ๋ค๋ฉด View๋ฅผ ์ถ๋ ฅํ jsp๋ก ์ด๋ํ๋ผ๋ ๊ฒ์ด๋ค.
โ๏ธ ActionFactory(Class)
ActionFactory๋ ์ฑ๊ธํค ํจํด ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
โ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
ํด๋์ค ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก
์์ฑ์๋ฅผ private ํ์ฌ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ๋ค.
ํด๋น ์ธ์คํด์ค๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ ๋ด๋ถ์์ ์์ฑํด์ ๊ณต๊ธํ๋๋กํ๋ค.
→ getInstance()
๋ฐ๋ผ์ ์ธ๋ถ์์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ง๋ง
getInstance()๋ฅผ ํตํ์ฌ ์ด๋ฏธ ํด๋์ค ๋ด๋ถ์ ์์ฑ๋์ด์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋๊ฒ์ด ๊ฐ๋ฅํ๋ค.
โพ ์ธ์คํด์ค ์์ฑ ๋ณ์์ get ๋ฉ์๋ ์์ฑ
public class ActionFactory { //์์ฑ์ private ActionFactory() {}; //์ธ์คํด์ค๋ฅผ ๋ณ์๋ก ๋๋ค. private static ActionFactory instance = new ActionFactory(); //instance ์ get ๋ฉ์๋ public static ActionFactory getInstance() { return instance; } }
๐ ๋ด๋ถ์ ๋ฏธ๋ฆฌ new ๋ฅผ ํตํด ์์ฑ์ ํด๋๊ณ get ๋ฉ์๋ ํธ์ถ ์ ์ด๋ฏธ ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ฅผ return ํจ์ผ๋ก์จ
์ธ์คํด์ค๊ฐ 2๊ฐ์ด์ ์์ฑ๋์ง ์๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ทผ์ ์ด์๋ก private๋ฅผ ๋ ์ผ๋ก์จ ์ธ๋ถ์์ ์ ๊ทผํ๋๊ฒ์ ๋ง๋๋ค.
โพ Map์ ์ฌ์ฉํ Bean ๋งคํ
private Map<String,Controller> mappings = new HashMap<>(); //์์ฑ์ private ActionFactory() { mappings.put("/mlist.do", new mList()); };
๐ ์์ฑ์๋ฅผ ํตํด ์์ฑ์ด ๋ ๋ Map์ ์์ฒญ url๊ณผ ์ฐ๊ด๋๋ Bean์ ์ ์ฅํด๋๋ค๋ฉด ์์ฝ๊ฒ key๋ฅผ ํตํด์ ํ์ํ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๊ฐ๋ฅ
โพ map ์ ํตํด ํ์ํ Bean์ ๊บผ๋ด ๋ฐํ
public Controller getController(String mappingName) { return mappings.get(mappingName); }
๐ ์ธ์๋ก ๋ฐ์์จ url , ์ฆ mappingName ์ ํ์ ๋ฆฌ์คํธ๋ฅผ ์์ฒญํ๋ "mlist .do" ์ด๋ค .
๋ฐ๋ผ์ ํด๋น key๊ฐ์ value์ธ new mList() ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ฐํ๋๋ค.
โ๏ธ FrontController (Servlet)
โพ url ๋งคํ ์ค์
//๋งคํ ์ค์ @WebServlet(urlPatterns = {"*.do"}) public class Ex02_FrontController extends HttpServlet { private static final long serialVersionUID = 1L; public Ex02_FrontController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
๐ ์ด๋ ํ ํ์ด์ง๊ฐ ๋ค์ด์ฌ์ง ๋ชจ๋ฅด๊ธฐ๋๋ฌธ์ url ํจํด์ ์ ํด๋์ด ๋์ ์ผ๋ก ๋งคํ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
ex) login ์์ฒญ์ด๋ผ๋ฉด ์์ฒญ url์ login.do
โพ ์์ฒญ์ ํ์ํ ํด๋์ค๋ฅผ ์ธ์คํด์ค๋ก ๋ฐํํด์ค Factory ๊ฐ์ ธ์ค๊ธฐ
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ActionFactory action = ActionFactory.getInstance(); }
๐ Factory๋ ์ฑ๊ธํค ํจํด์ด๋ฉฐ ์ธ๋ถ์์ ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ๋ฅ
๋ฐ๋ผ์ getInstance๋ฅผ ํตํด ์์ฑ๋์ด์๋ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์จ๋ค.
โพ ํ์ํ Bean์ ๊ฐ์ ธ์ค๊ธฐ์ํ getController ๋ฉ์๋
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ActionFactory action = ActionFactory.getInstance(); //์์ฒญ url์ request๋ฅผ ํตํด ๊บผ๋ธ๋ค. String url = request.getServletPath(); //์์ฒญ url์ ์ ๋ฌํ์ฌ ํ์ํ Bean์ ๊ฐ์ ธ์จ๋ค. Controller controller = action.getController(url); }
๐ ํ์ ๋ฆฌ์คํธ๋ฅผ ์์ฒญํ์์ผ๋ Controller ์๋ mList ์ธ์คํด์ค๊ฐ ๋ฐํ๋์ด ๋ด๊ธด๋ค.
โพ controller์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ฉ์๋์ธ doUser๋ฅผ ์คํ์ํค๊ณ ์ต์ข ๋งคํ ๋ฐํ
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = request.getServletPath(); ActionFactory action = ActionFactory.getInstance(); Controller controller = action.getController(url); // url์ ์ต์ข ๋งคํ ๋ฐํ url = controller.doUser(request, response); //๋ง์ฝ ๋ฉ์ธํ์ด์ง(home.jsp)๊ฐ ์๋ค๋ฉด redirect if(url.contains("home.jsp")) { response.sendRedirect(url); }else { // ๊ทธ ์ธ๋ผ๋ฉด forward request.getRequestDispatcher(url).forward(request, response); } }
๐ ๋ฐํ๋ url์ ๋ฐ๋ผ redirect์ forward๋ฅผ ๊ตฌ๋ถํ์ฌ ์ด๋ํ๊ฒ ํ๋๋ก ํ๋ค.
โ๏ธ ์คํ ํด๋ณด๊ธฐ
<a href="/web02/mlist.do" >๋ฆฌ์คํธ do</a>
๐ํด๋ฆญ