[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, ..
2025 ํšŒ๊ณ 
ยท
ํšŒ๊ณ 
ํšŒ๊ณ ๊ฐ€ ์ข€ ๋Šฆ์—ˆ๋‹ค...^^์‹œ๊ฐ„์ด ์ด๋ ‡๊ฒŒ๋‚˜ ๋น ๋ฅด๊ฒŒ ํ˜๋Ÿฌ๊ฐ€๋‹ค๋‹ˆ.. ๋งค๋ฒˆ ํšŒ๊ณ ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ด๋Ÿฐ ๋งˆ์Œ์ด๋‹ค. 2025๋…„, ๋‚˜์—๊ฒŒ ์–ด๋–ค ํ•ด์˜€๋‚˜ ๐Ÿ‘€ 2025๋…„์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด "๋งŽ์ด ํ”๋“ค๋ฆฌ๋ฉฐ ์„ฑ์žฅํ•œ ํ•ด"์˜€๋‹ค. ์™ธ๋ถ€์  ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ฉ˜ํƒˆ์ด ๋งŽ์ด ํ”๋“ค๋ ธ๊ณ , ๋‹ค์‹œ ๋งˆ์Œ์„ ๋‹ค์žก๋Š” ๊ณผ์ •์—์„œ ๋‚˜๋Š” ์–ด๋–ค ๊ฒƒ์— ์˜ˆ๋ฏผํ•˜๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ์‚ฌ๋žŒ์ธ์ง€, ๋ฌด์—‡์„ ์ถ”๊ตฌํ•˜๋ฉฐ ์–ด๋–ค ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ์€์ง€๋ฅผ ๊ณ„์† ๊ณ ๋ฏผํ–ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์ด์ „๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋‹จ๋‹จํ•ด์กŒ๋‹ค๊ณ  ๋А๊ปด์„œ ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•ด๋ดค๋‹ค.์‹ค๋ฌด์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ–ˆ๊ณ , ๊ธฐ์ˆ ์ ์œผ๋กœ๋„ ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ค„๋ดค๋‹ค. ์ผ์€ ๋ถ„๋ช…ํžˆ ํ•ด๋ƒˆ๊ณ , ๋ฐฐ์šด ๊ฒƒ๋„ ๋งŽ์•˜์ง€๋งŒ ๋งˆ์Œ์€ ๋Š˜ ๋ณต์žกํ–ˆ๋‹ค. ์˜ฌํ•ด๋Š” ์œ ๋‚œํžˆ ๋‚˜๋ฅผ ํž˜๋“ค๊ฒŒ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์•˜๋‹ค. ํ”ํžˆ '๋นŒ๋Ÿฐ' ๊ฐ™์€ ์‚ฌ๋žŒ์ด ๋‚ด ์ฃผ๋ณ€์— ์žˆ์—ˆ๊ณ , ๋“œ๋ผ๋งˆ์—์„œ๋‚˜ ๋ณด๋˜..
[Spring] ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ๋ฐฉ์‹๊ณผ ์‹ฑ๊ธ€ํ†ค ๋ณด์žฅ ์›๋ฆฌ @Component vs @Bean
ยท
Spring
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํ๋ฆ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ด ๋ฐฉ์‹์˜ ์ฐจ์ด๋Š” ์Šคํ”„๋ง์ด ๋นˆ์„ ์ธ์‹ํ•˜๋Š” ์ถœ๋ฐœ์ ์ด ์–ด๋””๋ƒ์˜ ์ฐจ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. 1. ์„ค์ • ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ˆ˜๋™ ๋“ฑ๋ก ๋ฐฉ์‹ (@Configuration, @Bean)์Šคํ”„๋ง์€ ์›๋ž˜ “์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์–ธ์ œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ• ์ง€"๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์ด ์ฒ ํ•™์ด ๊ฐ€์žฅ ์ง์ ‘์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ @Configuration๊ณผ @Bean์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.@Configurationpublic class MyClassConfig { @Bean public MyClass myClass() { return new MyClass(); }}@Configuration์ด ๋ถ™์€ ํด๋ž˜์Šค๋Š” ..
[Java] Enum์€ ์™œ ์•ˆ์ „ํ•˜๊ณ  ๋น ๋ฅผ๊นŒ?
ยท
Java
Enum์ด๋ž€์„œ๋กœ ์—ฐ๊ด€๋œ ๊ณ ์ •๋œ ์ƒ์ˆ˜ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.๋‹จ์ˆœํžˆ ์ƒ์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ, ์ปดํŒŒ์ผ ์‹œ์ ์— ํด๋ž˜์Šค ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋™์ž‘ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ํด๋ž˜์Šค๋‹ค. Enum Class ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผpublic enum Example { ONE, TWO, THREE}์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ๋˜๋ฉด, ๊ฐœ๋…์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.public final class Example extends Enum { public static final Example ONE = new Example("ONE", 0); public static final Example TWO = new Example("TWO", 1); public static final E..
[Java] ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ์˜ ์ฐจ์ด์ 
ยท
Java
์–•์€ ๋ณต์‚ฌ (Shallow Copy)๊ฐ์ฒด์˜ ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌ๊ฐ์ฒด๋ฅผ ์–•์€ ๋ณต์‚ฌํ•˜๋ฉด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋‚ด๋ถ€๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.int[] a = {1, 2, 3};int[] b = a; // ์ฐธ์กฐ ๋ณต์‚ฌ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ:a → Address Ab → Address A๊นŠ์€ ๋ณต์‚ฌ (Deep Copy)๋‚ด๋ถ€ ๊ฐ’๊นŒ์ง€ ๋ชจ๋‘ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์›๋ณธ๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌํ•œ๋‹ค.int[] a = {1, 2, 3};int[] b = Arrays.copyOf(a, a.length); // ๋‚ด๋ถ€ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๊ฐ’ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ:a → Address Ab → Address B (์ƒˆ ๊ฐ์ฒด) ์˜ˆ์ œpublic class User { private String name; private String age;}Us..
[Java] ๋ถˆ๋ณ€ ๊ฐ์ฒด(Immutable Object)์™€ final
ยท
Java
๋ถˆ๋ณ€ ๊ฐ์ฒด๋ž€?๋ถˆ๋ณ€ ๊ฐ์ฒด(immutable object)๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.์ž๋ฐ”์—์„œ ๋Œ€ํ‘œ์ ์ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ๋Š” String์ด ์žˆ๋‹ค. String์€ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ด์„œ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ‘์ˆ˜์ •’ํ•˜๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. String์€ ์–ด๋–ป๊ฒŒ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ• ๊นŒ?1๏ธโƒฃ ๋‚ด๋ถ€ ํ•„๋“œ์— final์ด ๋ถ™๋Š”๋‹ค.private final byte[] value;์—ฌ๊ธฐ์„œ ํ•„๋“œ์— private final์ด ๋ถ™์œผ๋ฉด, ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ƒ์„ฑ ์ดํ›„ ๋‹ค๋ฅธ ๋ฐฐ์—ด๋กœ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ด ๋ฐ”๋€” ์ˆ˜๊ฐ€ ์—†๋‹ค. 2๏ธโƒฃ ๋‚ด๋ถ€ ๋ฐฐ์—ด์„ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.String์—๋Š” ๋‚ด๋ถ€ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ..
[๋ฐฑ์ค€/JAVA] 11779 - ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ2
ยท
์•Œ๊ณ ๋ฆฌ์ฆ˜
1. ๋ฌธ์ œhttps://www.acmicpc.net/problem/11779 2. ํ’€์ด์ตœ์†Œ๋น„์šฉ์œผ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ๋‹จ ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ๊ณ , ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ข…๋ฃŒ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด๋‚˜๊ฐ„๋‹ค.๋” ์ž์„ธํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…์€ ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.์ถ”๊ฐ€๋กœ ์ด ๋ฌธ์ œ๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ๊ฐ–๋Š” ๊ฒฝ๋กœ์— ํฌํ•จ๋œ ๋„์‹œ์˜ ์ˆœ์„œ๋„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์ด ํ•˜๋‚˜ ํ•„์š”ํ•˜๋‹ค. โœ… ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจํ„ด1. ์ดˆ๊ธฐํ™”dist[]๋ฅผ INF๋กœ ์ฑ„์šด๋‹ค.์‹œ์ž‘ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ๋Š” 0์œผ๋กœ ์„ค์ • (dist[start] = 0) 2. ๋ฐ˜๋ณต (PQ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€)PQ์—์„œ ๊ฐ€์žฅ..
[Java] ์ƒ์† vs ์ปดํฌ์ง€์…˜, ์ธํ„ฐํŽ˜์ด์Šค vs ์ถ”์ƒ ํด๋ž˜์Šค ๋น„๊ต ๋ฐ OOP ์„ค๊ณ„ ๊ธฐ์ค€ ์ด์ •๋ฆฌ
ยท
Java
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ํ•ต์‹ฌ์ธ ์ƒ์†๊ณผ ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค๋Š” ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•  ๋•Œ ์ž์ฃผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ์„ ํƒ์ง€๋‹ค.์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ 2๊ฐ€์ง€ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ๋‹ค.์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ, ์ด๋ฅผ extends๋กœ ์ƒ์†๋ฐ›์•„์„œ ํ•ด๊ฒฐํ• ์ง€, ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์— ํฌํ•จ(composition)์‹œ์ผœ์„œ ์œ„์ž„ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๊ฐ€ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์•ผ ํ•  ๋•Œ, ๊ทธ ๊ธฐ๋Šฅ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ–‰๋™ ๊ทœ์•ฝ๋งŒ ์ •์˜ํ• ์ง€, ์•„๋‹ˆ๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๊ณตํ†ต๋œ ๊ธฐ๋ณธ ๋กœ์ง๊ณผ ์ƒํƒœ๊นŒ์ง€ ํ•จ๊ป˜ ์ œ๊ณตํ• ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค.์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ๋ ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด์„  ์ƒ์†, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์–ด๋–ค ์„ค๊ณ„๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ..
[Java] Garbage Collection ๋™์ž‘ ์›๋ฆฌ (2/2)
ยท
Java
์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ Garbage Collection ์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ๊ธฐ๋ณธ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.์ด๋ฒˆ์—๋Š” GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž GC ์•Œ๊ณ ๋ฆฌ์ฆ˜GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ชจ๋‘ ๋ฉˆ์ถ˜๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋Š” stop-the-world ๋ผ๊ณ  ํ•˜๋ฉฐ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  GC ์ž‘์—…์ด ์™„๋ฃŒํ•œ ์ดํ›„์— ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด stop-the-world ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”(GC ์ตœ์ ํ™”) ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. GC ๋ฐฉ์‹์€ JDK 7์„ ๊ธฐ์ค€์œผ๋กœ 5๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค. Serial GCSerial GC๋Š” ์„œ๋ฒ„์˜ CPU ์ฝ”์–ด๊ฐ€ 1๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๋ฐฉ์‹์ด๋ฉฐ, 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ GC๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— stop-th..