Skip to content

Latest commit

Β 

History

History
38 lines (25 loc) Β· 2.13 KB

@Async.md

File metadata and controls

38 lines (25 loc) Β· 2.13 KB

@Async

Springμ—μ„œ 비동기 처리λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법

  • Application 클래슀 λ˜λŠ” κ΄€λ ¨ Configuration ν΄λž˜μŠ€μ— @EnableAsync μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€
  • 별도 μŠ€λ ˆλ“œμ—μ„œ λΉ„λ™κΈ°λ‘œ μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” λ©”μ„œλ“œμ— @Async μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€

λ™μž‘ 원리

  • proxyλ₯Ό 이용
  • 즉, @Asyncκ°€ 달린 λ©”μ„œλ“œλŠ” ν”„λ‘μ‹œ 객체λ₯Ό 톡해 μ‚¬μš©ν•  μŠ€λ ˆλ“œ μ„ μ • 및 μž‘μ—… ν• λ‹Ήμ΄λΌλŠ” νš‘λ‹¨ 관심사 둜직이 μˆ˜ν–‰λœ 후에 호좜됨
  • λ”°λΌμ„œ, μ ‘κ·Ό μ œμ–΄μžκ°€ public이어야 ν•˜λ©° self-invocation이 λΆˆκ°€λŠ₯

λ°˜ν™˜ νƒ€μž…

void

  • λ©”μ„œλ“œμ˜ λ°˜ν™˜ κ²°κ³Όκ°€ μ–΄λ”˜κ°€μ—μ„œ 쓰이지 μ•Šμ„ λ•Œμ—λŠ” 아무것도 λ°˜ν™˜ν•˜μ§€ μ•Šλ„λ‘ μ²˜λ¦¬ν•˜λ©΄ 됨

Future, CompletableFuture

  • λ°˜ν™˜ κ²°κ³Όλ₯Ό 톡해 좔가적인 μ²˜λ¦¬κ°€ 이루어져야 ν•˜λŠ” 경우 μœ„μ˜ 2가지λ₯Ό λ°˜ν™˜ν•  수 있음
  • 더 μ„Έλ°€ν•œ μ»¨νŠΈλ‘€μ„ μ›ν•˜κ³ , Java 8 μ΄μƒμ˜ 버전을 μ“΄λ‹€λ©΄ ν›„μž μͺ½μ΄ μ’€ 더 λ‚˜μ€ 선택이라 λ³Ό 수 있음

Executor

  • κΈ°λ³Έκ°’μœΌλ‘œ μ„€μ •ν•˜λ©΄ SimpleAsyncTaskExecutorλ₯Ό μ‚¬μš©
    • 비동기 둜직이 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” Executor
  • 맀번 μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 것은 λ‹€μŒκ³Ό 같은 문제λ₯Ό 가짐
    • λ„ˆλ¬΄ λ§Žμ€ μŠ€λ ˆλ“œκ°€ 생성될 수 있음 - 100만 개 μš”μ²­μ΄ 였면 100만 개 μŠ€λ ˆλ“œλ₯Ό λ§Œλ“œλŠ”λ°?
    • 맀번 μŠ€λ ˆλ“œλ₯Ό μƒˆλ‘œ λ§Œλ“œλŠ” 것은 μŠ€λ ˆλ“œ 생성 λΉ„μš©μ„ κ³Όλ„ν•˜κ²Œ μ§€λΆˆν•˜λŠ” 일
  • λ”°λΌμ„œ, μ»€μŠ€ν…€ ThreadPoolTaskExecutorλ₯Ό λ§Œλ“€μ–΄ μ μ ˆν•œ 개수의 μŠ€λ ˆλ“œ 풀을 μ΄μš©ν•  것을 ꢌμž₯
    • λ‚˜λŠ” 이 μ»€μŠ€ν…€ Executorλ₯Ό AsyncConfig에 λͺ¨μ•„두고, ν•΄λ‹Ή Config에 @EnableAsyncλ₯Ό λΆ™μ—¬λ†“λŠ” 방식을 μ‚¬μš© 쀑

μ˜ˆμ™Έ 처리

  • λ‹Ήμ—°ν•œ λ§μ΄μ§€λ§Œ, 비동기 λ‘œμ§μ€ 호좜 μ‹œμ λΆ€ν„° 별도 μŠ€λ ˆλ“œλ‘œ λΆ„λ¦¬λ˜λ―€λ‘œ μ˜ˆμ™Έκ°€ ν˜ΈμΆœμžμ—κ²Œ μ „νŒŒλ˜μ§€ μ•ŠμŒ
  • λ°˜ν™˜κ°’μ„ 콜백으둜 μ „λ‹¬λ°›λŠ” λ©”μ„œλ“œμ—μ„œλŠ” μ˜ˆμ™Έμ²˜λ¦¬κ°€ 어렡지 μ•Šμ§€λ§Œ, λ°˜ν™˜κ°’μ΄ void인 경우AsyncUncaughtExceptionHandlerλ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ λ³„λ„μ˜ μ˜ˆμ™Έ 핸듀링을 ν•΄ μ€˜μ•Ό 함