๐Ÿ˜๐Ÿ˜4์ฃผ๊ฐ„์˜ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ํ›„๊ธฐ (2) ๊ธฐ๋Šฅ๊ตฌํ˜„

๐ŸŽจCSS ๋Š” ์–ด๋• ์–ด?

์ผ๋‹จ ํ”„๋ก ํŠธ์—”๋“œ ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณธ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ์–‘๋Œ€ ์ถ•์œผ๋กœ ๋‚˜๋ˆ  ๋ณด์•˜๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ถ•์€, ๋ฉ”์ธ ๋žœ๋”ฉํŽ˜์ด์ง€๋ฅผ ์ฃผ์ถ•์œผ๋กœ ํ•œ ๋กœ๊ทธ์ธ, ๋งˆ์ดํŽ˜์ด์ง€ ๋ถ€๋ถ„๊ณผ

๋‘ ๋ฒˆ์งธ ์ถ•์€, ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์™€ ์„œ๋น„์Šค์˜ ์‹ค์ œ ๊ธฐ๋Šฅ์„ ์„ ๋ณด์ด๋Š” ์Šค์ผ€์ค„๋Ÿฌ ํŽ˜์ด์ง€์™€ ๋ฉ”์ธํ™”๋ฉด์—์„œ ๊ฒ€์ƒ‰์„ ํ–ˆ์„ ๋•Œ ์ด๋™ํ•˜๋Š” ์„œ์น˜ ํŽ˜์ด์ง€๊ฐ€ ๊ทธ๊ฒƒ์ด์˜€๋‹ค.

๊ฐ™์ด ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ถ„์—๊ฒŒ ๋จผ์ € ์„ ํƒ๊ถŒ์„ ๋“œ๋ฆฌ๊ณ  ๋ณด๋‹ˆ ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ถ•์„ ๋‹ด๋‹นํ•˜์˜€๊ณ  ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ถ€๋ถ„์€ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ํ†ตํ•ฉ์ด ์ด๋ฃจ์–ด์ ธ ์ž์—ฐ์Šค๋ ˆ ๋‚ด๊ฐ€ ๋งก์•„ ํ•œ๋ฒˆ์— ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ถ”ํ›„ ๋ฆฌํŒฉํ† ๋ง ์‹œ ํŒ€์›๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„์–ด ํฐํŠธ์˜ ํฌ๊ธฐ๋‚˜ ์ข…๋ฅ˜ ๋“ฑ ๋„ˆ๋ฌด ํ† ์ด? ์Šค๋Ÿฌ์šด ๋“ฏํ•œ ์›น ์„œ๋น„์Šค์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ด์ง ๋‹ฌ๋ฆฌ ํ•ด ๋ณด๋Š” ์‹œ๋„๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

1. Main LandingPage

์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ œ์ผ ๋จผ์ € ๋ณด๊ฒŒ ๋˜๋Š” ์–ผ๊ตด์ด ๋  ํŽ˜์ด์ง€๋ผ ์ •๋ง ์ž˜ ๋งŒ๋“ค์–ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์ฒ˜์Œ์—” ๋ถ„๋ช… ์–ด๋ ค์› ์ง€๋งŒ ๊ณ„์† ์‹œ๋„ํ•˜๊ณ  ์ ์šฉํ•ด๋ณด๋‹ˆ ์ง€๊ธˆ ์ƒ๊ฐ์œผ๋กœ๋Š” ๋ฉ”์ธ ๋žœ๋”ฉํŽ˜์ด์ง€ CSS ์ž‘์—…์ด ์ •๋ง ์žฌ๋ฐŒ๊ณ  ๋ฟŒ๋“ฏํ•จ์„ ๋Š๊ผˆ๋˜ ํŒŒํŠธ์˜€๋‹ค.

landingpage1

์—ฌ๊ธฐ์— ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ํ‘ธํ„ฐ ๋ถ€๋ถ„๋„ ๋งŒ๋“ค์–ด ๋ณด์•˜๊ณ ,

ํ•œ ๋ฐœ ๋” ๋‚˜์•„๊ฐ€ ํƒœ๋ธ”๋ฆฟ๊ณผ ๋ชจ๋ฐ”์ผ๋กœ์˜ 3๋‹จ ๋ณ€์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฐ˜์‘ํ˜• ์›น์„ ์ ์šฉํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

๋ฌด์—‡๋ณด๋‹ค๋„ gif ์˜์ƒ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ํ—ค๋” ๋ถ€๋ถ„์„ ์Šคํฌ๋กค ํ•  ์‹œ ํ—ค๋” ๋””์ž์ธ๊ณผ ๋ฒ„ํŠผ์ด ๋ฐ”๋€Œ๋ฉฐ ๊ณ ์ •๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ๋„ ๋ฟŒ๋“ฏํ•จ์ด ๋‚จ์•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ด ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋Š” ์ฒ˜์Œ์— DOM ์š”์†Œ๋ฅผ ์„ ํƒํ•ด์„œ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์งฐ์—ˆ๋Š”๋ฐ, ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ƒํƒœ ์š”์†Œ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ

useRef() ๋ผ๋Š” ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์–ด ์ฃผ์–ด์•ผ ํ–ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ„ํ—์ ์ธ ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ๋ฌด์Šจ ๋ฌธ์ œ์ผ๊นŒ ์‹ถ๋‹ค๊ฐ€,

classlistnull

useRef ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ๋‚ด์—๋Š” current ๋ผ๋Š”๊ฒŒ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ ,

headerRef.current.classList.toggle('sticky', window.scrollY > 0); 

์ด๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์Šคํฌ๋กค y์ถ•์ด 0๋ณด๋‹ค ์ปค์งˆ ๋•Œ (์Šคํฌ๋กค์ด ๋ ๋•Œ) sticky ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ถ€์—ฌ๊ฐ€ ๋˜๋ฉด์„œ ํ•ด๋‹น CSS ๊ฐ€ ์ ์šฉ์ด ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ”๋กœ ์ด current์˜ ๊ฐ’์ด null ์ผ ๊ฒฝ์šฐ์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„ ๊ฐ„ํ—์ ์ธ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋˜ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ ๋” ์ด์ƒ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„ ํ•ด๊ฒฐํ•œ ์ ๋„ ์ข‹์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

2. ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ๋„ ์ฒ˜์Œ์—๋Š” ๊ฐ๊ธฐ ๋”ฐ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค ํ–ˆ๋Š”๋ฐ ๋ฒ„ํŠผ ํ† ๊ธ€์„ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž… ๋˜๋Š” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ–ˆ๋‹ค.

์ฒ˜์Œ ํ”ผ๊ทธ๋งˆ ๋ ˆ์ด์•„์›ƒ์ด ์• ๋งคํ–ˆ์–ด์„œ ๋””์ž์ธ์ด ๊ฝค ๊ดœ์ฐฎ๊ฒŒ ๋‚˜์™”๋‹ค๋Š” ํ‰๊ฐ€๋ฅผ ๋“ค์—ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ๋กœ๊ทธ์ธ๊ณผ ์†Œ์…œ ๋กœ๊ทธ์ธ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฒŒ์ŠคํŠธ ๋กœ๊ทธ์ธ๊นŒ์ง€ ๋ฐฑ์—”๋“œ API ๋ฅผ ๋ฐ›์•„ ๊ตฌํ˜„์„ ์™„๋ฃŒํ–ˆ๋‹ค.

์ด ๋•Œ๋ถ€ํ„ฐ ํšŒ์› ์ธ์ฆ ๊ด€๋ จ API ์š”์ฒญ ๋กœ์ง์„ Redux ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์‹œ๋„๋ฅผ ํ–ˆ๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž˜ ๋˜์—ˆ๋‹ค.

axios ์š”์ฒญ์„ ๋งค๋ฒˆ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์ด๊ฒƒ์„ ๋ชจ๋“ˆํ™” ํ•ด์„œ ์“ฐ๋Š” ์‹œ๋„๋„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด ์ง€๋ฉด์„œ ๋ชจ๋“ˆํ™”๋œ ์š”์ฒญ ๋Œ€์‹  axios ๋ฅผ ์ง์ ‘ ์“ฐ๋Š”

๋ฐฉ์‹๋„ ๋™์‹œ์— ์ทจํ•˜๊ธฐ๋Š” ํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ํšŒ์› ๋กœ๊ทธ์ธ ์‹œ ๋ฐฑ์—”๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€, ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์—ฐ๊ฒฐ ์—์„œ์˜ ์ ‘๊ทผ ๋ฐฉ์‹, Redirect URI ์—์„œ ๋„˜๊ฒจ๋ฐ›์€ URL ์— ์žˆ๋Š” ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ์ง€์— ๋Œ€ํ•œ ๊ณผ์ •์„ ๋ฐฐ์šฐ๊ณ  ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฌด์—‡๋ณด๋‹ค ์†Œํ†ต์ด ์ •๋ง ์ค‘์š”ํ•˜๊ณ  ๋จธ๋ฆฌ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ํ•ด๊ฒฐ์ด ์ˆ˜์›”ํ•ด ์ง„๋‹ค ๋ผ๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค!

๋ชจ๋ฅด๋ฉด ํ˜ผ์ž ๋™๋™ ์•“๋Š” ์‹œ๊ฐ„๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ป๊ฒŒ ๋ง‰ํžˆ๊ณ  ์–ด๋ ค์›€์„ ๋Š๋ผ๋Š”์ง€ ์ž˜ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐœ๋ฐœ์ž์˜ ๋•๋ชฉ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

3. ๋งˆ์ด ํŽ˜์ด์ง€

์ด ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ์ œ์ผ ๊ธฐ์–ต์— ๋‚จ๋Š” ์ ์€, multer ๋ฐฑ์—”๋“œ ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ formData ๋ผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ ์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ๊ณผ

๋น„ ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ดํŽ˜์ด์ง€๋กœ ์ ‘๊ทผ (url ์ง์ ‘ ์ž…๋ ฅ์„ ํ†ตํ•ด) ํ–ˆ์„ ๋•Œ ๋ชจ๋‹ฌ ์ฐฝ์„ ๋„์›Œ์„œ ํšŒ์›๊ฐ€์ž…์„ ์œ ๋„ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ์ ์ด๋‹ค.

์ฒ˜์Œ์—๋Š” ๋น„์ธ๊ฐ€ ์‚ฌ์šฉ์ž ์ ‘๊ทผ ์‹œ ๋ฐ”๋กœ ํ™ˆ์œผ๋กœ ํŠ•๊ธฐ๊ฒŒ๋งŒ ํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ ๊ทธ ๋ถ€๋ถ„์€ ๋ญ”๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋ฐฐ๋ คํ•œ ๋Š๋‚Œ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ด ํŽ˜์ด์ง€์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง์„ ์ž‘์„ฑํ•˜์˜€๋‹ค.

multer ๊ตฌํ˜„์„ ์œ„ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์—์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ฒ€์ƒ‰ํ•ด ๋ณด๋‹ค formData ๋กœ ๋„˜๊ฒจ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์ด ๋•Œ ๋ฐฑ์—”๋“œ ์ธก์—์„œ ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š” ์ฝ”๋“œ ๋˜ํ•œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

ํƒˆํ‡ด ์ฒ˜๋ฆฌ ์‹œ ํ•œ ๋ฒˆ ๋” ๋ฌผ์–ด๋ด์„œ ํ™•์‹คํžˆ ํƒˆํ‡ด ์—ฌ๋ถ€๋ฅผ ์ •ํ•˜๋Š” ๋ชจ๋‹ฌ์ฐฝ๋„ ๋งŒ๋“ค์–ด ๋ณด์•˜๊ณ , ๋งˆ์ดํŽ˜์ด์ง€ ์•„๋ž˜์˜ ์Šค์ผ€์ค„๋Ÿฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ๋„ flex ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ๋˜์—ˆ๋‹ค.

3ํŽธ์€โ€ฆ ๋‚ด์ผ ์จ๋ณด์ž!!


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook