Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プールにゆこう
Search
irof
March 25, 2024
Programming
2
490
プールにゆこう
関ジャバ'24 3月度
https://kanjava.connpass.com/event/311167/
3月後半でもう春だよなぁプール開きだよなぁと思ってたんだけど、当日クソ寒かった。
irof
March 25, 2024
Tweet
Share
More Decks by irof
See All by irof
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.2k
技術的負債の正体を知って向き合う
irof
0
440
関ジャバと言う場
irof
0
86
型で語るカタ
irof
2
1.4k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
390
複数アプリケーションを育てていくための共通化戦略
irof
9
5.1k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.2k
Javaアプリケーションモニタリングの基本
irof
7
2.8k
Webアプリケーションを作りましょう
irof
0
210
Other Decks in Programming
See All in Programming
The Missing Link in Angular's Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
130
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
660
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
2
1k
flutter_kaigi_2025.pdf
kyoheig3
1
350
Building AI with AI
inesmontani
PRO
0
230
CSC509 Lecture 11
javiergs
PRO
0
310
CSC509 Lecture 10
javiergs
PRO
0
180
モビリティSaaSにおけるデータ利活用の発展
nealle
0
540
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
450
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
4.5k
FlutterKaigi 2025 システム裏側
yumnumm
0
1.1k
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
20
10k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Code Review Best Practice
trishagee
72
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Balancing Empowerment & Direction
lara
5
760
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
680
Six Lessons from altMBA
skipperchong
29
4.1k
Transcript
ϓʔϧʹΏ͜͏ ؔδϟό'24 3݄ @irof h t t ps://irof.me
ϓʔϧ • ͳʹ͔ΛཷΊ͓ͯ͘ͷ • JavaͷੈքͰʮͳʹ͔ʯʹʮΦϒδΣΫτʯ • ͭ·ΓʮϓʔϧʯʹΦϒδΣΫτϓʔϧ • ཷΊͯɺ͑ΔΑ͏ʹ͍ͯ͠Δঢ়ଶ •
ϓʔϧͱ͍͏໊લʮཷΊΔʯʹओ؟͕͋Γͦ͏͕ͩɺ͏ͨΊʹཷΊΔΜͩΑͶͱ • ͳͷͰʮཷΊΔʯͦͷΑ͏ʹݟ͍͑ͯΕɺ࣮ࡍཷ·͍ͬͯͳͯ͘Α͍
ཷΊΔཧ༝ • ͏࣌ʹ࡞ΔͷͰෆ߹͕͋Δ • CPUϝϞϦΛ͏ • ͕͔͔࣌ؒΔ • ... •
ཧ͍ͨ͠ • : ଟ͗ͯ͢ࠔΔͷͱ͔ • ...
ࠓ͢ϓʔϧͨͪ
ίωΫγϣϯϓʔϧ
ίωΫγϣϯϓʔϧɺͨͱ͑ɻ • σʔλϕʔείωΫγϣϯϓʔϧ • : σʔλϕʔεͱͷଓʹ͕͔͔࣌ؒΔ • ௨৴ͷཱ֬ɺೝূɺ΄͔ • :
σʔλϕʔε͕ड͚ೖΕΒΕΔଓʹݶΓ͕͋Δ • σʔλϕʔεαʔόʔͷϦιʔεΛফඅ͢Δ • దʹղ์͠ͳ͍ͱ͍͚ͳ͍
😕
None
☺
• ࠓ͜ͷ͘Β͍ͷղ૾Ͱ͢ɻ
σʔλϕʔείωΫγϣϯϓʔϧΛ͏͜ͱͰ • ίωΫγϣϯΛ͍͍ͨͱ͖ʹίωΫγϣ ϯϓʔϧ͔ΒआΓͯ͘ΔͷͰɺଓ࣌ͷί ετΛલ͍Ͱ͖Δ • ʮΓͳ͍࣌ʹ৽ͨʹଓ͢Δʯͱ͔ ͢ΔͷͰɺৗʹલ͍͢ΔͱݶΒͳ͍ • ෳͷΫϥΠΞϯτͰίωΫγϣϯΛڞ༗
Ͱ͖Δ • ʮ100ΫϥΠΞϯτ͋Δ͔Β100ίωΫ γϣϯཁΔʯͱ͔Ͱͳ͍ • ίωΫγϣϯͷཧΛͤΒΕΔ
ίωΫγϣϯϓʔϧଞʹ • RDBͷίωΫγϣϯϓʔϧʢjavax.sql.DataSourceʣ͕Α͘ݟΔίωΫγϣϯϓʔϧͩ ͕ɺଞͷίωΫγϣϯΛϓʔϧ͢Δͷ͋Δɻͨͱ͑HTTP ClientͷίωΫγϣ ϯɻ • ୯Ұαʔόʔʹશ෦٧Ίࠐ·ͣʹωοτϫʔΫΛհͯ͠৭ʑ͢ΔͷͰɺ͋ͪͪ͜Ͱʮί ωΫγϣϯʯΛѻ͏ɻίωΫγϣϯߴίετͳͷͰɺϓʔϧ͢ΔՁ͕͋Δɻ •
ίωΫγϣϯͷͳʹ͕ߴίετ͔ʁׂѪɻ • ࣗͰ։͍ͨίωΫγϣϯΛ͏߹ͱɺϓʔϧ͞Ε͍ͯΔίωΫγϣϯΛ͏߹Ͱ ΤϥʔϋϯυϦϯάʢϦτϥΠϙϦγʔͱ͔ʣ͕ҟͳΔͱ͔ѻ͏ɻ
εϨουϓʔϧ
εϨουϓʔϧɺͨͱ͑ɻ • ϫʔΧʔεϨουϓʔϧ • ϦΫΤετΛεϨουͰࡹ͘ΞϓϦέʔγϣϯͰग़ͯ͘Δ • : εϨουͷੜʹ࣌ؒίετ͔͔Δ • :
ͨΓʹεϨουΛੜ͢ΔͱJVMͷϦιʔεΛ৯͍௵͢ • : εϨου༻࣌ʹ͏ଆ͕ҙࣝͨ͘͠ͳ͍ܾ·Γࣄ͕͋Γ͕ͪ
None
😖
None
😎
😀
ϫʔΧʔεϨουϓʔϧΛ͏͜ͱͰ • ෳͷϦΫΤετΛಉ࣌ʹࡹ͚ΔΑ͏ ʹͳΔ • Ϣʔβʔ͕1ਓͰҰʹ1ϦΫΤετ͠ ͔͛ͳ͍ͳΒશવཁΒͳ͍ • ͳΒWebΞϓϦʹ͢Δҙຯͳ͍ •
ͷΜͿΖ͖ͬΜ͙ͱ͔͍ͬͯಉ͡Ͱ ͢ɻ͏εϨου֨ஈʹҧ͏͚Ͳɻ
εϨουϓʔϧଞʹ • @AsyncͰΘΕΔඇಉظλεΫεϨου • @ScheduledͰΘΕΔεέδϡʔϥʔεϨου • ͦͷଞҙͷεϨου • εϨουΛ͏࣌εϨουϓʔϧΛ͏ •
java.util.concurrent.ExecutorService εϨουϓʔϧͱࢥͬͯྑ͍ • ݱɺϓϩμΫτͰnew Thread()͢Δ͜ͱͳ͍
ͦͷଞͷϓʔϧɺͨͱ͑ɻ • DIίϯςφ • ʮDIίϯςφʯͨ·ʹʹͳΔ͠Ԍ্͢Δ͚ͲɺಛఆίϯςΩετʹ͓͚ΔΠϯ ελϯεͷੜํ๏Λड͚͍࣋ͬͯΔɻ • : ΠϯελϯεԽʹίετ͕͔͔Δ •
ʮDBίωΫγϣϯʯΠϯελϯε • : ΠϯελϯεΛ࡞ΔͨΊͷύϥϝλ͕ࢄΔͱࠔΔ
ϓʔϧશൠʹݴ͑Δ͜ͱ • ͩͨ͠ΒͲ͢👶 • ͍ऴΘͬͨΒඞͣϓʔϧʹ͢ • ϓʔϧϓʔϧରͷϥΠϑαΠΫϧΛཧ͢Δͷ͕ϑΝΫτϦͳͲͱҧ͏ͱ͜Ζ • ͠ΕͨΓ͢Δͱϓʔϧ͙͢Γͳ͘ͳΔ •
Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ೖ͍ͬͯΔͷͷʢՄมͷͷಛʹʣ
εϨουϓʔϧͰͱ͘ʹ͓͖͍ͬͯͨ͜ͱ • Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ԿݸͷεϨου͕͋Δ͔ • ԿݸͷεϨου͕͍ͯ͘͠͠Δ͔ • Կ݅ͷλεΫ͕ͪड͚த͔ •
ҟৗ࣌Λߟྀ͓ͯ͘͠ • εϨου͕ࢮΜͩΒͲ͏ͳΔ͔ • JVM͕ࢮΜͩ࣌ʹॲཧதͪड͚தͷ͕Ͳ͏ͳΔ͔
ͨͱ͑ɺJDKͰͨ·ʹ͋Γ·͢ • java.net.http.HttpClientͰίωΫγϣ ϯΛϓʔϧʹฦ͠ΕΔͬͯόά • 11.0.8ҎલͬͯΔͱى͜Δ
WEBΞϓϦʹ͓͚Δ ϓʔϧͷαΠζ
None
WEBΞϓϦͱϓʔϧ • ϓʔϧͳ͠ͷੈքɺͭ·ΓΫϥΠΞϯτ͔ ΒϦΫΤετΛ͏͚͔ͯΒશ෦Δੈք؍ ͋Δ • ͕ɺJavaͳWebΞϓϦͦΜͳੈք؍Ͱ ͳ͍ • JavaͳWebΞϓϦ͍ΖΜͳϓʔϧΛ४උ
͔ͯ͠ΒʮΑͬ͠Ό͜ʔ͍ʯͬͯΓ·͢ • Javaͷʢىಈ͕ʣ͍ͱ͔ݴΘΕΔҰҼ • ىಈ࣌ͷΫϥεಡΈࠐΈClassLoaderͬͯ ϓʔϧʹΫϥεใΛ٧ΊࠐΜͰΔͱݴ͑Δ
ແݶʹ༻ҙ͓͚͍͍ͯ͠ͱ͍͏ͷͰͳ͍ • Ϧιʔε͍ͭͩͬͯ༗ݶɻΫϥΠΞϯτͱͯ͠ͷίωΫγϣϯϓʔϧαʔόʔଆ͕ड͚ೖΕΒΕΔݶ ͕͋Δ͠ɺ1ϓʔϧͰ༗͍͍ͯ͠ʹݶ͕͋ΔɻεϨουJVMͷதͷ͚ͩͲɺεϨουΛ࡞Δ͝ ͱʹϝϞϦΛ͏͔ΒɺͦΕΛߟྀͨ͠ϝϞϦઃఆ͕ඞཁɻ • ͨ͘͞ΜͷͷͷॳظԽΛʮલआΓʯ͢Δͱɺવͦͷ͚ͩىಈ͕͘ͳΔɻ • ඞཁͳ͚ͩΛ֬อͯ͠͠Ύͬͱىಈͯ͠΄͍͠ɻ •
༻ҙͨ͠ͷͷϥΠϑαΠΫϧཧ͕͍Δ • ίωΫγϣϯϓʔϧʮଓ͕༗ޮ͔ʯͷ֬ೝ͕͍Δɻஅ͞ΕͨίωΫγϣϯΛͨ͠ΒʮίωΫ γϣϯϓʔϧΛೖΕͨΒ͏·͘௨৴Ͱ͖ͳ͍͜ͱ͕૿͑ͨʂʯͱ͔ͳΓ·͢ͷͰɻϋεΩʔϐϯάΛ ͢ΔεϨου͕८ճͯͬͨ͠Γ͢ΔͷͰɺ͕ଟ͍ͱͦΕ͚ͩෛ୲ʹͳΔɻ • ͜ΕΒͷαΠζͦΕͳΓʹؔ࿈͕͋ͬͨΓͳ͔ͬͨΓʢͬͯΛ࣍ʹ͠·͢ʣ
ϓʔϧͷσϑΥϧταΠζ • SpringBootͷ߹ • TomcatͷϫʔΧʔεϨου: 200 • HikariCPͷίωΫγϣϯϓʔϧ: 10 •
10ͬͯগͳ͍ʁͱࢥ͏ํHikariCPͷ WikiʹσϑΥϧτ10ͱͯ͠Δཧ༝આ໌ ͯ͠Δ͔ΒɺҰݟ·͠ΐ͏ɻ
αΠζͷؔ࿈ • ϫʔΧʔεϨουϓʔϧͱίωΫγϣϯϓʔϧͷΛฒ͍ͯΔͷɺগͳ͘ͱ ϫʔΧʔεϨουΑΓଟ͘ͷίωΫγϣϯΛอ͍࣋ͯͯ͠·ͣΘΕͳ͍͔Βɻ • ΞϓϦͷ࡞ΓʹΑͬͯΘΕΔ • ͲΜͳ࡞Γͨ͠ΒʮϫʔΧʔεϨουҎ্ͷίωΫγϣϯΛ͏͔ʯ͓ͬͯ͘ ͱྑ͍
ڞ༗σʔλϕʔεͱσʔλϕʔείωΫγϣϯϓʔϧ
୯ҰΞϓϦέʔγϣϯͰαʔόʔෳ͕͋ͨΓ·͑ • ΞϓϦέʔγϣϯαʔόʔ͕ϦΫΤετΛ ·͕ͨͬͨঢ়ଶΛ࣋ͭͱʮͳΜͰͦΜͳ࡞ ΓʹͳͬͯΔΜͩʁʯͱݴΘΕ͔Ͷͳ͍ɻ • ίϯςφͷޙԡ͋ͬͯ͠ɺΞϓϦέʔ γϣϯαʔόʔͷΑΓՄมʹͳ͍ͬͯ Δɻ •
ੲͷ͏ɺҰ߸ػɺೋ߸ػͱ͍͏;͏ ʹαʔόʔΛݺΜͰ͍ͨΜ͡Ό👴 • ແఀࢭσϓϩΠͱ͔͢Δͱ͞Βʹഒʹ ͳͬͨΓ͢ΔɻΠϯϓϨʔεͳϩʔϦϯά Ͱ࠷1૿͑Δɻ
ڞ༗σʔλϕʔεͰͷίωΫγϣϯࢉ • ಄ͷਤɻ2ΞϓϦέʔγϣϯͰ20ʁ • ΞϓϦ͝ͱʹ10ଓɺͦΕ͕2Πϯελϯ εɻ͜͜ʹσϓϩΠ͕ॏͳͬͨΒ2ഒɻͦΕ ͕2ΞϓϦͳͷͰɺMAX80ʹͳΔɻ • 80͘Β͍ͳΒʹͳΒͳ͍͚Ͳɺ1ΞϓϦέʔ γϣϯ͋ͨΓͷσʔλϕʔείωΫγϣϯϓʔ
ϧ͕10ͰΓΔઃܭ͕Ͱ͖͍ͯΔ͔ʹ͔͔Δɻ Ͱ͖͍ͯͳ͍ͳΒ૿͟͞ΔΛಘͳ͍ɻ • 1ΞϓϦ100ʹͨ͠Β800ͩͶ⭐ • ڞ༗σʔλϕʔεͳઃܭΛ͢Δੈք؍Ͱɺ2Ξ ϓϦͳΜ͔Ͱޮ͔ͳ͍Ͱ͠ΐ͏ɻ
ॳظαΠζͷ • ϫʔΧʔεϨουʢTomcatʣ • Initial: 10, Max: 200 • ίωΫγϣϯϓʔϧʢHikariCPʣ
• Initial: 10, Max: 10 • ϓʔϧ͢Δͷίετ͕ߴ͍ɻ֬อ ͓ͯ͘͠ʁ΄Μͱʁ֦ு͢ΔͳΒɺͦ ͷίετΛ୭ʹෛΘͤΔʁϋζϨҾ͍ ͨϢʔβʁʁ
͓·͚
None
None