개발 일지 πŸ‘©‍πŸ’»

spring boot) js 파일 λ‚œλ…ν™” 방법

chuyj15 2025. 5. 12. 18:11
728x90
λ°˜μ‘ν˜•
SMALL


* μ•”ν˜Έν™” λΌμ΄λΈŒλŸ¬λ¦¬ λ‹€μš΄

(기쑴에 node.jsκ°€ μ„€μΉ˜λ˜μ–΄μžˆμ–΄μ•Ό ν•œλ‹€. node.js μ„€μΉ˜ 방법 : https://chuyj15.tistory.com/41)

cmdμ°½ κ΄€λ¦¬μž κΆŒν•œμœΌλ‘œ μ‹€ν–‰, μ•„λž˜λͺ…λ Ήμ–΄ μ‹€ν–‰

npm install -g javascript-obfuscator

( npm install -g λͺ…λ Ήμ–΄λŠ” μ „μ—­(Global) μ„€μΉ˜λ₯Ό 의미)

βœ… μ „μ—­ μ„€μΉ˜ μœ„μΉ˜

μ „μ—­ μ„€μΉ˜λŠ” 기본적으둜 λ‹€μŒ κ²½λ‘œμ— μ„€μΉ˜λ©λ‹ˆλ‹€:

πŸ”Ή Windows κΈ°μ€€

  • νŒ¨ν‚€μ§€ μœ„μΉ˜:
    C:\Users\<μ‚¬μš©μžμ΄λ¦„>\AppData\Roaming\npm\node_modules

  • μ‹€ν–‰ 파일 μœ„μΉ˜ (λͺ…λ Ήμ–΄λ‘œ 등둝됨):이 폴더가 PATH ν™˜κ²½ λ³€μˆ˜μ— λ“±λ‘λ˜μ–΄ μžˆμ–΄μ„œ javascript-obfuscator 같은 λͺ…λ Ήμ–΄λ₯Ό 아무 λ°μ„œλ‚˜ μ‹€ν–‰ν•  수 μžˆλŠ” κ²λ‹ˆλ‹€.
     
    C:\Users\<μ‚¬μš©μžμ΄λ¦„>\AppData\Roaming\npm

 

* λ‚œλ…ν™” ν›„, λ‚œλ…ν™”λœ νŒŒμΌ js-dist ν΄λ”λ‘œ μ΄λ™

ν•΄λ‹Ή ν”„λ‘œμ νŠΈλ₯Ό μ—° IDE의 ν„°λ―Έλ„μ—μ„œ μ•„λž˜ λͺ…λ Ήμ–΄ μ‹€ν–‰

(보톡 μ‹€ν–‰ μœ„μΉ˜λŠ” build.gradleμ΄λ‚˜ pom.xml 파일이 μžˆλŠ” 폴더)

cmd /c "javascript-obfuscator ./src/main/resources/static/js --output ./src/main/resources/static/js-dist --compact true --control-flow-flattening true --string-array true --string-array-encoding base64 --identifier-names-generator mangled --transform-object-keys true"

그러면 μ΄λ ‡κ²Œ js-dict 폴더 μ•„λž˜μ— μ•”ν˜Έν™”λœ jsνŒŒμΌλ“€μ΄ μƒμ„±λœλ‹€.

* Controller  파일 μˆ˜μ •

 λ‚œλ…ν™”λœ js파일이 λͺ¨μ—¬μžˆλŠ” 곳인 /js-dict μœ„μΉ˜λ₯Ό model에 λ„£μ–΄μ€Œ

@GetMapping("/device-control")
    public String deviceControl(Model model) {
        String jsPrefix = "/js-dist";
        model.addAttribute("jsPrefix", jsPrefix);
        return "pages/device/device-control";
    }

 

* html 파일 μˆ˜μ •

<script type="module" th:src="@{${jsPrefix + '/pages/device/device-control.js'}}"></script>

 

 


βœ… 2. λ‚œλ…ν™” μ˜΅μ…˜ μ„€λͺ…


πŸ“Œ --control-flow-flattening false

  • μ›λž˜ λͺ©μ : μ½”λ“œ 흐름을 λ³΅μž‘ν•˜κ²Œ λ§Œλ“€μ–΄ μ‚¬λžŒμ΄ 읽기 μ–΄λ ΅κ²Œ λ§Œλ“­λ‹ˆλ‹€.
  • 예: if, switch, while 등을 μ΄μƒν•œ λ°©μ‹μœΌλ‘œ λ°”κΏ‰λ‹ˆλ‹€.
  • 단점: CSP μœ„λ°˜ κ°€λŠ₯ (κ°„μ ‘ μ‹€ν–‰μ΄λ‚˜ eval λΉ„μŠ·ν•œ μ½”λ“œ 생성될 수 있음)

πŸ”Ή μ‚¬μš© μ‹œ:

--control-flow-flattening true

πŸ‘‰ CSP μœ„λ°˜ κ°€λŠ₯μ„± 증가, μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯

 

πŸ”Ή μ‚¬μš© μ•ˆ 함:

--control-flow-flattening false

πŸ‘‰ μ½”λ“œ 덜 λ³΅μž‘ν•˜μ§€λ§Œ CSP μœ„λ°˜ κ±±μ • 쀄어듦


πŸ“Œ --string-array false

  • μ›λž˜ λͺ©μ : μ½”λ“œμ— μ‚¬μš©λœ λ¬Έμžμ—΄μ„ λ°°μ—΄λ‘œ λͺ¨μ•„μ„œ μˆ¨κΉλ‹ˆλ‹€.
  • 예:↓ λ‚œλ…ν™” ν›„:
  • js
    var _0x1234 = ["hello"]; console.log(_0x1234[0]);
  • js
    console.log("hello");
  • 단점: CSP μœ„λ°˜ κ°€λŠ₯μ„± 높아짐 (λ¬Έμžμ—΄λ‘œ ν•¨μˆ˜λͺ…을 μ‘°λ¦½ν•˜κ±°λ‚˜ eval둜 μ‹€ν–‰ν•  수 있음)

πŸ”Ή μ‚¬μš© μ‹œ:

--string-array true

πŸ‘‰ λ‚œλ…ν™” κ°•λ ₯ν•˜μ§€λ§Œ CSP와 μΆ©λŒν•  수 있음

 

πŸ”Ή μ‚¬μš© μ•ˆ 함:

--string-array false

πŸ‘‰ λ‚œλ…ν™”λŠ” μ•½ν•΄μ§€μ§€λ§Œ μ•ˆμ •μ„± 높아짐

 

728x90
λ°˜μ‘ν˜•
LIST