https://www.root-me.org/en/Challenges/Web-Client/Javascript-Webpack
Start the challenge λ²νΌμ λλ¬ λ¬Έμ νμ΄λ₯Ό μμνμ.
λ¬Έμ νμ΄μ μ²μ νλ©΄μ΄λ€.
Quack Quack ! | Duck or Mandarin duck μ΄λΌκ³ κΈμ΄ μ νμλ€.
Duckκ³Ό Mandarin duck μλ λ§ν¬κ° λμ΄μλ€.
Welcome !
If you are here, it means that you don't know the difference between a duck and mandarin duck.
Shame on you !
λΌκ³ νλλ°... 'duckκ³Ό mandarin duckμ μ°¨μ΄'κ° λμ§ λ¬Έμ λ₯Ό λ€ νκ³ λλ©΄ μ μ μκ² λλ 보λ€
λ§ν¬λ₯Ό λλ¬λ³΄λ©΄ κ·Έ μ°¨μ΄λ₯Ό μ μ μμκΉ μκ°νμ¬ Duck κ³Ό Mandarin duck μ κ°κ° λλ¬λ³΄κΈ°λ‘ νλ€.
Duck μ λλ μ λ λμ€λ μΉνμ΄μ§μ΄λ€.
λ§λ€λ¦°μ€λ¦¬λ κ·Έλ₯ μ€λ¦¬λ³΄λ€ ν¨μ¬ λ μμλ€λ κ² μ°¨μ΄μ μΈκ°?
μκΉ κ·Έλ₯ μ€λ¦¬μλ λ€λ₯΄κ² λ¨Ήμ§ λ§λλ€... λμΌμ€ ν΄μ¦ κ°λ€
μ΄μ μΉνμ΄μ§μ μμ€ μ½λλ₯Ό μ΄ν΄λ³΄κ² λ€.
μ‘°κΈ μμν μμ€μ½λλ₯Ό λ°κ²¬νλ€.
λ Έλμ λ°μ€μ κ΄λ ¨λ μΉνμ΄μ§(Home, Duck, DuckMandarin)λ λͺ¨λ λ°©λ¬Ένμλ€.
(μ§κΈ λ³΄κ³ μλ μμ€ νμΌλ€μ webpack:// μ μλ€.)
λΉ¨κ°μ λ°μ€λ‘ νμν μμ€μ½λμ μ£Όμ μ²λ¦¬λ λΆλΆμ΄ μμ¬μ€λ½λ€κ³ μκ°νλ€.
μμ€μ½λμ κ°μ΄,
Homeμ κ²½λ‘λ '/'
Duckμ κ²½λ‘λ '/duck'
DuckMandarinμ κ²½λ‘λ '/duck-mandarin'
μΈ κ²μ νμΈν μ μλ€!
κ·Έλ°λ° "YouWillNotFindThisRouteBecauseItIsHidden"μ κ΄λ ¨λ μΉνμ΄μ§λ λ³Έ μ μ΄ μμλ€.
μ£Όμμ²λ¦¬κ° λ νν¬ λ°μ€ λΆλΆμ λ΄μ©μ μ΄μ©ν΄ 보μ.
μμ κ·μΉλλ‘, μ£Όμ λ·λΆλΆμ΄ '/you-will-not-find-this-route-because-it-is-hidden'μΈ νμ΄μ§κ° μ‘΄μ¬ν κ²μ΄λ€.
μ νμ΄μ§λ₯Ό μ΄λ©΄ λ΅μ λν λ¨μλ₯Ό μ»μ μ μμ κ±°λΌκ³ μκ°νλ€.
http://challenge01.root-me.org/web-client/ch27/#/you-will-not-find-this-route-because-it-is-hidden μ μ μνλλ°,
λ Έλμ λ°°κ²½νλ©΄ λ§κ³ λ μ무κ²λ μμλ€....
κ·Έλμ μμ€μ½λλ₯Ό μ΄κ²μ κ² μ΄ν΄λ΄€λλ°, λ μ΄μ μμλΌ μ μλ κ²μ΄ μμ΄μ
λ€λ₯Έ λΈλ‘κ·Έμ νμ΄λ₯Ό μ°Έκ³ νκΈ°λ‘ νλ€.
μ°μ webpackμ΄ λ¬΄μμΈμ§ μμ보λλ‘ νμ!
webpack μ΄λ?
https://happy-jjang-a.tistory.com/124
Webpackμ νλμ μΈ μΉ κ°λ°μμ μ¬μ©λλ λꡬ μ€ νλ.
<μ£Όμ κΈ°λ₯>
1. λͺ¨λ λ²λ€λ§:
μΉ μ ν리μΌμ΄μ
μ μ¬λ¬ κ°μ νμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€. μλ₯Ό λ€μ΄, JavaScript νμΌ, CSS νμΌ, μ΄λ―Έμ§ νμΌ, HTML νμΌ λ±μ΄ μλ€. μ΄ νμΌλ€ κ°μλ μ’
μ’
μμ‘΄ κ΄κ³κ° μλ€. webpackμ μ΄λ¬ν νμΌλ€μ μ΄ν΄νκ³ , μ΄λ€ κ°μ κ΄κ³λ₯Ό νμ
νμ¬ νλμ μ΅μ νλ λ²λ€λ‘ λ¬Άμ΄μ€λ€.
2. λ‘λ (Loaders):
webpackμ μλ°μ€ν¬λ¦½νΈ νμΌ μ΄μΈμλ CSS, μ΄λ―Έμ§, ν°νΈ λ± λ€μν νμΌ νμμ μ²λ¦¬ν μ μλ€. μ΄λ₯Ό κ°λ₯νκ² νλ κ²μ΄ λ‘λμ΄λ€. λ‘λλ μ΄λ¬ν λ€λ₯Έ νμμ νμΌλ€μ μ½μ΄ λ€μ΄κ³ , webpackμ΄ μ΄ν΄ν μ μλ λͺ¨λλ‘ λ³νμμΌ μ€λ€.
3. νλ¬κ·ΈμΈ (Plugins):
λ‘λκ° κ°λ³ νμΌμ μ²λ¦¬νλλ° λ°ν΄, νλ¬κ·ΈμΈμ λ²λ€λ κ²°κ³Όλ¬Όμ μΆκ°μ μΈ μμ
μ μννλ€. μλ₯Ό λ€μ΄, μ½λ μμΆ, νκ²½ λ³μ μ£Όμ
, λ²λ€ μ΅μ ν λ±μ μμ
μ μνν μ μλ€.
4. κ°λ° μλ² (Development Server):
κ°λ° μ€μλ μ€μκ°μΌλ‘ λ³κ²½λ λ΄μ©μ νμΈν΄μΌ νλ€. webpackμ κ°λ° μλ²λ₯Ό μ 곡νμ¬ μ½λλ₯Ό μμ ν λλ§λ€ μλμΌλ‘ λ€μ λΉλνκ³ λΈλΌμ°μ λ₯Ό μλ‘κ³ μΉ¨ν΄μ€λ€.
5. λ²λ€ μ΅μ ν:
webpackμ λ²λ€λ νμΌμ ν¬κΈ°λ₯Ό μ΅μννκΈ° μν λ€μν μ€μ μ μ 곡νλ€. μ΄λ₯Ό ν΅ν΄ λΆνμν 곡백μ΄λ μ£Όμμ μ κ±°νκ³ , μ½λλ₯Ό μμΆνλ€.
6. λ€μ΄λλ―Ή λͺ¨λ λ‘λ©:
μ΄ν리μΌμ΄μ μμ νμν λͺ¨λμ λ°νμ μμ μ λμ μΌλ‘ λΆλ¬μ¬ μ μλ κΈ°λ₯μ μ 곡νλ€. μ΄λ νμν μ½λλ₯Ό νμν μμ μ λ‘λ©νμ¬ μ΄κΈ° λ‘λ© μκ°μ μ€μ¬μ€λ€.
7. νλ‘ νΈμλ νλ μμν¬ μ§μ:
λλΆλΆμ νλμ μΈ νλ‘ νΈμλ νλ μμν¬λ€ (Vue, React, Angular λ±)μ webpackμ μ¬μ©νλ κ²μ κΆμ₯νλ€. webpackμ μ΄λ¬ν νλ μμν¬μ ν¨κ» μ¬μ©λ λ λͺ¨λ κ΄λ¦¬μ λ²λ€λ§μ ν¨κ³Όμ μΌλ‘ ν΄μ€λ€.
μ¦, webpackμ νλ‘ νΈμλ κ°λ°μλ€μ΄ νλ‘μ νΈλ₯Ό ꡬμ±νκ³ κ΄λ¦¬νλ λ° λ§€μ° μ μ©ν λꡬμ΄λ€.
λͺ¨λν λ μ½λλ₯Ό ν¨κ³Όμ μΌλ‘ λ²λ€λ‘ λ¬Άμ΄μ λΈλΌμ°μ μμ λ‘λ©λλλ°, μ΄λ₯Ό ν΅ν΄ μ΄ν리μΌμ΄μ μ μ±λ₯μ μ΅μ νν μ μλ€.
...λΌκ³ νλλ° μ¬μ€ μ’ μ΄λ €μ΄ κ°λ μ΄λΌκ³ λκ»΄μ§λ€...
λ¬Έμ νμ΄λ₯Ό λ€μ μ§ννκ² λ€.
webpack:///src/components/YouWillNotFindThisRouteBecauseItIsHidden.vue νμΌμ
flag κ°μ΄ μ£ΌμμΌλ‘ μ²λ¦¬λμ΄ μμ΄μ νμΈνκ³ λ΅μ λ§νλ©΄ λλ€κ³ νλ€.
κ·Έλ°λ° λλ flag κ°μ΄ μ£ΌμμΌλ‘ μ²λ¦¬λμ΄ μλ λΆλΆμ μ°Ύμ μ μμλ€. (κ·Έλμ λ¬Έμ νμ΄ μ§νμ΄ μ λλ€.)
κ·Έ μ΄μ μ λν΄ μμ보μλλ°, (μ°Έκ³ : https://29223.tistory.com/36 , https://29223.tistory.com/37 )
μ΄ λ¬Έμ μ μΉν© νμΌμμ μ£ΌμμΌλ‘ μ²λ¦¬λ flag κ°μ νμΈν μ μλ μ΄μ λ, source mapμ΄ νμ±νλμ΄μκΈ° λλ¬Έμ΄λΌκ³ νλ€.
μμ€ λ§΅(Source Map) μ΄λ?
μμ€ λ§΅(Source Map)μ λ°°ν¬μ©μΌλ‘ λΉλν νμΌκ³Ό μλ³Έ νμΌμ μλ‘ μ°κ²°μμΌ μ£Όλ κΈ°λ₯μ΄λ€.
μΌλ°μ μΌλ‘ μλ²μ λ°°ν¬νκΈ° μ μ HTML, CSS, JS λ±μ μΉ μμμ μμΆνμ¬ μ±λ₯μ μ΅μ ννλ€.
κ·Έλ¬λ μμΆλ νμΌμμ μ€λ₯κ° λ°μνλ€λ©΄ μ΄λ»κ² λλ²κΉ ν μ μμκΉ?
μ΄λ μμ€ λ§΅μ μ¬μ© νλ©΄ λ°°ν¬μ© νμΌμ νΉμ λΆλΆμ΄ μλ³Έ μμ€μ μ΄λ€ λΆλΆμΈμ§ νμΈν μ μλ€.
μμ€ λ§΅μ μΉ κ°λ°μμ μ€μν λꡬλ‘, μ£Όλ‘ μ΅μ νλ μ½λ(μ£Όλ‘ JavaScript)λ₯Ό λλ²κΉ ν λ νμ©λλ€.
μ΅μ νλ μ½λλ λ³μ μ΄λ¦μ΄λ 곡백 λ±μ΄ μ κ±°λμ΄ νμΌ ν¬κΈ°κ° μ€μ΄λ€μ§λ§, μ΄λ‘ μΈν΄ λλ²κΉ μ΄ μ΄λ €μμ§λ€.
Source Mapμ μ΅μ νλ μ½λμ μλ³Έ μ½λ κ°μ λμ κ΄κ³λ₯Ό μ 곡νμ¬ λλ²κΉ μ μ©μ΄νκ² νλ€.
μ΄λ JSON νμμ νμΌλ‘, μ΅μ νλ μ½λμ ν΄λΉ μ½λμ μλ³Έ νμΌ κ°μ 맀ν μ 보λ₯Ό λ΄κ³ μλ€.
λΈλΌμ°μ κ°λ°μ λꡬμμ λλ²κΉ ν λ μ΅μ νλ μ½λ λμ μλ³Έ μ½λλ₯Ό 보μ¬μ€λ€.
μλ₯Ό λ€μ΄, TypeScriptλ‘ μμ±ν μ½λλ₯Ό JavaScriptλ‘ μ»΄νμΌνκ³ μ΅μ ννμ¬ μΉ νμ΄μ§μ ν¬ν¨μν¨λ€κ³ κ°μ ν΄ λ³΄λ©΄, ν¨κ» μμ±λ Source Mapμ μ¬μ©νλ©΄ λΈλΌμ°μ μμ λλ²κΉ ν λ TypeScript μ½λμ μ€λ₯ λ©μμ§μ ν¨κ» ν΄λΉ TypeScript νμΌμ μλ³Έ μμΉλ₯Ό νμν μ μλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ μ΅μ νλ μ½λμμ λ°μν μ€λ₯λ₯Ό μ μνκ² μλ³νκ³ ν΄κ²°ν μ μλ€.
κ·Έλ°λ° λλ μμ€λ§΅μ΄ νμ±νλμ΄μμ§ μμλ€.
μμ€λ§΅μ νμ±νμμΌμΌ μ£Όμμ²λ¦¬λ flag κ°μ νμΈν μ μλλ°
"μ΄ νμΌμ μμ€ λ§΅μ 건λλ°μμ΅λλ€."λΌλ λ¬Έκ΅¬κ° λμ€κ³ νμ±νμν¬ μλ μμλ€.
κ·Έλ μ§λ§
μΌμͺ½ μλλ₯Ό 보면
μμ€ λ§€ν λμ΄μλ νμΌμ νμΈν μ μμλ€.
(λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ "app.a92c~. jsμμ 맀νλ μμ€"λΌλ νμ λ¬Έκ΅¬κ° μκΈ΄λ€.)
κ·Έλ¦¬κ³ app.a92c507.... jsλ₯Ό λλ¬μ 보면 μλ³Έ μμ€λ₯Ό μ°Ύμ μ μλ€.
μ΄λ κ² μλ³Έ μμ€λ₯Ό μ°Ύμ μ μλ λ°©λ²μ λ²λ€λ§ λ μμ€μ κ°μ₯ λμ νΉλ³ν μ£Όμμ΄ μ‘΄μ¬νκΈ° λλ¬Έμ΄λ€.
μ΄ νΉλ³ν μ£Όμμ λΈλΌμ°μ κ° μ½μ΄ sourcemapμ μ°Ύμ μλ μμ€μ λ²λ€λ§λ μμ€λ₯Ό μ°κ²°νλ€.
(μ°Έκ³ : https://velog.io/@jiseong/Webpack-Devtool )
κ°λ°μ λꡬ νλ©΄(F12)μμ, μΌμͺ½ μμ μΈ κ°μ μ μμ΄μ½μ λλ₯΄λ©΄ κ°λ°μ 리μμ€ λ₯Ό μ νν μ μλ€.
κ·Έλ¬λ©΄ μλμͺ½μ κ°λ°μ 리μμ€ μ°½μ λμΈ μ μλλ° μλ³Έ μμ€λ₯Ό λ€μ΄λ‘λν μ μλ url μ λ³΄κ° λμ¨λ€.
app.a92c5074dafac0cb6365.js.map μ ν΄λΉνλ 보λΌμ μ²΄ν¬ λ°μ€ μμ λ§ν¬λ‘ μ΄λνλ©΄
( http://challenge01.root-me.org/web-client/ch27/static/js/app.a92c5074dafac0cb6365.js.map )
μλ³ΈνμΌμ λ€μ΄λ‘λνμ¬ νλκ·Έ κ°μ λ³Ό μ μμ κ²μ΄λ€.
// Here is your flag : BecauseSourceMapsAreGreatForDebuggingButNotForProduction
μμ€ μ½λμ μ μΌ μλ«λΆλΆμ μμλ€!
μ λ΅~ μμ£Ό λ§μ μκ°μ΄ κ±Έλ¦° λ¬Έμ μλ€...~
'SWLUG > μΉ ν΄νΉ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Webhacking.kr] old-28 (0) | 2023.09.28 |
---|---|
[webhacking.kr] old-12λ² (0) | 2023.09.27 |
[Root Me] Javascript - Authentication 2 (0) | 2023.09.23 |
[Root Me] HTTP - COOKIES (0) | 2023.09.23 |
[webhacking.kr] old-19λ² (0) | 2023.09.19 |