๐ ํ๋ก์ ํธ
[์ธ์ฌ์ดํธ์์] Next.js์ parallel route๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ง ์ฑ๋ฅ ๊ฐ์ ํ๊ธฐ
๋ฐฐ๊ฒฝ ๋งค์ฐ ๋๋ฆฌ๋ ์๊ธฐ์๊ฐ์ ํ์ด์ง์ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ ์ฌ๋ก๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค. Next.js์ parallel route๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ์ฝ 94% ๊ฐ์ ํ ๋ด์ฉ์ ๊ณต์ ํ๋ค. ์ธ์ฌ์ดํธ์์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด ์๊ธฐ์๊ฐ์ ์์ฑ ํ์ด์ง๋ฅผ ์ ์ํ๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ์์ฑํ๋ ์๊ธฐ์๊ฐ์๋ฅผ ๋ณด์ฌ์ค๋ค. ์ด ํ์ด์ง๋ฅผ ์ ์ํ๊ธฐ๊น์ง๋ ์ฝ 10์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์น๋ช ์ ์ธ ๋ฌธ์ ์ ์ด ์์๋ค. ์์ธ ๋ฌธ์ ์ ์์ธ์ ์๊ธฐ์๊ฐ์ ์์ฑ ๋ผ์ฐํ ๋ฐฉ์๋๋ฌธ์ด์๋ค. ์๊ธฐ์๊ฐ์ ์์ฑํ๊ธฐ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด /resumes/${questionId}๋ก ์ด๋ํ๋ค. questionId๋ ๊ฐ์ฅ ์ต๊ทผ์ ์์ฑํ๋ ์๊ธฐ์๊ฐ์๋ก, ์๊ธฐ์๊ฐ์ ๋ชฉ๋ก ์กฐํ API ์กฐํ ํ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์๊ธฐ์๊ฐ์ ์ง๋ฌธ ํญ๋ชฉ์ด questionId์ด๋ค. ์๊ธฐ์๊ฐ์ ๋ ์ด์์์ ์๋์ ๊ฐ..
[์ธ์ฌ์ดํธ์์] React-Query ๋ฌดํ์คํฌ๋กค ์ ์ฉ๊ธฐ
TL;DR - ๋ฌดํ์คํฌ๋กค - Intersection Observer API - React-Query์ Intersection Observer API๋ฅผ ์ฌ์ฉํด ๋ฌดํ์คํฌ๋กค ๊ตฌํํ๊ธฐ - ์ค์ ์๋น์ค์ ์ ์ฉํ๊ธฐ ๋ฐฐ๊ฒฝ ์ธ์ฌ์ดํธ์์์์๋ ๋ด๊ฐ ๊ฐ์ง ๊ฒฝํ์ ์ ๋ฆฌํ๊ณ ์ด๋ฅผ '๊ฒฝํ ์นด๋'๋ก ์ ์ฅํ ์ ์๋ค. ์ด ๊ฒฝํ์นด๋๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ์๊ธฐ์๊ฐ์๋ฅผ ์์ฑํ ๋ ์ฐธ๊ณ ํ์ฌ ์์ฑํ ์ ์๋ค. ์ด ๋, ํ ํ์ด์ง์์ ๋ด๊ฐ ๊ฐ์ง ๊ฒฝํ์นด๋์ ๋ด์ฉ์ ํ์ธํ๊ณ ์ด๋ฅผ ํ ๋๋ก ์๊ธฐ์๊ฐ์๋ฅผ ์์ฑ์ ๋น ๋ฅด๊ฒ ํ ์ ์๋๋ก ๊ธฐํํ์๋ค. ๋ฌดํ์คํฌ๋กค ๋ฌดํ์คํฌ๋กค์ ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ์๋๋ก ๋ด๋ฆฌ๋ฉด ์๋ก์ด ์ฝํ ์ธ ๊ฐ ์๋์ผ๋ก ๋ก๋๋์ด ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค. ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์ด๋ํ์ง ์์๋ ๊ณ์ํด์ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์์ด ํธ๋ฆฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค..
Chromatic์ผ๋ก Storybook ์ง์์ ๋ฐฐํฌํ๊ธฐ (Github Actions)
TL;DR 1. ์คํ ๋ฆฌ๋ถ์ ๋์ ํ๊ฒ ๋ ๊ณ๊ธฐ 2. chromatic์ผ๋ก ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌํ๊ธฐ 3. Github Actions๋ฅผ ์ด์ฉํด Pull Reqeust์์ ๋ฐ๋ก ์ปดํฌ๋ํธ ํ์ธํ๊ธฐ ์คํ ๋ฆฌ๋ถ์ ๋์ ํ๊ฒ ๋ ๊ณ๊ธฐ ํ์ ์ ์งํํ๋ฉด์ ์ฌ๋ฌ ์ฌ๋์ด ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฐํ๊ฒ ๋์์ต๋๋ค. ์๋์ ๊ฐ์ ์ปดํฌ๋ํธ ์ฝ๋๋ค์ด PR๋ก ์ฌ๋ผ์ค๊ธฐ ์์ํ์ต๋๋ค. PR์ ์ด์ฌํ ์์ฑํ๋๋ผ๋ ์ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ฝ๊ฒ ๋จธ๋ฆฌ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ฒ๋ค๊ฐ, PR์ ์ด์ฌํ ์์ฑํ๋ค๋ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ ๊ผผ๊ผผํ ์์ฑํด์ผํ๊ณ PR์ ์ฝ๋ ๊ฐ๋ฐ์๋ ๋ ์ ๊ฒฝ์จ์ ์ฝ์ด์ผํฉ๋๋ค. ๋ถํ์ํ๊ฒ ๋์ ์ํต ๋น์ฉ์ด ๋ฐ์ํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งค๋ฒ pull์ ๋ฐ์์ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํ๊ณ ์ด๋ค UI์ธ์ง ํ์ธํ๊ณ ์ ๋๋ก ์๋ํ๋์ง ์์ ํ ์คํธ๋ฅผ ์งํํด์ผํ์ต..
chrome์์ set-cookie ์๋ํ์ง ์์ ๋
ํ์ฌ ๋ฐฑ์๋์์ set-cookie ํด์ฃผ๋ response๋ ์๋์ ๊ฐ๋ค access-control-allow-credentials: true allow: POST, OPTIONS connection: close content-length: 21 content-type: application/json date: Wed, 22 Feb 2023 03:04:31 GMT referrer-policy: same-origin server: gunicorn set-cookie: access_token=value; expires=1:00:00; HttpOnly; Path=/; SameSite=None set-cookie: refresh_token=value; expires=14 days, 0:00:00; HttpOnl..
Django Channels๋ก ์ค์๊ฐ ์๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (2)
2022.07.04 - [ํ๋ก์ ํธ/capstone] - Django Channels๋ก ์ค์๊ฐ ์๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (1) Django Channels๋ก ์ค์๊ฐ ์๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (1) ๋ฐฐ๊ฒฝ ์ค์๊ฐ ์๋ํ๋ ์๋ฆผ ์น ์๋น์ค์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ธ ์ค์๊ฐ ์๋ฆผ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผํฉ๋๋ค ์ฐ์ ์์ ์๋๋ฆฌ์ค๋ฅผ ๋ณด๋ฉด ํญ๋ ฅํ์ ๋ฐ์ -> DB์ ํด๋น ๋ด์ฉ ์ ์ฅ -> ํด๋น DB ๋ด์ฉ์ ํด๋ผ์ด์ธ min-kyung.tistory.com ์ ๊ธ์์๋ websocket์ ์ด์ฉํด Vue.js์ Django๋ฅผ ์ฐ๊ฒฐํ์ต๋๋ค. DB์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ํ๋ก ํธ๋ก ์๋ฆผ ์ ์กํ๊ธฐ ์ค๋ ๋ง๋ค ๊ธฐ๋ฅ์ DB์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ํ๋ก ํธ๋ก ์๋ฆผ์ ์ ์กํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ํญ๋ ฅํ์๊ฐ ๋ฐ์ํ๋ฉด DB์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ ํด๋น ๋ฐ์ดํฐ๊ฐ ํ๋ก ํธ๋ก ์ ์ก๋์ด์ผํฉ๋๋ค...
Django Channels๋ก ์ค์๊ฐ ์๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (1)
๋ฐฐ๊ฒฝ ์ค์๊ฐ ์๋ํ๋ ์๋ฆผ ์น ์๋น์ค์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ธ ์ค์๊ฐ ์๋ฆผ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผํฉ๋๋ค ์ฐ์ ์์ ์๋๋ฆฌ์ค๋ฅผ ๋ณด๋ฉด ํญ๋ ฅํ์ ๋ฐ์ -> DB์ ํด๋น ๋ด์ฉ ์ ์ฅ -> ํด๋น DB ๋ด์ฉ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก DB์ ๋ด์ฉ์ด ์ ์ฅ๋๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ํ๋ก ํธ๋ก ๋ ๋ ค์ค์ผํ๋ ์ค์๊ฐ ๊ธฐ๋ฅ์ด ํ์ํ์ต๋๋ค ์ด๋ฅผ ์ํด Websocket์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค! ๐คท ์ Websocket? ํด๋ผ์ด์ธํธ๊ฐ DB์ ๋ด์ฉ์ด ์ ์ฅ๋์๋ค๋ ๊ฒ์ ์๋ ค๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ฐฉํฅ ํต์ ์ ํด์ผํ๋๊ฑด ์๊ฒ ๋๋ฐ ์ ํํ ์น์์ผ์ ์ฌ์ฉํ์๊น์? ์๋ฐฉํฅ ํต์ ์๋ ์ด 2๊ฐ์ง๊ฐ ์์ต๋๋ค. 1. polling ์๋ฐฉํฅ ํต์ ์ค ํ๋๋ก n์ด๋ง๋ค request๋ฅผ ๋ ๋ ค์ response๋ฅผ ์ ๋ฌ ๋ฐ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ n์ด ์์์ง ์๋ก ์๋ฒ์ ๋ถ๋ด์ด..