Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Webٕज़ͷجຊ 6ճ Keisuke KAMIYA
Slide 2
Slide 2 text
ࠓճͷςʔϚ
Slide 3
Slide 3 text
Chapter 5 WebΞϓϦέʔγϣϯͷجຊ
Slide 4
Slide 4 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ ※͕͢͞ʹ͔ΔͰ͠ΐͬͯॴΧοτͯ͠·͢
Slide 5
Slide 5 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 6
Slide 6 text
WebΞϓϦέʔγϣϯͷ3ߏ • WebΞϓϦέʔγϣϯ ωοτϫʔΫΛհͯ͠Webϒϥβ্Ͱಈ࡞͢ΔΞϓ Ϧέʔγϣϯ • WebΞϓϦέʔγϣϯ, 3ߏͰӡ༻͞Ε͍ͯΔࣄ ͕ଟ͍ ‣ ϓϨθϯςʔγϣϯ(Webαʔό) ‣ ΞϓϦέʔγϣϯ(APαʔό) ‣ σʔλ(DBαʔό)
Slide 7
Slide 7 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) Ϣʔβʔͷදࣔ Ϣʔβʔ͔Βͷૢ࡞ड 8FCαʔό͔Βͷ ໋ྩ࣮ߦ ը໘ͷੜ σʔλͷநग़ ߋ৽ ิؒ
Slide 8
Slide 8 text
WebΞϓϦέʔγϣϯͷ3ߏ • 3ΞʔΩςΫνϟͰߏ͢Δར 1ͭͷαʔόͰશͯΛ͏ΑΓ, ෛՙࢄ(εέʔϧΞ τ)͍͢͠ ‣ εέʔϧΞτ ಉ͡ػೳΛఏڙ͢ΔαʔόΛෳ༻ҙͯ͠, ϦΫΤ ετΛదʹৼΓ͚ΔΑ͏ͳߏ
Slide 9
Slide 9 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ 8FCαʔό "1αʔό %#αʔό ͭͷαʔόʹશͯΛஔͨ͠߹ WebαʔόɿϦΫΤετʹൺྫͯ͠ෛՙ͕૿Ճ APαʔόɿॲཧ͕ෳࡶʹͳΔͱෛՙ͕૿Ճ DBαʔόɿσʔλྔ͕ଟ͍ͱෛՙ͕૿Ճ
Slide 10
Slide 10 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ 8FCαʔό "1αʔό %#αʔό ΞʔΩςΫνϟͷ߹ ͦΕͧΕͷαʔό͕ಠཱͯ͠ಈ࡞͍ͯ͠Δ →ͦΕͧΕΛϦΫΤετঢ়گʹԠͯ͡૿ݮՄೳʹ ྫ) ϦΫΤετ͕ଟ͘ͳͬͨΒWebαʔόΛεέʔϧͤ͞Δ
Slide 11
Slide 11 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ
Slide 12
Slide 12 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ Webαʔό͕མͪΔͱԠ Ͱ͖ͳ͘ͳΔ
Slide 13
Slide 13 text
WebΞϓϦέʔγϣϯͷ3ߏ WebγεςϜ ΞʔΩςΫνϟͷ߹ Webαʔό APαʔό DBαʔό ϦΫΤετ ϦΫΤετΛॲཧ͢ΔͨΊʹ WebαʔόΛ૿͢
Slide 14
Slide 14 text
WebΞϓϦέʔγϣϯͷ3ߏ • 3ΞʔΩςΫνϟͰ͋Ε, WebαʔόͱAPαʔόͱ DBαʔό͕ಠཱ͍ͯ͠ΔͨΊ, ͦΕͧΕͷͷௐʢε έʔϧΞτʣ͕Γ͍͢ ‣ 1ͭͷϚγϯʹશͯͷαʔόΛཱͯͯ͠·͏ͱ, Web αʔόΛ૿ͨͯ͘͠, ୯ମͰ૿͢͜ͱ͕ෆՄೳ ‣ Ұൠʹ, DBαʔόͷεέʔϧΞτ͍͠ - աڈʹॻ͍ͨεϥΠυʹ৭ʑ͔͍ͯ͋ΔΑ
Slide 15
Slide 15 text
WebΞϓϦέʔγϣϯͷ3ߏ • ͦΕͧΕͷ͕ಠཱ͍ͯ͠ΔͷͰ, վमൣғΛ੍ݶ͢Δ ͜ͱ͕Մೳ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ϨΠΞτΛมߋ͚ͨ͠Ε 8FCαʔόͷΈ͍͡Εྑ͍
Slide 16
Slide 16 text
WebΞϓϦέʔγϣϯͷ3ߏ • ΞϓϦέʔγϣϯͷنʹΑͬͯ, దͳΞʔΩςΫ νϟΛ࠾༻͢Δ͖ • େنͳαʔϏεͰ༗ޮ͕ͩ, ݸਓతͳখ͞ͳͷͰ 3ΞʔΩςΫνϟΛ࠾༻͢Δͷ͕ϕετͱݶΒͳ͍ ‣ αʔό͕3͋Δͱ͍͏͜ͱ, 3ͭͷཧίετ͕ ͔͔Δͱ͍͏͜ͱʹͳΔ WebΞϓϦέʔγϣϯͷ3ߏ ऴྃ
Slide 17
Slide 17 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 18
Slide 18 text
MVCϞσϧ • MVCϞσϧ WebΞϓϦέʔγϣϯͷσβΠϯύλʔϯͷҰछ ‣ M(Model) σʔλʹؔ͢ΔॲཧΛߦ͏ ‣ V(View) Ϣʔβʔͷग़ྗॲཧ ‣ C(Controller) Ϣʔβʔ͔ΒͷϦΫΤετΛड͚ͯ, ModelView ॲཧΛৼΓ͚Δ
Slide 19
Slide 19 text
MVCϞσϧ $POUSPMMFS 7JFX .PEFM ॲཧ໋ྩ σ ʔ λ ͷ ද ࣔ ໋ ྩ ྃ Ԡ දࣔσʔλ σ ʔ λ ͷ ॲ ཧ ໋ ྩ ྃ Ԡ σʔλཁٻ ը໘දࣔ σʔλॲཧ໋ྩͷྲྀΕ σʔλද໋ࣔྩͷྲྀΕ 7JFXͱ.PEFMʹࢦࣔ ग़ྗ දࣔ Λ୲ σʔλॲཧ
Slide 20
Slide 20 text
MVCϞσϧ • ͜ͷΑ͏ʹ͢Δͱ, MVCϞσϧͬͯ3ΞʔΩςΫνϟ ͱࠞಉ͢Δਓ͕͍Δ ‣ 3ΞʔΩςΫνϟͱMVCҟͳΔ֓೦ ‣ ߏͱ͍͏ͷ, ྡΓ߹ͬͨಉ࢜ͰͷΈΓऔΓ Λ͢Δ - ϓϨθϯςʔγϣϯͱσʔλΓऔΓ͠ͳ ͍ ‣ MVCϞσϧͷ߹, ͯ͢ͷʹ͕ؔ͋Δ
Slide 21
Slide 21 text
MVCϞσϧ WebγεςϜ ΞϓϦέʔγϣϯ σʔλ ϓϨθϯςʔγϣϯ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) Controller View Model ΞϓϦέʔγϣϯ
Slide 22
Slide 22 text
MVCϞσϧ • MVCϞσϧͷར ‣ 3ΞʔΩςΫνϟʔಉ༷ʹ, ։ൃվमͷൣғ͕໌ ֬ʹͳΔ - ֤ཁૉ͕ผΕ࣮ͯ͞Ε͍ͯΔͨΊ, ଞͷՕॴͷ Өڹ͕গͳ͍ - Օॴͷಛఆ͕ൺֱత༰қ MVCϞσϧ ऴྃ
Slide 23
Slide 23 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 24
Slide 24 text
Webαʔό • Webαʔό WebΫϥΠΞϯτ͔ΒͷϦΫΤετΛड͚औΔαʔό Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ↑͜͜
Slide 25
Slide 25 text
Webαʔό • ϦΫΤετͷ༰ʹΑͬͯॲཧΛม͑Δ ‣ css, js͕ϦΫΤετ͞Εͨ߹ʢ੩తϑΝΠϧʣ Webαʔό͕ϑΝΠϧΛฦ͢ ‣ ಈతॲཧ͕ඞཁͳͷ APαʔόʹॲཧΛґཔ͢Δ Webαʔό APαʔό ϦΫΤετ ಈతॲཧͷґཔ ಈతϖʔδͷ సૹ ίϯςϯπͷ సૹ ੩తϑΝΠϧ ͜͜Ͱฦ͢
Slide 26
Slide 26 text
Webαʔό • WebαʔόϦΫΤετΛड͚͚ͭΔ૭ޱ ‣ Webαʔό͕ࢮ͵ͱαʔϏε͕ఀࢭͯ͠͠·͏ • ͜ͷΑ͏ͳࣗମΛආ͚ΔͨΊ, ௨ৗWebαʔόΛෳ ༻ҙͯ͠ԽΛߦ͍ͬͯΔ ‣ 1ͩͱ1ࢭ·ΔͱશͯऴΘΓ͕ͩ, Կ͔Քಇͯ͠ ͍ΕͳΜͱ͔αʔϏεΛܧଓͰ͖Δ
Slide 27
Slide 27 text
Webαʔό APαʔό αʔό͕ނোͯ͠ผͷαʔόΛ ͬͯαʔϏεܧଓ Webαʔό ΫϥΠΞϯτ ͨͩ͠, WebαʔόͦΕͧΕಉ͡ ίϯςϯπΛ͍࣋ͬͯΔඞཁ͕͋Δ ଓෆՄ
Slide 28
Slide 28 text
Webαʔό • ར༻ऀ͕ଟ͚Εଟ͍΄ͲϦΫΤετ૿Ճ ‣ ར༻ऀ͕ଟͯ͘Ϩεϙϯεͨ͘͘͠ͳ͍ • ݱঢ়Webαʔό͕ͲͷΑ͏ͳঢ়ଶͰ͋Δ͔Λਪଌͤͣ ʹܭଌ͢Δ͖ ‣ I/O͕ϘτϧωοΫͳͷ͔CPUͳͷ͔ - Don't guess! Measure! - "premature optimization is the root of all evil." (ૣ ͗͢Δ࠷దԽॾѱͷࠜݯ)
Slide 29
Slide 29 text
Webαʔό • WebαʔόΛεέʔϧΞτ͢Δࡍ, શͯͷWebαʔ όʹಉ͡ίϯςϯπΛஔ͘ඞཁ͕͋Δ • ผʹϑΝΠϧ༻ͷαʔόΛ༻ҙ͢Δํ๏͋Δ ‣ ίϯςϯπͷಉظෆཁʹͳΔ͕, αʔόؒͷ௨৴͕ ൃੜ͠Ϩεϙϯε͕Լ͢Δ ϑΝΠϧΛஔ͍ͨαʔό Φʔόʔϔου͕ൃੜ Webαʔό Webαʔό Webαʔό ऴྃ
Slide 30
Slide 30 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 31
Slide 31 text
ΞϓϦέʔγϣϯαʔό • ΞϓϦέʔγϣϯαʔό(APαʔό) ࣮ࡍͷWebΞϓϦέʔγϣϯͷॲཧΛߦ͏ϓϩάϥϜ Webϒϥβ (ΫϥΠΞϯτεΫϦϓτ) (Webαʔό) (APαʔό) (DBαʔό) ↑͜͜
Slide 32
Slide 32 text
ΞϓϦέʔγϣϯαʔό • Webαʔό͔Βసૹ͞Ε͖ͯͨσʔλΛجʹ, σʔλ ϕʔεͷݕࡧՃΛߦ͍ԠΛฦ͢ ‣ 3ΞʔΩςΫνϟʹ͓͚ΔΞϓϦέʔγϣϯʹҐ ஔ͢Δαʔό ‣ ϓϨθϯςʔγϣϯͱσʔλͱͷհ ‣ CPUෛՙ͕ߴ͘ͳΓ͕ͪ
Slide 33
Slide 33 text
ΞϓϦέʔγϣϯαʔόʢηογϣϯཧػೳʣ • Ҏલʹͨ͠ηογϣϯͷཧΛߦ͍ͬͯΔ ‣ ؔ࿈ͷ͋Δ1࿈ͷॲཧͷ։͔࢝Βऴྃ·Ͱͷશظؒ ૹ৴ଆ ड৴ଆ ΛબͿ OK ങ͍͔͝ʹೖΕΔ OK ങ͍͔͝ͷதΛ֬ೝ OK ܾࡁ OK ηογϣϯ
Slide 34
Slide 34 text
ʢ෮शʣηογϣϯ • ෳͷΫϥΠΞϯτ͔ΒΞΫηε͞ΕΔWebαʔό, ηο γϣϯΛͲͷΑ͏ʹཧ͢Δͷ͔ʁ ‣ CookieΛ༻͍ͯηογϣϯΛཧ͢Δ ‣ Cookie͕͑ͳ͍߹URLʹؚΊΔͱ͖͋Δ͕, ηΩϡ ϦςΟͷ໘͔Βਪ͞Εͳ͍ํ๏Ͱ͋Δ • ηογϣϯཧʹ͓͍ͯ, WebϒϥβΛࣝผ͢ΔͨΊͷࣝผ ࢠ(id)ΛηογϣϯIDͱݺͿ ‣ ηογϣϯIDWebαʔόͰੜ͞Ε, CookieʹؚΊͯWeb ϒϥβʹૹ৴͞ΕΔ
Slide 35
Slide 35 text
ʢ෮शʣηογϣϯ 4*%BBBBBB 4*%CCCCCC webαʔό webϒϥβB webϒϥβA ηογϣϯ*% Ϣʔβʔ ϩάΠϯ ങ͍͔͝ BBBBBB TBUP 536& Ξλʔº γϟπº CCCCCC HVFTU '"-4& γϡʔζº දɿWebαʔό͕อଘ͍ͯ͠Δηογϣϯσʔλ
Slide 36
Slide 36 text
ʢ෮शʣηογϣϯ • ηογϣϯIDΛड͚औͬͯҎ߱, ϦΫΤετϔομʹ ηογϣϯIDΛؚΊͯૹ৴͢Δ͜ͱͰ, Webαʔόͱͷ ηογϣϯΛҡ࣋͢Δ͜ͱ͕ग़དྷΔ. • ʮങ͍͔͝ʹͳʹΛ͍Ε͔ͨʯͱݴͬͨใ, ηο γϣϯIDͱඥ͍ͯʮηογϣϯσʔλʯͱͯ͠αʔό ʹอଘ͞ΕΔ.
Slide 37
Slide 37 text
ʢ෮शʣηογϣϯ webαʔό webϒϥβA Set-Cookie:SID=aaaaaa Cookie:SID=aaaaaa CookieʹؚΊͯ͢ ϦϯΫͷURLʹؚΊΔ webαʔό webϒϥβA http://example.com/cart?SID=aaaaaa ͱ͍͏ϦϯΫ͖ͷWebϖʔδΛૹ৴ ϦϯΫ͕ΫϦοΫ͞ΕΔͱ, ηογϣϯID͖ ͰWebαʔόϦΫΤετ͕ૹ৴͞ΕΔ http://example.com/cart?SID=aaaaaa ηογϣϯIDΛURLͷύϥϝʔλͱͯ͠ૹ৴
Slide 38
Slide 38 text
ΞϓϦέʔγϣϯαʔόʢηογϣϯཧػೳʣ • HTTPεςʔτϨεͳϓϩτίϧͳͷͰ, ηογϣϯͳ ͲΛΘͳ͍ͱεςʔτϑϧͳॲཧΛߦ͑ͳ͍ • APαʔό͕ηογϣϯIDΛൃߦ͠, ͦΕΛجʹΫϥΠΞ ϯτͱΓऔΓ͢Δ͜ͱͰ1ͭͷηογϣϯͱͯ͠ཧ
Slide 39
Slide 39 text
ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯཧػೳʣ • τϥϯβΫγϣϯ ηογϣϯதͰߦΘΕΔؔ࿈ͨ͠Ұ࿈ͷ࡞ۀ ‣ ෳͷॲཧͷ1ͭ1ͭHTTPϦΫΤετͰΓཱͬͯ ͍ΔͨΊ, ͜ΕΒΛ1ͭͷτϥϯβΫγϣϯͱͯ͠·ͱ Ί͍ͯΔ
Slide 40
Slide 40 text
ΞϓϦέʔγϣϯαʔόʢτϥϯβΫγϣϯཧػೳʣ ᶃϩάΠϯ ᶄີࣨใͷ֬ೝ ᶅ٬ࣨΛ෦ݮΒ͢ ᶆۭࣨʹ༧ऀใΛՃ ᶇ༧ͷཱ ᶈϩάΞτ ᶆͷΈࣦഊͯ͠ଞͯ͢ਖ਼ৗʹऴྃͨ͠ͱ͠ ͯ ॓ധࢪઃͷ༧࡞ۀͱͯ͠ޭͨ͠ͱ ͍͑ͳ͍ 1τϥϯβΫγϣϯ 1τϥϯβΫγϣϯ 4τϥϯβΫγϣϯ ᶈͷΈͷࣦഊͰ͋Ε ϩάΞτॲཧࣦഊ͕ͩͦ ͷલͷ࡞ۀͰ͋Δ॓ധࢪઃͷ༧࡞ۀޭ͍ͯ͠Δ τϥϯβΫγϣϯͷྫ ΞϓϦέʔγϣϯαʔό ऴྃ
Slide 41
Slide 41 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 42
Slide 42 text
σʔλϕʔεཧγεςϜ • σʔλϕʔεཧγεςϜ(DBMS) WebΞϓϦέʔγϣϯͷσʔλΛอଘ͢Δσʔλετ Ξ. ͱ͘ʹ, ؔσʔλϕʔεͰRDBMS(Relational DataBase Management System)͕༻͍ΒΕΔ ‣ ϑϦʔͷRDBMS͍͔ͭ͋͘Δ - MySQL - SQLite - PostgreSQL etc.. MySQLΛྫʹॲཧͷྲྀΕΛݟͯΈΔ
Slide 43
Slide 43 text
σʔλϕʔεཧγεςϜ • MySQLͷΈ 1. SQLจΛύʔε͢Δ σʔλΛऔಘ͢Δͷ͔, ૠೖ͢Δͷ͔ͳͲ 2. ΦϓςΟϚΠβʹ͔͚Δ ݁߹ͷॱংΛߟྀͯ͠࠷దԽ͢Δ 3. ετϨʔδΤϯδϯʹ͛ΔʢσʔλʹΞΫηεʣ ࣮ࡍͷσʔλ͕֨ೲ͞Ε͍ͯΔॴʹΞΫηε
Slide 44
Slide 44 text
σʔλϕʔεཧγεςϜ ίωΫγϣϯ εϨου ίωΫγϣϯ εϨου ίωΫγϣϯ εϨου ύʔαɾΦϓςΟϚΠβɾΞΫηεཧͳͲ ετϨʔδΤϯδϯ"1* .Z*4". *OOP%# .Z42-ͳͲͷ ετϨʔδΤϯδϯ ετϨʔδϑΝΠϧ ΫϥΠΞϯτ͔ΒͷϦΫΤετ MySQL SELECT * FROM …
Slide 45
Slide 45 text
σʔλϕʔεཧγεςϜ • ετϨʔδΤϯδϯʹෳଘࡏ͢Δ ‣ InnoDB ݱࡏMySQLͷσϑΥϧτετϨʔδΤϯδϯ ‣ MyISAM ͔ͭͯMySQLͷσϑΥϧτͩͬͨ ‣ MEMORY ϝϞϦ্ʹσʔλΛετΞ͢ΔʢͷͰشൃੑʣ ‣ Blackhole ҰσʔλΛه͠ͳ͍ʢ͚Ͳϩά͢ʣ
Slide 46
Slide 46 text
σʔλϕʔεཧγεςϜ • ࡢͷΘ͔Βͳ͍ͳ͊ͬͯͣͬͱͭͿ͍ͯͨ
Slide 47
Slide 47 text
σʔλϕʔεཧγεςϜ • ͭͿ͍ͨΒฦ৴͕དྷͨ(Blackholeͷ͍ํ)
Slide 48
Slide 48 text
σʔλϕʔεཧγεςϜ • ϦΞϧλΠϜੑ͕ཉ͍࣌͠ͷߏ
Slide 49
Slide 49 text
σʔλϕʔεཧγεςϜ • ৭ʑ͋ΔͷͰڵຯ͋ͬͨΒௐͯΈͯ ‣ MyISAM ‣ InnoDB ‣ MEMORY ‣ Federated ‣ BLACKHOLE ‣ ARCHIVE ‣ MySQL Cluster(NDB)
Slide 50
Slide 50 text
σʔλϕʔεཧγεςϜ • ίϛϡχςΟΤϯδϯ ‣ Tritonn ‣ SPIDER ‣ Q4M ‣ PBXT ‣ Percona XtraDB ‣ KickFire ‣ InfiniDB
Slide 51
Slide 51 text
σʔλϕʔεཧγεςϜ • DBαʔό RDBMSΛࡌͨ͠αʔόʢσʔλετΞʣ ‣ σʔλϕʔεΞϓϦέʔγϣϯͷใΛอ͍࣋ͯ͠ ΔͨΊ, ৴པੑੑΛߟྀͨ͠ߏʹ͢Δඞཁ͕ ͋Δ - I/Oෛՙ͕ߴΊʹͳΔߟྀ͠ͳ͍ͱ͍͚ͳ͍ ‣ DBαʔόͷεέʔϧΞτ͍͠…
Slide 52
Slide 52 text
σʔλϕʔεཧγεςϜʢԽʣ • อ࣋͢Δσʔλͷอશඇৗʹॏཁ ‣ ௨ৗDBαʔόԽߏΛऔΔ • ͔͠͠, DBαʔόͷԽߏ͍͠ ‣ ෳͰߏͨ͠߹, ෳͰσʔλΛڞ༗͓ͯ͠ ͘ඞཁ͕͋Δ ‣ ͨͩ͠සൟʹσʔλͷߋ৽͕ى͜ΔͨΊ, ͲͷΑ͏ʹ ڞ༗Λ͢Δ͔͕ॏཁ
Slide 53
Slide 53 text
σʔλϕʔεཧγεςϜʢԽʣ • Խͷํ๏ෳ͋Δ ‣ ϛϥʔϦϯά ‣ ϨϓϦέʔγϣϯ ‣ γΣΞʔυσΟεΫ
Slide 54
Slide 54 text
σʔλϕʔεཧγεςϜʢԽʣ • ϛϥʔϦϯά ߋ৽໋ྩΛड͚ͨRDBMS͕ෳͷσʔλϕʔεʹରͯ͠ಉ࣌ʹಉ ͡ߋ৽Λߦ͏ • ϨϓϦέʔγϣϯ ߋ৽໋ྩΛड͚ͨRDBMS͕ෳͷσʔλϕʔεʹରͯ͠ಉ͡ߋ৽ Λߦ͏. λΠϛϯάಉ࣌ͱݶΒͳ͍ • γΣΞʔυσΟεΫ σʔλϕʔεΛڞ༻ͷετϨʔδʹ࣋ͪ, ෳͷDBαʔό͔ΒͦΕ Λߋ৽͢Δ
Slide 55
Slide 55 text
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό ϓϦϯγύϧʢਖ਼ʣ ϛϥʔʢ෭ʣ ߋ৽໋ྩ ߋ৽໋ྩ ฏৗ࣌ϓϦϯγύϧʹ໋ྩΛૹΓ োൃੜ࣌ʹϛϥʔʹ໋ྩΛૹΔ ϓϦϯγύϧ͕ߋ৽໋ྩΛड͚Δͱ ϛϥʔʹߋ৽໋ྩΛసૹ͢Δ ϛϥʔ%#.4ߋ৽໋ྩΛड͚ ϛϥʔ ͷσʔλϕʔεߋ৽Λߦͳ͏ ฏৗ࣌ͷॲཧΛߦͳ͏ػثɿਖ਼ܥ ো࣌ʹਖ਼ܥʹΘͬͯॲཧΛߦ͏ػثɿ෭ܥorػܥ ϛϥʔϦϯά
Slide 56
Slide 56 text
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό Ϛελʢਖ਼ʣ εϨʔϒʢ෭ʣ ߋ৽໋ྩ ฏৗ࣌Ϛελʹ໋ྩΛૹΓ োൃ ੜ࣌ʹεϨʔϒʹ໋ྩΛૹΔ ߋ৽ͷ໋ྩϚελʹͷΈૹΒΕΔ ߋ৽͢Δͱ εϨʔϒʹ ߋ৽ϩάϑΝΠϧ͕ૹΒΕΔ ߋ৽ϩάͷ༰Λجʹ εϨʔϒͷσʔ λϕʔεͷߋ৽ΛҙͷλΠϛϯάͰ ߦ͏ Master-Slaveߏͷ߹, ߋ৽ʹಉظ/ඇಉظ͕ଘࡏ͢Δ. ϨϓϦέʔγϣϯ
Slide 57
Slide 57 text
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό ϚελʢBlackholeʣ εϨʔϒʢInnoDBʣ όΠφϦϩά ߋ৽໋ྩ ϚελͷετϨʔδΤϯδϯΛBlackhole͢Δ͜ͱͰ, INSERT͕ଟ͍Α͏ͳαʔϏεʹ࠷దԽ͢Δ͜ͱ ϨϓϦέʔγϣϯ
Slide 58
Slide 58 text
σʔλϕʔεཧγεςϜʢԽʣ webαʔό APαʔό DBMS ϛϥʔʢ෭ʣ ߋ৽໋ྩ ߋ৽໋ྩ ໋ྩͲͷ%#.4Ͱྑ͍ γΣΞʔυσΟεΫͷ%#.4ʹ ਖ਼෭ͷ֓೦ͳ͍ γΣΞʔυσΟεΫ DBMS σʔλετϨʔδ σʔλϕʔεԽ ͞Εͳ͍ͷͰରোੑ ͷڧ͍ΛબͿ DBMS ऴྃ
Slide 59
Slide 59 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 60
Slide 60 text
Ωϟογϡαʔό • ϦΫΤετ͕૿͑Δͱ, ίϯςϯπͷಡΈग़͠(I/O) ॲཧ͕ແࢹͰ͖ͳ͍Ϩϕϧʹͳͬͯ͘Δ ‣ ϨεϙϯελΠϜͷԼΛট͘ • ίϯςϯπΛΩϟογϡͤ͞Δ͜ͱͰ, සͷߴ͍ͷ αΠζ͕େ͖͍ͷʹؔͯ͠ߴʹϨεϙϯεΛฦ͢ ͜ͱ͕ग़དྷΔ ‣ Ωϟογϡαʔόʔ͕ͦͷׂΛ୲͏
Slide 61
Slide 61 text
Ωϟογϡαʔό • Ωϟογϡ ϦΫΤετʹର͢ΔϨεϙϯεͷهԱ ‣ ίϯςϯπΩϟογϡ จॻը૾, ಈըͱ͍ͬͨίϯςϯπͷΩϟογϡ ‣ ΫΤϦΩϟογϡ DBMSͷσʔλݕࡧཁٻʢΫΤϦʣͷ݁ՌͷΩϟο γϡ
Slide 62
Slide 62 text
Ωϟογϡαʔό ίϯςϯπ Ωϟογϡαʔό Webαʔό هԱͯ͠ͳ͍ϦΫΤετͦͷཁٻΛ 8FCαʔόʹసૹ͢Δ هԱ͍ͯ͠ΔϦΫΤετ͕དྷͨ߹ 8FC αʔόͷΘΓʹϨεϙϯεΛฦ͢ ϦΫΤετͱ8FCαʔόͷϨεϙϯεͷ Έ߹ΘͤΛهԱ͓ͯ͘͠ ϒϥβ ίϯςϯπΩϟογϡαʔό
Slide 63
Slide 63 text
Ωϟογϡαʔό هԱ͍ͯ͠ͳ͍ΫΤϦͷ߹ͦͷ·· %#.4ʹసૹ "1αʔό͔Βͷσʔλݕࡧཁٻͱ%#.4 ͷϨεϙϯεͷΈ߹ΘͤΛΩϟογϡ ΫΤϦΩϟογϡαʔό Webαʔό APαʔό ΫΤϦ Ωϟογϡαʔόʔ DBαʔό WebγεςϜ
Slide 64
Slide 64 text
ΩϟογϡαʔόʢΩϟογϡͷ༗ޮظݶʣ • ΩϟογϡΛಘΔͨΊʹඞཁͳٕज़ • ͔͠͠, ίϯςϯπ͕Ξοϓσʔτ͞Εͨ߹, Ωϟο γϡͷ༗ޮظݶ͕͍ͱ͍ͭ·ͰͷچϑΝΠϧ͕৴ ͞Εͯ͠·͏ ‣ ༗ޮظݶΛదʹઃఆ͢Δ͜ͱͰ, ҰఆִؒͰΩϟο γϡ༰ΛΞοϓσʔτ͢Δඞཁ͕͋Δ ‣ ͦͷͨΊͷHTTP ETag
Slide 65
Slide 65 text
ΩϟογϡαʔόʢCDNʣ • ಥવͰ͕͢, ϓϩάϥϚ͕Δ͖ϨΠςϯγͰ͢ Ҿ༻ɿhttps://speakerdeck.com/fujiwara3/isucon-summer-school-1
Slide 66
Slide 66 text
ΩϟογϡαʔόʢCDNʣ • CDN(Contents Delivery Network) ੈք֤ʹஔ͞ΕͨΩϟογϡαʔόͷू߹ମ ‣ ຊ͔Β৴͢Δͷʹຊʹ͚ͩΩϟογϡαʔόΛ ஔ͍͍ͯͯ, ࠃ֎͔ΒͷΞΫηε͘ͳΔ ‣ ੈքதʹΩϟογϡαʔόΛࢄͯ͠ஔ͢Δ͜ͱ Ͱ, Ͳ͔͜ΒΞΫηεͯ͋͠Δఔߴʹ
Slide 67
Slide 67 text
ΩϟογϡαʔόʢCDNʣ • CDNͷ༗໊ͳαʔϏε ‣ CloudFront(Amazon) ‣ CloudFlare ‣ Akamai CloudFrontͷωοτϫʔΫʢҾ༻ɿhttps://aws.amazon.com/jp/cloudfront/details/ʣ
Slide 68
Slide 68 text
ΩϟογϡαʔόʢCDNʣ • ΞΫηε͢ΔͱࣗʹҰ൪͍ۙCDN͔Βμϯϩʔυ ͢Δ͜ͱͰߴʹͳΔ • ͜ͷลͷલεϥΠυʹॻ͍ͨ https://speakerdeck.com/bath_poo_/introduction-to- large-scale-web-service-15 CDN ऴྃ
Slide 69
Slide 69 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 70
Slide 70 text
Ajax • ಉظ௨৴ ΫϥΠΞϯτͱαʔό͕ަޓʹ௨৴Λߦ͍, ಉௐͯ͠௨ ৴Λߦ͏͜ͱ ‣ ಡΈࠐΈ͕ऴΘΔ·ͰଞͷॲཧΛߦ͑ͳ͍ʢͭ͜ ͱ͔͠Ͱ͖ͳ͍ʣ
Slide 71
Slide 71 text
Ajax • Ajax(Asynchronous JavaScript + XML) ΫϥΠΞϯτͷJavaScript͕Webαʔόͱ௨৴Λߦ ͍, σʔλΛऔಘͯ͠ඳը͢ΔඇಉظॲཧͷΠϯλ ϑΣʔε ‣ ͍͍ͪͪϖʔδΛϦϩʔυ͠ͳͯ͘, มߋ͍ͨ͠෦ ͚ͩΛAjaxΛͬͯ࠶ඳը͢Δ͜ͱ͕Ͱ͖Δ
Slide 72
Slide 72 text
Ajax ϦΫΤετ ߋ৽ʹඞཁͳσʔλͱϦΫΤετΛૹ৴ ϨεϙϯεͪͷؒଞͷՕॴͷ දࣔߋ৽Ϣʔβʔͷૢ࡞ड͕Մೳ HTMLશମͷ࡞ΑΓ ॲཧ͕গͳΊ Ϩεϙϯε HTMLશମΛฦ͢ΑΓ αΠζখ͞Ί
Slide 73
Slide 73 text
Ajax • Ajaxʹ༻͞Ε͍ͯΔٕज़ ‣ HTML WebϖʔδΛهड़͢ΔͨΊͷݴޠ ‣ JavaScript JavaScriptͷXMLHttpRequestΦϒδΣΫτΛ༻ ‣ DHTML ΫϥΠΞϯτεΫϦϓτͰϖʔδΛಈతʹมߋ͢ΔΣϒٕ ज़Λࢦ͢ந֓೦ ‣ DOM HTMLXMLΛѻ͏ͨΊͷAPI Ajax ऴྃ
Slide 74
Slide 74 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 75
Slide 75 text
Web API • WebAPI(Web Application Program Interface) WebΛ௨ͯ͡ϓϩάϥϜ͕αʔϏεΛར༻͢Δͨ ΊͷΠϯλʔϑΣʔε ར༻ঢ়گ WebAPIͷURL σʔλΛૹ৴ ॲཧ݁Ռ WebAPIͷURL σʔλΛૹ৴ ॲཧ݁Ռ Webαʔό 8FC"1* APαʔό
Slide 76
Slide 76 text
Web API • Web APIͷྫ ‣ ҢͱܦΛૹ৴͢Δͱ, ରԠ͢Δॴͷఱؾ༧ใ͕ ฦ৴͞ΕΔఱؾ༧ใAPI(Weather Hacksͱ͔) ‣ ϩάΠϯใͱจষΛૹ৴͢Ε, จষΛϙετ͢Δ ͜ͱ͕ग़དྷΔ(Twitterͱ͔) ‣ σʔλΛૹΔͱੳͨ݁͠ՌΛฦͯ͘͠ΕΔ(Watson API)
Slide 77
Slide 77 text
Web API • Web APIͷΓऔΓʹ༷ʑͳํ๏͕ΘΕΔ ‣ XML-RPCʢϓϩτίϧʣ XMLͰූ߸Խͯ͠ॲཧͷ࣮ߦΛཁٻ͢Δ ‣ SOAPʢϓϩτίϧʣ XML-RPCΛ֦ுͨ͠ߴػೳͳϓϩτίϧ ‣ RESTʢઃܭࢥʣ Web্ͷϦιʔεΛҰҙͳURLͰදͯ͠, ༻͢Δϝ ιουʹΑͬͯڍಈΛม͑ΔΞϨʢલʹͬͨʣ
Slide 78
Slide 78 text
Web API(XML-RPCͷྫ) examples.getStateName 40 XML-RPCϦΫΤετ XML-RPCϨεϙϯε South Dakota
Slide 79
Slide 79 text
Web API(SOAPͷྫ) SOAPϦΫΤετ SOAPϨεϙϯε 827635 Toptimate 3-Piece Set 827635 3-Piece luggage set. Black Polyester. 100.50 true
Slide 80
Slide 80 text
Web API(RESTͷࢥ(෮श)) • RESTful(REpresentational State Transfer) 4ͭͷݪଇ͔ΒͳΔγϯϓϧͳઃܭͷ͜ͱ 1. εςʔτϨε ΓऔΓ1ճ͝ͱʹ݁. ଞͷΓऔΓʹӨڹ͠ͳ͍. 2. ΞυϨεՄಡੑ ͯ͢ͷϦιʔε͕ҰҙͳURIͷߏจͰදݱՄೳ 3. ౷ҰΠϯλʔϑΣʔε HTTPϝιουͷར༻͕౷Ұ͞Ε͍ͯΔ 4. ଓੑ ΓऔΓ͞ΕΔใʹϦϯΫΛؚΊΔࣄ͕Ͱ͖Δ
Slide 81
Slide 81 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 82
Slide 82 text
CGI • CGI(Common Gateway Interface) ΫϥΠΞϯτ͔ΒͷཁٻʹԠͯ͡αʔόʔαΠυεΫϦ ϓτΛىಈ͢ΔͨΊͷΈ ‣ ϦΫΤετʹԠͯ͡༧Ί༻ҙ͞Ε͍ͯΔϓϩάϥϜΛ ࣮ߦ͠, ͦͷ࣮ߦ݁ՌΛฦ͢
Slide 83
Slide 83 text
CGI 8FCαʔό ίϯςϯπ $(*ϓϩάϥϜ ಡΈࠐΈ ϓϩάϥϜͷىಈ ࣮ߦ݁Ռ ϦΫΤετ Ϩεϙϯε w $(*ͷϦΫΤετ $(*ϓϩάϥϜͷಈ࡞݁Ռ w ͦΕҎ֎ 63-ʹରԠ͢Δίϯςϯπ Λฦ৴ DHJCJOϑΥϧμ֎ͷϑΝΠϧ ֦ுࢠ͕DHJͰͳ͍ϑΝΠϧ DHJCJOϑΥϧμʹ͋Δ֦ுࢠ ͕DHJͰ͋ΔϑΝΠϧΛ$(*ϓ ϩάϥϜͱΈͳ͢ %JSFDUPSZDHJCJO 0QUJPOT&YFD$(* "EE)BOEMFSDHJTDSJQUDHJ %JSFDUPSZ DHJCJOϑΥϧμʹ͋Δ֦ுࢠ ͕DHJͰ͋ΔϑΝΠϧ
Slide 84
Slide 84 text
CGI • ΫϥΠΞϯτ͕ΤϯυϙΠϯτ(CGIͷURL)ʹΞΫηε͢ Δ͜ͱͰରͷϓϩάϥϜ͕ىಈ͢Δ • ϓϩάϥϜʹσʔλΛ͢͜ͱ͕ग़དྷΔ ‣ ίϚϯυϥΠϯҾ͠ URLͷඌʹ?Λ͚ͯσʔλΛ+۠ΓͰՃ͢Δํ๏ ‣ ύε͠ URLͷޙΖʹʮ/ʯͰ۠ͬͯσʔλΛฒΔํ๏ ‣ GET, POSTϝιουΛ͏
Slide 85
Slide 85 text
CGI 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi? σʔλ1+σʔλ2 ίϚϯυϥΠϯҾ͠ 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi/ σʔλ1/σʔλ2 ύε͠ ىಈ࣌ʹσʔλΛอ͍࣋ͯ͠Δ ىಈޙʹ1"5)@*/'0͔Βऔಘ
Slide 86
Slide 86 text
CGI 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi? σʔλ໊1=σʔλ1 GETϝιου 8FCαʔό $(*ϓϩάϥϜ σʔλΛͯ͠ ϓϩάϥϜͷىಈ http://example.com/program.cgi/ POSTϝιου ىಈޙ ม26&3:@453*/( ͔ΒσʔλΛऔಘ ىಈޙผʹૹΒΕ͖ͯͨ σʔλΛಡΈࠐΉ TUEJO
Slide 87
Slide 87 text
࣍ 1. WebΞϓϦέʔγϣϯͷ3ߏ 2. MVCϞσϧ 3. Webαʔό 4. ΞϓϦέʔγϣϯαʔό 5. σʔλϕʔεཧγεςϜ 6. Ωϟογϡαʔό 7. Ajax 8. Web API 9. CGI 10.αʔόؒͷ࿈ܞ
Slide 88
Slide 88 text
αʔόؒͷ࿈ܞ • CGIΛར༻ͤͣʹαʔόʔαΠυεΫϦϓτΛىಈ͢Δ ߹, ֤αʔόαʔόʹΫϥΠΞϯτʹͳΓ͏Δ ‣ Webαʔό͕APαʔόʹσʔλͷॲཧΛґཔ ‣ APαʔό͕αʔόʔαΠυεΫϦϓτΛ࣮ߦ Webαʔό APαʔό DBαʔό αʔό ΫϥΠ Ξϯτ αʔό ΫϥΠ Ξϯτ αʔό αʔϏεཁٻ σʔλ ॲཧґཔ σʔλ ݕࡧɾߋ৽
Slide 89
Slide 89 text
αʔόؒͷ࿈ܞ • αʔόಉ࢜ͷ௨৴ʹ͓͍ͯ, ϦΫΤετΛૹ৴͢Δଆ ͕ΫϥΠΞϯτ, ϨεϙϯεΛฦ͢ଆ͕αʔό ‣ APαʔόDBαʔόʹରͯ͠༧Ίઃఆͨ͠ϙʔτΛ ࢦఆ͠௨৴ ‣ ಉ͡αʔόʔͰ͋Ε127.0.0.1(localhost)
Slide 90
Slide 90 text
αʔόؒͷ࿈ܞ ػث͕ҟͳΔ߹ Webαʔό ip-addr : 127.18.1.100 172.18.1.150ͷ8009ϙʔτʹଓ APαʔό ip-addr : 127.18.1.150 port : 8009 ػث͕ҟͳΔ߹ Webαʔό 127.18.1.100ͷ8009ϙʔτʹଓ APαʔό port : 8009 ip-addr : 127.18.1.100 localhostͷ8009ϙʔτʹଓ
Slide 91
Slide 91 text
αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ • WebαʔόͱAPαʔόͷ࿈ܞʹΘΕΔن֨ ‣ HTTP ‣ AJP(Apache Jserv Protocol) ApacheͱTomcat(JSPͷ࣮ߦίϯςφʣͷ࿈ܞʹΘ Ε͍ͯΔ ‣ WebSocket ΫϥΠΞϯτͱαʔόؒͰ1ଓΛཱ֬ͨ͠ޙ, σʔ λͷΓऔΓΛιέοτ௨৴Ͱߦ͏ͷʢϦΞϧλΠ Ϝੑ͕ߴ͍ʣ
Slide 92
Slide 92 text
αʔόؒͷ࿈ܞʢར༻͢Δϓϩτίϧʣ • APαʔόͱDBαʔόͲ͏͢Δͷ͔ ‣ ODBC(Open DataBase Connectivity) DBMSຖͷҧ͍Λٵऩ͠, ڞ௨ͷίʔυͰσʔλϕʔ εʹΞΫηε͢ΔͨΊͷن֨ - ODBCυϥΠόΛ͏͜ͱͰ࣮ݱ 0%#$υϥΠό APαʔό DBαʔό ODBCυϥΠόΛར༻༷ͯ͠ʑͳ DBMSͷಠࣗن֨ʹରԠ ಠࣗϓϩτίϧͰ௨৴
Slide 93
Slide 93 text
ࢀߟαΠτ
Slide 94
Slide 94 text
ࢀߟαΠτ • MySQLೖɹϨϓϦέʔγϣϯฤ https://qiita.com/Tocyuki/items/c224cef57493f536a94 • Ajax Introduction https://www.w3schools.com/js/js_ajax_intro.asp • AjaxͷհʢݹΊʣ https://www.ibm.com/developerworks/jp/web/library/wa- ajaxintro1.html • XML-RPC https://ja.wikipedia.org/wiki/XML-RPC • SOAP https://ja.wikipedia.org/wiki/ SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3% 83%AB)
Slide 95
Slide 95 text
ࢀߟαΠτ • MySQL ӡ༻+ཧ τϥϒϧγϡʔςΟϯάΨΠυ http://gihyo.jp/book/2010/978-4-7741-4294-4 • ήʔϜΤϯδχΞͷͨΊͷσʔλϕʔεઃܭ https://www.slideshare.net/sairoutine/ss-62485460