Post

๐Ÿ’› ๋„คํŠธ์›Œํฌ - CORS๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

2) ๋„คํŠธ์›Œํฌ - CORS๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ์ด๋Ÿฌํ•œ ์š”์ฒญ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ CORS(Cross-Origin Resource Sharing)

  • CORS๋ž€?

    • CORS๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•œ ๋„๋ฉ”์ธ์—์„œ ์‹คํ–‰๋  ๋•Œ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ์˜ ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค. ์ด๋Š” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(Same-Origin Policy)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์•…์˜์ ์ธ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๋ณด์•ˆ ์กฐ์น˜์ด๋‹ค.
  • CORS์˜ ์ž‘๋™์›๋ฆฌ

    • CORS๋Š” HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๊ต๋ฅ˜๋ฅผ ์ œ์–ดํ•œ๋‹ค.

        1. Preflight ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์—, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋จผ์ € OPTIONS ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
        1. ์„œ๋ฒ„ ์‘๋‹ต : ์„œ๋ฒ„๋Š” ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์— ์‘๋‹ตํ•˜์—ฌ, ์‹ค์ œ ์š”์ฒญ์ด ํ—ˆ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ค€๋‹ค. ์ด๋•Œ ์„œ๋ฒ„๋Š” Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Header ๋“ฑ์˜ ํ—ค๋”๋ฅผ ํฌํ•จํ•˜์—ฌ ์‘๋‹ตํ•œ๋‹ค.
        1. ์‹ค์ œ ์š”์ฒญ : ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์ด ์„ฑ๊ณตํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์‹ค์ œ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 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.