[Spring] @Secured ์‚ฌ์šฉ ์‹œ AccessDeniedException์ด CustomAccessDeniedHandler์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ์ด์œ 
ยท
Spring
Spring Security๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ ๋‹จ์œ„์—์„œ @Secured ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋‚˜๋Š” @Secure ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์— ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ๋‹ค. @Operation(summary = "[๊ด€๋ฆฌ์ž] ๋ฆฌ์ŠคํŠธ ์กฐํšŒ", description = "๊ด€๋ฆฌ์ž ๋ฆฌ์ŠคํŠธ ์กฐํšŒ", security = @SecurityRequirement(name = "bearerAuth")) @Secured("ROLE_ROOT") // ๋ฃจํŠธ ๊ถŒํ•œ์ธ ์‚ฌ์šฉ์ž๋งŒ ํ—ˆ์šฉ @GetMapping("/list") public ResponseDto list(@RequestParam(required = false, de..
[Spring] Swagger์—์„œ MultipartFile + DTO ๋™์‹œ ์š”์ฒญ ์‹œ application/octet-stream ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
Spring
Spring์—์„œ ํŒŒ์ผ๊ณผ JSON DTO๋ฅผ ๋™์‹œ์— ๋ฐ›๋Š” ๊ธฐ๋Šฅ์€ ์ƒ๊ฐ๋ณด๋‹ค ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.๋‚˜ ์—ญ์‹œ ํŒŒ์ผ ์—…๋กœ๋“œ์™€ ํ•จ๊ป˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ DTO๋กœ ์ „๋‹ฌ๋ฐ›์•„์•ผ ํ•˜๋Š” API๋ฅผ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, Swagger์—์„œ๋งŒ ์žฌํ˜„๋˜๋Š” ์ •์ฒด๋ถˆ๋ช…์˜ ์˜ค๋ฅ˜๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.Content-Type 'application/octet-stream' is not supported Swagger Multipart ์š”์ฒญ ์˜ค๋ฅ˜์ปจํŠธ๋กค๋Ÿฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.@PostMapping( value = "/files", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public ResponseDto upload( @RequestPart("requestDto") RequestDto requestDto, ..
[Spring] ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ๋ฐฉ์‹๊ณผ ์‹ฑ๊ธ€ํ†ค ๋ณด์žฅ ์›๋ฆฌ @Component vs @Bean
ยท
Spring
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํ๋ฆ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ด ๋ฐฉ์‹์˜ ์ฐจ์ด๋Š” ์Šคํ”„๋ง์ด ๋นˆ์„ ์ธ์‹ํ•˜๋Š” ์ถœ๋ฐœ์ ์ด ์–ด๋””๋ƒ์˜ ์ฐจ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. 1. ์„ค์ • ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ˆ˜๋™ ๋“ฑ๋ก ๋ฐฉ์‹ (@Configuration, @Bean)์Šคํ”„๋ง์€ ์›๋ž˜ “์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์–ธ์ œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ• ์ง€"๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์ด ์ฒ ํ•™์ด ๊ฐ€์žฅ ์ง์ ‘์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ @Configuration๊ณผ @Bean์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.@Configurationpublic class MyClassConfig { @Bean public MyClass myClass() { return new MyClass(); }}@Configuration์ด ๋ถ™์€ ํด๋ž˜์Šค๋Š” ..
์›น ์†Œ์ผ“(WebSocket)์ด๋ž€ - Spring Boot & STOMP๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ํ•˜๊ธฐ (2/2)
ยท
Spring
์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์›น ์†Œ์ผ“์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ๋‹ค. ์›น ์†Œ์ผ“(WebSocket)์ด๋ž€ ์›น ์†Œ์ผ“(WebSocket)์ด๋ž€ - Spring Boot & STOMP๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ํ•˜๊ธฐ (1)์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์›น ์†Œ์ผ“์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์—, ์›น ์†Œ์ผ“์€ HTTP์™€ ์–ด๋–ค ์ ์ด ๋‹ค๋ฅด๊ณ  ์™œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์€ ์›น ์†Œ์ผ“์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ๋˜๋Š”์ง€ ์ด์œ ๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›น ์†Œ์ผ“ ์œ„์—enjoy89.tistory.com๊ทธ ์ „์— ์›น ์†Œ์ผ“, STOMP์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์€ ๋จผ์ € ์ด๋ก ์„ ํ•™์Šตํ•˜๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ๋‚˜๋Š” ๋ฐฑ์—”๋“œ๋งŒ ๊ตฌํ˜„ํ–ˆ๊ณ , ์ฐธ๊ณ ๋กœ ํ™”๋ฉด ์†Œ์Šค๋Š” GPTํ•œํ…Œ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ HTML/CSS/JavaScript๋งŒ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋‹ฌ๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๊ธ€์—์„œ๋Š” ๋ฐฑ์—”๋“œ ๊ด€๋ จ ๊ตฌํ˜„..
์›น ์†Œ์ผ“(WebSocket)์ด๋ž€ - Spring Boot & STOMP๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ํ•˜๊ธฐ (1/2)
ยท
Spring
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์›น ์†Œ์ผ“์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์—, ์›น ์†Œ์ผ“์€ HTTP์™€ ์–ด๋–ค ์ ์ด ๋‹ค๋ฅด๊ณ  ์™œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์€ ์›น ์†Œ์ผ“์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ๋˜๋Š”์ง€ ์ด์œ ๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›น ์†Œ์ผ“ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ”„๋กœํ† ์ฝœ์ธ STOMP์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด์ž WebSocket์ด๋ž€ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ์„ ์ง€์†์ ์œผ๋กœ ๊ณต์œ ํ•˜๋ฉด์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ๋˜๋ฉด ๋Š๊ธฐ์น˜ ์•Š์€ ์ฑ„ ์œ ์ง€๋˜๋ฉฐ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋กœ ์›ํ•˜๋Š” ์‹œ์ ์— ๋ฐ”๋กœ ๋ฉ”์‹œ์ง€๋ฅผ push ํ•  ์ˆ˜ ์žˆ๋‹ค.HTTP ๋ฐฉ์‹์ฒ˜๋Ÿผ "์š”์ฒญ ํ›„ ์‘๋‹ต" ๊ตฌ์กฐ์— ํ•ด๋‹น๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฑ„ํŒ…, ์•Œ๋ฆผ, ๊ฒŒ์ž„, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ์‹ค์‹œ๊ฐ„์„ฑ์ด ํ•ต์‹ฌ์ธ ์„œ๋น„์Šค์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. HTTP ํ•œ๊ณ„์™€ WebSocket์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝH..