Skip to content

Latest commit

ย 

History

History
218 lines (156 loc) ยท 14.6 KB

File metadata and controls

218 lines (156 loc) ยท 14.6 KB
  1. JPA๋Š” ๋ฌด์—‡์ธ๊ฐ€?

JPA๋Š” ORM ๊ธฐ๋ฐ˜์˜ ์ž๋ฐ” API์ž…๋‹ˆ๋‹ค JPA๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…๋ณด๋‹จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ์ž‘์—…์— ๋”์šฑ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋•๊ณ  DB ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

โš™๏ธ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋„์›€์„ ์ฃผ๋Š”๊ฐ€ ?
์—”ํ‹ฐํ‹ฐ ๋งคํ•‘์ด๋‚˜ JPQL, ์บ์‹ฑ ๋“ฑ์— ๋„์›€์„ ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  1. Spring IoC(Inversion of Control)์™€ DI(Dependency Injection)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ์ด๋“ค์ด ์™œ ์ค‘์š”ํ•˜๋ฉฐ ์–ด๋–ค ์žฅ์ ์„ ์ œ๊ณตํ•˜๋‚˜์š”? โญ๏ธ ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? โญ๏ธ

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

Ioc๋ž€ ์ œ์–ด์˜ ์—ญ์ „์„ ๋œปํ•˜๋Š”๋ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ์›์น™์ž…๋‹ˆ๋‹ค.

DI๋ž€ Ioc๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ์‹ค์ œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ํ•„์š”๋กค ํ•˜๋Š” ์˜์กด์„ฑ์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

DI๋Š” ์ •์ , ๋™์  ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”๋ฐ ์ •์ ์€ import๋งŒ ๋ณด๊ณ  ํด๋ž˜์Šค์˜ ๊ด€๊ณ„๋ฅผ ํŒ๋‹จ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋™์ ์€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์˜์กด ๊ด€๊ณ„๋ฅผ ์•Œ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Ioc๊ฐ€ ๋” ๋„“์€ ๊ฐœ๋…์ด๊ณ  DI๋Š” ๋” ์„ธ๋ถ€์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

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

  1. Spring Bean์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, Bean์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. Bean์˜ ์Šค์ฝ”ํ”„ ์ข…๋ฅ˜์™€ ๊ฐ๊ฐ์˜ ํŠน์ง•๋„ ์–ธ๊ธ‰ํ•ด์ฃผ์„ธ์š”. ์Šคํ”„๋ง ํŠน์ง•์— IoC ์ œ์–ด์˜ ์—ญ์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. Bean ์ด์ „์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ new ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค IoC๊ฐ€ ์ ์šฉ๋˜๊ณ  ์ด๋Ÿฐ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์ž์˜ ์ œ์–ด๊ถŒ์„ ์Šคํ”„๋ง์—๊ฒŒ ๋„˜๊ฒจ์„œ ์‚ฌ์šฉ์ž๋Š” ์ง์ ‘ new ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ์Šคํ”„๋ง์— ์˜ํ•ด ๊ด€๋ฆฌ ๋ฐ›๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ Bean์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ > ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ > ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… > ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ > ์‚ฌ์šฉ > ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ > ์Šคํ”„๋ง ์ข…๋ฃŒ ์œผ๋กœ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค์ฝ”ํ”„ ์ข…๋ฅ˜์™€ ํŠน์ง•์œผ๋ก  Singleton ๊ธฐ๋ณธ์Šค์ฝ”ํ”„์ด๋ฉฐ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑํ•œ๋‹ค์ด๋ฉฐ ๋ชจ๋“  ์š”์ฒญ์ด ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

prototype
์š”์ฒญํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋…๋ฆฝ์ ์ธ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

request HTTP ์š”์ฒญ๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค

session HTTP ์„ธ์…˜๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

application servletContext ๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

websocket ์›น์†Œ์ผ“ ์„ธ์…˜๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. Spring AOP(Aspect-Oriented Programming)๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? AOP์˜ ์ฃผ์š” ๊ฐœ๋…(Aspect, Advice, Pointcut, Join Point)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด์ฃผ์„ธ์š”.

AOP๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋‰˜์–ด ๋ณด๊ณ  ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ๋ชจ๋“ˆํ™”ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

AOP ์ฃผ์š” ๊ฐœ๋…์€ Aspect ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๊ฑธ์ณ ์žˆ๋Š” ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™” ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค Advice ์กฐ์ธํฌ์ดํŠธ์—์„œ Aspect๊ฐ€ ์ทจํ•  ๋™์ž‘์ž…๋‹ˆ๋‹ค Pointcut ์‹ค์ œ๋กœ aspect๋ฅผ ์ ์šฉํ•  ์กฐ์ธํฌ์ธํŠธ๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค. Join Point ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ aspect ๋ฅผ ์ ์šฉํ•˜๋Š” ์ง€์ ์ž…๋‹ˆ๋‹ค.

AOP๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๋ฐ ์ธ์ฆ์ด ์žˆ๋Š”๋ฐ ๋กœ๊น…์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ผ๊ด€๋œ ๋กœ๊น…์„ ์ ์šฉํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์€ @Transaction ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ฐ„๋‹จํžˆ ํ™œ์šฉํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘, ์ปค๋ฐ‹, ๋กค๋ฐฑํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ๋•Œ ๋“ฑ์— ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ์€ Spring Security ์—์„œ AOP ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. Spring MVC ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. DispatcherServlet์˜ ์—ญํ• ๊ณผ ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

MVC ์•„ํ‚คํ…์ณ๋Š” Model View Controller๋กœ Model์€ DB์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค View๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๊ฒฐ๊ณผํ™”๋ฉด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ์ด๊ณ  Controller๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์–ด๋–ค ๋กœ์ง์„ ์‹คํ–‰์‹œํ‚ฌ ๊ฒƒ์ธ์ง€ ์ œ์–ดํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

DispatcherServlet์€ front Controller๋กœ๋„ ๋ถˆ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. '/' ๊ฒฝ๋กœ์— ๋งคํ•‘ํ•˜์—ฌ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋งก๊ณ ์žˆ๋Š”๋ฐ Mapping ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•ด ๋งคํ•‘ํ•ด๋†“์€ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

DispatcherServlet๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›๊ณ  (์ค‘์•™ ์ œ์–ด์‹ค) ํ•ธ๋“ค๋Ÿฌ๋งคํ•‘์ด ์•Œ๋งž์€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค ๊ทธ๋ฆฌ๊ณ  ํ•ธ๋“œ๋งคํ•‘์„ ์‹คํ–‰ํ•  ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ธ๋กœ์„œ DispatcherServlet ๋ฐ˜ํ™˜ ๋ทฐ๋ฆฌ์กธ๋ฒ„๋Š” ์•Œ๋งž์€ JSP ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ทฐ๋Š” JSP ํŒŒ์ผ์„ ๋ชจ๋ธ์˜ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

  1. Spring์—์„œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋‚˜์š”? ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ํŠธ๋žœ์žญ์…˜์˜ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ํŠธ๋žœ์žญ์…˜, ํŠธ๋žœ์žญ์…˜ ์†์„ฑ ์„ค์ •, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ์„ค์ • ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

  1. Spring Security์˜ ์ฃผ์š” ํŠน์ง•๊ณผ ์ธ์ฆ(Authentication) ๋ฐ ์ธ๊ฐ€(Authorization) ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Spring security์˜ ์ฃผ์š” ํŠน์ง•์œผ๋กœ๋Š” ํฌ๊ด„์ ์ธ ๋ณด์•ˆ ์†”๋ฃจ์…˜, ์œ ์—ฐํ•œ ์„ค์ •, ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹์„ ์ง€์›ํ•˜๊ณ  ์„ธ์…˜๊ด€๋ฆฌ์™€ CSRF, XSS๋“ฑ ์›น ๋ณด์•ˆ ์œ„ํ˜‘ ๋Œ€์‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€์— ํ™•์ธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด (credentials) AuthenticationManager๊ฐ€ ์ธ์ฆ ๊ฒ€์ฆ ํ•œ ๋’ค ์„ฑ๊ณต ์‹œ ์ธ์ฆ ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ SecurityContext์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ธ๊ฐ€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ธ๋ฐ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • URL๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ, AccessDecisionManager๊ฐ€ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ๊ณผ ๋ฆฌ์†Œ์Šค์— ํ•„์š”ํ•œ ๊ถŒํ•œ ๋น„๊ตํ•˜์—ฌ ์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

JWT์™€ spring security์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ 
์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ
์ƒํƒœ ๋น„์ €์žฅ ์ธ์ฆ, ๋ณด์•ˆ ๊ฐ•ํ™”, ์„ฑ๋Šฅ ์ตœ์ ํ™” , ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ธ์ฆ

์–ด์ผ€ ์‚ฌ์šฉ ?
์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ JWT ํ† ํฐ ์ƒ์„ฑ ์ƒ์„ฑ๋œ ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋˜์–ด ์ดํ›„ ์š”์ฒญ์˜ Authorization ํ—ค๋”์— ํฌํ•จ
์ปค์Šคํ…€ ํ•„ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•ด ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์— ์ถ”๊ฐ€
๋งค ์š”์ฒญ๋งˆ๋‹ค JWT ํ† ํฐ์„ ๊ฒ€์ฆ ํ›„ ์œ ํšจํ•œ ๊ฒฝ์šฐ Authentication ๊ฐ์ฒด ์ƒ์„ฑ SecurityContext ์„ค์ •

Access Refresh Token ์œผ๋กœ ์•ก์„ธ์Šค ๋งŒ๋ฃŒ์‹œ ๋ฆฌํ”„๋ ˆ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด Access Token ๋ฐœ๊ธ‰๋ฐ›๋Š” ํ”„๋กœ์„ธ์Šค ๊ตฌํ˜„
๋˜ํ•œ ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์ ์ ˆํžˆ ์„ค์ •ํ•ด ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ HTTPS ์‚ฌ์šฉํ•ด ํ† ํฐ ์ „์†ก์‹œ ์•”ํ˜ธํ™”
  1. Spring Boot๋ž€ ๋ฌด์—‡์ด๋ฉฐ, Spring Framework์™€์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”? Spring Boot์˜ ์ž๋™ ๊ตฌ์„ฑ(Auto-configuration) ์›๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Spring boot๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Spring ๊ธฐ๋ฐ˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ๋น ๋ฅด๊ฒŒ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

-> ์ฃผ์š” ์ฐจ์ด์ ์€ ํฌ๊ฒŒ ์„ค์ •์˜ ๋ณต์žก์„ฑ, ์„œ๋ฒ„, ์˜์กด์„ฑ, ์œ ์—ฐ์„ฑ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ํ•™์Šต๊ณก์„  ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์ ์œผ๋กœ boot๋Š” ์ž๋™ ๊ตฌ์„ฑ, ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ตœ์†Œํ™”, ๋‚ด์žฅ ์„œ๋ฒ„ ์ œ๊ณต์ด ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ ๋ฐฉ์‹ ์—ญ์‹œ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์„ค์ •๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ์„ค์ •์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

framework๋Š” XML ๊ธฐ๋ฐ˜์— Java ์„ค์ • ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜๋™ ์—ฐ๊ฒฐ๊ณผ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผํ•˜๋Š” ์  ๋ชจ๋“  ์˜์กด์„ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์„ธ๋ฐ€ํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—… ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ๊ธฐ๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ๊ตฌ์„ฑ ์›๋ฆฌ๋Š” ์กฐ๊ฑด๋ถ€ ๊ตฌ์„ฑ๊ณผ ์šฐ์„ ์ˆœ์œ„์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘ ์‹œ @EnableAutoConfiguration์„ ๊ฐ์ง€ํ•˜๊ณ  Spring.factoriesํŒŒ์ผ์—์„œ ๊ตฌ์„ฑ ํด๋ž˜์Šค ๋ชฉ๋ก์„ ๋กœ๋“œ ๊ฐ ์ž๋™ ๊ตฌ์„ฑ ํด๋ž˜์Šค์˜ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•˜๊ณ  ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ํ•ด๋‹น ๊ตฌ์„ฑ ์ ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

  1. Spring Data JPA๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? JPA์™€ Hibernate์™€์˜ ๊ด€๊ณ„, ๊ทธ๋ฆฌ๊ณ  Spring Data JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด ์ž…๋‹ˆ๋‹ค. JPA์™€ hibernate๋Š” ๋งˆ์น˜ ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.

Data JPA์ œ๊ณตํ•˜๋Š” ์ฃผ์š”๊ธฐ๋Šฅ์€ ์•ž์„œ ์–ธ๊ธ‰ํ•œ Repository ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ํ†ตํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ํŽ˜์ด์ง•, ์ •๋ ฌ๊ณผ @Query ์–ด๋…ธํ…Œ์ด์…˜, Auditing, Specification, ๊ด€๊ณ„ ๋งคํ•‘, ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋งคํ•‘, ์ปค์Šคํ…€ Repository ๊ตฌํ˜„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Repo์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ธฐ๋ณธ์ ์ธ CRUD ์—ฐ์‚ฐ์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ ์ž๋™ ๊ตฌํ˜„ (CrudRepo, JpaRepo) ์‚ฌ์šฉ์ž๊ฐ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ์ ํ•ฉํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด Bean์œผ๋กœ ๋“ฑ๋ก

@Query ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜ ๊ธฐ๋Šฅ ์ œ๊ณตํ•˜๊ณ 

์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ ์ž๋™ ์‹œ๊ฐ„ ๊ธฐ๋ก, ๋™์  ์ฟผ๋ฆฌ ์ƒ์„ฑ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต, @OneToMany ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๊ด€๊ณ„ ์ •์˜ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ DTO ํ”„๋กœ์ ์…˜์™€ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์ ์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์ปค์Šคํ…€ ๋ ˆํฌ ๊ตฌํ˜„์„ ํ†ตํ•œ ํŠน์ • ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. @Controller, @Service, @Repository ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์˜ ์—ญํ• ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ Spring์˜ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋‚˜์š”?

๏ฟฝ์ผ๋‹จ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋น„์Šค ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์–ด๋…ธํ…Œ์ด์…˜์€ ํฐ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„  ์œ„์น˜ํ•˜๋Š” ๊ณ„์ธต์— ๋Œ€ํ•ด ๋จผ์ € ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์— ์ฆ‰, ์ตœ์ƒ์œ„ ๊ณ„์ธต์— ์œ„์น˜ํ•˜๊ณ  ์„œ๋น„์Šค๋Š” ์ค‘๊ฐ„์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ตœํ•˜์œ„ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฃผ์š” ์—ญํ• ์€ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ณ  URL ๋งคํ•‘ ๋ฐ ๋ทฐ ๋ฐ˜ํ™˜ ์ฒ˜๋ฆฌ ์ค‘์ ์„ ๋‘๋ฉฐ ์„œ๋น„์Šค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ์™€ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์— ์ค‘์ ์ด ์žˆ๊ณ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง ์ฒ˜๋ฆฌ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ ์ค‘์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž… ํŒจํ„ด์˜ ์ฐจ์ด๋„ ์žˆ๋Š”๋ฐ @์ปจํŠธ๋กค๋Ÿฌ๋Š” @์„œ๋น„์Šค์— ์˜์กดํ•˜๊ณ  @์„œ๋น„์Šค๋Š” @๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์˜์กด @๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ์— ์˜์กดํ•˜์ง€ ์•Š์•„์„œ ์ด ํŒจํ„ด์€ ๊ณ„์ธต๊ฐ„ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

AOP ์ ์šฉ ์ฐจ์ด์œผ๋กœ๋„ ํฐ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ฃผ๋กœ ๋กœ๊น…๊ณผ ๋ณด์•ˆ ๊ด€๋ จ AOP์ด๊ณ  ์„œ๋น„์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ AOP, ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ฃผ๋กœ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ด€๋ จ AOP ์ž…๋‹ˆ๋‹ค.

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํฌ๊ฒŒ ๋„์›€์„ ์ฃผ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์˜์กด์„ฑ ์ฃผ์ž… ํŒจํ„ด๊ณผ ๊ฐ ์–ด๋…ธํ…Œ์ด์…˜์ด ์œ„์น˜ํ•˜๋Š” ๊ณ„์ธต์œผ๋กœ ์ธํ•ด ๊ฐ ๊ณ„์ธต์€ ์ œ ์œ„์น˜์—์„œ ์ฑ…์ž„์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  ์˜์กด์„ฑ ๋‹จ๋ฐฉํ–ฅ์€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

ํ”„๋กœํŒŒ์ผ ์„ค์ •ํ•˜๊ณ  ํ™œ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ๋ฐฉ์‹์œผ๋กœ JVM ์˜ต์…˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ application.properties์™€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์ด ์žˆ๊ณ  XML ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ž๋ฐ” ์„ค์ •์œผ๋กœ config ํด๋ž˜์Šค์— @Profile ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž๋ฐ” ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•ด๋ณธ์ ์žˆ๋‚˜์š” ? local๊ณผ prod ํ”„๋กœํŒŒ์ผ ์„ค์ •์œผ๋กœ ์ ์šฉํ•ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๊ด€๊ณ„์—†์ง€๋งŒ ์šด์˜ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ๋…ธ์ถœ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ymlํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.