์ด์ ๋ชธ์ด ์ข ์์ข์์ด์ ๊ณต๋ถํ๋ ๋ด์ฉ ์ค๋ ์ ๋ฆฌํด์ ์ฌ๋ฆฝ๋๋ค!
States Airline์์ ์ผ๋ ๋ด์ฉ ์ ๋ฆฌ ํ ์ฟ ํค์ ์ธ์ ์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
Sprint - States Airline Server
Express.js์์ ํ ์ ์๋ ๊ฒ
- ๋ชจ๋ ์์ฒญ์ ๋ํด url์ด๋ ๋ฉ์๋๋ฅผ ํ์ธํ ๋
- POST ์์ฒญ ๋ฑ์ ํฌํจ๋ body(payload)๋ฅผ ์์ node.js๋ณด๋ค ๋ ๊ฐํธํ๊ฒ ๊ตฌ์กฐํํ๊ณ ์ถ์ ๋
- ๋ชจ๋ ์์ฒญ/์๋ต์ CORS ํค๋๋ฅผ ๋ถ์ฌ์ผ ํ ๋
- ์์ฒญ ํค๋์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋์ง ํ์ธํ ๋
Object ํํ๊ฐ ์๋ String ํํ๋ ๋ฐ์ ์ ์๊ฒ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํฉ๋๋ค.
const jsonParser = express.json({strict:false})
express.json
์์ฑ ์ค strict
์ ๋ํดํธ ๊ฐ์ true
๋ก ๋์ด์์ด Object๋ง ํ์ฉ๋์ด ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
res.json
๊ณผ res.send([body])
์ ์ฐจ์ด
๋์ ๊ณตํต์ ์ ํด๋ผ์ด์ธํธ์ request์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ response๋ฅผ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๋๋ค.
๋จ, send๋ json๊ณผ ๋ค๋ฅด๊ฒ ๋ณด๋ผ ์ ์๋ ์ข ๋ฅ์ ์ ํ์ด ์ ์ต๋๋ค.
CORS
์ ํ์ํ๊ฐ?
์๋ฒ๊ฐ ํ์ฉํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์๋ง ์๋ตํ๊ธฐ ์ํด์ ์ ๋๋ค.
์๋์๋ฆฌ
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ OPTIONS/upper ๋ณด๋ด๊ณ ,
2. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ 200 OK ๋ณด๋ด๊ณ ์ด๋ ๋ง์ฝ Max-Age: 20์ผ๋ก ๋์ด์๋ค๋ฉด,
3, 4๋ฒ ๊ณผ์ ์ด ๋ฐ๋ณต๋์ด๋ ์คํ๋์ด๋ ์ด 10์ด ๊ฑธ๋ ธ๋ค๋ฉด preflight ์์ ์๋ณด๋ด๋ ๋ฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ POST /upper ๋ณด๋ด๊ณ ,
4. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ 200 ๋ณด๋ด๊ณ , ์ฌ์ ์ ํ์ฉํ์ด๋ ์ฌ์ ํ 'Access-Control-Allow-Origin'์ ํฌํจํด์ผ ํฉ๋๋ค.
์ฟ ํค (Cookie)
๋ก๊ทธ์ธ์ ํตํด ๋ณผ ์ ์๋ ์๋น์ค์ ๊ฐ์ด ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ณด๋ฅผ ์ ์งํด์ผํ๋ ์๋น์ค๊ฐ ์ ์ ๋ง์์ ธ, ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๋ ๋จ์ ์ ๊ฐ์ง HTTP์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฟ ํค๋ผ๋ ๊ฐ๋ ์ด ๋ง๋ค์ด์ก์ต๋๋ค.
์ฟ ํค(Cookie)๋ ์น์๋ฒ๊ฐ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ง์ํ์ฌ ์ฌ์ฉ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ์์ ๊ธฐ๋ก ์ ๋ณด ํ์ผ์ ๋๋ค.
์ด ์ฟ ํค์ ๋ด์ฉ์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ์ฝํ๊ณ , ์ฌ์ฉ์์ ํ๋์ ๊ธฐ๋กํ๊ณ ๋ถ์ํ๋ฉฐ, ์๋ก์ด ์ ๋ณด๋ก ๊ฐฑ์ ๋ ์ ์์ต๋๋ค.
๊ฐ๋จํ๊ฒ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ฅผ ์ดํด๋ณด์๋ฉด, ๋จผ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ HTTP Request๋ฅผ ํฉ๋๋ค.
์ดํ์ ์๋ฒ๋ ์ฌ์ฉ์์๊ฒ Cookie ์ ๋ณด๋ฅผ ํฌํจํ Response๋ฅผ ์ ๋ฌํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ๋ค์ ์์ฒญ์ ์๋ฒ์๊ฒ ์ ๋ฌํ ๋ ์น์๋ฒ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ Cookie๋ฅผ ํฌํจํฉ๋๋ค
์๋ฒ๋ Cookie ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ๋์ผ ์ฌ์ฉ์๋ก ์ธ์งํ ํ ์๋ต๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ธ์ (Session)
์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ง์์ ์ผ๋ก ์ ์ง์์ผ ์ค ์ ์๋ ์ฟ ํค์ ์ฅ์ ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ ๋จ์ ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋ณด์์ด ์ฐ๋ ค๋๋ ๊ฒฝ์ฐ ์ธ์ (Session)์ ํ์ฉํ ์ ์์ต๋๋ค
์ธ์ ์ ์ฟ ํค์ ๋์์๋ฆฌ๋ ๋น์ทํฉ๋๋ค. ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ์ ๋ณด๋ Session ID์ด๊ณ , ๋๋จธ์ง ๋ณด์์ ์ผ๋ก ์ค์ํ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์๋ฒ์ ์ง์ ์ ์ฅํ๊ณ ์์ต๋๋ค.
์ด๋ ๊ฒ๋ง ๋ณด๋ฉด ์ธ์ ์ด ๋ฌด์กฐ๊ฑด ์ฟ ํค๋ณด๋ค ์ข์๋ณด์ด์ง๋ง, ์ธ์ ์ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ด๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์ฑ๋ฅ์ด ๋จ์ด์ง ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ฅ๋จ์ ์ ์ ์ด์ฉํด์ ์ฟ ํค์ ์ธ์ ์ ์ ์ ํ ์์ด ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL 39: [React] ์ปดํฌ๋ํธ ๋์์ธ (0) | 2021.09.14 |
---|---|
TIL 38: [React] ์ปดํฌ๋ํธ ๋์์ธ (0) | 2021.09.14 |
TIL 36: [Web Server] ๊ธฐ์ด (0) | 2021.09.09 |
TIL 35: [Web Server] ๊ธฐ์ด (0) | 2021.09.09 |
TIL27: [์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ] Graph / Tree / BST (0) | 2021.08.27 |