๐Ÿ“š Study/Spring

[Spring Boot] ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์•Œ์•„๋ณด๊ธฐ

kkh1902 2022. 7. 15. 16:59
728x90
๋ฐ˜์‘ํ˜•

spring boot๋กœ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค๋‹ค๊ฐ€ ๊ตฌํ˜„ ์œ„์ฃผ๋กœ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์™œ, ์–ด๋–ป๊ฒŒ ๋Œ์•„ ๊ฐ€๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

1. src/main/java ๋””๋ ‰ํ† ๋ฆฌ (์ œ์ผ ์ค‘์š”)

ํ•œ ๋ธ”๋กœ๊ทธ์—์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์ค€ ๊ฒƒ ๊ฐ™์•„ ์ฐธ๊ณ ์šฉ์œผ๋กœ ๋จผ์ € ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ : @Controller (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด, ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•จ)
๋กœ์ง ์ฒ˜๋ฆฌ : @Service (์„œ๋น„์Šค ๋ ˆ์ด์–ด, ๋‚ด๋ถ€์—์„œ ์ž๋ฐ” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ)
์™ธ๋ถ€I/O ์ฒ˜๋ฆฌ : @Repository (ํผ์‹œ์Šคํ„ด์Šค ๋ ˆ์ด์–ด, DB๋‚˜ ํŒŒ์ผ๊ฐ™์€ ์™ธ๋ถ€ I/O ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ)


Controller

์œ„ ์‚ฌ์ง„์€ ์›น ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ์†Œํ†ตํ•  ๋•Œ ์–ด๋–ค ๋กœ์ง์„ ๊ฑฐ์ณ์„œ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ์ด ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ„์ชฝ์— ๋ณด๋ฉด front-end์—์„œ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์š”์ฒญ์ด ๊ฐ€์žฅ ๋จผ์ € ์„œ๋ฒ„ ์ธก๊ณผ ๋งž๋‹ฟ๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ Controller์ž…๋‹ˆ๋‹ค.
์„œ๋ฒ„์—์„œ ๊ธฐ๋Šฅ๋ณ„ URL์ด๋ผ๋Š” API๋ฅผ ๊ฐœ์„คํ•ด ๋†“์•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ API์— ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด์ฃ .
์ฆ‰ Controller๋Š” ์ด๋Ÿฐ ์ฐฝ๊ตฌ ์—ญํ• ์„ ํ•˜๋Š” API๋“ค์„ ๋ชจ์•„๋†“์€ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
๋‹น์—ฐํžˆ ์ •๋ณด๋ฅผ ํ”„๋ก ํŠธ ์ชฝ์œผ๋กœ ๋‚ด๋ ค์ค„ ๋•Œ๋„ ์ด ์ปจํŠธ๋กค๋Ÿฌ์˜ API๋ฅผ ํ†ตํ•ด์„œ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.

 

Repository

Repository๋Š” ์ง์—ญํ•ด๋„ '์ €์žฅ์†Œ'๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊นŠ์€ ์—ฐ๊ด€์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งž์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋‹จ์— ์ง์ ‘ ๋งค์นญ๋˜๋Š” Entity๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ์ด Entity๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ์ด ๋˜๋ฉด, ๋ฐ›์•„์˜จ ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(ex. MySQL, mariaDB)์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์€ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL)๊ณผ ์ด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” SQL๋ฌธ๊ณผ ๋งค์นญ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ Domain(Entity)๊ฐ€ table์— , Repository๊ฐ€ SQL์— ๋งค์นญ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ Repository์—์„œ ์ฃผ์–ด์ง„ jpa ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ์กฐํšŒ๋กœ๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฐœ๋…๋“ค์ด ์žˆ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋”์šฑ ๊ณ ๋„ํ™”๋œ ์ •๋ณด ๊ฐ€๊ณต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ์ด ๋ฐ‘์—์„œ ์„ค๋ช…ํ•  Service์ž…๋‹ˆ๋‹ค.

Service

Service๋Š” ๋งค์šฐ ์• ๋งคํ•˜๋ฉด์„œ๋„ ํ™•์‹คํ•œ ๋…€์„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Service๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Repository์—์„œ ์–ป์–ด์˜จ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋ฐ” ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€๊ณต ํ›„ ๋‹ค์‹œ Controller์—๊ฒŒ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ๋ณด๋ฉด Controller๋Š” ํด๋ผ์ด์–ธํŠธ์—, Repository๋Š” ๋ฐ์ดํ„ฐ์— ๋งž๋‹ฟ์•„์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ถ€๋ถ„์œผ๋กœ ์—ฌ๊ธธ ์ˆ˜ ์žˆ์œผ๋‚˜ ์‹ค์งˆ์ ์œผ๋กœ ์ค‘์š”ํ•œ ์ž‘๋™์ด ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ œ๊ฐ€ ์ฃผ๋ชฉํ–ˆ๋˜ ๊ฒƒ์€ '๊ทธ๋Ÿผ repository์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฐ”๋กœ ๊ฐ€๊ณตํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌํ•œํ…Œ ์ฃผ๋ฉด ๋˜๋Š”๋ฐ ๊ตณ์ด service๊ฐ€ ํ•„์š”ํ•œ๊ฐ€'์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ฐ™์€ ๊ถ๊ธˆ์ฆ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ๋งŽ์•„๋ณด์˜€๊ณ , ์ •๋ณด๋ฅผ ์กฐ๊ธˆ๋งŒ ์ฐพ์•„๋ด๋„ ์—ฌ๋Ÿฌ ์ •๋ณด๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.
(์ง€๊ธˆ๋ถ€ํ„ฐ ์–˜๊ธฐํ•˜๋Š” ๋ถ€๋ถ„์€ service์™€ ์ง์ ‘์ ์ธ ์—ฐ๊ด€์€ ์—†๋‹ค๊ณ  ๋Š๋‚„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)
๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฆ‰ controller ์ชฝ์—์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ์ •๋ณด๋ฅผ ์–ป๊ณ  ๊ฐ€๊ณตํ•ด์„œ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ณด๋ฅผ ์ง์ ‘ CRUDํ•˜๊ณ  ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์—์„œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ์›๋ณธ์˜ ์ •๋ณด๊ฐ€ ์†์ƒ๋  ์šฐ๋ ค๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ณด ๋ณ€๋™์˜ ์œ„ํ—˜์ด ํฐ ๋กœ์ง์€ Service์—์„œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ด๋•Œ๋„ ์›๋ณธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ถ”์ถœํ•œ ์ •๋ณด์˜ ๋ณต์‚ฌ๋ณธ์ธ DTO๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋กœ์ง์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


DTO๋ž€?

https://kkh1902.tistory.com/155?category=977211


2. SpringboardApplcation ํด๋ž˜์Šค

DemoApplication ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด, main ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

main ๋ฉ”์†Œ๋“œ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ด์ค๋‹ˆ๋‹ค.

@SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์€ main ํด๋ž˜์Šค์— ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๊ณ ,

ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 


3. src/main/resources ๋””๋ ‰ํ† ๋ฆฌ

templates : 

๊ธฐ์กด์˜ ์Šคํ”„๋ง์€ HTML ๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” JSP์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ์˜ ์œ„์น˜๋„ ์›น ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” src/main/webapp ์•ˆ์— ์กด์žฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ war ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง€ํ™” ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ด์œ ๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” src/main/resources ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ ํ™”๋ฉด๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ํƒ€์ž„๋ฆฌํ”„(Thymeleaf) ํ…œํ”Œ๋ฆฟ ์—”์ง„์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋Š”๋ฐ, ํƒ€์ž„๋ฆฌํ”„๋Š” JSP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ HTML ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ

์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

์ฆ‰, ํƒ€์ž„๋ฆฌํ”„(Thymeleaf)์˜ ํŒŒ์ผ๋“ค(HTMLํŒŒ์ผ์ด ๋™์ ์ผ ๋•Œ, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ)

templates ํด๋”์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

static : 

์ •์  ์ปจํ…์ธ ๋Š” ์„œ๋ฒ„์—์„œ ๋ญ ํ•˜๋Š”๊ฑฐ ์—†์ด ํŒŒ์ผ์„ ์›น๋ธŒ๋ผ์šฐ์ €์— ๊ทธ๋Œ€๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๊ฒƒ์ด๊ณ ,

ํ•ด๋‹น ํด๋”์—๋Š” css, fonts, images, plugin, scripts ๋“ฑ์˜ ์ •์  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ •์  ์ปจํ…์ธ ๋ฅผ /static์—์„œ ์ฐพ์•„์„œ ์ œ๊ณต์„ ํ•ฉ๋‹ˆ๋‹ค.

 

application.properties :

ํ•ด๋‹น ํŒŒ์ผ์€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ ๋กœ๋”ฉ๋˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ†ฐ์บฃ(Tomcat)๊ณผ ๊ฐ™์€ WAS(ํฌํŠธ ๋ฒˆํ˜ธ, ์ฝ˜ํ…์ŠคํŠธ ํŒจ์Šค ๋“ฑ)์˜ ์„ค์ •์ด๋‚˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ •๋ณด ๋“ฑ ๊ฐ๊ฐ์œผ๋กœ

๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” XML ๋˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์„ค์ •์„ ํ•ด๋‹น ํŒŒ์ผ์— Key - Value ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 


4. src/test/java ๋””๋ ‰ํ† ๋ฆฌ

ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” DemoApplicationTests ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ,

ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ์•Œ๋งž์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ์Šคํ”„๋ง๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


build.gradle

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ Type์„ ๊ทธ๋ž˜๋“ค(Gradle)๋กœ ์„ ํƒ

๋ฉ”์ด๋ธ(Maven)์€ pom.xml

๋ฉ”์ด๋ธ(Maven)๊ณผ ๊ทธ๋ž˜๋“ค(Gradle)์˜ ๊ฐœ๋… ๋ฐ ๋น„๊ต

 

 


MVC ํŒจํ„ด

728x90
๋ฐ˜์‘ํ˜•