๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

728x90

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 : ํ•ด๋‹น ํด๋ž˜์Šค์˜ ํ•„๋“œ๊ฐ’์ด ์ƒ์†๋  ๊ฒฝ์šฐ์— ๊ทธ ํ•„..

728x90