๐Ÿ’ Spring

๐Ÿ’ Spring/Spring Security

CORS์ด๋ž€ ๋ฌด์—‡์ด๊ณ , Spring-boot์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

CORS (Cross-Origin Resource Sharing) ์ด๋ž€? A๋ผ๋Š” ๋„๋ฉ”์ธ์—์„œ ์ œ๊ณต๋˜๋Š” FE์—์„œ → B๋ผ๋Š” ๋„๋ฉ”์ธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” BE์— HTTP ์š”์ฒญ์„ ํ–ˆ์„ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ์„ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Preflight Request ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์ œ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „ ๋ธŒ๋ผ์šฐ์ € ์Šค์Šค๋กœ ์ด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•œ์ง€ ์˜ˆ๋น„ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๊ฒŒ ๋ฐ”๋กœ Preflight Request๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด Preflight Request๋Š” OPTION ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์š”์ฒญํ•˜๋Š”๋ฐ ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€ ์‘๋‹ต ํ—ค๋”์— Access-Controller-* ํ—ค๋”๋“ค์ด ์ž˜ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. GET, POST, HEAD ์š”์ฒญ..

๐Ÿ’ Spring/Spring Security

(Deprecated) WebSecurityConfigurerAdapter์— ๋Œ€์‘ํ•˜๊ธฐ

Spring Boot 2.7 (Spring 5.7.0-M2) ๋ถ€ํ„ฐ WebSecurityConfigurerAdapter๋Š” Deprecated๊ฐ€ ๋˜์—ˆ๋‹ค. Spring Security without the WebSecurityConfigurerAdapter In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration. authz .anyRequest().authenticated() ) .httpBasic(withDefaults()); } } ์Šคํ”„๋ง์€ SecurityFilterChain ๋นˆ์„ ๋“ฑ๋กํ•˜..

๐Ÿ’ Spring

Spring-Boot REST Docs ์ ์šฉ๊ธฐ (with. Gradle, Maven)

์‹คํ–‰ ํ™˜๊ฒฝ Spring Boot 2.7.1 Gradle 7.4.1 Maven 3.8.5 ๋นŒ๋“œ ์‹œ์Šคํ…œ ์„ค์ • Gradle ๋”๋ณด๊ธฐ plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'org.asciidoctor.jvm.convert' version '3.3.2' // (1) } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } }..

๐Ÿ’ Spring

Optional ๊ฐ’์ด ์žˆ์„ ๋•Œ Exception ์ฒ˜๋ฆฌ

ํšŒ์› ๋„๋ฉ”์ธ์—์„œ Username์ด ์ค‘๋ณต์ด ๋˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ์•„๋ž˜ ๊ฐ™์ด ๋กœ์ง์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Optional account = accountRepository.findByUsername(username); if (account.isPresent()) throw new AccountDuplicateException(username); ํ•˜์ง€๋งŒ Optional์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ง๊ณ  ifPresent๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ Exception์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. accountRepository.findByUsername(username) .ifPresent(a -> { throw new AccountDuplicateException(username) }); ํ›จ์”ฌ ๋” ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์•Œ์•„๋ณด๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ Spring/Spring Security

Spring Security Error Code ๋ณ„ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌํ•˜๊ธฐ

Spring boot + Security ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์—๋Ÿฌ ์ฝ”๋“œ ๋งˆ๋‹ค ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณด๋‹ค๊ฐ€ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚ฌ์Šต๋‹ˆ๋‹ค. 1. EntryPoint, Handler ์‚ฌ์šฉ authenticationEntryPoint, accessDeniedHandler์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น ์—๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Security Config /* Security Config */ @Override protected void configure(HttpSecurity http) throws Exception { http // .. .exceptionHandling() .authenticationEntryPoint(new MyAuthenticationEntryP..

๐Ÿ’ Spring

Mockito Framework์— ๋Œ€ํ•ด์„œ

Mockito๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ: Spring-boot, Junit5, Mockito ๋ชจ๋“  ์ฝ”๋“œ๋Š” Github์— ์žˆ์Šต๋‹ˆ๋‹ค :) Mockito Mockito๋ž€? ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋ชจ๋“  ๋นˆ์„ ์ผ์ผํžˆ ์ฃผ์ž…์‹œํ‚ค์ง€ ์•Š๊ณ , Mock ๊ฐ์ฒด(๊ฐ€์งœ ๊ฐ์ฒด)๋ฅผ ์ฃผ์ž…์‹œ์ผœ ํ–‰์œ„๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ณ , ์•„์ง ์ž‘์„ฑ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๋“ค(์˜์กด์„ฑ ๊ฐ์ฒด) ๋˜๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ์˜์กด์„ฑ ๊ฐ์ฒด๋“ค์„ Mockingํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ (dependency) spring boot๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด, spring-boot-starter-test ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ด๋ฏธ JUnit5์™€ Mockito๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. Spring.io - 41.Testing Mock ํ…Œ์ŠคํŠธ ์ˆœ์„œ moc..

iseunghan
'๐Ÿ’ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)