[๐Ÿ’ก ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„ ์›Œํฌ ์นดํ…Œ๊ณ ๋ฆฌ]

yongcraneยท2025๋…„ 3์›” 19์ผ

๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„ ์›Œํฌ

  • ์˜๋„ : ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ์นดํ…Œ๊ณ ๋ฆฌ๋Š”Spring๊ณผ ๊ฐ™์€ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…, AOP, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๊ฐœ๋…๋“ค์€ ๋ฐฑ์—”๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๋˜ํ•œ Spring Boot์™€ ๊ฐ™์€ ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ง•์„ ์ดํ•ดํ•˜๊ณ , ์‹ค๋ฌด์—์„œ ์ž๋™ ์„ค์ •(Auto Configuration)๊ณผ JPA๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค.

  • ๋‹ต๋ณ€์— ํฌํ•จํ•ด์•ผ ํ•  ํ‚ค์›Œ๋“œ

  1. Spring Boot : Spring์˜ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ œ๊ณต
  2. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) : ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ์„ค๊ณ„ ์›์น™
  3. AOP(Aspect-Oriented Programming) : ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๋ฐฉ์‹
  4. JPA vs Hibernate : Java Persistence API์™€ Hibernate ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ์ฐจ์ด
  5. Bean์˜ ๋ผ์ดํ”„์‚ฌ์ดํด : ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๊ณผ์ •

๋‚ด๊ฐ€ ๊ถ๊ธˆํ•œ ์งˆ๋ฌธ๋“ค

  1. ์ž๋ฐ”์™€ ์ฝ”ํ‹€๋ฆฐ์˜ ์ฐจ์ด?

    ์ž๋ฐ”๋Š” ์˜ค๋ž˜๋œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด, ์ฝ”ํ‹€๋ฆฐ์€ ํ˜„๋Œ€์ ์ธ ์ž๋ฐ” ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „ ๐Ÿš€
    ์ฝ”ํ‹€๋ฆฐ์ด ์ž๋ฐ”๋ณด๋‹ค ์ข‹์€ ์ 
    -๊ฐ„๊ฒฐํ•จ -> var, val ์‚ฌ์šฉ์œผ๋กœ ์ฝ”๋“œ ๊ธธ์ด ๋‹จ์ถ•
    -Null ์•ˆ์ „์„ฑ -> ? ์—ฐ์‚ฐ์ž๋กœ NPE(NullPointExeption)๋ฐฉ์ง€
    -๋žŒ๋‹ค & ํ™•์žฅ ํ•จ์ˆ˜ -> ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›
    -๋ฐ์ดํ„ฐ ํด๋ž˜์Šค -> toString(), equals(), hashcode() ์ž๋™ ์ƒ์„ฑ
    -์ฝ”๋ฃจํ‹ด ์ง€์› -> ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ„ํŽธ
    ์ž๋ฐ”์˜ ์žฅ์ 
    -์„ฑ์ˆ™ํ•œ ์ƒํƒœ๊ณ„
    -์•ˆ์ •์„ฑ
    -๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ -> ์ผ๋ถ€ ๊ฒฝ์šฐ์—์„œ๋Š” ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Œ
    ์ •๋ฆฌํ•˜์ž๋ฉด ์ƒˆ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์ฝ”ํ‹€๋ฆฐ ์ถ”์ฒœ, ๋ ˆ๊ฑฐ์‹œ ์œ ์ง€๋ณด์ˆ˜๋ผ๋ฉด ์ž๋ฐ” ์œ ์ง€!!

โœ… ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. [์ƒ] Java(Kotlin)์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ Kotlin(Java) ์ปจ๋ฒ„ํŒ… ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ์ง€, ๋ฌด์—‡์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•˜๋Š”์ง€ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”.

Java์—์„œ Kotlin์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ธํ…”๋ฆฌ์ œ์ด์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์ž๋™ ์ปจ๋ฒ„ํŒ… ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž๋™ ๋ณ€ํ™˜์ด ํ•ญ์ƒ ์™„๋ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€ํ™˜ ํ›„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€ํ™˜ ์‹œ์—๋Š” ์ฝ”ํ‹€๋ฆฐ์˜ null-safety ๊ฐœ๋…์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฉฐ, ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋˜ Getter์™€ Setter๋Š” ์ฝ”ํ‹€๋ฆฐ์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ž๋ฐ”์˜ ๋žŒ๋‹ค ๋ฐ ๊ณ ์ฐจ ํ•จ์ˆ˜๊ฐ€ ์ฝ”ํ‹€๋ฆฐ์—์„œ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•˜๋ฉฐ, Checked Exception์ด ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ์ ๋„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜๊ณผ ์ฝ”ํ‹€๋ฆฐ์˜ ์ปฌ๋ ‰์…˜์ด ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปฌ๋ ‰์…˜ ๋ณ€ํ™˜์—๋„ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค.
๋ฐ˜๋Œ€๋กœ ์ฝ”ํ‹€๋ฆฐ์—์„œ ์ž๋ฐ”๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ž๋™ ๋ณ€ํ™˜ ์ง€์›์ด ๋ถ€์กฑํ•˜์—ฌ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” ์ˆ˜๋™ ์ˆ˜์ •์ด ๋” ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค. ํŠนํžˆ ์ฝ”ํ‹€๋ฆฐ์˜ ํ™•์žฅ ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์—์„œ ์ •์  ๋ฉ”์„œ๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ํ•ด์‰ฌ์ฝ”๋“œ, ํˆฌ์ŠคํŠธ๋ง, ์ดํ€„์ฆˆ๋ฅผ ์ง์ ‘๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. ๋˜ํ•œ ์ฝ”ํ‹€๋ฆฐ์˜ ์ฝ”๋ฃจํ‹ด ๊ธฐ๋Šฅ์€ ์ž๋ฐ”์—์„œ ์ง์ ‘์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋ฉฐ, ์ฝ”ํ‹€๋ฆฐ์ด ์ œ๊ณตํ•˜๋Š” ๋„-์„ธ์ดํ”„ํŠธ๋ฅผ ์ž๋ฐ”์—์„œ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๋„Œ๋„, ์–ด๋…ธํ…Œ์ด์…˜ ๋„์—์ด๋ธ” ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ”ํ‹€๋ฆฐ์˜ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์˜ ๋žŒ๋‹ค ํ‘œํ˜„์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ๋ณ€ํ™˜ ํ›„ ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

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

  • ์ž๋ฐ”์—์„œ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ธํ…”๋ฆฌ์ œ์ด์˜ ์ž๋ฐ”์—์„œ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์ž๋™ ์ปจ๋ฒ„ํŒ… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™˜ ํ›„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •์ด ์–ด๋А์ •๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜ ์‹œ ์ฝ”ํ‹€๋ฆฐ์˜ ๋„์„ธ์ดํ”„ํ‹ฐ, ํ”„๋กœํผํ‹ฐ ๋ณ€ํ™˜, ์ž๋ฐ”์˜ ๋žŒ๋‹ค์™€ ๊ณ ์ฐจ ํ•จ์ˆ˜ ๋ณ€ํ™˜์„ ํ™•์ธํ•ด์•ผํ•˜๊ณ  ๋˜ํ•œ ์ฝ”ํ‹€๋ฆฐ์€ ์ฒดํฌ ์ž…์…‰์…˜์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜๊ณผ ๋™์ž‘ ์ฐจ์ด๋„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. [์ค‘] Legacy Spring๊ณผ ์ตœ๊ทผ Spring ๋˜๋Š” Spring Boot์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์„ค์ •์˜ ๊ฐ„์†Œํ™”์™€ ๊ฐœ๋ฐœ ์†๋„์— ์žˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์Šคํ”„๋ง์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŽ์€ ์„ค์ •๊ณผ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ค์ •์„ ์ž๋™ํ™”ํ•˜๊ณ , ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ , ์„ค์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์ด ์ž๋™ํ™”๋˜์–ด ์žˆ๊ณ , ๊ธฐ๋ณธ์ ์ธ ํ™˜๊ฒฝ์ด ๋ฏธ๋ฆฌ ์ค€๋น„๋˜์–ด ์žˆ์–ด์„œ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. [์ค‘] Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด(์˜์กด์„ฑ)๋ฅผ ์ง์ง‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์™ธ๋ถ€์—์„œ ์ œ๊ณต๋ฐ›๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์ด์œ :
1.์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ : ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด๋‚˜ ํ™•์žฅ์ด ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.
2.ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ: ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
3.๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€์—์„œ ์ œ๊ณต๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. [์ƒ] AOP(Aspect Oriented Programming)๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ, Spring์—์„œ AOP๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

AOP๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ์‚ฌ(์˜ˆ: ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๋“ฑ)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ AOP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๊ฐ€๋กœ์ง์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ •์˜ํ•˜๊ณ , ํŠน์ • ์ง€์ ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ต์‹ฌ ๋กœ์ง๊ณผ ๋ถ€๊ฐ€ ๋กœ์ง์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AOP๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ AOP๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋กœ๊น…ํ•˜๋Š” ๋ถ€๊ฐ€ ๋กœ์ง์„ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๊ฐ€ ๋กœ์ง์„ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค์— @Aspect ์–ด์…‰ํŠธ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰์ „ํ›„์˜ ์ž‘์—…๊ณผ ์ ์šฉ ๋Œ€์ƒ ๋ฉ”์„œ๋”๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์œผ ์ธก์ •ํ•˜๊ณ  ๋กœ๊ทธ์— ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ถ€๊ฐ€ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” AOP ๊ตฌํ˜„์˜ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  1. [์ƒ] Spring Boot์—์„œ JPA์™€ Hibernate์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

JPA : ORM ๊ธฐ์ˆ ์˜ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค -> ORM์€ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ  , JPA๋Š” ์ด๋ฅผ ํ‘œ์ค€ํ™” ํ•œ๊ฒƒ
JPA๋Š” ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API
ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” JPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค.

JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทœ์ •ํ•˜๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ  Hibernate๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์‹ค์ œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„์ฒด์ด๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” JPA๋ฅผ ์ง€์›ํ•˜๋ฉด์„œ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ hibernate๋ฅผ JPA ๊ตฌํ˜„์ฒด๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ‘œ์ค€ํ™”๋œ JPA ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„ Hibernate์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JPA๋Š” ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ORM ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ •์˜ํ•˜๋Š” API์ž…๋‹ˆ๋‹ค. ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” JPA์˜ ๊ตฌํ˜„์ฒด๋กœ JPA์˜ ๊ทœ์น™์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. [์ค‘] Spring์—์„œ @Transactional ์• ๋„ˆํ…Œ์ด์…˜์˜ ์—ญํ• ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

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

  1. [์ƒ] Spring Security์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

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

  1. [์ƒ] Spring Boot์˜ ์ž๋™ ์„ค์ •(Auto Configuration) ๊ธฐ๋Šฅ์ด ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์ž๋™ ์„ค์ • ๊ธฐ๋Šฅ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ Bean๊ณผ ์„ค์ •์„ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์šฉ๋ฐฉ๋ฒ•์€
1.์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด๋…ธํ…Œ์ด์…˜์— ํฌํ•จ๋œ ์ด๋„ค์ด๋ธ”์˜คํ† ์ปจํ”ผ๊ทธ๋ ˆ์ด์…˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ž๋™ ์„ค์ •์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
2.ํ•„์š” ์‹œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–Œ์ด๋‚˜ ํ”„๋กœํผํ‹ฐ์Šค ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ ์„ค์ •์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” ์ตœ์†Œํ•œ์˜ ์„ค์ •๋งŒ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. [์ค‘] Spring์—์„œ Bean์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์„ค๋ช…ํ•˜๊ณ , ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”.

์Šคํ”„๋ง์—์„œ ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด(๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ)์€ ์ƒ์„ฑ,์ดˆ๊ธฐํ™”,์‚ฌ์šฉ,์†Œ๋ฉธ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”์— ๋”ฐ๋ผ ํŠน์ • ๋‹จ๊ณ„์—์„œ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” XML/Java ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ๋ฐ ์ข…๋ฃŒ ๊ณผ์ •์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Bean์˜ ์ดˆ๊ธฐํ™”/์ •๋ฆฌ ์ž‘์—…์„ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ •์ด๋‚˜ ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋นˆ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๊นŒ์ง€์˜ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋งํ•˜๋Š”๋ฐ ์ƒ์„ฑ, ์˜์กด์„ฑ ์ฃผ์ž…, ์ดˆ๊ธฐํ™”,์‚ฌ์šฉ,์†Œ๋ฉธ๋กœ ์ง„ํ–‰๋œ๋‹ค. ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ์ดˆ๊ธฐํ™” ์ž‘์—…์ด๋‚˜ ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๋ ค๋ฉด @PostConstruct(ํฌ์ŠคํŠธ์ปจ์ŠคํŠธ๋ŸญํŠธ), @PreDestroy(ํ”„๋ฆฌ๋ฐ์ŠคํŠธ๋กœ์ด) ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ InitializingBean(์ด๋‹ˆ์…œ๋ผ์ด์ง•๋นˆ)๊ณผ DisposableBean(๋””์Šคํฌ์ €๋ธ” ๋นˆ) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ผ์ดํ”Œ ์‚ฌ์ดํด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋นˆ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด๋‚˜ ํŒŒ์ผ ๋ฆฌ์†Œ์Šค ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

  1. [์ƒ] Spring์—์„œ REST ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ผ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์ฃผ์š” ์ฐจ์ด์ ์€ ์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์žˆ์Šต๋‹ˆ๋‹ค. REST ์ปจํŠธ๋กค๋Ÿฌ๋Š” API ๋ฐ์ดํ„ฐ ์‘๋‹ต์—, ์ผ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์›น ๋ทฐ ๋ Œ๋”๋ง์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
REST ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฉ”์„œ๋“œ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ JSON ๋˜๋Š” XML ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด HTTP ์‘๋‹ต ๋ณธ๋ฌธ์— ์ง์ ‘ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ RESTful API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฉ”์„œ๋“œ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์€ ๋ทฐ ์ด๋ฆ„์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ํ•ด๋‹น ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ HTML๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ• ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

profile
์งง๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ!

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