๐Ÿƒstatic & templates ๋‚ด์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…

dev_itzel_02โœจยท2025๋…„ 4์›” 8์ผ

๐ŸƒJavaSpring

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

โœ”๏ธ์ƒํ™ฉ

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

โœ”๏ธ์›์ธ

๋‘ ๊ฐ€์ง€ ์›์ธ์„ ์ƒ๊ฐํ–ˆ๋‹ค.
1. ์‚ญ์ œ ๋ฒ„ํŠผ์„ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ html์—์„œ์˜ id๊ฐ’๊ณผ js์—์„œ์˜ id๊ฐ’์˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ
2. js ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ช… ๋ฌธ์ œ

๊ฒฐ๋ก ์€ ๊ฒฝ๋กœ ๋ฌธ์ œ์˜€๋‹ค.

resources >> static >> article.js ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์— js ํŒŒ์ผ์ด ์กด์žฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, html ํŒŒ์ผ์—์„œ js ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ /static/article.js๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ SpringBoot๋Š” static, public, resources, META-INF/resources ํด๋”๋ฅผ ์ž๋™์œผ๋กœ ์ •์  ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋กœ ๋งคํ•‘ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด src/main/resources/static/article.js ๊ฒฝ๋กœ๋ช…์ด ์žˆ๋‹ค๋ฉด
์›น์—์„œ ์ ‘๊ทผํ•  ๋•Œ๋Š” ๐Ÿ‘‰๐Ÿผ http://localhost:8080/article.js ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

classpath:/static/
classpath:/public/
classpath:/resources/
classpath:/META-INF/resources/

SpringBoot์˜ ์ •์  ์ž์› ๋งคํ•‘ ๊ฒฝ๋กœ๋Š” ์œ„์™€ ๊ฐ™๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘๊ทผํ•  ๋•Œ /static/article.js๊ฐ€ ์•„๋‹ˆ๋ผ /article.js๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด Spring์ด ์•Œ์•„์„œ static ํด๋” ๋‚ด๋ถ€๋ฅผ ๋’ค์ ธ ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

โœ”๏ธ๊ฒฐ๋ก 

์ฆ‰, ํด๋”๋ช…์ธ static์€ ๊ฒฝ๋กœ์—์„œ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด SpringBoot์˜ ๊ทœ์น™์ž„ โ—โ—

โœ”๏ธ๊ถ๊ธˆ์ฆ

๊ทธ๋Ÿฌ๋ฉด html ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋Š” templates ํด๋”๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ๊นŒ?
=> ์•„๋‹ˆ๋‹ค.

์›นํŽ˜์ด์ง€์— http://localhost:8080/templates/article.html ์„ ์š”์ฒญํ–ˆ์„ ๋•Œ 404 ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.

templates ํด๋”๋Š” static ํด๋”์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

templates ํด๋”๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์  ๋ฆฌ์†Œ์Šค์ด๋‹ค.
๋ณดํ†ต Thymeleaf, Mustache, Freemarker ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

๋”ฐ๋ผ์„œ templates ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์€ ์ง์ ‘ URL๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , Controller์—์„œ ํ•ด๋‹น ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฆฌํ„ดํ•ด์•ผ ๋ทฐ๋กœ ๋ Œ๋”๋ง๋œ๋‹ค.

@Controller
public class BlogController {
    @GetMapping("/blog")
    public String getBlogPage(Model model) {
        model.addAttribute("title", "๋ธ”๋กœ๊ทธ ์ œ๋ชฉ");
        return "blog";  // โ†’ templates/blog.html ๋ Œ๋”๋ง
    }
}
profile
๐Ÿœ๐Ÿ‘ฃsteadiness๐Ÿœ๐Ÿ‘ฃ

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