Daily/Today I Learned

22.06.16_TIL

ํ˜ธ๋ฐ€์ด 2022. 6. 16. 18:02

๐Ÿ“Œ web server์˜ ๊ธฐ์ดˆ ๋ฐฑ์—”๋“œ์™€ ์†Œํ†ต์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ์šฐ๋Š” ๋‚ ์ด๋‹ค. ํ•™๋ถ€์ƒ๋•Œ ๋ฐฑ์—”๋“œ๋ฅผ ๋ฐฐ์›Œ์„œ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ํ•˜๋‹ค๊ฐ€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ดค์„ ๋•Œ ์กฐ๊ธˆ ๋‚จ๋‹ค๋ฅธ ๊ธฐ๋ถ„์ด ๋“ค์—ˆ๋‹ค.

 

 

๐Ÿ“— ์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

SOP(Same-Origin Policy)

  • ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…
  • ๊ฐ™์€ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋งŒ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ถœ์ฒ˜: ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ, ํฌํŠธ๋ฅผ ๋งํ•œ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๋™์ผํ•œ ์ถœ์ฒ˜๋กœ ๋ณด์ง€ ์•Š๋Š”๋‹ค.
  • ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฆฌํ•จ์„์จ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.
  • ๊ฐœ๋ฐœ์ค‘์ธ ์›น ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์–‘ํ•œ api ๋˜๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ SOP์ •์ฑ…์— ์œ„๋ฐ˜๋œ๋‹ค.
    ์ด๋ฅผ CORS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

CORS(Cross-Origin Resource Sharing)

  • ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ 
  • ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.
  • CORS ์„ค์ •์„ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์‘๋‹ต ํ—ค๋”์— 'Access-Control-Allow-Origin'์„ ์ž‘์„ฑํ•˜๋ฉด ์ ‘๊ทผ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์ž‘๋ฐฉ์‹
    • ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ(Preflight Request)
      • ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „, OPTIONS ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์ „ ์š”์ฒญ์„ ๋ณด๋‚ด ํ•ด๋‹น ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š” ๊ฒƒ.
      • CORS์— ๋Œ€๋น„ ๋˜์–ด์žˆ์ง€ ์•Š์€ ์„œ๋ฒ„๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์ˆœ ์š”์ฒญ(Simple Request)
      • ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์„ ์ƒ๋žตํ•˜๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ.
      • GET, HEAD, POST ์š”์ฒญ ์ค‘ ํ•˜๋‚˜.
      • Accept, Accept-Language, Content-Language, Content-Type ํ—ค๋”์˜ ๊ฐ’๋งŒ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • Content-Type: application/x-www-form-urlencoded, multipart/form-data, text/plain ๊ฐ’๋งŒ ํ—ˆ์šฉ.
    • ์ธ์ฆ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ(Credentialed Request)
      • ์š”์ฒญ ํ—ค๋”์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋ณด๋‚ด๋Š” ์š”์ฒญ

Node.js์—์„œ CORS๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

const http = require('http');

const server = http.createServer((request, response) => {
	// ๋ชจ๋“  ๋„๋ฉ”์ธ
  response.setHeader("Access-Control-Allow-Origin", "*");

	// ํŠน์ • ๋„๋ฉ”์ธ
  response.setHeader("Access-Control-Allow-Origin", "https://homile.tistory.com");

	// ์ธ์ฆ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์„ ๋ฐ›์„ ๊ฒฝ์šฐ
  response.setHeader("Access-Control-Allow-Credentials", "true");
})

 

 

๐Ÿ“˜ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

React

  • CRUD ๊ตฌํ˜„ํ•˜๊ธฐ
  • Styled Component

Express

  • CORS ์„ค์ •ํ•˜๊ธฐ
  • JSON ์„ค์ •ํ•˜๊ธฐ
  • Routing
  • Middleware

 

 

๐Ÿ“ ์˜ค๋Š˜ ๋Š๋‚€ ์  & ๋งˆ์Œ ๊ฐ€์ง

  • ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ํž˜๋“ค๋‹ค...
  • Spring์œผ๋กœ ํ–ˆ์„ ๋•Œ์—๋„ ๋น„์Šทํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ด์ œ ์ด๊ฑธ๋กœ fetchํ•ด์„œ ๋ฐ›์•„์™€์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

22.06.18_TIL  (0) 2022.06.20
22.06.17_TIL  (0) 2022.06.17
22.06.15_TIL  (0) 2022.06.15
22.06.14_TIL  (0) 2022.06.14
22.06.13_TIL  (0) 2022.06.13