์ํฐํฐ์ ์๋ช
์ฃผ๊ธฐ ์ํฐํฐ๋ ๋ค์๊ณผ ๊ฐ์ด 4๋จ๊ณ์ ์๋ช
์ฃผ๊ธฐ๊ฐ ์์ต๋๋ค. ๋น์์ (new/transient) ์์ (managed) ์ค์์ (detached) ์ญ์ (removed) ๋น์์(new/transient) ๋น์์ ์ํ๋ ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ ์ํ์
๋๋ค. JPA์ ์ ํ ๊ด๊ณ์์ด ๊ฐ์ฒด๋ง ์์ฑํ ์ํ์
๋๋ค. Member member = new Member(1L, "์ ๋ํ"); //member๋ ๋น์์ ์ํ ์์ ์ํ๊ฐ ์๋๋ฏ๋ก ๋น์ฐํ ์์์ฑ ์ปจํ
์คํธ์ ์ํด ๊ด๋ฆฌ๋์ง ์์ผ๋ฉฐ, 1์ฐจ ์บ์, ๋ณ๊ฒฝ๊ฐ์ง๋ฑ์ ๊ธฐ๋ฅ์ด ์ ์ฉ๋์ง ์์ต๋๋ค. ์์(managed) ์์์ฑ ์ปจํ
์คํธ์ ์ํด์ ๊ด๋ฆฌ๋์ด์ง๋ ์ํ์
๋๋ค. ์์ฑํ ๊ฐ์ฒด๋ฅผ em.persist()๋ฅผ ํตํด ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅํ๊ฑฐ๋, ํน์ em.find()๋ฅผ ํตํด D..
๐๏ธ Spring
๐ง ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ & ์ํฐํฐ ๋งค๋์ ์์์ฑ ์ปจํ
์คํธ์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ์ ์ํฐํฐ ๋งค๋์ ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ๋ ์์ฑ๋๋ ์์ ์ 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$ ์คํ๋ง ์ข
๋ฃ ์ด๊ธฐํ ์ฝ๋ฐฑ : ๋น์ด ์์ฑ๋๊ณ ๋น์ ์์กด๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋ ํ ํธ์ถ๋ฉ๋๋ค. ์๋ฉธ์ ์ฝ๋ฐฑ ..
๋ณดํธ๋์ด ์๋ ๊ธ์
๋๋ค.