๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

[ React / Architecture ] React ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์งœ์•ผํ• ๊นŒ?

 

 

**  React ๊ณต์‹ ํŽ˜์ด์ง€ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ถ€ ๋ชฉ์ ์œผ๋กœ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. **

 


 

1. ๊ธฐ๋Šฅ ๋˜๋Š” ๋ผ์šฐํŠธ ๋‹จ์œ„๋กœ ๋ถ„๋ฅ˜

 

์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ผ์šฐํŠธ(ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ๋กœ) ํด๋”์— ํ•ด๋‹น ๋ผ์šฐํŠธ์™€ ๊ด€๋ จ๋œ CSS, JS ๋“ฑ์„ ๊ฐ™์ด ๋‘๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

์„œ๋น„์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ถ”๋ฆฌ๊ณ , ๊ทธ ๊ธฐ๋Šฅ๋“ค์„ ์–ผ๋งˆ๋‚˜ ์„ธ๋ถ„ํ™”ํ• ์ง€ ๊ณ ๋ฏผ ํ›„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. 

๋‚ด๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ด๋Ÿฐ ๋ถ„๋ฅ˜ ๋ฐฉ๋ฒ•์ธ๋ฐ, ์„œ๋น„์Šค์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ or ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ

๊ทธ ์•ˆ์— ํŒŒ์ผ๋“ค์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์—๊ฒŒ๋Š” ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค.

 

common/
  Avatar.js
  Avatar.css
  APIUtils.js
  APIUtils.test.js
feed/
  index.js
  Feed.js
  Feed.css
  FeedStory.js
  FeedStory.test.js
  FeedAPI.js
profile/
  index.js
  Profile.js
  ProfileHeader.js
  ProfileHeader.css
  ProfileAPI.js

 

 

 

 

 

 

 

 

2. ํŒŒ์ผ ์œ ํ˜•๋ณ„ ๋ถ„๋ฅ˜

 

์•„๋ž˜์™€ ๊ฐ™์ด ๋น„์Šทํ•œ ์œ ํ˜•์˜ ํŒŒ์ผ๋ผ๋ฆฌ ๋ฌถ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ api, components ๋“ฑ๊ณผ ๊ฐ™์ด ์œ ํ˜•๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์€ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ,

๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์—” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ๋Š” components ํด๋” ์•ˆ์—์„œ ๋‹ค์‹œ ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ตฌ๋ถ„์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„๋ฅ˜ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

api/
  APIUtils.js
  APIUtils.test.js
  ProfileAPI.js
  UserAPI.js
components/
  Avatar.js
  Avatar.css
  Feed.js
  Feed.css
  FeedStory.js
  FeedStory.test.js
  Profile.js
  ProfileHeader.js
  ProfileHeader.css

 

 

 

 

 

 

ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์งค ๋•Œ ์ฃผ์˜ํ•  ์  โ—๏ธ

 

- ๋„ˆ๋ฌด ๋งŽ์€ ์ค‘์ฒฉ ํ”ผํ•˜๊ธฐ : ๊นŠ์€ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘์ฒฉ์€ JSํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์€ ๋ฌธ์ œ์ ์„ ์•ผ๊ธฐํ•œ๋‹ค. ๋‹จ์ผ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ๋Š” 3~4๋ฒˆ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ค‘์ฒฉ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ.

 

- ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ธฐ : ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ๋‹จ๊ณ„๋ผ๋ฉด ์ผ๋‹จ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ , ๊ทœ๋ชจ๊ฐ€ ์ปค์ง„๋‹ค๋ฉด ์ž์ฃผ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋˜๋Š” ํŒŒ์ผ๋“ค์„ ๊ฐ™์ด ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์€ ๋ฐฉ๋ฒ•. (์ด๋Ÿฐ ์›์น™์„ "์ฝ”๋กœ์ผ€์ด์…˜(colocation)" ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.)

 

 

 


 

 

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ React ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ํŒŒ์ผ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•œ ๋‚ด์šฉ์ธ๋ฐ, ๋‚ด ์ƒ๊ฐ์— ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ์€

๋„ˆ๋ฌด ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ž์˜ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜๋Š” ๋‹ค๋ฅธ ๋™๋ฃŒ๋“ค์„ ์ƒ๊ฐํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ์ง๊ด€์ ์ด๋ฉด์„œ๋„ ์ž‘์—…ํ•˜๊ธฐ ํšจ์œจ์ ์œผ๋กœ, ๋˜ ์“ธ๋ฐ์—†๋Š” ์ค‘์ฒฉ์€ ์ตœ๋Œ€ํ•œ ํ”ผํ•ด์„œ ๊ตฌ์กฐ๋ฅผ ์งœ๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋ฉด ์ ์  ๋” ์ข‹์•„์ง€์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•œ๋‹ค. 

 

์ผ๋‹จ ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์งœ๋Š” ๊ฒƒ๋ณด๋‹ค, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ์ข‹๊ฒŒ ์งค ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ฐพ์•„์„œ ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์ด๋Ÿฐ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋‚˜๋ฅผ ๋ฐœ์ „์‹œ์ผœ์ฃผ๋Š” ๊ณ ๋ฏผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—....! ์ง€๊ธˆ์€ ์™„๋ฒฝํ•œ ๊ตฌ์กฐ๋ผ๊ณ  ๋ณผ ์ˆœ ์—†๊ฒ ์ง€๋งŒ ์ ์  ๋…ธ๋ ฅํ•˜๊ณ  ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋ฉด ๋‚˜์ค‘์—” ํ”„๋กœ์ ํŠธ ๊ธฐํš์„ ๋ณด๋ฉด ๋จธ๋ฆฟ์†์—์„œ ๊ตฌ์กฐ๊ฐ€ ๋”ฑ๋”ฑ ๋‚˜์˜ค๋Š” ๋‚ ์ด ์˜ค์ง€ ์•Š์„๊นŒ? ์ƒ๊ฐํ•œ๋‹ค! ๐Ÿ˜„

 

๋‚˜๋Š” ๋ณดํ†ต ํŽ˜์ด์ง€์˜ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ๋ผ์šฐํŠธ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ ,

๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ฒฉ์— ๋งž๊ฒŒ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์งœ๋ ค๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๊ฐ€๋„ ์ค‘๊ฐ„์— ๊ตฌ์กฐ๋ฅผ ์ „์ฒด ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค..ใ… ใ… ใ…‹ใ…‹ใ…‹

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ด์šฉํ•˜์—ฌ import๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ,

์ค‘๊ฐ„์— ํŒŒ์ผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์ด ์ ์–ด์„œ ์ง„์ž‘ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ด์šฉํ• ๊ฑธ ์‹ถ์—ˆ๋‹ค!

์ ˆ๋Œ€๊ฒฝ๋กœ import ๋ฐฉ๋ฒ•์€ ์กฐ๋งŒ๊ฐ„ ํฌ์ŠคํŒ…ํ•ด์•ผ๊ฒ ๋‹ค-!