CORS(Cross-Origin Resource Sharing)μ λν μ΄ν΄μ λμ λ°©λ²
1. CORSλ?
1.1 CORSμ κ°λ
CORSλ μΉ μ ν리μΌμ΄μ μ 보μμ κ°ννκΈ° μν΄ λμ λ μ μ± μ€ νλλ‘, μΉ νμ΄μ§μμ 리μμ€κ° λ€λ₯Έ λλ©μΈμ μλ κ²½μ° λΈλΌμ°μ μμ 보μμμ μ΄μ λ‘ μ΄ λ¦¬μμ€μ μ κ·Όνλ κ²μ μ ννλ μ μ± μ λλ€.
1.2 μ CORSκ° νμνκ°?
보μ μμ μ΄μ λ‘ μΈν΄ λΈλΌμ°μ λ λμΌ μΆμ² μ μ± (Same-Origin Policy)μ λ°λ₯΄κ³ μμ΅λλ€. μ΄λ μΉ νμ΄μ§μμ 리μμ€λ₯Ό μμ²ν λ, ν΄λΉ 리μμ€μ μΉ νμ΄μ§μ μΆμ²(νλ‘ν μ½, λλ©μΈ, ν¬νΈκ° μΌμΉνλ κ²½μ°)κ° κ°μμΌλ§ μμ²μ΄ νμ©λλ€λ κ·μΉμ λλ€. νμ§λ§ νλμ μΉ μ ν리μΌμ΄μ μμλ λ€μν μΆμ²μ 리μμ€μ μ κ·Όν΄μΌ νλ κ²½μ°κ° λ§μμ‘κΈ° λλ¬Έμ CORSκ° νμν©λλ€.
2. CORS λ°μ μμΈ
CORS μ€λ₯λ μ£Όλ‘ λ€μκ³Ό κ°μ κ²½μ°μ λ°μν©λλ€.
2.1 λ€λ₯Έ μΆμ²λ‘μ AJAX μμ²
μΉ νμ΄μ§μμ λ€λ₯Έ λλ©μΈμ APIλ 리μμ€μ μ§μ AJAX μμ²μ 보λ΄λ κ²½μ°, λΈλΌμ°μ λ Same-Origin Policyμ λ°λΌ μμ²μ μ°¨λ¨ν©λλ€.
2.2 νΉμ ν€λμ μ¬μ©
νΉμ ν€λ(μ: Authorization
, Content-Type
)λ₯Ό μ¬μ©νμ¬ μλ²μ μμ²μ 보λ΄λ κ²½μ°, μ¬μ κ²μ¬(preflight) μμ²μ΄ λ°μνκ³ μλ²κ° CORSλ₯Ό νμ©νμ§ μμΌλ©΄ μ€λ₯κ° λ°μν©λλ€.
3. CORS μ€λ₯ λμλ²
CORS μ€λ₯λ₯Ό ν΄κ²°νκΈ° μν΄ λ€μν λ°©λ²μ΄ μμ΅λλ€.
3.1 μλ² μΈ‘ μ€μ
μλ²μμ CORSλ₯Ό νμ©νλλ‘ μ€μ νλ λ°©λ²μ΄ μμ΅λλ€. μλ²μμλ μλ΅ ν€λμ Access-Control-Allow-Origin
λ±μ ν€λλ₯Ό μ€μ νμ¬ μ΄λ€ μΆμ²μμμ μμ²μ νμ©ν μ§ λͺ
μν©λλ€.
// Express.jsλ₯Ό μ¬μ©νλ κ²½μ°
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*'); // λͺ¨λ μΆμ² νμ©
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
// λλ¨Έμ§ λΌμ°ν
λ° λ―Έλ€μ¨μ΄ μ²λ¦¬
3.2 JSONP μ¬μ©
JSONP(JSON with Padding)λ₯Ό νμ©νμ¬ μλ‘ λ€λ₯Έ μΆμ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μμ΅λλ€. λ¨, JSONPλ GET μμ²λ§ κ°λ₯νλ©° 보μμμ μ΄μκ° μμ μ μμ΅λλ€.
<script>
function handleData(data) {
// λ°μ΄ν° μ²λ¦¬ λ‘μ§
}
</script>
<script src="http://example.com/api/data?callback=handleData"></script>
3.3 νλ‘μ μλ² μ¬μ©
ν΄λΌμ΄μΈνΈμμ μ§μ μμ²μ 보λ΄λ λμ λμΌν λλ©μΈμ μλ²μ μμ²μ 보λ΄κ³ , μλ²μμ λ€λ₯Έ μΆμ²λ‘μ μμ²μ λμ 보λ΄λ λ°©λ²μ μ¬μ©ν μ μμ΅λλ€.
4. CORSμ 보μ
CORSλ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ μμ ν 보μμ μ 곡νμ§λ μμ΅λλ€. λ°λΌμ μ€μν λ°μ΄ν°μ κ²½μ° μλ² μΈ‘μμλ μ μ ν 보μ μ‘°μΉλ₯Ό μ·¨ν΄μΌ ν©λλ€.
5. CORS μ€λ₯ ν΄κ²°μ μν Best Practice
CORS μ€λ₯λ₯Ό ν΄κ²°νλ κ°μ₯ μ’μ λ°©λ²μ μλ²μ ν΄λΌμ΄μΈνΈ
κ°μ μν΅μ μνν νκΈ° μν΄ μλ² μ€μ μ μ ννκ² μννλ κ²μ λλ€. μΆμ²λ₯Ό λͺ μμ μΌλ‘ μ§μ νκ±°λ λͺ¨λ μΆμ²λ₯Ό νμ©νλ λμ νμν μΆμ²λ§μ νμ©νλ κ²μ΄ μ’μ΅λλ€.
μ΄λ¬ν CORSμ λν κΈ°λ³Έμ μΈ μ΄ν΄μ λμ λ°©λ²μ ν΅ν΄ μΉ κ°λ°μμ λ°μν μ μλ μ€λ₯λ₯Ό μ΅μννκ³ λ³΄λ€ μμ νκ² μΉ μ ν리μΌμ΄μ μ κ°λ°ν μ μμ΅λλ€.
'IT' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬λ‘μ€ λΈλΌμ°μ§: λͺ¨λ μ¬μ©μμκ² μΌκ΄λ μΉ κ²½ν μ 곡νκΈ° (0) | 2024.02.14 |
---|---|
μΉ μ κ·Όμ±κ³Ό μΉ νμ€: μΉ κ°λ°μ ν΅μ¬ κ°λ (0) | 2024.02.14 |
PM2: Node.js νλ‘μΈμ€ κ΄λ¦¬μ (0) | 2024.02.14 |
TDD(Test-Driven Development) μκ°μ νμ© λ°©λ² (0) | 2024.02.13 |
Hadoop Ecosystem: λμ©λ λ°μ΄ν° μ²λ¦¬μ ν΅μ¬ (0) | 2024.02.13 |
λκΈ