[Spring] MVC 1ํŽธ (6) - MVC ํŒจํ„ด ์ ์šฉ

2022. 3. 29. 21:14ยทSpring

๐Ÿ“Œ MVC ํŒจํ„ด ์‚ฌ์šฉ ์ด์œ ?

  • ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ•  : ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ทฐ ๋ Œ๋”๋ง๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.
  • ๋ณ€๊ฒฝ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ทฐ ๋ Œ๋”๋ง์˜ ๋ณ€๊ฒฝ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด ๋‹ค๋ฅด๋ฏ€๋กœ ํ•œ ํŒŒ์ผ์— ๋‘๋ฉด ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์ง€ ์•Š๋‹ค.
  • ๊ธฐ๋Šฅ ํŠนํ™” : JSP๋Š” ๋ทฐ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š”๋ฐ ์ตœ์ ํ™” ๋˜์–ด์žˆ๋‹ค.

 

๐Ÿ“Œ Model-View-Controller

  • ์ปจํŠธ๋กค๋Ÿฌ : HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค. ๋ทฐ์— ์ „๋‹ฌํ•  ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ๋ชจ๋ธ์— ๋‹ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 
  • ๋ชจ๋ธ : ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋‹ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ์— ์ „๋‹ฌํ•œ๋‹ค. ๋ทฐ๋Š” ๋•๋ถ„์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ๋ชฐ๋ผ๋„ ๋˜๊ณ , ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š” ์ผ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ทฐ : ๋ชจ๋ธ์— ๋‹ด๊ฒจ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

โ€ป์ฐธ๊ณ โ€ป

์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค๋ฌด์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์„œ๋น„์Šค๋ผ๋Š” ๊ณ„์ธต์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

๐Ÿ“Œ ์„œ๋ธ”๋ฆฟ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ, JSP๋ฅผ ๋ทฐ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

๊ธฐ์กด์— ๊ตฌํ˜„ํ–ˆ๋˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ MVC ํŒจํ„ด์„ ์ ์šฉํ•ด์„œ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด์ž!

 

โœ… ํšŒ์› ๋“ฑ๋ก ํผ - ์ปจํŠธ๋กค๋Ÿฌ (Servlet)

@WebServlet(name =  "mvcMemberFormServlet",urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String viewPath = "/WEB-INF/views/new-form.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);// controller์—์„œ view๋กœ ์ด๋™ํ•  ๋•Œ ์‚ฌ์šฉ
        dispatcher.forward(request, response);
    }
}
  • dispatcher.forward() : ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ ๋˜๋Š” JSP๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ๋‹ค์‹œ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•œ๋‹ค. (๋ฆฌ๋‹ค์ด๋ ‰์…˜ X)

โ€ป ์ฐธ๊ณ  โ€ป

redirect vs forward

- redirect: ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ ํ˜ธ์ถœ์ด ๋‘๋ฒˆ ๋ฐœ์ƒ. ์ฒ˜์Œ ํ˜ธ์ถœ + ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์‹œ ์žฌํ˜ธ์ถœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ง€ ๊ฐ€๋Šฅ

- forward: ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ ํ˜ธ์ถœ์€ ํ•œ๋ฒˆ๋งŒ ๋ฐœ์ƒ. ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์ด ๋ฐœ์ƒ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ง€ ๋ถˆ๊ฐ€

 

โœ… ํšŒ์› ๋“ฑ๋ก ํผ - ๋ทฐ (JSP)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="save" method="post">
    username: <input type="text" name="username" />
    age:      <input type="text" name="age" />
    <button type="submit">์ „์†ก</button>
</body>
</html>
  • JSP ํŒŒ์ผ์ด /WEB-INF ๊ฒฝ๋กœ์— ์žˆ์œผ๋ฉด ์™ธ๋ถ€์—์„œ ์ง์ ‘ JSP๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์ด ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋‘”๋‹ค.

 

โœ… ํšŒ์› ์ €์žฅ - ์ปจํŠธ๋กค๋Ÿฌ (Servlet)

@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(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);

    }
}
  • HttpServletRequest ๊ฐ์ฒด๋ฅผ Model๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • request.setAttribute() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ๋ทฐ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ์ด๋•Œ key=์ด๋ฆ„, value=member ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

 

โœ… ํšŒ์› ์ €์žฅ -  ๋ทฐ (JSP)

<ul>
    <!--(Member)(request.getAttribute("member")).getId()์™€ ๋˜‘๊ฐ™์€ ์—ญํ• -->
    <li>id=${member.id}</li>
    <li>username=${member.username}</li>
    <li>age=${member.age} </li>
</ul>
  • JSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ${ } ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ request์˜ attribute์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ํšŒ์› ๋ชฉ๋ก - ์ปจํŠธ๋กค๋Ÿฌ (Servlet)

List<Member> members = memberRepository.findAll();

request.setAttribute("members", members);
  • List๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ชจ๋ธ์— ๋ณด๊ด€ํ•œ๋‹ค.

 

โœ… ํšŒ์› ๋ชฉ๋ก -  ๋ทฐ (JSP)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:forEach var="item" items="${members}"> <!--model์˜ attribure ์ด๋ฆ„์œผ๋กœ ๊ฐ€์ ธ์˜ด-->
    <tr>
        <td>${item.id}</td>
        <td>${item.username}</td>
        <td>${item.age}</td>
    </tr>
</c:forEach>
  • ๋ชจ๋ธ์— ๋‹ด์•„๋‘” ๋ฆฌ์ŠคํŠธ๋ฅผ JSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” taglib ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด for๋ฌธ์„ ๋Œ๋ฆฐ ๊ฒƒ ์ฒ˜๋Ÿผ ์ถœ๋ ฅํ–ˆ๋‹ค.
  • members ๋ฆฌ์ŠคํŠธ์—์„œ member๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด item ๋ณ€์ˆ˜์— ๋‹ด์•„ ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ์ค„์ฒ˜๋Ÿผ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • JSP์™€ ๊ฐ™์€ ๋ทฐ ํ…œํ”Œ๋ฆฟ์€ ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š”๋ฐ ํŠนํ™”๋œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๐Ÿ“Œ ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋กœ MVC ํŒจํ„ด ๊ตฌํ˜„ ์‹œ ํ•œ๊ณ„

์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ๋ Œ๋”๋ง ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ–ˆ์ง€๋งŒ, ์ปจํŠธ๋กค๋Ÿฌ์— ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ๋‹ค.

String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
  • forward ์ค‘๋ณต : dispatcher๋ฅผ ๊ฐ€์ ธ์™€ view๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ์ค‘๋ณต ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • viewPath ์ค‘๋ณต : ๊ฒฝ๋กœ ๋ถ€๋ถ„(prefix)๊ณผ ํ™•์žฅ์ž ๋ถ€๋ถ„(suffix)์ด ์ค‘๋ณต๋œ๋‹ค. ๋งŒ์•ฝ ํด๋” ์ „์ฒด๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ๋ฐ”๊พธ๋Š” ๋“ฑ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€๋ฉด ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ : request ๊ฐ์ฒด๋Š” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์‚ฌ์šฉํ–ˆ์ง€๋งŒ response ๊ฐ์ฒด๋Š” ์•„์˜ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๋˜ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค.

 

→ ๊ณตํ†ต ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ์ „์— ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋ชจ๋“  ์š”์ฒญ์€ ์ˆ˜๋ฌธ์žฅ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด(ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ)๋ฅผ ํ†ตํ•ด์„œ ๋“ค์–ด์™€์„œ ๋’ค์— ์žˆ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ํ•˜์ž!

 


๊ฐ•์˜ ๋งํฌ

 

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

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

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] MVC 1ํŽธ (7) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v1, v2, v3  (0) 2022.03.29
[Spring] MVC 1ํŽธ (5) - โ€‹ ์„œ๋ธ”๋ฆฟ, JSP๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜  (0) 2022.03.29
[Spring] MVC 1ํŽธ (4) - HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ  (0) 2022.03.29
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] MVC 1ํŽธ (8) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v4,v5
  • [Spring] MVC 1ํŽธ (7) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v1, v2, v3
  • [Spring] MVC 1ํŽธ (5) - โ€‹ ์„œ๋ธ”๋ฆฟ, JSP๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • [Spring] MVC 1ํŽธ (4) - HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ
suaring
suaring
๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋กœ๊ทธ
  • suaring
    Sue's devlog
    suaring
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • Algorithm (2)
      • WEB (8)
      • Spring (26)
      • Java (83)
      • Kotlin (1)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
suaring
[Spring] MVC 1ํŽธ (6) - MVC ํŒจํ„ด ์ ์šฉ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”