2023. 11. 23. 22:21ใ0. TiL ( Today I Learned )
6์ฃผ๊ฐ์ ์ต์ข ํ๋ก์ ํธ(2023.10.04~9.2023.11.15) '๋ด์ผ์ ์ต์ ๊ฐ'์ ๋ํ ํ๋ก์ ํธ๊ฐ ๋๋ฌ๋ค.
๋ธ๋ก๊ทธ์๋ ํ๋ก์ ํธ์ ๋ํ 'ํ๊ณ '๋ฅผ ์ ๋ฆฌํ ์์ ์ด๋ผ ์์ธํ ์ ๋ณด๋ ๊ฐ์ฅ ํ๋จ ๋ ธ์ (*๊ทธ ์ธ URL์ฒจ๋ถ) ์ฃผ์๋ก ๋ฐ๋ก ๊ธฐ์ฌํ๊ณ๋ค.
๊ฐ๋จํ๊ฒ ์ฐ๋ฆฌ๊ฐ ๊ธฐํํ๊ณ ๋ง๋ '๋ด์ผ์ ์ต์ ๊ฐ'์ ๋ํด ์๊ฐํ์๋ฉด
'๋ค์ด๋๋ฏน ํ๋ผ์ด์ฑ'์ ํ์ฉํ์ฌ ์ฟ ํก์์ ์ ํ์ ํ์ ๋ํด ๋งค์ผ 2ํ ๊ฐ๊ฒฉ ๋ณ๋ ์ฐจํธ๋ฅผ ์ ๋ฐ์ดํธ -> ๊ฐ๊ฒฉ ํ๋ฝ, ํ์ ์ ๋ฐ์ดํธ ์ ์ค์ ํ ์ํ์ ๋ํด ์ด๋ฉ์ผ ์๋ฆผ ์ ๊ณต (์นด์นด์ค๋น์ฆํก ์น์ธ์ค)์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฅผ ํตํด, ๊ณ ๊ฐ์ ๊ตฌ๋งค ์ ํ์จ ์ ๊ณ ํ๊ณ ํ์ ๋น์ฉ์ ์ค์ฌ์ค ์ ์๋ ์๋น์ค๋ฅผ ๋ง๋ค์๋ค.
(* ๋ค์ด๋๋ฏน ํ๋ผ์ด์ฑ์ด ๋ญ์ผ?)
๋ค์ด๋๋ฏน ํ๋ผ์ด์ฑ์ ๊ฐ๊ฒฉ์ ์ค์ ํ๋ ์ ๋ต์ผ๋ก, ์์ฅ ์์, ์ฌ๊ณ ์ํ, ๊ณ ๊ฐ ํ๋, ๊ฒฝ์์ฌ ๊ฐ๊ฒฉ ๋ฑ ๋ค์ํ ์์์ ๊ธฐ๋ฐํ์ฌ ๊ฐ๊ฒฉ์ ์ค์๊ฐ์ผ๋ก ์กฐ์ ํ๋ค. ์ด ๋ฐฉ์์ ํญ๊ณต๊ถ, ํธํ ์์ฝ, ์ ์ ์๊ฑฐ๋ ๋ฑ ๋ค์ํ ์ฐ์ ์์ ์ฌ์ฉ๋๋ฉฐ, ์ต์ ์ ๊ฐ๊ฒฉ์ ํตํด ์์ต์ ๊ทน๋ํํ๊ณ ์๋น์์ ๊ตฌ๋งค ํจํด์ ๋ ์ ๋ง์ถ๊ธฐ ์ํด ์ฌ์ฉ๋จ.


'ํ๊ณ '๊ฐ ์ฃผ์ ์ด๋ ์ค๋ช ์ ์ด์ฏค ํด๋๊ณ
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์์๋ ํธ๋ฌ๋ธ์ํ , ์ ์ ํ ์คํธ์ ๋ํ ๋ช ๊ฐ์ง ๋ถ๋ถ์ ๋ํด ์ ์ด๋ณด๋ ค ํ๋ค.
[ trouble SHOOTING ]
1. Puppeteer์ ์คํ๋ฌธ์
ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ค์ํ '์น ์คํฌ๋ํ'์ ํ๊ธฐ ์ํด Puppeteer๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ํด๋ผ์ฐ๋ VM ํ๊ฒฝ(์ฐ๋ถํฌ)์์ Puppeteer ํจํค์ง๋ฅผ ์ฌ์ฉ ์ ์๋ฌ ๋ฐ์ ๋์๋ค.

๋ฐ์์์ธ :
Puppeteer๋ Chromium ๊ธฐ๋ฐ์ GUI ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ๋ํ๋๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฐ๋ถํฌ์ ์ค์น๋์ง ์์ libatk-1.0.so.0 ํ์ผ์ ์ฐพ์ ์ ์์ด ๋ธ๋ผ์ฐ์ ์คํ์ ์คํจํ์์ผ๋ฉฐ, ์๋ฒ ์ฉ๋ ๋ถ์กฑ๋ ํฌํจ๋์ด ์์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ:
์ด ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด, AWS Lambda, ๋์ปค, serverless framework๋ฅผ ์ฌ์ฉํด Chromium – Puppeteer ์์กด์ฑ๊ณผ ๋ฐฐํฌํ๊ฒฝ ๋ฌธ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
2. HTTPS ํ๊ฒฝ์์ JWT ํ ํฐ์ ์ก๋ฌธ์
FE๋ BE๊ฐ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฉฐ BE์์ ๋ฐ๊ธํ JWT ์ฟ ํค๊ฐ FE์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋์ง ์์. HTTPS๋ก ๋ฐฐํฌํ ๊ฒฝ์ฐ, ์ฟ ํค๋ ์์ฑ๋์ง๋ง ์ฌ์ฉํ ์ ์์
const redirect_url = `${process.env.CLIENT_URL}/kakaologin?
authorization =${accessToken}`;
console.log(redirect_url); // ๋ฐฑ์๋์์ ํ์ธ
res.redirect(redirect_url);
๋ฐ์์์ธ :
์ฟ ํค๋ฅผ ํตํ JWT ์ ์ก์ด FE์ BE ๊ฐ์ ํต์ ๋ฐฉ์์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฉฐ ํนํ, ์ฟ ํค์ SameSite ์ ์ฑ , Secure ํ๋๊ทธ ์ค์ , CORS ์ ์ฑ ๋ฑ์ผ๋ก ์ธํด FE์์ ์ฟ ํค๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ:
์ด ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด JWT ํ ํฐ์ ์ฟ ํค ๋์ URL์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ๋ด์์ FE๋ก ์ ์กํ๊ณ , FE๋ ์ฟผ๋ฆฌ ์คํธ๋ง์ ํ์ฑํ์ฌ ์ง์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๊ณ ์ฌ์ฉํ๋ค.
์ด ์ธ์๋ FE์์์ React Queryํ ํธ์ถ ์์์ ๋ํ ๋ฌธ์ , Styled Components props ์ ๋ฌ์ค๋ฅ ๋ฑ ํธ๋ฌ๋ธ ์ํ ์ด ์์๋ค.
์ฐ๋ฆฌ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ , ์งง์ง๋ง ๊ตฌ๊ธํผ์ ํตํด (11/2 ~ 11/6 (5์ผ๊ฐ)) '์ ์ ํผ๋๋ฐฑ' ๊ธฐ๊ฐ์ ๊ฐ์ก๋ค.
[ UT์งํ ๋ด์ฉ ๋ฐ ๊ฒฐ๊ณผ ]
5์ผ์ด๋ผ๋ ์งง์ ๊ธฐ๊ฐ์ 49๋ช ์ ์ ์ ๊ฐ ํผ๋๋ฐฑ์ ์ ์ฑ์ค๋ฝ๊ฒ ๋จ๊ฒจ์ฃผ์๋ค.
๊ตฌ๊ธํผ์ ์ง๋ฌธ์ ์๋น์์ ์ ์ํ๊ฒฝ์ ํ์ ํ๊ณ , ์๋น์ค์๋ํ ๋์ฆ๋ฅผ ํ์ ํ๋ ํญ๋ชฉ์ผ๋ก ์ค๋นํด๋์๊ณ ,
๊ทธ ๊ฒฐ๊ณผ, ์๋์ ๊ฐ์ ๋ต๋ณ์ ๋ฐ์ ๋ณผ ์ ์์๋ค.



- ์ฌ์ฉ์ ์ค ๋ค์(17๋ช )๊ฐ ๋ชจ๋ฐ์ผ์ ํตํด ์๋น์ค๋ฅผ ์ด์ฉ,
- ์ฌ์ฉ์์ ์ ์ํ๊ฒฝ์ ๊ตฌ๊ธ/ํฌ๋กฌ์ด ์๋์ ์ผ๋ก ๋ง์์ผ๋ฉฐ, safari๋ฅผ ์ฌ์ฉํ๋ ์ ์ ๋ ์ผ๋ถ ์กด์ฌ.
๋ฐ๋ผ์ ์ ์ ์ ์ ์ํ๊ฒฝ ๋๋ถ๋ถ์ด ๋ชจ๋ฐ์ผ๋ชจ๋ฐ์ผ์ธ ์ ๊ณผ,์ ์ ํ ์คํธ ์ค๋ฅ(๋ฒ๊ทธ)์ ๋ํ ๋ด์ฉ์ด ๋ชจ๋ฐ์ผ์ ์คํฌ๋กค๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ผ๋ก '๋ชจ๋ฐ์ผ ํธ์์ฑ' ๊ฐ์ ์ ์ฃผ์์ ์ ๋๊ณ ์ต์ข ๋ฐํ ์ด์ ๊น์ง ์๋น์ค๋ฅผ ๊ฐ์ ํ๋๋ก ํ๋ค.


์ ์ ํผ๋๋ฐฑ์ ํตํด ๋ค์์ ์๊ฒฌ์ด ์์๋ ํผ๋๋ฐฑ์ ์๋์ ๊ฐ์ด ๊ฐ์ ํ๋ค.
UT ํผ๋๋ฐฑ1)
AS-IS : "๋ชจ๋ฐ์ผ์ ์ ๊ฒฉํ ๋์์ธ์ผ๋ก ๋ณด์ด๋๋ฐ ์ปดํจํฐ๋ก ๋ณด์์ ๋ ๋ค์ ๋ต๋ตํด ๋ณด์ ๋๋ค! PC๋ฒ์ ๊ณผ ๋ชจ๋ฐ์ผ ๋ฒ์ ์ด ๋๋์ด์ ธ ์์์ผ๋ฉด ๋ ์ข์์ ๊ฒ ๊ฐ์ต๋๋ค."์ "๋ฐ์ํ์ด ์ ๋๋ก ์๋ฉ๋๋ค์๋ฉ๋๋ค."์ ๋ํด,
TO-BE : ๊ธฐ์กด ๋ชจ๋ฐ์ผ ์ฌ์ด์ฆ (width: 375px)์์ ํ๋ธ๋ฆฟ๋ฐ๋ฐ์คํฌํ์ฉ์ฌ์ด์ฆ(375px~ 744px)๊น์ง๋ฏธ๋์ด์ฟผ๋ฆฌ๋ฐrem์์ฌ์ฉํ์ฌ ๋ฐ์ํ ์นํ์ด์ง๋ฅผ ์ ์ํ๋ ๊ฒ์ผ๋ก ์์ ํ์๋ค.
UT ํผ๋๋ฐฑ2)
AS-IS : ๋ฉ์ธํ์ด์ง์์ "์์ดํจ๋, ์์ดํ์ ์ ์ธํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ํํ๋ ํํฐ๋ง์์ ์ถฉ์ ๊ธฐ๋ค์ด ๋งจ ์๋ก ๋ํ๋ฉ๋๋ค!" ํผ๋๋ฐฑ์ ๋ํด,
TO-BE : ์นดํ ๊ณ ๋ฆฌ์์ ๊ธ์ก๋ 9๋ง์ ์ด์์ธ ์ ํ๋ง ๋ฐํํ๋๋ก ์ค์ ์ ์งํํด์ ๋ถ์ํ์ด ์๋ ์ ํ๋ค์ด ๋จผ์ ๋ฐํ๋๋๋ก ์งํํ๋ค.
( ์นดํ ๊ณ ๋ฆฌ ํํฐ์์ ํ์ด์ง๋ค์ด์ ์ผ๋ก ์ค์ ํ๋ค๋ณด๋, productId ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๋ฉด์ ์ถฉ์ ๊ธฐ์ ๊ฐ์ ๋ถ์ํ์ด ๋จผ์ ๋์ค๋ ์ ์ด ๋ฌธ์ ๋ก ์์ ํจ. )
UT๋ฅผ ํตํด ๋๋ ์
์ฐ๋ฆฌ์๊ฒ ๋น์ฐํ ๊ฑด? ๋น์ฐํ์ง ์๋ค. ์๋น์ฐํ ๊ฒ ๋น์ฐํ๋ค.
์ธ์ ๊ฐ, ํ ์ค์ UX๋์์ด๋๊ฐ ํ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ ์ ์๋ค. "์ ์ ๋ ๊ณ ์ ๊ด๋ ์ ๊นจ ์ฃผ๋ ์ ์ผํ ์กด์ฌ๋ค์ด๋ค."
๋ฐฑ์๋๋ ๊ทธ์ ์๋ฒ ์ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ๊ณ ์ ๋์๊ฐ๊ฒ ํ๋ฉด ๋์ง.๋ผ๋ ์์ผํ ์๊ฐ์ ๊ฐ์ก๋ ๋์๊ฒ ๊ณ ์ ๊ด๋ ๊ณผ ํ์ ๊นจ๋ ๊ณ๊ธฐ๊ฐ ๋จ๊ณผ ๋์์ ๋ง์ ๊ณต๋ถ๊ฐ ๋์๋ ์๊ฐ์ด์๋ค.
๊ธฐ๊ฐ ๋ด์ ์๋น์์ ๋์ฆ๋ฅผ ํ์ ํด ๋ด์ผ๋ก์จ ์ด๋ค ์์๋ฅผ ๋ง๋ค์ด์ผ ์๋น์ค์ ๋ ๋จธ๋ฌผ ์ ์์์ง, ๋ ๋งค๋ ฅ์ ์ธ ์๋น์ค๋ ์ด๋ค ๊ฒ์ธ์ง์ ๋ํด ์กฐ๊ธ ๋ ๊ณ ๋ฏผํด ๋ณผ ์ ์์๋ค. '์ฐ๋ฆฌ ๋์๋ ๋ณด์ด์ง ์๋ ๊ฒ๋ค์ ํผ๋๋ฐฑ์ ํตํด ๋ฐฐ์์ผ๋ก ์ฑ์ฅํด ๋๊ฐ ์ ์๋ค๋ ๊ฒ'
๋๋ฌด ์ข์๋ค.
6์ฃผ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ํตํด, ์ข์๋ ์ ์ ๊ฐ๋จํ ๋์ดํด ๋ณด์๋ฉด,
1. Nest.js๋ฅผ ๊ณต๋ถํด ๋ณผ ์ ์์ด ์ข์๋ค.
- 2์ฃผ ํ๋ก์ ํธ์๋ ๋ฌธ๋ฒ์ด ์ต์ํ์ง ์์ ts์ express๋ก ์งํํ๋ค. ๋๋ฌธ์ 6์ฃผ ํ๋ก์ ํธ ์์์ ๊ณต๋ถ๋ฅผ ํ๋๋ฐ ์๊ฐ์ ๋ง์ด ํ ์ ํ๋๋ฐ, ๊ทธ๋ผ์๋ ๋ฌด์ธ๊ฐ ๋ฐฐ์๊ฐ๋ ๊ฒ์ด ์์ด ์ข๋ค๊ณ ์๊ฐํ๋ค.
2. UT๋ฅผ ํตํด ํผ๋๋ฐฑ์ ๋ฐ์ ๋ณผ ์ ์์๋ค.
- ์๋น์ค๋ฅผ ๊ตฌํํ๋ ๋ฐ ์์ด์ ๊ฐ์ฅ ํ์๋ก ํ๋ ์ ์ ์ ์์ ์์ ํผ๋๋ฐฑ์ ๋ฐ์ ๋ณผ ์ ์์ด์ ์ข์๋ค.
3. ํ์ ๊ฒฝํ ( ํ๋ก ํธ์ค๋ / ๋์์ด๋ )
- 2์ฃผ ํ๋ก์ ํธ๋ ์ฑ๋ฆฐ์งํ์ผ๋ก ์งํํ๋ค ๋ณด๋ FE์์ ํ์ ๊ฒฝํ์ด ์์๋๋ฐ, ํ์ ๊ฒฝํ์ ๊ฐ์ ธ๋ณผ ์ ์๋ ๊ฒฝํ์ด ๋์๋ค.
์์ฌ์ด ๋ถ๋ถ์ ์ฌ์ ํ ๋จ์์๊ณ , ๋ด๊ฐ ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง์๊ธฐ์ ์๋ฒฝํ ์ฑ์ธ์ ์๊ฒ ์ง๋ง ์ฐจ์ฐจ ๋ณด์ํ๊ณ ์ถ๋ค.
์์ง ์๋ฒ๋ฅผ ์ด์ด๋ ์ํ๋ผ, ์ฝ๋๋ฆฌํฉํ ๋ง์ ํ ์์ ์ด๋ค. ํ์์ ๋ฐ๋ผ, ๋๋ฒจ๋กญ์ ํ ์๋ ์์ ๊ฒ์ด๊ณ
๊ฐ์ฅ ์ค์ํ๊ฒ๋ ํ ์คํธ ์ฝ๋๋ฅผ ๋์น ๋ถ๋ถ์ด ์์ด์ ํ์๋ค๊ณผ ์งํํด ๋ณด๊ธฐ๋ก ํ๋ค. ํ๊ณ ๋ ์ฌ๊ธฐ์ ๋.
(2์ฃผ ํ๋ก์ ํธ ํ๊ณ ๋ ๋ชป์ผ๋๋ฐ, ์๊ฐ ๋ด์ ์จ์ผ๊ฒ ๋ค!)
๋ด์ผ์ ์ต์ ๊ฐ Notion
URL : https://lowprice.notion.site/624de44444494e1e86a5d30d7ea1f1aa?pvs=4
[๋ด์ผ์ ์ต์ ๊ฐ] ๋ ์๊ณ ์ถ๋ค๋ฉด?
ํญํด16๊ธฐ 8์กฐ ์ต์ข ํ๋ก์ ํธ ‘๋ด์ผ์ ์ต์ ๊ฐ’
lowprice.notion.site
์ธ์ ๊น์ง ์๋ฒ๋ฅผ ์ด์ด ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๋น๋ถ๊ฐ์ ์ด์ด๋ ์์ ์ด๊ธฐ์ ์๋น์ค ์๋ฒ๋ ํจ๊ป!
URL : https://lowest-price.store/
๋ด์ผ์ ์ต์ ๊ฐ
lowest-price.store
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์์ฐ์์๋ ํจ๊ป ๊ณต์ ํ๋ค.
( ๊ด๊ณ ์์ ๋ฐ ํธ์ง์ ๋ด๊ฐ ์งํํ๋ค. )
URL : https://youtu.be/NfOPmhd0Wm0
