๋กœ๊ทธ์ธ ํ›„ ๋ฉ”์ธํŽ˜์ด์ง€

 

ํ”„๋กœ์ ํŠธ: Social Study Network (SSN: ์“ด)    *ํ”„๋ก ํŠธ์—”๋“œ์™€ ์ฒซ ํ˜‘์—…ํ”„๋กœ์ ํŠธ

์„ค๋ช…: ํŒ€์›๋“ค, ํ•™๊ต์นœ๊ตฌ๋“ค๊ณผ ๊ณต๋ถ€์‹œ๊ฐ„์„ ๊ณต์œ ํ•˜๋ฉฐ ์‘์›ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์…œ๋„คํŠธ์›Œํฌ ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

์ œ์ž‘: 2022.04.08~2022.04.14

 

์‹œ์—ฐ์˜์ƒ: https://youtu.be/ZAMqhx5jCNU

๊นƒํ—ˆ๋ธŒ: https://github.com/ymkwon3/ssn (ํ”„๋ก ํŠธ์—”๋“œ) / https://github.com/moonhjang/miniproject_back (๋ฐฑ์—”๋“œ)

๋…ธ์…˜: https://www.notion.so/d556601ee2de4629a9a1947675f23dd6

 

 

 


์™€์ด์–ดํ”„๋ ˆ์ž„

 

 


์‚ฌ์šฉ ๊ธฐ์ˆ 
  • Server: AWS EC2 (Ubuntu 18.04 LTS)
  • Framework: Express (Node.js)
  • Database: MongoDB (Mongoose)
  • JWT (Json Web Token)
  • Crypto-js
  • CORS
  • Front-end: React

 


ํ•ต์‹ฌ ๊ธฐ๋Šฅ
  • ๋กœ๊ทธ์ธ/ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
    • ์•„์ด๋”” ํŒจ์“ฐ์›๋“œ ์ž…๋ ฅ ๊ฐ€๋Šฅ
    • ๋กœ๊ทธ์ธ ์‹œ, ํ† ํฐ์ „๋‹ฌ (๋ชจ๋“ ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ํ† ํฐํ™•์ธ ๊ธฐ๋Šฅ)
    • ๋นˆ์นธ ๋ฐ ์•„์ด๋”” ํ˜•์‹(4์ž์ด์ƒ, ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž(!@#"-_)) ํ™•์ธ ๊ฐ€๋Šฅ
    • ํšŒ์›๊ฐ€์ž…์‹œ ์•„์ด๋””/๋‹‰๋„ค์ž„ ์ค‘๋ณต๊ฒ€์‚ฌ
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌํ™•์ธ ์ผ์น˜ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋ฉ”์ธํŽ˜์ด์ง€
    • ํ•ด๋‹น ์œ ์ €์™€ ์นœ๊ตฌ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
    • ๊ณต๋ถ€์‹œ๊ฐ„ ์‹œ์ž‘/์ •์ง€ ๋ฒ„ํŠผ
    • ์ด ๊ณต๋ถ€์‹œ๊ฐ„ ์กฐํšŒ๊ฐ€๋Šฅ
    • ์นœ๊ตฌ ์ถ”๊ฐ€๊ฐ€๋Šฅ
    • ์นœ๊ตฌ์™€ ๊ณต๋ถ€์‹œ๊ฐ„ ์ˆœ์œ„ ํ™•์ธ๊ฐ€๋Šฅ
    • ์นœ๊ตฌ์˜ ๊ณต๋ถ€์‹œ๊ฐ„ ๋ฐ ์ ‘์† ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋ฐฉ๋ช…๋ก ํŽ˜์ด์ง€
    • ๋“ฑ๋ก๋œ ์นœ๊ตฌ ๋ฐฉ๋ช…๋ก์— ์ฝ”๋ฉ˜ํŠธ ์กฐํšŒ, ์ž‘์„ฑ ๊ฐ€๋Šฅ
    • ๋ฐฉ๋ช…๋ก ์ฃผ์ธ๊ณผ ๋ฐฉ๋ช…๋ก ์ž‘์„ฑ์ž๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ
    • ๋ณธ์ธ ๋ฐฉ๋ช…๋ก ํŽ˜์ด์ง€์—์„œ๋Š” ์ƒํƒœ๋ฉ”์„ธ์ง€ ์ˆ˜์ • ๊ฐ€๋Šฅ

 


Trouble Shooting   

โ–ถ Auth-Middleware์— ๋Œ€ํ•ด ํ”„๋ก ํŠธ ์—…๋ฌด์— ๋Œ€ํ•œ ์ดํ•ด๋ถ€์กฑํ–ˆ๋‹ค.

→ ๊ฐœ์ธํ”„๋กœ์ ํŠธ ์ง„ํ–‰์‹œ, ๋กœ๊ทธ์ธ ์‹คํ–‰์‹œ ๋กœ๊ทธ์ธ์ธ์ฆ ํ™•์ธAPI๋„ ํ•จ๊ป˜ ํ™•์ธ๋˜์—ˆ๋‹ค. ๊ทธ๋•Œ, ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์œ ์ € ์ •๋ณด๋ฅผ ๋„ฃ์–ด๋‘์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋ก ํŠธ์—์„œ ๋กœ๊ทธ์ธ์ธ์ฆ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋”ฐ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ํ•„์š”์—†์–ด ์ œ์™ธ๋ฅผ ํ–ˆ๋‹ค. ์ €์žฅ๋œ ํ† ํฐ์œผ๋กœ ๋ชจ๋“ ํŽ˜์ด์ง€์˜ ๋กœ๊ทธ์ธ ์ธ์ฆํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋™์ผํ•˜์—ฌ ๋ฌธ์ œ์—†์ด ์ž‘๋™๋˜์—ˆ๋‹ค. 

 

โ–ถ ๋กœ์ปฌ์— ์žˆ๋Š” MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ์ง€๋งŒ, ๋กœ์ปฌDB์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ๋ฐฐํฌ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. 

→ ๋กœ์ปฌDB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  MongoDBํด๋ผ์šฐ๋“œ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰ํ•˜์˜€๋‹ค. 

 

โ–ถ _id๋ฅผ commentid ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ, _id๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ object์—์„œ string์œผ๋กœ ๊ฐ์ฒด type์„ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ์ ์—์„œ ์–ด๋ ค์› ๋‹ค.

→ Comment ์Šคํ‚ค๋งˆ์—์„œ _id๋ฅผ commentid๋กœ ๋งŒ๋“ค์–ด string์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „๋‹ฌํ•˜์˜€๋‹ค. 

 

 


๊ฐœ์ธํšŒ๊ณ 

์ฒซ ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ํ˜‘๋ ฅํ”„๋กœ์ ํŠธ์˜€๋‹ค. ํ”„๋ก ํŠธ์—…๋ฌด์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ–ˆ๊ธฐ์— ํ‘œํ˜„๋ฐฉ์‹๊ณผ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์ด ๊ต‰์žฅํžˆ ๋‹ฌ๋ž๋‹ค. ํ”„๋กœ์ ํŠธ ์ค‘๋ฐ˜๋ถ€ํ„ฐ๋Š” ์„œ๋กœ์˜ ์—…๋ฌด๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌธ์ œ์—†์ด ํ’€๋ ธ๋‹ค. 

 

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์‹œ์—๋Š” ๋‚ด ์ž‘์—…์„ ์›น์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํŽธํ–ˆ๋Š”๋ฐ, ํ˜‘๋ ฅํ•  ๋•Œ๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๋ทฐ๊ฐ€ ์—†์–ด์„œ ๋ถˆํŽธํ–ˆ๋‹ค. ์ฌ๋” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ–ˆ์ง€๋งŒ, ํšŒ์›๊ฐ€์ž…์ด๋‚˜ ๋กœ๊ทธ์ธ ์‹œ ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด๋ฅผ ์ง์ ‘์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์› ์ง€๋งŒ ์ž˜ ์ ์‘ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํŠนํžˆ, ๋ชจ๋“ ํŽ˜์ด์ง€๋ฅผ auth-middleware๋กœ ์—ฐ๊ฒฐ ํ›„์—๋Š” ํ† ํฐ์ด ์—†๊ธฐ์— ์ฌ๋” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. (์ดํ›„ ์•Œ์•„๋ณด๋‹ˆ, ํ—ค๋”์— ํ† ํฐ์„ ๋„ฃ์–ด ํ™•์ธํ•ด๋ณผ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.) 

 

ํ˜‘๋ ฅํ–ˆ๋˜ ํ”„๋ก ํŠธ ๋ถ„์ด ๊ต‰์žฅํžˆ ์ž˜ํ•˜์‹œ๋˜ ๋ถ„์ด๋ผ, ๋ฐด์—”๋“œ๋กœ์„œ ๊ต‰์žฅํžˆ ๋„์›€๋„ ๋งŽ์ด ๋ฐ›์•˜๊ณ  ์ˆ˜์›”ํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์‹œ, ์—ผ๋ คํ–ˆ๋˜ CORS ์ด์Šˆ๋‚˜ auth-middleware(์ธ์ฆ๋ฏธ๋“ค์›จ์–ด)์— ๋Œ€ํ•œ ์ด์Šˆ๋Š” ๊ฑฐ์˜ ์—†์—ˆ๋‹ค. ๋ฐฐํฌ ์ดˆ๋ฐ˜, ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์œผ๋‚˜ ์ฝ˜์†”์ฐ์œผ๋ฉด์„œ ์ „๋‹ฌํ•˜๊ณ  ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋‹ˆ ํฐ ์ด์Šˆ์—†์ด ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

๊ต‰์žฅํžˆ ๋งŒ์กฑ์Šค๋Ÿฌ์› ๋˜ ์ ์€ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์ด ๋ฌธ์ œ์—†์ด ์ž˜ ์ž‘๋™ํ–ˆ๊ณ , ๋ชจ๋“  ํŒ€์›๋“ค ๋˜ํ•œ ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ๋๋‚ธ ํ”„๋กœ์ ํŠธ๋ผ์„œ ๋” ์ข‹์•˜๋‹ค. ์šฐ๋ฆฌ ํŒ€์› ๋ชจ๋‘ ํฅํ•ด๋ผ!

 

ํ•ญํ•ด99 5์ฃผ์ฐจ์—๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ํ•จ๊ป˜ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ์ „์—๋„ CORS ๋ชจ๋“ˆ์„ ์„ค์น˜์— ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋ผ๊ณ ๋งŒ ๋“ค์—ˆ๋Š”๋ฐ, 

ํ”„๋ก ํŠธ ์ž‘์—…๊ณผ ์—ฐ๊ฒฐ์‹œ ํ•„์š”ํ•œ ์ž‘์—…์ด๊ธฐ์— CORS๋ฅผ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 


 

CORS๋ž€?

 

CORS(Cross-Origin Resource Sharing), ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ๋ผ๊ณ  ํ•ด์„๋œ๋‹ค. 
CORS์ •์ฑ…์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ๋ฆฌ์†Œ์Šค๋“ค์ด ์•ˆ์ „ํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ด€๋ฌธ์ด๋‹ค. 

 

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด CORS ์ •์ฑ… ์œ„๋ฐ˜์œผ๋กœ ์ธํ•ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฝ˜์†”์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ• ์ˆ˜ ์žˆ๋‹ค.

 

CORS ๊ด€๋ จ ์ด์Šˆ๋Š” ๋ชจ๋‘ CORS ์ •์ฑ…์„ ์œ„๋ฐ˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.

์œ„์˜ ์—๋Ÿฌ๋Š” CORS๋ฅผ ํ—ˆ์šฉํ•ด์„œ ์•„๋ฌด๋Ÿฐ ํƒˆ ์—†์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•ด๋‹ฌ๋ผ๋Š” ๊ถŒ๊ณ ์‚ฌํ•ญ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค.

CORS๋ผ๋Š” ๋ฐฉ์–ด๋ง‰ ๋•๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์ด ๊ณณ ์ € ๊ณณ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ตœ์†Œํ•œ์˜ ๋ณด์žฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ถœ์ฒ˜ (Origin) ๋ž€?

 

์„œ๋ฒ„์˜ ์œ„์น˜๋ฅผ ์˜๋ฏธํ•˜๋Š” URL์€ Protocol, Host, Port ๊นŒ์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

 

 

์›น์—๋Š” SOP(Same Origin Policy) ์™€ CORS(Cross Origin Resource Sharing) ๋‘๊ฐ€์ง€ ์ •์ฑ…์ด ์žˆ๋‹ค.

 

โ–ถ SOP(๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…) โ—€

๊ฐ™์€ ์ถœ์ฒ˜์—์„œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค" ๋ผ๋Š” ๊ทœ์น™์„ ๊ฐ€์ง„ ์ •์ฑ…

 

→ URL์˜ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ Protocol, Host, Port ์„ธ๊ฐ€์ง€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

→ ๊ฐ™์€ Protocol, Host, Port์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์š”์†Œ๋Š” ๋‹ค๋ฅด๋”๋ผ๋„ ๊ฐ™์€ ์ถœ์ฒ˜๋กœ ์ธ์ •๋œ๋‹ค.

→ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋‹ค๋ฅผ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ต์ฐจ์ถœ์ฒ˜ ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค. 

์ฆ‰, Protocol, Host, Port ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด Cross Origin ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

โ–ท ์‹ค๋ฌด์—์„œ ์ฐธ๊ณ ํ•˜์ž๋ฉด โ—

ํ”„๋ก ํŠธ ์„œ๋ฒ„์™€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์‹œ

ํ”„๋ก ํŠธ ์„œ๋ฒ„ URL์ด  http://localhost:3000,

๋ฐฑ์—”๋“œ ์„œ๋ฒ„ http://localhost:8080 ์ผ๋•Œ

 

SOP ์ •์ฑ…์— ์–ด๊ธ‹๋‚˜๊ธฐ๋•Œ๋ฌธ์—, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ๋„˜์–ด์˜ฌ ๋•Œ 

๋ธŒ๋ผ์šฐ์ €์—์„œ CORS ์ •์ฑ… ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. 

 

 

โ–ถ CORS (๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ) โ—€

์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜

์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ  ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ์ด๋‹ค. 

 

 

 

 

CORS ๋™์ž‘๋ฐฉ์‹

 

1. ํด๋ผ์ด์–ธํŠธ์—์„œ  HTTP์š”์ฒญ ํ—ค๋”์— Origin์„ ๋‹ด์•„ ์ „๋‹ฌํ•œ๋‹ค. 

 

2. ์„œ๋ฒ„๋Š” ์‘๋‹ตํ—ค์–ด์— Access-Control-Allow-Origin์„ ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

3. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž์‹ ์ด ๋ณด๋ƒˆ๋˜ ์š”์ฒญ์˜ Origin๊ณผ ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ค€ Access-Control-Allow-Origin์„ ๋น„๊ตํ•œ๋‹ค. 

์ž์‹ ์ด ๋ณด๋‚ธ Origin๊ณผ ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ค€ Access-Control-Allow-Origin์„ ๋น„๊ตํ•˜์—ฌ ์ฐจ๋‹จํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 

๋งŒ์•ฝ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฒ„๋ฆฐ๋‹ค. 

(์œ„์˜ ๊ฒฝ์šฐ ๋‘˜๋‹ค http://localhost:3000 ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจํ•œ ๊ฒฝ์šฐ๋‹ค.)

 

 

 

 

์•„๋ž˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F

 

[WEB] ๐Ÿ“š CORS ๊ฐœ๋… ๐Ÿ’ฏ ์™„๋ฒฝ ์ •๋ฆฌ & ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๐Ÿ‘

CORS(Cross Origin Resource Sharing) CORS ์ •์ฑ…์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ๋ฆฌ์†Œ์Šค๋“ค์ด ์•ˆ์ „ํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ด€๋ฌธ์ด๋‹ค. ์›น๊ฐœ๋ฐœ์„ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ด CORS ์ •์ฑ…์œ„๋ฐ˜์œผ๋กœ ์ธํ•ด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ์ƒํ™ฉ์„ ๋งŽ์ด๋“ค ๊ฒช์–ด๋ดค์„๊ฒƒ์ด๋ผ

inpa.tistory.com

 

์ฒซํŽ˜์ด์ง€: ๋กœ๊ทธ์ธํŽ˜์ด์ง€

 

ํ”„๋กœ์ ํŠธ : ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€

์„ค๋ช… : ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๊ฒŒ์‹œ๊ธ€ ์ฝ”๋ฉ˜ํŠธ ๋“ฑ๋ก, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ๊ตฌํ˜„ ์—ฐ์Šต์„ ์œ„ํ•ด ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

์ œ์ž‘ : 2022.03.25 ~ 2022.03.31

 

์‹œ์—ฐ์˜์ƒ: https://youtu.be/sNPd6aWwgQM

๊นƒํ—ˆ๋ธŒ:  https://github.com/moonhjang/node_1

 


์‚ฌ์šฉ ๊ธฐ์ˆ 
  • Server: AWS EC2 (Ubuntu 18.04 LTS)
  • Framework: Express, Mongoose(Node.js)
  • Database: MongoDB
  • front-end: HTML5, CSS3, Javascript, Jquery, bootstrap

ํ•ต์‹ฌ ๊ธฐ๋Šฅ
  • ํšŒ์›๊ฐ€์ž…ํŽ˜์ด์ง€
  • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ 
  • ๋กœ๊ทธ์ธ ๊ฒ€์‚ฌ
    • ์กฐํšŒํŽ˜์ด์ง€ ์ œ์™ธ, ๋กœ๊ทธ์ธ ํ•œ ๊ฒฝ์šฐ๋งŒ ๋ณผ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ
  • ๋Œ“๊ธ€
    • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ๋Œ“๊ธ€ ์ถ”๊ฐ€/ ์ˆ˜์ •/ ์‚ญ์ œ

Trouble Shooting

โ–ถ ์ธ์ฆ์ด ํ•„์š”ํ•œ ํŽ˜์ด์ง€์™€ ์ธ์ฆ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€๋งŒ, ์•ˆ๋‚ด ์•Œ๋žŒ์ด JSํŒŒ์ผ์ด ์•„๋‹Œ HTMLํŒŒ์ผ์˜ ์•Œ๋žŒ์„ ๋„์šฐ๋Š” ์ด์Šˆ๊ฐ€์žˆ์—ˆ๋‹ค. 

→ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด.js์™€ router.js ์ด ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์•˜๋‹ค. ๋กœ๊ทธ์ธ์‹œ, ๋ฏธ๋“ค์›จ์–ด์™€ ์—ฐ๊ฒฐ๋œ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ž˜๋ชป๋œ ์ธ์ฆํ‚ค๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด์„œ ์ธ์ฆ ํ‚ค๋ฅผ ์ œ๋Œ€๋กœ ์ „๋‹ฌํ•ด์ฃผ์ง€ ๋ชปํ•˜๋ฉด์„œ ์ƒ๊ฒจ๋‚œ ์ด์Šˆ์˜€๋‹ค. ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜๋ฉด์„œ ์•Œ๋ฆผ์ด์Šˆ๋Š” ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. 

 

โ–ถ ๋Œ“๊ธ€ ์ถ”๊ฐ€์‹œ, mongoDB์˜ subdocument์ด์šฉ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์กฐํšŒ๋ฅผ ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋กœ ์ž‘๋™์ด ๋˜์ง€์•Š์•˜๋‹ค.

→ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ์žก๊ธฐ์œ„ํ•ด์„œ Try-Catch๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

 

+ ์ง€๋‚œ์ฃผ ์ž‘์—…์—์„œ ์•„์‰ฌ์› ๋˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ ๋ฐ, env ํŒŒ์ผ๊ณผ .gitignore์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์˜€๋‹ค.

 

+ Recent posts