Playwright

Playwright

E2E ํ…Œ์ŠคํŠธ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์“ฐ๋Š” ํ๋ฆ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ์ด๋‹ค. E2E ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋„๊ตฌ ํ•„์š”์„ฑ Playwright: MS์—์„œ ๋งŒ๋“  End To End ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋„๊ตฌ 1. ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €/์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋˜ํ•œ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €๋„ ์ง€์›ํ•œ๋‹ค.2. ๋„คํŠธ์œ„ํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” API๋ฅผ ์ œ๊ณตํ•˜์—ฌ API ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.3. ์ž๋™ ๋Œ€๊ธฐ ๋งค์ปค๋‹ˆ์ฆ˜์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ํ…Œ์ŠคํŠธ ์‹œ์ ์—์„œ DOM ์š”์†Œ๊ฐ€ ์ค€๋น„๋˜์ง€ ์•Š์•„ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.4. ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์‹œ๊ฐ„ ์ ˆ์•ฝ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์™œ Playwright์ธ๊ฐ€? 1๏ธโƒฃ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ตฌ..

  • textsms
[React] Hook

[React] Hook

Hookํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ(state)๋‚˜ ์ƒ๋ช…์ฃผ๊ธฐ(lifecycle) ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค. Hook์ด ์ถ”๊ฐ€๋œ ์ด์œ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๐Ÿ‘‰ ์ƒํƒœ ๋กœ์ง์„ “๊ธฐ๋Šฅ ๋‹จ์œ„”๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋‹ค.๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๐Ÿ‘‰ ์ƒํƒœ ๋กœ์ง๊ณผ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ณ„๋กœ ํฉ์–ด์ ธ ์„œ๋กœ ๊ด€๋ จ ์—†๋Š” ์ฝ”๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์— ์„ž์ด๊ธฐ ์‰ฌ์› ๋‹ค.์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„๋ฅผ ํ˜ผ๋™์‹œํ‚จ๋‹ค. ๐Ÿ‘‰ JavaScript์˜ this ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•ด ์ดํ•ด๊ฐ€ ์–ด๋ ค์› ๋‹ค. 1. ์ƒํƒœ(State) ๊ด€๋ฆฌ ํ›…: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฐ’์„ ๋‹ค๋ฃจ๋Š” ํ›…useState ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค. 2. ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(Effe..

  • textsms
[React] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ์™€ ๋ Œ๋”๋ง ์ „๋žต: SPA, CSR, SSR, SSG

[React] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ์™€ ๋ Œ๋”๋ง ์ „๋žต: SPA, CSR, SSR, SSG

React โžก๏ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜React Native โžก๏ธํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜React + Electron โžก๏ธ ๋ฐ์Šคํฌํƒ‘ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ SPA: ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ํ™”๋ฉด์„ ์ „ํ™˜ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ์ฒ˜์Œ์— ํ•œ ๋ฒˆ๋งŒ HTML์„ ๋กœ๋“œํ•˜๊ณ , ์ดํ›„ ํ™”๋ฉด ์ „ํ™˜์€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฉ์‹์ด๋‹ค. MPA ๋ฐฉ์‹(๊ธฐ์กด)์€ ๋ฉ”๋‰ด ํด๋ฆญ โžก๏ธ ์„œ๋ฒ„์— ์š”์ฒญ โžก๏ธ ์ƒˆ HTML ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ฐ›์Œ โžก๏ธ ํ™”๋ฉด์ด ๊นœ๋ฐ•๊ฑฐ๋ฆผ ๋ฐœ์ƒSPA ๋ฐฉ์‹์€ ๋ฉ”๋‰ด ํด๋ฆญ โžก๏ธ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋งŒ ์š”์ฒญ โžก๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™”๋ฉด ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝ โžก๏ธ ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ โŒ 1๏ธโƒฃ index.html ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•ด์„œ ํ™”๋ฉด ์ „ํ™˜์€ ๊ฐ™์€ ํŽ˜์ด์ง€ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค. 2๏ธโƒฃ ๋ผ์šฐํŒ…์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (์ž..

  • textsms
[๋ธŒ๋ผ์šฐ์ €] ๋ Œ๋”๋ง ์—”์ง„

[๋ธŒ๋ผ์šฐ์ €] ๋ Œ๋”๋ง ์—”์ง„

1. ๋ Œ๋”๋ง ์ฐจ๋‹จ์€ ์–ธ์ œ ๋ฐœ์ƒ๋ Œ๋”๋ง ์ฐจ๋‹จ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์•„์ง ๋ชป ๋ฐ›์€ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ CSS๋Š” ๋ Œ๋”๋ง ์ฐจ๋‹จ ๋ฆฌ์†Œ์Šค๋ผ์„œ, CSSOM์ด ์™„์„ฑ๋˜๊ธฐ ์ „์—๋Š” ํ™”๋ฉด์„ ๊ทธ๋ฆฌ์ง€ ์•Š์œผ๋ ค ํ•˜๊ณ , ๊ธฐ๋ณธ ํƒœ๊ทธ๋Š” ๋‹ค์šด๋กœ๋“œ·์‹คํ–‰ ๋™์•ˆ HTML ํŒŒ์‹ฑ ์ž์ฒด๋ฅผ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ CSS๋Š” head์— ๋‘๊ณ , JS๋Š” defer๋‚˜ body ํ•˜๋‹จ์— ๋‘์–ด ์ฐจ๋‹จ ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค. 2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ Œ๋”๋ง์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ1) DOM ์กฐ์ž‘๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŠธ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์œ ๋„ํ•˜์—ฌ ์„ฑ๋Šฅ์— ์˜ํ–ฅ ๋ฏธ์น  ์ˆ˜ ์žˆ์Œreflow - ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„์—์„œ ์š”์†Œ ํฌ๊ธฐ, ์œ„์น˜ ๋“ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐrepaint - ๊ฐ€์‹œ์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋Š” ์ˆœ๊ฐ„/ reflow๊ฐ€ ์‹คํ–‰๋œ ์ˆœ๊ฐ„ ๋’ค์—..

  • textsms
[JS] ์ฟ ํ‚ค/ ์„ธ์…˜/ JWT / Access Token, Refresh Token ์ธ์ฆ ๋ฐฉ์‹

[JS] ์ฟ ํ‚ค/ ์„ธ์…˜/ JWT / Access Token, Refresh Token ์ธ์ฆ ๋ฐฉ์‹

1) ์ฟ ํ‚ค ์ธ์ฆ ๋ฐฉ์‹๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , ์š”์ฒญ๋งˆ๋‹ค ๊ทธ ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ์ž๋™ ์ „์†กํ•ด์„œ ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.1. ๋กœ๊ทธ์ธ ์„ฑ๊ณต2. ์„œ๋ฒ„๊ฐ€ ์ฟ ํ‚ค๋ฅผ ๋‚ด๋ ค์คŒ3. ์ดํ›„ ์š”์ฒญ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ํฌํ•จ4. ์„œ๋ฒ„๊ฐ€ ์ฟ ํ‚ค ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™ ์ „์†กHttpOnly, Secure, SameSite๋กœ ๋ณด์•ˆ ์ œ์–ด ๊ฐ€๋ŠฅCSRF ๋ฐฉ์–ด๊ฐ€ ํ•„์š”๐Ÿ‘‰ ์ฟ ํ‚ค๋Š” “์ „์†ก ์ˆ˜๋‹จ”์ด์ง€ ์ธ์ฆ ๋กœ์ง ๊ทธ ์ž์ฒด๋Š” ์•„๋‹˜ 2) ์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹์‚ฌ์šฉ์ž ์ธ์ฆ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜์œผ๋กœ ์ €์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ ID๋งŒ ์ฟ ํ‚ค๋กœ ๋“ค๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.1. ๋กœ๊ทธ์ธ ์„ฑ๊ณต2. ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์ƒ์„ฑ3. ์„ธ์…˜ ID๋ฅผ ์ฟ ํ‚ค๋กœ ๋‚ด๋ ค์คŒ4. ์š”์ฒญ ์‹œ ์ฟ ํ‚ค์˜ ์„ธ์…˜ ID๋กœ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž ์กฐํšŒ์ธ์ฆ ์ •๋ณด๋Š” ์„œ๋ฒ„์—๋งŒ ์กด์žฌ๋ณด์•ˆ์— ์œ ๋ฆฌ์„œ๋ฒ„ ์ž์› ์‚ฌ์šฉ / ํ™•์žฅ ์‹œ ์„ธ์…˜ ..

  • textsms