๐Ÿ๏ธ Spring

์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์—”ํ‹ฐํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๋‹จ๊ณ„์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„์˜์† (new/transient) ์˜์† (managed) ์ค€์˜์† (detached) ์‚ญ์ œ (removed) ๋น„์˜์†(new/transient) ๋น„์˜์† ์ƒํƒœ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. JPA์™€ ์ „ํ˜€ ๊ด€๊ณ„์—†์ด ๊ฐ์ฒด๋งŒ ์ƒ์„ฑํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. Member member = new Member(1L, "์‹ ๋™ํ›ˆ"); //member๋Š” ๋น„์˜์† ์ƒํƒœ ์˜์† ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹น์—ฐํžˆ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉฐ, 1์ฐจ ์บ์‹œ, ๋ณ€๊ฒฝ๊ฐ์ง€๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜์†(managed) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ๋˜์–ด์ง€๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ em.persist()๋ฅผ ํ†ตํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, ํ˜น์€ em.find()๋ฅผ ํ†ตํ•ด D..
๐Ÿง ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ & ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ์™€ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋Š” ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— DB ์ปค๋„ฅ์…˜ ํ’€์„ ์ƒ์„ฑํ•ด ๋‘” ํ›„, ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋Š” DB ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ์‹œ์ (๋ณดํ†ต ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ)์— ์ปค๋„ฅ์…˜ ํ’€์— ์žˆ๋Š” connection์„ ์–ป์Šต๋‹ˆ๋‹ค. ๐Ÿง ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋Š” ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— DB ์ปค๋„ฅ์…˜ ํ’€์„ ์ƒ์„ฑํ•˜๊ธฐ์— ์ƒ์„ฑ ๋น„์šฉ์ด ๋งค์šฐ ํฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €์˜ ์ƒ์„ฑ ๋น„์šฉ์€ ๊ฑฐ์˜ ๋“ค์ง€ ์•Š์œผ๋ฏ€๋กœ, ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์•คํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋Š” ์Šค๋ ˆ๋“œ ..
๐Ÿง JSON์œผ๋กœ ๋กœ๊ทธ์ธ์ฒ˜๋ฆฌ ํ•˜๊ธฐ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ formLogin()์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋กœ์ง€ Content-Type์ด x-www-form-urlencoded์ธ ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. formLogin์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , JSON์œผ๋กœ username๊ณผ password๋ฅผ ๋ฐ›์•„์„œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง formLogin()์˜ ์ž‘๋™๋ฐฉ์‹ ์‹œํ๋ฆฌํ‹ฐ์˜ formLogin()์„ ํ™œ์„ฑํ™” ์‹œํ‚ค๋ฉด ๋‹ค์Œ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด FormLoginConfigurer๊ฐ€ ํ™œ์„ฑํ™” ๋˜๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ FormLoginConfigurer ์—์„œ๋Š” UsernamePasswordAuthenticationFilter๋ž€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด์— ๋Œ€ํ•œ ์ž‘๋™๋ฐฉ์‹์„ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง Username..
Login์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ํ›„์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ• Spring Security๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋กœ๊ทธ์ธ์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋กœ๊ทธ์ธ ์ดํ›„, ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ƒํ™ฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ๋‹ค. AuthenticationSuccessHandler ๊ตฌํ˜„ ํ›„์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•œ๋ฐ, Spring Security์— ์กด์žฌํ•˜๋Š” AuthenticationSuccessHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. AuthenticationSuccessHandler ์€ ์ด 2๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” default ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Handler ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ž‘์„ฑํ•˜์ž. @Slf4j @Component public class CustomLo..
Inner Class๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @SpringBootTest class InnerClassTests { @Test void AutowiredOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(InnerClass.class); } class InnerClass { @Autowired public void setNoBean1(){} } } ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ UnsatisfiedDependencyException: Error creating bean with name 'InnerClassTests.InnerClass': Un..
๋นˆ ์Šค์ฝ”ํ”„ ๋นˆ ์Šค์ฝ”ํ”„๋Š” ๋นˆ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค(singleton) : ๊ธฐ๋ณธ ์Šค์ฝ”ํ”„, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ฐ€์žฅ ๋„’์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…(prototype) : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ƒ์„ฑ๊ณผ, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์งฆ์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. (์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๊นŒ์ง€๋งŒ ๋ถˆ๋Ÿฌ์ฃผ๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ์— ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ์›น ๊ด€๋ จ ์Šค์ฝ”ํ”„ : request : ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜์„œ ๋‚˜๊ฐˆ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. session : ์›น ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. application : ์›น์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ์™€ ๊ฐ™์€ ๋ฒ”์œ„๋กœ..
์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋นˆ์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์†Œ๋ฉธ๋˜๋Š” ๊ฒฝ์šฐ ํŠน์ •ํ•œ ์ž‘์—…์„ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋กœ๋Š” ๋นˆ์ด ์ƒ์„ฑ๋  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์œ„ํ•ด ์Šคํ”„๋ง ๋นˆ์˜ ์ดˆ๊ธฐํ™” ์ž‘์—…๊ณผ ์ข…๋ฃŒ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ์€ ์Šคํ”„๋ง ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ฃฝ๊ธฐ ์ง์ „์— ์Šคํ”„๋ง ๋นˆ ์•ˆ์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฒคํŠธ์‚ฌ์ดํด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ $\to$ ๋นˆ ์ƒ์„ฑ $\to$ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… $\to$ ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ $\to$ ์‚ฌ์šฉ $\to$ ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ $\to$ ์Šคํ”„๋ง ์ข…๋ฃŒ ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ : ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ ..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (21 Page)