κ΅μ°¨ μΆμ² 격리(COOP/COEP), SharedArrayBuffer 보μ, μ€νν°(Spectre) μν, κ·Έλ¦¬κ³ νλ μΉ κ°λ°μ μν λͺ¨λ² μ¬λ‘μ λν μ¬μΈ΅ λΆμ.
κ΅μ°¨ μΆμ² 격리: JavaScript SharedArrayBuffer 보μ
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ 보μμ μ¬μ ν κ°μ₯ μ€μν κ΄μ¬μ¬μ
λλ€. JavaScriptμ SharedArrayBuffer
μ κ°μ κ°λ ₯ν κΈ°λ₯μ λμ
μ μλΉν μ±λ₯ ν₯μμ κ°μ Έμμ§λ§, λμμ μ μ¬μ μΈ λ³΄μ μ·¨μ½μ μ μλ‘μ΄ κ²½λ‘λ₯Ό μ΄μμ΅λλ€. μ΄λ¬ν μνμ μννκΈ° μν΄ κ΅μ°¨ μΆμ² 격리(Cross-Origin Isolation, COOP/COEP)λΌλ κ°λ
μ΄ λμ
λμμ΅λλ€. μ΄ κΈμμλ κ΅μ°¨ μΆμ² 격리μ 볡μ‘μ±, SharedArrayBuffer
μμ κ΄κ³, 보μμ λ―ΈμΉλ μν₯ λ° μΉ μ ν리μΌμ΄μ
μμ ν¨κ³Όμ μΌλ‘ ꡬννλ λ°©λ²μ λν΄ μμΈν μμλ΄
λλ€.
SharedArrayBuffer μ΄ν΄νκΈ°
SharedArrayBuffer
λ μ¬λ¬ μμ΄μ νΈ(μ: μΉ μ컀 λλ λ€λ₯Έ λΈλΌμ°μ 컨ν
μ€νΈ)κ° λμΌν λ©λͺ¨λ¦¬μ μ κ·Όνκ³ μμ ν μ μλλ‘ νλ JavaScript κ°μ²΄μ
λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μ¨μ μΈ λ°μ΄ν° 곡μ μ λ³λ ¬ μ²λ¦¬κ° κ°λ₯ν΄μ§λ©°, μ΄λ μ΄λ―Έμ§ μ²λ¦¬, λΉλμ€ μΈμ½λ©/λμ½λ©, κ²μ κ°λ°κ³Ό κ°μ΄ κ³μ° μ§μ½μ μΈ μμ
μ νΉν μ μ©ν©λλ€.
μλ₯Ό λ€μ΄, λΈλΌμ°μ μμ μ€νλλ λΉλμ€ νΈμ§ μ ν리μΌμ΄μ
μ μμν΄ λ³΄μΈμ. SharedArrayBuffer
λ₯Ό μ¬μ©νλ©΄ λ©μΈ μ€λ λμ μ¬λ¬ μΉ μμ»€κ° λΉλμ€μ λ€λ₯Έ νλ μμμ λμμ μμ
νμ¬ μ²λ¦¬ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€.
κ·Έλ¬λ λ€λ₯Έ μΆμ²(λλ©μΈ) κ°μ λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ κΈ°λ₯μ μ μ¬μ μΈ λ³΄μ μνμ μ΄λν©λλ€. μ£Όμ μ°λ €λ μ€νν°(Spectre)μ κ°μ νμ΄λ° 곡격μ μ μ©μ λλ€.
μ€νν°(Spectre) μ·¨μ½μ κ³Ό κ·Έ μν₯
μ€νν°(Spectre)λ νλ νλ‘μΈμμ μν₯μ λ―ΈμΉλ μΆμΈ‘ μ€ν(speculative execution) μ·¨μ½μ μ ν μ’ λ₯μ λλ€. μ΄ μ·¨μ½μ λ€μ μ μ± μ½λκ° νλ‘μΈμ μΊμμ μ μ₯λ λ―Όκ°ν μ 보λ₯Ό ν¬ν¨νμ¬ μ κ·Όν΄μλ μ λλ λ°μ΄ν°μ μ μ¬μ μΌλ‘ μ κ·Όν μ μλλ‘ νμ©ν©λλ€.
μΉ λΈλΌμ°μ μ λ§₯λ½μμ, μ€νν°λ μ
μμ μΈ JavaScript μ½λμ μν΄ λ€λ₯Έ μΉμ¬μ΄νΈλ μ¬μ§μ΄ λΈλΌμ°μ μ체μμ λ°μ΄ν°λ₯Ό μ μΆνλ λ° μ
μ©λ μ μμ΅λλ€. SharedArrayBuffer
λ μ μ ν 격리λμ§ μμμ λ, μμ
νμ΄λ°μ μ λ°νκ² μΈ‘μ νλ λ° μ¬μ©λ μ μμ΄ μ€νν°μ μ μ¬ν μ·¨μ½μ μ μ
μ©νκΈ° μ½κ² λ§λλλ€. 곡격μλ SharedArrayBuffer
μ μνΈ μμ©νλ JavaScript μ½λλ₯Ό μ μ€νκ² μμ±νκ³ νμ΄λ° μ°¨μ΄λ₯Ό κ΄μ°°ν¨μΌλ‘μ¨ μ μ¬μ μΌλ‘ νλ‘μΈμ μΊμμ λ΄μ©μ μΆλ‘ νκ³ λ―Όκ°ν μ 보λ₯Ό μΆμΆν μ μμ΅λλ€.
μ¬μ©μκ° μ€νν°λ₯Ό μ μ©νλλ‘ μ€κ³λ JavaScript μ½λλ₯Ό μ€ννλ μ μ± μΉμ¬μ΄νΈλ₯Ό λ°©λ¬Ένλ μλ리μ€λ₯Ό μκ°ν΄λ³΄μμμ€. κ΅μ°¨ μΆμ² κ²©λ¦¬κ° μλ€λ©΄, μ΄ μ½λλ μ¬μ©μκ° λμΌν λΈλΌμ°μ μΈμ μμ λ°©λ¬Έν λ€λ₯Έ μΉμ¬μ΄νΈ(μ: μν μ 보λ κ°μΈ μ 보)λ‘λΆν° λ°μ΄ν°λ₯Ό μ μ¬μ μΌλ‘ μ½μ μ μμ΅λλ€.
ꡬμμλ‘μμ κ΅μ°¨ μΆμ² 격리(COOP/COEP)
κ΅μ°¨ μΆμ² 격리λ SharedArrayBuffer
λ° μ€νν°μ μ μ¬ν μ·¨μ½μ κ³Ό κ΄λ ¨λ μνμ μννλ 보μ κΈ°λ₯μ
λλ€. μ΄λ κΈ°λ³Έμ μΌλ‘ λ€λ₯Έ μΉμ¬μ΄νΈμ λΈλΌμ°μ 컨ν
μ€νΈ μ¬μ΄μ λ μ격ν 보μ κ²½κ³λ₯Ό λ§λ€μ΄ μ
μ± μ½λκ° λ―Όκ°ν λ°μ΄ν°μ μ κ·Όνλ κ²μ λ°©μ§ν©λλ€.
κ΅μ°¨ μΆμ² 격리λ λ κ°μ HTTP μλ΅ ν€λλ₯Ό μ€μ νμ¬ κ΅¬νλ©λλ€:
- Cross-Origin-Opener-Policy (COOP): μ΄ ν€λλ λ€λ₯Έ λ¬Έμκ° νμ¬ λ¬Έμλ₯Ό νμ
μΌλ‘ μ΄ μ μλμ§ μ¬λΆλ₯Ό μ μ΄ν©λλ€. μ΄ κ°μ
same-origin
λλsame-origin-allow-popups
μΌλ‘ μ€μ νλ©΄ νμ¬ μΆμ²λ₯Ό λ€λ₯Έ μΆμ²λ‘λΆν° 격리ν©λλ€. - Cross-Origin-Embedder-Policy (COEP): μ΄ ν€λλ λ¬Έμκ° λ‘λν μ μλ κΆνμ λͺ
μμ μΌλ‘ λΆμ¬νμ§ μμ κ΅μ°¨ μΆμ² 리μμ€λ₯Ό λ‘λνλ κ²μ λ°©μ§ν©λλ€. μ΄ κ°μ
require-corp
λ‘ μ€μ νλ©΄ λͺ¨λ κ΅μ°¨ μΆμ² 리μμ€κ° CORS(Cross-Origin Resource Sharing)κ° νμ±νλ μνλ‘ κ°μ ΈμμΌ νλ©°, ν΄λΉ 리μμ€λ₯Ό ν¬ν¨νλ HTML νκ·Έμcrossorigin
μμ±μ μ¬μ©ν΄μΌ ν¨μ κ°μ ν©λλ€.
μ΄λ¬ν ν€λλ₯Ό μ€μ ν¨μΌλ‘μ¨, μΉμ¬μ΄νΈλ₯Ό λ€λ₯Έ μΉμ¬μ΄νΈλ‘λΆν° ν¨κ³Όμ μΌλ‘ 격리νμ¬ κ³΅κ²©μκ° μ€νν°μ μ μ¬ν μ·¨μ½μ μ μ μ©νκΈ° ν¨μ¬ λ μ΄λ ΅κ² λ§λλλ€.
κ΅μ°¨ μΆμ² 격리μ μλ λ°©μ
COOPμ COEPκ° μ΄λ»κ² ν¨κ» μλνμ¬ κ΅μ°¨ μΆμ² 격리λ₯Ό λ¬μ±νλμ§ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€:
Cross-Origin-Opener-Policy (COOP)
COOP ν€λλ νμ¬ λ¬Έμκ° νμ μΌλ‘ μ¬λ λ€λ₯Έ λ¬Έμλ νμ¬ λ¬Έμλ₯Ό νμ μΌλ‘ μ¬λ λ€λ₯Έ λ¬Έμμ μνΈ μμ©νλ λ°©μμ μ μ΄ν©λλ€. μΈ κ°μ§ κ°λ₯ν κ°μ΄ μμ΅λλ€:
unsafe-none
: μ΄κ²μ κΈ°λ³Έκ°μ΄λ©°, μ΄λ€ λ€λ₯Έ λ¬Έμλ νμ¬ λ¬Έμλ₯Ό μ΄ μ μλλ‘ νμ©ν©λλ€. μ΄λ κΈ°λ³Έμ μΌλ‘ COOP 보νΈλ₯Ό λΉνμ±νν©λλ€.same-origin
: μ΄ κ°μ νμ¬ λ¬Έμκ° λμΌν μΆμ²μ λ¬Έμμ μν΄μλ§ μ΄λ¦΄ μ μλλ‘ κ²©λ¦¬ν©λλ€. λ€λ₯Έ μΆμ²μ λ¬Έμκ° νμ¬ λ¬Έμλ₯Ό μ΄λ €κ³ νλ©΄ μ°¨λ¨λ©λλ€.same-origin-allow-popups
: μ΄ κ°μ λμΌν μΆμ²μ λ¬Έμκ° νμ¬ λ¬Έμλ₯Ό νμ μΌλ‘ μ΄ μ μλλ‘ νμ©νμ§λ§, λ€λ₯Έ μΆμ²μ λ¬Έμκ° κ·Έλ κ² νλ κ²μ λ°©μ§ν©λλ€. μ΄λ λμΌν μΆμ²μμ νμ μ μ΄μ΄μΌ νλ μλ리μ€μ μ μ©ν©λλ€.
COOPλ₯Ό same-origin
λλ same-origin-allow-popups
μΌλ‘ μ€μ νλ©΄ λ€λ₯Έ μΆμ²μ λ¬Έμκ° μΉμ¬μ΄νΈμ window κ°μ²΄μ μ κ·Όνλ κ²μ λ§μ 곡격 νλ©΄μ μ€μ
λλ€.
μλ₯Ό λ€μ΄, μΉμ¬μ΄νΈκ° COOPλ₯Ό same-origin
μΌλ‘ μ€μ νκ³ μ
μ± μΉμ¬μ΄νΈκ° μ¬λ¬λΆμ μΉμ¬μ΄νΈλ₯Ό νμ
μΌλ‘ μ΄λ €κ³ νλ©΄, μ
μ± μΉμ¬μ΄νΈλ μ¬λ¬λΆμ μΉμ¬μ΄νΈμ window
κ°μ²΄λ κ·Έ μμ±μ μ κ·Όν μ μμ΅λλ€. μ΄λ μ
μ± μΉμ¬μ΄νΈκ° μ¬λ¬λΆμ μΉμ¬μ΄νΈ μ½ν
μΈ λ₯Ό μ‘°μνκ±°λ λ―Όκ°ν μ 보λ₯Ό νμΉλ κ²μ λ°©μ§ν©λλ€.
Cross-Origin-Embedder-Policy (COEP)
COEP ν€λλ νμ¬ λ¬Έμκ° λ‘λν μ μλ κ΅μ°¨ μΆμ² 리μμ€λ₯Ό μ μ΄ν©λλ€. μΈ κ°μ§ μ£Όμ κ°μ΄ μμ΅λλ€:
unsafe-none
: μ΄κ²μ κΈ°λ³Έκ°μ΄λ©°, λ¬Έμκ° μ΄λ€ κ΅μ°¨ μΆμ² 리μμ€λ λ‘λν μ μλλ‘ νμ©ν©λλ€. μ΄λ κΈ°λ³Έμ μΌλ‘ COEP 보νΈλ₯Ό λΉνμ±νν©λλ€.require-corp
: μ΄ κ°μ λͺ¨λ κ΅μ°¨ μΆμ² 리μμ€κ° CORSκ° νμ±νλ μνλ‘ κ°μ ΈμμΌ νλ©°, ν΄λΉ 리μμ€λ₯Ό ν¬ν¨νλ HTML νκ·Έμcrossorigin
μμ±μ μ¬μ©ν΄μΌ ν¨μ μꡬν©λλ€. μ΄λ κ΅μ°¨ μΆμ² 리μμ€λ₯Ό νΈμ€ν νλ μλ²κ° μ¬λ¬λΆμ μΉμ¬μ΄νΈκ° 리μμ€λ₯Ό λ‘λνλλ‘ λͺ μμ μΌλ‘ νμ©ν΄μΌ ν¨μ μλ―Έν©λλ€.credentialless
: `require-corp`μ μ μ¬νμ§λ§, μμ²μ μ격 μ¦λͺ (μΏ ν€, μΈμ¦ ν€λ)μ 보λ΄μ§ μμ΅λλ€. μ΄λ μ¬μ©μ νΉμ μ 보λ₯Ό μ μΆνμ§ μκ³ κ³΅κ° λ¦¬μμ€λ₯Ό λ‘λνλ λ° μ μ©ν©λλ€.
require-corp
κ°μ κ°μ₯ μμ ν μ΅μ
μ΄λ©° λλΆλΆμ μ¬μ© μ¬λ‘μ κΆμ₯λ©λλ€. μ΄λ λͺ¨λ κ΅μ°¨ μΆμ² 리μμ€κ° μΉμ¬μ΄νΈμ μν΄ λ‘λλλλ‘ λͺ
μμ μΌλ‘ μΉμΈλμμμ 보μ₯ν©λλ€.
require-corp
λ₯Ό μ¬μ©ν λλ μΉμ¬μ΄νΈκ° λ‘λνλ λͺ¨λ κ΅μ°¨ μΆμ² 리μμ€κ° μ μ ν CORS ν€λμ ν¨κ» μ 곡λλμ§ νμΈν΄μΌ ν©λλ€. μ΄λ 리μμ€λ₯Ό νΈμ€ν
νλ μλ²κ° μλ΅μ Access-Control-Allow-Origin
ν€λλ₯Ό ν¬ν¨ν΄μΌ νλ©°, μΉμ¬μ΄νΈμ μΆμ²λ *
(λͺ¨λ μΆμ²κ° 리μμ€λ₯Ό λ‘λνλλ‘ νμ©νμ§λ§ μΌλ°μ μΌλ‘ 보μμμ μ΄μ λ‘ κΆμ₯λμ§ μμ)λ₯Ό μ§μ ν΄μΌ ν¨μ μλ―Έν©λλ€.
μλ₯Ό λ€μ΄, μΉμ¬μ΄νΈκ° CDNμμ μ΄λ―Έμ§λ₯Ό λ‘λνλ κ²½μ°, CDN μλ²λ μλ΅μ μΉμ¬μ΄νΈμ μΆμ²λ₯Ό μ§μ νλ Access-Control-Allow-Origin
ν€λλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€. CDN μλ²κ° μ΄ ν€λλ₯Ό ν¬ν¨νμ§ μμΌλ©΄ μ΄λ―Έμ§κ° λ‘λλμ§ μκ³ μΉμ¬μ΄νΈμ μ€λ₯κ° νμλ©λλ€.
crossorigin
μμ±μ <img>
, <script>
, <link>
μ κ°μ HTML νκ·Έμμ 리μμ€κ° CORSλ₯Ό νμ±ννμ¬ κ°μ ΈμμΌ ν¨μ λνλ΄λ λ° μ¬μ©λ©λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
<img src="https://example.com/image.jpg" crossorigin="anonymous">
<script src="https://example.com/script.js" crossorigin="anonymous">
anonymous
κ°μ μμ²μ΄ μ격 μ¦λͺ
(μ: μΏ ν€) μμ΄ μ΄λ£¨μ΄μ ΈμΌ ν¨μ λνλ
λλ€. μ격 μ¦λͺ
μ 보λ΄μΌ νλ κ²½μ° use-credentials
κ°μ μ¬μ©ν μ μμ§λ§, 리μμ€λ₯Ό νΈμ€ν
νλ μλ²κ° μλ΅μ Access-Control-Allow-Credentials: true
ν€λλ₯Ό ν¬ν¨νμ¬ μ격 μ¦λͺ
μ μ‘μ νμ©νλμ§ νμΈν΄μΌ ν©λλ€.
κ΅μ°¨ μΆμ² 격리 ꡬννκΈ°
κ΅μ°¨ μΆμ² 격리λ₯Ό ꡬννλ €λ©΄ μλ² μλ΅μ COOP λ° COEP ν€λλ₯Ό μ€μ ν΄μΌ ν©λλ€. μ΄λ¬ν ν€λλ₯Ό μ€μ νλ ꡬ체μ μΈ λ°©λ²μ μλ² κΈ°μ μ λ°λΌ λ€λ¦ λλ€.
ꡬν μμ
λ€μμ μ¬λ¬ μλ² νκ²½μμ COOP λ° COEP ν€λλ₯Ό μ€μ νλ λ°©λ²μ λν λͺ κ°μ§ μμμ λλ€:
Apache
.htaccess
νμΌμ λ€μ μ€μ μΆκ°νμμμ€:
Header set Cross-Origin-Opener-Policy "same-origin"
Header set Cross-Origin-Embedder-Policy "require-corp"
Nginx
Nginx κ΅¬μ± νμΌμ λ€μ μ€μ μΆκ°νμμμ€:
add_header Cross-Origin-Opener-Policy "same-origin";
add_header Cross-Origin-Embedder-Policy "require-corp";
Node.js (Express)
app.use((req, res, next) => {
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
next();
});
Python (Flask)
@app.after_request
def add_security_headers(response):
response.headers['Cross-Origin-Opener-Policy'] = 'same-origin'
response.headers['Cross-Origin-Embedder-Policy'] = 'require-corp'
return response
PHP
header('Cross-Origin-Opener-Policy: same-origin');
header('Cross-Origin-Embedder-Policy: require-corp');
μ΄λ¬ν μμ λ₯Ό νΉμ μλ² νκ²½ λ° κ΅¬μ±μ λ§κ² μ‘°μ νλ κ²μ μμ§ λ§μμμ€.
κ΅μ°¨ μΆμ² 격리 νμΈ
κ΅μ°¨ μΆμ² 격리λ₯Ό ꡬνν νμλ μ¬λ°λ₯΄κ² μλνλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€. λΈλΌμ°μ μ κ°λ°μ λꡬμμ COOP λ° COEP ν€λλ₯Ό νμΈνμ¬ μ΄λ₯Ό μνν μ μμ΅λλ€. λ€νΈμν¬ νμ μ΄κ³ μΉμ¬μ΄νΈμ λ©μΈ λ¬Έμμ λν μλ΅ ν€λλ₯Ό κ²μ¬νμμμ€. ꡬμ±ν κ°μΌλ‘ μ€μ λ Cross-Origin-Opener-Policy
λ° Cross-Origin-Embedder-Policy
ν€λλ₯Ό λ³Ό μ μμ΄μΌ ν©λλ€.
λν JavaScriptμ crossOriginIsolated
μμ±μ μ¬μ©νμ¬ μΉμ¬μ΄νΈκ° κ΅μ°¨ μΆμ² 격리λμλμ§ νμΈν μ μμ΅λλ€:
if (crossOriginIsolated) {
console.log("κ΅μ°¨ μΆμ² κ²©λ¦¬κ° νμ±νλμμ΅λλ€.");
} else {
console.warn("κ΅μ°¨ μΆμ² κ²©λ¦¬κ° νμ±νλμ§ μμμ΅λλ€.");
}
crossOriginIsolated
κ° true
μ΄λ©΄ κ΅μ°¨ μΆμ² κ²©λ¦¬κ° νμ±νλμμμ μλ―Ένλ©° SharedArrayBuffer
λ₯Ό μμ νκ² μ¬μ©ν μ μμ΅λλ€.
μΌλ°μ μΈ λ¬Έμ ν΄κ²°
κ΅μ°¨ μΆμ² 격리λ₯Ό ꡬννλ κ²μ λλλ‘ μ΄λ €μΈ μ μμΌλ©°, νΉν μΉμ¬μ΄νΈκ° λ§μ κ΅μ°¨ μΆμ² 리μμ€λ₯Ό λ‘λνλ κ²½μ° λμ± κ·Έλ μ΅λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ ν΄κ²° λ°©λ²μ λλ€:
- 리μμ€ λ‘λ μ€ν¨:
COEP: require-corp
λ₯Ό μ¬μ©νλ κ²½μ° λͺ¨λ κ΅μ°¨ μΆμ² 리μμ€κ° μ¬λ°λ₯Έ CORS ν€λ(Access-Control-Allow-Origin
)μ ν¨κ» μ 곡λκ³ , ν΄λΉ 리μμ€λ₯Ό ν¬ν¨νλ HTML νκ·Έμcrossorigin
μμ±μ μ¬μ©νκ³ μλμ§ νμΈνμμμ€. - νΌν© μ½ν μΈ μ€λ₯: λͺ¨λ 리μμ€κ° HTTPSλ₯Ό ν΅ν΄ λ‘λλλμ§ νμΈνμμμ€. HTTPμ HTTPS 리μμ€λ₯Ό νΌν©νλ©΄ 보μ κ²½κ³ κ° λ°μνκ³ λ¦¬μμ€ λ‘λκ° μ€λ¨λ μ μμ΅λλ€.
- νΈνμ± λ¬Έμ : ꡬν λΈλΌμ°μ λ COOP λ° COEPλ₯Ό μ§μνμ§ μμ μ μμ΅λλ€. ꡬν λΈλΌμ°μ μ λν λ체 λμμ μ 곡νκΈ° μν΄ κΈ°λ₯ κ°μ§ λΌμ΄λΈλ¬λ¦¬λ ν΄λ¦¬ν μ¬μ©μ κ³ λ €νμμμ€. κ·Έλ¬λ μμ ν 보μ μ΄μ μ μ§μλλ λΈλΌμ°μ μμλ§ μ€νλ©λλ€.
- νμ¬ μ€ν¬λ¦½νΈμ λ―ΈμΉλ μν₯: μΌλΆ νμ¬ μ€ν¬λ¦½νΈλ κ΅μ°¨ μΆμ² 격리μ νΈνλμ§ μμ μ μμ΅λλ€. κ΅μ°¨ μΆμ² 격리λ₯Ό ꡬνν ν μΉμ¬μ΄νΈλ₯Ό μ² μ ν ν μ€νΈνμ¬ λͺ¨λ νμ¬ μ€ν¬λ¦½νΈκ° μ¬λ°λ₯΄κ² μλνλμ§ νμΈνμμμ€. CORS λ° COEP μ§μμ μμ²νκΈ° μν΄ νμ¬ μ€ν¬λ¦½νΈ μ 곡μ 체μ μ°λ½ν΄μΌ ν μλ μμ΅λλ€.
SharedArrayBufferμ λμ
SharedArrayBuffer
λ μλΉν μ±λ₯ μ΄μ μ μ 곡νμ§λ§, νΉν κ΅μ°¨ μΆμ² 격리 ꡬνμ 볡μ‘μ±μ λν΄ μ°λ €νλ κ²½μ° νμ μ¬λ°λ₯Έ ν΄κ²°μ±
μ μλλλ€. κ³ λ €ν΄ λ³Ό λͺ κ°μ§ λμμ λ€μκ³Ό κ°μ΅λλ€:
- λ©μμ§ μ λ¬:
postMessage
APIλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ λΈλΌμ°μ 컨ν μ€νΈ κ°μ λ°μ΄ν°λ₯Ό μ μ‘ν©λλ€. μ΄λ λ©λͺ¨λ¦¬λ₯Ό μ§μ 곡μ νμ§ μμΌλ―λ‘SharedArrayBuffer
λ³΄λ€ μμ ν λμμ λλ€. κ·Έλ¬λ λμ©λ λ°μ΄ν° μ μ‘μλ λ ν¨μ¨μ μΌ μ μμ΅λλ€. - WebAssembly: WebAssembly(Wasm)λ μΉ λΈλΌμ°μ μμ μ€νν μ μλ λ°μ΄λ리 λͺ
λ Ήμ΄ νμμ
λλ€. κ±°μ λ€μ΄ν°λΈμ κ°κΉμ΄ μ±λ₯μ μ 곡νλ©°
SharedArrayBuffer
μ μμ‘΄νμ§ μκ³ κ³μ° μ§μ½μ μΈ μμ μ μννλ λ° μ¬μ©ν μ μμ΅λλ€. Wasmμ λν JavaScriptλ³΄λ€ λ μμ ν μ€ν νκ²½μ μ 곡ν μ μμ΅λλ€. - μλΉμ€ μ컀: μλΉμ€ μ컀λ λ°±κ·ΈλΌμ΄λ μμ
μ μννκ³ λ°μ΄ν°λ₯Ό μΊμνλ λ° μ¬μ©ν μ μμ΅λλ€. λν λ€νΈμν¬ μμ²μ κ°λ‘μ±κ³ μλ΅μ μμ νλ λ°λ μ¬μ©ν μ μμ΅λλ€.
SharedArrayBuffer
λ₯Ό μ§μ λ체νμ§λ μμ§λ§, 곡μ λ©λͺ¨λ¦¬μ μμ‘΄νμ§ μκ³ μΉμ¬μ΄νΈμ μ±λ₯μ ν₯μμν€λ λ° μ¬μ©ν μ μμ΅λλ€.
κ΅μ°¨ μΆμ² 격리μ μ΄μ
SharedArrayBuffer
μ μμ ν μ¬μ©μ κ°λ₯νκ² νλ κ² μΈμλ κ΅μ°¨ μΆμ² 격리λ λ€μκ³Ό κ°μ μ¬λ¬ κ°μ§ λ€λ₯Έ μ΄μ μ μ 곡ν©λλ€:
- 보μ κ°ν: μ€νν°μ μ μ¬ν μ·¨μ½μ λ° κΈ°ν νμ΄λ° 곡격과 κ΄λ ¨λ μνμ μνν©λλ€.
- μ±λ₯ ν₯μ:
SharedArrayBuffer
λ₯Ό μ¬μ©νμ¬ κ³μ° μ§μ½μ μΈ μμ μ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. - μΉμ¬μ΄νΈμ 보μ νμΈμ λν λ λ§μ μ μ΄: μΉμ¬μ΄νΈμμ λ‘λν μ μλ κ΅μ°¨ μΆμ² 리μμ€λ₯Ό λ λ§μ΄ μ μ΄ν μ μμ΅λλ€.
- λ―Έλ 보μ₯: μΉ λ³΄μμ΄ κ³μ λ°μ ν¨μ λ°λΌ κ΅μ°¨ μΆμ² 격리λ λ―Έλμ 보μ κ°νλ₯Ό μν κ²¬κ³ ν κΈ°λ°μ μ 곡ν©λλ€.
κ²°λ‘
κ΅μ°¨ μΆμ² 격리(COOP/COEP)λ νλ μΉ κ°λ°, νΉν SharedArrayBuffer
λ₯Ό μ¬μ©ν λ μ€μν 보μ κΈ°λ₯μ
λλ€. κ΅μ°¨ μΆμ² 격리λ₯Ό ꡬνν¨μΌλ‘μ¨ μ€νν°μ μ μ¬ν μ·¨μ½μ λ° κΈ°ν νμ΄λ° 곡격과 κ΄λ ¨λ μνμ μννλ©΄μ SharedArrayBuffer
κ° μ 곡νλ μ±λ₯ μ΄μ μ κ³μ νμ©ν μ μμ΅λλ€. ꡬν μ κ΅μ°¨ μΆμ² 리μμ€ λ‘λ© λ° μ μ¬μ μΈ νΈνμ± λ¬Έμ μ λν μ μ€ν κ³ λ €κ° νμν μ μμ§λ§, 보μμμ μ΄μ κ³Ό μ±λ₯ ν₯μμ κ·Έλ§ν κ°μΉκ° μμ΅λλ€. μΉμ΄ λ°μ ν¨μ λ°λΌ, κ΅μ°¨ μΆμ² 격리μ κ°μ 보μ λͺ¨λ² μ¬λ‘λ₯Ό μμ©νλ κ²μ μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκ³ μμ νκ³ λ³΄μλ μ¨λΌμΈ κ²½νμ 보μ₯νλ λ° μ μ λ μ€μν΄μ§κ³ μμ΅λλ€.