Spring๐ (33) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์ ์์์ 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... ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ(4) : ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ 1) ํ ์ปจํธ๋กค๋ฌ ๋ฐ ํ html package hello.helloSpring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } Hello Spring ํ์ ๊ธฐ๋ฅ ํ์ ๊ฐ์ ํ์ ๋ชฉ๋ก *์ปจํธ๋กค๋ฌ๊ฐ ์ ์ ํ์ผ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค! ์์ฒญ์ด ์ค๋ฉด ๋จผ์ ์คํ๋ง ์ปจํ ์ด๋ ์์ ์๋ ์ปจํธ๋กค๋ฌ๋ถํฐ ๊ฒ์ํ๋ค. ์๋ ๊ฒฝ์ฐ static ํ์ผ ๊ฒ.. ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (3) : ์คํ๋ง ๋น๊ณผ ์์กด ๊ด๊ณ ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ 1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋น์ค์ ํ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์์กด๊ด๊ณ๋ฅผ ๋งบ๋๋ค๊ณ ํํ - @Controller ์ด๋ ธํ ์ด์ ์ด ์๋ค๋ฉด, ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ฉฐ ๊ทธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค - @Autowired ์ด๋ ธํ ์ด์ ์ ์์ฑ์์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ์์ฑ์์ ํ๋ผ๋ฏธํฐ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ค, DI ! (์์ฑ์๊ฐ 1๊ฐ๋ง ์๋ค๋ฉด ์๋ต๊ฐ๋ฅ) ~ @Component ์ด๋ ธํ ์ด์ ์ด ์๋ ํด๋์ค๋ ์คํ๋ง ๊ตฌ๋ ์ ๊ฐ์ฒด ์์ฑ ํ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ค (@Controller, @Service, @Repository) ** ์๋ฌด ํด๋์ค์์ @Component๋ฅผ ๋ถ์ฌ๋.. Spring Data JPA : Auditing & HATEOAS ์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ 1. Auditing @CreatedDate private Date created; @LastModifiedDate private Date updated; @CreatedBy @ManyToOne // ๊ณ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ๋๋ค private Account createdBy; @LastModifiedBy @ManyToOne private Account updatedBy; ์ ์ฉ ๋ฐฉ๋ฒ 1. Applicaton ์๋จ์ @EnableJpaAuditing 2. ์ํฐํฐ(TimeStamped) ํด๋์ค ์์ @EntityListeners(AuditingEntityListener.class) ์ถ๊ฐ cf) @MappedSuperclass : ํด๋น ํด๋์ค์ ํ๋๊ฐ์ด ์์๋ ๊ฒฝ์ฐ์ ๊ทธ ํ.. ์ด์ 1 2 3 4 5 ๋ค์