๐ ๋คํธ์ํฌ - CORS๋ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์๋์?
2) ๋คํธ์ํฌ - CORS๋ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์๋์?
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ๋ค๋ฅธ ๋๋ฉ์ธ์์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํด์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค. ํ์ง๋ง ๋ณด์์์ ์ด์ ๋ก ์ด๋ฌํ ์์ฒญ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ๋จ๋ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก CORS(Cross-Origin Resource Sharing)
CORS๋?
- CORS๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ํ ๋๋ฉ์ธ์์ ์คํ๋ ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ ๋ณด์์์ ์ด์ ๋ก ๋ค๋ฅธ ๋๋ฉ์ธ์์์ ์์ฒญ์ ์ ํํ๋ค. ์ด๋
๋์ผ ์ถ์ฒ ์ ์ฑ
(Same-Origin Policy)์ด๋ผ๊ณ ํ๋ฉฐ, ์ ์์ ์ธ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ์ค์ํ ๋ณด์ ์กฐ์น์ด๋ค.
- CORS๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ํ ๋๋ฉ์ธ์์ ์คํ๋ ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ ๋ณด์์์ ์ด์ ๋ก ๋ค๋ฅธ ๋๋ฉ์ธ์์์ ์์ฒญ์ ์ ํํ๋ค. ์ด๋
CORS์ ์๋์๋ฆฌ
CORS๋ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ๊ต๋ฅ๋ฅผ ์ ์ดํ๋ค.
- Preflight ์์ฒญ : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์, ๋ธ๋ผ์ฐ์ ๋ ๋จผ์ OPTIONS ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์๋ฒ ์๋ต : ์๋ฒ๋ ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์๋ตํ์ฌ, ์ค์ ์์ฒญ์ด ํ์ฉ๋๋์ง ์ฌ๋ถ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ค๋ค. ์ด๋ ์๋ฒ๋ Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Header ๋ฑ์ ํค๋๋ฅผ ํฌํจํ์ฌ ์๋ตํ๋ค.
- ์ค์ ์์ฒญ : ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ค์ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ธ๋ค. ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋ค.
์์ ๊ฐ์ ๊ณผ์ ์ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์์ ํ๊ฒ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ค.
CORS ๊ตฌํ ๋ฐฉ๋ฒ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotatio.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public calss WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS");
}
}
This post is licensed under CC BY 4.0 by the author.