π CORS μ μ± , λͺ¨λ λ°±μλ κ°λ°μκ° κΌ μμμΌ ν κ²
Source: Dev.to

CORSλ 무μμΈκ°?
CORSλ ν μΆμ²(λλ©μΈ)μ 리μμ€κ° λ€λ₯Έ μΆμ²μ μν΄ μ΄λ»κ² μ κ·Όλ μ μλμ§λ₯Ό μ μ΄νλ λΈλΌμ°μ 보μ λ©μ»€λμ¦μ λλ€.
Important: CORSλ λΈλΌμ°μ μ μν΄ κ°μ μ μ©λμ§λ§, μ€μ μ λ°±μλμμ ν©λλ€.
κ°μ₯ νν CORS μ€μ
Access-Control-Allow-Origin: *
μ΄ ν€λλ λͺ¨λ μΉμ¬μ΄νΈκ° μ¬λ¬λΆμ APIλ₯Ό νΈμΆν μ μκ² ν©λλ€. APIκ° μΏ ν€, ν ν°, μΈμ λ±μ μ¬μ©νλ€λ©΄ μ΄λ μ¬κ°ν 보μ μνμ΄ λ©λλ€.
μμ ν CORS μ€μ μ μν λͺ¨λ² μ¬λ‘
1οΈβ£ μ λ’°ν μ μλ μΆμ² νμ© λ¦¬μ€νΈ μ¬μ©
μλ €μ§ λλ©μΈλ§ νμ©ν©λλ€:
const allowedOrigins = [
'https://app.example.com',
'https://admin.example.com'
];
2οΈβ£ μ격 μ¦λͺ κ³Ό ν¨κ» μμΌλμΉ΄λ μ¬μ© κΈμ§
μΏ ν€, ν€λμ ν¬ν¨λ JWT, μΈμ λ±μ μ¬μ©ν λλ μ νν μΆμ²λ₯Ό μ§μ ν΄μΌ ν©λλ€:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentialsκ° trueμΌ κ²½μ° *λ νμ©λμ§ μμ΅λλ€.
3οΈβ£ νμ©ν HTTP λ©μλ μ ν
APIκ° μ€μ λ‘ νμλ‘ νλ λ©μλλ§ νμ©ν©λλ€:
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
λΆνμνκ² PATCHλ OPTIONSμ κ°μ μ¬μ©λμ§ μλ λ©μλλ₯Ό λ
ΈμΆνμ§ λ§μΈμ.
4οΈβ£ νμ© ν€λ μ ν
μμ² ν€λ μ€ νμ©ν νλͺ©μ λͺ μν©λλ€:
Access-Control-Allow-Headers: Content-Type, Authorization
5οΈβ£ ν리νλΌμ΄νΈ(OPTIONS) μμ²μ μ¬λ°λ₯΄κ² μ²λ¦¬
λΈλΌμ°μ λ νΉμ API νΈμΆ μ μ OPTIONS μμ²μ 보λ
λλ€.
λͺ¨λ² μ¬λ‘:
- λΉ λ₯΄κ² μλ΅ν©λλ€(μ:
204 No Content). - ν리νλΌμ΄νΈ μλ΅μ μΈμ¦μ μꡬνμ§ μμ΅λλ€.
- μ μ ν CORS ν€λλ₯Ό λ°νν©λλ€.
6οΈβ£ νκ²½λ³ CORS κ·μΉ
| νκ²½ | μ μ± |
|---|---|
| Development | localhost νμ© |
| Staging | ν μ€νΈ λλ©μΈ νμ© |
| Production | μ격ν νμ© λ¦¬μ€νΈ μ μ© |
μ΄ μ κ·Όλ²μ κ°λ°μ νΈλ¦¬νκ² νλ©΄μλ νλ‘λμ μμλ 보μμ μ μ§ν©λλ€.
7οΈβ£ CORSλ₯Ό 보μ λ©μ»€λμ¦μΌλ‘ μ€μΈνμ§ λ§ κ²
CORSλ λ€μμ λ체νμ§ μμ΅λλ€:
- μΈμ¦
- μΈκ°
- μλ μ ν
- μ λ ₯ κ²μ¦
곡격μλ μ¬μ ν Postmanμ΄λ curl κ°μ λꡬλ₯Ό μ¬μ©ν΄ APIλ₯Ό μ§μ νΈμΆν μ μμ΅λλ€.
μμ: μμ ν Node.js CORS μ€μ
const cors = require('cors');
const express = require('express');
const app = express();
app.use(cors({
origin: ['https://app.example.com'],
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
maxAge: 86400 // seconds
}));
λ©΄μ ν
Q: CORSλ νλ‘ νΈμλ 보μ κΈ°λ₯μΈκ°μ, λ°±μλ 보μ κΈ°λ₯μΈκ°μ?
A: CORSλ λΈλΌμ°μ μ μν΄ κ°μ μ μ©λμ§λ§, μ€μ μ λ°±μλμμ μ μ΄ν©λλ€.
λ§λ¬΄λ¦¬ μκ°
νλ₯ν λ°±μλ κ°λ°μλ:
- μ΅μ κΆν μμΉμ λ§λ CORS μ€μ μ μ¬μ©ν©λλ€.
- νλ‘λμ μμλ μμΌλμΉ΄λλ₯Ό νΌν©λλ€.
- νκ²½λ³ μ€μ μ ꡬλΆν©λλ€.
- CORSκ° μ€μ 보μ μ μ΄λ₯Ό λ체ν μ μλ€λ κ²μ μ΄ν΄ν©λλ€.
μ¬λ°λ₯Έ CORS μ€μ μ μ λ¬Έ λ°±μλ κ°λ°μμ μ±μλλ₯Ό 보μ¬μ€λλ€.