๐Ÿ–ฅ๏ธ ์›น์„œ๋ฒ„์™€ ์›นํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ (Controller)

EthAnalogยท2025๋…„ 8์›” 20์ผ

Spring Boot

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

์˜ค๋Š˜ ๋ฐฐ์šด ํ•ต์‹ฌ 3์ค„ ์š”์•ฝ

  • @Controller + @GetMapping์œผ๋กœ ์š”์ฒญ URL๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ/ํŽ˜์ด์ง€ ์ „์†ก ๊ฐ€๋Šฅ
  • @ResponseBody๊ฐ€ ์žˆ์œผ๋ฉด โ†’ ๋ฌธ์ž์—ด/๋ฐ์ดํ„ฐ ๊ทธ๋Œ€๋กœ ์ „์†ก, ์—†์œผ๋ฉด โ†’ html ํŒŒ์ผ ๋ฐ˜ํ™˜
  • ์ •์  ํŒŒ์ผ(html/css/js)์€ resources/static/์— ๋‘๋ฉด ์ž๋™ ์ œ๊ณต๋จ

โœ… ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๊ฐ€?

  • ์œ ์ €๊ฐ€ /, /about, /date ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ธฐ๋Šฅ
  • ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด, HTML ์ฝ”๋“œ, ํ˜น์€ ์ •์  HTML ํŒŒ์ผ์„ ์ „์†ก

๐Ÿ‘‰ ์™œ ์ด๊ฑธ ๋ฐฐ์›Œ์•ผ ํ•˜์ง€?

  • ์›น์„œ๋ฒ„์˜ ํ•ต์‹ฌ์€ โ€œ์š”์ฒญ โ†’ ์‘๋‹ตโ€ ๊ตฌ์กฐ
  • Spring Boot๋Š” @Controller์™€ @GetMapping๋งŒ ์จ๋„ URL ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅ
  • ์ด ํŒจํ„ด์ด CRUD, ๋กœ๊ทธ์ธ, ๊ฒŒ์‹œํŒ ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๊ธฐ๋ณธ ๋ผˆ๋Œ€๊ฐ€ ๋จ

๐Ÿ“š ๊ฐœ๋… ์ •๋ฆฌ

๊ฐœ๋…์„ค๋ช…
@Controller์ด ํด๋ž˜์Šค๊ฐ€ ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ์„ ์–ธ
@GetMapping("/๊ฒฝ๋กœ")ํ•ด๋‹น URL ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰
@ResponseBodyํ•จ์ˆ˜์˜ return ๊ฐ’์„ ๋ฐ์ดํ„ฐ๋กœ ์ง์ ‘ ์‘๋‹ต
static ํด๋”resources/static์— ์žˆ๋Š” html/css/js๋Š” ์ž๋™ ์„œ๋น™
View ๋ฐ˜ํ™˜@ResponseBody ์ œ๊ฑฐ + return์— html ํŒŒ์ผ๋ช… ์“ฐ๋ฉด โ†’ ํ•ด๋‹น ํŒŒ์ผ ๋ฐ˜ํ™˜

โš™๏ธ ๊ตฌํ˜„ ํ๋ฆ„ ๋ฐ ์ฝ”๋“œ

๐Ÿ“„ BasicController.java

package com.apple.shop;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BasicController {

    // ๋ฉ”์ธ ํŽ˜์ด์ง€ - ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
    @GetMapping("/")
    @ResponseBody
    String hello() {
        return "์•ˆ๋…•ํ•˜์‡ผ";
    }

    // ์†Œ๊ฐœ ํŽ˜์ด์ง€ - ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
    @GetMapping("/about")
    @ResponseBody
    String about() {
        return "ํ”ผ์‹ฑ์‚ฌ์ดํŠธ์—์š”";
    }

    // ๋‚ ์งœ ํŽ˜์ด์ง€ - ํ˜„์žฌ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜
    @GetMapping("/date")
    @ResponseBody
    String date() {
        return java.time.ZonedDateTime.now().toString();
    }
}

๐Ÿ“„ resources/static/index.html

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>๋ฉ”์ธํŽ˜์ด์ง€</title>
</head>
<body>
    <h4>๋ฉ”์ธํŽ˜์ด์ง€์ธ๋ฐ์š”</h4>
</body>
</html>

๐Ÿ“„ BasicController.java (html ๋ฐ˜ํ™˜)

@Controller
public class BasicController {

    @GetMapping("/")
    String hello() {
        return "index.html"; // static/index.html ๋ฐ˜ํ™˜
    }
}

๐Ÿ“Œ ์‚ฌ์šฉ๋œ ๊ฐœ๋… ์š”์•ฝ

ํ‚ค์›Œ๋“œํ•œ ์ค„ ์š”์•ฝ
@Controller์›น ์š”์ฒญ ๋‹ด๋‹น ํด๋ž˜์Šค ์„ ์–ธ
@GetMappingURL ๋ผ์šฐํŒ… (GET ์š”์ฒญ ์ฒ˜๋ฆฌ)
@ResponseBodyreturn์„ ๋ฐ์ดํ„ฐ ๊ทธ๋Œ€๋กœ ์ „์†ก
static์ •์  ๋ฆฌ์†Œ์Šค(html/css/js) ๋ณด๊ด€ ๊ฒฝ๋กœ
ZonedDateTime.now()ํ˜„์žฌ ๋‚ ์งœ/์‹œ๊ฐ„ ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿ’ก ์ด๋Ÿฐ ๊ณณ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”

  • ํ™ˆํŽ˜์ด์ง€ ๋ฉ”์ธํ™”๋ฉด, ์†Œ๊ฐœํŽ˜์ด์ง€, ๋งˆ์ดํŽ˜์ด์ง€ ๋“ฑ ๊ฒฝ๋กœ๋ณ„ ์‘๋‹ต ๋งŒ๋“ค๊ธฐ
  • JSON ๋ฐ์ดํ„ฐ(API) ์‘๋‹ตํ•˜๊ธฐ
  • ์ •์  ํŽ˜์ด์ง€(๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ํผ ๋“ฑ) ๋ฐฐ์น˜

โœ๏ธ ๊ฐœ์ธ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ 

  • ์›น์„œ๋ฒ„๋Š” ๊ฒฐ๊ตญ โ€œ์š”์ฒญ โ†’ ์‘๋‹ตโ€์„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ๋ฟ์ด๋ผ ๋‹จ์ˆœํ•˜๋‹ค.
  • @ResponseBody ์œ ๋ฌด๋กœ โ€œ๋ฐ์ดํ„ฐ ์ „์†ก vs ํŒŒ์ผ ์ „์†กโ€์ด ๊ฐˆ๋ฆฐ๋‹ค.
  • /date ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋„ ๋ฐ”๋กœ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•ด์„œ, ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ํ™•์žฅํ•˜๋Š” ํ๋ฆ„์ด ๋ณด์˜€๋‹ค.
  • ์•ž์œผ๋กœ CRUD๋„ ์ด๋Ÿฐ ๋ผ์šฐํŒ… ํŒจํ„ด์„ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

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