์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- docker
- prod docker-compose
- JPA
- private subnet ec2 ๋ก์ปฌ ์ ์
- docker ps -a
- nGrinder
- redis ํ ์คํธ์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- Codedeploy ์ค๋ฅ
- ํ๋ก๊ทธ๋๋จธ์ค
- aws ์ฟ ํฐ
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- ์คํํ๋ ๋ฏธ์ค
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- Entity
- ํ์ดํผ๋ฐ์ด์
- AWS Certified Solutions Architect - Associate
- ๋ค์ค ์ปจํ ์ด๋
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- Kafka
- aws saa ํฉ๊ฒฉ
- ์๋ฐ
- s3 log ์ ์ฅ
- redis ์กฐํ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- docker-compose kafka
- docker compose
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 1. ์๋ฐ ๊ธฐ์ ์์คํ ๋ณธ๋ฌธ
[REVIEW] JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ - 1. ์๋ฐ ๊ธฐ์ ์์คํ
๐คRyusun๐ค 2025. 2. 1. 10:31์๋ฐ
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฟ ์๋๋ผ ์ฌ๋ฌ๊ฐ์ง ์ํํธ์จ์ด์ ๋ช ์ธ๋ก ๊ตฌ์ฑ๋ ๊ธฐ์ ์์คํ
- ํฌ๋ก์ค ํ๋ซํผ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ ๊ณต
- ์๋นํ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ๊ฐ์ท๋ค.
- ๋ฐํ์์ ํซ์ฝ๋๋ฅผ ๊ฐ์ง, ์ปดํ์ผํ๊ณ ์ต์ ํํ์ฌ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต์์ ์ฑ๋ฅ์ ๋ด๋๋ก ๋์์ค๋ค.
- ํ์ค API ํ๋ถ, ์๋ง์ ๊ธฐ์ ๊ณผ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์๋ฐ ๊ธฐ์ ์์คํ
์ผ๋ฐ์ ์ผ๋ก ์๋ฐ ๊ฐ์ ๋จธ์ ์์์ ๋์ํ๋ ์ฝํ๋ฆฐ, ํด๋ก์ , JRuby, ๊ทธ๋ฃจ๋น ๋ฑ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ทธ ์ธ ๊ด๋ จ ํ๋ก๊ทธ๋จ๋ค๋ ์๋ฐ ๊ธฐ์ ์์คํ ์ ์ํ๋ค.
์ ํต์ ์ผ๋ก ์๋ฐ ๊ธฐ์ ์์คํ ์ ๋ค์ ์์๋ค์ ํฌํจํ๋ค.
- ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- (๋ค์ํ ํ๋์จ์ด ํ๋ซํผ์ฉ) ์๋ฐ ๊ฐ์ ๋จธ์ ๊ตฌํ
- ํด๋์ค ํ์ผ ํฌ๋งท
- ์๋ฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API(ํ์ค API)
- ๋ค๋ฅธ ๊ธฐ์ ๊ณผ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์์ ์ ๊ณตํ๋ ์๋ ํํฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
JDK
- ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ์๋ฐ ๊ฐ์๋จธ์ , ์๋ฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฌถ์๊ฒ.
- ์๋ฐ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ํ์ํ ์ต์ํ์ ํ๊ฒฝ
- JDK ์ฉ์ด๋ ์๋ฐ ๊ธฐ์ ์์คํ ์ ์ฒด ์ธ๋๋ฅผ ์ง์นญํ ๋๋ ์์ฃผ ์ฐ์ธ๋ค.
JRE
- ์๋ฐ SE API์ ์๋ฐ ๊ฐ์ ๋จธ์ ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌ ๊ธฐ์ ๊น์ง ๋ฌถ์๊ฒ.
- ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ ํ์ค ํ๊ฒฝ์ ์ ๊ณต
ํซ์คํ ๊ฐ์๋จธ์
์๋ฒ์ฉ ์ ํ์ฒ๋ผ ์ฅ๊ธฐ๊ฐ ์ด์ฉ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์์ฃผ ์คํ๋๋ ํซ ์ฝ๋๋ฅผ ํ์งํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํ๋ค.
๋ถ๊ณผ ๋ช๋ ์ ๋ง ํ๋๋ผ๋ ๋ง์ CPU์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์์๊ณ CPU์ฝ์ด๊ฐ ํ๋๋ฟ์ธ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ด HotSpot ํด๋ผ์ด์ธํธ ์ปดํ์ผ๋ฌ์ด๋ค.
ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก JIT ์ปดํ์ผ๋ฌ๋ฅผ ๋๊ฐ ๋ด์ฅํ๊ณ ์๋ค.
- ํด๋ผ์ด์ธํธ ์ปดํ์ผ๋ฌ(C1 ์ปดํ์ผ๋ฌ)
- ์ปดํ์ผ ์๋๊ฐ ๋น ๋ฅธ ๋์ ์ต์ ํ๋ฅผ ์ ๊ฒํ๋ค.
- ์๋ฒ ์ปดํ์ผ๋ฌ๋ณด๋ค ๋จผ์ ์ปดํ์ผ์ ์์ํ๋ค.
- Start-Up ์๊ฐ์ด ๋น ๋ฅด๋ค. ํ์ง๋ง ์ต์ ํ๊ฐ ๋ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์คํ์ ์๋ฒ๊ฐ ๋ ๋น ๋ฅด๋ค.
- ์๋ฒ ์ปดํ์ผ๋ฌ(C2 ์ปดํ์ผ๋ฌ)
- ์ปดํ์ผ์ ์ ๋ง์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ์ปดํ์ผ ์๋๋ ๋๋ฆฌ์ง๋ง, ๋ ๋ง์ ์ต์ ํ์ ์ค์ ์ ๋๋ค.
- ์๋ฒ ์ปดํ์ผ๋ฌ๋ ์ ๋๋ก ๋ชจ๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ง ์๋๋ค
์ฌ๊ธฐ์ ์ธํฐํ๋ฆฌํฐ๊น์ง ํฌํจํ์ฌ ์ด 3๊ฐ์ ์คํ ๋ฉ์ปค๋์ฆ์ด ํ๋ ฅํ์ฌ ํซ์คํ ๊ฐ์ ๋จธ์ ์ ์คํ ์๋ธ ์์คํ ์ ๊ตฌ์ฑํ๋ค.
์์ ์๋ HotSpot JVM์ด ์ฃผ๋ก ์ฌ์ฉ๋์์ง๋ง, ์ง๊ธ์ GraalVM์ด๋ OpenJ9 ๋ฑ ๋ค์ํ JVM ๊ตฌํ์ด ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ค.
GraalVM์ปดํ์ผ๋ฌ๋ C2์ปดํ์ผ๋ฌ๋ฅผ ๋์ฒดํ ๋ชฉ์ ์ผ๋ก ํซ์คํ์ ๋์ ๋์๋ค.
GraalVM
- Oracle์์ ๊ฐ๋ฐ
- ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ์ปดํ์ผ ์ง์(์ฆ, ๋น ๋ฅธ ์์ ์๋์ ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ)
- ๋ค์ค ์ธ์ด ์ง์(JavaScript, Python, Ruby ๋ฑ)
- ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
- ํ์ฌ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์ด๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๋ฐฐํฌ์์๋ GraalVM๊ณผ ๊ฐ์ ๊ฒฝ๋ํ๋ JVM์ด ์ ํธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ฅ์
- ์ปดํ์ผ๋ ์ฝ๋์ ์ถ๋ ฅ ํ์ง์ด ์ข๋ค.
- ๊ฐ๋ฐ ํจ์จ๊ณผ ํ์ฅ์ฑ ์ธก๋ฉด์์๋ C2์ ๋น๊ตํ๊ธฐ ์ด๋ ค์ธ ๋งํผ ํ๋ฅญํ๋ค.
- ๋ถ๋ถ ํ์ถ ๋ถ์(partial escape analysis) ์ฒ๋ผ C2 ๋ณด๋ค ๋ณต์กํ ์ต์ ํ๋ ์ํํ ์ ์๋ค.
- ๋ํ ๋ง์ถคํ ๊ฐ์ ๋ฑ์ ์ถ๊ฐํด ๊ณต๊ฒฉ์ ์์ธก ์ต์ ํ(aggressivfe speculative optimization)๋ฅผ ์ ์ฉํ๊ธฐ๋ ์์ํ๋ค.
๋ค์ดํฐ๋ธ๋ฅผ ํฅํ ๋ฐ๊ฑธ์
์ฅ์๊ฐ ์คํํ ํ์๊ฐ ์๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์๋ฐ๋ก ๊ฐ๋ฐํ๋ฉด ๋จ์ ์ด ์๋ค.
- HelloWorld๋ฅผ ์คํํ๋ ค ํด๋ ๋ถํ์ํ JRE ๊ฐ ํ์ํ ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ์ค์ฌ์ ๊ฑฐ๋ํ ๋จ์ผ ์ํคํ ์ฒ -> ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๋ก ๋น ๋ฅด๊ฒ ์ฎ๊ฒจ๊ฐ๊ณ ์์ง๋ง, ์๋ฐ๋ ์ด ์ถ์ธ์ ์ ๋ง์ง ์๋๋ค.
๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ์์๋ ๋ถํ ๋ ์๋น์ค ๊ฐ๊ฐ์ด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ธ ์ผ์ ์๋ค. ๊ณ ๊ฐ์ฉ์ฑ ์๋น์ค ํด๋ฌ์คํฐ๋ฅผ ํ์ฉํ๋ฉด ์ธ์ ๋ ์ง ์ค๋จํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๊ธฐ๋๋ฌธ์, ๋จ์ผ ์๋น์ค๋ฅผ ์ค๋จ ์์ด ์คํํ๊ธฐ ์ํด ๋ฆฌ์์ค๊ฐ ์ค์ด๋ ๋ค. ํ์ง๋ง ์๋ฐ๋ ๊ตฌ๋ ์๊ฐ์ด ๊ธธ๊ณ ์ต๊ณ ์ฑ๋ฅ์ ๋ด๊ธฐ ๊น์ง ์์ด์ด ํ์ํ๋ฏ๋ก ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ ์๊ตฌํ๋ ํน์ฑ๊ณผ๋ ๋ฐ๋์ด๋ค.
์ด๋ฌํ ๋จ์ ์ผ๋ก ์ต๊ทผ JDK ์๋ ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ค ๋ฐ์ดํฐ ๊ณต์ (Application Class Data Sharing, AppCDS)์ ๋ ธ์ต(no-op) ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ธ ์ก์ค๋ก ๋ฑ์ ๊ธฐ์ ์ด ํฌํจ๋์๋ค.
AppCDS(Application Class Data Sharing, AppCDS)
- ๋ก๋ฉํ ํด๋์ค ์ ๋ณด๋ฅผ ์บ์ํด ๋์ด ๋ค์๋ฒ ๊ตฌ๋ ์๊ฐ์ ์ค์ด๋ ๊ธฐ์
์ก์ค๋ก
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ง ํด์ค ๋ฟ ํ์๋ ํ์ง์๋ ์ปค๋ ํฐ
- ๊ฐ๋จํ ์์ ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ฆ์ ์ข ๋ฃํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
๋ ๊ธ์ง์ ์ธ ๊ธฐ์ ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ ์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํด๋๋ AOT ์ปดํ์ผ์ด ์๋ค.
AOT(Ahead of Time)
์ฅ์
- ์๋ฐ ๊ฐ์๋จธ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ์ ์คํํํ JIT ์ปดํ์ผ์ ์จ์ ๋น๋ฒํ๊ฒ ์คํ๋๋ ๋ก์ง์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ฐ๊ฟ ์คํํ๋ค.
- ํ์ง๋ง ์ปดํ์ผ์ ๋ฏธ๋ฆฌ ํด๋๋ฉด ์์ด ๊ณผ์ ์ ๊ฑด๋ ๋ฐ๊ณ ์ฒ์๋ถํฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
- ์๊ฐ ์๋ฐ ์์ด ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ์๋ฒฝํ๊ฒ ๋ถ์ํ์ฌ ์ต์ ํํ ์ ์๋ค.
๋จ์
- ํ๋ฒ ์์ฑํ๋ฉด ์ด๋์๋ ์คํ๋๋ ์๋ฐ์ ๋ค๋ฅด๊ฒ, ํ๋์จ์ด์ ์ด์ ์ฒด์ ๋ณ๋ก ๋ฐ๋ก ์ปดํ์ผํด ๋ฐฐํฌํด์ผํ๋ค.
- ์ปดํ์ผํ ์ฝ๋์ ๋ํ ๋ชจ๋ ๊ฒ์ ์ปดํ์ผ ํ์์ ์์ ์์ด์ผ ํ๋ฏ๋ก, ์๋ฐ ๋์ ๋งํฌ ํน์ฑ์ด ํฌ๊ฒ ์ค์ด๋ ๋ค.
์๋ธ์คํธ๋ ์ดํธ VM(Substrate VM)
- ์ฌ์ ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ํซ์คํ ๊ฐ์ ๋จธ์ ์์ด ์คํ๋๋ ๊ธฐ์ ๋ก ๋ ์์ ์ธ ์์ธ ์ฒ๋ฆฌ, ์ค๋ ๋ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์๋ฐ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค ์ ๊ฐ์ถ ์์ ๋ฐํ์ ํ๊ฒฝ
์ฅ์
- ์๋ฐ ๊ฐ์ ๋จธ์ ์ด ์ํํ๋ ์ด๊ธฐํ ๊ณผ์ ์ ๊ฑด๋๋ฐ๊ณ , ํ๋ก๊ทธ๋จ์ ๊ณง๋ฐ๋ก ์คํํ์ฌ ์ด๊ธฐ ๊ตฌ๋ ์๊ฐ์ ์ค์ธ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํฌ๊ฒ ์ค์ฌ์ค๋ค.(ํซ์คํ ๊ฐ์ ๋จธ์ ์ ๊ทธ ์์ฒด๋ก๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค)
๋จ์
- ์ปดํ์ผ๋ฌ๊ฐ ์ฐพ์์ ์๋ ์ฝ๋๋ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ์ฝ์ด๋ค์ผ์ ์์ด ํ๋ก๊ทธ๋จ์ด ์๊ฒฐ๋ ํํ์ฌ์ผ ํ๋ค.
์ฐธ๊ณ
1. https://product.kyobobook.co.kr/detail/S000213057051
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์ ์ฐ์ฆ๋ฐ - ๊ต๋ณด๋ฌธ๊ณ
JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ | ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊น์ํ ๋ด๋ถ๋ฅผ ํฅํด ๋ ๋๋ ํฅ๋ฏธ์ง์งํ ๋ชจํC·C++๋ฅผ ์ฌ์ฉํด ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์์ ๊น๋ค๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ๋ซํผ ์ด์์ฑ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๋ค์
product.kyobobook.co.kr
2. https://isaac1102.github.io/2021/01/16/hotspotjvm
[ JAVA ] HotSpot JVM
์ฌ์ค HotSpot์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ค์์ ๋ ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ์๋ฏธ๋ ํซ์คํ ๋๋ ํซ์คํฟ(์์ด: hotspot)์ ์ค๋งํธํฐ, ๋ ธํธ๋ถ์ ํฌํจํ ์ด๋ ๋จ๋ง๊ธฐ๋ก ๋ผ์ฐํฐ ๋ฑ ๋ฌด์ ์ก์ธ์ค ํฌ์ธํธ๊ฐ ์ค์น๋ ์ง์ญ์์ ๋ฌด
isaac1102.github.io