728x90

Spring๐Ÿƒ 38

Spring์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ์ •์  ์ž์›์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ์ตœ์ ํ™” ์ „๋žต

@ControllerAdvice ๋ฐ ResourceHandlerRegistry๋ฅผ ํ™œ์šฉํ•ด Resolver ๋ฒ„์ „์„ ์ž๋™ ๊ด€๋ฆฌํ”ํžˆ ์Šคํ”„๋ง์œผ๋กœ view๊นŒ์ง€ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ(JSP, ThymeLeaf ๋“ฑ), ์ฐธ์กฐํ•˜๋Š” js๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ์กด js๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•ด ๋‘” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ์ผํžˆ ์บ์‹œ๋ฅผ ์ง€์›Œ์ค˜์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค ์ผ๋ฐ˜์ ์ธ ๋Œ€์•ˆ์œผ๋กœ import ์†Œ์Šค ๋ช…์‹œํ•  ๋•Œ, ๋‚ ์งœ๋‚˜ ?version=123 ๋“ฑ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ œ์‹œ๋œ๋‹ค ๋‹ค๋งŒ, ๋‚ ์งœ์˜ ๊ฒฝ์šฐ, ํ•ด๋‹น ๋‚ ์งœ ๋˜๋Š” ์‹œ๊ฐ„(๋ฒ„์ „์— ์‹œ๊ฐ„๊นŒ์ง€ ๋ช…์‹œํ•œ ๊ฒฝ์šฐ)๊ฐ€ ๊ฒฝ๊ณผํ•˜๋ฉด๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ”๋กœ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์บ์‹ฑํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ์— ์š”์ฒญ์„ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•  ๋•Œ๋งˆ๋‹ค ๊ณ„์† ๋‚ ๋ฆฐ๋‹ค ๋˜ํ•œ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ, ์ˆ˜๋™์œผ๋กœ application.yml ๋“ฑ์—์„œ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•˜..

Spring๐Ÿƒ 2025.06.13

Spring messging, Stomp๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”์„ธ์ง€ ๊ด€๋ฆฌ + ๋‹ค์ค‘ ์„ธ์…˜ ๊ด€๋ฆฌ ๊ตฌํ˜„

0. ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”(๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”) ๋ฌธ์ œ(์š”๊ตฌ ์‚ฌํ•ญ)- ์‚ฌ์ดํŠธ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ ‘์†ํ•œ ์‚ฌ๋žŒ์˜ ๋ชฉ๋ก๊ณผ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋“ค์ด ํ˜„์žฌ ์–ด๋–ค ํŽ˜์ด์ง€, ํƒญ์— ์ ‘์†ํ•ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ ์ž ํ–ˆ๋‹ค - http, rest API๋ฅผ ํ†ตํ•œ ๊ตฌํ˜„๋„ ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ, ์ด๋Š” ์ง„์ •ํ•œ "์‹ค์‹œ๊ฐ„"์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ์กฐ๊ธˆ์ด๋ผ๋„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์›น์†Œ์ผ“(WebSocket) ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•œ ์ ‘๊ทผ์„ ์‹œ์ž‘ํ–ˆ๋‹ค - ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , ์Šคํ”„๋ง์—์„œ ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ์„ ํ™œ์šฉํ•  ๋•Œ ์ˆœ์ˆ˜ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, Stomp ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด ๋”์šฑ ๊ฐ„ํŽธํ•œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค-> ์‚ฌ์šฉํ•œ ๊ธฐ์Šฌ ์ŠคํŽ™1) stomp2) spring messing3) event Listener4) ConcurrentHashMap1. ..

Spring๐Ÿƒ 2025.04.20

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ์Šค๋ ˆ๋“œ ๋กœ์ปฌ

์Šค๋ ˆ๋“œ ๋กœ์ปฌ์€ ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ํ• ๋‹น๋˜์–ด ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์•„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ์Šค๋ ˆ๋“œ๊ฐ€ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด ์“ฐ๊ฒŒ ๋œ๋‹ค ์ด ๊ฒฝ์šฐ์— ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์„ ์‚ฌ์šฉํ•ด ๊ฐ ์Šค๋ ˆ๋“œ ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค ** ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์€ ์‚ฌ์šฉ ํ›„ ๊ผญ remove() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ œ๊ฑฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค

์ •์ˆ˜์›์˜ Spring Security Oauth2 (5) : CORS

CORS- Http ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ์ถœ์ฒ˜์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋‹ค๋ฅผ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ ํ—ค๋”์— Origin ํ•„๋“œ์— ์š”์ฒญ ์ถœ์ฒ˜๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„ ๊ต์ฐจ ์ถœ์ฒ˜ Http ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค- ์ถœ์ฒ˜ ๋น„๊ต ๋กœ์ง์€ ์„œ๋ฒ„ ๊ตฌํ˜„ ์ŠคํŽ™์ด ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋œ ์ŠคํŽ™ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ผ์ด๋˜ํŠธ์˜ ์š”์ฒญ ํ—ค๋”์™€ ์„œ๋ฒ„์˜ ์‘๋‹ต ํ—ค๋”๋ฅผ ๋น„๊ตํ•ด ์ตœ์ข… ์‘๋‹ต์„ ๊ฒฐ์ •ํ•œ๋‹ค- ๋‘ ๊ฐœ์˜ ์ถœ์ฒ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ URL์˜ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ Protocol, Host, Port ์„ธ ๊ฐ€์ง€๊ฐ€ ๋™์ผํ•œ์ง€๋ฅผ ํ™•์ธํ•จ์œผ๋กœ ๋น„๊ต ex) http://abc.com ์—์„œ XMLHttpRequst, ajax(๋˜๋Š” FetchAPI) ..

์ •์ˆ˜์›์˜ Spring Security Oauth2 (4) : Http Basic

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ Http์˜ ์ธ์ฆ๋ฐฉ์‹์€ Basic ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค RFC 7235 ํ‘œ์ค€์œผ๋กœ, ์ธ์ฆ์— ํ•„์š”ํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ Base 64๋กœ ์ธ์ฝ”๋”ฉํ•ด ์„œ๋ฒ„์— ์ธ์ฆ์„ ์š”์ฒญํ•œ๋‹ค(Base 64๋Š” ๋””์ฝ”๋”ฉ์ด ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— Https์™€ ๊ฐ™์€ TLS๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค) 1. HttpBasicConfigurer- Basic ์ธ์ฆ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์†์„ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •- ๊ธฐ๋ณธ AuthenticationEntryPoint๋Š” BasicAuthenticationEntryPoint์ด๋‹ค- ํ•„ํ„ฐ๋Š” BasicAuthenticaionFilter๋ฅผ ์‚ฌ์šฉ 2. BasicAuthenticaionFilter๊ธฐ๋ณธ ์ธ์ฆ ์„œ๋น„์Šค ์ œ๊ณต, ์š”์ฒญ ํ—ค๋”์˜ ์ธ์ฆ์ •๋ณด ์œ ํšจ์„ฑ์„ ์ฒดํฌํ•˜๋ฉฐ ์ธ์ฆ์ •๋ณด์ธ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค. ์ธ์ฆ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ Authentica..

์ •์ˆ˜์›์˜ Spring Security Oauth2 (3) : ์‹œํ๋ฆฌํ‹ฐ ์ธ์ฆ ์ธ๊ฐ€ ํ๋ฆ„

1. DelegatingFilterProxy์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜์Œ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.- ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ FilterChain์„ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก, DelegatingFilterProxy๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ํ•„ํ„ฐ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์œ„์ž„ํ•œ๋‹ค 2. FilterChainProxy๋ณด์•ˆ์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ ์ฒด์ธ. ํ•ด๋‹น ํ•„ํ„ฐ ์ฒด์ธ์—์„œ ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•„ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ด ์ธ์ฆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค- ์ธ์ฆ ์˜์—ญ3. AuthenticationFilterAuthentication ๊ฐ์ฒด ์ƒ์„ฑ : ์ธ์ฆ์„ ์œ„ํ•œ ์ •๋ณด(ex ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ)๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด4.AuthenticationManager : ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ๋‚ด๋ถ€ ์ธ์ฆ๋กœ์ง ์ˆ˜ํ–‰์œผ๋กœ ์ด์–ด์ง€๋Š” ์ธํ„ฐ..

์ •์ˆ˜์›์˜ Spring Security Oauth2 (2) : Spring Security ์ดˆ๊ธฐํ™” ๊ณผ์ • ์ดํ•ด

AuthenticationEntryPoint ์ดํ•ด์ž๋™์„ค์ •์— ์˜ํ•œ ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์ŠคFormLoginConfigurer - ExceptionHandlingConfigurer - defaultEntryPointMappings.put - HttpBasicConfigurer - defaultEntryPointMappings.put *FormLogin1) FormLoginConfigurer -> ExceptionHandlingConfigurer - ํผ ๋กœ๊ทธ์ธ์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ- ExceptionHandlingConfigurer์—์„œ AuthenticationEntryPoint ๊ตฌํ˜„์ฒด ์ƒ์„ฑ-> LoginUrlAuthenticationEntryPoint 2) ExceptionHandlingConfigurer -> defaul..

์ •์ˆ˜์›์˜ Spring Security Oauth2 (1) : Spring Security ์ดˆ๊ธฐํ™” ๊ณผ์ • ์ดํ•ด

SecurityBuilder๋Š” ๋นŒ๋” ํด๋ž˜์Šค๋กœ์„œ ์›น ๋ณด์•ˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋นˆ ๊ฐ์ฒด์™€ ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• - WebSecurity์™€ HttpSecurity๊ฐ€ ์žˆ๋‹ค SecurityConfigurer๋Š” Http ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ณด์•ˆ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ•„ํ„ฐ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ดˆ๊ธฐํ™” ์„ค์ •์— ๊ด€์—ฌํ•œ๋‹คSecurityBuilder๋Š” SecurityConfigurer๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ์ดˆ๊ธฐํ™” ์ž‘์—…์€ SecurityConfigurer์— ์˜ํ•ด ์ง„ํ–‰๋œ๋‹ค ์ž๋™ ์„ค์ •์— ์˜ํ•ด ๋นŒ๋” ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ดํ›„ ์„ค์ • ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ init(B builder), configure(B builder)๋กœ ์ดˆ๊ธฐํ™” ์ž‘์—… ์ง„ํ–‰ ๋นŒ๋”๋Š” HttpSecurity, WebSecurity๋ฅผ ์ดˆ๊ธฐํ™” ์ง„ํ–‰ํ•œ๋‹ค. ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋ ๋•Œ Secuirt..

์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ ๋…ธํŠธ ์ •๋ฆฌ (6) : AOP

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

์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ ๋…ธํŠธ ์ •๋ฆฌ (5) : ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ 

์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  1) H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ์œˆ๋„์šฐ ์‹คํ–‰ : h2.bat ์ฝ˜์†”์—์„œ test.mv.db ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ ์ ‘์† ์‹œ jdbc:h2:tcp://localhost/~/test ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— sql/ddl.sql ํŒŒ์ผ๋กœ sql ๋ช…๋ น์–ด ๊ด€๋ฆฌํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค. 2) ์ˆœ์ˆ˜ JDBC build.gradle ํŒŒ์ผ์— jdbc, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ • ์ถ”๊ฐ€ spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource...

728x90