backend

CorsFilter 설정 및 기능

KUKJIN LEE
KUKJIN LEE
2025년 7월 21일
160

CorsFilter는 다른 출처(도메인, 프로토콜, 포트)의 프론트엔드 애플리케이션이 백엔드 API와 원활하게 통신할 수 있도록 보안 정책을 적용하는 핵심 구성요소입니다.

 

주요 기능

  • CORS 헤더 자동 적용: 모든 HTTP 응답에 CORS 관련 헤더(Access-Control-Allow-Origin 등)를 추가하여 브라우저의 동일 출처 정책(Same-Origin Policy)을 안전하게 우회하도록 허용합니다.

  • 설정의 외부화: application.yml과 같은 외부 설정 파일에서 CORS 정책을 손쉽게 관리할 수 있습니다. 이를 통해 개발, 테스트, 운영 환경별로 다른 정책을 유연하게 적용할 수 있습니다.

    • 허용된 출처 (Origin): http://localhost:3000 (기본값)

    • 허용된 HTTP 메서드: GET, POST, PUT, DELETE, OPTIONS (기본값)

    • 허용된 헤더: Authorization, Content-Type (기본값)

    • 자격 증명 (Credentials) 허용: true (기본값)

  • Preflight Request 처리: 실제 요청 전 브라우저가 서버의 CORS 정책을 확인하기 위해 보내는 OPTIONS 메서드 요청(프리플라이트)을 감지하고, 즉시 200 OK로 응답하여 불필요한 서버 부하를 줄입니다.

  • 요청 당 한 번 실행 보장: OncePerRequestFilter를 상속하여, 복잡한 필터 체인 내에서도 각 요청에 대해 단 한 번만 실행되도록 보장하여 성능 저하를 방지합니다.

 

동작 방식

필터의 동작 흐름은 다음과 같습니다.

  1. 요청 수신: 클라이언트로부터 HTTP 요청이 들어옵니다.

  2. CORS 헤더 설정

    • Access-Control-Allow-Origin: 요청을 허용할 출처

    • Access-Control-Allow-Methods: 허용된 HTTP 메서드 목록

    • Access-Control-Allow-Headers: 허용된 요청 헤더 목록

    • Access-Control-Allow-Credentials: 쿠키 등 자격 증명 정보의 전송 허용 여부

  3. 프리플라이트 요청 분기 처리

    • 만약 요청 메서드가 OPTIONS이면, 이는 프리플라이트 요청이므로 200 OK 상태 코드로 즉시 응답하고 필터 체인을 종료합니다.

  4. 실제 요청 처리

    • OPTIONS 외 다른 메서드(GET, POST 등)의 요청일 경우, CORS 헤더가 적용된 상태로 다음 필터 체인을 계속 진행하여 실제 비즈니스 로직을 처리하도록 전달합니다.

 

CorsFilter는 현대 웹앱에서 중요한 역할

  • 보안 강화: 허용된 출처와 메서드만 리소스에 접근하도록 제한하여 비인가 접근을 차단하고 보안을 강화

  • OAuth 2.0 등 외부 인증 연동 지원: 소셜 로그인 등 외부 인증 서비스와의 리다이렉션 과정에서 발생하는 CORS 이슈를 해결하여 인증 흐름이 끊기지 않도록 보장

  • 개발 및 운영 효율성 증대: CORS 정책을 코드 수정 없이 설정 파일 변경만으로 관리할 수 있어, 다양한 배포 환경에 신속하고 유연하게 대응할 수 있다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12