๐Ÿ˜€
fistkim TECH BLOG
  • Intro
  • ๊ฐ•์˜
    • Reactive Programming in Modern Java using Project Reactor
      • Reactor execution model 1
      • Reactor execution model 2
      • Reactor execution model 3 - parallelism
      • Reactor execution model 4 - overview
      • Transform
      • Combine
      • Side Effect Methods
      • Exception/Error handling
      • retry, retryWhen, repeat
      • BackPressure
      • Cold & Hot Streams
    • NEXTSTEP ํด๋ฆฐ์ฝ”๋“œ with java 9๊ธฐ
      • ์ •๋ฆฌ๋…ธํŠธ
    • NEXTSTEP DDD ์„ธ๋ ˆ๋‚˜๋ฐ 2๊ธฐ
      • CH01 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์ดํ•ด
      • CH02 ํฌ๊ฒŒ ์†Œ๋ฆฌ ๋‚ด์–ด ๋ชจ๋ธ๋ง ํ•˜๊ธฐ
      • CH03 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ๊ธฐ๋ณธ ์š”์†Œ
      • CH04 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜
      • CH05 ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ
    • NEXTSTEP ์ธํ”„๋ผ ๊ณต๋ฐฉ 1๊ธฐ
      • ๋ง ๋ถ„๋ฆฌํ•˜๊ธฐ
      • ํ†ต์‹  ํ™•์ธํ•˜๊ธฐ
      • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ดํ•ดํ•˜๊ธฐ
      • [๋ฏธ์…˜ 1] ์„œ๋น„์Šค ๊ตฌ์„ฑํ•˜๊ธฐ ์‹ค์Šต
      • [๋ฏธ์…˜ 2] ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ ์‹ค์Šต
      • ์„œ๋ฒ„ ์ง„๋‹จํ•˜๊ธฐ
      • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„๋‹จํ•˜๊ธฐ
      • [๋ฏธ์…˜ 3] ์„œ๋น„์Šค ์šด์˜ํ•˜๊ธฐ
      • ์›น ์„ฑ๋Šฅ ์ง„๋‹จํ•˜๊ธฐ
      • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
      • k6
      • [๋ฏธ์…˜ 4] ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
      • ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ฐœ์„ ํ•˜๊ธฐ
      • ์บ์‹ฑ ํ™œ์šฉํ•˜๊ธฐ
      • [๋ฏธ์…˜ 5] ํ™”๋ฉด ์‘๋‹ต ๊ฐœ์„ ํ•˜๊ธฐ
      • Redis Annotation ๋ฐ ์„ค์ •
      • ์ธ๋ฑ์Šค ์ดํ•ดํ•˜๊ธฐ & DB ํŠœ๋‹
      • [๋ฏธ์…˜ 6-1] ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ
      • [๋ฏธ์…˜ 6-2] DB ์ด์ค‘ํ™” ์ ์šฉ
    • NEXTSTEP ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” Spring 3๊ธฐ
      • CH01 ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ ๋ฐ”๋ผ๋ณด๊ธฐ
      • CH02 HTTP ์ดํ•ด - ์›น ์„œ๋ฒ„ ๊ตฌํ˜„
        • HTTP ํŒŒ์‹ฑ
        • HTTP ์›น ์„œ๋ฒ„ ๊ตฌํ˜„
      • CH03 MVC - @MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
        • Servlet ๋‹ค์‹œ ์งš๊ธฐ
        • Cookie, Session ๋‹ค์‹œ ์งš๊ธฐ
        • MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
      • CH04 ๋‚˜๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„
      • CH05 DI - DI ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
      • CH06 Aspect OP
    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ
      • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์•„ํ‚คํ…์ฒ˜
      • WebAsyncManagerIntegrationFilter
      • SecurityContextPersistenceFilter
      • HeaderWriterFilter
      • CsrfFilter
      • (+) ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ + JWT
      • (+) ๋งˆ์น˜๋ฉฐ
    • ๋” ์ž๋ฐ”, ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•
      • CH01 JVM ์ดํ•ดํ•˜๊ธฐ
      • (+) ํด๋ž˜์Šค ๋กœ๋” ์ดํ•ดํ•˜๊ธฐ
      • CH02 ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์กฐ์ž‘
      • (+) jacoco
      • CH03 ๋ฆฌํ”Œ๋ ‰์…˜
      • CH04 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋ก์‹œ
      • CH05 ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ
    • ๋” ์ž๋ฐ”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•
      • CH01 JUnit 5
      • CH02 Mockito
      • (+) Spy vs Mock
      • CH03 ๋„์ปค์™€ ํ…Œ์ŠคํŠธ
      • CH04 ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
      • (+) VisualVM
      • (+) ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
      • CH05 ์šด์˜ ์ด์Šˆ ํ…Œ์ŠคํŠธ
      • CH06 ์•„ํ‚คํ…์ฒ˜ ํ…Œ์ŠคํŠธ
    • ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹
      • CH01 ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ
      • CH02 HTTP ๊ธฐ๋ณธ
      • CH03 HTTP ๋ฉ”์„œ๋“œ ์†์„ฑ
      • CH04 HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ
      • CH05 HTTP ์ƒํƒœ์ฝ”๋“œ
      • CH06 HTTP ํ—ค๋”1 - ์ผ๋ฐ˜ ํ—ค๋”
      • CH07 HTTP ํ—ค๋”2 - ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ
      • (+) HTTPS ์›๋ฆฌ
    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ธฐ์ˆ 
      • CH01 IOC ์ปจํ…Œ์ด๋„ˆ
      • CH02 AOP
      • (+) ์Šคํ”„๋ง ์˜์กด์„ฑ ๊ด€๋ฆฌ
      • (+) ์ƒ์„ฑ์ž ์ฃผ์ž… ์žฅ์ 
    • ์ฝ”๋”ฉ์œผ๋กœ ํ•™์Šตํ•˜๋Š” GoF์˜ ๋””์ž์ธ ํŒจํ„ด
      • ๊ฐ์ฒด ์ƒ์„ฑ
        • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
        • ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด
        • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด
        • ๋นŒ๋” ํŒจํ„ด
        • ํ”„๋กœํ† ํƒ€์ž… ํŒจํ„ด
      • ๊ตฌ์กฐ
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด
        • ์ปดํฌ์ง“ ํŒจํ„ด
      • ํ–‰๋™
        • (์ž‘์„ฑ์ค‘)
    • ์‹ค์ „ Querydsl
      • CH01 ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ๊ตฌ์„ฑ
      • CH02 ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ
      • CH03 ๊ธฐ๋ณธ๋ฌธ๋ฒ•
      • CH04 ์ค‘๊ธ‰ ๋ฌธ๋ฒ•
      • CH05 ์‹ค๋ฌดํ™œ์šฉ (์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์™€ Querydsl)
      • CH06 ์Šคํ”„๋ง๋ฐ์ดํ„ฐJPA ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Querydsl ๊ธฐ๋Šฅ
      • (+) ๋ณ„์นญ(alias)
      • (+) Slice ์ฟผ๋ฆฌ
    • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
      • CH01 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 1
      • CH02 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 2
      • CH03 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 3
      • CH04 Spring Data Common
      • CH05 Spring Data JPA
    • ์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ2 - API ๊ฐœ๋ฐœ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH01 ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์กฐํšŒ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH02 ์ปฌ๋ ‰์…˜ ์กฐํšŒ ์ตœ์ ํ™”
      • CH03 ์ „์ฒด ์ •๋ฆฌ
    • ์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ
      • CH01 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์ž‘ํ•˜๊ธฐ
      • CH02 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•Œ์•„๋ณด๊ธฐ
      • CH03 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹ค์Šต ์ค€๋น„
      • CH04 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ๋ณธ ์‹ค์Šต
    • Flutter Provider Essential
      • CH01 Introduction
      • CH02 Provider Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Bloc Essential
      • CH01 Introduction
      • CH02 Bloc Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Advanced Course - Clean Architecture With MVVM
      • CH01 Introduction
      • CH02 Clean Architecture 4 Layer
      • CH03 MVVM
      • CH04 Data Layer
      • (+) Data Layer - response to model
      • (+) Data Layer - Network
      • CH05 Domain Layer
      • CH06 Presentation Layer
      • CH07 Application Layer
      • (+) Application Layer - l10n
      • (+) Application Layer - DI
      • (+) Application Layer - environment
    • ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋ฌธ
      • CH01 ๋ฌธ์ž์—ด
      • CH02 Array(1, 2 ์ฐจ์› ๋ฐฐ์—ด)
      • CH03 Two pointers, Sliding window[ํšจ์œจ์„ฑ: O(n^2)-->O(n)]
      • CH04 HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set)
      • CH05 Stack, Queue(์ž๋ฃŒ๊ตฌ์กฐ)
      • CH06 Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜)
      • CH07 Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ)
      • CH08 DFS, BFS ํ™œ์šฉ
      • CH09 Greedy Algorithm
      • CH10 dynamic programming(๋™์ ๊ณ„ํš๋ฒ•)
  • ๋„์„œ
    • ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • ํ•™์Šต๋ชฉํ‘œ
      • CH01 ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ?
      • CH02 ์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ
      • CH03 ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ
      • CH04 ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH05 ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH06 ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH07 ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ
      • CH08 ๊ฒฝ๊ณ„ ๊ฐ„ ๋งคํ•‘ํ•˜๊ธฐ
      • CH09 ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐ๋ฆฝํ•˜๊ธฐ
      • CH10 ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ
      • CH11 ์˜์‹์ ์œผ๋กœ ์ง€๋ฆ„๊ธธ ์‚ฌ์šฉํ•˜๊ธฐ
      • CH12 ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ๊ฒฐ์ •ํ•˜๊ธฐ
    • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • ๋“ค์–ด๊ฐ€๋ฉฐ
      • 1๋ถ€ ์†Œ๊ฐœ
        • 1์žฅ ์„ค๊ณ„์™€ ์•„ํ‚คํ…์ฒ˜๋ž€?
        • 2์žฅ ๋‘ ๊ฐ€์ง€ ๊ฐ€์น˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ
      • 2๋ถ€ ๋ฒฝ๋Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
        • 3์žฅ ํŒจ๋Ÿฌ๋‹ค์ž„ ๊ฐœ์š”
        • 4์žฅ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
        • 5์žฅ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
        • 6์žฅ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 3๋ถ€ ์„ค๊ณ„ ์›์น™
        • 7์žฅ SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
        • 8์žฅ OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™
        • 9์žฅ LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
        • 10์žฅ ISP: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
        • 11์žฅ DIP: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™
      • 4๋ถ€ ์ปดํฌ๋„ŒํŠธ ์›์น™
        • 12์žฅ ์ปดํฌ๋„ŒํŠธ
        • 13์žฅ ์ปดํฌ๋„ŒํŠธ ์‘์ง‘๋„
        • 14์žฅ ์ปดํฌ๋„ŒํŠธ ๊ฒฐํ•ฉ
      • 5๋ถ€
        • 15์žฅ ์•„ํ‚คํ…์ฒ˜๋ž€?
    • ์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด
      • CH01 ์‚ฌ๋žŒ์„ ์‚ฌ๋ž‘ํ•œ ๊ธฐ์ˆ 
      • CH02 ์ž๋ฐ”์™€ ์ ˆ์ฐจ์ /๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • CH03 ์ž๋ฐ”์™€ ๊ฐ์ฒด ์ง€ํ–ฅ
      • (+) ์ž๋ฐ” ์ฝ”๋“œ ์‹คํ–‰์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ๊ณผ์ •
      • CH04 ์ž๋ฐ”๊ฐ€ ํ™•์žฅํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ
      • CH05 ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5 ์›์น™ - SOLID
      • CH06 ์Šคํ”„๋ง์ด ์‚ฌ๋ž‘ํ•œ ๋””์ž์ธ ํŒจํ„ด
      • CH07 ์Šคํ”„๋ง ์‚ผ๊ฐํ˜•๊ณผ ์„ค์ • ์ •๋ณด
      • (๋ถ€๋ก) ๋žŒ๋‹ค(lambda)
    • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด
      • CH01 ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด
      • CH02 ์ด์ƒํ•œ ๋‚˜๋ผ์˜ ๊ฐ์ฒด
      • CH03 ํƒ€์ž…๊ณผ ์ถ”์ƒํ™”
      • CH04 ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
      • CH05 ์ฑ…์ž„๊ณผ ๋ฉ”์‹œ์ง€
      • CH06 ๊ฐ์ฒด ์ง€๋„
      • CH07 ํ•จ๊ป˜ ๋ชจ์œผ๊ธฐ
      • (+) ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋… ๋ฐ”๋กœ์žก๊ธฐ
    • ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
      • CH01 ๋„๋ฉ”์ธ ๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ
      • CH02 ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”
      • CH03 ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ
      • CH04 ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ๋ชจ๋ธ ๊ตฌํ˜„
      • CH05 ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์ด์šฉํ•œ ์กฐํšŒ ๊ธฐ๋Šฅ
      • CH06 ์‘์šฉ ์„œ๋น„์Šค์™€ ํ‘œํ˜„ ์˜์—ญ
      • CH07 ๋„๋ฉ”์ธ ์„œ๋น„์Šค
      • CH08 ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
      • CH09 ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ
      • CH10 ์ด๋ฒคํŠธ
      • CH11 CQRS
    • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • CH01 JPA ์†Œ๊ฐœ
      • CH02 JPA ์‹œ์ž‘
      • CH03 ์˜์†์„ฑ ๊ด€๋ฆฌ
      • CH04 ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
      • CH05 ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ
      • CH06 ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
      • CH07 ๊ณ ๊ธ‰ ๋งคํ•‘
      • CH08 ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ
      • CH09 ๊ฐ’ ํƒ€์ž…
      • CH10 ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด
      • CH11 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘
      • CH12 ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
      • CH13 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์˜์†์„ฑ ๊ด€๋ฆฌ
      • CH14 ์ปฌ๋ ‰์…˜๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ
      • CH15 ๊ณ ๊ธ‰ ์ฃผ์ œ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH16 ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฝ, 2์ฐจ ์บ์‹œ
    • ์†Œํ”„ํŠธ์›จ์–ด ์„ธ์ƒ์„ ์—ฌ๋Š” ์ปดํ“จํ„ฐ๊ณผํ•™
      • CH01 ์ปดํ“จํ„ฐ ๊ณผํ•™ ์†Œ๊ฐœ
      • CH02 ๋ฐ์ดํ„ฐ ํ‘œํ˜„๊ณผ ๋””์ง€ํ„ธ ๋…ผ๋ฆฌ
    • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”
      • 1 ์žฅ ๋“ค์–ด๊ฐ€๊ธฐ
      • 2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด
        • [01] ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • [02] ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • [03] private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
        • [04] ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • [05] ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
        • [06] ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ
        • [07] ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ
        • [08] finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ
        • [09] try-finally ๋ณด๋‹ค๋Š” try-with-resources ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
      • 3์žฅ ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ
        • [10] equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ
        • [11] equals ๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ
        • [12] toString ์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ
        • [13] clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ
        • [14] Comparable ์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ
      • 4์žฅ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
        • [15] ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ
  • ํ† ํ”ฝ
    • ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง
      • CPU ์‚ฌ์šฉ๋Ÿ‰
      • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
      • ์Šค๋ ˆ๋“œ ํ’€
    • Spring Boot Monitoring
      • Spring actuator
      • Spring eureka
      • Prometheus
      • grafana
      • Spring actuator + Prometheus + grafana
    • JAVA ๋ฐ์ผ๋ฆฌ ํ† ํ”ฝ
      • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak)
      • ๊ฐ์ฒด ์ฐธ์กฐ์˜ ์œ ํ˜•
      • ์ปค์Šคํ…€ ์Šค๋ ˆ๋“œ ํ’€
      • Mark And Compact
      • serialVersionUID ์ดํ•ดํ•˜๊ธฐ
      • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค
      • ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
      • equals()์™€ hashCode()๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€
      • StringBuffer vs StringBuilder
      • String vs StringBuilder, StringBuffer
      • String interning
    • JAVA GC
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€๊ธฐ
      • ํ•ด์‹œ
      • ์Šคํƒ/ํ
      • ํž™(Heap)
      • ์ •๋ ฌ
      • ์™„์ „ํƒ์ƒ‰
      • DFS/BFS
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ ๋ฐ ์ž‘๋™ ํ๋ฆ„
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค JOIN ์›๋ฆฌ
    • ๊ฐ์ฒด์ง€ํ–ฅ์ƒํ™œ์ฒด์กฐ ์›์น™
    • ์ƒํƒœ(state), ์ƒ์†(inheritance), ํ•ฉ์„ฑ(composition) ์˜ ์ƒ๊ด€๊ด€๊ณ„
    • java enum์€ ๋ฉ”๋ชจ๋ฆฌ์— ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ํ• ๋‹น๋˜๋Š”๊ฐ€
    • Checked Exception vs UnChecked Exception
    • Reactive Streams ์›๋ฆฌํƒ๊ตฌ - ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ง์ ‘ ์ž‘์„ฑํ•ด๋ณด๊ธฐ
    • Flutter Basic
    • Flutter StatefulWidget ์ƒ๋ช…์ฃผ๊ธฐ
    • Flutter ๊ฐ€ ์œ„์ ฏ์„ ๊ทธ๋ฆฌ๋Š” ์›๋ฆฌ
    • Flutter ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • application layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • environment
        • dependency injection
        • go_router
        • foreground & background
        • ๋‹ค๊ตญ์–ด์ฒ˜๋ฆฌ (l10n, i18n)
        • Global ์ฒ˜๋ฆฌ(์‹œ์Šคํ…œ ์ ๊ฒ€, fore->back ๋“ฑ)
        • connection_manager
        • permission_manager
        • push_notification_manager
        • firebase ์—ฐ๋™
      • data layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • network
        • repository
      • domain layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
      • presentation layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • resources
    • ๊ธฐ์ˆ  ๊ด€๋ จ ํฌ์ŠคํŒ… ์ฝ๊ธฐ
  • ๊ธฐํƒ€
    • ์ž‘์—…์ผ์ง€
      • 2023. 10
      • 2023. 09
      • 2023. 08
      • 2023. 07
      • 2023. 06
      • 2023. 05
      • 2023. 04
      • 2023. 03
      • 2023. 02
      • 2023. 01
      • 2022. 12
    • Business Model
      • ์•„์ด๋””์–ด ๋ถˆํŒจ์˜ ๋ฒ•์น™
      • ๋ฆฐ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ
      • ๋ฆฐ ์Šคํƒ€ํŠธ์—…
      • ์ œ๋กœํˆฌ์›
      • MIT ์Šคํƒ€ํŠธ์—… ๋ฐ”์ด๋ธ”
      • ๋ฆฐ์น˜ํ•€
    • ๋ฐฑ๋กœ๊ทธ ์ข…ํ•ฉ
Powered by GitBook
On this page
  • GC๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด โ€˜stop-the-worldโ€™
  • GC์˜ ๋Œ€์ƒ, ๋ฌด์—‡์ด ๊ฐ€๋น„์ง€์ธ๊ฐ€
  • ์ •๋ฆฌ
  • GC๋Š” ์–ธ์ œ ๋™์ž‘ํ•ด์•ผ ํ• ๊นŒ, ์ž์ฃผ ๋™์ž‘ํ•  ์ˆ˜๋ก ์ข‹์€ ๊ฑด๊ฐ€?
  • GC์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์— ๋”ฐ๋ฅธ ์ž‘๋™์›๋ฆฌ
  • ์™œ Survivor์€ ๋‘ ๊ฐœ ์ธ๊ฐ€?
  1. ํ† ํ”ฝ

JAVA GC

PreviousString interningNextํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€๊ธฐ

Last updated 1 year ago

๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์ œ๋“ค์ด ๊ทธ๋ ‡๊ฒ ์ง€๋งŒ ํŠนํžˆ GC์— ๋Œ€ํ•ด์„œ๋Š” ๋งค์šฐ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” ์ด๋ฏธ ๋‚˜์™€์žˆ๋Š” ์—ฌ๋Ÿฌ ์ข‹์€ ๋ ˆํผ๋Ÿฐ์Šค๋“ค์ด ๋งŽ๋‹ค. ๋ฐœํ–‰๋œ์ง€๋Š” ์ข€ ๋ฌ์ง€๋งŒ ์ด GC๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์œ„ ํฌ์ŠคํŒ…์„ ๊ธฐ์ค€์œผ๋กœํ•˜์—ฌ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ฐพ์•„๊ฐ€๋ฉด์„œ JVM์˜ GC์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ๋‹ค.

GC๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด โ€˜stop-the-worldโ€™

GC์—ญ์‹œ ํ•˜๋‚˜์˜ ์ฒ˜๋ฆฌ์ด๋ฏ€๋กœ ์ž์›์„ ๋Œ์–ด๋‹ค ์“ฐ๋Š” ํ–‰์œ„์ด๋‹ค. GC๋Š” โ€˜stop-the-worldโ€™์˜ ๊ฐœ๋… ์•„๋ž˜์—์„œ ๋™์ž‘ํ•œ๋‹ค. โ€˜stop-the-worldโ€™๋ž€ GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ JVM์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. GC์˜ ๋™์ž‘์„ ์œ„ํ•ด์„œ JVM์ด โ€˜stop-the-worldโ€™๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. GC์˜ ๋™์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํƒํ•˜๋”๋ผ๋„ GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” โ€˜stop-the-worldโ€™ ํ™˜๊ฒฝ ์•„๋ž˜์—์„œ ๋™์ž‘ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ GC ํŠœ๋‹์„ ํ•œ๋‹ค๋ฉด ๋Œ€๊ฒŒ โ€˜stop-the-worldโ€™ ํ™˜๊ฒฝ์— ๋ฌถ์ธ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

GC์˜ ๋Œ€์ƒ, ๋ฌด์—‡์ด ๊ฐ€๋น„์ง€์ธ๊ฐ€

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ตญ์—” โ€˜๊ฐ€๋น„์ง€โ€™๋ผ๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ทœ์ •ํ•˜๋А๋ƒ๊ฐ€ ์ค‘์š”ํ•ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€๋น„์ง€๋Š” โ€˜์–ด๋– ํ•œ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์œ ํšจํ•œ ์ฐธ์กฐ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ฐ์ฒดโ€™ ๋ฅผ ๋œปํ•œ๋‹ค. ์ฆ‰, ์กด์žฌํ•  ์˜๋ฏธ๊ฐ€ ์—†๋Š”๋ฐ(=์“ฐ์ด์ง€๋„ ์•Š๋Š”๋ฐ) ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์ž๋ฆฌ๋งŒ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋” ์••์ถ•์ ์œผ๋กœ ๋งํ•˜๋ฉด ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๊ณง ๊ฐ€๋น„์ง€์ด๋‹ค. reachable vs unreachable ์— ๋Œ€ํ•œ ํŒ๋‹จ์ด ๋๋‚˜๊ณ  unreachable๋กœ ํŒ๋‹จ๋˜๋ฉด ๊ฐ€๋น„์ง€๋กœ ๊ฐ„์ฃผ๋˜์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ ์ดํ•ดํ•œ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋Œ€์ „์ œ : GC๋Š” running time์— ๊ณ„์†ํ•ด์„œ ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” heap ๊ณต๊ฐ„์—์„œ ํ™œ๋™ํ•œ๋‹ค.

  • GC๋Š” GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถฐ์ง„ โ€˜stop-the-worldโ€™ ์ƒํƒœ์—์„œ ์ž‘๋™ํ•œ๋‹ค.

  • ๊ฐ€๋น„์ง€๋ผ๋Š” ๊ฒƒ์€ unreachableํ•œ ๊ฐ์ฒด(์œ ํšจํ•œ ์ฐธ์กฐ๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ฐ์ฒด)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

GC๋Š” ์–ธ์ œ ๋™์ž‘ํ•ด์•ผ ํ• ๊นŒ, ์ž์ฃผ ๋™์ž‘ํ•  ์ˆ˜๋ก ์ข‹์€ ๊ฑด๊ฐ€?

GC๋Š” โ€˜stop-the-worldโ€™ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ ์ž์ฒด๊ฐ€ ๋ถ€๋‹ด์ด๊ฑฐ๋‹ˆ์™€, ๋ณต์žก๋„๊ฐ€ ํฌ๊ณ  ๊ทœ๋ชจ๊ฐ€ ํฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ ์ˆ˜๋ก ํ•œ๋ฒˆ GC๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋น„์šฉ์ผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ํšจ์œจ์˜ ๋ฌธ์ œ๋ฅผ ๊ฐ์•ˆํ•˜์—ฌ ์ตœ์ ์œผ๋กœ GC๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ GC ์ž‘๋™ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๊ตฌ์—ญ๊ณผ ์ด์— ๋”ฐ๋ผ ์ž‘๋™ ์‹œ๊ธฐ๊ฐ€ ๊ตฌ๋ถ„๋˜์–ด ์ž‘๋™ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๊ตฌ๋ถ„๊ณผ ์ž‘๋™ ์‹œ๊ธฐ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„์€ ์•„๋ž˜ ๊ฐ€์„ค์„ ์ „์ œ๋กœ ํ•œ๋‹ค.(โ€˜์•ฝํ•œ ์„ธ๋Œ€ ๊ฐ€์„คโ€™ ์ด๋ผ๊ณ  ์นญํ•œ๋‹ค)

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ(unreachable)๊ฐ€ ๋œ๋‹ค.

  • ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

์‰ฝ๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด โ€˜๋ณดํ†ต์€ ํ•œ๋ฒˆ ์“ฐ๊ณ  ์•ˆ์“ฐ๋Š” ๊ฐ์ฒด๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ณ , ๋งŒ๋“ ์ง€ ์˜ค๋ž˜๋œ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๊ฐ–๋‹ค ์“ธ ์ผ์ด ๊ฑฐ์˜ ์—†๋‹คโ€™๋Š” ๋œป์ด๋‹ค. ์ด ์ „์ œ๋ฅผ GC์ž…์žฅ์—์„œ ํ•ด์„ํ•˜์ž๋ฉด โ€˜์ง€๊ธˆ unreachableํ•œ ์ƒํƒœ๋ผ๋ฉด ์•ž์œผ๋กœ๋„ unreachableํ•œ ์ƒํƒœ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ˆ๊นŒ ์ง€์›Œ๋„ ๋˜๊ฒ ์ง€โ€™ ๋ผ๋Š” ํ•ด์„์ด ๋œ๋‹ค.

GC์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์— ๋”ฐ๋ฅธ ์ž‘๋™์›๋ฆฌ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ Young, Old ๋‘ ๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ฐ ์˜์—ญ์—์„œ GC๊ฐ€ ๋”ฐ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์‚ด์•„ ๋‚จ์€ ๊ฐ์ฒด๊ฐ€ promotion ๋˜๋Š” ์›๋ฆฌ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค. Young์—์„œ ์‚ฌ์šฉ๋˜๋Š” GC๋ฅผ Minor GC๋ผ๊ณ  ํ•˜๋ฉฐ Old์—์„œ ์‚ฌ์šฉ๋˜๋Š” GC๋ฅผ Major GC๋ผ๊ณ  ํ•œ๋‹ค.

1) Young์€ Eden์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ์˜์—ญ๊ณผ Survivor์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง€๋Š”๋ฐ, ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ์ด ๋˜๋ฉด ๋ฌด์กฐ๊ฑด Eden์— ์ƒ์„ฑ์ด ๋œ๋‹ค.

2) ๊ณ„์†ํ•ด์„œ Eden์— ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ด ๋˜์–ด ์ƒˆ๋กœ ์ƒ์„ฑ๋  ์ž๋ฆฌ๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋˜๋ฉด Minor GC๊ฐ€ ๋™์ž‘ํ•œ๋‹ค. ์ด ๋•Œ Eden์—์„œ unreachableํ•œ ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํšŒ์ˆ˜ ๋˜๋ฉฐ reachableํ•œ ๊ฒƒ์€ Survivor๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

3) Survivor๋กœ ์˜ฎ๊ฒจ์ง„ ๊ฒƒ๋„ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค. Minor GC๊ฐ€ ์ž‘๋™ํ•  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š”๋ฐ, 1~2์˜ ๊ณผ์ •์— ์˜ํ•ด์„œ Survivor์— ๋ˆ„์ ์ ์œผ๋กœ ์Œ“์ด๋‹ค๊ฐ€ Survivor๋„ ํฌํ™”๊ฐ€ ๋˜๋ฉด ๋‹ค๋ฅธ Survivor๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

4) Survivor๊ฐ€ ํฌํ™”๊ฐ€ ๋˜๋ฉด ๊ฒฐ๊ตญ Old ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค. 1~4์˜ ๊ณผ์ •์œผ๋กœ Old์— ๊ณ„์†ํ•ด์„œ ์Œ“์ด๋‹ค๊ฐ€ Old๊ฐ€ ๊ฝ‰์ฐจ๋ฉด ๊ทธ๋•Œ Major GC๊ฐ€ ๋™์ž‘ํ•˜์—ฌ Old ์˜์—ญ์„ ์ •๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

cf) Old์˜ ๊ฐ์ฒด๊ฐ€ Young์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ card table์— ๊ธฐ๋ก์œผ๋กœ ์Œ“๊ฒŒ ๋˜๋ฉฐ Minor GC๊ฐ€ ๋™์ž‘ํ•  ๋•Œ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ๊ณ ํ•˜์—ฌ Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” Young์€ ํšŒ์ˆ˜๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

์™œ Survivor์€ ๋‘ ๊ฐœ ์ธ๊ฐ€?

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค. ์ฆ‰ ๊ณ„์† ํ• ๋‹น์„ ํ•ด์ฃผ๊ณ  ํšŒ์ˆ˜๋ฅผ ํ•ด์ฃผ๊ณ  ํ•˜๋Š” ์‚ฌ์ด์— ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ด ๋นˆ๊ณต๊ฐ„์ด ๋‚จ์•„๋Š” ์žˆ์ง€๋งŒ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋นˆํ‹ˆ์ด ์ƒ๊ฒจ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ์ชฝ Survivor์—์„œ ๋‹ค๋ฅธ ํ•œ ์ชฝ Survivor๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ๋นˆ๊ณต๊ฐ„์„ ์—†์• ๊ณ  ์˜ˆ์˜๊ฒŒ ์ ์žฌํ•˜๋Š” ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€ ๋” ์ด์ƒ ๋‹ด์„ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด Old ๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ Survivor์— ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์—ฌ ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜๋Š” ๋น„์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ์ •์ƒ์ธ ๊ฒƒ์ด๋‹ค.

  1. Minor GC:

    • ์ด๋Š” ์ฃผ๋กœ "Young Generation" ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    • ์ด ์˜์—ญ์€ ๋‹ค์‹œ "Eden" ์˜์—ญ๊ณผ ๋‘ ๊ฐœ์˜ "Survivor" ์˜์—ญ(S0, S1)์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘ ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ ํ• ๋‹น๋˜๋Š” ๊ณณ์ด "Eden" ์˜์—ญ์ž…๋‹ˆ๋‹ค.

    • Minor GC๋Š” "Eden" ์˜์—ญ์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋•Œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ "Survivor" ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ GC๋ฅผ ๊ฑฐ์นœ ํ›„ ์—ฌ์ „ํžˆ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ "Old Generation" ์˜์—ญ์œผ๋กœ ํ”„๋กœ๋ชจ์…˜๋ฉ๋‹ˆ๋‹ค.

  2. Full GC (Major GC):

    • ์ด๋Š” "Old Generation" ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    • ์ด ์ž‘์—…์€ ์ „์ฒด ํž™ ์˜์—ญ(Young + Old)์— ๋Œ€ํ•œ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํŒจ๋Ÿฌ๋Ÿด GC์—์„œ Major GC๋Š” ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ํŠœ๋‹ ์ž‘์—…์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. Minor GC ๋ฐœ์ƒ: Young Generation์— ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  2. Survivor ์˜์—ญ์˜ ์—ญํ• : Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ (์ฆ‰, ์•„์ง ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์€) ์ฒซ ๋ฒˆ์งธ Survivor ์˜์—ญ(S0)์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ด๋™๊ณผ ์ •๋ฆฌ: ๋‹ค์Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, Eden ์˜์—ญ์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด์™€ S0์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ๋‘ ๋ฒˆ์งธ Survivor ์˜์—ญ(S1)์œผ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์˜ค์ง ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ™œ์„ฑ ๊ฐ์ฒด๋งŒ์ด S1์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. S0์— ์žˆ๋˜ ๋‚˜๋จธ์ง€ ๊ฐ์ฒด๋“ค(๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค)์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

  4. ์ปดํŒฉ์…˜: ์ด ๊ณผ์ •์—์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋นˆ ๊ณต๊ฐ„์„ ๋ถ™์—ฌ์„œ ๋‹จํŽธํ™”๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด, ๊ณ„์†์ ์ธ Minor GC๋ฅผ ๊ฑฐ์นœ ํ›„์—๋„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

  5. ๋‚˜์ด ์ฆ๊ฐ€: ๊ฐ์ฒด๊ฐ€ Survivor ์˜์—ญ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋ฉด์„œ ๊ทธ ๊ฐ์ฒด์˜ ๋‚˜์ด๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๋‚˜์ด๊ฐ€ ํŠน์ • ์ž„๊ณ„๊ฐ’์„ ๋„˜์œผ๋ฉด, ๊ทธ ๊ฐ์ฒด๋Š” Old Generation์œผ๋กœ ํ”„๋กœ๋ชจํŠธ(promote)๋ฉ๋‹ˆ๋‹ค.

  6. Survivor ์˜์—ญ์˜ ๊ตํ™˜: ๋งค๋ฒˆ Minor GC๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค S0์™€ S1์€ ๊ตํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ๋ฒˆ GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚˜๋ฉด, ์ด์ „์— S1์ด์—ˆ๋˜ ์˜์—ญ์ด S0์ด ๋˜๊ณ , ์ด์ „์— S0์ด์—ˆ๋˜ ์˜์—ญ์ด S1์ด ๋ฉ๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ D2์—์„œ ๋‚˜์˜จ ํฌ์ŠคํŒ…
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜