๐Ÿ“š ์Šคํ”„๋ง(Spring) - ์„œ๋ธ”๋ฆฟ(Servlet)

CodeByHanยท2025๋…„ 3์›” 29์ผ

์Šคํ”„๋ง

๋ชฉ๋ก ๋ณด๊ธฐ
16/33

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•˜๋ฉฐ, ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋ฐฉ์‹

ํ”„๋ ˆ์ž„์›Œํฌ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ํ๋ฆ„์„ ์ด๋ฏธ ์ •์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ‹€ ์•ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ฃผ๋„ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ตฌํ˜„

๐Ÿ“Œ ์Šคํ”„๋ง(Spring)

์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ์†”๋ฃจ์…˜

์Šคํ”„๋ง(Spring) ์˜ ํŠน์ง•

1) IoC ( Inversion of Control ) : ์ œ์–ด์˜ ์—ญ์ „

  • ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•˜๋„๋ก ํ•˜๋Š” ๊ฐœ๋…
  • ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
  • ์ฆ‰, ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ Ioc ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ œ์–ด์˜ ์—ญ์ „(IoC) ๋ฏธ ์‚ฌ์šฉ

class B {
    public void doSomething() {
        System.out.println("B๊ฐ€ ์ผ์„ ํ•œ๋‹ค.");
    }
}

class A {
    private B b;
    
    public A() {
        // ํด๋ž˜์Šค A ๋‚ด๋ถ€์—์„œ ์ง์ ‘ B ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ
        this.b = new B();
    }
    
    public void perform() {
        b.doSomething();
    }
}

public class NoIoCExample {
    public static void main(String[] args) {
        A a = new A();
        a.perform();
    }
}
  • A ํด๋ž˜์Šค๋Š” B ํด๋ž˜์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ๊ฐ•ํ•˜๊ฒŒ ์˜์กด

์ œ์–ด์˜ ์—ญ์ „(IoC) ์ ์šฉ

class B {
    public void doSomething() {
        System.out.println("B๊ฐ€ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค.");
    }
}

class A {
    private B b;
    
    // B ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์Œ (์ƒ์„ฑ์ž ์ฃผ์ž…)
    public A(B b) {
        this.b = b;
    }
    
    public void perform() {
        b.doSomething();
    }
}

public class IoCExample {
    public static void main(String[] args) {
        // ์™ธ๋ถ€(IoC ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ)๊ฐ€ B ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•จ
        B b = new B();
        A a = new A(b);
        a.perform();
    }
}
  • A ํด๋ž˜์Šค๋Š” B์˜ ๊ตฌ์ฒด์ ์ธ ์ƒ์„ฑ ๊ณผ์ •์— ๊ด€์—ฌํ•˜์ง€ ์•Š๊ณ , B ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๊ตฌํ˜„์ฒด์—๋งŒ ์˜์กด
  • ์—ญํ• ๊ณผ ๊ด€์‹ฌ์„ ๋ถ„๋ฆฌํ•ด ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉฐ, ์ด์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด ๊ฐ„ ์˜์กด์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

2) ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)

ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๋ฐ›๋Š”๊ฒƒ

  • ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด์„ฑ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋ฐ›๊ฒŒ ๋œ๋‹ค.
  • ์ด๋Š” ์ œ์–ด์˜ ์—ญ์ „(IoC) ์›์น™์„ ์‹คํ˜„ํ•˜๋Š” ํ•œ ๋ฐฉ๋ฒ•
public class IoCExample {
    public static void main(String[] args) {
        B b = new B();
        A a = new A(b);
        a.perform();
    }
}
  • ๋จผ์ € B ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ
  • ์ดํ›„, ์ด B ๊ฐ์ฒด๋ฅผ A ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ฃผ์ž…
  • DI๋Š” loC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์„œ๋ธ”๋ฆฟ(Servlet)

์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ์ˆ ๋กœ์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

  • HttpServletRequest : ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์ค€๋‹ค.
  • HttpServletResponse : ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException{
    } 
}

์„œ๋ธ”๋ฆฟ(Servlet) ๋™์ž‘ ๊ตฌ์กฐ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ /hello ๋กœ http ์š”์ฒญ์„ ํ•œ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ http ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.
  3. HttpServletRequest,HttpServletResponse ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  4. /hello ์— ๋”ฐ๋ผ ๋งคํ•‘๋œ HelloServlet ์„ ์ฐพ์•„ service() ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  5. HTTP ๋ฉ”์„œ๋“œ(GET,POST ๋“ฑ)์— ๋”ฐ๋ผ doGet(),doPost()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  6. response๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

์„œ๋ธ”๋ฆฟ(Servlet) ์ƒ๋ช… ์ฃผ๊ธฐ

์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹(๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ๋ฒˆ ์ƒ์„ฑ ํ›„ ์—ฌ๋Ÿฌ ์š”์ฒญ์—์„œ ์žฌ์‚ฌ์šฉ)์œผ๋กœ ๊ด€๋ฆฌ

  1. init() : ์„œ๋ธ”๋ฆฟ์„ ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆด๋•Œ ์‹คํ–‰๋˜์–ด, ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ ์ฒ˜์Œ์— ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰
  2. service() : ์š”์ฒญ/์‘๋‹ต(request/response)์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์š”์ฒญ์ด GET์ธ์ง€ POST์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์—ฌ doGet() ๋˜๋Š” doPost() ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๊ธฐ
  3. destroy() : ์„œ๋ธ”๋ฆฟ ์ข…๋ฃŒ์š”์ฒญ์ด ์žˆ์„๋•Œ destroy() ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰

โ“ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ (Servlet Container)

์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ์„œ๋ธ”๋ฆฟ์€ ์Šค์Šค๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•œ๋ฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ
์˜ˆ์‹œ) Tomcat

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ (Servlet Container) ์—ญํ• 

  • ์›น์„œ๋ฒ„์™€์˜ ํ†ต์‹  ์ง€์›
    -> ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ๊ณผ ์›น์„œ๋ฒ„๊ฐ€ ์†์‰ฝ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์–ด ์†Œ์ผ“์„ ๋งŒ๋“ค๊ณ  Listen, Accept ๋“ฑ์„ API๋กœ ์ œ๊ณตํ•˜์—ฌ ๋ณต์žกํ•œ ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
  • ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ง€์› ๋ฐ ๊ด€๋ฆฌ

๐Ÿ“Œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet)

  • HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ค‘์•™์ง‘์ค‘์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)
  • Dispatcher Servlet๋„ Servlet์˜ ์ผ์ข…
  • ์Šคํ”„๋ง์€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ณ  ์ด๋ฅผ DispatcherServlet์ด ๋‹ด๋‹น

โ‰๏ธ Front Controller
์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด

๐Ÿ“Œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet) ๋™์ž‘ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ˆ˜์‹ 
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์š”์ฒญ(HttpServletRequest)์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•˜๋ฉด, ์ด ์š”์ฒญ์ด DispatcherServlet์œผ๋กœ ์ „๋‹ฌ

  2. HandlerMapping์„ ํ†ตํ•œ Controller ๋งคํ•‘
    DispatcherServlet์€ ์š”์ฒญ URL๊ณผ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ ์ ˆํ•œ Controller(Handler)๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด HandlerMapping์— ์š”์ฒญ์„ ์œ„์ž„

  3. HandlerAdapter ์„ ํƒ
    ์ฐพ์€ Controller๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก, DispatcherServlet์€ ํ•ด๋‹น Controller๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” HandlerAdapter๋ฅผ ๊ฒฐ์ •

  4. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ์š”์ฒญ
    DispatcherServlet์€ ์„ ํƒ๋œ HandlerAdapter์—๊ฒŒ Controller์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋„๋ก ์š”์ฒญ

  5. Controller ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    HandlerAdapter๋Š” Controller์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰Controller๋Š” ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Model ๊ฐ์ฒด์— ๋‹ด๊ณ , ์–ด๋–ค View๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๋…ผ๋ฆฌ์ ์ธ ์ด๋ฆ„์„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜

  • Model: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ
  • View : ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด์—ฌ์ค„ ํ™”๋ฉด(View) ํŒŒ์ผ์˜ ์ด๋ฆ„
  1. ViewResolver๋ฅผ ํ†ตํ•œ View ๊ฒฐ์ •
    DispatcherServlet์€ ๋ฐ˜ํ™˜๋ฐ›์€ View ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ViewResolver์—๊ฒŒ ์‹ค์ œ View ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก ์š”์ฒญ

  2. ์ตœ์ข… View ๊ฐ์ฒด์— Model ์ „๋‹ฌ
    ViewResolver๊ฐ€ ๋ฐ˜ํ™˜ํ•œ View ๊ฐ์ฒด์— Model ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜๋ฉด์„œ, DispatcherServlet์€ ์ตœ์ข… ํ™”๋ฉด ๋ Œ๋”๋ง์„ ์˜๋ขฐ

  3. ๋ Œ๋”๋ง ๋ฐ ์‘๋‹ต ๋ฐ˜ํ™˜
    ์ตœ์ข… View๋Š” ์ „๋‹ฌ๋ฐ›์€ Model ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜

HandlerMapping

  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ HTTP ์š”์ฒญ์˜ URL, HTTP ๋ฉ”์„œ๋“œ(GET, POST ๋“ฑ), ํ—ค๋” ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” Hander(controller)๋ฅผ ์ฐพ๋Š” ์—ญํ• 
  • RequestMappingHandlerMapping : ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜(@RequestMapping) ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌ
  • BeanNameUrlHandlerMapping : ์Šคํ”„๋ง ๋นˆ ์ด๋ฆ„๊ณผ URL์„ ๋งคํ•‘
  • SimpleUrlHandlerMapping : XML ๋˜๋Š” Java ์„ค์ • ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜๋œ URL ํŒจํ„ด๊ณผ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งคํ•‘

HandlerAdapter

  • ์‹ค์ œ๋กœ Handler๋ฅผ ์‹คํ–‰ํ•  Adapter๋ฅผ ์ฐพ์•„์„œ Controller ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• 
  • RequestMappingHandlerAdapter : ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ(@RequestMapping)๋ฅผ ์ฒ˜๋ฆฌ
  • HttpRequestHandlerAdapter : HttpRequestHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌ
  • SimpleControllerHandlerAdapter : ๊ฑฐ ์Šคํƒ€์ผ์˜ ์ปจํŠธ๋กค๋Ÿฌ(Controller ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„)๋ฅผ ์ฒ˜๋ฆฌ
  • SimpleServletHandlerAdapter: ํ‘œ์ค€ ์„œ๋ธ”๋ฆฟ ์ธํ„ฐํŽ˜์ด์Šค(javax.servlet.Servlet)๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ

ViewResolver

  • ์‹คํ–‰ํ•  View๋ฅผ ์ฐพ๋Š” ์—ญํ• 
  • Controller์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ View์˜ ์ด๋ฆ„, ViewResolver๊ฐ€ ์„œ๋ฒ„๋‚ด์˜ ์ ์ ˆํ•œ ๋ทฐ ํŒŒ์ผ ์ฐพ์•„ ์ฒ˜๋ฆฌ
  • @RestController๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ HTTP ์‘๋‹ต ๋ณธ๋ฌธ(Response Body)์— ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉฐ, ๋ฐ˜ํ™˜ ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ. Spring MVC๋Š” ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด HttpMessageConverter๋ฅผ ์‚ฌ์šฉ

๐Ÿ“Œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet) ํด๋ž˜์Šค ๊ตฌ์กฐ

HttpServlet
   โ†“
HttpServletBean
   โ†“
FrameworkServlet
   โ†“
DispatcherServlet
  1. HttpServlet
  • DispatcherServlet์€ Java EE์˜ ๊ธฐ๋ณธ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์ธ HttpServlet์„ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋กœ ์ƒ์†๋ฐ›๋Š”๋‹ค.
  • HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  1. HttpServletBean
  • Spring์—์„œ ์ œ๊ณตํ•˜๋Š” HttpServletBean์€ ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  Spring ํ™˜๊ฒฝ ์„ค์ •์„ ์ง€์›
  1. FrameworkServlet
  • Spring MVC์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธ”๋ฆฟ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, WebApplicationContext์™€ ์—ฐ๋™

  • DispatcherServlet์€ ์ด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ƒ์†๋ฐ›์•„ Spring MVC์— ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€

  1. DispatcherServlet
  • Spring MVC์˜ ํ•ต์‹ฌ ํด๋ž˜์Šค์ด์ž ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋กœ์„œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ์ฒ˜๋ฆฌ

  • ์š”์ฒญ์„ ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ(Controller)๋กœ ์œ„์ž„ํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜

์ฐธ๊ณ  :

profile
๋…ธ๋ ฅ์€ ๋ฐฐ์‹ ํ•˜์ง€ ์•Š์•„ ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€