[Spring Boot - ๐ŸฑPetClinic๐Ÿถ] 6. ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ถ„์„๐Ÿ”

์‘ค๋ฐยท2023๋…„ 4์›” 14์ผ

[Spring Boot - ๐ŸฑPetClinic๐Ÿถ]

๋ชฉ๋ก ๋ณด๊ธฐ
6/11

๐Ÿ—’ ๊ณ„์ธตํ˜•๊ณผ ๋„๋ฉ”์ธํ˜•

ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๊ณ„์ธตํ˜•๊ณผ ๋„๋ฉ”์ธํ˜•์ด๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ๋ฐฉ์‹์€ ๊ฐ์ž์˜ ์žฅ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ฐ์ž์˜ ์žฅ๋‹จ์ ์„ ํ† ๋Œ€๋กœ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๋„๋ฉ”์ธ ๊ตฌ์„ฑ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์ ˆ๋Œ€์ ์ธ ๊ธฐ์ค€์€ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ผ๋‹จ ์‹œ์Šคํ…œ์˜ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„์„œ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ฌด์˜๋ฏธํ•˜๋‹ค๊ณ  ํŒ๋‹จ์ด ๋œ๋‹ค๋ฉด ํŒจํ‚ค์ง€ ํ•˜๋‚˜์— ๋‹ค ๋ชฐ์•„๋„ฃ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์ด ๋Š˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ปจํŠธ๋กค๋Ÿฌ, DTO, Entity, ์„œ๋น„์Šค ๋“ฑ์˜ ํŒจํ‚ค์ง€๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์ด ๊ณ„์ธตํ˜•์ด๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋”์šฑ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ํŒจํ‚ค์ง€๋ณ„ ํŒŒ์ผ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง„๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ๋„๋ฉ”์ธ๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ์œ ๋ฆฌํ•ด์ง„๋‹ค. ๋„๋ฉ”์ธ๋ณ„๋กœ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ํŒจํ‚ค์ง€ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ทธ๊ณณ์—์„œ ์ž‘์—…ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ์ด ์žˆ๋‹ค. ์ •๋‹ต์€ ์—†๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•  ๋•Œ ๋„๋ฉ”์ธํ˜•์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ—‚ Pet Clinic์˜ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ

๋‚ด๊ฐ€ ์ง€๊ธˆ ๋ถ„์„ํ•˜๊ณ  ์žˆ๋Š” Pet Clinic์€ ๋„๋ฉ”์ธํ˜•์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋‚˜๋ˆ„๊ณ  ์žˆ๋‹ค. ๋ช‡ ๋…„ ์ „์— ์ž‘์„ฑ๋๋˜ Pet Clinic์€ ๊ณ„์ธตํ˜•์ด์—ˆ๋Š”๋ฐ ๋ฆฌํŒจํ‚ค์ง€๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋„๋ฉ”์ธํ˜•์œผ๋กœ ๋ฐ”๋€ ๊ฒƒ ๊ฐ™๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋ดค๋˜ Pet Clinic์€ ๊ณ„์ธตํ˜•์ด์—ˆ๋Š”๋ฐ ์–ด๋–ค ๋ธ”๋กœ๊ทธ์—์„œ ๋„๋ฉ”์ธํ˜•์ด๋ผ๊ณ  ์†Œ๊ฐœํ•ด์„œ ๋‹ค์‹œ ์ฐพ์•„๋ดค๋”๋‹ˆ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์—…๋กœ๋“œ๋œ ์ฝ”๋“œ๋Š” ๋„๋ฉ”์ธํ˜•์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค..

text

์ด๊ฒŒ Pet Clinic์˜ src/main/java ํ•˜์œ„์˜ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์ด๋‹ค. org/springframework/samples/petclinic ํŒจํ‚ค์ง€ ์•„๋ž˜์— ๋„ค ๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋‹ค.

  • model: ๊ฐ ๋„๋ฉ”์ธ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์—”ํ‹ฐํ‹ฐ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ํŒจํ‚ค์ง€
    ์ด ์—”ํ‹ฐํ‹ฐ๋“ค์€ @MappedSuperClass์ด๋‹ค. ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜์ง€ ์•Š๊ณ  @Entity๋“ค์ด extends ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • owner: ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๊ทธ๋“ค์˜ ์ฃผ์ธ, ๋ฐฉ๋ฌธ์ผ๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ํŒจํ‚ค์ง€
    Find Owners ํƒญ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋“ค ๊ด€๋ จ ํŒจํ‚ค์ง€๋‹ค.
  • system: ์บ์‹œ ๊ด€๋ จ๋œ ์„ค์ •์„ ํ•˜๋Š” ํŒŒ์ผ๊ณผ ๋ฉ”์ธ ํ™”๋ฉด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ Runtime Exception์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ํŒจํ‚ค์ง€
    ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค๊ณผ ๊ด€๋ จ ์—†๋Š” ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋‹ค.
  • vet: ์ˆ˜์˜์‚ฌ์™€ ๊ด€๋ จ๋œ ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ํŒจํ‚ค์ง€
    Veterinarians ํƒญ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋“ค ๊ด€๋ จ ํŒจํ‚ค์ง€๋‹ค.

๐Ÿงฉ ๋งˆ๋ฌด๋ฆฌ

์‚ฌ์‹ค ๊ฐ€์žฅ ์ฒ˜์Œ ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒŒ 'ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ?'์˜€๋‹ค. ์ฒ˜์Œ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ ‘ํ–ˆ์„ ๋•Œ๋Š” ๊ณ„์ธตํ˜•์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐฐ์› ์—ˆ๋Š”๋ฐ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๋ณต์žกํ•ด ๋ณด์ผ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์žฅ๋‹จ์ ์„ ์ฐพ์•„๋ณด๋‹ค ๋ณด๋‹ˆ ๊ฒฐ๋ก ์€ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๊ทœ๋ชจ๊ฐ€ ์ •๋ง ์ž‘์ง€ ์•Š์€ ์ด์ƒ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด ๋„๋ฉ”์ธํ˜•์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ด ๋ถ€๋ถ„์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŽ์ด ๊ฒฝํ—˜ํ•˜๋‹ค ๋ณด๋ฉด ๋‚˜๋ฆ„์˜ ๋…ธํ•˜์šฐ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์„๊นŒ?

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋‹ด์œผ๋กœ Pet Clinic ๋ถ„์„ํ•˜๊ธฐ ์ „ ํ˜ผ์ž ์‚ฝ์งˆํ•˜๋‹ค ์•Œ๊ฒŒ ๋œ ๊ฑด๋ฐ Spring Boot์—์„œ๋Š” ๋ฉ”์ธ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ์ƒ์œ„์— ์žˆ์–ด์•ผ @Entity, @Repository ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์—๋Š” ๊ด€๋ จ ์ง€์‹์ด ํ•˜๋‚˜๋„ ์—†๋Š” ์ƒํƒœ์—ฌ์„œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค์„ ๋‚˜๋ˆ„๋“ฏ ๋ฉ”์ธ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ํ•˜์œ„์— ๋ฉ”์ธ ํด๋ž˜์Šค๋ฅผ ์œ„์น˜์‹œ์ผฐ๋Š”๋ฐ ์—”ํ‹ฐํ‹ฐ๋‚˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฝ์ง€ ๋ชปํ–ˆ๋‹ค. ์–ด์ฐŒ์–ด์ฐŒ ์ฐพ๋‹ค๊ฐ€ @EnableJpaRepositories(basePackages = {"๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํŒจํ‚ค์ง€ ๋ช…"})๊ณผ @EntityScan(basePackages = {"์—”ํ‹ฐํ‹ฐ ํŒจํ‚ค์ง€ ๋ช…"})์„ ์ถ”๊ฐ€ํ•ด์„œ ํ•ด๊ฒฐํ•˜๊ธด ํ–ˆ๋Š”๋ฐ Pet Clinic ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ๋ณด๋‹ˆ ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค๊ณผ ๊ฐ™์€ ์œ„์น˜์— ๋ฉ”์ธ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์œผ๋ฉด ๋๋‹ค. ๊ทธ๊ฑธ ๋ชฐ๋ผ์„œ '์™œ ์•ˆ ๋˜๋Š” ๊ฑฐ์ง€..?'๋ฅผ ๋ฐ˜๋ณตํ–ˆ๋‹ค.. ํญํ’ ๊ตฌ๊ธ€๋ง์˜ ์‹œ๊ฐ„๋“ค... ๊ทธ๋Ÿฐ๋ฐ ์•Œ๊ณ  ๋‚˜๋‹ˆ๊นŒ ๋‹น์—ฐํ–ˆ๋‹ค. ๋ฉ”์ธ ํด๋ž˜์Šค์˜ ์ƒ์œ„๋กœ๋Š” ์•ˆ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒŒ ๋‹น์—ฐํ•œ๋ฐ.. ๊ฐ™์€ ์œ„์น˜์—์„œ ํ•˜์œ„๋กœ๋งŒ ์Šค์บ”ํ•˜๋Š” ๊ฒŒ ๋‹น์—ฐํ•œ๋ฐ.... ๋ฐ”๋ณด ๊ฐ™์€ ์ง“์ด์—ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํ•˜๋‚˜ ๋ฐฐ์› ๋‹ค๋Š” ๋ฐ ์˜์˜๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ์ •์‹ ๊ฑด๊ฐ•์— ์ด๋กญ๊ฒ ์ง€. ๊ทธ๋ž˜์„œ ๊ธฐ์ดˆ์ง€์‹์„ ์Œ“์•„์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ๊ธฐ์ดˆ๋ฅผ ์•Œ๋ฉด ์ด๋Ÿฐ ๋ฐ”๋ณด ๊ฐ™์€ ์‹ค์ˆ˜๋Š” ํ•˜์ง€ ์•Š๊ฒ ์ง€...

[์ฐธ๊ณ ]

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ด€๋ จ ์„ค๋ช… -
https://www.inflearn.com/questions/16046/
https://cheese10yun.github.io/spring-guide-directory/

profile
๊ฐœ๋ฐœ์ž์ง€๋ง์ƒ

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