๐ Study
[Kotlin/์ฝํ๋ฆฐ ์ฝ๋ฃจํด์ ์ ์] 1์ฅ. ์ค๋ ๋ ๊ธฐ๋ฐ ์์ ์ ํ๊ณ์ ์ฝ๋ฃจํด์ ๋ฑ์ฅ
์ ์ด
2024. 5. 8. 22:30
๋ฐ์ํ
JVM ํ๋ก์ธ์ค์ ์ค๋ ๋
์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๊ณผ์
- JVM์ด ํ๋ก์ธ์ค ์์
- ๋ฉ์ธ ์ค๋ ๋ ์์ฑ
- `main` ํจ์ ๋ด๋ถ์ ์ฝ๋๋ค์ ์ํ
- `main` ํจ์ ๋ด๋ถ์ ์ฝ๋๊ฐ ๋ชจ๋ ์คํ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ
๐ก JVM ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋จ์ผ ์ค๋ ๋๋ก ํด์ ์คํ๋๋ฉฐ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ข ๋ฃ๋จ
๋จ์ผ ์ค๋ ๋์ ํ๊ณ์ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ
๋จ์ผ ์ค๋ ๋์ ํ๊ณ
- ํด์ผ ํ ์์ ์ด ๋ค๋ฅธ ์์ ์ ์ํด ๋ฐฉํด๋ฐ๊ฑฐ๋ ์์ ์๋๊ฐ ๋๋ ค์ง ์ ์์ → ์๋ต์ฑ์ ๋ฌธ์
๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ
- ๋ณ๋ ฌ ์ฒ๋ฆฌ(Parallel Processing)
- ์ค๋ ๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํด ์์ ์ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
- ๋ฉ์ธ ์ค๋ ๋์ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์์ฒญ๋์ ๋, ์ด ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ฒ๋ฆฌํ๋๋ก ํจ
- โ๏ธ ์์ ์์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ์์ ๋์๋ง ๋ณ๋ ฌ ์คํ์ด ๊ฐ๋ฅ!
์ค๋ ๋, ์ค๋ ๋ํ์ ์ฌ์ฉํ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ
Thread ํด๋์ค
Thread ํด๋์ค ์ฌ์ฉ
class ExampleThread: Thread() {
override fun run() {
// TO DO SOMETHING
}
}
- Thread ํด๋์ค๋ฅผ ์์ํ๋ ํด๋์ค ์์ฑ
- ๋ฉ์ธ ์ค๋ ๋์์ ๊ด๊ณ
- ๋ฉ์ธ ์ค๋ ๋ ์์
- ์๋ก์ด ์ค๋ ๋ ์์
- ๋ฉ์ธ์ค๋ ๋ ์ข ๋ฃ
- ์๋ก์ด ์ค๋ ๋ ์ข ๋ฃ(๋ฉ์ธ ์ค๋ ๋๋ณด๋ค ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ ๊ฒฝ์ฐ)
- ํ๋ก์ธ์ค ์ข ๋ฃ
๐ ์ฌ์ฉ์ ์ค๋ ๋์ ๋ฐ๋ชฌ ์ค๋ ๋
- ์ฌ์ฉ์ ์ค๋ ๋: ์ฐ์ ๋๊ฐ ๋์ ์ค๋ ๋ / ๋ฐ๋ชฌ ์ค๋ ๋: ์ฐ์ ๋๊ฐ ๋ฎ์ ์ค๋ ๋
- ์ฐ์ ๋๊ฐ ๋์ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ๋ชจ๋ ์ข ๋ฃ๋ ๋ JVM ํ๋ก์ธ์ค ์ข ๋ฃ
- ์ฌ์ฉ์ ๋ฐ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋ ๊ฒฝ์ฐ, ๋ฐ๋ชฌ ์ค๋ ๋๋ ์คํ ์ค์ ๊ฐ์ ์ข ๋ฃ ๋๋ค. → ์ ์ ์ข ๋ฃ
๐ thread ํจ์ ์ฌ์ฉํ๊ธฐ
fun main() {
thread(isDaemon=false){
// TO DO SOME PARALLEL THING
}
}
- `thread(){}` : ์๋ก์ด ์ค๋ ๋์์ ์คํํด์ผํ๋ ์์ ์ด ์์ ๋๋ง๋ค Thread ํด๋์ค๋ฅผ ์์๋ฐ์ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์
Thread ํด๋์ค์ ํ๊ณ
- ์์ฑ ๋น์ฉ์ด ๋น์ผ ์ค๋ ๋ → ์ฑ๋ฅ ์ด์
- ์์ฑ, ๊ด๋ฆฌ์ ๋ํ ์ฑ ์์ด ๊ฐ๋ฐ์์๊ฒ ์์ → ํ๋ก๊ทธ๋จ ๋ณต์ก์ฑ ์ฆ๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ
Executor ํ๋ ์์ํฌ๋ฅผ ํตํด ์ค๋ ๋ํ ์ฌ์ฉํ๊ธฐ
- ์ค๋ ๋ํ์ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์๋ก๋ถํฐ ์์ฒญ๋ฐ์ ์์ ์ ๊ฐ ์ค๋ ๋์ ํ ๋นํ๋ ์์คํ
- ์ค๋ ๋ํ์ ์ํ ์ค๋ ๋์ ์์ฑ๊ณผ ๊ด๋ฆฌ ๋ฐ ์์ ๋ถ๋ฐฐ์ ๋ํ ์ฑ ์์ ๋ด๋น → ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด๋ฆฌํ์ง ์์๋ ๋จ
Executor Service
- ์ค๋ ๋ํ์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- Blocking Queue (์์ ๋๊ธฐ์ด) : ํ ๋น ๋ฐ์ ์์ ์ ์ ์ฌ
- Thread Pool (์ค๋ ๋ ํ): ์์ ์ ์ํํ๋ ์ค๋ ๋์ ์งํฉ
fun main() {
val executorService: ExecutorService = Executors.newFixedThreadPool(2)
executorService.submit { // Executor Service์ ์์
์ ์ถ
...
}
}
์์์ ํ๊ณ
- ๊ฐ๋ฐ์๊ฐ ๋ ์ด์ ์ค๋ ๋๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ ์ค๋ ๋์ ์ฌ์ฌ์ฉ์ ํธํ๊ฒ ํ ์ ์๋๋ก ๋ง๋ค์ด์ค
- `Thread Blocking`
- ์ค๋ ๋๊ฐ ์๋ฌด๊ฒ๋ ํ์ง ๋ชปํ๊ณ ์ฌ์ฉ๋ ์ ์๋ ์ํ
- ๋์ ๊ฐ๊ฒฉ์ผ๋ก ์ธํด ์ฌ์ฉ๋ ์ ์๋ ์ํ์ ๋์ด๋ ๊ฒ์ด ๋ฐ๋ณต๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ ํ ์ด๋
- ์ ์ถํ ์์ ์์ ๊ฒฐ๊ณผ(Future ๊ฐ์ฒด)๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ๊น์ง ์ค๋ ๋ ๋ธ๋กํน์ด ๋ฐ์
๊ธฐ์กด ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ์ ์ฝ๋ฃจํด
๊ธฐ์กด ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ
- ์ค๋ ๋ ๋ธ๋กํน: ์ค๋ ๋๋ผ๋ ๋น์ผ ์์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ฆ → ์ฑ๋ฅ์ ์น๋ช ์
- ์์ ๊ฐ์ ์ข ์์ฑ์ด ๋ณต์กํด์ง์๋ก ์ค๋ ๋ ๋ธ๋กํน ๋ฐ์ ํ๋ฅ ์ด ๋์
์ฝ๋ฃจํด์ ์ค๋ ๋ ๋ธ๋กํน ๋ฌธ์ ํด๊ฒฐ
- ์ฝ๋ฃจํด: ์ค๋ ๋์์ ์์ ์คํ ๋์ค ์ผ์ ์ค๋จํ ์ ์๋ ์์ ๋จ์
๋์ ๋ฐฉ์
- ์ฝ๋ฃจํด ์์ ์ผ์ ์ค๋จ: ์ฝ๋ฃจํด 1 ์ํ ๋์ค ์ฝ๋ฃจํด 2 ๊ฒฐ๊ณผ ํ์ (์ผ์ ์ค๋จ)
- ๋์ด์ ์ค๋ ๋ ์ฌ์ฉ์ด ํ์ํ์ง ์์ → ์ค๋ ๋์ ์ฌ์ฉ ๊ถํ์ ์๋ณด
- ์๋ณด๋ ์ค๋ ๋๋ ๋ค๋ฅธ ์์ ์ ์คํ: ์ฝ๋ฃจํด 3 ์ํ
- ์ฌ๊ฒ ์์ ์ ๋ค์ ์ค๋ ๋์ ํ ๋น๋์ด ์คํ: ์ฝ๋ฃจํด 1 ๋ง์ ์ํ
์ฅ์
- ์ฝ๋ฃจํด์ด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ง ์์ ๋, ์ค๋ ๋ ์ฌ์ฉ ๊ถํ์ ์๋ณดํ๋ ๋ฐฉ์์ผ๋ก ์ค๋ ๋ ์ฌ์ฉ์ ์ต์ ํ ํ๊ณ ์ค๋ ๋๊ฐ ๋ธ๋กํน๋๋ ์ํฉ์ ๋ฐฉ์ง
- ์ค๋ ๋์ ๋นํด ์์ฑ๊ณผ ์ ํ ๋น์ฉ์ด ์ ๊ฒ ๋ค๊ณ , ์ค๋ ๋์ ์์ ๋กญ๊ฒ ๋๋ค ๋ถ์๋ค ํ ์ ์์ → ์์ ์ ์์ฑํ๊ณ ์ ํํ๋ ๋ฐ ํ์ํ ๋ฆฌ์์ค์ ์๊ฐ์ด ๋งค์ฐ ์ค์ด๋ฆ (๊ฒฝ๋ ์ค๋ ๋)
- ์ค๋ ๋ ๋ธ๋กํน ์์ด ๋น๋๊ธฐ์ ์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ ์ ์์ → ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ฑ ํฅ์
http://www.acornpub.co.kr/book/kotlin-coroutines
์ฝํ๋ฆฐ ์ฝ๋ฃจํด์ ์ ์
๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด๋ ต๊ฒ ๋๋ผ๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ค์ํ ์๊ฐ์ ์๋ฃ์ ์ค๋ช ์ ํตํด ๋๊ตฌ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ฐ์ธ ์ฑ ์ด๋ค.
www.acornpub.co.kr
๐ํ๊ธฐ๐
Spring Boot - Kotlin ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์ฝ๋ฃจํด์ ๋ํ ๋ ๊น์ ์ง์์ด ํ์ํด ์ฐพ๋ค ๋ฐ๊ฒฌํ ์ฑ .
ํ๊ตญ์ธ ์ ์ ๋ถ์ด์ด์ ๊ทธ๋ฐ์ง ์ ๋ฐ์ ์ผ๋ก ์ดํดํ๊ธฐ ๊ต์ฅํ ์ฝ๊ฒ ๋์ด์๊ณ ,
๊ธฐ์กด ์ฝํ๋ฆฐ ์ฑ ์์๋ ์ฝ๊ฒ ๋ค๋ค์ง์ง ์๋ ๋ ๋ฅํ ์ฝ๋ฃจํด ๊ธฐ๋ฅ๊น์ง ์ ์ ์์.
(์ง๊ธ๊น์ง ์ฝ์ ๊ธฐ์ ์ ์ค ์ค๋ฌด์์ ๊ฐ์ฅ ์ ์ฐ๊ณ ์๋ ์ฑ ...๊ฐ์ฅ ์ ์ ์ฝํ ์ฑ ...๐)
SpringBoot-Kotlin ํ๊ฒฝ์์ ์ฝ๋ฃจํด์ ๋ ๊ณต๋ถํ๊ณ ์ถ๋ค๋ฉด ์ ๋ง ๊ฐ์ถ ํ์ ํ์ ๐๐ฅ๐๐ฅ๐๐ฅ๐๐ฅ๐๐ฅ
๋ฐ์ํ