๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์ธํ”„๋Ÿฐ - ์Šคํ”„๋ง MVC 1ํŽธ] ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋„์ž… - v1

by YeonBu 2024. 6. 12.
728x90

 

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

 

์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  | ๊น€์˜ํ•œ - ์ธํ”„๋Ÿฐ

๊น€์˜ํ•œ | ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต

www.inflearn.com

 

1. V1์˜ ๊ตฌ์กฐ

 

- ์ด๋ฒˆ  ๋ชฉํ‘œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋ฉด์„œ, ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

2. ๊ตฌํ˜„

 

ControllerV1 - interface

public interface ControllerV1 {

    void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
    
}

 

- ์„œ๋ธ”๋ฆฟ๊ณผ ๋น„์Šทํ•œ ๋ชจ์–‘์˜ ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•œ๋‹ค.

- ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์€ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

- ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ตฌํ˜„๊ณผ ๊ด€๊ณ„์—†์ด ๋กœ์ง์˜ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค

 

 

 

MemberFormControllerV1 - ํšŒ์› ๋“ฑ๋ก ์ปจํŠธ๋กค๋Ÿฌ

public class MemberFormControllerV1 implements ControllerV1 {
    @Override
    public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String viewPath = "/WEB-INF/views/new-form.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);

    }
}

 

 

 

MemberSaveControllerV1 - ํšŒ์› ์ €์žฅ ์ปจํŠธ๋กค๋Ÿฌ

public class MemberSaveControllerV1 implements ControllerV1 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        // Model์— ๋ฐ์ดํ„ฐ ๋ณด๊ด€
        request.setAttribute("member", member);

        String viewPath = "/WEB-INF/views/save-result.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);
    }
}

 

 

 

MemberListControllerV1 - ํšŒ์› ๋ชฉ๋ก ์ปจํŠธ๋กค๋Ÿฌ

public class MemberListControllerV1 implements ControllerV1 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        List<Member> members = memberRepository.findAll();
        request.setAttribute("members", members);

        String viewPath = "/WEB-INF/views/members.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);

    }
}

 

 

 

FrontControllerServletV1 - ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {

    private Map<String, ControllerV1> controllerMap = new HashMap<>();

    public FrontControllerServletV1() {
        controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
        controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
        controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String requestURI = request.getRequestURI();
        ControllerV1 controller = controllerMap.get(requestURI);
        if(controller == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        controller.process(request, response);

    }
}

 

- urlPatterns = '/fornt-controller/v1/*' ๋Š” /front-controller/v1์„ ํฌํ•จํ•œ ํ•˜์œ„ ๋ชจ๋“  ์š”์ฒญ์€ ์ด ์„œ๋ธ”๋ฆฟ์—์„œ ๋ฐ›๋Š” ๋‹ค๋Š” ๋œป์ด๋‹ค.

- controllerMap์˜ key๋Š” ๋งคํ•‘ URL, value๋Š” ํ˜ธ์ถœ๋  ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค.

- ๋จผ์ € requestURI๋ฅผ ์กฐํšŒํ•ด์„œ ์‹ค์ œ ํ˜ธ์ถœํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ controllerMap์—์„œ ์ฐพ๋Š”๋‹ค(์—†์œผ๋ฉด 404).

  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๊ณ  controller.process(request, response)๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ ์ข€ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋กœ V2๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!

 

 

 

๋ฐ˜์‘ํ˜•