๐Ÿ’ป ์ฝ”๋”ฉ ์ผ๊ธฐ : [Spring] '@Controller, @RequestMapping' ํŽธ

ybkยท2024๋…„ 4์›” 7์ผ

spring

๋ชฉ๋ก ๋ณด๊ธฐ
4/55
post-thumbnail

๐Ÿ”” '@Controller, @RequestMapping'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!


๐Ÿ’Ÿ @Controller

@Controller: Spring MVC์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์„ ์ ์ ˆํ•œ ์„œ๋น„์Šค๋‚˜ DAO(Data Access Object)๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

@Controller
public class Controller01 {
    // ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋“ค
}

๐Ÿ’Ÿ @RequestMapping

@RequestMapping: ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ์š”์ฒญ URL์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํŠน์ •ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

package com.study.controller;

import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.WebRequest;

import java.io.IOException;
import java.io.PrintWriter;


@Controller
public class Controller01 {

    @RequestMapping("/main1")
    public void method1(WebRequest request, HttpServletResponse response) throws IOException {
        //1.์š”์ฒญ ๋ถ„์„/๊ฐ€๊ณต
        String name = request.getParameter("name");

        //2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰
        String data = name + "๋‹˜ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.";

        String result = STR."""
                <html>
                    <body>
                        <h1>\{data}</h1>
                    </body>
                </html>
                """;

        //3. ๊ฒฐ๊ณผ ์‘๋‹ต
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(result);
    }

    // ์š”์ฒญ ๋ฉ”์„ธ์ง€ ์ฒซ ์ค„์ด ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉด ์‹คํ–‰
    // GET /main1/sub1 HTTP/1.1
    @RequestMapping(value = "/main1/sub1")
    public void method2() {
        System.out.println("Controller01.method2");
    }


    // GET/main1/sub2 HTTP/1.1
    @RequestMapping(value = "/main1/sub2")
    public void method3() {
        System.out.println("Controller01.method3");
    }


}
  • WebRequest request: ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด๋กœ, ์š”์ฒญ์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • HttpServletResponse response: ์„œ๋ฒ„์˜ HTTP ์‘๋‹ต์„ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด๋กœ, ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

์œ„์˜ ์˜ˆ์‹œ์—์„œ /main1 URL๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด method1() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ , ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์š”์ฒญ์—์„œ ๋ฐ›์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”์‹œ์ง€๋ฅผ HTML ํ˜•์‹์œผ๋กœ ํฌ๋งทํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, /main1/sub1 ๋˜๋Š” /main1/sub2 URL๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๊ฐ๊ฐ method2()์™€ method3() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, ๊ฐ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ„๋‹จํ•œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ Spring MVC๋Š” ์š”์ฒญ URL์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Spring MVC์—์„œ๋Š” @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์„ ์ข€ ๋” ์„ธ๋ถ„ํ™”ํ•˜์—ฌ HTTP ๋ฉ”์„œ๋“œ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

package com.study.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("main5")
public class Controller5 {

    @RequestMapping("sub1")
    // /main5/sub1?city=seoul
    public void method1(@RequestParam("city") String param) {
        System.out.println(param + " ๊ฒ€์ƒ‰ ๋กœ์ง ์‹คํ–‰");
    }

    // /main5/sub2?address=seoul
    // /main5/sub2?address=gangnam
    // /main5/sub2?address=hongdae
    @RequestMapping("sub2")
    public void method2(@RequestParam("address") String param) {
        System.out.println(param + "(์œผ)๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ ํƒ์ƒ‰");
    }

    // /main5/sub3?age=13
    // /main5/sub3?age=20
    // /main5/sub3?age=40
    @RequestMapping("sub3")
    public void method3(@RequestParam("age") Integer param) {
        if (param < 18) {
            System.out.println("์ฒญ์†Œ๋…„ ๊ด€๋ จ ์ •๋ณด ์ถœ๋ ฅ");
        } else if (param < 35) {
            System.out.println("์ฒญ๋…„ ๊ด€๋ จ ์ •๋ณด ์ถœ๋ ฅ");
        } else if (param < 65) {
            System.out.println("์ค‘์žฅ๋…„ ๊ด€๋ จ ์ •๋ณด ์ถœ๋ ฅ");
        } else {
            System.out.println("๋…ธ์ธ ๊ด€๋ จ ์ •๋ณด ์ถœ๋ ฅ");
        }
    }

    // /main5/sub4?height=145.1
    @RequestMapping("sub4")
    public void method4(@RequestParam("height") double param) {
        if (param < 145.0) {
            System.out.println("์ž‘์€ ํ‚ค");
        } else if (param < 190.0) {
            System.out.println("์ค‘๊ฐ„ ํ‚ค");
        } else {
            System.out.println("ํฐ ํ‚ค");
        }
    }
}
  • @RequestParam: ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์ด ๋™์ผํ•ด์•ผ ํ•˜์ง€๋งŒ, @RequestParam์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊ณผ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ ๊ฐ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์–‘ํ•œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. @RequestParam ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /main5/sub1?city=seoul ์š”์ฒญ์€ city๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ method1 ๋ฉ”์„œ๋“œ์˜ param ํŒŒ๋ผ๋ฏธํ„ฐ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ Spring MVC๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ , ํ•ด๋‹น ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
๊ฐœ๋ฐœ์ž ์ค€๋น„์ƒ~

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