Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 6. MVC ํŒจํ„ด - ์ ์šฉ , ํ•œ๊ณ„

hello_u 2023. 2. 13. 17:37

 

MVC ํŒจํ„ด - ์ ์šฉ

 

์„œ๋ธ”๋ฆฟ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , JSP๋ฅผ ๋ทฐ๋กœ ์‚ฌ์šฉํ•ด์„œ MVC ํŒจํ„ด์„ ์ ์šฉํ•ด๋ณด์ž.


Model
์€ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. request๋Š” ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ,

 

request.setAttribute() , request.getAttribute() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

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

 

@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);
        dispatcher.forward(request,response);
    }

 

dispatcher.forward() : ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ๋‹ค์‹œ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

 

/WEB-INF


> ์ด ๊ฒฝ๋กœ์•ˆ์— JSP๊ฐ€ ์žˆ์œผ๋ฉด ์™ธ๋ถ€์—์„œ ์ง์ ‘ JSP๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ JSP๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

redirect vs forward


> ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋Š” ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์— ์‘๋‹ต์ด ๋‚˜๊ฐ”๋‹ค๊ฐ€, ํด๋ผ์ด์–ธํŠธ๊ฐ€ redirect ๊ฒฝ๋กœ๋กœ ๋‹ค์‹œ ์š”์ฒญํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ , URL ๊ฒฝ๋กœ๋„ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

๋ฐ˜๋ฉด์— ํฌ์›Œ๋“œ๋Š” ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ํ˜ธ์ถœ์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „ํ˜€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

 

 

 

ํšŒ์› ๋“ฑ๋ก ํผ - ๋ทฐ

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
<body>

<!-- ์ƒ๋Œ€๊ฒฝ๋กœ ์‚ฌ์šฉ, [ํ˜„์žฌ URL์ด ์†ํ•œ ๊ณ„์ธต ๊ฒฝ๋กœ + /save] -->
<form action="save" method="post">
username: <input type="text" name="username" />
age: <input type="text" name="age" />
<button type="submit">์ „์†ก</button>
    </form>
    
    </body>
</html>

 

์—ฌ๊ธฐ์„œ form์˜ action์„ ๋ณด๋ฉด ์ ˆ๋Œ€ ๊ฒฝ๋กœ( / ๋กœ ์‹œ์ž‘)๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒ๋Œ€๊ฒฝ๋กœ( / ๋กœ ์‹œ์ž‘X)์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํผ ์ „์†ก์‹œ ํ˜„์žฌ URL์ด ์†ํ•œ ๊ณ„์ธต ๊ฒฝ๋กœ + save๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.


ํ˜„์žฌ ๊ณ„์ธต ๊ฒฝ๋กœ: /servlet-mvc/members/


๊ฒฐ๊ณผ: /servlet-mvc/members/save

 

 

 

 

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

 

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

 

HttpServletRequest๋ฅผ Model๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


request
๊ฐ€ ์ œ๊ณตํ•˜๋Š” setAttribute() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด request ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•ด์„œ ๋ทฐ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ทฐ๋Š” request.getAttribute() ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋ฉด ๋œ๋‹ค.

 

 

 

ํšŒ์› ์ €์žฅ - ๋ทฐ

 

<ul>
      <li>id=${member.id}</li>
      <li>username=${member.username}</li>
      <li>age=${member.age}</li>
</ul>

 

<%= request.getAttribute("member")%> ๋กœ ๋ชจ๋ธ์— ์ €์žฅํ•œ member ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง„๋‹ค.


JSP
๋Š” ${} ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด request์˜ attribute์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

MVC ๋•๋ถ„์— ์ปจํŠธ๋กค๋Ÿฌ ๋กœ์ง๊ณผ ๋ทฐ ๋กœ์ง์„ ํ™•์‹คํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

MVC ํŒจํ„ด - ํ•œ๊ณ„

 

MVC ํŒจํ„ด์„ ์ ์šฉํ•œ ๋•๋ถ„์— ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ๊ณผ ๋ทฐ๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.


ํŠนํžˆ ๋ทฐ๋Š” ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์—ญํ• ์— ์ถฉ์‹คํ•œ ๋•๋ถ„์—, ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.

 

๋‹จ์ˆœํ•˜๊ฒŒ ๋ชจ๋ธ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ณ , ํ™”๋ฉด์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋”ฑ ๋ด๋„ ์ค‘๋ณต์ด ๋งŽ๊ณ , ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋“ค๋„ ๋งŽ์ด ๋ณด์ธ๋‹ค.

 

 

 

 

MVC ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋‹จ์ 

 

RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request,response);

 

ํฌ์›Œ๋“œ ์ค‘๋ณต

 

View๋กœ ์ด๋™ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ์ค‘๋ณต ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๋ฌผ๋ก  ์ด ๋ถ€๋ถ„์„ ๋ฉ”์„œ๋“œ๋กœ ๊ณตํ†ตํ™”ํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋„ ํ•ญ์ƒ ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

 

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


๊ธฐ๋Šฅ์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ๋ก ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ ์  ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค.

 

๋‹จ์ˆœํžˆ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ฉ”์„œ๋“œ๋กœ ๋ฝ‘์œผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ,

 

๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ•ญ์ƒ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๊ณ , ์‹ค์ˆ˜๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋„ ์ค‘๋ณต์ด๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ์ „์— ๋จผ์ € ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

์†Œ์œ„ ์ˆ˜๋ฌธ์žฅ ์—ญํ• ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller) ํŒจํ„ด์„ ๋„์ž…ํ•˜๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์ž…๊ตฌ๋ฅผ ํ•˜๋‚˜๋กœ!)


์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ๋„ ๋ฐ”๋กœ ์ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ์žˆ๋‹ค.

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

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

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

www.inflearn.com