Complete CORS Configuration Guide: Claude Code 활용 가이드
complete cors configuration guide: Claude Code 활용. 실용적인 팁과 코드 예시를 포함합니다.
CORS설정をClaude Code로올바르게구현する
CORS(Cross-Origin Resource Sharing)は、異なるオリジン間での安全な通信を制御する仕組みです。설정ミスは보안リスクや機能不全につながります。Claude Code를 활용하면 要件に合ったCORS설정を正確に구현할 수 있습니다。
CORSの基本概念
プリフライト요청の流れ
> CORSのプリフライト요청の仕組みを説明して。
> シーケンス図も含めて。
브라우저は「単純でない요청」의 경우、OPTIONS메서드でプリフライト요청を전송し、서버の허가を확인します。カスタム헤더やJSON形式のPOST요청などが該当します。
Express.jsでの설정
環境別CORS설정
> Express.jsのCORS설정를 생성해줘。
> 要件:
> - 本番は特定オリジンのみ허가
> - 개발はlocalhost허가
> - 인증付き요청대응
> - プリフライト캐시
// src/middleware/cors.ts
import cors from 'cors';
const allowedOrigins: Record<string, string[]> = {
production: [
'https://myapp.example.com',
'https://admin.example.com',
],
development: [
'http://localhost:3000',
'http://localhost:5173',
],
};
export const corsMiddleware = cors({
origin: (origin, callback) => {
const env = process.env.NODE_ENV || 'development';
const origins = allowedOrigins[env] || allowedOrigins.development;
// 서버間通信(originなし)は허가
if (!origin) return callback(null, true);
if (origins.includes(origin)) {
callback(null, true);
} else {
callback(new Error(`CORS: ${origin} は許可されていません`));
}
},
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
allowedHeaders: ['Content-Type', 'Authorization', 'X-Request-ID'],
exposedHeaders: ['X-Total-Count', 'X-Request-ID'],
maxAge: 86400, // プリフライト캐시: 24시간
});
Next.jsでの설정
// next.config.js
const nextConfig = {
async headers() {
return [
{
source: '/api/:path*',
headers: [
{ key: 'Access-Control-Allow-Origin', value: 'https://myapp.example.com' },
{ key: 'Access-Control-Allow-Methods', value: 'GET,POST,PUT,DELETE' },
{ key: 'Access-Control-Allow-Headers', value: 'Content-Type,Authorization' },
{ key: 'Access-Control-Allow-Credentials', value: 'true' },
{ key: 'Access-Control-Max-Age', value: '86400' },
],
},
];
},
};
Nginx/CDNでのCORS설정
> NginxのリバースプロキシでCORS설정를 추가해줘。
location /api/ {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Max-Age' 86400;
return 204;
}
add_header 'Access-Control-Allow-Origin' $http_origin always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
proxy_pass http://backend;
}
トラブルシューティング
よくある에러と解決策
Claude Code에브라우저のコンソール에러を貼り付けると、原因と수정方法を即座に教えてくれます。
에러例:
Access to XMLHttpRequest at 'https://api.example.com/data' from origin
'https://myapp.com' has been blocked by CORS policy: No
'Access-Control-Allow-Origin' header is present on the requested resource.
よくある原因:
- 서버側でCORS헤더が설정されていない
credentials: true使用時にAccess-Control-Allow-Origin: *を指定している(特定オリジンを指定する必要がある)- プリフライト요청のOPTIONS메서드をハンドリングしていない
보안上の주의
Access-Control-Allow-Origin: * は인증不要の公開APIにのみ使用して주세요。인증付き요청では必ず特定オリジンを指定し、credentials: true と組み合わせる必要があります。
정리
Claude Code를 활용하면 環境に応じたCORS설정を正確に구현し、トラブルシューティングも효율화할 수 있습니다。Web보안헤더설정やAPI개발가이드도 함께 참고하세요.
CORS의 상세 정보는MDN Web Docs - CORS를 참고하세요.
Claude Code 워크플로우를 한 단계 업그레이드하세요
지금 바로 Claude Code에 복사해 쓸 수 있는 검증된 프롬프트 템플릿 50선.
이 글을 작성한 사람
Masa
Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.
관련 글
Claude Code로 리팩토링을 자동화하는 방법
Claude Code를 활용해 코드 리팩토링을 효율적으로 자동화하는 방법을 알아봅니다. 실전 프롬프트와 구체적인 리팩토링 패턴을 소개합니다.
Claude Code로 사이드 프로젝트 개발 속도를 극대화하는 방법 [예제 포함]
Claude Code를 활용해 개인 프로젝트 개발 속도를 획기적으로 높이는 방법을 알아봅니다. 실전 예제와 아이디어부터 배포까지의 워크플로를 포함합니다.
Implementing Currency Formatting: Claude Code 활용 가이드
implementing currency formatting: Claude Code 활용. 실용적인 코드 예시를 포함합니다.