-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.json
More file actions
1 lines (1 loc) ยท 209 KB
/
content.json
File metadata and controls
1 lines (1 loc) ยท 209 KB
1
{"pages":[{"title":"About Dave Kim","text":"Intro.์๋
ํ์ธ์. ์น ๊ฐ๋ฐ์ ๊น๋ํธ์
๋๋ค.","link":"/about/index.html"}],"posts":[{"title":"Git ๋ธ๋ก๊ทธ ๊ฐ์ค","text":"๋ชฉํ 2์ผ์ 1๊ธ ์์ฑ ํน์ ์ปค๋ฐ ๊ธ์ ๊ทธ๋ ๊ณต๋ถํ ๊ฒ์ ๋ณต์ตํ๋ฉด์ ์ ๋
10์๋ถํฐ 12์ ์ฌ์ด์ ์์ฑ ์์ฑํ ์ฃผ์ ๋ ๊ธฐ์ : django, http, docker ์ฑ
: Deep Work","link":"/2020/04/09/hello-world/"},{"title":"The Weaver","text":"Grant Colfax Tullar๋ผ๋ ์์ธ์ด ์ด The weaver๋ผ๋ ์ ์๋ฆฌ์๋ฒ ์ค ์๋ฆฌ์์ ์ฑ
โ๊ณ ํต์ ํ๋์ง ์์์โ์ ์ธ์ฉ๋ ์์ธ๋ฐ ์๋ฆฌ์์ ์ด ์๋ก ์์ ์ ์ฑ
์ ๋ง๋ฌด๋ฆฌ ํ๋ค ๋์ ์ถ์ด ์๊ทธ๋ ๊ฑฐ๋ฆฌ๋ ์๊ฐ๋ง๋ค ๋์ ์ด๋ฆฌ์์ ์ ํ์ ๋ํ ๊ฐ์ ์น๋ฅด๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐ์ด ๋ค ๋๊ฐ ๋ง๋ค ๊ทธ ๋ ๊ทธ๋ ๊ฒ ํ์ง ๋ง์์ด์ผ ํ๋๋ฐ ์๋๋ฉด ๊ทธ ๋ ๊ทธ๋ ๊ฒ ํ์ด์ผ ํ๋๋ฐ ๋ผ๋ ์๊ฐ๋ค, ๋๋ด๋ค์ด ์์ฃผ ๋๋ฅผ ๊ดด๋กญํ๋ค ๊ทธ ๋๋ง๋ค ํ๋๋๊ป์๋ ์๋ฅผ ๋ณด๊ฒ ํ์๋๋ฐ ๋์ ์คํจํ ์ ํ๋ค๊ณผ ๋์ ๋๋ด๊ณผ ๋์ ๋ถ์ ์์ ๋ค ์ฌ์ฉํ์
์ ๋์ ์ถ์ ์ฎ๊ณ ๊ณ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์ ๋ค ์ด ์๊ฐ ๊ทธ ๋ชจ๋ ๊ฒ๋ค์ ์๋ฆ๋ต๊ฒ ๊ทธ๋ฆฌ๊ณ ์๋ค ํ๋๋๊ป์๋ ๋์ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํ์
์ ๊ทธ ๋ถ๊ป์ ๊ธฐ๋ปํ์๋ ์ผ์ ์ฌ์ฉํ์ ๋ค ๊ทธ ์ค์์๋ ์ฌํ์ ๊ฒ์ ์ค์ ๊ทธ ๋ถ์ด ์์ฃผ ์ฌ์ฉํ์๋ ์ค์ด๋ค The weaver ๋ฒ์ญ ๋ด ์ถ์ ๋ด ์ฃผ๋๊ณผ ๋ ์ฌ์ด์ ์ง๋ฌผ ์ง๊ธฐ๋ค๋๋ ์์์ ์ ํํ ์ ์๊ณ ์ฃผ๋์ ๊พธ์คํ ์ผํ์ ๋ค ์ฃผ๋์ ์์ฃผ ์ฌํ์ ์ง์๋๋ฐ,๋๋ ์ด๋ฆฌ์๊ฒ๋ ๊ต๋ง์ ๋น ์ ธ์ฃผ๋์ด ์์ชฝ์ ๋ณด์๊ณ ๋๋ ์๋์ชฝ์ ๋ณธ๋ค๋ ์ฌ์ค์ ๋ง๊ฐํ๊ณค ํ๋ค ์ง๊ธฐ๊ฐ ์กฐ์ฉํด์ง๊ณ ๋ถ์ด ์์ง์์ ๋ฉ์ถ ๋ค์์ผํ๋๋์ ์ง๋ฌผ์ ํด์ ์ด์ ๋ฅผ ์ค๋ช
ํด ์ฃผ์ค ๊ฒ์ด๋ค ์ง๋ฌผ ์ง๋ ๋ถ์ ๋ฅ์ํ ์์๋๊ทธ๋ถ์ด ๊ณํํ์ ๋ฌด๋ฌ์๋๊ฒ์์ ์ค์ด ๊ธ์, ์์ ์ค๋งํผ์ด๋ ํ์ํ๋ค ๋๋ฅผ ์์๋ฉฐ, ์ฌ๋ํ์๋ฉฐ, ๋๋ณด์๋๋ฐ๊ทธ ์ด๋ค ๊ฒ๋ ์ด ์ฌ์ค์ ํ๋ฆด ์ ์๋ค๊ทธ ๋ถ์ ๊ทธ ๋ถ์ ์์ ๋งก๊ธฐ๋ ์ฌ๋๋ค์๊ฒ๊ฐ์ฅ ์ข์ ๊ฒ์ ์ฃผ์ ๋ค ๊ทธ ๋ถ์ด ์ฃผ์๋ ๊ฐ์ฅ ์ข์ ๊ฒ์ ์์ ๊ทธ๋ฆฌ์ค๋ ๊ทธ ๋ถ ์์ ์ด์๋...","link":"/2020/04/09/the-weaver/"},{"title":"์ด์ฌ์ผ 66์ฅ 3์ ","text":"์๋ฅผ ์ก์ ๋๋ฆฌ๋ ๊ฒ์ ์ด์ธํจ๊ณผ ๋ค๋ฆ์ด ์์ด ํ๊ณ ์ด๋ฆฐ ์์ผ๋ก ์ ์ฌ๋๋ฆฌ๋ ๊ฒ์ ๊ฐ์ ๋ชฉ์ ๊บพ์๊ณผ ๋ค๋ฆ์ด ์์ด ํ๋ฉฐ ๋๋ฆฌ๋ ์๋ฌผ์ ๋ผ์ง์ ํผ์ ๋ค๋ฆ์ด ์์ด ํ๊ณ ๋ถํฅํ๋ ๊ฒ์ ์ฐ์์ ์ฐฌ์กํจ๊ณผ ๋ค๋ฆ์ด ์์ด ํํ๋ ๊ทธ๋ค์ ์๊ธฐ์ ๊ธธ์ ํํ๋ฉฐ ๊ทธ๋ค์ ๋ง์์ ๊ฐ์ฆํ ๊ฒ์ ๊ธฐ๋ปํ์ฆ - ์ด์ฌ์ผ 66์ฅ 3์ - ๋์ ์ฃ, ๋ผ๋ ์ด ๋จ์ด๊ฐ ์ข
์ข
๋์๊ฒ ์ฃผ๋ ์ธ์์ '์ฌ์ค ๋๋ ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ํ๋๋๊ป์ ๋ถํธํด ํ์ ๋ค๊ณ ํ๋๊น ๊ณ ๋ฐฑํด์ผ ํ๋ ๋ ํ๊ฐํด์ผ ํ๋ ๋ฌด์ธ๊ฐ์ด์ง'์ด๋ค. ๊ทธ๋์ ๋์ ์ฃ๋ ์์ฃผ ์ด๋ค ํ์๊ณผ๋ ๊ฐ์ด ๋๊ปด์ง๋ค. ์ง์งํด์ผ ๋ํด์ผ ํ ์๋ฌด๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง ์ง์งํ๊ฒ ๋ํด์ง์ง ์๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฐ ์ฃ์ ๋ํ ์ธ์๊ณผ๋ ๋ค๋ฅด๊ฒ, ์์ฃผ ๋๋ ๋์ ์ฃ๊ฐ ๋์ ๋ง์์ ์ข ๋จน๊ณ ๋์ ๋ง์ ํ ๊ฐ์ด๋ฐ์ ์ฌ์ฐ์ ๋ง๋ค์ด ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ๋์ ์ฃ๋ ๋๋ฅผ ๋ถ์์ผ๋ก ๋ฐ์ด๋ฃ๊ณ , ๋์ ๊ฐ์น๋ฅผ ์ฆ๋ช
ํ๋๋ก ํ๊ณ , ๊ฐ์น๊ฐ ์ฆ๋ช
๋์ง ๋ชปํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฌ๋๋ ๋๋ ๋๋ฅผ ์ฌ๋ํ์ง ๋ชปํ๋ค๊ณ ๋งํ๋ค. ์ฃ์ ๋ํ ๋์ ์ธ์๊ณผ ์ฃ๊ฐ ๋์ ์์ ๋ง๋ค์ด ๋๋ ๊ฒฐ๊ณผ ์ฌ์ด์ ๊ดด๋ฆฌ๋ ์ฐธ์ผ๋ก ๋๋๋ค. ๋์ ์ ์ ์, ๋์ ์๋ง์, ๋์ ์์ ๋ฅผ ์กฐ์ ํ๋ ๊ทธ ํ์ ๋นํด์ ๋์๊ฒ ๊ทธ๋ค์ง ์ง์งํ๊ฒ ๋๊ปด์ง์ง ์๋๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํ๋ ๊ฒ์ธ๊ฐ? ํ๋๋๊ป์ ์ด์ค๋ผ์ ์ฌ๋๋ค์๊ฒ ๊ทธ๋ค์ด ํ๋๋ ์์ผ๋ก ๋์๊ฐ๊ธฐ ์ , ์์ ์์ ๋ฐ์น๋๋ก ํ์
จ์ ๋์ ๋๋ฌผ์ ์จ์ ๋๊ณ ๊ทธ ๋๋ฌผ์ ์ ํ์ ํด์ผํ๋ ๋น์ฌ์๋ ์ ๋ฌผ์ ๋ฐ์น๋ ๋น์ฌ์์๋ค. ํ๋๋๊ป์๋ ํ๋๋๊ป ๋์์ค๋ ๋ชจ๋ ์๊ฐ ๊ทธ ๋๋ฌผ์ ์ฃฝ์ด๋ ๋งํผ, ๊ทธ ์๋ช
์ ์ฃฝ์ด๋ ๋งํผ์ ๊ทธ ์ง์งํจ์ผ๋ก ์ฃ๋ฅผ ๋ค๋ฃจ๊ธฐ๋ฅผ ์๊ตฌํ์
จ๋ค. ๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋๊ณ ์ด์ค๋ผ์ ์ฌ๋๋ค์ ์๋ฅผ, ์์ ์ก๋ ๊ฒ์ ๊ทธ์ ๋์ดํ๋ ํ์์ผ ๋ฟ์ธ ๊ฒ์ผ๋ก, ์ ํ ์ฃ์ ๋๊ฐ๋ฅผ ์๊ฐํ์ง ์๋ ์์์ผ๋ก ์ ๋ฝ์์ผฐ๋ค. ๊ทธ๋ค์ด ์ ์ฌ๋ฅผ ์ด๋ ๊ฒ ์ผ๋ฐฉ์ ์ธ ๋์ด์ ์์์ผ๋ก ์ ํฅ์ํจ ๊ฒ์ ๊ฒฐ๊ตญ ๊ทธ๋ค์ด ์ง์งํ๊ฒ ์ฌ๊ธฐ์ง ์์๋ ์ฃ์ ์น๋ฆฌ์๋ค. ์ฃ๋ ์ฌ๊ธฐ์ ์ด์ค๋ผ์ ์ฌ๋๋ค์ ์๋ง์ ๋ฐฉํฅ์ ์กฐ์ ํ๋๋ฐ, ์๋ช
์ ์ฃฝ์์ผ๋ก์จ ์ฃ ๊ทธ ์์ ์๊ฒ ํฅํ๋ ์ฃ์ฑ
์ ๋ฐ๊พธ์ด์, ๋์ด์ ํจ์ผ๋ก์จ ๊ทธ๋ค์ ์๋ง์ ๊ธ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ๊พธ์ด๋ฒ๋ ธ๋ค. ๋ถ์ ํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ธ์ ๊ฒ์ ๋นผ์์๋, ๊ฐ๋ํ ์๋ค์ ๋ฌด์ํ๋ฉฐ ๋๋ณด์ง ์์๋, ์์ ์ ์๋ด๊ฐ ์๋ ๋ค๋ฅธ ์ฌ์์ ๊ด๊ณ๋ฅผ ๋งบ์ด๋, ๋ค์ ๋์ด์ ํ๋ฉด ๋ ๋ฟ์ด์๋ค. ์๋ช
์ ์ฃฝ์์ผ๋ก์จ ์ฃ๋ฅผ ์ต์ ํ ๊ฒ์ด ์๋๋ผ, ์ฃ๋ฅผ ์ง๊ธฐ ์ํด ๋์ดํ๋ค. ๋์ ๋ง์์ ์ด๋ ํ๊ฐ? ๋๋ ๋ฌด์์ ์ํด ๋์ดํ๋ ค ํ๋๊ฐ? ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ฌ์ ํ ํ๋๋์ด ์ํ์๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๋ค. ํ๋๋๊ป์๋ ํ๋๋๊ป์ ๋์๊ฒ ๊ทธ๋ฌํ์
จ๋ฏ์ด ์์ ์ ๋ด์ด์ฃผ์ด ์ด์์ ์ฌ๋ํ๊ธฐ๋ฅผ ์ํ์ ๋ค. ์์ ๊ทธ๋ฆฌ์ค๋๊ป์ ๊ทธ๋ฌํ์
จ๋ฏ์ด ๋ด๊ฐ ๋ฏธ์ํ๊ณ ์๋ ์ฌ๋๋ค์ ์ ์ต์ ์ํด ์ด๊ธฐ๋ฅผ ์ํ์ ๋ค. ๋์ ์ ์ผํ ์์๊ณผ ์๋ก์ ํ์์ ์์ ๋ ์ง์ฅ๊ณผ, ํธ์ํ ์ง, ๋๋ํ ์์ฐ์ด ์๋๋ผ ํ๋๋ ๊ทธ ๋ถ๊ป ๋๊ธฐ๋ฅผ ์ํ์ ๋ค. ํ๋๋ ๋น์ ๊ป์๋ ๋ด๊ฐ ์ถฉ๋ถํ ์ดํดํ์ง๋ ๋ชปํ๊ณ , ์ฌ๋ํ์ง๋ ์๊ณ , ๋ฐ๋ผ์ง๋ ์์์ง๋ง ๋์๊ฒ ๋ง์ํ์๊ณ ๋์๊ฒ ๊ทธ๋ฆฌ์ค๋๋ฅผ ๋ด์ด์ฃผ์๊ณ ๋์ ๋ง์ ๋ค์ผ์ญ๋๋ค. ๋น์ ์ ์ด๋ ๊ฒ ๋ง์ํ์ญ๋๋ค. ๋๋ ๋๋ฅผ ๊ตฌํ์ง ์๋ํ๋ ์์๊ฒ ๋ฌผ์์ ๋ฐ์์ผ๋ฉฐ ๋๋ฅผ ์ฐพ์ง ์๋ํ๋ ์์๊ฒ ์ฐพ์๋์ด ๋์์ผ๋ฉฐ ๋ด ์ด๋ฆ์ ๋ถ๋ฅด์ง ์๋ํ๋ ๋๋ผ์ ๋ด๊ฐ ์ฌ๊ธฐ ์๋
ธ๋ผ ๋ด๊ฐ ์ฌ๊ธฐ ์๋
ธ๋ผ ํ์๋๋ค ๋ด๊ฐ ์ข
์ผ ์์ ํด์ ์ณ์ง ์์ ๊ธธ์ ๊ฑธ์ด๊ฐ๋ ํจ์ญํ ๋ฐฑ์ฑ๋ค์ ๋ถ๋ ๋๋ ํ๋๋ ์ฃ๋ฅผ ์ฌ๋ํด์ ๋์ดํ๋ ํจ์ญํ ๋ฐฑ์ฑ์ด ์ฌ๊ธฐ ์์ต๋๋ค. ์ ๋ฅผ ๋ถ์ํ ์ฌ๊ธฐ์
์ ๋น์ ๊ป์ ์ํ์๋ ๋งํผ ์ฃ๋ฅผ ์ง์งํ๊ฒ ๋ํ๊ฒ ํ์๊ณ ๊ทธ ์ฃ๋ฅผ ์ฃฝ์ด๊ณ ๋น์ ์ ๋ชจ๋ ๋ง์์ ๊ธฐ๋ปํ๋ ์๊ฐ ๋๊ฒ ํ์ฌ ์ฃผ์ญ์์ค","link":"/2020/04/10/med_isayiah_6603/"},{"title":"Macbook ์ธ๋ถ ํค๋ณด๋๋ก ๋ณผ๋ฅจ ์กฐ์ ","text":"์๋ ๋ก์งํ
์์ ๋ง๋ ๋ฌด์ ๋ธ๋ฃจํฌ์ค ํค๋ณด๋ + ๋ง์ฐ์ค๋ฅผ ์ฐ๊ณ ์์๋๋ฐ, ์์ฆ ํ์ ์
๋ ฅ์ด ์ง์ฐ๋๋ ๋ฌธ์ ๊ฐ ๊ณต๋ถ์ ๋ฐฉํด๊ฐ ๋ ์ ๋๊ฐ ๋์ด์ LEOPOLD FC900R ํค๋ณด๋๋ฅผ ํฐ ๋ง ๋จน๊ณ (์ง์ง ํฐ ๋ง ๋จน๊ณ ) ์๋ค. ํํโฆ ๋งฅ๋ถ ๊ตฌ์
ํ ๋ ๋์ ๋ง์ด ์จ์ ํค๋ณด๋๋ฅผ ์ผ ๊ฑธ ์์๋๋ฐ, ์ด๋์ ์ข์ ํค๋ณด๋๋ฅผ ์ฌ์ผํ๋ ์ถ๋ค.(์๋ ๋๋ฌด ์์ข์ ๊ฑธ ์ฌ์ฉํด์ ๊ทธ๋ด ์๋ ์๋ค ์) ๋ฌธ์ ๋ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฌด์ ๋ธ๋ฃจํฌ์ค ํค๋ณด๋์ ๊ฒฝ์ฐ ๋ณ๋์ ์๋ ์กฐ์ ๋ฒํผ์ ์ ๊ณตํ๋๋ฐ, ๋ ์คํด๋ ํค๋ณด๋๋ ๊ทธ๋ ์ง ์์์ ์๋ ์กฐ์ ์ด ์ฌํ ๋ถํธํ๋ค. ๊ท์ฐฎ์๋ดค์ ์ผ๋ง๋ ๊ท์ฐฎ๋ํ๋๋ฐ ์ง์ง ๊ท์ฐฎ๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ํ๊ณ โฆ ํ๊ธ ๊ตฌ๊ธ๋ง์ผ๋ก๋ ์ธ๋งํ ๊ฒฐ๊ณผ๋ฅผ ์ ํ ์ป์ง ๋ชปํ์ง๋ง ์์ด ๊ตฌ๊ธ๋ง์์๋ ๋ฐ๋ก ํด๊ฒฐ์ฑ
์ ์ค๋ค. :) 3๋
์ ๋ต๋ณ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ Mac์ ํค๋ณด๋ ์์คํ
์ ๋ง๊ฒ ์ค๊ณ๋ ํค๋ณด๋ ํน์ Mac ํค๋ณด๋๊ฐ ์๋ ์ด์ ๋ฒ์ฉ ํค๋ณด๋์์ Mac ์๋์ ์กฐ์ ํ ์๋ ์๋ค. ๋ฐ๋ผ์ ์ปค์คํ
๋จ์ถํค๋ฅผ ์ค์ ํ ์ ์๋ ๋ค๋ฅธ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ์ฌ, ์๋ ์กฐ์ ๊ณผ ํน์ ๋จ์ถํค๋ฅผ ๋งคํ์ํค๋ ๊ฒ์ ์ถ์ฒํ๋ค. ํ ๋ต๋ณ์๊ฐ ์ถ์ฒํด์ค spark๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค. spark๋ฅผ ์ค์นํ๊ณ ๋ฐ๋ก ์คํํ๋ค. ์๋ก ๋จ์ถํค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด +๋ฒํผ์ ๋๋ฅด๊ณ Action์ Volume Up์ผ๋ก ์ค์ ํ ๋ค์ ๋จ์ถํค๋ฅผ ์ค์ ํ๋ฉด ๋๋๋ฐ, 2๊ฐ์ง ์ฒดํฌ๋ฐ์ค๊ฐ ์๋ค. Display notification icon์ ๊ฒฝ์ฐ ์ฒดํฌํ๋ฉด ๋ณผ๋ฅจ ๋ณํ ์ ๋ณดํต ๋งฅ์์ ๋ณผ๋ฅจ ์กฐ์ ํ ๋ ๋์ค๋ ์ฐฝ์ด ์๊ธด๋ค. ์ด๊ฑธ ์ฒดํฌ ์ํ๋ฉด ๋ณผ๋ฅจ ์กฐ์ ํ ๋ ์กฐ์ ์ ๋์ง๋ง ์กฐ์ ์ ๋๋ฅผ ํ์ธํ ์ ์๋ ์ฐฝ์ด ๋จ์ง ์๋๋ค. Play feedback when volume is changed์ ๊ฒฝ์ฐ ์ฒดํฌํ๋ฉด ๋ณผ๋ฅจ ๋ณํ ์ ๋ณํ๋ ๋ณผ๋ฅจ์ ๋ค๋ ค์ค๋ค. ๋๊ฐ์ง ์ค์ ๋ชจ๋ ๋งฅ์ ๋ณผ๋ฅจ ์กฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ค ์ฒดํฌ๋ฅผ ํ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค. Volume Down๊ณผ Mute๋ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค.","link":"/2020/04/15/macbook-volume/"},{"title":"CSS ๋ ์ด์์์ด ๋ค๋ฅธ ๋ฌธ์ ํด๊ฒฐ","text":"ํ์ฌ Nomad Coder์ airbnb-clone์ ์๊ฐ์ค์ด๋ค. ํ์ฌ 70% ์กฐ๊ธ ๋๊ฒ ์งํ๋์๋๋ฐ, ์น ํ๋ก ํธ ์๋ ๋ถ๋ถ์ ์ฅ๊ณ ํ
ํ๋ฆฟ๊ณผ tailwind๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค์ด์ก๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ๋ฉด์ ํ์ด์ง๋ค์ ๋ง๋๋ ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ๊ฐ์์์๋ ์ด ๋ฌธ์ ์ ๋ํด ์๋ฌด ์ธ๊ธ์ด ์์ด์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค ํ๋ค. ๋ฌธ์ ๋ฐ์ํ์ฌ ๋ง๋ค๊ณ ์๋ airbnb-clone ์ฌ์ดํธ์์๋ ์์ฝ ๊ฐ๋ฅํ ์์ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค. ์ด ์์ ๋ฆฌ์คํธ๋ ํํ์ด์ง์ ๊ฐ์ธ ์์ธ ํ์ด์ง, ์ด๋ ๊ฒ ๋ ์ข
๋ฅ์ ํ์ด์ง์์ ๋ณด์ฌ์ง๋๋ฐ, ํํ์ด์ง์์๋ ์์ฝ ๊ฐ๋ฅํ ์์ ์ ์ฒด๋ฅผ ๋ณผ ์ ์๊ณ , ๊ฐ์ธ ์์ธ ํ์ด์ง์์๋ ์์ ์ฌ์
์์ธ ๊ฒฝ์ฐ ์์ ์ด ๋ฑ๋กํ ์์ ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ์์ ๋ฆฌ์คํธ ํํ์ด์ง์ ๊ฐ์ธ ์์ธ ํ์ด์ง ๋ชจ๋์์ ์์ ๋ฆฌ์คํธ๊ฐ ์ ๋ณด์ฌ์ง๋ ๊ฒ ๊ฐ์์ผ๋ ์ด๋ค ๊ฐ์ธ ์์ธ ํ์ด์ง์์๋ ์์ ๋ฆฌ์คํธ์ ๋๋น๊ฐ ๋๋ฌด ์งง๊ฒ ์ค์ ๋์๋ค. ๋ชจ๋ ์ฝ๋๋ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ฏธ์ง ํ์ผ๋ง ๋ฌ๋๋๋ฐ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์์ ๋ฆฌ์คํธ ์ฐ์ ๋ฌธ์ ์ html ์ฝ๋ ๋ถ๋ถ์ ์๋์ ๊ฐ๋ค. class ๊ฐ์ ๋ฐ๋ฅธ css์ ์์ธํ ๋ด์ฉ์ tailwind๋ฅผ ๋ฌธ์๋ฅผ ์ฝ์ด์ผ ํ์ง๋ง ๋๋ถ๋ถ์ ์ ์ฉ๋ ์คํ์ผ์ class๋ช
๋ง ๋ด๋ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค 1234567891011<div class=\"flex flex-wrap -mx-40 mb-10\"> <div class=\"w-1/4 mb-10 px-2 overflow-hidden\"> <a href=\"{% url 'rooms:detail' room.pk %}\" > <div class=\"w-full h-64 bg-cover bg-center rounded-lg mb-2\" style=\"background-image: url({{room.first_photo}});\" /></div> ... </a> </div></div> ๊ณต๋ถํ ๋ด์ฉ ์ฐพ๊ธฐ ํ์ธํ ๋ด์ฉ ์ฝ๋์ ๋ ๋ฒ์งธ ์ค div๋ ๊ฐ๊ฐ์ ์์ ๋ฆฌ์คํธ ์์์ ํด๋นํ๋ค. ์ด div์ ๊ฒฝ์ฐ w-1/4 class๊ฐ ์ ์ฉ๋์๋๋ฐ, ํด๋น class๋ width: 25%๊ฐ ์ ์ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด div element์ ๋๋น๋ ์์ ์ containing block ๋๋น์ 1/4์ด ์ ์ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ์์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ width ๊ฐ์ 330px์ ๋๋ฅผ ๊ฐ๋ ๊ฒ์ ๋นํด์ ๋น์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ์์ ๋ฆฌ์คํธ๋ 140px ์ ๋๋ฅผ ๊ฐ์ก๋ค. ๋ค๋ฅธ ์์ ๋ฆฌ์คํธ๋ค๋ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ ์์ ๋ฆฌ์คํธ์ ๊ฐ์์ ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์์ ๋ฆฌ์คํธ์ ๋๋น๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ์ผ๋ก ํ์ธํ๋ค. ์ฆ, ์ฌ์ฉ์์ ๋ฑ๋ก ์์๊ฐ 2๊ฐ, 3๊ฐ, 4๊ฐ๋ก ๋์ด๋จ์ ๋ฐ๋ผ์ ๋ฆฌ์คํธ์ ๋๋น๋ ๋์ด๋ฌ๋ค. ๊ณต๋ถํ ๋ด์ฉ ํ์ธํ ๋ด์ฉ์ ๋ฐ๋ฅด๋ฉด ์์ ๋ฆฌ์คํธ ์์์ ์์ ์์๋ค์์ width ๊ฐ์ด ๋ช
์๋์ง ์์๊ธฐ ๋๋ฌธ์ width: 25%๋ฅผ ์ ์ฉํ์ ๋ ๊ฐ์ด ๋ถ์์ ํ๊ฒ ๋ฐ๋๋ ๊ฒ์ผ๋ก ์ถ์ธกํ ์ ์๋ค. width ๊ฐ์ด ๊ฒฐ์ ๋๋ ๊ณผ์ ์ ์ดํดํ๊ธฐ ์ํด์ containing block์ ๊ณต๋ถํด์ผ ํ ๊ฒ ๊ฐ๊ณ , ๋ํ ๋ธ๋ผ์ฐ์ ๊ฐ block ์์๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ธ block formatting context์ ๋ํด์๋ ๊ณต๋ถํด์ผ ํ ๊ฒ ๊ฐ๋ค.(์ด ๊ฒ์ด ์ ์ ํ ๋ฌธ์ ํด๊ฒฐ์ง์ ์ด ์๋ ์๋ ์๊ธฐ ๋๋ฌธ์, ๊ณต๋ถํ๋ฉด์ ์์ธ์ ๋ ์ฐพ๊ฒ ๋ค.)","link":"/2020/04/17/airbnb-clone-problem-1/"},{"title":"CSS Containing Block","text":"airbnb clone ์์
์ค์ ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒซ๋ฒ์งธ๋ก ๊ณต๋ถํ๋ ์ฃผ์ ๋ ์ปจํ
์ด๋ ๋ธ๋ก์ด๋ค. ์ปจํ
์ด๋ ๋ฐ์ค๋?์๋์์ด๋์น ํ์ค์ ๋ง๋๋ ๋จ์ฒด w3c์์ ์์ฑ๋ css ๊ณต์ ๋ฌธ์์์ ์ปจํ
์ด๋ ๋ธ๋ก์ ์ด๋ป๊ฒ ์ค๋ช
ํ๋์ง ํ์ธํด๋ณด์๋ค. In CSS 2, many box positions and sizes are calculated with respect to the edges of a rectangular box called a containing block. In general, generated boxes act as containing blocks for descendant boxes; we say that a box โestablishesโ the containing block for its descendants. The phrase โa boxโs containing blockโ means โthe containing block in which the box lives,โ not the one it generates. - 9.1.2 Containing blocks. CSS 2.1 spec ๊ณต์ ๋ฌธ์์์๋ ์ปจํ
์ด๋ ๋ธ๋ก์ด๋ผ๋ ๊ฐ๋
์ ์ ์ฌ์ฉํ๋์ง์ ์ปจํ
์ด๋ ๋ธ๋ก์ด ์ด๋ป๊ฒ ์ค์ ๋๋์ง๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ๋ค.(์์ธํ ์ค๋ช
์ ์คํ์ ๋ค๋ฅธ ์ฑํฐ์์ ์ค๋ช
์ ํ๊ณ ์๋ค. ํ์ ํ ์์ ) ์ค๋ช
์ ๋ฐ๋ฅด๋ฉด ์์๋ค(box๋ค)์ position(CSS์์์ position์ ๋จ์ํ ์์น๊ฐ ์๋๊ธฐ ๋๋ฌธ์)๊ณผ ํฌ๊ธฐ(๋์ด์ ๋๋น)๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ๊ธฐ์ค์ ์ ์ ํ๊ธฐ ์ํด ํ์ํ ๊ฐ๋
์ด๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ๊ฐ๊ฐ์ html์์(box)๊ฐ ์๋(lives) ๊ณณ์ด ์ปจํ
์ด๋ ๋ธ๋ก์ด๋ค. ์ปจํ
์ด๋ ๋ธ๋ก ์ค์ ์ ์์ธํ ๋ด์ฉ์ ์๋ ค์ฃผ๋ ์๋ ๋ค๋ฅธ ์ฑํฐ๋ฅผ ํ์ธํด ๋ณด์๋ค. ํด๋น ๋ด์ฉ์ ๊ธธ๊ธฐ ๋๋ฌธ์ ์ธ์ฉํ์ง๋ ์์ง๋ง ์ฌ๊ธฐ์์ ํ์ธํ ์ ์๋ค. ์ปจํ
์ด๋ ๋ฐ์ค ์์ธํ ์ดํด๋ณด๊ธฐ์ฐ์ ์ปจํ
์ด๋ ๋ฐ์ค์ ๋ํด์ ์คํดํ๊ธฐ ์ฌ์ด ๋ถ๋ถ์ ์ด์ผ๊ธฐ ํ๊ณ ์ปจํ
์ด๋ ๋ฐ์ค๊ฐ position๊ฐ์ ๋ฐ๋ผ์ ์ด๋ป๊ฒ ์ ์๋๋์ง ์ดํด๋ณด๋ ค๊ณ ํ๋ค. html์ ์์ฑํ ๋, ์์ ์์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ ์์๋ฅผ ํ์ ์์๋ฅผ ๋ถ๋ชจ(์์) ์์๋ผ๊ณ ํ๊ณ , ์์ ์์ ์๋ ์์๋ฅผ ์์(ํ์) ์์๋ผ๊ณ ํ๋ค. html ๋ฌธ์๋ค์ ์ด๋ ๊ฒ ์์๋ค ๊ฐ์ ๊ณ์ธต๋ค์ ํ์ฑํ๋ฉด์ ์์ฑ๋๋ค. ์ฐ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด html ๋ฌธ์๋ฅผ ๋ ๋๋งํ๊ณ ๊ทธ๋ ค๋ธ ํ๋ฉด์ ๋ณด๋ฉด์ ์ปจํ
์ด๋ ๋ธ๋ก์ ๋ถ๋ชจ์์์ผ ๊ฒ์ด๋ผ๊ณ ์ถ์ธกํ๊ฒ ๋๋ค. ์คํ์ ์ค๋ช
์ ๋ฐ๋ฅด๋ฉด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด ์ถ์ธก์ ๋ง๋ค. ํ์ง๋ง ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋๋ค. ์คํ์ ๋ถ๋ชจ์์๊ฐ ์ปจํ
์ด๋ ๋ธ๋ก์ด ์๋ ๊ฒฝ์ฐ์ ๋ํ ๋ด์ฉ, ์ปจํ
์ด๋ ๋ธ๋ก์ ๋ํ ์์ธํ ์ ์๋ฅผ ์ค๋ช
ํ๋ค. root element(๋ถ๋ชจ ์์๊ฐ ์๋ ์ ์ผํ ์์)๊ฐ ์๋ ์ง์ฌ๊ฐํ์ ์์ญ์ ์ต์ด ์ปจํ
์ด๋ ๋ธ๋ก(initial containing block)์ด๋ค.","link":"/2020/04/21/containing-block/"},{"title":"JS Lexical Scope์ Closure","text":"์์ผ๋ก 2๊ฐ์ ์ฃผ์ ๋ฅผ ๋ค๋ฃฐ ์์ ์ธ๋ฐ, 2๊ฐ์ ์ฃผ์ ๋ ๋ชจ๋ JS์ this๋ฅผ ์ดํดํ๊ธฐ ์ํ ๋ด์ฉ๋ค์ด๋ค. this๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ด๋ ค์์ ๊ฒช์ผ๋ฉด์ ํค๋ฉ๋ค๊ฐ JS์ ๋ค๋ฅธ ์ฃผ์ ๋ค์ ๊ณต๋ถํ๋ฉด์ ๋๋์ด this๋ฅผ ์กฐ๊ธ์ด๋๋ง ์ดํดํ๊ฒ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ mdn ๋ฌธ์๊ฐ ์งฑ์ด๋คโฆ mdn arrow function ๋ฌธ์๋ฅผ ์ฝ๊ณ ๋์ this๋ฅผ ์ดํดํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์๋ ๋ถ๋ถ์ ๋ง์ด ํด์ํ๊ฒ ๋์๋ค. ์ฐ์ ์ฒ์์๋ lexical scope์ closure๋ฅผ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๊ณ , ๊ทธ ๋ค์ JS function๊ณผ arrow function์ ๋ค๋ฃจ๋ฉด์ this์ ๋ํด ์ค๋ช
ํด๋ณด๊ฒ ๋ค. ๋ฌธ์ ์ ์์this์์ ์ฒซ๋ง๋จ์ฌ๊ฐํ๊ฒ JS์ ๋ํด ์ ๋ชจ๋ฅด๋(์์ง๋ ๋ง์ด ๋ชจ๋ฅด๋โฆ) ์ํ์์ ๋ค์๋ Code Spitz์ ES6+๊ธฐ์ด ๊ฐ์์์ ๋๋ Iterable ์์ ์ฝ๋๊ฐ ๋๋ฌด ์ดํด๊ฐ ๋์ง ์์๋ค. ๊ทธ๋์ ์์ ์ฝ๋ next ๋ฉ์๋์ return ๊ฐ์ ์ด๋ฆฌ์ ๋ฆฌ ๋ฐ๊ฟ๋ณด๋ฉด์ this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋์ง ์ดํดํด ๋ณด๋ ค๊ณ ํ๋ค. Iterator Interface 12345678910111213141516171819202122232425const N2 = class { constructor(max) { this.max = max; } [Symbol.iterator]() { // iterable object which return iterator object let cursor = 0, max = this.max; return { done: false, next() { // iterator object which return IteratorResultObject => (done, value) if (cursor > max) { this.done = true; } else { this.value = cursor * cursor; cursor++; } return this; // this is both iterator object and iteratorResultObject }, }; }};//์ถ์ฒ: ์ฝ๋ ์คํผ์ธ 77 ES6+ ๊ธฐ์ดํธ 3ํ์ฐจ ๊ฐ์//(https://www.youtube.com/watch?v=xTaCosid1-k&list=PLBNdLLaRx_rIF3jAbhliedtfixePs5g2q&index=4) ์์ ์์ ๋ ๊ฐ๋จํ์ง ์์๋ฐ Iterable, Iterator ๊ฐ์ฒด์ ์ ์๋ฅผ ์๊ณ ์์ด์ผ ์ดํด๊ฐ ๋๊ณ , ๋ Computed property name์ ๊ฐ๋
์ ์์์ผ `[Symbol.iterator]` ํจ์๊ฐ ๋ฏ์ค์ง ์๊ฒ ๋๊ปด์ง๋ค. ํ์ง๋ง ์ด๋ฒ ์ฃผ์ ์์๋ ์์ ๋ด์ฉ๋ค์ ๋ค๋ฃจ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ Iterable๊ณผ Iterator์ ์ ์๋ฅผ ์๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ๋ก ํ๊ณ ์ค๋ช
์ ํ๊ฒ ๋ค. ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Iterable ๊ฐ์ฒด์ธ N2๊ฐ ์๊ณ , N2๋ฅผ Iterable๋ก ๋ง๋ค์ด์ฃผ๋ `[Symbol.iterator]` ๋ฉ์๋๋ next() ํจ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. ์์ next ํจ์๊ฐ ์ฌ๋ฐ๋ ์ ์ ์๋ Iterator ๊ฐ์ฒด๊ฐ ๋๊ธฐ ์ํด์๋ ํด๋น ๊ฐ์ฒด๊ฐ next๊ฐ ํค์ธ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ณ , next ๋ฉ์๋๋ key๊ฐ ๊ฐ๊ฐ value์ done์ธ IteratorResultObject๋ฅผ ๋ฐํํด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์์ next ๋ฉ์๋๋ this๋ฅผ ๋ฐํํ๋๋ฐ, ์ด this๋ next ๋ฉ์๋ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. next๊ฐ ์ํ ๊ฐ์ฒด๋ฅผ ๋ณด๋ฉด next ๋ฉ์๋์ value์ done๋ชจ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ nextํจ์๋ ๊ทธ๋ฅ IteratorResultObject์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ ์๋๋ผ IteratorResultObject์ด๋ฉด์ ๋์์ Iterator์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.(์ด๋ ต๋ค...) ๊ทธ๋์ this๋ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋๋ฐ?์ง๊ธ์ this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ง ์ฝ๋๋ฅผ ๋ณด๊ณ ์ดํดํ ์ ์์ง๋ง ์ฒ์์๋ this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ง ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ค. ์์ ์์ ์ฝ๋์์ N2๋ class๋ก ์์ฑ๋์๋๋ฐ, Java๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด๋ผ๋ฉด ๋๊ตฌ๋ ์์ ์ฝ๋๊ฐ ์ดํด๋์ง ์์ ๊ฒ์ด๋ค. Java์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ํด๋์ค์ ๊ท์๋๊ธฐ ๋๋ฌธ์ this๋ ํญ์ ์์ ์ ๊ฐ์ง๊ณ ์๋ ์ธ์คํด์ค๋ฅผ ์๋ฏธํ๋ค. ๋ง์ฝ์ Java์์์ฒ๋ผ ์์ ์ฝ๋๋ฅผ ์ดํดํ๋ค๋ฉด this๋ N2 class๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฅด์ผ์ผ ํ๊ณ ๊ทธ ์ธ์คํด์ค๋ max ์์ฑ๊ณผ [Symbol.iterator] ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์์ ์ด์ผ๊ธฐ ํ๋ฏ์ด next ๋ฉ์๋๊ฐ ๋ฐํํ๋ this๋ next ๋ฉ์๋์ value์ done์ ๋ชจ๋ ๊ฐ์ง ๊ฐ์ฒด์ด๋ค. ์ด๋ฅผ ํตํด ์ ์ ์๋ ์ฌ์ค์ next๋ฉ์๋๋ฅผ ๊ฐ์ธ๊ณ ์๋ block์ ๋จ์ํ next๋ฅผ ๊ฐ์ธ๊ณ ์๋ ๊ฒ ์๋๋ผ ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ด๋ค. ์ ๋ฆฌํ์๋ฉด JS์ this๋ Java์์์ this์ฒ๋ผ ๋์ํ์ง ์๋๋ค.(์ถ๊ฐ์ ์ผ๋ก Java์ ํด๋์ค์ JS์ ํด๋์ค์ ๋ํ ์ฐจ์ด๋ JS์ ๊ฐ์ฒด๋ฅผ ๊ณต๋ถํ๊ณ JS๊ฐ ํ๋กํ ํ์
์ฒด์ธ์ ํตํด oop๋ฅผ ๊ตฌํํ๋ค๋ ๊ฒ์ ๊ณต๋ถํ๋ค๋ณด๋ฉด ์ดํดํ ์ ์๋ค.). ๋ํ Java์๋ ๋ค๋ฅด๊ฒ JS์ ๊ฐ์ฒด๋ {}์ ๋ง๋๋ ๊ฒ๋ง์ผ๋ก๋ ์์ฑ๋๋ค. this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ง์ ๋ฌธ์ ๋ Javascript ๋ฉด์ ์ ๋จ๊ณจ ์ง๋ฌธ์ผ๋ก ์๋ ค์ ธ ์์ ์ ๋๋ก ์ ์๋ ค์ง ์ง๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด ์ง๋ฌธ์ ๋ํด ๋๋ตํ ์๋ฃ๋ค์ ๊ทธ ๋๋ต์ ๋ฐ๋ผ ๋ฐ์ํ๋ ์๋ก์ด ์ง๋ฌธ์ ๋๋ตํด ์ฃผ์ง๋ ์์๋ค. ๊ทธ๋์ ์ฐ์ ๋๋ค์์ ์๋ฃ์์ ์ค๋ช
ํ๋ this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ง์ ๋ํ ๋๋ต์ ๋ณด๊ณ ์ ์ด์ด ๋ฐ์ํ๋ ์ง๋ฌธ์ ๋ค๋ฃจ์ด ๋ณด๊ฒ ๋ค. ๋ค์์ this๊ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ง์ ๋ํ ๊ฐ์ฅ ๊ฐ๋จํ ๋ต์ด๋ค. The object that is executing the current function. ์ฆ, this๋ ์์ ์ ์คํํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฅดํค๊ฒ ๋๋ค. this example 1234567891011function foo() { console.log(this.a); // this points for what?}var bar = { a: 10, foo: foo,};foo(); //undefinedbar.foo(); //10 ์์ ์์ ๋ฅผ ๋ณด๋ฉด, foo ํจ์๊ฐ ๊ทธ๋ฅ ์คํ๋์์ ๋์ bar ๊ฐ์ฒด์ ํจ์๋ก ์คํ๋์์ ๋ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๊ฒ์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฅ fooํจ์๋ฅผ ์คํํ ๊ฒฝ์ฐ์๋ this๊ฐ์ด ์ ์ญ๊ฐ์ฒด window์ด๋ค. ๋ฐ๋ผ์ window ๊ฐ์ฒด์ ๋ณ์ a๊ฐ ์๋์ง ํ์ธํ๊ณ , window ๊ฐ์ฒด์๋ a๊ฐ ์๊ธฐ ๋๋ฌธ์ undefined๋ฅผ ์ถ๋ ฅํ๋ค. ๋ฐ๋๋ก foo ํจ์๊ฐ bar ๊ฐ์ฒด์ ํจ์๋ก ์คํ๋ ๊ฒฝ์ฐ this ๊ฐ์ด bar ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ bar ๊ฐ์ฒด์ a ๊ฐ์ธ 10์ ์ถ๋ ฅํ๋ค. ์ด์ ๋ฌธ์ ๊ฐ ๊ฐ๋จํ๊ฒ ํด๊ฒฐ๋์๋ค. this๊ฐ ํจ์ ์คํ์ ๋ฐ๋ผ์ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค! ๊ฐ ์๋๋ค. ์ฌ๊ธฐ์ ์ง๋ฌธ์ด ๋ฐ์ํ๋ค. ๋ณ์๊ฐ ๋์ ์ผ๋ก binding๋๋ ์ธ์ด๋ dynamic scope๋ฅผ ๊ฐ์ง๋ค๊ณ ๋งํ๋ค. ๊ทธ๋ฌ๋ฉด js๋ ์์ this๊ฐ ๋์ ์ผ๋ก ๊ฒฐ์ ๋ ๊ฒ์ ๋ดค๊ธฐ ๋๋ฌธ์ dynamic scope๋ฅผ ๊ฐ์ง ์ธ์ด๊ฒ ๊ตฌ๋๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ecmascript spec(es6์ดํ์ ์คํ๋ค)์ ๋ณด๋ฉด lexical binding์ ๋ํ ๋ด์ฉ๋ง ๊ธฐ์ ๋์ด ์๊ณ dynamic binding์ ๋ํ ๋ด์ฉ์ ์๋ค. JS๋ฅผ ์ค๋ช
ํ ๋ชจ๋ ์๋ฃ๋ค์ JS๊ฐ lexical scope๋ผ๊ณ ๋งํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ ๊ฐ์ ์ฌ์ค์ด ์ถฉ๋ํ๋ค. JS๋ lexical scope์ด๋ฏ๋ก ํจ์ ์ฌ์ฉ ์๊ฐ ์๋๋ผ ์์ฑ ์์ ๋ณ์๊ฐ binding๋๋ค. ๊ทธ๋ฐ๋ฐ this๋ ํจ์ ์ฌ์ฉ์์ binding๋๋ค. ๊ทธ๋ ๋ค๋ฉด JS๋ ๊ธฐ๋ณธ์ ์ผ๋ก lexical binding์ธ๋ฐ this๋ง ์์ธ์ ์ผ๋ก dynamic binding์ธ๊ฐ? ํท๊ฐ๋ฆฐ๋ค. ์ฌ์ค ์ด ๋ฌธ์ ์ ๋ํ ๋ต์ ๊ผญ scope๋ฅผ ์ดํดํ์ง ์์๋ ๋๋ค. ํ์ง๋ง ์ดํ์ ๋ค๋ฃฐ function, arrow function๊ณผ ํจ๊ป this๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ scope์ closure๋ฅผ ๋จผ์ ์ดํดํ๋ ๊ฒ ๋์์ด ๋๋ค. lexical scope vs dynamic scopescope๋ฅผ ๊ฐ๋จํ ์ดํดํ์๋ฉด ๋ณ์์ ์๋ช
๊ธฐํ๊ณผ ๊ฐ๋ค. scope๋ ๋ณ์๊ฐ ์ธ์ ์๊ฒจ์ ์ธ์ ๊น์ง ์ด์์์ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ๋ณ์๋ง๋ค ์ธ์ ๋ง๋ค์ด์ ์ธ์ ๊น์ง๋ง ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํ๊ณ ์ฉ๋์ ๋ง๊ฒ scope๋ฅผ ์ค์ ํ๊ฒ ๋๋ค. ๋ฐ๋ณต๋ฌธ ์์์๋ง ์ฌ์ฉํ ๋ณ์๋ฅผ ๊ตณ์ด ๋ฐ๋ณต๋ฌธ ๋ฐ์์ ์์ฑํด์ ๋ฐ๋ณต๋ฌธ์ด ๋๋ ์ดํ์๋ ์ด์์๊ฒ ๋ง๋ค ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต๋ฌธ์ด ๋์ํ๋ ๋์๋ง ์ฌ์ฉํ ๋ณ์๋ ๋ฐ๋ณต๋ฌธ ๋ด์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด ์ฌ๋ผ์ง๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ค ๋ณ์๋ ๋ฐ๋ณต๋ฌธ์ด ์งํ๋จ์ ๋ฐ๋ผ์ ๊ฐ์ ๊ธฐ์ตํ๊ฑฐ๋ ์ถ์ ํด์ผ ํ ์๋ ์๋ค. ๊ทธ๋ฐ ๋ณ์๋ค์ ๋ฐ๋ณต๋ฌธ ๋ฐ์ ์์ฑํด์ ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ ๊ฐ์ ๊ธฐ์ตํ๊ณ ๊ณ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค. ์ฌ๊ธฐ์ ์๊ฐํด๋ณผ ์ ์ โ์ด๋ป๊ฒ ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋ฐ๋ณต๋ฌธ ๋ฐ์ ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋๊ฐโ์ด๋ค. โ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋ณ์๊ฐ ์ ์ธ๋ ๊ฒฝ์ฐ, ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด ๋ณ์๊ฐ ์ฌ๋ผ์ง๋คโ๋ ๋ง์ ๋ฐ๋ณต๋ฌธ ๋ด์ scope๊ณผ ๋ฐ๋ณต๋ฌธ ๋ฐ์ scope์ด ๋ค๋ฅด๋ค๋ ๊ฑธ ์๋ฏธํ๋ค. ์ด ๋ง์ ๋ฐ๋ณต๋ฌธ ์์์ ๋ฐ๋ณต๋ฌธ ๋ฐ์ ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ๋ณต๋ฌธ ๋ฐ์ ์๋ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ผํ๋ค๋ ๋ป์ด๋ค. ํจ์์์๋ ์ด๋ฐ ์ํฉ์ด ๋์ผํ๊ฒ ์กด์ฌํ๋ค. ๋ง์ฝ ํจ์ ๋ด์์ ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ํจ์๊ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๊ทธ ๋ณ์๋ฅผ ์ด๋์์ ์ฐพ์๊ฐ์ง๊ณ ์ฌ ๊ฒ์ธ๊ฐ? ํจ์ ๋ด์์ ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ์ฐพ์์ค๋ ๋ฐฉ์์ด 2๊ฐ์ง๊ฐ ์๋ค. ํ๋๊ฐ lexical binding์ด๊ณ ๋ค๋ฅธ ํ๋๊ฐ dynamic binding์ด๋ค. lexical binding์ ๊ฒฝ์ฐ๋ ํจ์๊ฐ ์์ฑ๋ ๋ ์์ ์ ํฌํจํ๊ณ ์๋ scope์์ ๋ณ์๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ JS๋ ์์ ์ ํฌํจํ๊ณ ์๋ lexical scope์ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ์ ํฌํจํ๊ณ ์๋ scope์ ํฌํจํ๋ scope์ ๋ ์ถ์ ํ๋ค. ์ด๋ ๊ฒ ๊ณ์ ์ถ์ ํ๋ค๊ฐ ์ต์ด์ scope(๋ณดํต ์ ์ญ scope)์๋ ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ณ์๊ฐ ์๋ค๋ ์ค๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋ ๊ฒ scope๋ฅผ ๊ฑฐ๊พธ๋ก ์ถ์ ํ๋ ๊ฒ์ scope chain์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋๋ก dynamic binding์ ๊ฒฝ์ฐ์๋ ํจ์ ๋ด์์ ์ ์ธํ์ง ์๋ ๋ณ์๋ฅผ ์ฐพ์ ๋์ call stack์ ํ์ธํ๋ค. call stack์ ํ์ธตํ์ธต ๋ด๋ ค๊ฐ๋ฉด์ ์ด๋ฆ์ด ๊ฐ์ ๋ณ์๊ฐ ์๋์ง ์ฐพ๊ณ ๊ทธ ๋ณ์๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ ํด๋น ๋ณ์๋ฅผ bindingํ๋ค. JavaScript with Dynamic Scope 12345678910111213function foo() { console.log(x);}function bar() { var x = 15; foo();}var x = 10;foo(); // 10bar(); // 15// ์ถ์ฒ: https://bestalign.github.io/2015/07/12/Lexical-Scope-and-Dynamic-Scope/ JavaScript with Lexical Scope 12345678910111213function foo() { console.log(x);}function bar() { var x = 15; foo();}var x = 10;foo(); // 10bar(); // 10// ์ถ์ฒ: https://bestalign.github.io/2015/07/12/Lexical-Scope-and-Dynamic-Scope/ ์์ ์์ ๋ dynamic scope, lexical scope์ผ ๋ ๊ฐ์ด ์ด๋ป๊ฒ ์ถ๋ ฅ๋๋์ง ๋ณด์ฌ์ค๋ค.(๋ฌผ๋ก JS๋ lexical scope์ด๊ธฐ ๋๋ฌธ์ 2๊ฐ ์ค ์๋์ ์์ ๋๋ก๋ง ๋์ํ๋ค.) dynamic scope์ธ ๊ฒฝ์ฐ๋ฅผ ๋ณด์. foo ์คํ์์ ์์ ์ ์คํํ ๊ณณ์ ์ ์ญ ํ๊ฒฝ์ด๋ค. ๋ฐ๋ผ์ x์ ๊ฐ์ผ๋ก 10์ bindingํ๊ณ 10์ ์ถ๋ ฅํ๋ค. bar ์คํ์์๋ bar์์ foo ํจ์๋ฅผ ์คํํ๊ณ , bar์์ ์คํ๋ foo๋ x๋ฅผ ์ฐพ๊ธฐ ์ํด call stack์ ํ์ธํ๊ณ bar๋ฅผ ์ฐพ์๋ธ๋ค. ๊ทธ๋ฐ ๋ค bar์ ์๋ x๊ฐ 15๋ฅผ bindingํ๊ณ 15๋ฅผ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฌ๋ lexical scope๋ dynamic scope๊ณผ ๋ค๋ฅด๋ค. ์๊ธฐ์๊ฒ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ์ ์์ฑํ lexical scope๋ฅผ ํ์ธํ๋ค. foo ํจ์๋ barํจ์์์ ์คํ๋์์ง๋ง ์๊ด์๋ค. ์์ฑ์์ ํ๊ฒฝ์ ์ฌ์ ํ ์ ์ญ ํ๊ฒฝ์ด๋ค. ๋ฐ๋ผ์ bar ํจ์ ์คํ์์๋ foo ํจ์๋ ๊ทธ๋๋ก 10์ bindingํ๊ณ ์ถ๋ ฅํ๋ค. lexical scope์ closureC, Java๋ฅผ ๋น๋กฏํ ๋๋ค์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ lexical scope๋ฅผ ์ฑํํ์ฌ ์ฌ์ฉํ๋ค. dynamic scope์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ณ์ binding์ด ์คํ์ ๋ฐ๋ผ์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ๋ณ์ ๊ด๋ฆฌ์ ๋๋ฒ๊น
์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ JS๋ lexical scope์ด๋ฉด์ ํจ์ ์์ฑ์ด ๋ฐํ์ ๋ ์ด๋ฃจ์ด ์ง๊ธฐ ๋๋ฌธ์ closure๋ผ๋ ๋
ํนํ ํ๊ฒฝ์ด ์๊ธด๋ค. C๋ Java ๊ฐ์ ์ ์ ์ธ ์ธ์ด๋ค์ ์ปดํ์ผ ๋ ํจ์์ ์์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์๋ฃ๋๋ ๋ฐ๋ฉด JS์ ๊ฒฝ์ฐ์๋ ํจ์์ ์์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋ฐํ์๋ ์ด๋ฃจ์ด์ง๋ค. ์์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด lexical scope์ ํจ์ ์์ฑ ๋์ scope์ ๋ณ์๋ค์ด binding๋๋๋ฐ, ํจ์์ ์์ฑ์ด ์ปดํ์ผ ๋ ์๋ฃ๋๋ ๊ฒฝ์ฐ ํจ์๊ฐ ๋ณผ ์ ์๋ ํ๊ฒฝ์ด ์ ์ญ ๋ณ์ ๋ฐ์ ์๋ค.(C๋ Java๋ ํจ์ ๋ด ํจ์ ์ ์ธ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ๋ ํ๋ค.) ๊ทธ๋์ JS๋ ๋๊ฐ์ด lexical scope์ด์ง๋ง ํจ์ ๋ด์์ ํจ์(nested function)๋ฅผ ๋ง๋ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ค๋ฅธ ํ๊ฒฝ์ด ์๊ธด๋ค. JS๋ ํจ์ ๋ด ํจ์(inner function)์ ์์ฑ์ด ๋ฐํ์ ๋ ์ด๋ฃจ์ด ์ง๊ธฐ ๋๋ฌธ์ ์์ ์ ์์ฑํ ํจ์์ ๋ณ์๋ค์ด ์์ ์ ํ๊ฒฝ์ด ๋๋ค. ์ด๋ ๊ฒ ํจ์ ์์ ์ด ์ ์ธํ์ง ์์์ง๋ง ํ๊ฒฝ์ผ๋ก์ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ค์ ์์ ๋ณ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. JS์ ๊ฒฝ์ฐ ์ด๋ฐ ์์ ๋ณ์๋ค์ ์ฝ๊ธฐ๋ง ํ ์ ์๋ ๊ฒ ์๋๋ผ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅํ๋ค.(์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ ์ธ์ด๋ค๋ ์๋ค.) function without exposing closure 1234567891011121314const mainFunc = () => { let i = 100; const externalFunc = () => { console.log(\"It's external the i is \" + i); return i + 1; }; i = externalFunc(); console.log(\"It's main the i is \" + i);};mainFunc(); // It's external the i is 100// It's main the i is 101// ์ถ์ฒ: ๋ถ๋ช
ํ ์ถ์ฒ๊ฐ ์๋๋ฐ, ์ด๋ค ์๋ฃ์์ ๋ณด์ฌ์ค ์์ ์ธ์ง ์ฐพ์ง ๋ชปํ์ต๋๋ค. ํน์ ์ถ์ฒ๋ฅผ ์์ ๋ค๋ฉด ๋ต๊ธ๋ก ์๋ ค์ฃผ์ธ์.... ์์ ์์ ๋ฅผ ๋ณด๋ฉด externalFunc ๋ด๋ถ์๋ ๋ณ์ i๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ ์ ํฌํจํ scope์ธ mainFunc๋ฅผ ํ์ธํ๋ค. mainFunc์๋ i๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น i๊ฐ์ด binding๋๋ค. ๋ณ์ i๊ฐ externalFunc์ ์์ ๋ณ์๊ฐ ๋ ๊ฒ์ด๋ค. ์ด์ externalFunc๋ ์์ ๋ณ์ i๊น์ง ํฌํจํ๋ ํ๊ฒฝ์ ๊ฐ์ง๊ฒ ๋์๋ค. ์์ ์์ ์ ๊ฒฝ์ฐ์๋ externalFunc๋ mainFunc ๋ด๋ถ์์ ์คํ๋๊ณ ์ข
๋ฃ๋๋ค. ๊ทธ๋์ i๊ฐ externalFunc์์ ์ฌ์ฉ๋์์ง๋ง mainFuncํจ์์ ์ข
๋ฃ์ ํจ๊ป ๋ณ์ i๋ ํ ๋น์ด ํด์ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ๋ด๋ถ์์ ์ ์ธ๋ externalFunc์ ์ฌ์ฉ์ ๋ฐ๋ผ์ i๊ฐ ํ ๋น ํด์ ๊ฐ ๋ถ๊ฐ๋ฅํ ์๋ ์๋ค. function with exposing closure 12345678910111213141516const mainFunc = () => { let i = 100; const externalFunc = () => { console.log(\"It's external the i is \" + i); return (i = i + 1); }; return externalFunc;};let foo = mainFunc();foo(); // It's external the i is 100foo(); // It's external the i is 101foo(); // It's external the i is 102// ์ถ์ฒ: ๋ถ๋ช
ํ ์ถ์ฒ๊ฐ ์๋๋ฐ, ์ด๋ค ์๋ฃ์์ ๋ณด์ฌ์ค ์์ ์ธ์ง ์ฐพ์ง ๋ชปํ์ต๋๋ค. ํน์ ์ถ์ฒ๋ฅผ ์์ ๋ค๋ฉด ๋ต๊ธ๋ก ์๋ ค์ฃผ์ธ์.... ๋ง์ฝ ์์ ๊ฒฝ์ฐ์์ ์ฒ๋ผ mainFunc๊ฐ externalFunc๋ฅผ return ํ๋ ๊ฒฝ์ฐ ์ธ๋ถ์์ externalFunc๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ๊ทผ๋ฐ ๋ฌธ์ ๋ mainFunc๋ externalFunc๋ฅผ ๋ฐํํ๋ฉด์ ์คํ์ด ์ข
๋ฃ๋์ง๋ง externalFunc์์์ ์ฌ์ฉํ mainFunc์ ๋ณ์ i๋ ํ ๋น ํด์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. externalFunc๊ฐ ๋ณ์ i๊ฐ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ฒ๋ผ ๋ด๋ถ์ ํจ์๊ฐ ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ธ๋ถ์ ๋
ธ์ถ๋ ๊ฒฝ์ฐ ์์ ์ ๋ณ์๊ฐ ์๋์๋ ๋ถ๊ตฌํ๊ณ ํจ์ ๋ด๋ถ์ ํด๋น ์์ ๋ณ์๋ค์ด ๊ฐํ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๋ค. lexical scope์ด๋ฉด์๋ ๋ฐํ์ ๋ ํจ์๊ฐ ์์ฑ๋๋ ์ธ์ด์ ๊ฒฝ์ฐ ํจ์ ๋ด๋ถ์ ํจ์๊ฐ ์์ ๋ณ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์์ ๋ณ์๋ฅผ ๊ฐ๋๋ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๊ณต๊ฐ์ closure๋ผ๊ณ ํ๋๋ฐ ์์ ๋ณ์๋ค์ closure๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.(์๋ฃ์ ๋ฐ๋ผ์ closure์ ๋ํ ๋ค๋ฅธ ์ ์๋ฅผ ํ๊ธฐ๋ ํ๋ค.) ์ ๋ฆฌ JS์์ this๋ ํ์ฌ ํจ์๋ฅผ ์คํํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ทธ๋ฐ๋ฐ JS๋ ํจ์ ์คํ์๊ฐ ์๋ ์์ฑ์์ ๋ณ์๊ฐ binding๋๋ lexical scope์ด๋ค. JS๋ ํจ์ ์์ฑ์ด ๋ฐํ์ ๋ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ด์ ํจ์(nested function)์ ๋ด๋ถ ํจ์(inner function)์ ๊ฒฝ์ฐ ์์ ์ ์์ฑํ ํจ์์ ๋ณ์๋ค์ด ํ๊ฒฝ์ผ๋ก ์ ๊ณต๋๋ค. ์์ ๊ฒฝ์ฐ์ฒ๋ผ ์์ ์ด ์ ์ธํ์ง ์์์์์ lexical scope์์ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ค์ ์์ ๋ณ์๋ผ๊ณ ํ๊ณ ์์ ๋ณ์๋ค์ ํฌํจํ๋ ๊ฐํ ํ๊ฒฝ์ closure๋ผ๊ณ ํ๋ค. ์ด์ ๋ค์ ๊ธ์์๋ ์ง๊ธ๊น์ง ๋ค๋ฃฌ ๋ด์ฉ์ ๋ฐํ์ผ๋ก function๊ณผ arrow function์ ์คํ์ ์ดํด๋ณด๊ณ , JS๊ฐ lexical scope์ด๋ฉด์๋ ๋ถ๊ตฌํ๊ณ this๊ฐ ์ด๋ค ์ด์ ๋ก ์คํ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋์ง๋ฅผ ๋ฐํ๊ณ this์ ๋ํ ์ค๋ช
์ ๋ง๋ฌด๋ฆฌํ๊ฒ ๋ค. ์ฐธ๊ณ ์๋ฃ ์ฝ๋์คํผ์ธ 77 ES6+ ๊ธฐ์ดํธ 3ํ์ฐจ ์ฝ๋์คํผ์ธ 78 ES6+ ํจ์์ OOP 2ํ์ฐจ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ค์ฝํ์ ํด๋ก์ Lexical scope and Dynamic Scope","link":"/2020/06/08/js-closure/"},{"title":"๋์ ๊ณต๋ถ๋ฅผ ๋ฐฉํดํ๋ ์๋ชป๋ ์ฌ๊ณ ๋ฐฉ์","text":"์ฐ์ฐํ ์ฝ์ ์ด๋ค ๊ธ์๋
์ ๋ถ๋ช
ํ ๊ณํ๋ ์์ด ๋ถ์ฃผํ ์ปดํจํฐ ๊ณตํ ๊ณต๋ถ๋ฅผ ํ๋ ๋์๋ค. ์ฐ์ฐํ ์ฌ๋ฅ๊ณผ ์ด์ ์ด ์์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์ฌ๋๋ค์ด๋ผ๋ ๊ธ์ ์ฝ๊ฒ ๋์๋ค. ๊ธ์ ์ฝ๊ณ ๋์ ๋๋ ๋คํต์๋ฅผ ์ป์ด ๋ง์ ๊ฒ ๊ฐ์ ์ถฉ๊ฒฉ์ ๋ฐ์๋ค.(ํฌ๊ฒ๋ ์๋๊ณ ๋ง์ด ์ํ๊ฒโฆ ๊ทธ๊ฒ ๊ทธ๊ฑฐโฆ) ์์ ๊ธ์ ์๋ medium์ ๊ฒ์๋ ์์ด๋ก ์์ฑ๋ ์๊ธ์ ๋ฒ์ญํ ๊ธ์ด์๋๋ฐ, ๊ธ์ ์ฃผ์๋ด์ฉ์ ์ด๋ฌ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ํน๋ณํ ์ฌ๋ฅ๊ณผ ์ด์ ์ด ์๋ ์ฌ๋๋ค๋ง ํ ์ ์๋ ๊ฒ์ด ์๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ๊พธ์คํ ํ์ตํด์ ์ฐ๋งํด์ผ ํ ์ผ๋ จ์ ๊ธฐ์ ๋ค์ผ ๋ฟ์ด๋ค. ๊ทธ๋ฌ๋ฉด์ Django์ Co-Creator์ธ Jacob Kaplan-Moss(์ดํ Jacob)๋ฅผ ๋น๋กฏํ์ฌ Bootstrap, PHP, Rails๋ฅผ ๋ง๋ ์ฌ๋๋ค์ด ๊ณตํต์ ์ผ๋ก ์์ ๋ค์ด ํ๋ก๊ทธ๋๋ฐ์ ํน๋ณํ ์ฌ๋ฅ์ด ์๋ ์ฌ๋์ ์๋๋ผ๊ณ ๋ฐํ ๊ธ์ด๋ ์ธํฐ๋ทฐ๋ค์ ์ธ์ฉํ๋ค. ๋๋ ์ด ์ฌ๋๋ค์ด ์ ๋ง ์ด๋ฐ ๋ง์ ํ๋์ง ๊ถ๊ธํ๋๋ฐ, ๋น์ฅ ๋ด๊ฐ Django๋ฅผ ๊ณต๋ถํ๊ณ ์์ด์ Jacob์ด ์ด๋ค ๋งฅ๋ฝ์์ ๊ทธ๋ฐ ๋ง์ ํ๋์ง ์ฐพ์๋ณด๊ฒ ๋์๋ค. ํด๋น ๊ธ์์ ์ธ์ฉ๋ ๋ง์ Pycon 2015์์ ๊ทธ๊ฐ keynote ๊ฐ์ฐ์์ ํ๋ ๋ฐ์ธ์ด์๋ค. Jacob์ ๊ฐ์ฐ์ ๊ธ์์ ์ธ์ฉ๋ ๋ด์ฉ ์ด์์ผ๋ก ์ ์ตํ ๋ด์ฉ์ด ๋ง์๋ค. ๊ฐ์ฐ์ ์ผ๋ถ ๋ด์ฉ์ ์๊ฐํ๊ฒ ๋ค. Jacob์ Pycon 2015 KeynoteHi, Iโm Jacob, and Iโm a mediocre programmer Django์ ์ฐฝ์์๋ก ์ ๋ช
ํ Jabob์(์ค์ค๋ก Inventor๋ ์๋๊ณ Co-Creator๋ผ๊ณ ๋งํ๋ค.) 2015 Pycon์์ ๊ธฐ์กฐ ์ฐ์ค์ ํ๋๋ฐ, ๊ทธ๋ ์ฐ์ค์ ์์ํ๋ฉด์ ๊ฒธ์ํ๊ฒ ์์ ์ด ๊ธฐ์กฐ ์ฐ์ค์ ํ ๋งํ ์๊ฒฉ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ์ฐ์ค์๊ฐ ๋ ์ฌ์ค์ ์๊ด์ค๋ฝ๊ฒ ์๊ฐํ๋ค๊ณ ๋งํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ์์ํ๋ ๋ง์ ์์ผ๋ก ๊ทธ๊ฐ ์ ๋ฌํ๊ณ ์ ํ๋ ๋ฉ์ธ์ง์ ํฐ ์ฐ๊ด์ด ์์๋ค. ์ฌ๋๋ค ๋๋ถ๋ถ์ด Jacob ์์ ์ด ํ๋ฅญํ ๊ฐ๋ฐ์์ด๊ธฐ ๋๋ฌธ์ ์ฑ๊ณตํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ ์๊ธฐ ์์ ์ ์ด๋ ๊ฒ ์๊ฐํ๋ค. "I'm at best average programmer"๋ผ๊ณ . Bell Curve Django๋ผ๋ ๊ฑฐ๋ํ ํ๋ ์์ํฌ๋ฅผ ๊ฐ๋ฐํ ์ฌ๋์ ์ง๋์น ๊ฒธ์์ด๋ผ๊ณ ์๊ฐํ ์๋ ์์ง๋ง, ๊ทธ๋ bell curve, ์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ ํ์ค ์ ๊ท ๋ถํฌ ๊ทธ๋ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด์ ํ์ค ์ ๊ท ๋ถํฌ์ ๋ํ ์ฐ๋ฆฌ์ ์์์ ์๊ธฐ์ํจ๋ค. ๊ทธ ์์์ ๋ฐ๋ก ๋๋ถ๋ถ์ ๋ถํฌ๋ ์ ๊ท ๋ถํฌ๋ฅผ ๋ฐ๋ฅด๊ฒ ๋์ด ์์ผ๋ฉฐ, ๋๋ค์์ ์ฌ๋์ ๋ถํฌ์ ์ค์์ ์์นํ๊ณ ํน๋ณํ๊ฒ ์ํ๊ฑฐ๋ ๋ชปํ๋ ์ฌ๋๋ค์ด ์์ชฝ ๋์ ์์นํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ํ๊ฒ๋ ๊ฐ๋ฐ์
๊ณ์ ์ ๊ท๋ถํฌ์ ๋ฐํ๋ ์์์ด ์๋ค๋ ๊ฒ์ ์ง์ ํ๋ค. ํนํ ์๊ธฐ ์์ ์ด ์์ฃผ ๋ฐ์ด๋ ๊ฐ๋ฐ์๋ผ๋ ์ฌ์ค์ ์ด๋ป๊ฒ ์ ์ ์๋๊ณ ๋ฌป๋๋ค. ์ฝ๋์ ๋ผ์ธ ์๋ฅผ ๋ณด๊ณ ์ ํ ์ ์๋๊ฒ์ธ์ง, ์๋๋ฉด story point(agile ๊ฐ๋ฐ์์์ ํ๊ฐ ๊ธฐ์ค ์ค ํ๋)๋ฅผ ๋ณด๊ณ ์ ํ๊ฐํ๋ ๊ฒ์ธ์ง, ๊ทธ๋ ๋ค๋ฉด ๋๋ฐ์ฒด story point๋ ๋ฌด์์ธ์ง ์ง๋ฌธํ๋ค. ๊ทธ๋ ๊ฐ๋ฐ์๋ค์ด ๋
ผ๋ฆฌ์ ์ด๊ณ ๋ถ์์ ์ด๊ณ ์ฌ์ค์ ๊ธฐ๋ฐํ ๋ถ์ผ์์ ์ผํ๋ค๊ณ ๋ฏฟ๊ณ ์ถ์ดํ์ง๋ง ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ(๊ฐ๋ฐ ์ค๋ ฅ)์ ๋ํด์ ๋งํ ์ ์๋ ๊ธฐ์ ์ ์ด๊ฑฐ๋ ์์คํ
์ ์ธ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ๋งํ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ํ๊ฐํ ๋งํ ๋ง๋
ํ ๋ฐฉ๋ฒ์ด๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํ ๋ฆฌ๋ฅผ ๋งํ๋๋ฐ, ์ฌ๋๋ค์ ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์์๋ ๋ง๋
ํ ํ๊ฐํ ์งํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํํ ๊ทธ ์ฌ๋์ ์ผํ๋ ์ด์ผ๊ธฐ๋ค์ ๋งํ๋ค. Talent Myth ๋ฌธ์ ๋ ์ด๋ฐ ์ด์ผ๊ธฐ๋ค์ ์ด์ผ๊ธฐ๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๋ก ์ ์ธ ํ๊ฐ๊ฐ ๋จ์ํ ๋๋ค๋ ๊ฒ์ด๋ค.(์ด๋ค ๊ธฐ์ค์ ๋ฐ๋ผ์ ํ๊ฐ๋๊ธฐ ๋ณด๋ค๋ ๊ทธ ์ฌ๋์ ๊ฐ๋ฐ ๋ฅ๋ ฅ์ ๋ํ ์ถ์์ ์ธ ์ด๋ฏธ์ง๋ฐ์ ์๊ธฐ ๋๋ฌธ์) ๊ทธ๋์ ๊ทธ ์ฌ๋์ด ๋์ฐํ๋ค๊ฑฐ๋ ๊ทธ ์ฌ๋์ด ์ฉ๋ ๋ฅ๋ ฅ์ ๊ฐ์ก๋ค๋ ์์ ์ด์ผ๊ธฐ๋ฅผ ํ๊ฒ ๋๊ณ ๋์ฐํจ๊ณผ ์ฉ(?)์ ์ฌ์ด์๋ ๊ทธ ์ด๋ค ๊ณต๊ฐ๋ ์๊ฒ ๋๋ค. ์ฌ๋๋ค์ ์ด๋ค ์ฌ๋์ ํ๋ฅญํ ํ๋ก๊ทธ๋๋จธ๋ผ๋ ๋ฐ๊ตฌ๋์ ์์ ์๋ฆฌ๋ ์๊น์ด ํ๋ก๊ทธ๋๋จธ๋ผ๋ ๋ฐ๊ตฌ๋ ์ด ๋ ๋ฐ๊ตฌ๋ ์์๋ง ์ง์ด ๋ฃ๊ฒ ๋๋๋ฐ, ์ด๋ฐ ์๊ทน๋จ์ ์ธ ํ๊ฐ๋ ์์ ์ธ๊ธํ ์ ๊ท ๋ถํฌ์๋ ์ ๋ฐ๋์ ๋ถํฌ๋ฅผ ๋ง๋ ๋ค. ์ด๋ฐ ํ๊ฐ๊ฐ ์ ์ ํ๋ ค๋ฉด ๊ฐ์ด๋ฐ์ ๋ถํฌํ ์ฌ๋์ด ๊ฐ์ฅ ์๊ณ ๋๋ค์์ ์ฌ๋๋ค์ด ๋์ฐํ๊ฑฐ๋ ํ๋ฅญํ ์์ชฝ ๋์ ๋ถํฌํด์ผ ํ๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋ค์ ๋ํ ๋ถํฌ๋ง ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅด์ง ์๋๋ค๋ ๊ฒ์ ์ฌ๋ฅ ๋ฏธ์ (talent myth)์ผ ๋ฟ์ด๋ค. ์ด๋ฐ ์ฌ๋ฅ ๋ฏธ์ ์ ๋ฌธ์ ๋ ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ ์ค๋ ฅ์ด rock star๋ ninja๊ธ์ด ์๋๋ผ๋ฉด ํ๋ก๊ทธ๋จ ํ ์ ์๋ ์ธ๊ณ๋ฅผ ๋ง๋ค์ด ๋ธ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ง์ฝ์ ์ด๋ฐ ๋ฏธ์ ์ด ๊ฐ๋ฐ์
๊ณ์ ๋ง์ฐํ๊ฒ ๋๋ฉด ์ฌ๋๋ค์ด ๊ณ์ ๊ฐ๋ฐ ๋ถ์ผ์ ๋จ์์์ ์ ์๊ฒ ๋ง๋ค๊ณ , ๊ฐ๋ฐ ์
๊ณ์์ ๋ ๋๊ฒ ๋ง๋ค๊ณ , ๊ณ์ ์ฑ์ฅํ๊ณ ๋ฐ์ ํ๋ ๊ฒ์ ๋ฐฉํดํ๊ฒ ๋๋ค๊ณ ๋งํ๋ค. Programming isnโt a โpassionโ or a โtalentโ but a collection of acquired skills๊ทธ๋ ๋ช๋
์ ์ Kansas University์์ ์ด๋ฆฐ GIS(Geographic Information System)-day ํ์ฌ์ ์ฐธ์ํ์ ๋์ ์ผํ๋ฅผ ์ด์ผ๊ธฐ ํ๋ค. ํด๋น ํ์ฌ ์คํ ํ๋ก๊ทธ๋จ ์ค์๋ ํ์๋ค์ด ์์ ๋ค์ ์ฐ๊ตฌ ์ฑ๊ณผ๋ฌผ์ ๋ฐํํ๋ ํ๋ก๊ทธ๋จ์ด ์์๋ค. ํ์๋ค์ ๋ฐํ๋ค์ ๊ธฐ์ ์ ์ผ๋ก๋ ์ค๋น๊ฐ ์๋์ด์์ ๋ฟ๋๋ฌ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ๋ค์ ๋ค๋ฃจ์์๋ค. ๊ทธ ํ๋ก๊ทธ๋จ์์ ํ ํ์์ด ๋งค์ฐ ๋ฐ์ด๋ ๋ฐํ๋ฅผ ํ์๋ค. Kansas ์ง์ญ์์์ ๊ณ์ ์ฑ ํ์๋ฅผ ์์ธกํ๋ ์์คํ
์ด์๋๋ฐ, ์ญ์ฌ์ ์ธ ๋ฐ์ดํฐ๋ค๊ณผ ์ ๋ ๋ถ์, ๊ฐ์ฐ๋ ๋ฐ์ดํฐ๋ค ๋ฑ์ ์ฌ์ฉํ ์์คํ
์ด์๋ค. ๊ทธ ํ์์ด ์ฌ์ฉํ ํ๋ก๊ทธ๋จ ๋๊ตฌ๋ค์ Pycon ์ฐธ์์๋ค์๊ฒ ๊ฝค ์ต์ํ ๋๊ตฌ๋ค์ธ๋ฐ, ๊ทธ ํ์์ AWS, Linux, PostgreSQL, Django, Geodjango๋ฅผ ์ฌ์ฉํ๋ค. Jacob์ ๋น์ ํ์ด์ฌ ๊ฐ๋ฐ์๋ฅผ ๊ณ ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋ช์ฒ์ค์ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํ ๊ทธ ํ์์๊ฒ, ํ์์ด ์ํ๋ฉด ๋ฉด์ ์ ๋ณด๊ณ ์ถ๋ค๊ณ ๋งํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ํ์์ ๋๋ต์ โ์๋์, ๊ทธ๋ด ์ ์์ด์, ์ ๋ ์ง์ง ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๊ฑธ์.โ์ด์๋ค. ๊ทธ ํ์์ ํด๋ฌ์คํฐ ๋ถ์ฐ GIS ์ฒ๋ฆฌ ๋ฐ์ดํฐ ํ์ดํ ๋ผ์ธ์ ๋ง๋ค์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ทธ ํ์์ ์ง์ง ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋ผ๊ณ ๋๋ตํ๋ค. ์๋ํ๋ฉด โ๊ฐ๋ฐ์ talent myth์์ ์ํ ์ฌ๋์ด ํ๋ ์ผ์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค๊ธฐ ์ํด ๋ด๊ฐ ํ ์ผ์ด ์๋๋คโ๋ผ๋ ์๊ฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ ์ง์ค์ ๊ฐ๋ฐ์ ์ด์ ์ด๋ ์ ์ฒ์ ์ธ ์ฌ๋ฅ์ด ์๋๋ผ ์ผ๋ จ์ ์ต๋ํด์ผ ํ๋ ๊ธฐ์ ๋ค์ผ ๋ฟ์ด๋ค. ๊ฐ๋ฐ์ ๋ฐฐ์ธ ์ ์๋ค. ๋๋ค์์ ๋ค๋ฅธ ๊ธฐ์ ๋ค์ฒ๋ผ ๊ฐ๋ฐ ์ญ์ ๋ฐ์ด๋ ์์ค์ผ๋ก ํ ์๋ ์๊ณ , ์ทจ๋ฏธ์ํ๋ก๋, ํํธํ์์ผ๋ก๋ ํํ์์ผ๋ก๋ ํ ์ ์๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ด๋ฐ ๊ธฐ์ ๋ค์ ํ๊ท ์ ๋๋ก ๊ฐ์ง๊ณ ์์ด๋ ๊ด์ฐฎ๋ค๋ ๊ฒ์ ์ธ์ ํ๋ค๋ฉด, ๊ฐ๋ฐ ์
๊ณ์ ์๋ก ๋ค์ด์ค๋ ์ ์
๋ค์ ๋ ์น๊ทผํ๊ฒ ๋ง์๋ค์ผ ์ ์๋ค. ์ด์ ์๋ ๊ทธ๋ ์ง ์์์๋๋ฐํ๋์ ๋ ์ค์ค๋ก๋ ๊ฐ๋ฐ์ ์ฌ๋ฅ์ด ์๋ ํ ๊ฐ๋ฐ์๊ฐ ๋ ์ ์๋๋ฐ ๋๋ ์ฌ๋ฅ์ด ์๋ค. ํ์ง๋ง ๋น์ฅ ์ํฉ์ด ์ฐ์
๊ธฐ๋ฅ์์์ ํด์ผํ๋๊น ํ์ค์ ์ผ๋ก ๊ณต๋ถ๋ ํด์ผ๊ฒ ์ง๋ผ๋ ์๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ํ๊ณ ์์๋ค. ์ํ๊น๊ฒ๋ ์ด๋ฐ ๋ง์ ์ํ๋ก๋ ์ข ๋ ๋ฐ์ ํ๊ณ ์ถ๋ค๋๊ฐ, ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ์๊ฐ๋ณด๋ค๋, ์ญ์ ๋๋ ์๋๋ ๊ฑด๊ฐ ํ๋ ์๊ฐ์ด ๋ ๋ง์๋ค. Jacob์ ๊ฐ์ฐ์ ๋ค์ผ๋ฉด์ ์ ์ด๋ฐ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋์์๊น? ์๊ฐํด๋ณด์๋ค. ๊ณ ๋ฑํ๊ต 1ํ๋
๊ฒจ์ธ๋ฐฉํ ๋์๋ ๊ฒ ๊ฐ๋ค. ๋น์ ๋๋ ์ํ ๊ณต๋ถ๋ฅผ ์ ํด๋ณด๊ณ ์ ๊ฝค ๋
ธ๋ ฅ ์ค์ด์๋ค. ๊ทธ ๋
ธ๋ ฅ ์ค ํ๋๋ก ๋ฐฉํ ๋ ๊ฐ์ค๋์๋ ์ํํน๋ณ๋ฐ์ ์๊ฐ ์ ์ฒญํ๋ค. ์ด๋ฆ์ ๊ฑฐ์ฐฝํ๊ฒ ์ํ ํน๋ณ๋ฐ์ด์ง๋ง ๋ฌธ๊ณผ์๋ ์ฐ๋ฆฌ๊ฐ ๊ฒฝ์๋ํ์ ๋๊ฐ ๊ฒ๋ ์๋์๊ณ , ์ฃผ๋ก ๋ค๋ฃจ์๋ ๋ด์ฉ์ ์ด์ ์ ๋ฐฐ์ ๋ ๋ด์ฉ๋ค์ ๊ธฐ์ด๋ค์ ์ง๋ฌธํด๋ณด๋ ๊ฒ์ด์๋ค. ์ง๊ธ ๊ธฐ์ต๋๋ ๊ฒ์ ์๋ฅผ๋ค๋ฉด ํจ์์ ๊ทธ๋ํ๊ฐ ์์ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋๋ฐ ์ ํจ์์์ ๋ง์ด๋์ค๋ก ํ์ํ๋์ง, ํ์ i์ ์ ๊ณฑ์ด ์ ๋ง -1์ด ๋๋์ง, ์์ ์ ์ํ๋ ๋ช ๊ฐ์ง ๋ฐฉ์๋ค ์ด๋ฐ ๊ฒ๋ค์ด์๋ค. ๋๋ ๊ทธ ์์
์ด ์ด๋ ค์ ๋ค. ๋์๋ ๋ค๋ฅด๊ฒ ๋ค๋ฅธ ์น๊ตฌ๋ค์ ๋๋ต๋ ์ํ๊ณ ํ๋ ์ค ์ ๋ฆฌ๋ํ๋ ๊ฒ๋ค์ ์ ์๊ณ ๋๋ตํ๋ค๋ ๊ฒ์ ์์ถ๋๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ฉด์๋ ๋น์์ ์์ถ๋ ๋๋ง๋ค โ์ค๋๋ถํฐ ์๋ฉด ๋์งโ๋ผ๋ ์๊ฐ์ผ๋ก ์ฝ๊ฒ ์ ํ์ด ๋์๋ค. ๋ด๊ฐ ์ํ์๋ฅผ ํ ๊ฒ๋ ์๋์๊ณ , ์ค๋ ๋ชจ๋ฅด๋ ๊ฑธ ์ค๋ ํ์ตํ๋ฉด ๋๋ค๊ณ ์๊ฐ์ ํ๊ธฐ์ ์ด๋ ๊ฒ ๊ณต๋ถํด๋ดค์ ์ผ๋ง๋ ์ ํ ์ ์์์ง๋ผ๋๊ฐ ๊ทธ๋ฐ ๊ณ ๋ฏผ์ ์์๋ค. ๊ทธ๋์ ๋น๋ก ์
์ ์ํ์ด๋ผ๊ณ ๋ ํ์ง๋ง ์ํ์ ์ฌ๊ณ ๋ฅผ ์ฐ์ตํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๊ต์ฅํ ์ฆ๊ฑฐ์ด ๊ณต๋ถ์๋ค. ์ํ๊ณต๋ถ์ ๊ฝค๋ ์ฌ๋ฏธ๋ฅผ ๋ถ์ด๊ฒ ๋์ด์ ๋ฌธ๊ณผ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ๊ณผ๋ชฉ๋ค๋ณด๋ค ์๊ฐ์ ๋ง์ด ์์๋ค.(๊ทธ๋์ ์ธ์ด์ ์ธ๊ตญ์ด ์ ์๊ฐ ์์ข์โฆ) ๋ํ๊ต์ ๊ฐ๊ณ ๋ณด๋๋ด๊ฐ ์กธ์
ํ ๋ํ๊ต๋ ๋ชจ๋ 1ํ๋
ํ์์ด ๋ฌด์ ๊ณต์ธ ๋จ์ผ ํ๊ณผ์ ์ํด์๋ค๊ฐ 1ํ๋
๋ง์ ์ ๊ณต์ ์ ํํ๊ณ 2ํ๋
๋๋ถํฐ ์ ๊ณต์ ์์ํ๋ ์์คํ
์ด์๋ค. ๊ทธ๋์ ๊ณ ๋ฑํ์๋ ๋ฌธ๊ณผ์๋ ์น๊ตฌ๊ฐ ์ด๊ณผ๋ฅผ ์ ํํ๊ฑฐ๋ ๋ฐ๋์ธ ๊ฒฝ์ฐ๊ฐ ํํ๋ค. ๋๋ ๋ณธ๋ ๋ฌธ๊ณผ์์ผ๋ 1ํ๋
๋ ๋ค์๋ ๊ต์๊ณผ๋ชฉ์์ ๋ฐฐ์ด html css๊ฐ ๋๋ฆ ์ฌ๋ฐ์๊ธฐ์ ์ ์ฐ๊ณตํ์ ์ ๊ณต์ผ๋ก ์ ํํ๋ค.(๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ์ ์ ํํํ๋คโฆ) ์ง๊ธ ๋์ด์ผ ๋ณด๋ฉด ๋์ ์ปค๋ฆฌํ๋ผ์ ์๋นํ ์๋ง์ด์๋๋ฐ, ๋ฑํ ์กฐ์ธ์ ๋ฐ์ง ์์๊ธฐ ๋๋ฌธ์ 2ํ๋
๋ ๋ค์ด์ผ ํ ์๋ฃ๊ตฌ์กฐ ์์
์ ๊ฑด๋๋ฐ๊ฑฐ๋ 3ํ๋
๋ 4ํ๋
์ ๊ณต์ ๋ฃ๊ฑฐ๋ ํ๋ค. ์ด๋ ๊ฒ ํ๋๋ผ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ป๊ฒ ํ๋ฉด ๋ ์ง ํฐ๋ํ ์ ์์์ผ๋ฉด ์๊ด ์์๊ฒ ์ง๋ง, ์กธ์
ํ ๋๊น์ง ๊ณ์ ํค๋ฉจ๋ค. ํนํ 2ํ๋
๋ ๋ค์๋ ์ธ๋ถ ๊ฐ์ฌ ํน๊ฐ์์ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ๊ธฐ์ ๋ง๋ ์ฌ๋ฅ์ ๊ฐ์ง์ง ๋ชปํ๋ฉด ํ ์ ์๋ ๊ฒ์ฒ๋ผ ์๋ชป ๋ฐ์๋ค์ด๊ฒ ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ ๋ค์ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๊ณตํ ๊ณต๋ถ, ๊ทธ๋ฆฌ๊ณ ์ง๋ก ๋ฌธ์ ์์ ํค๋ฉ ๋๋ง๋ค โ์ ์ญ์ ๋๋ ์ฌ๋ฅ์ด ์์ด์ ์ด ๋ถ์ผ์ ๊ณ์ ํ ์ ์๋๊ฑด๊ฐโ๋ผ๋ ์๊ฐ์ ์์ฃผ ํฉ์ธ์๋ค. ์ด๋ฐ ์๊ฐ ๋๋ฌธ์ ๊ณ ๋ฑํ๊ต ๋์ฒ๋ผ ๋ด๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ ๋ถ๋ํ์ ๋์ ์๋ก ํฐ๋ํ๋ฉด ๋๋ค๋ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก์ ํ๊ท๊ฐ ์ด๋ฃจ์ด ์ง์ง ์์๋ค. ๊ทธ๋์ ๋ ๋ฐ์ ํ ์ ์์๋ ๊ฒ๋ ํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก๋ ์ด๋ค ํ๋๋ก ๊ณต๋ถํ๋ ๊ฒ ์ข์๊น์ฝ๋์คํผ์ธ ์์๋ ํ์
๊ฐ๋ฐ์๋ค์ ์ํ ์คํฐ๋ ๊ฐ์๋ฅผ ์ ํฌ๋ธ์ ๋ฌด๋ฃ๋ก ๊ณต๊ฐํ๋ค. ์ง๊ธ ์ฝ๋์คํผ์ธ ์ ๊ฐ์๋ค์ด ๊ต์ฅํ ํฐ ๋์์ด ๋๊ณ ์๊ณ , ํ๋ถ ๋ ๋ฐ๋ก๋ฐ๋ก ์กด์ฌํ๋ ์ปดํจํฐ ๊ณตํ ์ง์๋ค์ด ์๋ก ์ฐ๊ฒฐ์ด ๋๊ณ ์๋๋ฐ, ๊ฐ์๋ฅผ ์งํํ๋ ๋งน๊ธฐ์ ๋ํ๋์ Javascript ์คํฐ๋ 1๊ฐ์์ ๊ฐ๋ฐ์์๊ฒ ์๊ตฌ๋๋ ์์ธ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์ธ๊ธํ๋ค. ๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ๋จผ์ ์๊ตฌ๋๋ ์์ธ๋ ๊ฐ๋ฐ์ ๋ํ ํฅ๋ฏธ๋, ์ด์ ์ด ์๋๋ผ ๊ฐ๋ฐ ์ฐ์
์ ๋ํ ์ง์งํจ์ด๋ผ๊ณ ์ด์ผ๊ธฐ ํ๋ค. ๊ฐ๋ฐ์ฐ์
์ ์ฐ์
์ด๊ธฐ ๋๋ฌธ์ ์ฐ์
์ ๋ง๋ ์ง์งํจ์ด ํ์ํ๋ค. ๋ฌผ๋ก ํฅ๋ฏธ๋ ์ด์ ์ด ์๋ ์ฌ๋์๊ฒ ์ง์งํจ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ฒ ์ผ๋, ์ฐ๋ฆฌ๊ฐ ์ฝ๊ฒ ์ด ๋์ ์ฐจ์ด์ ์ ํผ๋ํ๋ค๊ณ ๋งํ๋ค. ๋ํ๋์ด 2016๋
์ ์ ์
์ฌ์ ๊ณต์ฑ๋ฅผ ์ํด ์์ฑํ ๊ธ์์ ์์ ์ ํ์ฌ๊ฐ ์ถ๊ตฌํ๋ ๊ฒ์ ๊ณ ๊ฐ์ ๋์ฆ์ ์์ฐ, ์์ฅ์ ๋ณํ ์์์์ ์ ํ์ ๊ฐ์น์ ๋ฐฉํฅ์ ๊ธฐํํ์ฌ ๋ฐ์ด๋ ํ๋ก๊ทธ๋๋ฐ ์ค๋ ฅ์ผ๋ก ์ด๋ฅผ ์คํํ๋ ํ์ฌ๋ผ๊ณ ๋งํ๋๋ฐ, ๊ฐ๋ฐ์ ์ด์ ์ ์ผ๋ก ํ๋ค๋์ง ๊ธฐ์ ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ์์ฃผ ํฐ ํฅ๋ฏธ๊ฐ ์๋ค๋์ง๊ฐ ์๋์๋ค. (๋ฌผ๋ก ์ฐ์
์ข
์ฌ์๊ฐ ์๋๋ผ ์ปดํจํฐ ๊ณตํ ํ๋ฌธ์ ํ๋ ์ฌ๋์๊ฒ๋ ํด๋น ์ฃผ์ ์ ๋ํ ์ด์ ์ด๋ ํฅ๋ฏธ๊ฐ ๋ ์ค์ํ ์๋ ์๋ค.) ๋๋ ์ฌํ๊น์ง ์ฌ๋ฐ๋ ์ทจ๋ฏธํ๋์ ์ด์ ์ ์ผ๋ก ํ๋ฏ์ด ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ ๋ฆฌ๋์ค ํ ๋ฐ์ฆ ๊ธ์(๋ญ๊ฐ ๊ธฐ์ค์ ๋๋ฌด ๊ทน๋จ์ ์ผ๋ก ์ก์ ๊ฒ ๊ฐ๋คโฆ) ๊ฐ๋ฐ์๊ฐ ๋์ง ๋ชปํ๋ค ํ๋๋ผ๋ ๋น์ฐํ ๊ด์ฐฎ๊ณ , ํ๊ท ์ ์ธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ด๋ ๊ด์ฐฎ๋ค. ๋ค๋ง ์ด ๋ง์ ๊ทน๋ณตํ ์ง์ ์์ ๋
ธ๋ ฅํ๊ธฐ๋ฅผ ํฌ๊ธฐํ๊ณ ์์ฃผํ๊ฒ ๋ค๋ ๊ฒ์ด ์๋๋ผ, ํน๋ณํ ๋ฐ์ด๋ ์ด๋ฆ๋ ๊ฐ๋ฐ์๊ฐ ๋์ง ๋ชปํ๋ค ํ๋๋ผ๋ ๊ณ์ํด์ ๊ฐ๋ฐ ์ฐ์
์ ์ข
์ฌํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฐ ์ฐ์
์ ์ข
์ฌํ๊ธฐ ์ํ ๊ณต๋ถ์ ๋
ธ๋ ฅ์ ์ง์ํด ๋๊ฐ๊ฒ ๋ค๋ ๋ป์ด๋ค. ์์ง๊น์ง๋ ๋์ ์ปดํจํฐ ๊ณตํ์ด๋, ๊ฐ๋ฐ์ ์์ค์ด ์์ง๋ง(๋งค์ฐ ์โฆ) ๋ ๋
ธ๋ ฅํ๋ฉด ๋ ๋ฐ์ ์ด ๊ฐ๋ฅํ๋ฉฐ ํ ์ ์๋๋งํผ ๋ฐ์ ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ฐ ๋ง์์ ๊ฐ์ง๋ค ๋ณด๋ ๋ด์ผ ๋ฐฐ์ธ ๋ด์ฉ๋ค์ด ๋ ๊ธฐ๋๊ฐ ๋๊ณ ์ง์๋ค์ด ์ด์ฒ๋ผ ๋ถ๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก ๋ฐฐ์ธ ๊ฐ๋ฐ ๊ณต๋ถ๋ค์ด ๋ ๊ธฐ๋๊ฐ ๋๋ค.","link":"/2020/04/15/restart/"},{"title":"JS Function๊ณผ Arrow Function","text":"์์ ๊ธ์์๋ JS๊ฐ lexical scope์ ์ฌ์ฉํ๋ ์ธ์ด์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์ this๊ฐ ํจ์ ์คํ ๋ binding๋๋์ง ๋ฌธ์ ์ ๊ธฐ ํ๋ค. ๋ํ lexical scope์ dynamic scope์ ๋ํด์, lexical scope์์๋ ๋์ ์ผ๋ก ํจ์๊ฐ ์์ฑ๋๋ ํน์ง ๋๋ฌธ์ ์๊ฒจ๋๋ closure์ ๋ํด ๋ค๋ฃจ์๋ค. ์ด๋ฒ ๊ธ์์๋ function๊ณผ arrow function์ ์คํ์ ๋ค๋ฃจ๋ฉด์ ์ this๊ฐ ์คํ ๋ binding๋๋์ง์ closure๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ function๊ณผ arrow function์ this๊ฐ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋ ์ง ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ๊ทธ๋์ this๋ ์คํ ์์ binding๋๋๊ฑฐ์ผ?์ฌ์ค ์ด๋ฒ์ ๋ค๋ฃจ๋ ์ฃผ์ ๋ํ JS์์๋ ํจ์ ๋ํ Object ๊ฐ์ฒด๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ผ๋ ์ง์๊ณผ, ๊ฐ์ฒด ๊ฐ prototype chain์ ํตํด ์ด๋ฃจ์ด ์ง๋ ์ ์ฌ ์์์ ๋ํ ์ฌ์ ์ง์์ด ํ์ํ๋ค. ํ์ง๋ง ํด๋น ์ฃผ์ ๋ค์ ๋จ์ผ ์ฃผ์ ๋ก ๋ค๋ฃจ์ด์ผ ํ ๋งํผ ๊ฝค ๋ง์ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ด์ฉ์ ์๋ค๋ ์ ์ ํ์ ์ค๋ช
์ ํ๊ฒ ๋ค.(์ฌ์ค ์ฝ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ค๋ช
ํ ์ญ๋์ด ๋ถ์กฑํฉ๋๋คโฆ) โป ํจ์ ๋ํ Object ๊ฐ์ฒด๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ผ๋ ์ฌ์ค์ ํจ์๋ฅผ ์์ฑํ ํ์ ์์ฑ๋ ํจ์์ prototype ๊ฐ์ ํ์ธํด ๋ณด๋ฉด proto๊ฐ์ด Object๋ผ๋ ์ฌ์ค๋ก ํ์ธํ ์ ์๋ค. this example 1234567891011function foo() { console.log(this.a); // this points for what?}var bar = { a: 10, foo: foo}foo(); //undefinedbar.foo(); //10 ์์ ์์ ๋ ์ง๋ ๊ธ์์ ๋ค๋ฃจ์๋ ์์ ์ด๋ค. ์์ ์์ ๋ฅผ ๋ณด๋ฉด ๋ง์น ํจ์ foo์๋ this ๊ฐ์ด ์์ด์ this ๊ฐ์ ์ธ๋ถ์์ ์ฐพ์์ผ ํ ๊ฒ ๊ฐ์ ๋ณด์ธ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค์ ๊ทธ๋ ์ง ์๋ค. ์ฐ๋ฆฌ๋ JS์์ ํจ์๊ฐ ์คํ๋ ๋ ์ฃผ์ด์ง ๋ณ์๋ง ๋ฐ์์ ์ญ ์คํ๋๋ ๊ฒ์ฒ๋ผ ์๊ฐํ์ง๋ง ์ฌ์ค JS์ ํจ์๋ ๊ทธ๋ ๊ฒ ๋์ํ์ง ์๋๋ค. JS์์ ํจ์๊ฐ ๋์ํ๋ ๋ฐฉ์JS์์ ํจ์๊ฐ ๋์ํ๋ ๋ฐฉ์์ ์ดํดํ๋ ค๋ฉด ์์ ์ธ๊ธํ๋ JS์์๋ ํจ์๋ ๊ฐ์ฒด๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํด์ผ ํ๋ค. JS์์ ํจ์๊ฐ ์์ฑ๋ ๋๋ JS ๋ด๋ถ์ ์ผ๋ก Function constructor๊ฐ ํจ์๋ฅผ ์์ฑํ๋ค. contructor๊ฐ ํจ์๋ฅผ ์์ฑํ ๋๋ ํจ์ ๋ด๋ถ์ ์ฆ์ prototype์ด๋ผ๋ key๋ฅผ ๋ง๋ค๊ณ ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋ค. ๊ทธ ๋ค์ prototype ์ค๋ธ์ ํธ์ constructor๋ผ๋ ํค๋ฅผ ์ก๊ณ , ํจ์ ์์ ์ ์ฐธ์กฐ ๊ฐ์ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ JS์์ ์์ฑ๋ ํจ์๋ ๋ค๋ฅธ ์ธ์ด์์์ ํจ์์๋ ๋ค๋ฅด๊ฒ ๊ทธ ์์ฒด๊ฐ ๊ฐ์ฒด์ธ ๊ฒ์ด๋ค. ์๋์ ์์ ๋ ํจ์ ์์ฑ ๊ณผ์ ์ ๊ฐ๋จํ ์ค๋ช
ํ ์์ ์ด๋ค. JS๋ด๋ถ์์๋ ์๋์ ์์ ์ ๊ณผ์ ์ด ์๋์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. JS ํจ์ ์์ฑ ๊ณผ์ 12345678910//ํจ์๊ฐ ์์ฑ๋๋ฉดfunction test() {}//1. ์ฆ์ prototype์ด๋ผ๋ ํค์ ์ค๋ธ์ ํธ๊ฐ ํ ๋น๋๊ณ test.prototype = {};//2. contructor์ ํจ์ ์์ ์ ์ฐธ์กฐ ๊ฐ์ ์ ์ฅํ๋คtest.prototype.constructor = test//์ถ์ฒ: ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด vs ์๋ฐ์คํฌ๋ฆฝํธ 1/3//(https://www.bsidesoft.com/318) ๊ทธ๋ฌ๋ฉด ์์ ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด์ง ํจ์๋ JS Function ๊ฐ์ฒด prototype์ ๋ชจ๋ ๋ฉ์๋๋ค์ ์ ๊ทผํ ์ ์๊ณ , ์ฌ์ฉํ ์๋ ์๋ค. ๊ทธ๋ฆฌ๊ณ JS ํจ์๋ ํจ์๋ฅผ ์คํํ ๋ Function.prototype.callํจ์๋ฅผ ์ฌ์ฉํด์ ์คํํ๋ค Function.prototype.call MDN ๋ฌธ์ Function.prototype.call ๊ตฌ๋ฌธ ์ ์ func.call(thisArg[, arg1[, arg2[, โฆ]]]) Function.prototype ๋ฉ์๋๋ค์ด ์ฌ๋ฌ๊ฐ์ง ์์ง๋ง, JS์์ ํจ์๋ฅผ ์คํ ํ ๋๋ ๋ด๋ถ์ ์ผ๋ก Function.prototype.call์ ์ํด ์ด๋ฃจ์ด ์ง๋ค. Function.prototype.call์ ๋ ์ข
๋ฅ์ ์ธ์๋ฅผ ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ๋ก ๋ฐ๋ ์ธ์๋ thisArg๋ก ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ ๋ฐ๋๋ค. ๋๋ฒ์งธ๋ก ๋ฐ๋ ์ธ์๋ ํจ์์ ์ธ์๋ค์ ๋ฐฐ์ด๋ก ๋ฌถ์ argList์ด๋ค. ์ค์ ๋ก console์์ arguments๋ฅผ ํ์ธํด๋ณด๋ฉด ๊ฐ๊ฐ์ ์ธ์๋ค์ ํ์ธํด๋ณผ ์ ์๋ค. ํจ์ ์ธ์ ํ์ธ 12345function test(a, b, c){ console.log(arguments[0], arguments[1], arguments[2]);}test(1, 2, 3); // 1, 2, 3 ์ด๋ฅผ ํตํด ์ ์ ์๋ ์ฌ์ค์ ํจ์์์ this๊ฐ์ binding๋๋ ๊ฒ ์๋๋ผ ์ธ์๋ก ์ฃผ์ด์ง๋ค๋ ๊ฒ์ด๋ค. ์์ ์์ ์์ testํจ์๋ a, b, c ์ธ๊ฐ์ง์ ์ธ์๋ง ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ค์ ์คํ ์์๋ Function.prototype.call์ด ์ฌ์ฉ๋๋ฉฐ ์๋์ผ๋ก ํ์ฌ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ด thisArg๋ก ์ ๋ฌ๋๋ค. ๋ฐ๋ผ์ this๋ lexical scope์ ์์ธ๊ฐ ์๋๋ค. this ๊ฐ์ ํจ์ ๋ด๋ถ์ ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ด๋ค. this example 1234567891011function foo() { console.log(this.a); // this points for what?}var bar = { a: 10, foo: foo}foo(); //undefinedbar.foo(); //10 ์์ ์์ ๋ฅผ ๋ค์ ๋ณด๋ฉด foo ํจ์๊ฐ ์คํ๋ ๋, Function.prototype.call์ this ๊ฐ์ผ๋ก ์ ์ญ ๊ฐ์ฒด window๊ฐ ์ฃผ์ด์ง๋ ๋ฐ๋ฉด bar.foo ํจ์๊ฐ ์คํ๋ ๋๋ fooํจ์์ this๊ฐ์ผ๋ก bar๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ด ์ฃผ์ด์ง๋ค. ์ด์ this์ ๋ํ ์๋ฌธ์ด ํ๋ ธ๋ค. ํจ์์ this๊ฐ ์คํ ์์ ๊ฐ์ฒด์ธ ์ด์ ๋ dynamic binding์ด๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ํจ์ ๋ด๋ถ์ ์ผ๋ก this ๊ฐ์ด ์ธ์๋ก ์ ๋ฌ ๋๊ธฐ ๋๋ฌธ์ด๋ค. Arrow Function๊ทธ๋ฐ๋ฐ ๋ด๋ถ์ ์ผ๋ก this๊ฐ์ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํจ์๊ฐ ์คํ๋์์ ๋ ๋ถํธํ ์ ์ด ์๋ค. this ๊ฐ์ผ๋ก ์ ์ญ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง ๋ 123456789101112131415function Person() { // Person() ์์ฑ์๋ `this`๋ฅผ ์์ ์ ์ธ์คํด์ค๋ก ์ ์. this.age = 0; (function growUp() { // ๋น์๊ฒฉ ๋ชจ๋์์, growUp() ํจ์๋ `this`๋ฅผ // ์ ์ญ ๊ฐ์ฒด๋ก ์ ์ํ๊ณ , ์ด๋ Person() ์์ฑ์์ // ์ ์๋ `this`์ ๋ค๋ฆ. this.age++; })();}var p = new Person();console.log(p.age); //0//์ถ์ฒ: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98 (mdn์์ ๋ฅผ ์ผ๋ถ ์์ ) ์์ ์์ ๋ฅผ ๋ณด์. Person ์์ฑ์ ํจ์๊ฐ ์๊ณ ์์ฑ์ ํจ์ ์์๋ ์ฆ์ ์คํํจ์ growUp์ด this์ age๊ฐ์ 1 ์ฆ๊ฐ ์ํจ๋ค. ๋ฌธ์ ๋ growUpํจ์์ ์
๋ ฅ๋๋ this ๊ฐ์ Person์ this ๊ฐ์ด ์๋๋ค. JS์์ ํจ์๋ค์ ๊ฐ์ฒด์์ ์คํ๋์ง ์๋๋ค๋ฉด this๊ฐ์ผ๋ก window๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง๋ค. ๋ฐ๋ผ์ growUpํจ์์์ ์ฌ์ฉํ๋ this๋ Person์ ์ธ์คํด์ค๊ฐ ์๋๋ผ ์ ์ญ๊ฐ์ฒด window์ด๋ค. ๊ทธ๋์ p.age๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด age๊ฐ์ด ๋ณํ์ง ์๊ณ ๊ทธ๋๋ก 0์ด ์ถ๋ ฅ๋๋ค. closure ์ ์ด์ฉํ this binding 12345678910111213function Person() { var that = this; that.age = 0; (function growUp() { // ์ฝ๋ฐฑ์ `that` ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์ด๊ฒ์ ๊ฐ์ด ๊ธฐ๋ํ ๊ฐ์ฒด์ด๋ค. that.age++; })()}var p = new Person();console.log(p.age); //1//์ถ์ฒ: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98 (mdn์์ ๋ฅผ ์ผ๋ถ ์์ ) ๊ทธ๋ฌ๋ฉด growUpํจ์์์ Person ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ์ธ๊ฐ? ๊ทธ๋ ์ง ์๋ค. JS์ ํน์ง์ธ closure๋ฅผ ์ฌ์ฉํ์ฌ ์ฐํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์์ ์์ ๋ฅผ ๋ณด๋ฉด Person ์์ฑ์ ํจ์๊ฐ ์ธ์คํด์ค ์ฐธ์กฐ ๊ฐ์ธ this๋ฅผ that ๋ณ์์ ์ ์ฅํ๋ค. growUp ํจ์๋ that ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ ์ด ์์ฑ๋์์ ๋์ ํ๊ฒฝ์์ ์์ ๋ณ์๋ค์ ํ์ํ๋ค. Person ์์ฑ์ ํจ์ ์์์ Person ์ธ์คํด์ค ์ฐธ์กฐ๊ฐ ์ ์ฅ๋ that ๋ณ์๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ๋๋ฌธ์ that.age๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค. ๋ฐ๋ผ์ p.age๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด 1์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์์ ๋ฐฉ์์ผ๋ก ์ผ์ผ์ด ์ธ์คํด์ค ์ฐธ์กฐ๊ฐ์ ๋ฐ๋ก ์ ์ฅํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ถํธํ๋ค. ๊ทธ๋์ es6๋ถํฐ๋ arrow function์ด ์๊ฒผ๋ค. arrow function MDN ๋ฌธ์ this ์ค๋ช
์ผ๋ถ โฆ EC2015๋ ์ค์ค๋ก์ this ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ์ง ์๋ ํ์ดํ ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค(์ด๋ ๋ ์์ปฌ ์ปจํ
์คํธ์์ this๊ฐ์ ์ ์งํฉ๋๋ค). this ๋ฌธ์๋ฅผ ๋ณด๋ฉด arrow function์ ์ค์ค๋ก์ this ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ์ง ์๋๋ค๊ณ ์ค๋ช
ํ๋ค. ์ด๋ ๊ธฐ์กด์ ์ผ๋ฐ ํจ์๋ค์ด ๋ด๋ถ์ ์ผ๋ก Function.prototype.call์ ์คํํ์ฌ this๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ ๋ฐฉ์์ผ๋ก ์๋ํ์ง ์๋๋ค๋ ์๋ฏธ๋ค. ๊ดํธ ์ค๋ช
์ ๋ณด๋ฉด arrow function์ด ๋ ์์ปฌ ์ปจํ
์คํธ ์์ this ๊ฐ์ ์ ์งํ๋ค๊ณ ๋งํ๋๋ฐ, arrow function ๋ฌธ์์์๋ arrow function์ด ๋ ์์ปฌ ์ปจํ
์คํธ ์์ this ๊ฐ์ ์ ์งํ๋ค๋ ๋ง์ ๋ค๋ฅธ ๋ง๋ก ์ค๋ช
ํ๋ค. MDN ๋ฌธ์ arrow function ์ค๋ช
์ผ๋ถ ํ์ดํ ํจ์๋ ์ ์ญ ์ปจํ
์คํธ์์ ์คํ๋ ๋ this๋ฅผ ์๋ก ์ ์ํ์ง ์์ต๋๋ค. ๋์ ์ฝ๋์์ ๋ฐ๋ก ๋ฐ๊นฅ์ ํจ์(ํน์ class)์ this๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ this๋ฅผ ํด๋ก์ ๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. โฆ ์ฆ, arrow function์ ๊ฒฝ์ฐ์๋ ์ธ์๋ก this๊ฐ ์ฃผ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์์ ์์์ฒ๋ผ closure๋ฅผ ์ฌ์ฉํด this๋ฅผ bindingํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ์๋ํ๋ ๊ฒ์ด๋ค. ์ด๋๋ฌธ์ arrow function์ call, apply๋ฅผ ์ฌ์ฉํด์ this ๊ฐ์ ์ธ์๋ก ๋๊ฒจ์ค๋ ๋๊ฒจ ๋ฐ์ this๋ฅผ ์ฌ์ฉํ์ง ์๊ณ closure์ this๋ฅผ ์ฌ์ฉํ๋ค. ์๋์ arrow function์ ์ฌ์ฉํ ์์ ๋ฅผ ๋ณด๋ฉด ์์์ closure๋ฅผ ์ฌ์ฉํด this๋ฅผ bindingํ์ ๋์ ๋์ผํ๊ฒ ์๋ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. arrow function์ ์ฌ์ฉํ this binding 123456789101112function Person() { this.age = 0; (() => { // arrow function์ closure์ ์๋ this๊ฐ์ ์ฌ์ฉํ๋ค. this.age++; })()}var p = new Person();console.log(p.age); //1//์ถ์ฒ: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98 (mdn์์ ๋ฅผ ์ผ๋ถ ์์ ) ์ ๋ฆฌ JS์์ ์ผ๋ฐ ํจ์๋ค์ ๋ด๋ถ์ ์ผ๋ก Function.prototype.callํจ์๋ฅผ ํตํด ์คํ๋๋ค. Function.prototype.callํจ์๋ฅผ ํตํด ์คํ๋ ๋ this๊ฐ๊ณผ arguments๋ค์ด ์ธ์๋ก ์ฃผ์ด์ง๋ค. ๋ฐ๋ผ์ JS์์ this๊ฐ ์คํ ์์ ๊ฒฐ์ ๋๋ ์ด์ ๋ dynamic binding์ฒ๋ผ ์๋ํ๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์คํ ์์ ์ธ์๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ด ์๋ํ๋ ๊ฒฝ์ฐ ํจ์ ๋ด์ ํจ์๋ this ๊ฐ์ผ๋ก ์์ ์ ์์ฑํ ํจ์๋ฅผ ๋ฐ์ง ๋ชปํ๊ณ ์ ์ญ๊ฐ์ฒด window๋ฅผ ๋ฐ๋๋ค.(๋น์๊ฒฉ๋ชจ๋์ผ ๋๋ผ๋ ์กฐ๊ฑด์ด ์๋ค.) ์ด๋ด ๊ฒฝ์ฐ ๋ด๋ถ ํจ์๋ closure๋ฅผ ์ฌ์ฉํ์ฌ this ๊ฐ์ ์ฐํ์ ์ผ๋ก ๋ฐ์์ผ ํ๋ค. arrow ํจ์๋ this๊ฐ ๋ด๋ถ์ ์ผ๋ก binding๋์ง ์๊ณ closure ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ this๊ฐ binding ๋๋ค. ์ฐธ๊ณ ์๋ฃ ์๋ฐ์คํฌ๋ฆฝํธ์ Function ํธ์ถ๊ณผ this MDN this ๋ฌธ์ MDN arrow function ๋ฌธ์","link":"/2020/06/11/js-function/"},{"title":"Til 1์ผ์ฐจ","text":"TIL 1์ผ์ฐจ - this์ ๋ํด ์์ฑํ 2๊ฐ์ ๊ธ์ฒ๋ผ ์์ฑํ๋ ค๋ฉด ์๊ฐ์ด ๋ง์ด ์์๋๊ธฐ ๋๋ฌธ์, TIL์์๋ ๋น์ผ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ๋ค์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๊ณ ์ด๋์ ๋ ๊ณต๋ถ๊ฐ ์ถ์ ๋๋ฉด ๋จ์ผ ์ฃผ์ ์ ๋ํด์ ์์ฑํ๋๋ก ํ์ ์ด๋ฒ์ฃผ์๋ HTML๊ณผ CSS๋ฅผ ๊ณต๋ถํ๋ค. ๊ณต๋ถ์๋ฃ๋ ํฌ๊ฒ 2๊ฐ์ง ์ธ๋ฐ, ํ๋๋ โ๋ชจ๋ ์น์ ์ํ HTML5+CSS3 ๋ฐ์ด๋ธ 3ํ(์ค์ธ์ฑ ์ )์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์ฝ๋ ์คํผ์ธ CSS Rendering ๊ฐ์ 6๊ฐ์ด๋ค. HTML๊ณผ CSS๋ฅผ ์ฌ์ฉํด์์ง๋ง ๋จ์ผ์ฃผ์ ๋ก HTML๊ณผ CSS๋ง์ ๊ณต๋ถํด ๋ณด๋ ๊ฒ์ ์ด๋ฒ์ด ์ฒ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์๋ ์ฝ๋ ์คํผ์ธ ๊ฐ์๋ ๋นก์ธ๋คโฆ ์๋ก ์๊ฒ ๋ ๋ด์ฉHTML ์น ํ์ค์์ ์ง์ํ์ง ์๋ ํ๊ทธ 1<food>My Favorite Food</food> ์น ๋ธ๋ผ์ฐ์ ์์๋ ์น ํ์ค์์ ์ ํ์ง ์์ ํ๊ทธ๋ ์ ์์ ์ผ๋ก ์ถ๋ ฅํ๋ค. ์ด ๋๋ฌธ์ ๋ฃจ๋น ํ๊ทธ๋ฅผ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ ๋ฃจ๋น ํ๊ทธ๋ฅผ ์ฌ์ฉํ html ๋ฌธ์๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.(๋ฌผ๋ก ํ๊ทธ๊ฐ ๋ธ๋ผ์ฐ์ ์๊ฒ๋ ์๋ฌด ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ํ๋๋๋ก ์๋ํ์ง ์๋๋ค) select ํ๊ทธ form ์์์ ์ํด ์๋ select ํ๊ทธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค. ์ด์ ๋ ui๊ฐ ๋ฐ์คํฌํ์์ ์์์ง ์๋๋ฐ ui์์์ ์์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋ง์ ์น ํ์ด์ง๋ค์ ๊ฒฝ์ฐ JS๊ณผ div๋ฅผ ์ด์ฉํด์ select ๊ธฐ๋ฅ์ ์ง์ ๋ง๋ ๋ค. CSS selector๊ฐ ์กด์ฌํ๋ ๋ชฉ์ selector๊ฐ ์กด์ฌํ๋ ๋ชฉ์ ์ ๋ค๋ฅธ CSS ์ฌ์ฉ์๋ค์ ๋น์ฐํ ์๊ณ ์์๊ฒ ์ง๋ง, ๋๋ ์ค์ค๋ก ๋ช
ํํ๊ฒ ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
์ ๋ชปํ๋ค. selector๋ก ํน์ element์ ์คํ์ผ์ ๋ฐ๊พธ๋ ์์
์ ๊ณ์ ํ์์๋ selector๊ฐ ๋ญ์ง ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
์ ๋ชปํ๋ค.(์ข๋ง ์๊ฐํด๋ณด๋ฉด ์ฝ๊ฒ ๋ตํ ์ ์๋๋ฐโฆ) ์ด์ selector๊ฐ ์กด์ฌํ๋ ์ด์ ๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
ํ ์ ์๊ฒ ๋์๋ค. ํน์ ํ HTML ํ๊ทธ๋ฅผ ์ ํํ ๋ ์ฌ์ฉํ๋ค. ์ ํ ๋ฌธ์ ์ ํ์ ๊ฐํน ์นํ์ด์ง ์์ค ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๋ค๊ฐ ::after ํน์ ::before๊ฐ ๋์ฌ ๋ ํด๋น ์ ํ์์ ์ญํ ์ ๋ชจ๋ฅด์ง๋ง ๊ฒ์ํด๋ณด์ง ์์์๋ค. ์ด์ ์ด ๋๊ฐ์ง ์ ํ์์ ๊ธฐ๋ฅ์ ์๊ฒ ๋์๋ค. ์ด ๋๊ฐ์ง ์ ํ์๋ ํ๊ทธ ์ ,ํ์ text๋ฅผ ์ ํํ๋ ์ ํ ๋ฌธ์ ์ ํ์๋ก์, ์ ํ์ ์ค์์ ์ ์ผํ๊ฒ content ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.(js๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ๊ทธ ๋ด์ content ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค.) 12345678910111213141516171819...<style> p::before{ content: \"๐. \"; } p::after { content: \" - \" attr(data-page) \" page\"; } } p::first-letter { font-size: 3em; }</style>...<p data-page=\"10\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>// ๋ชจ๋ ์น์ ์ํ HTML5+CSS3 ๋ฐ์ด๋ธ 3ํ, ์ค์ธ์ฑ ์ , 145p, ์์ ์ผ๋ถ ์์ ์์ ์์ ์ ๊ฒฝ์ฐ pํ๊ทธ ์์๋ ๐. ๊ฐ ์ถ๊ฐ๋ก ๋ถ๊ฒ ๋๊ณ pํ๊ทธ ๋ค์๋ pํ๊ทธ ์์ฑ data-page(data-๋ฅผ ๋ถ์ธ ์ฌ์ฉ์ ์ ์ ์์ฑ)๊ฐ 10์ ๋ฐ์์ - 10 page๊ฐ ๋ถ๊ฒ ๋๋ค. ๋ง์ง๋ง์ผ๋ก pํ๊ทธ ์ปจํ
์ธ ์ ์ฒซ๋ฒ์งธ ๋ฌธ์ L(Lorem์ โLโ)์ด 48px(๊ธฐ๋ณธ ํฐํธ ์ฌ์ด์ฆ 16px * 3)๋ก ์ปค์ง๋ค. line-height. text-align ์์ฑ text-align์ block ์์ content์ ์ํ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ์์ฑ์ด๋ค. ๊ทธ๋ฐ๋ฐ block ์์ content๋ฅผ ์ํ ์์ง ์ ๋ ฌ์ ์ํ ์์ฑ์ด ์๋ค. line-height ์์ฑ์ block ์์ content์ ์์ง ์ ๋ ฌ์ ์ฐํ์ ์ผ๋ก ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค. ์น ํ์ค ์ญ์ฌ, normal flow, float, overflow ์ฝ๋ ์คํผ์ธ ์์๋ ์น ํ์ค ์ญ์ฌ(๊ฑฐ๋ ๊ธฐ์
๋ค์ ๋
๋ฐ๋จน๊ธฐ)์ ์ฃผ์ ๊น๊ฒ ๋ด์ผ ํ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฐฐ์ ๊ณ , normal flow์ float, overflow ์ผ๋ถ๋ฅผ ๋ฐฐ์ ๋ค. ์์ ๋ด์ฉ๋ค์ ์ ๋ถ ์๋ก ๋ฐฐ์ด ๋ด์ฉ์ด์ง๋ง ์ ๋ฆฌํ๊ธฐ ์ํด์๋ ๋จ์ผ ์ฃผ์ ๋ฅผ ์์ฑํ ๋งํผ์ ๋
ธ๋ ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ดํ ์ฌ์ ๊ฐ ์์ ๋ ์์ฑํ๊ธฐ๋ก ํ๊ฒ ๋ค.(๋งค์ฐ๋งค์ฐ๋งค์ฐ๋งค์ฐ ์ ์ตํ ์์
์ด์๋ค.) 2020/6/15 - 1st TIL","link":"/2020/06/15/til-1st/"},{"title":"CSS Position Schemes- Normal Flow","text":"์ด๋ฒ ์ฃผ์ ๋ CSS Position Schemes์ด๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฃผ์ ์ด์ง๋ง ๊ทธ๋ ๋ค๊ณ ๋ค๋ฃจ๋ ๋ด์ฉ์ด ์งง์ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ 3ํธ์ ๋๋์ด์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค. ์ด๋ฒ ๊ธ์์๋ normal flow์ ํด๋นํ๋ static, relative๋ฅผ ๋ค๋ฃจ๊ณ ๋ค์ ๊ธ์์๋ float๋ฅผ ๋ง์ง๋ง์ผ๋ก๋ absolute์ fixed๋ฅผ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค. ์ด๋ฒ์ ๋ค๋ฃจ๋ ๋ด์ฉ๋ค์ ์ฝ๋์คํผ์ธ 76 CSS Rendering์ ๊ฐ์๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค. Graphics System๊ณผ CSS๊ฒ์, ๋์์, ์น ๋ธ๋ผ์ฐ์ ๋ฑ๋ฑ ์ฐ๋ฆฌ๊ฐ ์ผ์์ ์ผ๋ก ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ ๋, ์๊ฐ์ ์ธ ์์๋ค์ด ๋น ์ง์ง ์๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฐ ์๊ฐ์ ์ธ ์์๋ค์ ๋น์ฐํ๊ณ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์๋ค์ธ๋ค. ๊ทธ๋ฐ๋ฐ ์กฐ๊ธ ๋ ์๊ฐ์ ํด๋ณด๋ฉด ์ด๋ฐ ์๊ฐ์ ์ธ ์์๋ค์ ๋น์ฐํ์ง ์๋ค. ์ฐ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์ ๊ทธ ์์ฒด๋ก ๋ณต์กํ๊ณ ๊ณ์ฐ๋์ด ๋ง์ ์์
์ด๋ค. ์ฐ๋ฆฌ๊ฐ graphics system์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ๋ณต์กํ ์ํ๊ณผ ๋ฌผ๋ฆฌํ ๊ณต์๋ค์ ์๊ณ ์์ด์ผ ํ๋ค. ํ๋ฉด์ ๋ํ๋ ์๊ฐ์ ์ธ ์์๋ค์ ํ๋ฉด์ด ๊ฐ์ง๊ณ ์๋ ๋ฌด์ํ ๋ง์ pixel๋ค์๊ฒ ์ด๋ค ๊ฐ์ ์ฃผ๋ฉด์ ๊ทธ๋ ค์ง๋๋ฐ, ์ฌ์ง์ด ํ๋ฉด์ ๋ด์ฉ์ ์ค์๊ฐ์ผ๋ก ๋ณํ๋ค. ๋ฐ๋ผ์ ์ค์๊ฐ์ผ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ํ๋ฉด ๊ฐ๊ฐ์ pixel์ ๋ณต์กํ ์ํ๊ณผ ๋ฌผ๋ฆฌํ ๊ณต์์ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ์ฌ pixel์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ปดํจํฐ์ ํ๋ฉด์ ๊ฐ๊ฐ ๋ค๋ฅด๋ค. ์ด๋ค ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ๋ ํฌ๊ณ , ์ด๋ค ํ๋ฉด์ ํ์๊ฐ ๋ ๋๋ค. ์ฆ ๊ฐ ํ๋ฉด๋ง๋ค์ pixel์ด ๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๊ณ์ฐํด์ผ ํ ๊ฒฐ๊ณผ๊ฐ ๋ค ๋ค๋ฅด๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋ฉด์ ๊ทธ๋ ค์ง ์๊ฐ์ ์ธ ์์๋ค์ด ๋์ผํ๊ฒ ํํ๋์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ graphics system์ ๋์์ ๋ฐ๋๋ฐ, graphics system์ ๋ณต์กํ๊ณ ๊ณ์ฐ๋์ด ๋ง์ ์์
์ธ ์๊ฐ์ ์ธ ์์๋ฅผ ๊ทธ๋ฆฌ๋ ์ผ์ ๊ฐ ํ๋ฉด์ ํฌ๊ธฐ์ ํ์๊ฐ ๋ค๋ฅด๋๋ผ๋ ๋์ผํ๊ฒ ๊ทธ๋ฆด ์ ์๋๋ก ๋์์ค๋ค. ์ฆ ๊ฐ๋ตํ๊ฒ ๋งํ์๋ฉด ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์ ๋น์ฐํ์ง๋ ๊ฐ๋จํ์ง๋ ์์ ์์
์ด๊ณ ์ด๋ฅผ ์ํด graphics system์ ๋์์ ๋ฐ๋๋ค. ๊ทธ๋ฐ๋ฐ ์น์ graphics ๊ธฐ์ ์ ๋ณดํต์ graphics system๊ณผ ๋ค๋ฅด๊ฒ ์ํ๊ณผ ๋ฌผ๋ฆฌํ ๊ณต์๋ค์ ์ดํดํ์ง ์๊ณ ๋ ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋๋ก ์ค๊ณ๋์๋ค. ์น์ graphics ๊ธฐ์ ์ ๋ณต์กํ ๊ณ์ฐ ํจ์๋ค์ ๋์ดํ์ง ์๊ณ ๋ ์ถ์์ ์ธ ์ธ์ด๋ค์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ค. ์ด๋ ๊ฒ ์น์์ ๊ฐ๋จํ๊ณ ์ถ์์ ์ธ ์ธ์ด๋ฅผ ํตํด ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋๋ก ์ ๊ณตํ๋ ์ธ์ด๊ฐ ๋ฐ๋ก CSS(Cascading Style Sheet)์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก graphics system์์ ์๊ฐ์ ์ธ ์์๋ฅผ ๊ทธ๋ฆฌ๋ ์์
์ ํฌ๊ฒ 2๊ฐ์ง ๋จ๊ณ๋ฅผ ํตํด ์ด๋ฃจ์ด ์ง๋ค. ๋จผ์ ์๊ฐ์ ์ธ ์์๊ฐ ๊ทธ๋ ค์ง ์์ญ์ ๊ณ์ฐํ๋ reflow ๋จ๊ณ์, ์ ํด์ง ์์ญ์ ์๊น, ์ง๊ฐ๋ฑ์ ๊ฒฐ์ ํ์ฌ ์ค์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๋จ๊ณ์ธ repaint ๋จ๊ณ๋ก ๋๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ CSS๋ฅผ ํด์ํ์ฌ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋์๋ ๋์ผํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค. ๋จผ์ ๊ฐ element๋ค์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ reflow๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ์ ์ค์ ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ repaint ์์
์ ์คํํ๋ค.(CSS์์๋ repaint์ดํ์๋ post-process๋ผ๋ ๋จ๊ณ๊ฐ ๋ ์์ง๋ง ์ด๋ฒ ์ฃผ์ ์์๋ ๋ค๋ฃจ์ง ์๋๋ค.) ๋ฐ๋ผ์ CSS์ ์ด๋ค ์์ฑ๋ค์ reflow ๋จ๊ณ์ ์ํฅ์ ์ฃผ์ง๋ง ์ด๋ค ์์ฑ๋ค์ repaint ๋จ๊ณ์ ์ํฅ์ ์ค๋ค. ์ด๋ฒ์ ๋ค๋ฃฐ ์ฃผ์ ์ธ CSS position์ ํ๋ฉด์ ๊ทธ๋ฆด ๋์ reflow ๋จ๊ณ์ ์ํฅ์ ์ฃผ๋ CSS ์์ฑ์ด๋ค. Position SchemesCSS 2.2 Visual Formmating Model ์ฑํฐ์ Position Schemes ๋ถ๋ถ์ ๋ณด๋ฉด, Box ๋ชจ๋ธ(margin, border, padding, content๊ฐ์ผ๋ก ๊ณ์ฐํ๋ ๊ธฐ๋ณธ์ ์ธ display model)์ ์์น๋ฅผ ๊ณ์ฐํ ๋, ๊ณ์ฐํ๋ ๋ฐฉ์์ด 3๊ฐ์ง๋ก ๋๋๋ค๊ณ ์ค๋ช
ํ๋ค. ์ฒซ ๋ฒ์งธ๋ ์ค๋ ๋ค๋ฃฐ normal flow ๋ฐฉ์์ด๊ณ , ๋ ๋ฒ์งธ๋ ๋ค์์ ๋ค๋ฃฐ float ๋ฐฉ์์ด๊ณ ๋ง์ง๋ง์ผ๋ก๋ ์ธ ๋ฒ์งธ๋ก ๋ค๋ฃฐ absolute positioning ๋ฐฉ์์ด๋ค. ๊ฐ๊ฐ์ ๋ฐฉ์์ ์ถ์์ ์ธ ๊ฐ์ผ๋ก ํํ๋๋ค. normal flow๋ฅผ ์๋ก ๋ค๋ฉด, position ๊ฐ์ด staticํน์ relative์ธ ๊ฒฝ์ฐ ํด๋น box๋ normal flow๋ฅผ ํตํด ์์น๊ฐ ๊ณ์ฐ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ normal flow์ ํด๋น๋๋ position ๊ฐ์ธ static๊ณผ relative๋ฅผ ์ฝ๋ ๊ฒ ์์ฒด๋ก๋ ํด๋น box๊ฐ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง ์ง ๊ฐ๋ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ์ด ๊ฐ๋ค์ ๊ตณ์ด ์ฐ๋ฆฌ ๋ง๋ก ์์น๊ฐ ์ ์ ์ด๊ณ ์๋์ ์ด๋ผ๊ณ ํด์ํ๋ ๊ฒ์ผ๋ก๋ ํด๋น box๊ฐ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง ์ง ์ ์ ์๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์ด ์ถ์์ ์ธ ๊ฐ static, relative๋ฅผ ์ฝ์ ๋, ์ถ์์ ์ธ ์๋ฏธ๋ก ๋ฐ์๋ค์ฌ์๋ box๊ฐ ์ด๋์ ์์นํ ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ ํตํด ํด๋น box์ ์์น๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋๋ ์ง๋ฅผ ์์์ผ ํ๋ค. ์ฆ, static, relative๋ผ๋ ๊ฐ์ ๋ฌธ์ ๊ทธ๋๋ก ์ฝ๋ ๊ฒ์ด ์๋๋ผ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์ํ ๊ณต์์ด๋ ํจ์๋ก ์ดํดํด์ผ ํ๋ค.(๋ค๋ฅธ CSS ์์ฑ๋ค๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.) ๊ทธ๋ ๋ค๋ฉด normal flow์ ํด๋นํ๋ static, relative๋ผ๋ ๊ฐ์ box์ ์์น๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ด๋ค ๊ฐ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๋ ๊ฒ์ผ๊น? ์น์ ์์๋ฅผ ๊ทธ๋ฆด ๋, ์์์ ์๋์ ๋ฐฉํฅ์ผ๋ก, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค. ๋ฐ๋ผ์ normal flow๋ ํ๋ฉด์ ๊ทธ๋ ค์ง box์์์ left top์ ๊ฐ์ ๊ณ์ฐํ๋ค. Normal FlowNormal Flow๋ ์ฐ๋ฆฌ ๋ง๋ก ์ผ๋ฐ ํ๋ฆ์ด๋ผ๊ณ ํด์ํ ์ ์์ง๋ง, ์ด๋ ๊ฒ ํด์ํ๋ฉด ์๋ฏธ๋ฅผ ๋ช
ํํ๊ฒ ์ ์ ์๋ค. ์ด ๋จ์ด๋ CSS ๊ณต์๋ฌธ์์ ์ ์๋ ๊ณ ์ ๋ช
์ฌ์ด๊ธฐ ๋๋ฌธ์, ์ด ๋จ์ด๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ normal flow๋ฅผ ํด๋น box์์์ left top์ ๊ณ์ฐํ๋ ๋ฐฉ์์ผ๋ก ์ดํดํด์ผ ํ๋ค. ์ด์ normal flow๊ฐ ์ด๋ค ๊ฐ์ ๊ณ์ฐํ๋ ์ง๋ ์๊ฒ ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด normal flow๋ ์ด๋ค ๋ฐฉ์์ผ๋ก left top ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ผ๊น? CSS 2.2 Visual Formmating Model ์ฑํฐ์ Normal Flow ๋ถ๋ถ์ ๋ณด๋ฉด normal flow๊ฐ left top์ ๊ณ์ฐํ๋ ๋ฐฉ์์ 3๊ฐ์ง๋ก ๋ถ๋ฅํ๋ค. ์ฒซ ๋ฒ์งธ๋ block formatting context(์ดํ bfc), ๋ ๋ฒ์งธ๋ inline formatting context(์ดํ ifc), ๋ง์ง๋ง์ผ๋ก relative positioning๋ก ๋ถ๋ฅํ๋ค. relative positioning์ ๊ฒฝ์ฐ normal flow์ ์ผ๋ถ์ด์ง๋ง, bfc, ifc ๊ณ์ฐ ์ดํ์ ์ถ๊ฐ์ ์ธ ์กฐ์์ด๊ธฐ ๋๋ฌธ์, ์ค์ normal flow์ ํด๋นํ๋ ๋ฐฉ์์ bfc์ ifc ์ด ๋๊ฐ์ง๋ผ๊ณ ํ ์ ์๋ค. BFC์ IFCbfc์ ifc๋ฅผ ์ค๋ช
ํ๊ธฐ์ ์์์, block๊ณผ inline์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋จผ์ ์ดํดํด์ผ ํ๋ค. CSS์ block๊ณผ inline๋ํ CSS์์ ์ฌ์ฉํ๋ ๊ณ ์ ์ ์๋ฏธ๋ก ์ดํดํด์ผ ํ๋ค. CSS์์์ block๊ณผ inline์ ํด๋น box ์์๊ฐ ๊ณต๊ฐ์ ์์นํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. block์ ํด๋น ์์๊ฐ ๋ถ๋ชจ ์์์ ๊ฐ๋ก ๊ธธ์ด๋ฅผ ๊ฝ ์ฑ์ด ํ ์ค์ ์ฐจ์งํ๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋๋ก inline์ ํด๋น ์์์ content ์์ญ๋งํผ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค๋ ์๋ฏธ์ด๋ค. ์ด ๋๋ฌธ์ inline ์์๋ ๋์ด์ ๋๋น ์์ฑ ๊ฐ์ ์ค๋ ์ ์ฉ๋์ง ์๋๋ค. ๋ค์ ๋งํด, bfc๋ ํด๋น box๊ฐ ๋ถ๋ชจ ์์์ ๊ฐ๋ก ๊ธธ์ด ์ ์ฒด๋ฅผ ๊ฝ ์ฑ์ด ํ ์ค์ ์ฐจ์งํ ๋, left top์ ๊ณ์ฐํ๋ ๋ฐฉ์์ด๊ณ , ifc๋ ํด๋น box๊ฐ content ์์ญ๋งํผ ๊ณต๊ฐ์ ์ฐจ์งํ ๋, left top์ ๊ณ์ฐํ๋ ๋ฐฉ์์ด๋ค. normal flow๋ก box๋ฅผ ๊ทธ๋ฆด ๋, block ์์๊ฐ ๊ทธ๋ ค์ง๋ ๋์์ bfc๊ฐ ์ ์ง๋๋ค.(bfc ๋ฐฉ์์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค.) ๊ทธ๋ฌ๋ค๊ฐ inline์์๊ฐ ๋ฑ์ฅํ๋ฉด ifc๋ก ๋ฐ๋๋ค. ์์ ๊ทธ๋ฆผ์ bfc์ ifc๋ฅผ ๊ฐ๋ตํ๊ฒ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด๋ค. bfc๋ถํฐ ๋จผ์ ์ดํด๋ณด๋ฉด, block์ ํ ์ค ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ block์ left ๊ฐ์ ๋ถ๋ชจ์ left๊ฐ๊ณผ ๋์ผํ๋ค. ๊ทธ๋ ๋ค๋ฉด, bfc์์ ๊ด์ฌ์ ๊ฐ์ ธ์ผํ ๊ฐ์ top ๊ฐ์ด๋ค. ๋ง์ฝ ์์๊ฐ block ์์๋ค์ด์๋ค๋ฉด ๊ณ์ฐ์ ๊ฐํธํ๋ค. ์์ ์๋ block์์๋ค์ height๊ฐ์ ๋ชจ๋ ๋ํ ๊ฐ์ด ์๋ก ๊ทธ๋ฆด block์ top ๊ฐ์ด๋ค. ๋์์ bfc์ ์ธ๋ก ๊ธธ์ด๋ bfc์ ์ํ block ์์๋ค์ ๋์ด์ ํฉ์ด ๋๋ค. ๋ฐ๋ฉด์ ifc์ ๊ฒฝ์ฐ์๋ inline ์์๋ ์์ ์ content๋งํผ ๊ณต๊ฐ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์, ํ ์ค์ ์ฌ๋ฌ inline ์์๊ฐ ๋ฐฐ์น๋ ์ ์๋ค. ๋ฐ๋ผ์ ifc์์๋ left ๊ฐ์ด ์ด๋ค ๊ฐ์ด ๋ ์ง๋ ๊ณ ๋ คํด์ผ ํ๋ค. ifc์์ inline์์์ left ๊ฐ์ ๊ฐ์ ์ค ์์ ๊ทธ๋ ค์ง inline ์์๋ค์ ๊ธธ์ด์ ํฉ์ด ๋๋ค. ๊ทธ๋ฐ๋ฐ ifc์์๋ inline ์์๋ค์ ๊ฐ๋ก ๊ธธ์ด์ ํฉ์ด ๋ถ๋ชจ์ ๊ฐ๋ก ๊ธธ์ด๋ฅผ ๋์ด๋ฒ๋ฆฌ๋ฉด ๋ค์ ์ค๋ก ๋ด๋ ค๊ฐ๋ ๊ธฐ๋ฅ์ด ์๋ค. ๊ทธ๋ ๋ค๋ฉด inline ์์๊ฐ ์๋์ผ๋ก ๋ค์ ์ค๋ก ๋์ด ๊ฐ ๋, ์ผ๋งํผ ๋ด๋ ค๊ฐ์ผ ํ ๊น? ํ ์ค์ ๊ทธ๋ ค์ง inline ์์๋ค ์ค ๊ฐ์ฅ height ๊ฐ์ด ํฐ ์์์ height ๊ฐ์ด ๊ทธ ์ค์ line height๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์๋์ผ๋ก ๋ค์ ์ค๋ก ๋์ด๊ฐ๋ inline ์์์ top ๊ฐ์ ์ด์ ์ค line height๊ฐ์ด๋ค. BFC, IFC ์ดํดํ๊ธฐ์๋์ ์์ ๋ฅผ ๋ณด์ See the Pen block-ex1 by psy082 (@psy082) on CodePen. ์์ ๋ฅผ ๋ณด๋ฉด red block, blue block์ block ์์์ด๊ธฐ ๋๋ฌธ์ red block์ ์ค๋ฅธ์ชฝ์ ๊ณต๊ฐ์ด ๋จ์ ์์์๋ ๋ถ๊ตฌํ๊ณ blue block์ด ๋ค์ ์ค์ ๊ทธ๋ ค์ง๋ค. ์ฌ๊ธฐ์ ์๊ฐํด๋ณผ ์ ์ red block์ด 300px๋งํผ๋ง ๊ทธ๋ ค์ก์ง๋ง ์ฐจ์งํ๋ ์์ญ์ด 300px์ด๋ผ๋ ๋ง์ด ์๋๋ค. ์ฐจ์งํ๋ ์์ญ ์ค์์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง fragment์์ญ์ด 300px์ธ ๊ฒ์ด๋ค. red block์ ์ฌ์ ํ ๋ถ๋ชจ์ width ๋งํผ์ ๋ค ์ฐจ์งํ๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด์ See the Pen inline-ex1 by psy082 (@psy082) on CodePen. block์์๊ฐ ๋ถ๋ชจ์ธ inline ์์ aaaโฆ๋ ๋ถ๋ชจ๊ฐ 100px์ ๋๋น๋ฅผ ๊ฐ์ก๋ค๋ฉด 100px์์ ๋๋์ผ ํ๋๋ฐ, block์ ๋ท๊ณ ๊ทธ๋ ค์ง๋ค. text๋ inline ์์์ธ๋ฐ, ์ ์๋ ์ค๋ก ๋ด๋ ค๊ฐ์ง ์๊ณ ๋ถ๋ชจ์ ๋๋น๋ฅผ ๋์ด์ ๊ทธ๋ ค์ง๋ ๊ฒ์ผ๊น? ๋ง์ฝ์ text๋ฅผ ๋๋น 100px์ ๋ง์ถฐ์ ์
๋ ฅํ๋ฉด ์ค์ ๋ง์ถฐ์ ์ถ๋ ฅ๋๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด์ See the Pen inline-ex2 by psy082 (@psy082) on CodePen. ์ด๋ฒ์๋ a๋ฌธ์์ด์ 100px์ ๋ง์ถ์ด ์ถ๋ ฅํ๋๋ ์ํ๋ ๋๋ก a๋ค์ด red block ์์ ์ถ๋ ฅ๋์๋ค. ์ด๋ ์๋ฌต์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋, ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ ๋ฌธ์์ด์ ํ๋์ ifc์์ญ์ผ๋ก ๋ณธ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. enter๋ space bar ๋ฑ์ ๊ณต๋ฐฑ์ ์ฃผ๊ฒ ๋๋ฉด ๋ฌธ์์ด ๊ฐ๊ฐ์ ํ๋์ inline์์๊ฐ ๋๋ค. ๋ค์ ๋งํด, ๋ง์ฝ ๋ฌธ์์ด์ด ๊ณต๋ฐฑ๋ฌธ์ ์์ด ํ๋๋ก ์ด์ด์ก๋ค๋ฉด ๋ฌธ์์ด ์ ์ฒด๊ฐ ํ๋์ inline width๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋ง์ฝ์ div ๋ด๋ถ์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ๋๋ก ์ด์ด์ง ๋ฌธ์์ด์ div ๋๋น์ ๋ง์ถฐ์ ๊ทธ๋ ค์ง๋๋ก ๋ง๋ค๊ณ ์ถ๋ค๋ฉด wordbreak ์์ฑ ๊ฐ์ ์ค์ผ ํ๋ค. wordbreak ์์ฑ์ด ์ค์ ๋๋ฉด, ํด๋น block ์์ ์๋ ๋ฌธ์์ด์ ๋ฌธ์ ํ๋ํ๋๊ฐ inline ์์๋ก ์ฒ๋ฆฌ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ reflow ๊ณ์ฐ์์ด ๋์ด๋๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ wordbreak๋ฅผ ๋ง์ด ์ค์ ํ๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง์ด ๋งค์ฐ ๋๋ ค์ง๋ค.(์ผ๋ฐ์ ์ผ๋ก div์์์ ๋๋น๋ฅผ ๋์๋งํผ์ ๊ธด ๋ฌธ์์ด์ ์์ฑํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. ๋ค๋ง ์ด๋ฐ ์์๋ค์ ํตํด block๋ด์ inline์์๊ฐ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ป๊ฒ ์ธ์๋๋์ง๋ฅผ ์ ์ ์๋ค.) ๋ค์ ์์ ๋ฅผ ๋ณด์ See the Pen inline-ex3 by psy082 (@psy082) on CodePen. ์ฝ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด๊ธฐ ์ ์ ์์ ์์ ์ฝ๋๋ฅผ ์ฝ๊ณ ํ๋ฉด์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง ์ง ์์ํด ๋ณด์. ๋ง์ฝ ํ๋ฉด์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง์ง ํผ๋์ด ์จ๋ค๋ฉด ์์ง rendering system์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ ๊ฒ์ด๋ค. ํผ๋์ด ์จ ์ด์ ๋ฅผ ์๊ฐํด๋ณด์. ์๋ง๋ span์ด๋ผ๋ inline ์์ ๋ด๋ถ์ red block์ด ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ด๋ค. red block์ ๋ถ๋ชจ์์๋ span์ด๊ณ , red block์ด ๊ทธ๋ ค์ง๊ธฐ ์ ์ WORLD๋ผ๋ ๋ฌธ์์ด์ด ์๋ค. ๊ทธ๋ฌ๋ฉด red block์ WORLD ์์ ๊ทธ๋ ค์ง๋์ง ๋ค์ ์ค์ ๊ทธ๋ ค์ง๋ ์ง๊ฐ ํผ๋์ด ์จ๋ค. ๊ทธ๋ฐ๋ฐ rendering system์ ์ดํดํ๊ธฐ ์ํด์๋ rendering system์ด DOM์ ๊ตฌ์กฐ์ ์ผ์นํ์ง ์๋๋ค๋ ๊ฒ์ ์์์ผ ํ๋ค. ๊ทธ๋ฆผ์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง ์ง ์์ํ ๋ ํผ๋์ด ์ค๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ rendering์ด DOM์ ๊ตฌ์กฐ์ ๋์ผํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ rendering์ element๋ค์ ๊ทธ๋ฆด ๋, DOM์ ๋งฅ๋ฝ์์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ bfc, ifc์ ๋งฅ๋ฝ์์ ๊ทธ๋ฆฐ๋ค. DOM์ ํฌํจ๊ด๊ฒ์์๋ inline ์์ block์ด ์๋ ๊ตฌ์กฐ์ด์ง๋ง ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ์
์ฅ์์๋ ์์ ์ฝ๋๋ฅผ ๊ทธ๋ฆด ๋, bfc์์ -> ifc์์ -> ifc -> ๋ค์ bfc ์์ -> ๋ค์ ifc์ ๊ด์ ์์ ๊ทธ๋ฆฐ๋ค.(์ด๋ ์น์์ DOM์ ์๋ฏธ์ ์ธ ์์๋ง์ ํํํ๋๋ก ํ๊ณ style์ DOM์ด ์๋ CSS์ ์กฐ์์ผ๋ก ํํํ๋๋ก ํ๋ HTML5 ์ดํ์ semantic web์ ํ๋ฆ๊ณผ๋ ๋ง๋ ๊ด์ ์ด๋ค.) ์์ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ฉด, position ๊ฐ์ด static, relative์ธ box ์์์ ๊ฒฝ์ฐ box ์์์ ์์น๋ฅผ ๊ณ์ฐํ ๋, normal flow ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๋ค. ํด๋น box๊ฐ block ์์์ธ ๊ฒฝ์ฐ bfc๋ก ๊ทธ๋ฆฌ๊ณ , inline์ธ ๊ฒฝ์ฐ ifc๋ก ๊ทธ๋ฆฐ๋ค. bfc๋ top ๊ฐ์ ๊ด์ฌ์ด ์๊ณ , top์ ๊ณ์ฐํ๊ธฐ ์ํด์๋ ์์ ๊ทธ๋ ค์ง block ์์๋ค์ height ๊ฐ์ ๋ชจ๋ ๋ํจ์ผ๋ก์จ ๊ณ์ฐํ ์ ์๋ค. ifc๋ left ๊ฐ์๋ ๊ด์ฌ์ด ์๊ณ , left ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด์ ์์ ๊ทธ๋ ค์ง inline ์์๋ค์ width ๊ฐ์ ๋ชจ๋ ๋ํ๋ค. ๋ง์ฝ inline width ๊ฐ๋ค์ ํฉ์ด ๋ถ๋ชจ ์์์ width ๊ฐ์ ๋์ด๊ฐ ๊ฒฝ์ฐ ๋ง์ง๋ง inline ์์๋ ์๋์ผ๋ก ๋ค์ ์ค์ ๊ทธ๋ ค์ง๋ค. inline์์๊ฐ ๋ค์ ์ค์ ๋์ด๊ฐ์ ๊ทธ๋ ค์ง ๋๋ ์ด์ ์ค์ inline ์์๋ค ์ค ๊ฐ์ฅ height๊ฐ์ด ํฐ ์์์ height๊ฐ์ด ๋ค์ ์ค์ ๊ทธ๋ ค์ง๋ inline ์์์ top๊ฐ์ด ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ด๋ฐ bfc, ifc๋ rendering system์ด๊ธฐ ๋๋ฌธ์ dom์ ๊ตฌ์กฐ์ ์ผ์นํ์ง ์๋๋ค. ๊ณ์ธต์ inline์์ ์์ block ์์๊ฐ ์๋ค๊ณ ํ๋๋ผ๋ rendering system์ ๊ฐ๊ฐ์ ๊ณ์ธต์ ์ผ๋ก ๋ณด์ง ์๊ณ ๋
๋ฆฝ์ ์ธ bfc, ifc๋ก ๊ทธ๋ฆฐ๋ค. ์ด์ ๋ง์ง๋ง์ผ๋ก relative positioning์ด ๋จ์๋ค. Relative Positioning์์์ relating positioning์ด bfc, ifc ๊ณ์ฐ์ ๋ํ ์ถ๊ฐ์ ์ธ ์กฐ์์ด๋ผ๊ณ ๋งํ๋ค. ๋ค๋ฅด๊ฒ ๋งํ๋ฉด, position: relative๋ position: static์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ ์ดํ์ ๋ฌด์ธ๊ฐ ์ถ๊ฐ์ ์ธ ์กฐ์์ด ์ผ์ด๋ ๊ฒฐ๊ณผ์ด๋ค. ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋, position: relative์ ๊ฒฝ์ฐ ๋จผ์ static์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ ๋ค์ ์ถ๊ฐ์ ์ธ ์์น ์กฐ์ ์ด ์ผ์ด๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฐ์ ์๋์ ์์ ๋ฅผ ๋ณด์ See the Pen relative positioning by psy082 (@psy082) on CodePen. ์ด์ ์ ๊ทธ๋ ค์ก๋ ์์ ์ ๋น์ทํ ์์ ์ธ๋ฐ ๋ค๋ฅธ ์ ์ span์ position: relative๋ฅผ ์ฃผ์๋ค. ๊ทธ๋ฆผ์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ก๋์ง ์ดํด๋ณด์. ์ฐ์ ifc๊ฐ ์ ์ง๋๋ฉด์ ** HELLO WORLD๊ฐ ๊ทธ๋ ค์ง๋ค. ๊ทธ๋ฌ๋ค๊ฐ red block์ด ๋ฑ์ฅํ๋ฉด์ bfc๊ฐ ์์๋๋ค. !!๋ก ์ธํด ๋ค์ ifc๋ก ๋ฐ๋๊ณ blue block์ด ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ค์ bfc๊ฐ ์์๋๊ณ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ๋๋๋ค. ์ฌ๊ธฐ๊น์ง๊ฐ position: static์ ๊ณผ์ ์ด๋ค. position: relative๋ ๋จ์ง ์ด๋ฏธ position: static์ผ๋ก ๊ทธ๋ฌ์ง ๊ทธ๋ฆผ์ ์ง์ ํ ์์น ๊ฐ ๋งํผ ์์๋ฅผ ์ด๋์์ผ์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ผ ๋ฟ์ด๋ค. ์์ ์์ ๋ฅผ ๋ณด๋ฉด position: relative๊ฐ ์ค์ ๋ span์์ ์์ WORLD์ red block์ด ์์์ 50px๋งํผ ๋ด๋ ค์ ์๋ค. WORLD์ red block์ด 50px ๋งํผ ๋ค์ ์๋ก ์ฌ๋ผ๊ฐ๋ฉด static์ผ๋ก ๊ทธ๋ ธ์ ๋์ ๋์ผํ ๊ทธ๋ฆผ์ด๋ค. ์์ ์ค๋ช
์์ ๋ธ๋ผ์ฐ์ ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋, position: relative์ ๊ฒฝ์ฐ ๋จผ์ static์ผ๋ก ๊ทธ๋ฆฐ ๋ค์ ์ถ๊ฐ์ ์ธ ์์น ์กฐ์ ์ด ์ผ์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค๊ณ ํ๋๋ฐ, ์ด๋ฒ ์์ ์ ๊ฒฝ์ฐ์๋ ํ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ธ๋ผ์ฐ์ ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋์ ๋์ค์ ๊ทธ๋ ค์ง ์์๋ ๋จผ์ ๊ทธ๋ ค์ง ์์๋ณด๋ค z-index๊ฐ ๋๋ค. ๊ทธ๋์ ์์๊ฐ ๊ฒน์น ๋ ๋์ค์ ๊ทธ๋ ค์ง ์์๊ฐ ์ ์ ๊ทธ๋ ค์ง ์์ ์์ ๊ทธ๋ ค์ง๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ 50px ๋งํผ ๋ด๋ ค์จ red block์ blue block ์์ ๊ทธ๋ ค์ก๋ค. red block์ด ๋จผ์ ๊ทธ๋ ค์ก์์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ป๊ฒ blue block ์์ ๊ทธ๋ ค์ง ์ ์์๊น? ๊ทธ ์ด์ ๋ red block์ด static์ผ๋ก ๊ทธ๋ ค์ง ์ดํ์ relative๋ก ์์น ์กฐ์ ์ด ๋์ ๋ค์ ๊ทธ๋ ค์ก๊ธฐ ๋๋ฌธ์ blue block ๋ณด๋ค z-index๊ฐ ๋์์ก๊ธฐ ๋๋ฌธ์ด๋ค. ์ ๋ฆฌํ์๋ฉด relative ๊ฐ์ box์ ํฌ๊ธฐ๋ width, height ๊ฐ์ ๋ณํ๋ฅผ ์ผ์ผํค์ง ์๊ณ ๋จ์ง ์๋์ ์ธ ์์น๋ง ์ด๋์ํฌ ๋ฟ์ด๋ค. ํด๋น ์์์ reflow๊ณ์ฐ์ ๋ชจ๋ static์์ ์ด๋ฃจ์ด์ง๋ค.(static์์ width์ height๊ฐ ๋ชจ๋ ๊ฒฐ์ ๋๋ค.) html element๋ค์ position ๊ฐ์ ๋ฐ๋ก ์ฃผ์ง ์๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ ๊ฐ์ด static์ด๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ element๋ค์ normal flow๋ฅผ ํตํด ๊ณ์ฐ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ position: absolute๋ position: fixed๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ ์ด์ normal flow๋ก ๊ณ์ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ width์ height๊ฐ์ ์๋์ผ๋ก ์ค์ ํด์ฃผ์ง ์๊ณ , ์์น๋ ์๋์ผ๋ก ์ก์์ฃผ์ง ์๋๋ค. ๋ฐ๋ผ์ position: absolute๋ position: fixed์ธ ์์๋ค์ ๋ฐ๋์ width์ height๊ฐ์ ์ง์ ์ง์ ํด ์ฃผ์ด์ผ ํ๊ณ ์์น ๊ฐ๋ ์ง์ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค.(๋ค์ ๋งํด, position: absolute, position: fixed์ผ ๋ ์์น ๊ฐ๊ณผ ํฌ๊ธฐ ๊ฐ์ ์ง์ ํด ์ฃผ๋ ์ด์ ๋ normal flow๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.) โป ์ถ๊ฐ: inline-block๋ง์ ๊ธ์์ block, inline, inline-block์ ๊ฐ์ด ๋ค๋ฃจ์ง๋ง ์ค์ CSS spec์์๋ block, inline๊ณผ inline-block์ด ๋ค๋ฅธ ๋ถ๋ฅ์ ์ํ๋ค. CSS์์ element๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ display model์ด๋ผ๋ ํฐ ๋ฒ์ฃผ์์ ๊ฐ๋ผ์ง๋ค. display model์ 6๊ฐ์ ๋ถ๋ฅ๋ก ๋๋๋๋ฐ, ์ค๋ ๋ค๋ฃจ๋ normal flow์ block๊ณผ inline์ display-outside์ ํด๋นํ๊ณ , inline-block์ display-legacy์ ํด๋นํ๋ค. inline-block์ด legacy์ ํด๋นํ๋ ์ด์ ๋ block๊ณผ inline์ ๊ด์ฌ์ฌ๊ฐ ๋ค๋ฆ์๋ ๋ถ๊ตฌํ๊ณ ๋ ๊ฐ์ด ๋์ผํ๊ฒ display ์์ฑ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋์์ ์ฌ์ฉํ ์ ์์ด์ ์์ ๋ณ๋๋ก inline-block๊ฐ์ด ์๊ฒจ๋ฌ๊ธฐ ๋๋ฌธ์ด๋ค. ์ข ๋ ์ค๋ช
์ ํ์๋ฉด ์์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ฒ๋ผ block์์๋ fragment๋งํผ๋ง ๊ทธ๋ ค์ง์ง๋ง ์ค์ ๋ก๋ ๋ถ๋ชจ ๊ธธ์ด ํ ์ค ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค. ์ด ๋๋ฌธ์ ์์ ๊ณต๊ฐ์ด ๋จ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ์ block ์์์ด์ง๋ง fragment๋งํผ๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง์ง ์์ ๋จ์ ๊ณต๊ฐ๋ inline์์์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ display: inline-block์ ์ค์ ํ๋ฉด ๋๊ณ ์ด ๊ฒฝ์ฐ block ์์์ง๋ง ifc์ฒ๋ผ ๊ทธ๋ ค์ง๋ค.","link":"/2020/07/20/css-position/"},{"title":"CSS Position Schemes- Float","text":"์ด๋ฒ ์ฃผ์ ๋ CSS Position Schemes์ ๋ ๋ฒ์งธ ๋ฐฉ์์ธ float์ด๋ค. float๊ฐ ์์ฑ๋ ๋ ๋ฐ์ํ๋ 4๊ฐ์ง ์ผ์ ๋ณด๋ฉด์ float๊ฐ box์์์ ์์น๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ดํดํด ๋ณด๊ฒ ๋ค. ์๋ float๊ฐ overflow ์์ฑ์ ๊ฐ์ง ์์์ ํจ๊ป ๊ทธ๋ ค์ง ๋์ ํน์ด ์ฌํญ๋ ๋ค๋ฃจ์ด์ผ ํ์ง๋ง ์ฌ์ ์(๋๋ฌด ๊ธธ๋คโฆ) ํด๋น ๋ด์ฉ์ ๋ค์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค. ์ด๋ฒ์ ๋ค๋ฃจ๋ ๋ด์ฉ๋ค์ ์ฝ๋์คํผ์ธ 76 CSS Rendering์ ๊ฐ์๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค. Float๊ฐ ์์ฑ๋๋ฉด ๋ฐ์ํ๋ ์ผ์ด๋ค element๊ฐ float ์์๊ฐ ๋๋ฉด ๋ค์์ 4๊ฐ์ง ์ผ์ด ๋ฐ์ํ๋ค. new bfc: ํด๋น float ์์๋ถํฐ ์๋ก์ด bfc๊ฐ ์์ฑ๋๋ค. float over normal flow: float๋ก ์ธํด ์๋ก ์์ฑ๋ bfc์ normal flow๋ก ๋ค๋ฅธ block ์์๊ฐ ๊ทธ๋ ค์ง ์ ์๋ค. ์ด ๊ฒฝ์ฐ normal flow๋ก ๊ทธ๋ ค์ง block ์์ ์์ float ์์๊ฐ ๊ฒน์ณ์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ค. text, inline guard: float๋ก ์ธํด ์๋ก ์์ฑ๋ bfc ์ดํ์ ์์ฑ๋ inline ์์์ ๊ฒฝ์ฐ float ์์์ ๊ฒน์ณ์ ๊ทธ๋ ค์ง์ง ์๊ณ float ์์๊ฐ ์ฐจ์งํ๋ ์์ญ๋งํผ ๋ฐ๋ ค์ ๊ทธ๋ ค์ง๋ค. line box: float๋ ์๋ก์ด bfc๋ฅผ ์์ฑํ์ง๋ง bfc ๋ฐฉ์์ผ๋ก ์์น๊ฐ ๊ฒฐ์ ๋์ง ์๋๋ค. line box ๋ฐฉ์์ผ๋ก ์์น๊ฐ ๊ณ์ฐ๋๋ค. ์ด์ ๋ถํฐ๋ float๋ก ์ธํด ๋ฐ์ํ๋ ๊ฐ๊ฐ์ ์ผ๋ค์ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค. New BFC and Float Over Normal Flow See the Pen bfc+float by psy082 (@psy082) on CodePen. ์์ ์์ ๋ฅผ ๋ณด์. red box์ดํ์ ๊ทธ๋ ค์ง๋ green box๋ float ์์๊ฐ ๋์๋ค. ๋ฐ๋ผ์ ์์ red box์ ๋์ผํ bfc์์ ๊ทธ๋ ค์ง๋ ๊ฒ ์๋๋ผ ์์ bfc์๋ ๋ค๋ฅธ ์๋ก์ด bfc๊ฐ ์์๋๋ค. ๋ฐ๋ผ์ float ์์๋ ์์ ๊ทธ๋ ค์ง red box์๋ ๊ฒน์น์ง ์์ง๋ง(bfc๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์) ์๋ก ์์ฑ๋ bfc์ ํฌํจ๋ sky box์ ๊ฒน์ณ์ ๊ทธ๋ ค์ง๋ค. float์ ์๋ฏธ๋๋ก float ์์์ธ green box๊ฐ sky box์์ ๋ ์๋ ๊ฒ์ด๋ค. โป ์ข ๋ ์๊ฐํด๋ณผ ์ : ๋ฐ๋ผ์ float ์์๋ฅผ ๋ค๋จ์ผ๋ก ์ฌ๋ฌ๊ฐ ๋ง๋ค๋ฉด, ๊ทธ ๋๋ง๋ค ์๋กญ๊ฒ bfc๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ๊ณ์ฐ๋์ด ๋์ด๋๋ค. ๊ทธ๋ ๋ค๋ฉด, float๋ก ์ธํด ์๋กญ๊ฒ ์์ฑ๋ bfc ์์ญ์ ํฌ๊ธฐ๋ ์ผ๋ง๋งํผ์ผ๊น?(normal flow์์ bfc์ ํฌ๊ธฐ๋ ๋ถ๋ชจ์์์ ๋๋น์ block์์๋ค์ ๋์ด ๊ฐ๋ค์ ํฉ์ด์๋ค.) ๋ฐ๋ก float ์์ญ ์ ์ฒด์ inline ์์ญ ์ ์ฒด๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ ๋๊น์ง์ด๋ค. Text, Inline Guard See the Pen bfc+float ex2 by psy082 (@psy082) on CodePen. ์์ ์์ ๋ฅผ ๋ณด์. HELLO๋ green box๊ฐ float๊ฐ ์๋์๋๋ผ๋ฉด green box ๋ค์ ์ค์ ์์นํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ green box๊ฐ float๊ฐ ๋๋ฉด์ ์๋ก์ด bfc๊ฐ ์์๋์๊ณ , HELLO์ ๋ฑ์ฅ์ผ๋ก ์๋ก์ด ifc๊ฐ ๋ค์ ์์๋์ง๋ง green box๊ฐ float์ด๊ธฐ ๋๋ฌธ์ green box๊ฐ ์ฐจ์งํ๋ ๋งํผ HELLO๊ฐ ๋ฐ๋ ค์ ๊ทธ๋ ค์ง๋ค. ์ฌ๋ฐ๋ ์ ์ ๋ค์ ๊ทธ๋ ค์ง sky box์ ๊ฒฝ์ฐ, float๊ฐ block์์์ ๊ฒฝ์ฐ์๋ guard๋ก ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒน์ณ์ ๊ทธ๋ ค์ง๋ค. ๊ทธ๋ฌ๋ฉด์ ๋์์ sky box ์์ WORLD๋ผ๋ text๋ inline ์์์ด๊ธฐ ๋๋ฌธ์ inline guard์ ๊ฑธ๋ ค์ ๋ float์์๊ฐ ์ฐจ์งํ๋ ๋งํผ ๋ฐ๋ ค์ ๊ทธ๋ ค์ง๋ค. ์ ๋ฆฌํ์๋ฉด float์์๋ float์์ ๋ด๋ถ์ inline์์๊ฐ ์๋๋ผ๋ฉด inline์์์ ๊ฒน์ณ์ ๊ทธ๋ ค์ง์ง ์๋๋ค. ์ฆ, float๋ inline ์์์ ๋ํ์ฌ guard๋ก ์๋ํ๋ค. ๋ฐ๋ผ์ WOW๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๋ฌธ์๋ค์ green box์ ๊ฒน์น์ง ์๊ฒ ๊ทธ๋ ค์ง ๊ฒ์ด๋ค. Line Boxfloat ์์์ ์์น๋ line box๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ ๊ทธ๋ ค์ง๋ค. ์๋ ์์ ๋ฅผ ๋ณด๋ฉด์ float๊ฐ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๋ ์ง ์ดํด๋ณด๊ฒ ๋ค. See the Pen float Line Box by psy082 (@psy082) on CodePen. ํน์ ์์ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ทธ๋ฆผ์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง ์ง ์์ํ ์ ์๋ค๋ฉด, ์ด ๊ธ์ ์ฝ์ง ์์๋ ๋๋ค.(๊ทธ๋ฐ ๋ถ์ ์ ์ด์ ์ด ๊ธ์ ์ฝ์ผ๋ ค๊ณ ํ์ง ์์ผ์๊ฒ ์งโฆ) ํ๋์ฉ ํ๋์ฉ ๋จ๊ณ๋ณ๋ก ๊ทธ๋ฆผ์ด ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๋ ์ง ์ดํด๋ณด์. ์๋์ ๋ชจ์
์ ์์ float ์์๋ค์ด ๋จ๊ณ๋ณ๋ก ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๋ ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ชจ์
์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก float ์์๋ค์ line box ๋ด๋ถ๋ฅผ ์์๋๋ก ์ฐจ์งํ๋ฉด์ ๊ทธ๋ ค์ง๋ค. line box๋ bfc ์ ์ฒด ์์ญ์ ์ฐจ์งํ ์ํ์ด๋ค. 1 ๋ฒ์งธ green box๋ float: left์ด๊ธฐ ๋๋ฌธ์ line box ์ ์ผ ์ผ์ชฝ์ ๋ถ์ด์ ์์นํ๋ค. ์ฆ, ํ์ฌ์ line box์ ์ผ์ชฝ 200px์ ์ฐจ์งํ๋ค. green box๊ฐ ์ผ์ชฝ 200px์ ์ฐจ์งํจ์ ๋ฐ๋ผ์ line box์ ๋๋น๊ฐ 300px๋ก ์ค์ด ๋ค์๋ค.(๋์ด๋ ์๊ด์ด ์๋ค.) 2 ๋ฒ์งธ yellow box๋ float: right์ด๊ธฐ ๋๋ฌธ์ ๋๋น 300px์ line box ์ค๋ฅธ์ชฝ 50px์ ์ฐจ์งํ๋ค. line box์ ๋๋น๊ฐ 250px๋ก ์ค์ด๋ค์๋ค. 3 ๋ฒ์งธ yellow box๊ฐ float: right์ด๊ธฐ ๋๋ฌธ์ line box ์ค๋ฅธ์ชฝ 50px์ ์ฐจ์งํ๋ค. line box์ ๋๋น๊ฐ 200px๋ก ์ค์ด๋ค์๋ค. 4 ๋ฒ์งธ green box๊ฐ float: left์ด๊ธฐ ๋๋ฌธ์ line box ์ผ์ชฝ 150px์ ์ฐจ์งํ๋ค. line box์ ๋๋น๊ฐ 50px๋ก ์ค์ด๋ค์๋ค. 5 ๋ฒ์งธ yellow box๊ฐ float: right์ด๊ธฐ ๋๋ฌธ์ line box ์ค๋ฅธ์ชฝ 150px์ ์ฐจ์งํด์ผ ๊ฒ ์ง๋ง line box์ ๋๋น๋ 50px๋ฐ์ ๋์ง ์๋๋ค. ๊ทธ๋ ค์ผ ํ๋ float ์์๊ฐ line box๋ณด๋ค ํฐ ๊ฒฝ์ฐ line box์ ์์ญ์ด ๋ณํ๋ค. line box์ ์์ญ์ ๋ฐ๊ฟ ๋๋ line box์ top์ ๋ณํ์ํค๋๋ฐ, ํ์ฌ๊น์ง ๊ทธ๋ ค์ง float ์์๋ค ์ค์์ height ๊ฐ์ด ์ ์ผ ์์ ์์์ height ๊ฐ์ด ์๋ก์ด line box์ top๊ฐ์ด ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ๊น์ง ๊ทธ๋ ค์ง float ์์๋ค ์ค์์ height ๊ฐ์ด ์ ์ผ ์์ 4 ๋ฒ์งธ green box์ 50px์ด ๋ฐ๋ line box์ top ๊ฐ์ด ๋๋ค. ์๋กญ๊ฒ ๊ตฌ์ฑ๋ line box๋ ์ด์ line box์์ 50px ์๋๋ก ๋ด๋ ค์ ๋๋น 200px์ด ๋์๋ค. 5 ๋ฒ์งธ yellow box๋ ์๋กญ๊ฒ ๊ตฌ์ฑ๋ line box์ ์ค๋ฅธ์ชฝ 150px์ ์ฐจ์งํ๋ค. line box์ ๋๋น๊ฐ 50px์ด ๋์๋ค. 6 ๋ฒ์งธ green box๊ฐ float: left์ด๊ธฐ ๋๋ฌธ์ line box ์ผ์ชฝ 150px์ ์ฐจ์งํด์ผ ๊ฒ ์ง๋ง 5 ๋ฒ์งธ ๊ฒฝ์ฐ์ ๋์ผํ๊ฒ ๋๋น๊ฐ 50px๋ฐ์ ๋์ง ์์ผ๋ฏ๋ก line box๋ฅผ ์๋ก ๊ตฌ์ฑํ๋ค. ์๋ก line box๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด height ๊ฐ์ด ๊ฐ์ฅ ์์ ์์์ธ 3 ๋ฒ์งธ yellow box์ height๊ฐ ์ ํ๋์๋ค. ๊ทธ๋ฌ๋ ์๋กญ๊ฒ ๊ตฌ์ฑ๋ line box์ ๋๋น๋ 50px๋ฐ์ ๋์ง ์๋๋ค.(5 ๋ฒ์งธ yellow box๊ฐ 3 ๋ฒ์งธ yellow box๋ณด๋ค ๋ ์๋๊น์ง ๊ทธ๋ ค์ก๊ธฐ ๋๋ฌธ์ด๋ค.) ๋ฐ๋ผ์ line box๋ฅผ ๋ ์๋กญ๊ฒ ๊ตฌ์ฑํ๋ค. ๋ค์์ผ๋ก height ๊ฐ์ด ์์ 5 ๋ฒ์งธ yellow box์ height๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑํ line box์ ๋๋น๋ 250px์ด๋ค. line box๋ด์ 6 ๋ฒ์งธ green box๋ฅผ ๊ทธ๋ฆด ์ ์์ผ๋ฏ๋ก ์ผ์ชฝ 150px์ ์ฐจ์งํ๋๋ก ๊ทธ๋ฆฐ๋ค. line box์ ๋๋น๊ฐ 100px์ด ๋์๋ค. 7 ๋ฒ์งธ green box๊ฐ float: left์ด๊ธฐ ๋๋ฌธ์ line box ์ผ์ชฝ 150px์ ์ฐจ์งํด์ผ ํ์ง๋ง, line box๊ฐ 100px์ด๋ฏ๋ก ์ด๋ฒ์๋ line box๋ฅผ ์๋กญ๊ฒ ๊ตฌ์ฑํด์ผ ํ๋ค. 2 ๋ฒ์งธ yellow box์ ๋์ด๊ฐ ์ ์ผ ๋ฎ์ผ๋ฏ๋ก(1 ๋ฒ์งธ green box๋ ๋์ด๊ฐ 2 ๋ฒ์งธ box์ ๋์ผํ์ง๋ง line box๋ ๊ธฐ๋ณธ์ ์ผ๋ก float: left์์์ float: right ์ฌ์ด์ ์์นํ๋๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ 1 ๋ฒ์งธ green box๊ฐ ์ ํ๋์ง ์๊ณ 2 ๋ฒ์งธ yellow box๊ฐ ์ ํ๋๋ค.) 2 ๋ฒ์งธ yellow box ์๋์ ๊ตฌ์ฑ๋๋ line box์ ๋๋น๊ฐ 150px์ด๋ฏ๋ก 7 ๋ฒ์งธ green box๋ฅผ ๊ทธ๋ฆด ์ ์๋ค. 7 ๋ฒ์งธ green box๋ฅผ ๊ทธ๋ฆฌ๊ณ line box์ ๋๋น๊ฐ 0px์ด ๋์๋ค. float ์์๋ค์ด ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ๋ณด๋ฉด ์ ์ ์๋ ํน์ง์ด ์๋ค. line box๊ฐ ๊ณ์ํด์ float: left์ float: right ์ฌ์ด์ ๊ตฌ์ฑ๋๋ค.(๋น ๊ณต๊ฐ์ left์ right ์ฌ์ด์๋ง ์ ํจํ๋ค.) ๋ฐ๋ผ์ float: right๋ float: left ๋ณด๋ค ์ผ์ชฝ์ ๊ทธ๋ฆฌ์ง ์๊ณ , float: left๋ float: right๋ณด๋ค ์ค๋ฅธ์ชฝ์ ๊ทธ๋ฆฌ์ง ์๋๋ค.(๋ฌผ๋ก ๋ค๋ฅธ ๋์ด์์ float: right ๋ณด๋ค float: left๊ฐ ๋ ์ค๋ฅธ์ชฝ์ ๊ทธ๋ ค์ง๋๋ก ํ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ๋ ๊ฐ์ ๋์ด์ ๊ฒฝ์ฐ๋ฅผ ๋งํ ๊ฒ์ด๋ค.) โป ๋ง์ง๋ง์ผ๋ก ์คํดํ๋ฉด ์๋๋ ์ float ์์๊ฐ ์์ฑ๋๋ฉด ์๋ก์ด bfc๊ฐ ์์ฑ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์์ ์์ ์์๋ 7๊ฐ์ float์์๋ค์ด ์๊ธฐ ๋๋ฌธ์, 7๊ฐ์ bfc๊ฐ ์์ฑ๋์๋ค๊ณ ๋ด์ผ ํ ๊น? ๊ทธ๋ ์ง ์๋ค. float๊ฐ ๊ทธ๋ ค์ง๋ line box๊ฐ ์ ์ง๋๋ ํ ๊ฐ์ bfc์ ์ํ๊ฒ ๋๋ค. line box๋ฅผ ํด์ ํ๊ธฐ ์ํด์๋ ๋ณ๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํด์ผ ํ๋ค.(์ด๋ฒ ๊ธ์์๋ ๋ค๋ฃจ์ง ์๋๋ค.) ๋ฐ๋ผ์ ์์ ์์ ์์ ์์ง ๋ค๋ฃจ์ง ์์ ๋ถ๋ถ์ด ์๋๋ฐ, ๋ง์ง๋ง์ ์ถ๊ฐ๋ ABC ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ์๋ red block ์์์ด๋ค. ํด๋น red block์ normal flow bfc์ด๋ฏ๋ก ์๋กญ๊ฒ ์์ฑ๋ bfc์ ์์์ง์ ์ ์์นํ๋ค. ๋ฌธ์์ด ABC๋ float์์์ ๊ฒน์ณ์ ๊ทธ๋ ค์ง ์ ์๊ธฐ ๋๋ฌธ์ 3 ๋ฒ์งธ yellow box์ 4 ๋ฒ์งธ green box ์ฌ์ด์ ์์นํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ์ ๋ฌธ์์ด ABC๊ฐ ์๋๋ผ red block์์ ๋ค์ด๊ฐ ์ ์์ ๋งํผ ๊ธด ๋ฌธ์์ด, ์๋ฅผ ๋ค๋ฉด, ABCDEFG์ธ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๊น? ๋ฌธ์์ด์ ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด์ float: left์ float: right ์ฌ์ด์ marginal box๋ฅผ ์ฐพ์ ๋ด๋ ค๊ฐ๋ฉด์ ์์ ์ด ๊ทธ๋ ค์ง ์ ์๋ marginal box๋ฅผ ์ฐพ๋๋ค. ์ด๋ฒ ์์ ์ ๊ฒฝ์ฐ์๋ ABCDEFG ๋ฌธ์์ด์ด 5 ๋ฒ์งธ yellow box ์๋, 6 ๋ฒ์งธ green box ์ค๋ฅธ์ชฝ์ ๊ทธ๋ ค์ง๋ค.","link":"/2020/07/21/css-float/"},{"title":"CSS Position Schemes- Absolute Positioning","text":"์ด๋ฒ ์ฃผ์ ๋ CSS Position Schemes์ ์ธ ๋ฒ์งธ ๋ฐฉ์์ธ float์ด๊ณ ์ด๋ฒ ์ฃผ์ ์ ๋ง์ง๋ง ํธ์ด๋ค. ์ฐ์ offset์ ๋ํด ์ดํด๋ณธ ํ, parent offset์ ๋ฐ๋ผ์ absolute positioning์ด ์ด๋ป๊ฒ ๊ณ์ฐ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ์ด๋ฒ์ ๋ค๋ฃจ๋ ๋ด์ฉ๋ค์ ์ฝ๋์คํผ์ธ 76 CSS Rendering์ ๊ฐ์๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค. Offset๊ณผ Frame์ฒซ ๋ฒ์งธ ๊ธ์์ CSS์์๋ ํ๋ฉด ์์์ ๊ณ์ฐ์ด ์ง์ ์ ์ผ๋ก ์ํ๊ณผ ๋ฌผ๋ฆฌํ ๊ณต์์ ์ ์ฉํ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ฑ์ ์ถ์์ ์ธ ๊ฐ์ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ค๊ณ ํ๋ค. normal flow์ ๊ฒฝ์ฐ์๋ position: static, position: relative๋ก ๊ฐ์ ์ฃผ์๊ณ , float์ ๊ฒฝ์ฐ์๋ float: left, float: right๋ก ๊ฐ์ ์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฒซ ๋ฒ์งธ ๊ธ์ ๋์
์์ ํ๋ ์ด์ผ๊ธฐ๋ฅผ ์๊ธฐํด๋ณด์. ๊ฒฐ๊ตญ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ํ๋ฉด ์์๊ฐ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ผ๋ก ๊ณ์ฐ๋์ด์ ๊ฐ๊ฐ์ pixel์ ์ฃผ์ด์ ธ์ผ ํ๋ค. ๋ฐ๊พธ์ด ๋งํ๋ฉด, ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์ถ์์ ์ธ ๊ฐ์ผ๋ก ์ง์ ํ ํ๋ฉด ์์๋ค์ ๊ฒฐ๊ตญ ๊ณ ์ ๋ ์ซ์ ๊ฐ์ผ๋ก ๊ณ์ฐ๋๋ค. ์ด๋ ๊ฒ ๊ณ์ฐ๋ ์ซ์ ๊ฐ์ offset์ด๋ผ๊ณ ํ๋ค. ์ฆ, offset์ reflow ๊ณ์ฐ์ด ๋๋ ๊ฒฐ๊ณผ ๊ฐ์ด๋ค. ๋๋ฌธ์ offset ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค. ์ด๋ฐ ์ ์ ์๊ฐํด๋ณด๋ฉด, ๊ฒฐ๊ตญ html, css๋ก ์ง ์ฝ๋๋ ์ฐ๋ฆฌ์ ํฌ๋ง์ฌํญ๊ฐ์ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ ค์ค์ง ๋ง์ง๋ ๋ธ๋ผ์ฐ์ ์ ๋ฌ๋ฆฐ ๋ฌธ์ ์ด๋ค. ์ค์ ๋ก ๊ตฌํ ie6์์๋ float๊ฐ์ ์ฃผ๋ฉด ์๋ํ์ง ์๊ฒ padding: 3px์ด ์ถ๊ฐ๋๋ ๋ฒ๊ทธ๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ html, css rendering์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ํ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ฐ๋ฆฌ ์๋๋๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋์ง ๊ทธ๋ฆฌ์ง ์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ค์ ๊ณ์ฐ๋ ๊ฐ์ offset ๊ฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ ์ด์ธ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ๊ตฌ์ ์ ์ธ ๊ฐ์ ์๊ธฐ ์ํด์ offset๊ฐ์ ์ฝ๊ณ offset ๊ฐ์ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ํ๋ฉด์ด ๊ทธ๋ ค์ง๋๋ก ํ๋ฉด ๋๋ ๊ฒ์ผ๊น? ์ํ๊น๊ฒ๋ ๊ทธ๋ ์ง ์๋ค. ์ฒซ ๋ฒ์งธ ๊ธ์์ ์ด์ผ๊ธฐ ํ๋ค์ํผ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ผ์ ๋ณต์กํ๊ณ ๊ณ์ฐ๋์ด ๋ง์ ์์
์ด๋ค. ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ๋ ์ต๋ํ ๊ณ์ฐ์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ๋ณดํต element๋ค์ด ๊ทธ๋ ค์ง ๋, ์ดํ์ ๊ทธ๋ ค์ง ์์๊ฐ ์ด์ ์ ๊ทธ๋ ค์ง ์์์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ๋ฐ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์กด์ฌํ๋ค. ๋ง์ฝ์ ๋ณต์กํ layout์์ ์์ ํ๋๋ฅผ ๊ทธ๋ฆด ๋๋ง๋ค ์์ญ ๊ณ์ฐ์ ํ๋ฒ์ฉ ํ๋ค๋ฉด ๊ณ์ฐ๋์ด ๋ง์์ง๋ค. ๊ทธ๋์ ๋ธ๋ผ์ฐ์ ๋ ๊ฐ๊ฐ์ ์์๋ค ์ค์ ๋ค๋ฅธ element์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ์ํฅ์ ๋ฐ๋ ์์๋ค๋ง ๋ฌถ์ด์ ํ๋ฒ์ ๊ณ์ฐํ๋ ค๊ณ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฒ์ ๋ฌถ์ด์ ๊ณ์ฐํ๋ ๋จ์๋ฅผ frame์ด๋ผ๊ณ ํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋, ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์์๋ค์ queue์ ์์๋๊ณ frame ๋จ์๋ก ๋ฌถ์ด์ frame ๋จ์๋ก ํ ๋ฒ์ฉ๋ง ๊ณ์ฐ์ ํ๋ ค๊ณ ํ๋ค. ์ด๋ ๊ฒ frame ๋จ์๋ก ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์์๋ค์ ํ๋ฒ์ ๊ทธ๋ฆด ๋ ์ผ์ด๋๋ ์ผ์ flush๋ผ๊ณ ํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ์์ฌ์๋ queue๋ฅผ flush์ํค๋ ๋ฐฉ์์ผ๋ก ์ ์ฒด ์ฌ๊ณ์ฐํ๋ ํ์๋ฅผ ์ค์ด๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ rendering ๊ณผ์ ์ค๊ฐ์ dom์ ์ ๊ทผํด์ elementd์ offset์ ์กฐ์ฌํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ง์ฝ rendering ์ค๊ฐ์ offset ๊ฐ์ ์์ฒญํ๊ฒ ๋๋ฉด, offset๊ฐ์ ์๋ ค์ฃผ๊ธฐ ์ํด์ queue์ ์๋ ๊ฐ๋ค์ ์ง์ฐ๊ณ ๋ฐ๋ก ํด๋น ์์์ offset๊ฐ์ ๊ณ์ฐํด์ ๋ณด์ฌ์ค๋ค.(๋ค์ ์์์ ๋ฐ๋ผ์ ์ฌ๊ณ์ฐ๋์ ๋ณํ ์๋ ์๋ค.) ๊ทธ๋์ rendering ์ค๊ฐ์ offset์ ์์ฒญํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ผํ๋ ์ฌ๊ณ์ฐ์ ํ์๊ฐ ๋์ด๋๊ณ ๋ธ๋ผ์ฐ์ ์ ์ต์ ์ ๋ก์ง์ด ๊นจ์ง๋ค. ๋ฐ๋ผ์ offset๊ฐ์ ํจ๋ถ๋ก ์ฌ์ฉํ๋ฉด ์๋๊ณ , ๊ณ์ฐ์ด ๋ค ๋๋ ์์์ ํํด์ ๋ ์ด์ ๋ค๋ฅธ ์์์ ์ํฅ์ ์ฃผ์ง๋ ์ํฅ์ ๋ฐ์ง๋ ์๋ ๊ฒฝ์ฐ์ ์ฝ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค. ์ด๋ฐ ์์๋ค์ queue์ ์์ด์ง ์๊ธฐ ๋๋ฌธ์ offset๊ฐ์ด ์ฌ๊ณ์ฐ ๋์ง ์๋๋ค. ์ด๋ฐ ๋ธ๋ผ์ฐ์ ์ ์ต์ ํ ๋ฐฉ์์ ๋ชจ๋ฅผ ๊ฒฝ์ฐ, layout์ ๊ตฌ์ฑํ ๋ ์ด์ ์์์ offset์ ์ฌ์ฉํด์ ๋ค์ layout์ ๊ทธ๋ฆฌ๋ ค๋ ์ค์๋ฅผ ํ๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก layout์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์ฌ๊ณ์ฐ ํ์๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์ rendering์ด ๋๋ ค์ง๋ ํ์์ด ๋ฐ์ํ๋ค. ์ ๋ฆฌํ์๋ฉด offset ๊ฐ์ ์กฐํ ์ ์ฉ์ด๋ค offset ๊ฐ์ ์ฝ๋ ํ์๋ offset ์ฌ๊ณ์ฐ์ด ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ์๋ง ๊ถ์ฅ๋๋ค. offset ๊ฐ์ ๋ฐํ์ผ๋ก layout์ ๋ค์ ๊ทธ๋ฆฌ๋ ค๊ณ ํด์๋ ์๋๋ค. Offset Parent์ปดํจํฐ ์
์ฅ์์๋ offset์ ๊ณ์ฐํ๋ ค๋ฉด, ์ค์ pixel ๊ฐ์ ๊ณ์ฐํด์ผ ํ๋ค. offset์ ๊ณ์ฐํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์์ ๊ธฐ์ค์ ์ผ๋ก๋ถํฐ์ ์๋์ ์ธ ์์น์ด๊ธฐ ๋๋ฌธ์ ์ด๋๊ฐ ๊ธฐ์ค์ ์ธ์ง๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ฐ์ ์ด๋ค.(offset์ ์๋ ์๋ฏธ๊ฐ ~๋ถํฐ ~๋งํผ ๋จ์ด์ ธ์๋ค๋ ์๋ฏธ๋ผ๋ ๊ฒ์ ์๊ฐํด๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.) ๋ง์ฝ ์ด๋ค ์์์ left: 100px, top: 100px์ ๊ฐ์ ์ฃผ์๋ค๋ฉด, ์ด ๋ง์ ๊ธฐ์ค์ ์ผ๋ก๋ถํฐ ์ผ์ชฝ์ผ๋ก 100px ์๋๋ก 100px์ด๋ผ๋ ๋ง์ด๋ค. ๋ฐ๋ผ์ offset parent๋ ๋ฐ๋ก offset์ ๊ณ์ฐํ๊ธฐ ์ํ ๊ธฐ์ค์ ์ ์ง์นญํ๋ ์ฉ์ด์ด๋ค. ๊ทธ๋ฐ๋ฐ offset parent๋ normal flow์ ๊ฒฝ์ฐ์ ๋์ผํ๊ฒ dom์ ๊ตฌ์กฐ์ ์ผ์นํ์ง ์๋๋ค. ๋ฐ๋ผ์ dom์์๋ ๋ถ๋ชจ ์์๋ผ๋ ๊ผญ offset parent๊ฐ ์๋ ์๋ ์๋ค. ์์ ๋ค๋ฃจ์๋ normal flow๋ฅผ ์๋ก ๋ค๋ฉด, inline ์์ ๋ด๋ถ์ block ์์๊ฐ ์๋ ๊ฒฝ์ฐ bfc์ offset parent๋ฅผ ๊ณ์ฐํ ๋, ๋ถ๋ชจ์์์ธ inline ์์๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ค. ํด๋น block์์๋ ๋ถ๋ชจ ์์๋ค์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ค๊ฐ block์์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ block ์์๋ฅผ offset parent๋ก ์ผ๋๋ค. offset parent: nullhtml ์์ ์ค์๋ offset parent๊ฐ null์ธ ๊ฒฝ์ฐ, ์ฆ offset parent๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ค์์ 3๊ฐ์ง ์์๋ค์ offset parent๊ฐ null์ด๋ค. root, html, body: ํด๋น html์์๊ฐ root, html, body์ธ ๊ฒฝ์ฐ offset parent๊ฐ null์ด๋ค.(์ด ์์๋ค์ ๊ธฐ์ค ์์์ด๊ธฐ ๋๋ฌธ์ offset parent๊ฐ ์กด์ฌํ์ง ์๋ ์์์ ์ด๋ค.) position: fixed: position: fixed์ ๊ฒฝ์ฐ, offset parent๊ฐ ์กด์ฌํ์ง ์๋ ๊ธฐ์ค ์์๊ฐ ๋๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ offset parent๊ฐ ์๋ค. out of dom tree: javascript๋ฅผ ํตํด createElement๋ก ์์ฑ๋ ์์๋ ํด๋น ์์๊ฐ appendChild๋ก dom tree์์ ์ถ๊ฐ๋์ง ์๋ ํ offset parent๊ฐ ์๋ค. position: absoluteposition: absolute์ ๊ฒฝ์ฐ, offset parent๋ฅผ ์ ํ๋ ๋ฐฉ์์ด ํ์ค์ ์ ํด์ ธ ์๋ค.(๋ฐ๋ผ์ dom์ ๋ถ๋ชจ๋ ๋ฌด์๋๋ค.) position: absolute์ ๊ฒฝ์ฐ์๋ recursive search๋ฅผ ํตํด์ offset parent๋ฅผ ์ฐพ๋๋ค. ์ฌ๊ท์ ์ธ ๋ฐฉ์์ผ๋ก offset parent๋ฅผ ์ฐพ์ ๋๊น์ง ๋ถ๋ชจ์์๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ค. recursive search๊ฐ offset parent๋ฅผ ์ฐพ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค. ๋ถ๋ชจ์์๊ฐ position: fixed์ธ ๊ฒฝ์ฐ: ์์์ ์ด์ผ๊ธฐ ํ ๊ฒ๊ณผ ๊ฐ์ด position: fixed๋ offset parent๊ฐ null์ด๊ธฐ ๋๋ฌธ์ position: absolute์ offset parent๋ null์ด ๋๋ค. ๋ถ๋ชจ์์๊ฐ position: static์ด ์๋๊ฒฝ์ฐ: ์ฆ position absolute ํน์ position relative์ธ ๊ฒฝ์ฐ, ํด๋น ๋ถ๋ชจ ์์๋ offset parent๊ฐ ๋๋ค. ๋ถ๋ชจ ์์๊ฐ body์ธ ๊ฒฝ์ฐ: body์ ๊ฒฝ์ฐ์๋ offset parent๊ฐ ๋ ์ ์๋ค. ๋ถ๋ชจ ์์๊ฐ td, th, tabled์ธ ๊ฒฝ์ฐ: ํ์ค์ ๋ฐ๋ฅด๋ฉด td, th, table์ธ ๊ฒฝ์ฐ์๋ offset parent๊ฐ ๋ ์ ์์ด์ผ ํ์ง๋ง, ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ ๊ฒ ์๋ํ์ง ์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ td์์ ์์ position: relative์ธ div๋ฅผ ์ฃผ๊ณ absolute๋ฅผ ์ ์ฉํ๋ค. position: absolute ์์๋ ๋ถ๋ชจ ์์๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ค๊ฐ ์์ ๊ฒฝ์ฐ์ ํด๋นํ๋ ์์๋ฅผ offset parent๋ก ์ผ๋๋ค. ์ ๋ฆฌํ๋ฉด position: absolute๋ผ๋ฉด offset์ ๊ธฐ์ค์ ์ด ๋ด dom ์์์์ ๋ถ๋ชจ๊ฐ ์๋๋ผ ์กฐ์๋ค ์ค์ ์์ ๊ฒฝ์ฐ์ ํด๋นํ๋ ์์์ด๋ค. ๋๋ถ๋ถ์ ์์๋ค์ด ๊ธฐ๋ณธ ๊ฐ์ธ position: static์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก๋ position: relative์ธ ๋ถ๋ชจ๋ฅผ offset parent๋ก ์ผ๋๋ค. ๋ฐ๋ผ์ ๋ง์ ๊ฒฝ์ฐ์ position: relative๋ static์ ๊ธฐ์ค์ผ๋ก ์์๋ฅผ ์๋์ ์ธ ์์น๋ก ์ด๋ํ ๋ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ position: absolute์ offset parent๋ก ์ค์ ํ ๋ ์ฌ์ฉํ๋ค. ์ฐธ์กฐ ๊ฐ๋ฅํ offset ๊ฐ๋ค์ด์ offset parent๋ฅผ ์์๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณ์ฐํ ๋ค์ํ offset๊ฐ๋ค์ ์ฐธ์กฐํ ์ ์๋ค.(์ฝ๊ธฐ ์ ์ฉ) offsetLeft offsetTop-> ์์ 2๊ฐ์ ๊ฐ๋ค์ offset parent๋ก ๋ถํฐ ์ผ๋งํผ ๋จ์ด์ ธ ์๋ ์ง๋ฅผ ์ ์ ์๋ค. offsetWidth offsetHeight-> ์์ 2๊ฐ์ ๊ฐ๋ค์ ํด๋น ์์๊ฐ ์ค์ ๋ก ์ฐจ์งํ๋ ํฌ๊ธฐ๋ฅผ ์ ์ ์๋ค. offsetScrollLeft offsetScrollTop-> ์์ 2๊ฐ์ ๊ฐ๋ค์ content๊ฐ offset parent๋ณด๋ค ํฐ ๊ฒฝ์ฐ cotent์ ์ค์ ์์น๋ฅผ ์ ์ ์๋ค. offsetScrollWidth offsetScrollHeight-> ์์ 2๊ฐ์ ๊ฐ๋ค์ content๊ฐ offset parent๋ณด๋ค ํฐ ๊ฒฝ์ฐ cotent์ ์ค์ ํฌ๊ธฐ๋ฅผ ์ ์ ์๋ค. html์ ์์์ overflow: hidden์ ์ฃผ๋ฉด scroll์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค. ๋ถ๋ชจ block ๋ณด๋ค ํฐ content๋ฅผ ๋ฃ์๊ธฐ ๋๋ฌธ์ scroll์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ฐํด ๋ณธ๋ค๋ฉด, ์ง์ง ์ปจํ
์ธ ์ ํฌ๊ธฐ๋ฅผ ์๊ธฐ ์ํด์๋ offsetScroll ๊ฐ์ ํ์ธํด์ผ ํ๋ค.","link":"/2020/07/21/css-absolute-positioning/"},{"title":"HTML Semantic Web","text":"์ด๋ฒ ์ฃผ์ ๋ ๋ณธ๋ ์น์ ๊ธฐ๋ณธ์ ์ธ ์ปจ์
์ด๊ธฐ๋ ํ์ง๋ง html5๊ฐ ๋๋ฉด์ ๋ ๋๋๋ฌ์ง html์ ํน์ง์ด ๋ semantic web์ ๋ํด์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค. ์ด๋ฒ ๋ด์ฉ์ ์ฝ๋์คํผ์ธ 76 CSS Rendering์ ๊ฐ์๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค. Semantic Websemantic web์ ์ฐ๋ฆฌ ๋ง๋ก ๋ฒ์ญํ์ง๋ฉด ์๋ฏธ๋ก ์ ์น์ด๋ผ๊ณ ํ ์ ์๊ฒ ์ง๋ง, ์ข ๋ ๋ช
ํํ ์ค๋ช
์ด ํ์ํ๋ค. semantic web์ html ์์ฒด๋ง์ผ๋ก๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ํ๋์ ๋ฌธ์๊ฐ ๋๋๋ก ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งํ๋ค. html5์ ์ฌ์ฉํด์ ์ป์ ์ ์๋ ๊ฒฐ๊ณผ๋ผ๊ธฐ ๋ณด๋ค๋ html5๊ฐ ์งํฅํ๋ ๋ฐ์ ๊ฐ๊น๋ค. ์๋ํ๋ฉด ์ฌ์ ํ ๋ง์ ์นํ์ด์ง๋ค์ dom๋ค์ ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ html์ด ํ๋์ ๋
๋ฆฝ์ ์ธ ๋ฌธ์๊ฐ ๋๋๋ก ์์ฑํ๊ธฐ ๋ณด๋ค๋ dom์ ์๊ฐ์ ์ธ ์์์ ๋ฐ๋ผ์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ semantic web์ด ์งํฅํ๋๋๋ก ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ html์ ์์ฑ์ ์ต๋ํ ๋ฌธ์์ ๊ฐ์ด ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑํ๋, ํ๋ฉด์ ๋ณด์ด๋ ์์๋ CSS๋ก๋ง ์กฐ์ํ๋๋ก ์์ฑํด์ผ ํ๋ค.(์ด๋ ๊ฒ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.) ๊ทธ๋ ๋ค๋ฉด ์๋ฏธ๋ก ์ ์ผ๋ก ์น์ ์์ฑํ๋ ์ด์ , semantic web์ ๊ตฌ์ฑํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด๋ค ์ด์ ์ ์ป๊ธฐ ์ํด์ ๊ทธ๋ฐ ๊ฒ์ผ๊น? ์น์ ๋ณธ๋ ํ์๋ถํฐ ๋๊ตฌ๋ ์ ๊ทผํ ์ ์๋ ์ ๋ณด ์ฒด๊ณ๋ฅผ ์ถ๊ตฌํ๋ค. ์ฌ๊ธฐ์ โ๋๊ตฌ๋โ์ ๋์์ ์๊ฐ, ์ฒญ๊ฐ, ์ง์ฒด ์ฅ์ ์ธ๋ค์ ํฌํจํ ๋ชจ๋ ์ฌ๋๋ค์ ๋งํ๋ค. ๋ ๋ค์ํ ์ฌ๋๋ค์ด ๊ทธ ์นํ์ด์ง์ ์ ๊ทผํ ์ ์๋ค๋ฉด ๊ทธ ์นํ์ด์ง์ ์น ์ ๊ทผ์ฑ์ด ๋๋ค๊ณ ๋งํ๋ค. semantic web์ ์น ์ ๊ทผ์ฑ์ด ๋์ ์น์ ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ค๋ค. ๊ทธ๋ฐ๋ฐ ์ต๊ทผ์๋ ์๋ก์ด ์ด์ ๋ก semantic web์ ๊ตฌ์ฑ์ ์งํฅํ๊ฒ ๋์๋ค. ์น์ ํตํ ์๋น์ค์ ์น์ ์ฌ์ฉํ๋ ์ด์ฉ์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ํ๋์ ์นํ์ด์ง์ ์๋ ์ฒ๋ฌธํ์ ์ธ ์๊ฐ ๋์๋ค. ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์นํ์ด์ง์ ์ ๊ทผํ ๋๋ ์ ๋ช
ํ ํ์ด์ง๊ฐ ์๋ํ ๋๋ฉ์ธ, ํน์ ip์ฃผ์๋ก ์ ๊ทผํ๋ ์ผ์ ๊ฑฐ์ ์๋ค. ๋๋ถ๋ถ ์ฌ์ฉ์๊ฐ ๊ฒ์์์ง์ ๊ฒ์์ ํด์ ๊ฒ์์ด์ ๋ํ ํ์ด์ง ๋ญํฌ๊ฐ ๋งค๊ฒจ์ง ๊ฒฐ๊ณผ์ ์์๋๋ก ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์์๊ฒ ์นํ์ด์ง๊ฐ ์ ๊ณต๋๊ธฐ ์ํด์๋ ๊ฒ์์์ง์ด ํด๋น ๊ฒ์์ด์ ๋ํ ์ ์๋ฏธํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ์ปจํ
์ธ ๋ผ๋ ๊ฒ์ ์๊ฒ ํด์ฃผ์ด์ผ ํ๋ค. ์ ๊ตฌ์ฑ๋ semantic web์ ๊ฒ์์์ง์ด html๋ฌธ์๋ฅผ ์ฝ์์ ๋ ๋ง์น database์์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๊ฒ์ฒ๋ผ ๊ตฌ์กฐํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ ์ ์๋๋ก ํด์ค๋ค. ์ฆ semantic web์ ๊ตฌ์ฑํจ์ผ๋ก ๋ณด๋ค ๋ machine-friendlyํ ๋ฌธ์๋ฅผ ๋ง๋ค ์ ์๊ณ , ๊ฒ์์์ง์๊ฒ ๋์ ์ ์๋ฅผ ๋ฐ์ ํ๋ฅ ์ด ๋ ์ฌ๋ผ๊ฐ๋ค.(์ค์ ๋ก ์ต๊ทผ์ ์นํ์ด์ง๋ค์ ๊ฒ์ ์์ง์์ ๋์ ๋ญํฌ๋ฅผ ๋ฐ์ ์ ์๋ ๊ฒ์ ์์ง ์ต์ ํ์ ๋ง์ ๋
ธ๋ ฅ์ ๊ธฐ์ธ์ด๊ณ ์๋ค.) ์ ๋ฆฌํ์๋ฉด semantic web์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ ๊ฐ๊ด์ ์ผ๋ก๋ ๋ค์์ ์์น์ ์งํค๋ ๊ฒ์ด ์ข๋ค. DOM์ด ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑ๋๋๋ก, ํ๋ฉด ์์๋ฅผ ๊ธฐ์ค์ผ๋ก DOM์ ์์ฑํ์ง ์๊ณ ๋ด์ฉ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑํ๋ค. ์์ ์ด์ ๋ก ์ธํด, ์ค์ ๋๋๊ธฐ ์ํ ๋ชฉ์ ์ด๋ ์ฅ์์ ์ํ ๋ชฉ์ , layout์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก div, pํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์ํํ๋ค. ํ๊ทธ ์์ฑ ์, ์์ํ ์๋ ๋ฌธ์๋ผ๊ณ ๊ฐ์ ํ์ ๊ฒฝ์ฐ ํ๊ทธ๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ข์ ์ง์ ๊ด์ ์์ ํ๊ทธ๋ฅผ ์์ฑํ๋ค. ์์ ์ด์ ๋ก semantic tag๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค.(์ ๋ชฉ์ ํํํ๊ณ ์์ผ๋ฉด, header tag, ๊ธ์ ํํํ๊ณ ์์ผ๋ฉด article tag) ๋ฐ๋ผ์ semantic web์ ์ฒ ํ์ ๋ง์ถฐ์ ํ๊ทธ๋ฅผ ๊ตฌ์ฑํ๋ค๋ ๋ง์ ๋ ์ด์ ํ๋ฉด์ ๊ตฌ์ฑ์์๋ก dom์ ํ๊ฐํ ์ ์๋ค๋ ๋ง์ด๋ค. ์ด๋ค ์์๊ฐ dom์ ๊ตฌ ์กฐ์ ๋จผ์ ์์ฑ๋์์ ์ง๋ผ๋, ํ๋ฉด ๊ตฌ์ฑ์์๋ ์ ์ผ ๋ฐ์ ์์นํ๊ฑฐ๋ ์ค๋ฅธ์ชฝ์ ์์นํ ์๋ ์๊ณ , ์์ ๋ณด์ด์ง ์๊ฒ ๋ง๋ค ์๋ ์๋ค. Semantic Web์ ์ํ CSS Selector์์์ semantic web์ ์ํด์๋ DOM์ ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑํด์ผ ํ๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑํ DOM์ ๋ฐํ์ผ๋ก ํ๋ฉด ์์๋ CSS์์ ์กฐ์ํ๋๋ก ํ๊ธฐ ์ํด์๋ html๊ณผ CSS๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒ์ผ๊น? ์ ์ด์ ๊ทธ๋ ๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ ์ด๋ ต๊ธฐ ๋๋ฌธ์ DOM๊ตฌ์กฐ์ ํ๋ฉด์์๊ฐ ์์ด๋๋ก ๊ตฌ์ฑํ๊ฒ ๋ ๊ฒ์ด ์๋๊ฐํ๋ ์๋ฌธ์ด ๋ ๋ค. ๋ฌผ๋ก ์ฌ์ด ์์
์ ์๋๋ค. ์ด ์์
์ ์ํด์๋ CSS Selector์ ์ ์ ํ ํ์ฉ์ด ํ์ํ๋ค. class๋ฅผ ์ด์ฉํ์ฌ semantic web์ ๊ตฌ์ฑํ๋ ค๊ณ ํ ๋์ ๋ฌธ์ ์ ๋งจ ์ฒ์ semantic web์ ๊ตฌ์ฑํ๋ ค๊ณ ํ ๋, ์ฝ๊ฒ ์ ํํ๋ ๋ฐฉ๋ฒ์ class๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ class๋ฅผ ์ฌ์ฉํด์ semantic web์ ๊ตฌ์ฑํ๋ ค๋ ์ ํ์ class์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ค๋ ์ ํ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ก ์ธํด ์คํ์ผ๊ณผ ์๋ฏธ๋ก ์ ๊ตฌ์กฐ ์ฌ์ด์ ์์กด๊ด๊ณ๊ฐ ์๊ธด๋ค. ์ด๋ ๊ฒ ๋๋ฉด, DOM์ class์ ๋ง์ถฐ์ ๊ตฌ์ฑํ๊ฒ ๋๊ณ , ์ด๋ฐ ์์กด ๊ด๊ณ๋ก ์ธํด ํ๊ทธ์ ๋ณํ๊ฐ ๊ธฐ์กด์ ์คํ์ผ์ ๊นจ๋จ๋ฆด ์๋ ์๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ์ฌ์ดํธ๋ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก, css๋ฅผ ์ฌ์ฉํ๋ ์์๊ฐ ๋ง์ผ๋ฉด ๋ง์ ์๋ก html๊ณผ css ๋ชจ๋ ์์ ํ๊ธฐ๊ฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์, ๋์ค์๋ ์ ์ง๋ณด์๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ html๊ณผ css๊ฐ ๋ง๋ค์ด ์ง๋ค. ์ฆ class๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ semantic web์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค. CSS Selector๋ฅผ ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑ๋ dom์ ๋ง์ถ๋ ๋ฐฉ๋ฒCSS Selector์ ์ข
๋ฅ ์ค์๋ CSS Attribute Selector๊ฐ ์๋ค. attribute selector๋ ํด๋น element์ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก element๋ฅผ ์ ํํ ์ ์๋๋ก ํด์ค๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ input์์๋ฅผ ์ ํํ ๋ input[type=โtextโ]์ ํ์์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ Attribute Selector์ ๊ตฌ์กฐ๊ฐ SQL Query์ ๊ตฌ์กฐ์ ์ ์ฌํ๋ค SQL Query์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค SELECT * FROM TABLE WHERE field conditions ๊ทธ๋ฆฌ๊ณ attribut selector์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค. base selector[field condition][...][...] ๋ฐ๋ผ์ semantic์ผ๋ก dom์ ๊ตฌ์ฑํ ๋์ ์์ฑ ๊ฐ์ ํ์ฉํ์ฌ ๊ตฌ์ฑํ๊ณ CSS attribute selector๋ฅผ ์ฌ์ฉํ๋ฉด semantic๊ตฌ์กฐ์ ๋ฐ๋ผ ์คํ์ผ์ด ์ ์ฉ๋๋๋ก html๊ณผ css๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด html๊ณผ CSS๋ฅผ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ๋ ๊ฒ์ด๋ค. See the Pen OJMdXWM by psy082 (@psy082) on CodePen. ์ผ๋ฐ์ ์ผ๋ก name, pw, nick์ด๋ผ๋ identifier๋ ์๋ฒ์ ํฉ์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์ด๋ฆ์ ๋ฐ๊พธ์ง ์๋ ํ ์ ์ง๋๋ ๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์คํ์ผ์ ์์ ๊ฐ์ด ์ ์ฉํ๋ฉด data ๊ตฌ์กฐ์ ๊ทผ๊ฑฐ๋ฅผ ๋ ์คํ์ผ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋๋ฌธ์ dom์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋์์ธ ๋ณ๊ฒฝ์ด ์์ ๋กญ๊ฒ ๋๋ค. HTML5 MicrodataApple, Mozilla, Opera๋ฑ ์ฃผ์ํ ์น ๋ธ๋ผ์ฐ์ ๋ฒค๋ ํ์ฌ๋ค์ด ์ฐธ์ฌํ๋ WHATWG๋ผ๋ W3C ์ฐํ ์ปค๋ฎค๋ํฐ๊ฐ ์๋ค. W3C ์ฐํ ์กฐ์ง์ด๋ผ๊ณ ํ์ง๋ง W3C๋ณด๋ค ๋ ๊ฐ๋ ฅํ ๊ถํ์ผ๋ก(์๋ณธ๋ ์๊ธฐ๋ค๊บผ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์๊ธฐ๋ค์ด ๋ง๋๋๊นโฆ) ์น ํ์ค ์์ฑ์ ์ฃผ๋ํ๊ณ ์๋ค. ์ด WHATWG์์ semantic web์ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋๋ก microdata๋ผ๋ ๊ท๊ฒฉ์ ๋ง๋ค์๋ค. ์ด ๊ท๊ฒฉ์ element์ microdata attribute๋ฅผ ์ฃผ๋ ๋ฐฉ์์ผ๋ก semantic web์ ๊ตฌ์ฑํ๋๋ก ์คํ์ ๋ง๋ค์๋ค. microdata๋ ์์ ํ ํ์ค์ ์๋์ง๋ง ํ์ฌ html5์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ธฐ๋ณธ ์์ฑ ๊ฐ์ผ๋ก ์ ๊ณต๋๋ค. microdata๋ ๋ค์๊ณผ ๊ฐ์ attribute๋ฅผ ๊ฐ์ง๊ณ ์๋ค. itemscope: ์ ์ฉ ๋ฒ์ ์ค์ , ํ์ฌ ์๋ฏธ๊ฐ ์ ์ฉ๋๋ ํ๊ทธ์ ๋ฒ์๋ฅผ ์ค์ ํ๋ค. itemtype: ์๋ฏธ ๊ตฌ์กฐ๋ฅผ ์ค๋ช
ํด ์ฃผ๋ ์ฐธ์กฐ ์๋ฃ(๋ฌธ๋ฒ ๋ ํผ๋ฐ์ค์ ๊ฐ์ ๊ฒ์ด๋ค.) itemid: itemscope ๋ด์์์ ํญ๋ชฉ์ ๊ณ ์ ์๋ณ์ itemprop: itemscope ๋ด์์์ ์์ฑ๋ช
, itemtype์์ ์ ์๋ ํญ๋ชฉ์ด์ด์ผ ํ๋ค.(๊ถ์ฅ) content: ๋น๊ฐ์์ ์ธ ํญ๋ชฉ์ผ ๋์ ๊ฐ์ ์ค์ value: ๊ฐ์์ ์ธ ๊ฐ๊ณผ ๋ค๋ฅด๊ฒ ๋ด๊ฐ ์ํ๋ ๊ฐ์ ์ค์ itemref: itemscope ๋ด์ ์ ์๋ ํญ๋ชฉ์ด ์๋ ํญ๋ชฉ์ ์ค์ ํ์คํ๋ microdata๋ฅผ schema๋ฅผ ๊ณต์ ํ๋ ์ฌ์ดํธ schema.org์ ๊ฐ๋ณด๋ฉด semantic์ผ๋ก ์น์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๋ชจ๋ธ๋ค์ ํ์ธํด๋ณผ ์ ์๋ค. microdata๋ฅผ ์ฌ์ฉํ๋ฉด html์์ ์ ๊ณตํ๋ ํ๊ทธ๋ค๋ง์ผ๋ก๋ ํํํ ์ ์๋ ๊ทธ ์ด์์ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ฌธ์๋ฅผ ๋ง๋ค ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ต๊ทผ์ ๋ง์ด ์ ์ฉ๋๋ ๋คํฌ ํ
๋ง๋ฅผ ์นํ์ด์ง์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๊ฐ? ๋ง์ฝ์ dom๊ณผ ์คํ์ผ์ ์๋ก ์์กดํ๋๋ก ๊ตฌ์ฑ๋์๋ค๋ฉด ๋คํฌ ํ
๋ง๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๊ต์ฅํ ์ด๋ ต๋ค.(์คํ์ผ์ ๋ณํ๊ฐ ํ์ด์ง์ ์ด๋ค ์ํฅ์ ์ค์ง ๋ค ํ์
ํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.) ์ฆ, ๋จ์ํ๊ฒ attribute selector๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด์ semantic web์ด ๋๋ ๊ฒ์ด ์๋๋ผ ์๋ฏธ๋ฅผ ๊ฐ์ง ๊ตฌ์กฐ๋ก ์น์ ๊ตฌ์ฑํด์ผ semantic web์ด ๋ง๋ค์ด ์ง๋ ๊ฒ์ด๋ค. microdata๋ ์๋ฏธ๋ก ์ ์ธ ๊ตฌ์กฐ๋ก ์น์ ๊ตฌ์ฑํ ์ ์๋๋ก ๋์์ค๋ค. ์๋์ ์์ ๋ microdata๋ฅผ ์ฌ์ฉํด ์นํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ์์์ด๋ค. See the Pen semantic web ex2 by psy082 (@psy082) on CodePen. ์์ ์์ ๋ฅผ ๋ณด๋ฉด 2๊ฐ์ itemscope๊ฐ ์๊ณ ๊ฐ itemscope๋ itemtype์ ์ํด์ ์ ์๋๋ค. microdata attribute๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฏธ๋ฅผ ๊ตฌ์ฑํ ๋ค์๋ css(scss)์์ ์๋ฏธ๋ก ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์คํ์ผ์ ์ ์ฉํ๋ค. ์ฆ ์คํ์ผ์ ๋ฐ๋ผ์ dom์ด ๊ตฌ์ฑ๋๋ ๊ฒ์ด ์๋๋ผ dom์ ์๋ฏธ๋ก ์ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ์คํ์ผ์ด ์ ์ฉ๋์๋ค. โป microdata๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ฅ์ ์ ์น ํฌ๋กค๋ง์๋ ์ฉ์ดํ ํ์ด์ง๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค. microdata๊ตฌ์กฐ์ ๋ฐ๋ผ ์นํ์ด์ง๋ฅผ ํ์ฑํ๋ ์๋ฒ ๋ถ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ microdata๋ฅผ ์ฌ์ฉํ ์นํ์ด์ง๋ ๋ฐ์ดํฐ ์ถ์ถ์ด ๋งค์ฐ ์ฉ์ดํ๋ค. HTML5 DatasetHTML5์์๋ ์ด๋ค element๋ ์ง data-๋ก ์์ํ๋ ์ฌ์ฉ์ ์ ์ ์์ฑ์ ๋ถ์ฌํ ์ ์๋ค. HTML5์ dom์ element๋ง๋ค dataset์ด๋ผ๋ key๋ฅผ ๊ฐ์ง๊ณ ์๊ณ dom์์ data-๋ก ์์ํ๋ ์์ฑ์ ์์ฑ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค. data-set๋ ํ์ค spec์ด๊ธฐ ๋๋ฌธ์ microdata๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ์ฌ์ฉ์ ์ ์ ์์ฑ์ธ data-์์ฑ์ผ๋ก semantic web์ ๊ตฌ์ฑํ ์๋ ์๋ค. ์๋ ์์ ๋ ์์ ์์ ์ ๋์ผํ ๊ตฌ์กฐ์ด์ง๋ง data-์์ฑ์ ์ด์ฉํ ์์์ด๋ค. See the Pen semantic web ex3 by psy082 (@psy082) on CodePen. ์ ๋ฆฌ์ ๋ฆฌํ์๋ฉด semantic web์ ์ฝ๊ฒ ์์ฑ๋๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์๋๋ผ dom์ ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ๊ทธ dom์ ๊ตฌ์กฐ์ ๋ง์ถฐ์ ์คํ์ผ์ ์ ์ฉํ๋ ๋ฐฉ์์ผ๋ก dom๊ณผ ์คํ์ผ์ ๋
๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌํ ๊ฒฐ๊ณผ๋ก ๋ง๋ค์ด์ง๋ค. ๋ฐ๋ผ์ ์ถฉ๋ถํ ๊ณ ๋ฏผ๊ณผ ์ค์ ๋ก semantic web์ ๊ตฌ์ฑํด๋ณด๋ ๊ฒฝํ์ด ๋ชจ๋ ํ์ํ๋ค. semantic web์ ๊ตฌ์ฑํ๊ฒ ๋๋ค๋ฉด ์น ์ ๊ทผ์ฑ์ด ๋์์ง ๋ฟ๋๋ฌ ๊ฒ์์์ง ์ต์ ํ์ ์น ํฌ๋กค๋ง์๋ ๋์์ด ๋๋ค. ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ์๋ช
์ด ๊ธด ์นํ์ด์ง ๊ตฌ์ฑ์ ํ ์ ์๋๋ก ๊ณ ๋ฏผ์ ๋ง์ด ํด๋ณด์ โป ์ฐธ๊ณ - HTML5 Semantic Tag header: ํค๋๋ฅผ ์๋ฏธ nav: ๋ค์ด๊ฒ์ด์
์ ์๋ฏธ aside: ์ฌ์ด๋์ ์์นํ๋ ๊ณต๊ฐ์ ์๋ฏธ section: ์ฌ๋ฌ ์ค์ฌ ๋ด์ฉ์ ๊ฐ์ธ๋ ๊ณต๊ฐ์ ์๋ฏธ article: ๊ธ์ ์๋ฏธ footer: ํธํฐ๋ฅผ ์๋ฏธ ์์ semantic tag๋ค์ css rendering system์ ์
์ฅ์์๋ div ํ๊ทธ์ ๋์ผํ์ง๋ง ์๋ฏธ๋ก ์ dom ๊ตฌ์ฑ์ ์
์ฅ์์๋ ํด๋น ๋ด์ฉ์ด ๋ฌด์์ธ์ง, ๊ทธ ์๋ฏธ๋ฅผ ์๋ ค์ค๋ค.","link":"/2020/07/21/html-semantic-web/"},{"title":"JS Generator Chaining ์ดํดํ๊ธฐ","text":"์ฝ๋ ์คํผ์ธ 77 es6+ ๊ธฐ์ดํธ ๊ฐ์์์๋ generator๋ก chaining์ ๊ตฌ์ฑํ๋ ์์ ๋ฅผ ๋ค๋ฃฌ๋ค. ํด๋น ๊ฐ์์ธ 4๋ฒ์งธ ๊ฐ์๋ ์ด ์์ ์ธ์๋ ์ค์ํ ๋ค๋ฅธ ์์ ๋ค์ ๋ค๋ฃจ์ง๋ง ์ด๋ฒ ๊ธ์์๋ generator chaining์ ๋์์ ์ดํด๋ณด๋ฉด์ generator์ ๋์ ๋ฐฉ์์ ์ดํดํด ๋ณด๊ฒ ๋ค. ์์ผ๋ก ๋ค๋ฃฐ ์์ ๋ ํฌ๊ฒ ๋๊ฐ์ง ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ฐ์ class๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ Stream ๊ฐ์ฒด์ด๋ค. ํด๋น ๊ฐ์ฒด๋ generator๋ค์ ์
๋ ฅ๋ฐ์์ ์
๋ ฅ๋ฐ์ ์์๋๋ก chaining์ ๊ฑธ์ด์ ์คํํ ์ ์๊ฒ ํด์ค๋ค. ๋ ๋ฒ์งธ๋ Stream์ ์
๋ ฅ๋ generator ๊ฐ์ฒด๋ค์ด๋ค. ์ด generator ๊ฐ์ฒด๋ค์ ๊ผญ Stream ๊ฐ์ฒด์ ์
๋ ฅ๋์ง ์๋๋ผ๋ ๋
๋ฆฝ์ ์ผ๋ก ์๋ํ๋ generator๋ค์ด๋ค.(๋ฌผ๋ก ๋ชจ๋ generator๊ฐ ์ซ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋ generator๋ผ๋ ์ ์ ๊ฐ ์๋ค.) ๊ทธ๋ ๋ค๋ฉด generator chaining์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์์ ๋ฅผ ๋ณด๋ฉด์ ์ดํด๋ณด์. 1234567891011121314151617181920212223const Stream = class { static get(v) { return new Stream(v); } constructor(v) { this.v = v; this.filters = []; } add(gene, ...arg) { this.filters.push(v => gene(v, ...arg)); console.log(this.filters.toString()); return this; } *gene() { let v = this.v; for (const f of this.filters) { console.log(v); v = f(v); } console.log(\"yield gene\", v); yield* v; }};Colored by Color Scriptercs Stream ๊ฐ์ฒด๋ฅผ ๋จผ์ ์ดํด๋ณด๊ฒ ๋ค. ์ฐ์ Stream๊ฐ์ฒด๋ ์์ฑ๋ ๋, chaining์ผ๋ก ์ฒ๋ฆฌํ ์ซ์ ๋ฐฐ์ด v๋ฅผ ๋ฐ์์ ์ ์ฅํ ๋ค ์ ๋ค๋ ์ดํฐ๋ค์ ์ ์ฅํ ๋ฐฐ์ด filters๋ฅผ ์ ์ฅํ๋ค. Stream ๊ฐ์ฒด์์ ์ค์ํ ๋ฉ์๋๋ generator๋ฅผ ์ ์ฅํ๋ add ๋ฉ์๋์ generator๋ฅผ ์คํํ๋ gene ๋ฉ์๋(์ ๋ค๋ ์ดํฐ)์ด๋ค. add ๋ฉ์๋๋ ์ ๋ค๋ ์ดํฐ์ ์ ๋ค๋ ์ดํฐ์ ์
๋ ฅํ ๋ณ์๋ค์(๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์์ด๋ ๋๋ค.) ๋งค๊ฐ๋ณ์๋ก ์
๋ ฅ๋ฐ๋๋ค. ๊ทธ ๋ค์ v๋ฅผ ์
๋ ฅ ๋ฐ์ generator๋ฅผ ๋ฐํํ๋ arrow function์ filters์ ์ ์ฅํ๋ค. ๊ทธ ๋ค์ Stream ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ this๋ฅผ ๋ฐํํ๊ณ ์ข
๋ฃํ๋ค. gene ๋ฉ์๋๋ filters์ ์ ์ฅ๋ arrow function์ ํ๋์ฉ ๊บผ๋ด์ ์คํ์ํค๊ณ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฐ์ ์ดํฐ๋ ์ดํฐ(์ ๋ค๋ ์ดํฐ๋ฅผ ์ฒ์ ์คํํ๋ฉด generator suspend ์ํ๊ฐ ๋๊ณ next ํจ์ ํธ์ถ๋ฅผ ์คํํ ์ ์๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ฏ๋ก)๋ฅผ ๋ค์ v๊ฐ์ผ๋ก ํ ๋นํ๋ค. gene ๋ฉ์๋๋ filters ์์ ์ ์ฅ๋ ์ ๋ค๋ ์ดํฐ๋ค์ ์์๋๋ก ์ดํฐ๋ ์ดํฐ๋ก ์ ๋ฌํจ์ผ๋ก์จ ์ฒด์ด๋์ ๋ง๋ค๋ค. ์ฒด์ด๋์ด ๋๋๋ฉด ๋ง๋ค์ด์ง ์ฒด์ด๋๋ ์ ๋ค๋ ์ดํฐ๋ฅผ(v์ ์ ์ฅ๋์ด ์๋ค.) yield*๋ก ๋ฐํํ๋ค. 12345678910111213141516171819202122232425262728293031323334const three = function* (data) { console.log(`three: ${data}`); for (const v of data) { console.log(\"three\", three.cnt++); if (!(v % 3)) yield v; }};three.cnt = 0; const even = function* (data) { console.log(`even: ${data}`); for (const v of data) { console.log(\"even\", even.cnt++); if (!(v % 2)) yield v; }};even.cnt = 0; const take = function* (data, n) { console.log(`take: ${data}`); for (const v of data) { console.log(\"take\", take.cnt++); if (n--) yield v; else break; }};take.cnt = 0; for (const v of Stream.get([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) .add(three) .add(even) .add(take, 2) .gene()) console.log(v);Colored by Color Scriptercs ์์ 3๊ฐ์ generator ๊ฐ๊ฐ์ด ํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค. three - 3์ ๋ฐฐ์์ธ ๊ฐ๋ง ๋ฐํํ๋ค. even - ์ง์์ธ ๊ฐ๋ง ๋ฐํํ๋ค. take - n ๋ฒ์งธ๊น์ง์ ๊ฐ๋ง ๋ฐํํ๋ค. ๋ง์ฝ์ 3๊ฐ์ generator์ chanining์ ๊ฑธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ทธ๋ฆฌ๊ณ chaniningํ๋ ์์๋ฅผ ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ฐ์ ์์ ์์ ์ฝ๋๋ฅผ ๋๋ฆฌ๋ฉด 6๊ณผ 12๊ฐ ์ถ๋ ฅ๋๋ค. ๋๋ต์ ์ผ๋ก chaining๋ ์ฝ๋์ ๋์์ ์ดํดํ๋ฉด ์ด๋ ๋ค. '3์ ๋ฐฐ์์ด๋ฉด์ 2์ ๋ฐฐ์์ธ ์ซ์๋ฅผ ๋จผ์ ๋์ค๋ ์์๋๋ก 2๊ฐ๊น์ง๋ง ์ถ๋ ฅํ๋ผ'. ๋ง์ฝ์ generator chaining์ ์ด์ฉํ์ง ์๊ณ ์์ ๋ก์ง์ ๊ตฌ์ฑํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์๋ง 3์ค for๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ ๋ก์ง์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๊ท ํจ์ ๋ก์ง์ผ๋ก ๊ตฌ์ฑํ ์ ์์ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์ด๋ฐ ๋๊ฐ์ง ๋ฐฉ๋ฒ ๋ณด๋ค generator chining์ ์ด์ฉํ๋๊ฑด ์ฝ๋์ ์ดํด๋ ๋ณ๊ฒฝ์ ํจ์ฌ ์ฉ์ดํ๋ค. ๊ทธ๋์ ์ ์ฐํจ์ด ํ์ํ ๋ค์ค loop๋ก์ง์ด๋ผ๋ฉด generator๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ๋ค. ์ฝ๋ ์์ ์ ์ฝ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ณด๋ฉด์ ์ฝ๋์ ์งํน์ ์ข ๋ ์์ธํ ์ดํด๋ณด๊ฒ ๋ค. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758const Stream = class { static get(v) { return new Stream(v); } constructor(v) { this.v = v; this.filters = []; } add(gene, ...arg) { this.filters.push((v) => gene(v, ...arg)); console.log(this.filters.toString()); return this; } *gene() { let v = this.v; for (const f of this.filters) { console.log(v); v = f(v); } console.log(\"yield gene\", v); yield* v; }}; const three = function* (data) { console.log(`three: ${data}`); for (const v of data) { console.log(\"three\", three.cnt++); if (!(v % 3)) yield v; }};three.cnt = 0; const even = function* (data) { console.log(`even: ${data}`); for (const v of data) { console.log(\"even\", even.cnt++); if (!(v % 2)) yield v; }};even.cnt = 0; const take = function* (data, n) { console.log(`take: ${data}`); for (const v of data) { console.log(\"take\", take.cnt++); if (n--) yield v; else break; }};take.cnt = 0; for (const v of Stream.get([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) .add(three) .add(even) .add(take, 2) .gene()) console.log(v);Colored by Color Scriptercs ์์ ์์ ์ฝ๋๋ฅผ ์คํ์์ผ ๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์๋์ ๊ฒฐ๊ณผ๋ฅผ 4๊ฐ๋ก ๋๋์ด์ ์ค๋ช
ํ๊ฒ ๋ค. 1234567891011121314151617181920212223 // 1. add ํจ์ ๋ด๋ถ v => gene(v, ...arg) v => gene(v, ...arg),v => gene(v, ...arg) v => gene(v, ...arg),v => gene(v, ...arg),v => gene(v, ...arg) // 2. *gene ์ ๋ค๋ ์ดํฐ ๋ด๋ถ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] Object [Generator] {} Object [Generator] {} yield gene Object [Generator] {} // 3. three, even, take ๊ฐ ํจ์์ ๋ด๋ถ take: [object Generator] even: [object Generator] three: 1,2,3,4,5,6,7,8,9,10,11,12 // 4. chaining๋ ๋ก์ง์ [1...12]์ ๋ฐฐ์ด์ด ์
๋ ฅ๋์์ ๋, for of ๋ฅผ ํตํด console.log์์ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๊ฐ 6 12Colored by Color Scriptercs ์ฐ์ chaining์ three, even, take ์ ๋ค๋ ์ดํฐ๊ฐ Stream ๊ฐ์ฒด ๋ด์ filters ๋ฐฐ์ด์ ์ ์ฅ๋จ์ผ๋ก ์์๋์๋ค. filters ๋ฐฐ์ด์ 3๊ฐ์ ์ ๋ค๋ ์ดํฐ๊ฐ ์ ์ฅ๋์๊ธฐ ๋๋ฌธ์ ์
๋ ฅ์ ๋ฐ์ ์ ๋ค๋ ์ดํฐ๋ฅผ ๋ฐํํ๋, 3๊ฐ์ arrow function์ด ์ ์ฅ๋๋ค. gene ์ ๋ค๋ ์ดํฐ๊ฐ ์คํ๋์๋ค. v ๊ฐ์ ํ์ธํด๋ณด๋ Stream ๊ฐ์ฒด์ ๋ณ์ v์ ์ ์ฅ๋ [1โฆ12]์ ๋ฐฐ์ด์ด ๊ทธ๋๋ก ์ถ๋ ฅ๋์๋ค. for loop๊ฐ ์คํ๋๋ฉด์ v = f(v);๊ฐ ๋ฐ๋ณต ์คํ๋๋ค. loop๊ฐ ์ฒ์ ์์๋ ๋, ๋ฐฐ์ด [1โฆ12]๊ธฐ ์ ๋ค๋ ์ดํฐ three์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋์ด์ ์คํ๋๋ค. ๋ฐ๋ผ์ three๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฐํ๋์๊ณ ๋ค์ v์ ์ ์ฅ๋์๋ค. ๋ค์ loop์์ three ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ์ ๋ค๋ ์ดํฐ even์ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ๋์ด์ ์คํ๋๋ค. ์ด๋ฒ์๋ even์ ์ฌ์ฉํ ์ ์๋ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฐํ๋์๊ณ ๋ค์ v์ ์ ์ฅ๋์๋ค. ๋ง์ง๋ง loop์์ even ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ์ ๋ค๋ ์ดํฐ take์ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ๋๋ค. ์ ๋ค๋ ์ดํฐ ์คํ์ ๋ฐํํ๋ ๊ฐ์ฒด๋ ์ดํฐ๋ ์ดํฐ์ผ๋ฟ๋ง ์๋๋ผ ์ดํฐ๋ฌ๋ธ์ด๊ธฐ ๋๋ฌธ์ for of ์ ๋์์ด๊ณ ๋ฐ๋ผ์ take ์ดํฐ๋ฌ๋ธ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค. for of๊ฐ ์์๋์๊ธฐ ๋๋ฌธ์ ์ ๋ค๋ ์ดํฐ take๊ฐ ์คํ๋์๊ณ take: [object Generator]๋ฅผ ์ถ๋ ฅํ ๋ค์ for of ๊ฐ ์คํ๋์ด์ even ์ดํฐ๋ฌ๋ธ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค. ๋ฐ๋ผ์ ์ ๋ค๋ ์ดํฐ even์ด ๋ ์คํ๋๋ค. ์คํ๋์๊ธฐ ๋๋ฌธ์ even: [object Generator]๋ฅผ ์ฝ์์ ์ถ๋ ฅํ ๋ค even๋ for of ๋ก three ์ดํฐ๋ฌ๋ธ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค. ์ ๋ค๋ ์ดํฐ three๊ฐ ์คํ๋์๊ธฐ ๋๋ฌธ์ three: 1,2,3,4,5,6,7,8,9,10,11,12๋ฅผ ์ถ๋ ฅํ ๋ค 3์ ๋ฐฐ์๋ง yieldํ๋ค. yield๋ ๊ฐ์ ์ ๋ค๋ ์ดํฐ even์ for of์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ค. ์ ๋ค๋ ์ดํฐ even์์๋ ์ ๋ฌ๋ฐ์ 3์ ๋ฐฐ์ ์ค์์ ์ง์์ธ ๊ฐ์ yieldํ๋ค. yield๋ ๊ฐ์ ์ ๋ค๋ ์ดํฐ take์ for of์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ค. ๋ฐ๋ผ์ take๋ 3์ ๋ฐฐ์์ด๋ฉด์ 2์ ๋ฐฐ์์ธ 6์ ๋ฐฐ์์ ๊ฐ์ 2๊ฐ๋ง yieldํ๋ค. โป ์์ ์ฝ๋ ์งํ์์ ์ ์ํด์ ๋ณผ ์ ์ ๋ค๋ ์ดํฐ three, even, take๋ yield๋ฅผ ์ฌ์ฉํ์ง๋ง Stream๊ฐ์ฒด์ gene generator๋ yield๋ฅผ ์ฌ์ฉํ๋ค. yield* ํค์๋๋ yield* ๋ค์ ๋ค๋ฅธ ์คํ๋ ์ ๋ค๋ ์ดํฐ(์ดํฐ๋ฌ๋ธ์ดํฐ๋ ์ดํฐ๊ฐ ๋)๊ฐ ์ฌ ๊ฒฝ์ฐ์ yield๋ฅผ ํด๋น ์ ๋ค๋ ์ดํฐ์ ์์ํ๋ค. ์์ ์ฝ๋์์ ๋ณด์๋ฉด ์ ๋ค๋ ์ดํฐ๋ three, even, take ๋ด๋ถ์์ for of ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด๊ฐ ์
๋ ฅ์ผ๋ก ๋ค์ด์จ๋ค๋ ๊ฒ์ ์ ์ ๋ก ํ๋ค. ์์ ์์ ์์๋ ๊ฐ ์ ๋ค๋ ์ดํฐ๋ค์ด ์คํ๋์ด์ ์ดํฐ๋ฌ๋ธ์ดํฐ๋ ์ดํฐ๋ก ๋ฐํ๋ ๊ฐ์ ๋ค์ ์ ๋ค๋ ์ดํฐ์ ๋๊ธฐ๋ ๊ตฌ์กฐ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ yield ํค์๋๋ฅผ ์ฌ์ฉํ์์ง๋ง ์ ๋ค๋ ์ดํฐ gene์ ๊ฒฐ๊ตญ generator์ ์คํ์ ์์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ yield* ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ ๋ค๋ ์ดํฐ ์ฒด์ด๋์ด ์งํ๋๋๋ก ํ ๊ฒ์ด๋ค.","link":"/2020/07/25/js-generator-chaining/"},{"title":"Git & Github ์์ฝ ์ ๋ฆฌ","text":"git๊ณผ github์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์ ๋ฆฌํ๋ค VCS์ GitGit์ VCS(Version Control System) ์ค ํ๋์ด๋ค. Version Control System์์ Version์ด ์๋ฏธํ๋ ๊ฒ์ ๊ฐ๋ฐ ์์
์ด ์งํ๋๋ ํด๋ ๋ฐ ํ์ ํด๋์ ํ์ผ๋ค์ history๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ VCS๊ฐ ํ๋ ์ญํ ์ ๊ฐ๋ฐ์ ์งํํ ๋, ๊ฐ๋ฐ์ ํ๊ฒฝ์ด ๋๋ ํด๋์ ํ์ผ๋ค์ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด VSC๊ฐ ๊ฐ๋ฐ์ ์งํํ๋ ๋ฐ ์์ด์ ํ์ํ ์ด์ ๋ ๋ฌด์์ผ๊น? ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค. ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ ๋ด์ญ ๊ธฐ๋ก ๋ฐ ๊ด๋ฆฌ ํ์ํ ์ด์ ์ํ๋ก rollback ํ๋จ์ ๊ฐ๋ฐ์ ์ฒด๊ณ์ ์ด๊ณ ํจ๊ณผ์ ์ธ ํ์
์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธ ํ ๋, ๋ง์ ๊ฒฝ์ฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ณ ํด๋น ๋ฒ๊ทธ๊ฐ ์น๋ช
์ ์ด์ด์ ์ด์ ์ฝ๋๋ก ๋์๊ฐ์ผ ํ ๋๊ฐ ์๋ค. ๋ํ ํ ๋จ์๋ก ํ์
์ด ์งํ๋ ๋, ์ด๋ค ์ฌ๋์ด ์ ์ฉํ ์ฝ๋์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ผ์ ๊ท๋ชจ ์ด์์ ํ๋ก์ ํธ๊ฐ ์งํ๋ ๊ฒฝ์ฐ VCS์ ์ฌ์ฉ์ด ํ์์ ์ด๋ค. RepositoryRepository๋ git์ด ๊ด๋ฆฌํ๋ ํด๋๋ฅผ ์๋ฏธํ๋ค. ์ผ๋ฐ ํด๋๋ git์๊ฒ ์๋ฌด ์๋ฏธ๊ฐ ์์ง๋ง ํด๋น ํด๋ ๋ด๋ถ์์ git init์ ํตํด .git ํด๋๊ฐ ์์ฑ๋์ด์ ํด๋น ํด๋์ ๋ณ๊ฒฝ์ฌํญ์ด git์ ์ํด ์ถ์ ๋๊ธฐ ์์ํ๋ฉด ๊ทธ ํด๋๋ฅผ repository๋ผ๊ณ ํ๋ค. git repository๋ 2๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค. local repository: local(๊ฐ๋ฐ์ ๊ฐ์ธ์ ์ปดํจํฐ)์ ์ ์ฅ๋ repository remote repository: ์ค์ ์๋ฒ์ ์ ์ฅ๋ repository, git์ ํ ๋จ์์ ํ์
์ ํ ๋ ์ฌ์ฉํ๋ค๋ฉด ํ์ ์์๋ ๊ฐ๋ฐ์๋ค์ด ๊ณตํต์ ์ผ๋ก ์ฐธ์กฐํ๋ repository๊ฐ ์์ด์ผ ํ ๊ฒ์ด๋ค. ํ์์ ๊ณต๋์ผ๋ก(๊ผญ ํ ๋จ์๊ฐ ์๋๋๋ผ๋) ์๊ฒฉ์ผ๋ก ๊ด๋ฆฌํ๋ repository๋ฅผ remote repository๋ผ๊ณ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก http๋ ftp๋ก ์ ์๊ฐ๋ฅํ ์๋ฒ์์ ๊ด๋ฆฌ๋๋ค. Staging and Commit figure 1. flow of git process git init์ ํตํด repository๊ฐ ๋ ํด๋(์ฆ, repository)๋ git์ ์ํด ๋ณ๊ฒฝ ์ฌํญ์ด ์ถ์ ๋์ง๋ง ์๋์ ์ผ๋ก ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฅ๋์ง๋ ์๋๋ค. ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ git์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ณ๊ฒฝ์ด ์๋ฃ๋ ์ง์ ์์ git์ ์ฌ์ฉํ ๋ช
๋ น์ด๋ก ๋ณ๊ฒฝ์ ์ ์ ์ฅํด์ผ ํ๋ค. git์์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ๋ถํฐ ์์ํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๊ธฐ ๊น์ง๋ฅผ 3๊ฐ์ง์ ์ํ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค. git repository ํ์ผ๋ค์ git์ ๋ณ๊ฒฝ์ ์ด ์ ์ฅ๋์ง ์ ์ Modified, Staged, Committed ์ด๋ ๊ฒ 3๊ฐ์ง ์ํ ์ค ํ๋๋ก ์กด์ฌํ๋ค. Modified: ์ด์ ๋ณ๊ฒฝ์ ์ดํ์ ๋ณ๊ฒฝ๋ ํ์ผ๋ค์ git์ ์ํด ์ถ์ ๋์ด์ ์๋์ผ๋ก modified ์ํ๊ฐ ๋๋ค. ๋ง์ฝ ์์ ํ์ผ์ด ์๋ก ์์ฑ๋์๋ค๋ฉด ํด๋น ํ์ผ์ modified๊ฐ ์๋๋ผ untracked ์ํ๊ฐ ๋๋ค. Staged: modified ํน์ untracked ์ํ์ธ ํ์ผ(ํน์ ํด๋)๋ค ์ค์ git add * ๋ช
๋ น์ด๋ฅผ ํตํด index์ ๋ฑ๋ก๋ ์ํ๋ฅผ ๋งํ๋ค. git์์๋ ๋ณ๊ฒฝ๋ ํ์ผ์ ๋ฐ๋ก ๋ณ๊ฒฝ ๋ด์ฉ์ผ๋ก ์ ์ฅํ๊ธฐ ์ ์ index์ ์ ์ฅํด์ ์ถ๊ฐ์ ์ธ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์ ์๋ ์ค๊ฐ ์ง์ ์ ๋ง๋ค์๋ค. ๋ณ๊ฒฝ์ ์ ์ ์ฅํ๊ธฐ ์ ์ ๋๋ฝ์ด๋ผ ์ค์๊ฐ ์์ ์ ์๋๋ฐ, ๊ทธ ๋๋ง๋ค roll back์ ํ๋ค๋ฉด ์ ์ฅ์์ log๋ ๊ธธ์ด์ง๊ณ ๋ถํธํ ์ง์ ์ด ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ต์ข
์ ์ผ๋ก ๋ณ๊ฒฝ์ ์ ์ ์ฅํ๊ธฐ ์ ์ ๋ณ๊ฒฝ ๋ด์ฉ๋ค์ ์ ๊ฒํ ์ ์๋ staged ์ํ๊ฐ ์๋ค. Committed: index์ ๋ฑ๋ก๋ ๋ณ๊ฒฝ ๋ด์ฉ๋ค์ git log์ ์ ์ฅ๋์ง ์๋๋ค. ์์ง ๋ณ๊ฒฝ์ ์ด ์ ์ฅ๋๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค. git์์ ์ง์ง ๋ณ๊ฒฝ์ ์ ์ ์ฅํ๊ธฐ ์ํด์๋ index์ ๋ฑ๋ก๋ ๋ณ๊ฒฝ ๋ด์ฉ๋ค์ git commit ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด snapshot์ผ๋ก ์ ์ฅํด์ค์ผ ํ๋ค. commit ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ๋, git commit -m "message" -m ์ต์
์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ํ ์งง์ ์ค๋ช
์ ๋จ๊ธธ ์ ์๋ค. log์๋ -m ์ต์
์ผ๋ก ๋ถ์ฌ์ง ๋ฉ์ธ์ง๊ฐ ๊ธฐ๋ก๋๋ค. Snapshot์ด ์ ์ฅ๋๋ ๋ฐฉ์git์ ์ ์ฅ๋๋ ๊ฐ๊ฐ์ ๋ณ๊ฒฝ์ ์ snapshot์ด๋ผ๊ณ ํ๋ค. git์ VCS๊ณ VCS์์ roll back ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค๋ฉด, ์ด ๋ง์ git์ ์ด์ ๊น์ง์ ๋ชจ๋ ๋ณ๊ฒฝ์ ์ ํด๋์ ํ์ผ๋ค์ ์ ๋ถ ์ ์ฅํ๊ณ ์๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋งค snapshot๋ง๋ค ํด๋์ ํ์ผ๋ค์ด ์๋ก ์ ์ฅ๋์ด์ผ ํ๋ฏ๋ก ์ ์ฅ๊ณต๊ฐ์ ๋ง์ด ์ฐจ์งํ ๊ฒ์ด๋ค. ๋คํํ๊ฒ๋ git์ snapshot๋ง๋ค ํด๋์ ํ์ผ๋ค์ ์๋ก ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ํ์ผ์ ๊ด๋ฆฌํ์ง ์๋๋ค. git์ ํ์ฌ์ snapshot๊ณผ ๋ฐ๋ก ์ด์ ์ snapshot๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ํ์ผ๊ณผ ๋ณ๊ฒฝ๋์ง ์๋ ํ์ผ์ ๊ตฌ๋ถํ๋ค. ๋ง์ฝ์ ์๋ก ๋ณ๊ฒฝ๋ ํ์ผ์ด๋ผ๋ฉด ํ์ผ์ ์๋ก ์ ์ฅํ์ง๋ง ๋ณ๊ฒฝ๋์ง ์์ ํ์ผ์ด๋ผ๋ฉด ๋ณต์ฌํ์ง ์๊ณ ์ด์ snapshot์ ํด๋น ํ์ผ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋ ๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ฉด ๋ณ๊ฒฝ๋ ํ์ผ๋ค์ด ์ ๋ถ ์ ์ฅ๋์ง๋ง ๋ณ๊ฒฝ๋์ง ์์ ํ์ผ๋ค๋ ๋ถํ์ํ๊ฒ ์ ์ฅ๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค. โป ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ remote repository์์ repository๋ฅผ clone ํน์ pullํ๋ ๊ฒ์ ํด๋น repository์ ํน์ ์์ ์(์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ต์ ) snapshot์ ๋ฐ์์ค๋ ๊ฒ์ด๋ค. Branch์ Merge์ฌํ๊น์ง git์ด ํ๋ ์ญํ ๊ณผ git์ผ๋ก snapshot์ ์ ์ฅํ๊ธฐ ๊น์ง์ ๊ณผ์ ๋ค, snapshot์ด ์ ์ฅ๋๋ ๋ฐฉ์์ ๋ํด์ ์ค๋ช
ํ๋ค. ๊ทธ๋ ์ง๋ง ์์ง ์๋ฌธ์ด ๋จ๋๋ค. ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ snapshot์ ์ ์ฅํด์ ๊ฐ๋ฐ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ์๋ก์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ์กฐ์จํ ์ ์๋๊ฒ์ผ๊น? ๊ฐ๋ฐ์๋ค ๊ฐ์์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ํฉ์ณ์ ์๋ก์ด ์ต์ ๋ฒ์ ์ ์ค๋
์ท์ ๋ง๋ค๊ธฐ ์ํด์๋ ์ด๋ค ์ค๋
์ท์ ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ๋ค์ ํฉ์น๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ branch๋ฅผ ์ฌ์ฉํ๋ค. Branch์ฐ๋ฆฌ๊ฐ git init์ ํตํด repository๋ฅผ ์์ฑํ๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก master branch๊ฐ ๋ง๋ค์ด์ง๋ค. ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ง ๋๋ ๊ฐ ๊ฐ๋ฐ์๋ค์ด master branch์ snapshot์ ๊ฐ์ง๊ณ ์ค๊ณ ์ด master branch๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์ด ์์
ํ ์๋ก์ด branch๋ฅผ ๋ง๋ค์ด ๋ธ๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง branch๋ฅผ feature branch๋ผ๊ณ ํ๋ค. branch๋ฅผ ์๋ก ์์ฑํ ๋๋ git checkout -b feature_name์ ์ฌ์ฉํ๋ค.(-b ์ต์
์ ๋ถ์ด๋ฉด ์์ฑ ํ์ ํด๋น branch๋ก ๋ฐ๋ก ์ด๋ํ๋ค.) Merge๊ฐ ๊ฐ๋ฐ์๋ feature branch๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๋ฐ์ ์งํํ๊ณ ๊ฐ๋ฐ์ด ์๋ฃ๋์ด์ ์ต์ข
commit ๋ ์๋ฃ๋๋ฉด remote repository์ ํด๋น snapshot์ ์ ์ฅํ๋ค. remote repository์ ์๋ master branch์์๋ feature branch๋ก ๊ฐ๋ฐ๋ ๋ด์ฉ๋ค์ ํฉ์น๊ธฐ ์ํด์ mergeํ๋ค. master๊ฐ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก mergeํ ๋๋ git merge featrue_name ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. Github์ด์ ๊น์ง์ git์ ๋ด์ฉ์ ์ดํดํ๋ค๋ฉด Github์ ์ญํ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค. Github์ git์ remote repository๋ฅผ ์ ๊ณตํ๋ ์น์๋น์ค ์ด๋ค. ํ์ฌ Github ๋จ์ํ ์ค์ ์ ์ฅ์ ์ญํ ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ, testing, code review, documentation ์์ฑ ๋ฐ ๊ด๋ฆฌ, ์ผ์ ๊ด๋ฆฌ ๋ฑ์ ํ๋ก์ ํธ ๊ฐ๋ฐ๊ณผ ์ด์์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค. Github ์ฌ์ฉํ๊ธฐGithub์ ์ฌ์ฉํ๋ฉด remote repository๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค. github์ ๋ก๊ทธ์ธ ํ ํ new Repository ๋ฒํผ์ ํด๋ฆญํ๊ณ Repository ์ด๋ฆ์ ์ค์ ํ๋ค. Create Repository ๋ฒํผ์ ๋๋ฌ์ remote repository๋ฅผ ์์ฑํ ๋ค, ์ฃผ์๋ฅผ ๋ณต์ฌํ๋ค. git init๋ช
๋ น์ด๋ฅผ ํตํด local repository๋ฅผ ์์ฑํ๋ค. ์๋ก์ด ํ์ผ์ repository ๋ด์ ์์ฑํ๋ค git add *, git commit ๋ช
๋ น์ด๋ก snapshot์ ์ ์ฅํ๋ค. git remote add origin '๋ณต์ฌํ remote repository ์ฃผ์'๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ค. git push origin master ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ github remote repository master branch์ snapshot์ ์ ์ฅํ๋ค.","link":"/2020/07/29/git-basics/"},{"title":"Brandi Internship - Part 1","text":"Wecode!์ฌํด 4์ ์ฝ๋์คํผ์ธ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ๋ฅผ ํ๋ ๋๋, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊น์ด์ ํ์ฉ๋์ ํฌ๊ฒ ๋งค๋ ฅ์ ๋๊ผ๋ค. ๋ค๋ง ์์ฌ์ด ์ ์ ํผ์์๋ ํฐ ๋จ์์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ์ ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์ ๊ณ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์ถ์ด์ก๋ค. ํต์ ํ๋ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋ฉด์ promise์ async await, generator๋ฑ์ ์ง์ ํ์ฉํด๋ณด๊ณ ์ถ์๋ค.(์์ฝ๊ฒ๋ ์์ง๊น์ง๋ ์ถฉ๋ถํ ํ์ฉํด๋ณด์ง๋ ๋ชปํ๋ค.) ๊ทธ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ์ ์๋ ๊ณณ์ ์ฐพ์๋ณด๊ฒ ๋์๋ค. ๊ทธ๋ ๊ฒ ์ฐพ๊ฒ ๋ ๊ณณ๋ค์ ๋๋ถ๋ถ ๋ถํธ์บ ํ๋ค์ด์๋๋ฐ, ๋๋ ๋น์ฅ ๋ค๋ ์ ์๋ ๊ณณ์ ์ฐพ์์๊ณ , ๋น์์ ๋น์ฅ ๋ฑ๋กํ ์ ์๋ ๊ณณ์ด๋ฉด์ ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์๋ ๊ณณ์ธ wecode๋ฅผ ์ ํํ๊ฒ ๋์๋ค. wecode๋ 3๊ฐ์๋์ 2๊ฐ์ ํ๋ก์ ํธ์ 1๋ฌ ๊ฐ์ ์ธํด์ฝ์ ์ ๊ณตํ๋๋ฐ ๊ฐ์ธ์ ์ผ๋ก ๋๋ฌด ๊ฐ์ฌํ ์๊ฐ๋ค์ด์๋ค. ์ด๋ฒ ๊ธ์์๋ ์ฌ์ฑ ์๋ฅ ํ๋ซํผ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์คํํธ์
, Brandi์์ 1๋ฌ๊ฐ ์งํํ๋ ํ๋ก์ ํธ์ ๊ทธ ํ๋ก์ ํธ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์ ์ด๋ณด์๋ค. Brandi ์ธํด์ฝ์ ์์Brandi์์ ์ธํด์ฝ์ ์งํํ ์ธ์์ ์ด 20๋ช
์ด์๋ค. 10๋ช
์ฉ ๋ ํ์ผ๋ก ๋๋ ์ ํ์ฌ ๋ธ๋๋์์ ์ด์ ์ค์ธ ์๋น์ค ์ฌ์ดํธ์ ์ด๋๋ฏผ ์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด ํ๋ฌ ๋์์ ๊ณผ์ ์๋ค. ๋ฌผ๋ก ์์ ํ ๋์ผํ๊ฒ ๋ง๋ค์ด์ผ ํ๋ ๊ฒ์ ์๋์์ง๋ง ํ์ ๊ตฌํ์ผ๋ก ์ ์๋ ํ์ด์ง๊ฐ ๊ฝค ๋ง์ ์์ด์๋ค. ๋ง๋ค์ด์ผ ํ ํ์ด์ง๊ฐ ๋ง์ ๊ฒ๋ ์ด๋ ค์์ด์์ง๋ง, ๋ถํธ์บ ํ ๊ธฐ๊ฐ๋์ react๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ธ๋๋์์๋ vue๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ฐ๋ผ์ ๋ทฐ๋ฅผ ์๋กญ๊ฒ ๊ณต๋ถํ๋ ๊ฒ๊ณผ ๋์์ ๋ง์ ํ์ด์ง๋ค์ ๊ตฌํํด์ผ ํ๋ค๋ ๋ถ๋ด์ด ์์๋ค. ์ผ๋จ ์ฐ๋ฆฌํ 10๋ช
(FE 5๋ช
, BE 5๋ช
)์ ๋ค์ 5๋ช
์ฉ ์๋น์คํ๊ณผ ์ด๋๋ฏผ ํ์ผ๋ก ๋๋์๊ณ ๋๋ ์ด๋๋ฏผ ํ์ ์ํ๊ฒ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์ด์ผํ ํ์ด์ง๋ค์ ๊ด์ฐฐํ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฐ๋ฐ ํ๋ก ํธ๋ค์ ํ์ด์ง๋ค์ ๊ด์ฐฐํ๊ธฐ ์ ์ ๋์ด์ผ ํ ์ฐ์ด ์์๋ค. ์ฒซ ๋ฒ์งธ ๋๊ด: Webpackํธํ๊ฒ vue-cli3๋ฅผ ์ฌ์ฉํ ๊น์?ํ์ฌ์์ ํ์๊ตฌํ์ผ๋ก ๋ช
์๋ ์ฌํญ ์ค์ webpack์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ, ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ์ฌํญ์ด ์์๋ค. ์ง๋ 2๋ฌ๋์ wecode์์ ๋ฆฌ์กํธ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ ๋, CRA๋ฅผ ์ฌ์ฉํ์ฌ ์นํฉ์ ์ง์ ๋ง์ง๋ ์ผ ์์ด ๊ฐ๋ฐ, ๋ฐฐํฌ ํ๊ฒฝ์ ์ ๊ณต๋ฐ์์๊ธฐ ๋๋ฌธ์, webpack์ ๋ํ ์ง์์ด ๊ฑฐ์ ์์๋ค. ๋คํํ vue์์๋ cra์ฒ๋ผ vue-cli๋ผ๋ ๋๊ตฌ๊ฐ ์์๊ณ vue๋ฅผ ๋ง๋ evan you์ ํ์ด ์ฌ์๋
๋ฒ์ ์ 3์ผ๋ก ์ฌ๋ฆฌ๋ฉด์ vue ํ๊ฒฝ์ ์ค์ ํ ๋์ ํธ์์ฑ์ ๋์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์๋ค. ์ ๋ง vue-cli3๋ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ณ , ์ถ๊ฐ๋ก ์ค์ ํ๊ณ ์ถ์ ๋ก๋๋ ํ๋ฌ๊ทธ์ธ๋ค์ vue.config.js์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋ฌธ์ ๋ ์ด๋ฐ ์ ํ์ด ์นํฉ์ ์ฌ์ฉํ๋ผ๋ ํ์ ๊ตฌํ ์ฌํญ์ ๋ฐฐ์น๋๋ ์ ํ์ด๋๋ ๊ฒ์ด์๋ค. ์ฐ๋ฆฌ๋ ์ถ๊ฐ์ ์ธ ์ค์ ์ vue.config.js๋ฅผ ์ฌ์ฉํ์ฌ webpack์ ์ถ๊ฐํ ์์ ์ด์๊ธฐ ๋๋ฌธ์ ์์ ์นํฉ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ ์๋์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ ์ธํด์ฝ์ ๋ด๋นํ๊ณ ์๋ ์์ฒ ๋๊ป slack์ผ๋ก dm์ ๋ ๋ ธ๋ค. ๋คํํ๋ vue-cli๋ฅผ ์ฌ์ฉํ๊ณ vue.config.js๋ก ์ถ๊ฐ ์ค์ ์ ํด๋ ๋๋ค๋ ๋ต๋ณ์ ๋ฐ์๋ค. ๋๋ถ์ ๊ณผ์ ๋ฅผ ๋ฐ์ ์ฒซ ์งธ๋ ํด๊ทผ ์ง์ ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋ vue ํ๊ฒฝ ์ค์ ์ ๋๋ผ ์ ์์๊ณ , ์ด์ ์ ๋ง์ ํ์ด์ง๋ค์ ๋ง๋๋ ์์
์ ์์ํ๋ฉด ๋์๋ค. ๊ทธ๋ฐ๋ฐ ํ์ ์ค ํ๋ช
์ด์๋ ์ํ๋์ด ๋ค๋ฅธ ์๊ฒฌ์ ๋ด์
จ๋ค. โ๊ทผ๋ฐ vue-cli๋ฅผ ์ฐ๋ฉด ์ ์๋์ด ๋๋๊ฑฐ์์? ์ธํด์ฝ ๊ณผ์ ๋ ๊ณต๋ถ์ธ๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ง์ ์ฒ์๋ถํฐ ๋ง๋ค์ด๋ณด๋ฉด ์ด๋จ๊น์?โ ๊ทธ๋์ ์ฐ๋ฆฌํ ํ๋ก ํธ 5๋ช
์ vue-cli๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์นํฉ์ ์ค์ ํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ์ ํํโฆ googling, webpack, vue, noneโฆ์ฐ๋ฆฌ๋ vue ๊ณต๋ถ๋ ๋ณํํด์ผ ํ๊ธฐ ๋๋ฌธ์, webpack ์ค์ ์ ํ๋ก ํธ์์ ๋์ ์ํ๋ ๋๋ช
์ด์ ๋น ๋ฅด๊ฒ ์งํํ๊ธฐ๋ก ํ๊ณ (๋๋ฌด ๋ชฐ๋ผ์ ๋น ๋ฅด๊ฒ ์งํํ ์ ์๋ค๊ณ ์๊ฐํ๋คโฆ), ๋ค๋ฅธ 3๋ช
์ ํ์์ ๋ทฐ ๊ณต๋ถ๋ฅผ ์์ํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ํ์๋ค์๊ฒ ์ ๋ฌํด์ฃผ๊ธฐ๋ก ํ๋ค. ๋์ ์ํ๋ ๋๋ช
์ ๊ตฌ๊ธ๋ง์ ์์ํ๋๋ฐ, ์ฐ๋ฆฌ๋ webpack ์ค์ ์ ๋์์ด ๋ ๋งํ ์๋ฃ๋ค์ ๋ค ์ฝ์ด๋ณด์๋ค. ๊ผญ vue์ค์ ์ด ์๋๋๋ผ๋ react์ค์ ์์๋ ๋์์ ์ป์ ์ ์๋ ์๋ฃ๊ฐ ์๋ค๋ฉด ์ฐพ์์ ์ฝ์ด๋ณด์๋ค. ๋ฌธ์ ๋ ๋๋ถ๋ถ์ ์๋ฃ๋ค์ด ๋๋ฌด ์์ ์์ค์ ์ค์ ๋ง ์ ๊ณตํ๊ณ ์๋ค๋ ์ ์ด์๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋ฐํ๊ฒฝ๊ณผ, ๋ฐฐํฌํ๊ฒฝ์ ๋๋์ด์ ํ๊ฒฝ ์ค์ ์ ํด์ผ ํ๋๋ฐ, ๋๋ถ๋ถ์ ์๋ฃ๋ค์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง์ถฐ์ ธ ์์๊ณ , ๋ก๋๋ฅผ ๋ถ์ด๋ ๋ฐฉ์๋ ์กฐ๊ธ์ฉ ๋ค ๋ฌ๋๋๋ฐ ์ ๋ค๋ฅธ์ง์ ๋ํ ์ด์ ๋ฅผ ์๊ธฐ๋ ์ด๋ ค์ ๋ค. webpack, vue๋ผ๋ ํค์๋๋ก ๊ฒ์ํด์๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์๋ฃ๋ฅผ ์ป๊ธฐ๊ฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ์ผ๋จ ๋ธ๋๋์์๋ vue ์ค์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ธํด์ฝ ๊ณผ์ ๊ณผ ์ธ์๋ค์ ๋ด๋นํ์
จ๋ ํ์ฅ๋๊ป ๊ฐ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์นํฉ ์ค์ ์ ํ๋ ๊ฒ์ด ์ข์์ง ์๋ฃ๋ฅผ ์ป์ ์ ์๋์ง ๋ฌผ์ด๋ณด์๋ค. ํ์ฅ๋์ ๋ต๋ณ์ โ์ผ๋จ ์คํ ๋ค๋ํ ์ค์ ์ ์ฐพ๊ณ , ๊ทธ ์ค์ ์ ๋ํด์ ์ปค์คํ
ํ๊ฒ ์์ ์ ํ๋ ๋ฐฉ์์ผ๋ก ํด์ผ ํ๋ค.โ ๋ผ๋ ๋์์ด ๋๋ฉด์ ๋์์ด ๋์ง ์๋ ๊ฒ ๊ฐ์ ๋ต๋ณ์ ํด์ฃผ์
จ๋ค. ํํํโฆ ํ์ง๋ง ์ด ๋ต๋ณ์ด ํฐ ๋์์ด ๋์๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์์ ์ โ์คํ ๋ค๋ํ ์ค์ โ์ ์ฐพ๋ ๊ฒ์ด์๋ค. ๊ทธ๋ฐ๋ฐ โ์คํ ๋ค๋ํ ์ค์ โ์ ๋๋ฐ์ฒด ์ด๋์์ ์ฐพ๋๋ค๋ ๋ง์ธ๊ฐ? โ์คํ ๋ค๋ํ ์ค์ โ์ ์ฐพ์ ํค๋ฉ๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์๊ธฐ ๊นจ๋ฌ์ ๋ฐ๊ฐ ์์๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ฌ์ฉํ vue-cli3๊ฐ โ์คํ ๋ค๋ํ ์ค์ โ์ด๋ผ๋ ๊ฒ vue-cli3๋ฅผ ๋ฏ์ด๋ด
์๋ค.CRA์์ webpack ์ค์ ์ ๋ณด๊ธฐ ์ํด์ eject๋ฅผ ์ ๊ณตํ๋ฏ์ด vue-cli3์์๋ inspect๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ ๊ณตํ๋ค. inspect ๋ช
๋ น์ด๋ ๋ค์ํ ์ต์
๋ค์ ์ ๊ณตํ๋๋ฐ, ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋ฐฐํฌํ๊ฒฝ์ ํ์ผ์ ๊ฐ๊ฐ ๋ณด์ฌ์ฃผ๋ ์ต์
๋ ์์๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์์์ ์นํฉ ์ค์ ์ output-dev, output-prod๋ผ๋ ํ์ผ์ ์ ์ฅํ๊ณ ๋ ์ค์ ์ ๋น๊ตํ๊ธฐ๋ก ํ๋ค. ๊ทธ๋ฐ๋ฐ inspect๋ฅผ ํตํด ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ด ๊ฐ๊ฐ 1300์ค์ด ๋์๋คโฆ ์ฐ๋ฆฌ๋ 2๊ฐ์ง๋ฅผ ํ์ธํ๊ธฐ๋ก ํ๋ค. ๊ฐ๊ฐ์ ์ค์ ํ์ผ์์ ์ฌ์ฉํ ๋ด์ฉ๋ค์ด ์ด๋ค ์ญํ ์ ํ๋ ๊ฒ์ธ์ง ์ ๋ถ ์กฐ์ฌํ๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋ฐฐํฌํ๊ฒฝ์์ ์ด๋ค ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ํ์ธํ๋ ๊ฒ์ด์๋ค. ์ฝ๋๋ฅผ ํ์คํ์ค ํ์ธํ๋ฉด์ ์ฐ๋ฆฌ๋ ๊ตฌ๊ธ๋ง์ผ๋ก๋ ์ ์ ์์๋ ์ต์ ํ๋ฅผ ์ํ ๋ก๋์ ํ๋ฌ๊ทธ์ธ๋ค์ด vue-cli์ ์กด์ฌํ๋ค๋ ๊ฒ์ ์์๊ณ , webpack ์ค์ ํ์ผ์ ๋๋ถ๋ถ์ด css์ฒ๋ฆฌ์ ๊ดํ ๋ด์ฉ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์ฐ๋ฆฌ๋ scss๋ง ์ฌ์ฉํ ์์ ์ด์์ง๋ง, vue-cli์ ๊ฒฝ์ฐ์๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์์ ๊ฒฝ์ฐ๋ฅผ ๋ค ์ปค๋ฒํด์ผ ํ๊ธฐ ๋๋ฌธ์ less, stylus๋ค์ ๋ํ ์ฒ๋ฆฌ๋ ์์๋ค. ๋ํ ๋ ํ๊ฒฝ์ ์ฐจ์ด๋ diffchecker๋ผ๋ ์น ์ฌ์ดํธ์ ๋์์ ๋ฐ์๋ค. css์ ๊ฒฝ์ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ฐ๋ก css๋ฅผ js์ ์ฃผ์
ํ๋ฉด ๋์ง๋ง, ๋ฐฐํฌ ํ๊ฒฝ์์๋ cssํ์ผ๋ก ์ถ์ถ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ ๋ถ๋ถ์ ์ฒ๋ฆฌํ๋ ๋ก๋์ ํ๋ฌ๊ทธ์ธ์ด ๊ฐ๊ฐ ๋ฌ๋๋ค. ๊ฐ ๋ก๋์ ํ๋ฌ๊ทธ์ธ๋ค์ ์ญํ ๋ ์ฐพ์๊ณ , ๋ ํ๊ฒฝ์์์ ์ฐจ์ด๋ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ wepback ์ค์ ์ ์์ํ๋ค. ์ผ๋จ ๋ ํ์ผ ๋ชจ๋์ ๊ณตํต์ฌํญ์ webpack.config.base๋ผ๋ ํ์ผ์ ์ค์ ํ๊ธฐ๋ก ํ๊ณ ์ด ์ค์ ์ webpack-merge๋ก ๋ฐ์์ webpack.config.dev, webpack.config.prod์์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ์ด๋ ๊ฒ ์์กฐ๋กญ๊ฒ ์งํ๋๋ฉด ์ข์๋ฐ, ํญ์ ์ผ์ ๊ทธ๋ ๊ฒ ์งํ๋์ง ์๋๋คโฆ ์ค์ ์ ํ๋ ์ค์ ๋ญ๊ฐ ๋์น ๊ฒ์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋๋ฐ, ๋ฐ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์์์ devServer ์ค์ ์ด์๋ค. inpect๋ฅผ ํตํด์ ๋์จ ํ์ผ์์๋ devServer์ค์ ์ด ์์๊ณ , ์ด๋ ๊ฒ ๋๋ฉด webpack-dev-server๋ฅผ ์คํํ์ ๋์ ๋ํ ์ค์ ์ด ์กด์ฌํ์ง ์๊ฒ ๋์๋ค. ๊ทธ๋ฐ๋ฐ vue-cli3 ํ๊ฒฝ์์๋ devServer๊ฐ ์ ์๋์ ํ๋ค. ๋ญ๊ฐ ๋์น์ ์ด ์๋ค๊ณ ์๊ฐํ๊ณ , vue-cli github์์ ์ง์ ํ์ผ๋ค์ ํ์ธํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ๋ ๊ฒ vue-cli ๋ ํฌ์งํ ๋ฆฌ์ ๋ค์ด๊ฐ์ ํ์ฐธ์โฆ vue-cli ๋ ํฌ์งํ ๋ฆฌ์ ํ์ผ๋ค์ ์ง์ ํ์ธ์ ํ ๊ฒฐ๊ณผ ์๋ก์ด ์ฌ์ค 2๊ฐ์ง๋ฅผ ์๊ฒ ๋์๋ค. ์ฐ์ vue-cli3๋ ์นํฉ ์ฒด์ธ์ ์ฌ์ฉํ์ฌ ํจ์ ์ฒด์ด๋์ผ๋ก ์นํฉ ์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ก ๊ตฌ์ฑ๋์ด ์์๋ค.(๊ทธ๋์ ์ฝ๋๋ค์ด ํจ์ฌ ๊ฐํธํ๊ฒ ์์ฑ๋์๋๋ฐ, ์ฐ๋ฆฌ๋ ์ฒด์ด๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์์ง๋ง ๊ทธ๋ฌ๊ธฐ์๋ ์ด๋ฏธ ๋๋ฌด ๋ง์ ์๊ฐ์ ์ฌ์ฉํ ์ํ์๋คโฆ) ๊ทธ๋ฆฌ๊ณ devServer์ค์ ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น ์ง๋ ์ด์ ๋ devServer์ค์ ์ ํด์ฃผ๋ ์นํฉ ์ฒด์ด๋ ํ์ผ์ webpack-dev-server๊ฐ ์คํ๋์์ ๋, serve ๋ช
๋ น์ด์์ ์คํ๋๋๋ก ๋ณ๋๋ก ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ inpect๋ก๋ ๋ณผ ์๊ฐ ์๊ฒ ๋์ด ์์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก vue-cli3์ devServer ์ค์ ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ์๋ ์ด๋ ต๋ค๊ณ ํ๋จ์ ํ๊ณ , ๊ฐ๋จํ๊ฒ contentBase, compress, open, historyApiFallback ์ต์
๋ง ๋ถ์ฌ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ์ด์ ์์์ด ๋ชจ๋ ์ค์ ์ ์ ๋ฆฌํด์ ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋ฐฐํฌํ๊ฒฝ์ด ์ ๋ง๋ค์ด์ง๋ ๊ฒ์ ํ์ธํ ๊ฒ์ด ํ ์์ผ ์ค์ 11์ 30๋ถ์ฏค์ด์๋คโฆ ๋ฒ์จ ํ์ฃผ๊ฐ ์ง๋๊ฐ์ง๋ง ๋ง๋ค์ด ์ง ๊ฒ์ webpack ์ค์ ๋ฟ, 3์ฃผ ์์ ๋ทฐ ๊ณต๋ถ์ 10๊ฐ๊ฐ ๋๋ ํ์ด์ง์ ๋ํ ๊ตฌํ์ ํด์ผ ํ๋ค. ๋จ์ ํ๋ก์ ํธ๋ฅผ ์ด๋ป๊ฒ ์งํํ๋์ง๋ ๋ค์ ๊ธ์ ์ด์ด์ ์ ๋๋ก ํ๊ฒ ๋ค.","link":"/2020/10/25/brandi-internship-1/"},{"title":"Brandi Internship - Part 2","text":"์ธํด์ฝ 2์ฃผ์ฐจ ์์์ฒ์ ๋ธ๋๋ ์ธํด์ฝ ์์ํ ๋, ๋ธ๋๋ ์ธก์์ ์ผ์ ์ ๋ํด์ ํผ๋ํ ๋ถ๋ถ์ด ์์๋๋ฐ, ๋ณธ๋ 15์ผ๊น์ง ์งํ๋์ผ ํ๋ ์ธํด์ฝ์ด 8์ผ๊น์ง๋ผ๊ณ ์๋ชป ์ ๋ฌ๋์์๋ค. ๊ทธ๋ ๋ค๋ฉด ์นํฉ์ ์ค์ ํ ํ ๋จ์ ๊ธฐ๊ฐ์ 3์ฃผ๋ฐ์ ๋์ง ์์๋ค.(๊ณ ์๊ฐํ๋ค. ๋์ค์ ๋ค์ 15์ผ๊น์ง๋ผ๋ ๊ฒ์ ์ ๋ฌ๋ฐ์์ ์ฌ์ค์ 4์ฃผ์๋ค.) ์งง์ ์๊ฐ๋์์ ๋ง์ ํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด ํ๊บผ๋ฒ์ ๊ทธ๋ฆฌ๋ ์๋ฐ์ ์์๋ค. ๊ทธ๋์ ํ์ด์ง๋ฅผ ๊ด์ฐฐํด์ ์์ฑํ๋ ์ฝ๋์ ์ซ์๋ฅผ ์ต์ํํ๋ฉด์ ํจ์จ์ ์ผ๋ก ์ฝ๋ฉ์ ํ ์ ์๋ ๋ถ๋ถ์ด ์์ ์ง ์ฐพ์๋ณด์๋ค. 10๊ฐ์ ํ์ด์ง๋ฅผ 1๊ฐ์ ์ปดํฌ๋ํธ๋ก ๊ทธ๋ฆฌ๋ฉด ์ด๋จ๊น?๊ด์ฐฐ ์์ํ์ด์ง ๊ด์ฐฐ์ ์์ํ๋ค. ์ด๋๋ฏผ ํ์ด์ง์์ ํฐ ์นดํ
๊ณ ๋ฆฌ๋ ์ฃผ๋ฌธ๊ด๋ฆฌ, ์ทจ์/ํ๋ถ ๊ด๋ฆฌ, ์ํ ๊ด๋ฆฌ, ๊ณ ๊ฐ์๋๊ด๋ฆฌ, ํ์ ๊ด๋ฆฌ๊ฐ ์์๊ณ , ์นดํ
๊ณ ๋ฆฌ ํ์์ ํ์ด์ง๋ค์ด ์์๋ค. ๋คํํ๋ ์ด๋๋ฏผ ํ์ด์ง๋ ํ์ด์ง ๊ฐ์ ์ ์ฌ์ฑ์ด ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฌ์ฉ๋๊ฒ๋ ๋ง๋ค๋ฉด ๋์๋ค. ์ผ๋จ ํ์ด์ง๋ฅผ ๊ด์ฐฐํ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์๋ค. ์ฃผ๋ฌธ๊ด๋ฆฌ, ์ทจ์/ํ๋ถ ๊ด๋ฆฌ, ์ํ ๊ด๋ฆฌ, ๊ณ ๊ฐ์๋๊ด๋ฆฌ์ ์ํด์๋ ํ์ด์ง๋ค์ ํฌ๊ฒ 4๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋์ด ์์๋ค. ํ์ด์ง ์ ๋ชฉ, ๊ฒ์ ์กฐ๊ฑด์ ์ํ ํํฐ๋ง ๋ฐ์ค, breadcrumb, ํ
์ด๋ธ๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ํ์ด์ง๋ง๋ค ๊ฐ ์์์ ์ธ๋ถ๋ด์ฉ์ด ๋ฌ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก 10๊ฐ์ ํ์ด์ง๋ฅผ 1๊ฐ์ ์ปดํฌ๋ํธ์์ ๊ทธ๋ฆฌ๋๋ก ๋ง๋ค๊ธฐ๋ก ํ๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด์๋ 10๊ฐ์ ํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๋ ์ปดํฌ๋ํธ๊ฐ 10๊ฐ์ ํ์ด์ง์ ์ธ๋ถ ์ฌํญ๋ค์ ๋ค ํฌ๊ดํ ์ ์์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ vue์ ์ฅ์ ์ด ๋๋ฌ๋ฌ๋๋ฐ, vue๋ ์ฝ๋๋ฅผ ์งค ๋, ์ฝ๋๋ฅผ ์ง๋ ์ฌ๋์ ์ฌ๊ณ ๋ฅผ vue์ ๊ตฌ์กฐ์ ๋ง์ถ๋๋ก ๊ฐ์ ํ๋ค. vue ํ์ผ์ ๋ ๋๋ง์ ๋ด๋นํ๋ templateํ๊ทธ, ๋ก์ง์ ๋ด๋นํ๋ scriptํ๊ทธ, ์คํ์ผ์ ๋ด๋นํ๋ style ํ๊ทธ๋ก ๋๋์ด ์ง๋ค. ์ฌ๊ธฐ์ vue์ ์ฌ๊ณ ๋ฐฉ์๋๋ก ์ฝ๋๋ฅผ ์ง ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ๋ก์ง๊ณผ ๋ ๋๋ง ๋ก์ง์ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ์ ์๋ค. ๋ฌผ๋ก ์์ ๋๊ฐ ๋์ react์์๋ ๊ฐ๋ฅํ ๋ถ๋ถ์ด์ง๋ง ๋ถ๋ฆฌ๊ฐ ๊ฐ์ ๋์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ก์ง๊ณผ ๋ ๋๋ง ๋ก์ง์ด ๋ถ๋ฆฌ๋์ง ์์ ์ํ๋ก ์ง๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ vue๋ ์ง์ ์ ์ธ ๋ฐ์ดํฐ ๋ถ๋ถ์ script์ ๋ถ๋ฆฌํด์ ์์ฑํ๋๋ก ์๊ฐ์ ๋์์ค๋ค.(๋ฌผ๋ก ๋ถ๋ฆฌ๊ฐ ์๋๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ template ์์ ๋ฃ์ด์ ์งค ์๋ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ ๊ฑฐ๋ฉด vue๋ฅผ ์ ใ
..) ๋ค์ ๋์๊ฐ์ ๊ฐ ์์์ ์ธ๋ถ๋ด์ฉ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๋์ textMap์ด๋ผ๋ ํ์ผ๋ก ๋ถ๋ฆฌํ๊ณ , textMap์๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฐ ํ์ํ ํ
์คํธ ๊ฐ๋ค(ํํฐ๋ง ๋ฐ์ค ๊ฐ๋ค, ํ
์ด๋ธ์ ํค๋๋ค ๋ฑ)์ ์ ์ฅํ๋ค. vue์์๋ script ๋ถ๋ถ์์ textMap์ ๊ฐ์ ธ์ ์ํ๋ก ์ ์ฅํ๊ณ , template ๋ถ๋ถ์์๋ ์ ์ฅํ textMap์ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ ๊ฒฝ์ฐ ํํฐ๋ง ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋ ๋, ๋ฐ์ดํฐ์ ํด๋นํ๋ textMap๋ง ์์ ํ๋ฉด ๋๊ณ ๋ ๋๋ง ๋ก์ง์ ์์ ํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์์๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ ๊ฒฐ๊ณผ ์ปดํฌ๋ํธ์์๋ ํ์ด์ง uri์ ๋ง๋ textMap ๊ฐ์ ์ฝ์ด์ ๋ ๋๋ง ๋ก์ง์ ๋ณด๋ด๊ธฐ๋ง ํ๋ฉด ๋ ๋๋ง ๋ก์ง์์๋ ๋ฐ์ ๊ฐ์ ๊ทธ๋ ค์ฃผ๊ธฐ๋ง ํ๋ฉด ๋์๋ค. ์ค์ ๋ก ํ๋ก์ ํธ ํ๋ฐ์ ๋ฐฑ์๋๋ฅผ ๋ด๋นํ ์ฉ๋ฏผ๋์ด ์ถ๊ฐ์ ์ผ๋ก vue๋ฅผ ์ฌ์ฉํ ํ์ด์ง ๊ตฌํ์ ์ฐธ์ฌํ๊ณ ์ถ๋ค๊ณ ํ์
จ์ ๋, textMap์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ์ ๋๋ก๋ ์ฝ๊ฒ ํ์ด์ง ๊ตฌํ์ด ๋ ์ ์์๋ค. ์ปดํฌ๋ํธ ๋ถ๋ฆฌํ๊ธฐํ์ฌ๊น์ง๋ 10๊ฐ์ ํ์ด์ง๋ฅผ ํ๊ฐ์ ์ปดํฌ๋ํธ์์ ๊ทธ๋ฆฌ๋๋ก ๊ฒฐ์ ํ๊ณ , ๊ฐ ํ์ด์ง๋ค์ ๊ตฌ์ฑํ๋ text ๊ฐ๋ค์ textMap์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํ๋ค. ์ด์ ์ปดํฌ๋ํธ๋ค์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค. ํ์ด์ง ์ ๋ชฉ์ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ ํ์์๋ ์์ ๋ถ๋ถ์ด์์ง๋ง, ํํฐ๋ง ๋ฐ์ค, breadcrumb, ํ
์ด๋ธ์ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ ํ์๊ฐ ์์๋ค. ๊ทธ๋ฐ๋ฐ 4๊ฐ์ ์์๋ค ์ค์์ ํน๋ณํ ํํฐ๋ง ๋ฐ์ค๋ ๋ด๋ถ๋ฅผ ๊ตฌ์ฑํ๋ form ์์๋ค์ด ์กฐ๊ธ์ฉ ๋ฌ๋๋ค. ํํฐ๋ง ๋ฐ์ค์ ๊ฒฝ์ฐ ๋ด๋ถ์์ ์ข ๋ ์์ ์ปดํฌ๋ํธ๋ค๋ก ์ชผ๊ฐ์ง ํ์๊ฐ ์์๋ค. 10๊ฐ์ ํ์ด์ง๋ฅผ ๊ด์ฐฐํ ๊ฒฐ๊ณผ ํํฐ๋ง ๋ฐ์ค ๋ด๋ถ์ form ์์๋ค์ 8๊ฐ์ ์ข
๋ฅ๋ก ๋๋ ๋ณผ ์ ์์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก๋ textMap์์ ํํฐ๋ง ๋ฐ์ค ๋ด๋ถ form ์์๋ค์ ํ์
๊ฐ 1~8์ ๊ฐ์ง๋๋ก ํ๊ณ , ํํฐ๋ง ๋ฐ์ค ๋ด๋ถ์์๋ textMap์ ํํฐ๋ง ํ์
๊ฐ์ ๋ฐ๋ผ์ ๊ทธ๋ ค์ง๊ฑฐ๋ ๊ทธ๋ ค์ง์ง ์๋๋ก ํ๋ค. ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์ฑํ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ค๋ช
ํ๊ฒ ๋ค. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051<template> <div> <PageLoading v-if=\"!done\" /> <h3 class=\"page-title\"> <small></small> </h3> <FilterBox :filters=\"filters\" :orderStatus=\"orderStatus\" /> <BreadCrumb :orderStatus=\"orderStatus\" /> <Table :table=\"table\" :tableMap=\"tableMap\" :tableId=\"tableId\" :orderStatus=\"orderStatus\" /> </div></template> <script>import path from '@/assets/textMap'; ... export default {... data() { const { main, sub, filters, sort, table, tableMap, tableId, orderStatus } = path[this.$route.params.subMenu]; return { main, sub, filters, sort, table, tableMap, tableId, orderStatus: orderStatus ? orderStatus : 0, namespace: this.$route.params.subMenu, done: true }; }, ...Colored by Color Scriptercs ์ฐ์ 10๊ฐ์ ํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๋ ์ปดํฌ๋ํธ ์ฝ๋์ด๋ค. ์คํฌ๋ฆฝํธ ํ๊ทธ ์์์๋ textMap์ ๊ฐ์ ์ฝ์ด์ ์ ์ฅํ๊ณ , templateํ๊ทธ ์์์๋ ์ ์ฅํ textMap ๊ฐ์ ํํฐ๋ง ๋ฐ์ค, breadcrumb, ํ
์ด๋ธ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค. ๊ทธ๋์ ์ด ์ปดํฌ๋ํธ ์์ฒด๋ก๋ textMap์ ์ ๋ฌํ๋ ์ญํ ์ธ์ ๋ค๋ฅธ ํฐ ์ญํ ์ ๋ถ์ฌ๋ฐ์ง ์์๋ค.(๋ฌผ๋ก ํ์ด์ง ์ ํ์ loading์ ์งํํ๋ ์ญํ ์ ๋งก๊ธด ํ๋ค.) ์ด์ ํํฐ๋ง ๋ฐ์ค๋ฅผ ๋ด๋นํ๊ณ ์๋ ์ปดํฌ๋ํธ ๋ด๋ถ๋ฅผ ๋ณด๋ฉด 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051<template> <div class=\"filter-box\"> <ul class=\"filter-block\"> <li class=\"filter-list\" :key=\"filter.title\" v-for=\"filter of filters\"> <SelectInput v-if=\"filter.type === 1\" :options=\"filter.values\" /> <ButtonDate v-if=\"filter.type === 2\" :title=\"filter.title\" :buttons=\"filter.values\" :default=\"filter.default\" /> <SingleButtons v-if=\"filter.type === 3\" :title=\"filter.title\" :buttons=\"filter.values\" :filterKey=\"filter.key\" :default=\"filter.default\" /> <MultiButtons v-if=\"filter.type === 4\" :title=\"filter.title\" :buttons=\"filter.values\" :default=\"filter.default\" /> <Date v-if=\"filter.type === 5\" :title=\"filter.title\" /> <Input v-if=\"filter.type === 6\" :title=\"filter.title\" :filterKey=\"filter.key\" :placeholder=\"filter.values\" /> <SelectDate v-if=\"filter.type === 7\" :options=\"filter.select\" :buttons=\"filter.values\" :default=\"filter.default\" /> <Select v-if=\"filter.type === 8\" :title=\"filter.title\" :filterKey=\"filter.key\" :options=\"filter.values\" /> </li> </ul> <div class=\"filter-action\"> <div class=\"button search\" @click=\"searchResult\">๊ฒ์</div> <div class=\"button reset\" @click=\"reset\">์ด๊ธฐํ</div> </div> </div></template>Colored by Color Scriptercs ํํฐ๋ง ๋ฐ์ค ์ปดํฌ๋ํธ์์๋ ์ ๋ฌ ๋ฐ์ textMap์ type๊ฐ์ ํ์ธํด์ ํด๋น type ๊ฐ์ ํด๋นํ๋ form ์์๋ง ๊ทธ๋ ค์ค๋ค. ๋ฐ๋ผ์ ํ์ด์ง๊ฐ ์ถ๊ฐ๋์๊ฑฐ๋ ํน์ ํ์ด์ง์ ํํฐ ์์๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ textMap๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ ๋๋ง ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ๊ทธ๋ ค์ง๋ค. api ํต์ ๊ณ ๋ คํ๊ธฐ๊ทธ๋ฐ๋ฐ textMap์ ๊ตฌ์ฑํ ๋, ํ๊ฐ์ง ๋ ๊ณ ๋ คํ ์ ์ด ์์๋ค. ํํฐ๋ง ๋ฐ์ค์ ํด๋นํ๋ textMap์ ๊ฒฝ์ฐ ๋จ์ํ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๋ฐ์ดํฐ๋ง ์์ด์๋ ์๋์๋ค. ์๋ํ๋ฉด ์ ํ๋ ํํฐ ๊ฐ๋ค์ ์ค์ ๋ฐฑ์๋์ ์์ฒญํ๋ ๊ฐ์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ textMap์ ํ๋ฉด์ ํ์๋ text ๊ฐ๊ณผ ๋ฐฑ์๋์ ๋ณด๋ผ ํํฐ ๊ฐ 2๊ฐ์ง ๋ชจ๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ textMap์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ก๊ณ , key๋ ๋ฐฑ์๋๋ก ๋ณด๋ด๋ ํํฐ ๊ฐ, value๋ ํ๋ฉด์ ํ์๋ text ๊ฐ์ผ๋ก ๊ตฌ์ฑํ๋ค. ์๋์ ์ฝ๋๋ textMap์ ์ผ๋ถ์ด๋ค. ์ํ์ ๋ํ ๊ฒ์์ ํ ๋ ํ์ํ text ๊ฐ์ธ๋ฐ, ๋ฐฑ์๋์ ๋ณด๋ผ ๊ฐ์ด PRODUCT_NAME์ด๋ผ๋ฉด ํด๋น ๊ฐ์ ํ๋ฉด์ ์ํ๋ช
์ผ๋ก ๊ทธ๋ ค์ง๋ค. 123456789... export const PRODUCT_SELECT = { PRODUCT_NAME: '์ํ๋ช
', PRODUCT_NO: '์ํ๋ฒํธ', PRODUCT_CD: '์ํ์ฝ๋'}; ...cs ๊ทธ๋ ๋ค๋ฉด ์ ์ ๊ฐ ์ ํํ ํน์ ๊ฐ, ํํฐ๋ง๋ ๊ฐ๋ค์ ์ด๋์ ์ ์ฅ์ ํด์ผ ํ ๊น? ์ฌ๊ธฐ์ 2๊ฐ์ง์ ์ ํ์ง๊ฐ ์๋๋ฐ, ํ๋๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ ํํฐ๋ง ๋ฐ์ค์์ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ ์์ form ์์๋ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ vuex๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ํํฐ๋ง ๊ฐ๋ค์ vuex์์ ๊ด๋ฆฌํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค. 2๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋๊ฐ ์ฅ๋จ์ ์ด ์์๋ค. ์ฐ์ ์๊ฐ์ ํด๋ณด๋ฉด ์ค์ํ ๊ฑด ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์ด๊ณ ์ด ๋ถ๋ถ์ ์ญํ ์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง์ง vuex๊ฐ ๊ฐ์ง์ง๋ฅผ ์ ํด์ผ ํ๋ค. ์ปดํฌ๋ํธ๊ฐ ์ด ์ญํ ์ ๊ฐ์ง๋ค๋ฉด ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๋
๋ฆฝ์ ์ด๋ฉฐ ์์กด์ฑ์ด ์ ์, ์ข ๋ ์์ ๋กญ๊ฒ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์กฐํฉ์ด ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ฌ๊ธฐ์ ๋ ์๋กญ๊ฒ ๊ณ ๋ คํ ์ง์ ์ด ์๊ฒผ๋๋ฐ, ์ฌ์ค ์์์ด ๋ถ๋ชจ์ ์ํ ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ vue์์ ํธ๋ฆฌํ๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ๊ฐ ๊ฐ์ ์ ๋ถ ๊ฐ์ง๊ณ ์๊ณ ์ํ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ์์ ์ปดํฌ๋ํธ์ ๋๊ฒจ์ฃผ๊ฒ ํ ์ ์๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ๋ก์ง์ด ๋๋ฌด ๊ธธ์ด์ง๋ค. ๊ทธ๋ ๋ค๊ณ ๊ฑฐ๊พธ๋ก ์์์ด ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ฒ์์ด๋ ์ด๊ธฐํ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ๋ถ๋ชจ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์์์ ์ํ ๊ฐ์ ๋ฐ๊พธ๋๋ก ์ด๋ฒคํธ ๋ฒ์ค๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋๋ฐ ๊ด๋ฆฌํด์ผ ํ ์ํ๊ฐ๊ณผ ์ปดํฌ๋ํธ์ ์๊ฐ ์ ์ง ์์์ ๋ถํธํด์ง๋ค. ๊ทธ๋์ ๊ฒฐ๋ก ์ ์ผ๋ก vuex๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. vuex๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์กด์ฑ์ด ์๊ฒจ์ ์์ ๋กญ๊ฒ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์กฐํฉ์ด ๊ฐ๋ฅํ์ง๋ ์์ง๋ง, ์ปดํฌ๋ํธ ๊ฐ ๊ตฌ์ฑ์ด ์ฌ์ค์ ์ ํด์ง ์ํ์ด๊ณ vuex๋ง ์ ๊ด๋ฆฌํ๋ค๋ฉด ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ๊ณ ์ ํ ์ํ๋ก๋ ๋น๊ต์ ๋ณํ์ ์ ์ฐํ๊ฒ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ๊ทธ๋์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ ๊ตฌ์ฑ์ด ๋์๋ค. ์ ์ ์ธ ๋ฐ์ดํฐ textMap์ lookup ์ปดํฌ๋ํธ์์ ์ฝ์ด์ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ์ ํ๊ณ , ๋์ ์ธ ์ํ๊ฐ๋ค์ ๊ฐ ์ปดํฌ๋ํธ์์ vuex๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ค. vuex์์๋ ๋์ ์ธ ์ํ๊ฐ๋ค์ ๊ด๋ฆฌํ๊ณ , ์ ์ฅ๋ ์ํ๊ฐ์ ์ฌ์ฉํ์ฌ api ํต์ ๋ ๋ด๋นํ๋ค. ๋ง์ง๋ง์ผ๋ก ๋ค์ ๊ธ์์๋ ์ด๋ฒ ํ๋ก์ ํธ์์ vuex๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ฅผ ์ ๋ฆฌํ๊ฒ ๋ค.","link":"/2020/10/26/brandi-internship-2/"},{"title":"Brandi Internship - Part 3","text":"์ฝ๋ ๋ฆฌ๋ทฐ์ฒ์ ๋ธ๋๋ ์ธํด์ฝ ๊ธฐ๊ฐ์๋ ๋งค์ฃผ 2๋ฒ์ฉ ์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ์งํ๋์๋ค. ๊ฐ ํ์์ ํ์ฌ๊น์ง ๊ตฌํ๋ ๋ด์ฉ๊ณผ ์ฝ๋๋ค์ ๋ฆฌ๋ทฐ ๋ฐ๋ ์๊ฐ์ด์๋ค. ํ๋ก ํธ์ ๊ฒฝ์ฐ์๋ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋๊ฐ ๋ณด๋ค๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ด๋ค ์์๋ค์ ๊ณ ๋ คํ๋์ง๋ฅผ ๋ ๋ง์ด ์ง๋ฌธ ๋ฐ์์๋ค. ํํฐ๋ง๋ ๊ฐ๋ค์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ถ์ด๋ฉด ์ด๋จ๊น์?ํผ๋๋ฐฑ ๋ฐ์ ๋ด์ฉ๋ค์ ๋๋ถ๋ถ ์ฌ์ฉ์์ ํธ์์ฑ์ ๊ด๋ จ๋ ๋ด์ฉ๋ค์ด์๋ค. ์๋ฅผ ๋ค๋ฉด ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋ ๋, ํ์ด์ง๋ค์ ๊ตฌ์ฑ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ด๋ ๋ฐ์์ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ํด๋ฆญํด๋ ๋ณ๊ฒฝ๋์๋ค๋ ๊ฒ์ ๋ฐ๋ก ์์์ฐจ๋ฆฌ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค. ๊ทธ๋์ ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋ค๋ ์ฌ์ค์ ์ฌ์ฉ์๊ฐ ์ ์ ์๋๋ก ํ์ด์ง๊ฐ ๋ฐ๋๊ธฐ ์ ์ ๋ก๋ฉ ์ฐฝ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค๋ ํผ๋๋ฐฑ์ด ์์๊ณ , ํผ๋๋ฐฑ๋๋ก ๋ก๋ฉ ํ์ด์ง๋ฅผ ๋ถ์ฌ ๋ณด์๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ก๋ฉ ํ์ด์ง ๋๋ถ์ ํ์ด์ง ๋ณ๊ฒฝ ์ฌ์ค์ ํจ์ฌ ์ฝ๊ฒ ์์์ฐจ๋ฆด ์ ์์๋ค. ๋ ๋ค๋ฅธ ํผ๋๋ฐฑ ๋ด์ฉ ์ค์๋ vuex ํ์ผ์ ์ ๋ถ ์์ ํ๋ ํผ๋๋ฐฑ์ด ์์๋ค. ์ฌ์ฉ์๊ฐ ํํฐ๋ง ๋ฐ์ค์์ ํน์ ํํฐ ๊ฐ์ ์ ํํ๊ณ ๊ฒ์ ๋ฒํผ์ ๋๋ฅธ ๊ฒฝ์ฐ์ ํด๋น ํํฐ ๊ฐ๋ค์ด uri์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ถ์ผ๋ฉด ์ข๊ฒ ๋ค๋ ํผ๋๋ฐฑ์ด ์์๋ค. ์ด์ ๋ ์ฐ์ vue๋ react๊ฐ์ spa ํ์ด์ง ํน์ฑ์ ๋ผ์ฐํ
์ฒ๋ฆฌ๋ ์ค์ ์๋ฒ์ ๋ํ ์์ฒญ์ด ์๋๋ผ js๊ฐ dom์ ์กฐ์ํ๋ ํธ๋ฆฌ๊ฑฐ์ผ ๋ฟ์ด๋ค. ๋๋ฌธ์ ์๋ก ๊ณ ์นจ์ด๋ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ ๊ฒฝ์ฐ์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ๋ถ์ uri๊ฐ ํ์คํ ๋ฆฌ์ ์ ์ฅ๋์ง ์๋๋ค๋ฉด ํด๋น ์ํ ๊ฐ๋ค์ ์ ์ง๋์ง ์๋๋ค. ๋ํ ๋จ์ํ ์ฟผ๋ฆฌ์คํธ๋ง๋ง ๋ถ์ด๋ฉด ๋๋ ๊ฒ์ด ์๋๊ณ ์ฟผ๋ฆฌ์คํธ๋ง์ ํ์ฑํด์ ๋ค์ ์ํ ๊ฐ์ผ๋ก ์ ์ฅํด ์ฃผ์ด์ผ ์๋ก๊ณ ์นจ์ด๋ ๋ค๋ก ๊ฐ๊ธฐ๊ฐ ๋ฐ์์ด ๋์๋ค. ๋ฌธ์ ๋ ์ด ๋ก์ง์ ์ฒ๋ฆฌ๊ฐ 10๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ทธ๋ฆฌ๋ ์ผ์ ๋ด๋นํ๋ lookup ์ปดํฌ๋ํธ์์ ๋ด๋นํ๋ค๋ ๊ฒ์ด์๋ค. ์ด๊ฒ ๋ฌธ์ ๊ฐ ๋๋ ์ด์ ๋ ์ฐ์ ํ์ด์ง ๋ง๋ค ์ฌ์ฉํ๋ ํํฐ ๊ฐ์ด ๋ค๋ฅด๊ณ , ๋ ๋ค ๊ฐ๋ค๊ณ ํ๋๋ผ๋ ๋ชจ๋ ํํฐ ์ํ ๊ฐ์ lookup์์ vuex๋ก ๋๊ธฐ๋๋ก ๋ก์ง์ ์ถ๊ฐํด์ผ ํ๋ค. vuex๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ ๋, ๋ณธ๋ ๋์ ์ผ๋ก vuex ๋ด๋ถ๋ฅผ ๊ตฌ์ฑํ๋๋ก ํ๋ ค๊ณ ํ์ง๋ง ์ข์ ๊ตฌ์ฑ์ ํ๊ธฐ ์ํ ์๋ฃ ๋ถ์กฑ + ๊ณต๋ถํ ์๊ฐ ๋ถ์กฑ ๋ฑ๋ฑ์ ์ด์ ๋ก ํ์ด์ง ๋ง๋ค ํ๋์ vuex๋ฅผ ๊ฐ์ง๋๋ก ๋ง๋ค์๋ค. ๋ฌธ์ ๋ ํํฐ ๊ฐ ํ๋ ํ๋ ๋ง๋ค getters, mutations, actions ํจ์๊ฐ ์ถ๊ฐ๋์๊ธฐ ๋๋ฌธ์ ์ํ๊ฐ ๊ฐ์ x 3 ๋งํผ์ ์ฝ๋๊ฐ ์์ฑ๋์๊ณ , ํ์ด์ง๊ฐ์ ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ๋ ์์๋๋ฐ ์ค๋ณต์ด ๋ง์ด ๋ฐ์ํ๊ฒ ๋์๋ค. ์ค๋ณต์ ๊ทธ ์์ฒด๋ก๋ ๋ฌธ์ ์ผ ์๋ ์์ง๋ง, ์ง์ง ๋ฌธ์ ๋ ๋ก์ง์ ์์ ์ด ํ์ํ ๋, ์ค๋ณต๋ ์ฝ๋ ์ ๋ถ๋ฅผ ์์ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ํ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก๋ ํ์ฌ์ vuex ๋ก์ง์ผ๋ก๋ ์ฟผ๋ฆฌ์คํธ๋ง์ uri์ ์ถ๊ฐํ๊ณ ๋ค์ ์ํ ๊ฐ์ผ๋ก ์ ์ฅํ๋ ๋ก์ง์ ๋ง๋ค์๊ฐ ์์๋ค. ๋ญ๊ฐ vuex ๋ด๋ถ ๋ก์ง์ ์ถ์ํํ ํ์๊ฐ ์์๋ค. getters๋ฅผ currying์ผ๋ก ๊ตฌ์ฑํ๊ธฐ๋๋ vuex๋ฅผ ๊ฐ ํ์ด์ง ๋ณ๋ก ๋๋์ด์ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ ์ํด namespace๋ฅผ ์ด์ฉํ ๋ชจ๋์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค. ๋ชจ๋์ ์ฌ์ฉํ ๊ฒฝ์ฐ vuex์์ ์ ๊ณตํ๋ helper ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด vue์์ ์ฝ๊ฒ ํน์ store๋ง ์ฌ์ฉํ ์ ์๋ค. ํนํ lookup์๋ uri์ ๋ง์ง๋ง ๊ฐ์ ๋ฐ๋ผ์ textMap๊ณผ store๊ฐ ๋งค์นญ๋๋๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์๋ uri ํ์ฑ์ด ๋จผ์ ์ผ์ด๋๊ณ ๊ทธ ๋ค์ ํน์ store์ ๋งค์นญ์ ์์ผ์ผ ํ๋ค. ๋ฌธ์ ๋ uri๋ฅผ ํ์ฑํ๋ ํ์ด๋ฐ๊ณผ store๋ฅผ ๋งค์นญํ๋ ํ์ด๋ฐ์ด ๊ฐ๋ค๋ ๊ฒ์ด์๋๋ฐ, vue์์ undefined๊ฐ์ผ๋ก store๋ฅผ ์ฐพ๊ฒ ๋์ด์ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ helperํจ์์ ๋์์ ๋ฐ์ผ๋ฉด store์ ๋งค์นญ๋๋ ํ์ด๋ฐ์ ์ง์ฐ์ํฌ ์ ์๋ค.(์ ์ธ ์์๋ ๋งค์นญ์ด ๋์ง ์๊ณ , ์คํ๋์์ ๋ ํน์ store์ ๋งค์นญ๋ getters, dispatch ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค.) ๋งจ์ฒ์์๋ getter๊ฐ ๋ฐํํ๋ ๊ฐ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ถ์ํ๋ฅผ ํ ์ ์๋ค๊ณ ์๊ฐํด์ ์ํ ๊ฐ๋ง๋ค, getters, mutations, actions๋ฅผ ๋ง๋ค์๋ค. ๊ทธ๋ฌ๋ ์ถ์ํ๋ฅผ ํ๊ธฐ ์ํด ๊ตฌ๊ธ๋ง์ ํ ๊ฒฐ๊ณผ getters๋ฅผ ์ปค๋งํจ์๋ก ๋ง๋ค๋ฉด ์ธ์๋ก ์ํ์ ์ด๋ฆ์ ๋ฐ์์ ๊ฐ์ ๋ฐํํ๋๋ก ๋ง๋ค ์ ์์๋ค. ์ฆ ์ถ์ํ๊ฐ ๊ฐ๋ฅํด์ก๋ค. ์ถ์ํ๊ฐ ๊ฐ๋ฅํด์ก์ ๋ฟ ์๋๋ผ ์ฝ๋์ ๊ธธ์ด๋ ํจ์ฌ ์ค์ด๋ค์๋ค. ์ํ ๊ฐ์ ๊ฐ์๋งํผ ์์๋ ํจ์๋ค์ด ๋จ ํ๋์ ํจ์๋ก ์ค์๊ณ , lookup์์๋ ์ถ์ํ๋ getters์ actions๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ์ด์ง ๋ง๋ค ํํฐ๊ฐ์ด ๋ฌ๋ผ๋ ์ฟผ๋ฆฌ์คํธ๋ง ๊ฐ์ ์ฝ๊ณ ์ ์ฅํ ์ ์๊ฒ ๋์๋ค. ์๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด getters์ mutation์ด ์ธ์๋ฅผ ๋ฐ์์ ๊ฐ์ ์ฝ๊ฑฐ๋ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ์ํ๊ฐ์ด ์ถ๊ฐ ๋์ด๋ ๋ณ๊ฒฝ๋ ํ์๊ฐ ์๊ฒ ๋์๋ค. 1234567891011121314151617181920212223242526272829303132333435363738export default { namespaced: true, ... getters: { getFilters(state) { return makeQs(state, state.dateValue); }, getValue: state => key => { return state[key]; } }, mutations: { setValue(state, { key, value }) { state[key] = value; }, reset(state) { const defaultTerm = 3; state.isLoading = false; state.selectFilter = ''; state.filterKeyword = ''; state.dateValue = 3; state.filterDateFrom = fromNow(defaultTerm); state.filterDateTo = new Date(); state.mdSeNo = []; state.filterOrder = 'NEW'; state.filterLimit = 50; state.page = 1; state.filteredResult = []; state.page_number = 0; state.total_order_number = 0; } }, ...Colored by Color Scriptercs ์ธํด์ฝ์ ๋ง์น๋ฉด์..์ธํด์ฝ์ ์์ํ ๋๋ ๋ถํธ์บ ํ ๋์ ๋์ผํ๊ฒ ํด๋ก๋ ํ๋ก์ ํธ๋ฅผ ๋งก๊ฒ ๋ ๊ฒ, react๊ฐ ์๋๋ผ vue๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๊ตฌํํด์ผ ํ ํ์ด์ง๊ฐ ๋ง์๋ ๊ฒ ๋๋ฌธ์ ์ด๋ฐ ์ ๋ฐ ์์ฌ์๋ค์ด ์์์๋ค. ๊ทธ๋ฌ๋ ์ธํด์ฝ์ ์งํํ๋ฉด์ ์ด์ ์ ์งํํ๋ ํด๋ก๋ ํ๋ก์ ํธ๋ณด๋ค ๋ ํฐ ๊ท๋ชจ์ ์ฌ์ดํธ๋ฅผ ์ค๊ณํ๋ฉด์ ํจํด์ ์ฐพ์๋ณด๊ณ , vue์ ์ฅ์ ์ ๊ฒฝํํด ๋ณด๊ณ , ํผ๋๋ฐฑ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ , ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ฉด์ ๋ฐฐ์ฐ๊ฒ ๋ ๊ฒ์ด ๋ง์๋ค. ํนํ ์ด์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ ์์ฒด์ ์ด์ ์ด ์์๋๋ฐ, ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉด์ ๋ด๊ฐ ๋ง๋๋ ์ฌ์ดํธ ํน์ ๊ธฐ๋ฅ์ด ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์
์ฅ์์ ํธ๋ฆฌํ์ง, ์ฌ์ฉ์๊ฐ ์ด๋ค ํ๋๊น์ง ํ ๊ฒ์ด๋ผ๊ณ ๊ณ ๋ คํด ๋ดค๋์ง ๋ฑ ์ฌ์ฉ์ ํธ์์ฑ์ ๋ํ ๊ณ ๋ ค๋ฅผ ์ฒ์ ํด๋ณด๊ฒ ๋์๋ค. ๋ค๋ง ์์ฌ์ ๋ ๊ฒ์ โํจํด์ ์ ๊ฑฐ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐ๊ฒฌ๋๋ ๊ฒโ์ด๋ผ๋ ์ผํธ ๋ฐฑ ์์ ์จ์ ๋ง์ฒ๋ผ ๋์ ์์ค์์๋ ์์ง ๋ฎ์ ์์ค์์์ ํจํด ์ฐพ๊ธฐ๋ฐ์ ๋์ง ์์๊ณ vuex์ ๊ฒฝ์ฐ ์ค๋ณต์ด ์กด์ฌํ๋ค. ๊ทธ๋์ ์ฝ๋๊ฐ ์์ ๋๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฝ๋๋ค๋ ์์ ์ ํด์ผํ๋ ์ผ์ด ๋ฐ์ํ๋ค. ๋ํ 10๊ฐ์ ํ์ด์ง๋ฅผ ๊ทธ๋ฆด ๋, ๊ฐ ํ์ด์ง์ ๋ํ api๋ฅผ ๋ง๋ ๋ฐฑ์๋ ํ์์ 3๋ช
์ด์๋๋ฐ, ์ถ์ํ๋ vuex๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐฑ์๋ ํ์์ด ์ฃผ๋ response json์ ํ์์ด ๋์ผํด์ผ ํ๋ค. ํ๋ก์ ํธ ๋ง๋ฏธ์ ํ์์ ๋ง์ถฐ๋ฌ๋ผ๋ ๋์ ์์ฒญ์ ๋ฐฑ์๋ ํ์๋ค์ด ๋ง์ถ์ด ์ฃผ์์ง๋ง, ๋ฏธ๋ฆฌ ๋ง์ถ์ง ๋ชปํด์ ๋ค์ด๋ฐ์ด๋ ํ์์ด ๋ค์ ๋ถ์์ฐ์ค๋ฌ์ ๋ค. ์์ผ๋ก๋ ์ด๋ฐ ๋ถ๋ถ๊น์ง ๋ฏธ๋ฆฌ ๊ณ ๋ ค๋ฅผ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์๋ค. (์ ์ ์์ฒญ์ ๋ค์ด์ค ์ง์, ํด์ค, ์ฉ๋ฏผ๋ ๊ฐ์ฌํฉ๋๋คโฆ) ๋ง์ง๋ง์ผ๋ก webpack ์ค์ ์์ ์ฒด์ด๋์ ํตํด ๊ฐ๊ฒฐํ๊ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์์ผ๋ฉด ์ข์์ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์๋ ๋ง์ ๊ณต๋ถ์ ๊ฒฝํ์ด ํ์ํ ๊ฒ ๊ฐ๋ค. vue-cli3๋ณด๋ค ๋ ์ข์ ๊ฐ๋ฐ, ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ ์๋นํ ๋ง์ ๊ณต๋ถ์ ๊ฒฝํ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ ๋งํผ ์์ค์ด ์ค๋ฅด๊ธฐ ์ ๊น์ง๋ ๊ทธ๋ฅ vue-cli3๋ฅผ ์ฌ์ฉ์ ํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค.(Evan You๋ vue-cli์ฐ๋ผ๊ณ ํ๋ค. ํํ..) ์ ์ ์ธํด์ฝ์ ์งํํ 10๋ช
์ ํ์๋ค ๋ชจ๋ ์๊ณ ๋ง์ผ์
จ์ต๋๋ค. ๋ค๋ค ์์ผ๋ก๋ ๋น ์ดํ
์ด์์ :)","link":"/2020/10/27/brandi-internship-3/"},{"title":"JS ์คํ ์ปจํ
์คํธ ์ดํดํ๊ธฐ","text":"์ฌํด ์ด ํ์ฌ ๋ด ์ ์
์ฌ์๋ค์ด ์งํํ๋ ์ธ๋ฏธ๋์์ ๋ฐํํ ๋ด์ฉ์ git blog์ ์ฎ๊ฒจ๋ณด์๋ค.ํด๋น ๋ฐํ์์๋ execution context์ ๋์ ๋ฐฉ์๊ณผ js๊ฐ ์ด๋ป๊ฒ execution context๋ฅผ ๋ฐํ์ผ๋ก closure ํ๊ฒฝ์ ์ ๊ณตํ๋์ง๋ฅผ ๋ค๋ฃจ์๋ค. 1. ๋์
์คํ ๊ฒฐ๊ณผ ์์ธกํด๋ณด๊ธฐ 12345678910111213const x = 1; function foo() { const y = 2; function bar () { const z = 3; console.log(x + y + z); } bar();}; foo(); // ์คํ ๊ฒฐ๊ณผ๋?cs โ function foo ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ? Javascript๋ script ์ธ์ด์ด๋ค. script์ธ์ด ํน์ฑ ์ ์ธ์ด์ ํด์๊ณผ ์คํ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฐํ์์ ์ด๋ฃจ์ด ์ง๋ค. c์ java์ ๊ฐ์ compile ์ธ์ด๋ ๊ธฐ๊ณ์ด ํน์ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ฒ์ญ๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์คํ๋์ง๋ง Javascript๋ ํ
์คํธ ํ์ผ์ด ํด์๋๊ณ ์คํ๋๋ค. ๊ทธ๋ ๋ค๋ฉด javascript ์ฝ๋์ ํด์๊ณผ ์คํ์ ์ด๋ค ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด ์ง๊น? js engine์ javascript ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ ํ
์คํธ ํ์ผ์ parsing & interpreting ํ๋๋ฐ ์์ค์ฝ๋๋ผ๋ ๋จ์๋ก ์คํํ๋ค. ์์ค์ฝ๋์ ์ข
๋ฅ (์ฐธ์กฐ https://262.ecma-international.org/6.0/#sec-types-of-source-code) ์์ค์ฝ๋๋ผ๋ ๋จ์ด ์์ฒด๋ ์ฐ๋ฆฌ๊ฐ ๊ต์ฅํ ํํ๊ฒ ์ฐ๋ ๋จ์ด์ด์ง๋ง ECMAScript spec์์๋ ์์ค์ฝ๋๋ฅผ ๋ณ๋๋ก ์ ์ํ๊ณ ์๋ค. ECMAScript spec์ ๋ณด๋ฉด ๋ค์ 4๊ฐ์ ํ์
์ ์ฝ๋๋ฅผ ์์ค ์ฝ๋๋ผ๊ณ ์ ์ํ๋ฉฐ javascript engine์ ๋ค์ 4๊ฐ์ง์ ์์ค ์ฝ๋๋ฅผ ์คํ์ ๋จ์๋ก ์๊ฐํ๋ค. type ์ค๋ช
์ ์ญ ์ฝ๋ ์ ์ญ์ ์กด์ฌํ๋ ์์ค์ฝ๋, ์ ์ญ์ ์ ์๋ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋๋ ํฌํจ๋์ง ์๋๋ค. (Javascript๋ ๋ก๋์ ๋์์ ๋ฐ๋ก ํด์๊ณผ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ c์ Java์ ๊ฐ์ ์คํ ์์ ์ (main ํจ์)๊ณผ ๊ฐ์ ์ญํ ์ ์ ์ญ ์ฝ๋๊ฐ ๋ด๋นํ๋ค. ) ํจ์ ์ฝ๋ ํจ์ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋(function body)๋ฅผ ๋งํ๋ค. ํจ์ ๋ด๋ถ์ ์ค์ฒฉ๋ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋๋ ํฌํจ๋์ง ์๋๋ค. eval ์ฝ๋ ๋นํธ์ธ ์ ์ญ ํจ์์ธ eval ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ์คํ๋๋ ์์ค์ฝ๋ ๋ชจ๋ ์ฝ๋ ๋ชจ๋ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋๋ฅผ ๋งํ๋ค. ๋ชจ๋ ๋ด๋ถ์ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋๋ ํฌํจ๋์ง ์๋๋ค. ์ฆ, ์์ ์์ค ์ฝ๋๋ค์ javascript ์์ง์ ์ํด ํ
์คํธ๊ฐ ํด์(parsing & interpreting)๋๋ฉด์ ๋์์ ์คํ(evaluating & executing)๋๋ ๋์์ด๋ค. ์ด ์์ค์ฝ๋๊ฐ ์คํ๋ ๋ ์คํ์ปจํ์คํธ๋ผ๊ณ ๋ ๋ถ๋ฅด๋ ์ฝ ์คํ์ด ์์ฑ๋๋ค. ์คํ ์ปจํ
์คํธ๋ javascript์ ์ฝ ์คํ์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์คํ ์ปจํ
์คํธ๊ฐ ์ฝ ์คํ์ด๋ผ๋ ๊ฒ์ ์๊ฐํ๋ค๋ฉด ์คํ ์ปจํ
์คํธ์ ๊ฐ๋
์ด ์ด๋ ต๊ฒ ๋ค๊ฐ์ค์ง๋ ์์ ๊ฒ์ด๋ค. (๋ฌผ๋ก ์ด๋ ๊ฒ ๋จ์ํ์ง๋ ์๊ณ ๋
ํนํ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ์์ผ๋ก ์ค๋ช
ํ ๊ฒ์ด๋ค.) ์คํ ์ปจํ
์คํธ๋ฅผ ์ฝ ์คํ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์์์ ๋์จ ์์ ์ฝ๋์ ์คํ ์ปจํ
์คํธ์ ๋ณํ๋ฅผ ์ฝ๊ฒ ๊ทธ๋ฆด ์ ์๋ค. ์ถ์ฒ.https://meetup.toast.com/posts/123 4๊ฐ์ง ํ์
์ ๋ฐ๋ผ์ ์คํ ์ปจํ
์คํธ ๋ด๋ถ์ ๊ตฌ์ฑ(์ ํํ๊ฒ๋ ์คํ ์ปจํ
์คํธ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ์์ปฌ ํ๊ฒฝ(Lexical Environment) ๋ด๋ถ์ ๊ตฌ์ฑ)์ด ๋ฌ๋ผ์ง๋๋ฐ, ์ค๋์ ์ค์ํ ๋ด์ฉ์ธ ์ ์ญ ์ฝ๋์ ํจ์ ์ฝ๋์ ์คํ ์ปจํ
์คํธ์ ๋ํด์๋ง ์ค๋ช
ํ๋ ค๊ณ ํ๋ค. โ Javascript์ ์ฝ ์คํ, ์คํ ์ปจํ
์คํธ๋ฅผ ์ดํดํ๋ ๊ฒ ์ ์ฉํ ์ด์ ๋? Javascript์ ํธ์ด์คํ
, ํด๋ก์ ์ ๊ฐ์ ํน์ฑ๋ค์ด ์ด๋ค ๋์์ผ๋ก ์ธํด ์๊ธฐ๋ ์ง ์ดํดํ ์ ์๋ค. โ ์ฝ๋์ ๋์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๊ณ , ํนํ ๋ณ์์ ์ค์ฝํ๋ฅผ ์์ํ ์ ์๋ค. ์ค๋ ๋ค๋ฃจ์ง๋ ์์ง๋ง generator์ ๋์์ ๊ธฐ๋ฐ๋ ์คํ ์ปจํ
์คํธ์ Lexical Environment์ด๋ค. ์ ๋ค๋ ์ดํฐ์ ๋์์ ์ดํดํ๋ ๋ฐ๋ ๋์์ด ๋๋ค. ๋ฐ๋ผ์ ์ค๋ ์ค๋ช
์ ๋ชฉํ๋ ์คํ ์ปจํ
์คํธ์ ๊ตฌ์ฑ๊ณผ ๋์์ ๋๋ต์ ์ผ๋ก ์ดํดํด์ Javascript์์์ ๋ณ์, ํจ์์ ์ค์ฝํ๋ฅผ ์์ํ ๋ ๋์์ ์ป๋ ๊ฒ์ด๋ค. 2. ์์ค์ฝ๋์ ์คํjavascript ์์ค์ฝ๋์ ์คํ์ ์์ค์ฝ๋์ ํ๊ฐ์ ์์ค์ฝ๋์ ์คํ์ด๋ผ๋ 2๊ฐ์ ๊ณผ์ ์ผ๋ก ๋๋๋ค. ์๋์ ์์ ๋ฅผ ๊ฐ์ง๊ณ 2๊ฐ์ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ๋ค. 12345678function foo() { var a = 1; let b = 2; const c = 3; function bar() {}} foo();cs ๊ทธ ์ ์ Quiz โ ์์ ์ฝ๋๋ ์์ ์์ค์ฝ๋ ์ ์์ ๋ฐ๋ฅด๋ฉด 2๊ฐ ์ข
๋ฅ์ ์์ค์ฝ๋๊ฐ ์กด์ฌํ๋ค. ์ด๋ค ์ฝ๋๋ค์ด ์กด์ฌํ๋๊ฐ? ์ ๋ต์? ์ ์ญ์ฝ๋ foo ํจ์ ์ฝ๋ ๋ฐ๋ผ์ ์์ ์ฝ๋์ ์คํ์์๋ 2๊ฐ์ ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์์ค์ฝ๋์ ์คํ ์์ ์ค์์ ์คํ ์ปจํ
์คํธ๋ ์ธ์ ์์ฑ๋ ๊น? ์คํ ์ปจํ
์คํธ๋ ์์ค ์ฝ๋์ ํ๊ฐ ์ด์ ์ ์์ฑ๋๋ค. ์คํ์ปจํ
์คํธ ์์ฑ โ ์์ค์ฝ๋ ํ๊ฐ โ ์์ค์ฝ๋ ์คํ ์ ์์๋ก ์งํ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ค์ฝ๋๋ฅผ ํ๊ฐ ํ๊ธฐ ์ ์ ์คํ ์ปจํ
์คํธ(Execution Context)์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical Environment)์ด๋ผ๋ ๊ฒ์ ์์ฑํ๋ค. ๊ทธ ๋ค์ ์คํ ์ปจํ
์คํธ๊ฐ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ค. ๊ฐ๋จํ๊ฒ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ฆฌ๋ฉด ์๋์ ๊ฐ๋ค. ์ค์ lexical environment์ environment record๋ ์์ ๊ทธ๋ฆผ๊ณผ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง ๊ฑฐ์ ์ ์ฌํ๋ค. Execution Context Stack์ด ์ฝ ์คํ์ด๋ค. Lexical Environment๋ EnvironmentRecord์ ์๋ณ์์ ๊ฐ์ ์์ ์ ์ฅํ๋ Environment Record์ This๊ฐ์ด ์ ์ฅ๋ ThisValue๋ฅผ ๊ฐ์ง๊ณ ์๋ค. OuterLexicalEnvironment Reference์๋ ์์ ์ ์์ฑํ Lexical Environment์ ์ฐธ์กฐ ๊ฐ์ ์ ์ฅ๋๋ค. ๋ง์ฝ ์ ์ญ ์ฝ๋๋ผ๋ฉด OuterLexicalEnvironment Reference์ด ๋ญ๊ฐ ๋ ๊น? ์ ์ญ ์ฝ๋๋ ์์ ์ ์์ฑํ Lexical Environment๊ฐ ์๊ธฐ ๋๋ฌธ์ ํญ์ null ๊ฐ์ ์ ์ฅํ๋ค. 1) ์์ค ์ฝ๋์ ํ๊ฐ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ด ์์ฑ๋๋ฉด ์์ค์ฝ๋์ ํ๊ฐ๊ฐ ์์ ๋๋ค. ์์ค์ฝ๋ ํ๊ฐ ๋๋ ์์ค์ฝ๋์์ ๋ณ์, ํจ์๋ฑ์ ์ ์ธ๋ฌธ๋ง ๋จผ์ ์คํํ์ฌ ๋ ์์ปฌ ํ๊ฒฝ์ ํ๊ฒฝ ๋ ์ฝ๋์ ์ ์ฅํ๋ค. ๋ฐ๋ก ์ด ์ง์ ์ด hoisting์ด ๋ฐ์ํ๋ ์ง์ ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ค์ฝ๋์์๋ ์คํ ์ ํ๊ฐ ์์ ์ ๋ชจ๋ ๋ณ์๋ค์ด ์ด๋ฏธ environment record์ ๋ฑ๋ก๋๋ค. ๊ทธ๋์ 123console.log(x) var x = 1;cs ์์ ์ฝ๋๋ฅผ ์คํํด ๋ณด๋ฉด โx is not definedโ error ๊ฐ ๋จ๋ ๊ฒ์ด ์๋๋ผ undefined๊ฐ ์ถ๋ ฅ ๋๋ค. ์์ค์ฝ๋ ์ var x = 1; ์ด console.log(x) ๋ณด๋ค ๋ค์ ์์ง๋ง ์คํ ์ ํ๊ฐ ์์ ์ ์ด๋ฏธ x : undefined ๋ก ๋ฑ๋ก์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์์ค์ฝ๋์ ํ๊ฐ๊ฐ ๋๋ ์์ ์์๋ var๋ก ์์ฑ๋ ๋ณ์๋ ๋ฑ๋ก๊ณผ ๋์์ undefined๋ก ๊ฐ์ด ์ด๊ธฐํ ๋๊ณ let๊ณผ const์ผ๋ก ์ ์ธ๋ ๋ณ์์ ๊ฒฝ์ฐ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด ์ง์ง ์๊ณ uninitialized ์ํ๊ฐ ๋๋ค. ๋ค์ ์์ ์ฝ๋๋ก ๋์๊ฐ๋ณด๋ฉด 123456789function foo() { var a = 1; let b = 2; const c = 3; function bar() {} } foo(); // 1. Callcs ์ ์ญ ์ฝ๋๊ฐ ์คํ ๋๋ฉด์ ํ๊ฐ ์ ์ ์ ์ญ ์คํ ์ปจํ
์คํธ์ ์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ์ด ์์ฑ๋ ๊ฒ์ด๋ค. ๊ทธ ๋ค์ ํ๊ฐ๊ฐ ์์๋๊ณ ์ ์ญ ์ฝ๋ ๋ด์ ๋ชจ๋ ๋ณ์, ํจ์ ์ ์ธ ๋ฌธ์ด ์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ์ ํ๊ฒฝ ๋ ์ฝ๋์ ์ ์ฅ๋๋ค. fooํจ์์ ๊ฒฝ์ฐ ํ๊ฐ ํ, ์คํ ์ ์๋ ์๋์ ๊ฐ์ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ด ๋ง๋ค์ด ์ง๋ค. (๋ฌผ๋ก ์ค์ ๋ก ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ ๊ฒ์ ์๋๋ค.) 1234567891011// Running execution context์ LexicalEnvironment { environmentRecord: { a: undefined, b: <uninitialized>, c: <uninitialized>, bar: <Function> }, outer: foo.[[Environment]]}Colored by Color Scriptercs ์ถ์ฒ.https://meetup.toast.com/posts/129 3. ์คํ ์ปจํ
์คํธ์ Lexical Environment์ ๊ตฌ์ฑ ์์์๋ ์ ์ญ ์คํ ์ปจํ
์คํธ์ ํจ์ ์คํ ์ปจํ
์คํธ๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๊ฐ๋จํ๊ฒ ์ค๋ช
์ ํ๋๋ฐ, ์ด๋ฒ์๋ ์์ ์ฝ๋์ ๊ทธ๋ฆผ์ ์ด์ฉํด์ ์ ์ญ ์คํ ์ปจํ
์คํธ์ ํจ์ ์คํ ์ปจํ
์คํธ์ ๊ตฌ์ฑ์ ๋ ์์ธํ ์ดํด๋ณด๊ฒ ๋ค. 123456789101112131415var x = 1;const y = 2; function foo(a) { var x = 3; const y = 4; function bar (b) { const z = 5; console.log(a + b + x + y + z); } bar(10);} foo(20); // foo ํจ์ ํ๊ฐ ํ ์คํ ์ ์ ์คํ ์ปจํ
์คํธ์ Lexical Environmentcs ์ถ์ฒ.๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive. 23.6 ์คํ ์ปจํ์คํธ์ ์์ฑ๊ณผ ์๋ณ์ ๊ฒ์ ๊ณผ์ ์ด์
๋ชจ ์ ์ ์ญ ๊ฐ์ฒด(๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ window, node์ ๊ฒฝ์ฐ global) ์์ฑ ์ ์ญ ์ฝ๋ ์คํ ์ ์ญ ์คํ ์ปจํ
์คํธ ์์ฑ ์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ ๊ฐ์ฒด ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ : ์ ์ญ ํ๊ฒฝ์ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.(import ์์ด dom๊ณผ Math์ ๊ฐ์ ๋นํธ์ธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ด์ ), var๋ก ์ ์ธ๋๋ ๋ณ์๋ค์ ์ ์ญ ๊ฐ์ฒด์ property๋ก ์ ์ฅ๋๋ค โ ์ฝ์์์ ํ์ธํ ์ ์๋ค. ์ ์ธ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ : let, const์ ๊ฐ์ด block scope ๋ณ์๋ค์ ์ ์ฅ this ๋ฐ์ธ๋ฉ : this์ ์ ์ญ ๊ฐ์ฒด ๋ฐ์ธ๋ฉ ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ ๊ฒฐ์ foo ํจ์ ์คํ ํจ์ ์คํ ์ปจํ
์คํธ ์์ฑ ํจ์ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ ํจ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ this ๋ฐ์ธ๋ฉ (this ๋ฐ์ธ๋ฉ์ ์ดํ์ ํจ์์์ ๋ฐ๋ก ์ค๋ช
) ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ ๊ฒฐ์ 4. ๋ ์์ปฌ ์ค์ฝํ vs ๋ค์ด๋๋ฏน ์ค์ฝํ์ค๋ closure์ ๋ํด์๋ ์ค๋ช
์ ํ๋ ค๊ณ ํ๋๋ฐ ๊ทธ ์ ์ ์ ๊น scope์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. ์คํ ์ปจํ
์คํธ๋ ์ปดํ์ผ ์ธ์ด์ ์ฝ ์คํ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง๋ค. ์ฌํ๊น์ง ์ค๋ช
์ ๋ค์์ ๋๋ ์ผ๋ฐ์ ์ธ ์ฝ์คํ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ์ ์ด ์์ด ๋ณด์๋๋ฐ ์ด๋ค ๋ถ๋ถ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ผ๊น? ๋ฐ๋ก ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋ ๋ ๊ฐ์ด ์์ฑํ๋ ๋ ์์ปฌ ํ๊ฒฝ ๋๋ฌธ์ ๋ค๋ฅธ ์ ์ด ๋ฐ์ํ๋ค. ๋ ์์ปฌ ํ๊ฒฝ์ ์คํ ์ปจํ
์คํธ ์์ฑ ๋ ๊ฐ์ด ์์ฑ๋๋ ๊ฒ์ ๋ง์ง๋ง ๋ ์์ปฌ ํ๊ฒฝ์ ์ฌ์ฉํ๋ ๋์์ด ์คํ ์ปจํ
์คํธ๋ง ์๋ ๊ฒ์ ์๋๋ค. ์๋์ ์์๋ฅผ ๋ณด์ 1234567891011function foo() { var x = 15; console.log(x);} function bar() { console.log(x);} foo(); // ์คํ ๊ฒฐ๊ณผ๋?bar(); // ์คํ ๊ฒฐ๊ณผ๋?cs ์ ๋ต์? 15 Uncaught ReferenceError: x is not defined ์ฐ๋ฆฌ๊ฐ ์ ์ธํ๋ ๋ณ์๋ 2๊ฐ์ง ํน์ฑ์ ๊ฐ์ง๋ค. ํ๋๋ ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ๋ฒ์์ธ ์ค์ฝํ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ๊ธฐ๊ฐ์ธ ๋ผ์ดํ์ฌ์ดํด์ด๋ค.(๋ ํน์ฑ์ ์ ํผ๋๋์ง๋ง ๋ค๋ฅธ ํน์ฑ์ด๋ค.) js๋ ํจ์ ์ค์ฝํ์ ๋ธ๋ก ์ค์ฝํ ๋๊ฐ์ง๋ฅผ ์ ๊ณตํ๋ค. ํจ์ ์ค์ฝํ๋ ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ๋ฒ์๊ฐ ํจ์ ๋ด๋ถ๋ผ๋ ์๋ฏธ์ด๊ณ , ๋ธ๋ก ์ค์ฝํ๋ ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ๋ฒ์๊ฐ ๋ธ๋ก ๋ด๋ถ๋ผ๋ ์๋ฏธ์ด๋ค. ์์ ์์ ๋ฅผ ๋ณด๋ฉด์ scope๋ฅผ ์ดํดํด ๋ณด์. bar๋ ๋ณ์ x๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ ์ ํจ์ body ๋ด๋ถ์์ x๊ฐ ์ ์ธ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ฉด foo๋ ํจ์ body ๋ด๋ถ์ x๊ฐ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์๋ ์์๋ฅผ ๋ณด์. 123456789101112function foo() { console.log(x);} function bar() { var x = 15; foo();} var x = 10;foo(); // ์คํ ๊ฒฐ๊ณผ๋?bar(); // ์คํ ๊ฒฐ๊ณผ๋?cs ๊ทธ๋ ๋ค๋ฉด ์์ ์์์ ๊ฒฐ๊ณผ๋ ์ด๋จ๊น? ์ ๋ต์? foo์ bar์ ์คํ ๋ชจ๋ 10์ด ์ถ๋ ฅ ๋๋ค. bar ํจ์์์ foo ํจ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ์ 15๊ฐ ์๋๊ณ 10์ด ๋ ๊น? ๊ทธ๊ฑด javascript๊ฐ lexical scope ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค. lexical scope(์ ์ ์ค์ฝํ) ์ธ์ด๋ ์์ ์ ์ค์ฝํ์ ๋ณ์๊ฐ ์์ ๋, ์์ ์ด ์์ฑ๋ ํ๊ฒฝ์์ ํด๋น ๋ณ์๋ฅผ ์ฐพ๋๋ค.(์์ ์์์์๋ bar๊ฐ ์์ ๋ ํ๊ฒฝ์์๋ x๊ฐ ์ ์ธ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.) ๋ฐ๋๋ก dynamic scope(๋์ ์ค์ฝํ) ์ธ์ด๋ ์์ ์ ์ค์ฝํ์ ๋ณ์๊ฐ ์์ ๋, ์์ ์ ํธ์ถํ ํ๊ฒฝ์์ ํด๋น ๋ณ์๋ฅผ ์ฐพ๋๋ค. ๋ง์ฝ์ javascript๊ฐ dynamic scope ์ธ์ด์๋ค๋ฉด bar ํจ์์ ์คํ ๊ฒฐ๊ณผ๋ 15๊ฐ ๋์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์กฐ๊ธ ๋ ์๊ฐํด๋ณด๋ฉด ์ด์ํ๋ค. var x = 10; ๋ ์คํ์ ๊ฒฐ๊ณผ์ธ๋ฐ, dynamic scope ์ธ๊ฑฐ ์๋๊ฐ? ํ๋ ์๋ฌธ์ด ์๊ธธ ์๋ ์๋๋ฐ, ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ๋ ๋ ์คํ ์ปจํ
์คํธ๋ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ์ ์คํ ์ปจํ
์คํธ ์์ฑ ์ดํ์ ์์ฑํ๋ ๋ ์์ปฌ ํ๊ฒฝ์ ์คํ ์ปจํ
์คํธ๋ง ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋๋ค. ๋ ์์ปฌ ํ๊ฒฝ A์์ ์์ฑ๋ ํจ์๊ฐ [[Environment]] ์ ๋ ์์ปฌ ํ๊ฒฝ A์ ์ฐธ์กฐ๊ฐ์ ์ ์ฅํ๊ณ ์๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์คํ ์ปจํ
์คํธ๊ฐ ์ฝ์คํ์ผ ๋ฟ๋ง ์๋๋ผ ๋์์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ ๊ณตํด์ฃผ๋ ์ฐ๊ฒฐ์ ์ ์ป๊ฒ ๋์๋ค. ๋ ์์ปฌ ํ๊ฒฝ์ ์คํ ์ปจํ
์คํธ์ ์
์ฅ์์๋ ์คํ ํ๊ฒฝ์ด ๋ง๋ค. ๊ทธ๋ฌ๋ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ด ์ฐธ์กฐ ๊ฐ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ค์ ๋์จํ ๊ด๊ณ ์ด๊ธฐ ๋๋ฌธ์ ์คํ ํ๊ฒฝ์ธ ๋์์ ํด๋น ๋ ์์ปฌ ํ๊ฒฝ์์ ์์ฑ๋ ํจ์์๊ฒ๋ dynamic scope๊ฐ ์๋ lexical scope๋ฅผ ์ ๊ณตํ ์ ์๋ ๊ฒ์ด๋ค. ์๋์ ์์ ์ฝ๋๋ ์์ ์์ค์ฝ๋์ ํ๊ฐ๋ฅผ ์ค๋ช
ํ๋ ์ฌ์ฉํ๋ ์์ ์ธ๋ฐ ์ฐ๋ฆฌ๊ฐ ๋ฌด์ฌ์ฝ ๋๊ธด ๋ถ๋ถ์ด ์๋ค. ๋ฐ๋ก outer ๊ฐ์ด๋ค. ์๋์ ๋ ์์ปฌ ํ๊ฒฝ์ foo ํจ์ ๋ด๋ถ์ ๋ ์์ปฌ ํ๊ฒฝ์ธ๋ฐ foo ์คํ ์ ์ ์์ฑ๋ ๊ฒ์ด๋ค. foo ํจ์ ๋ด๋ถ์ ๋ ์์ปฌ ํ๊ฒฝ์ outer ๊ฐ์ ๋ณด๋ฉด foo.[[Environment]] ๊ฐ ์ฆ foo ํจ์๋ฅผ ์์ฑํ์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. ์ฆ ์์ ๋ฅผ ํตํด ๋ ์์ปฌ ํ๊ฒฝ์ด ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ ๋ ๋ ๊ฐ์ด ์์ฑ ๋์ง๋ง ์์ฑ๋ ์ดํ์๋ ์คํ ์ปจํ
์คํธ์ ์ํด์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ function์ ์ํด์๋ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. 1234567891011// Running execution context์ LexicalEnvironment { environmentRecord: { a: undefined, b: <uninitialized>, c: <uninitialized>, bar: <Function> }, outer: foo.[[Environment]]}Colored by Color Scriptercs ์ถ์ฒ.https://meetup.toast.com/posts/129 ์ ๋ฆฌํ๋ฉด javascript์ ๋ ์์ปฌ ํ๊ฒฝ์ ์คํ ์ปจํ
์คํธ์๊ฒ๋ ์คํ ํ๊ฒฝ์ ์ญํ ์ ํ๊ณ ์์ฑ๋ ํจ์์๊ฒ๋ lexical environment(์ ์ ํ๊ฒฝ - ์์ฑ๋์์ ๋์ ํ๊ฒฝ)์ ์ญํ ์ ํ๊ฒ ๋๋ ๊ฒ์ด๋ค. javascript ํจ์๊ฐ ๋ฐํ์์ ์์ฑ๋์ง๋ง lexical scope์ ์ ๊ณตํ ์ ์๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค. ํจ์๊ฐ ๋ ์์ปฌ ํ๊ฒฝ ๊ฐ์ [[Environment]]์ ์ ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์์ ์ ์ค์ฝํ์ ์๋ ๋ณ์๋ฅผ ์ฐพ์ ๋ ์์ ์ ํธ์ถํ ์คํ ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐพ์ง ์๊ณ ์์ ์ด ์์ฑ ๋์์ ๋์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ฐพ์ ์ ์๋ ๊ฒ์ด๋ค. 5. Closure โA Closure is the conbination of a function and the lexical environment within which that function was declared.โ - MDN Closuresํด๋ก์ ๋ ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ์ ์กฐํฉ์ด๋ค. - MDN๋ฌธ์ Closures โํด๋ก์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ณ ์ ์ ๊ฐ๋
์ด ์๋๋ค. ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ์ค์ํ ํน์ฑ์ด๋ค.โ - ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive 24์ฅ ํด๋ก์ โlexicalโ์ด๋, ์ดํ์ ๋ฒ์ ์ง์ (lexical scoping) ๊ณผ์ ์์ ๋ณ์๊ฐ ์ด๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ์๊ธฐ ์ํด ๊ทธ ๋ณ์๊ฐ ์์ค์ฝ๋ ๋ด ์ด๋์์ ์ ์ธ๋์๋์ง ๊ณ ๋ คํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. - MDN๋ฌธ์ Closures ํด๋ก์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ๊ฐ์ง๊ณ ์๋ ํน์ฑ/๊ฐ๋
์ด ์๋๋ค . ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ์ฌํ๊น์ง ์ค๋ช
ํ ๋ด์ฉ์ ๊ฐ์ง๊ณ ์ค๋ช
์ ํ์๋ฉด ๋ฐํ์์ ํจ์๋ฅผ ์์ฑํ๋ lexical scoping ์ธ์ด๋ผ๋ฉด ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ํน์ฑ์ด๋ค. ํด๋ก์ ์ ๋ํ ์ค๋ช
์์ฒด๋ง์ผ๋ก๋ ์๋ฏธ๊ฐ ์ ์ ๋ฟ์ง ์์ง๋ง ์์์ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ ํจ์ ๊ฐ์ฒด์ Environment ๊ฐ์ ๋ํด์ ์ค๋ช
์ ํ๊ธฐ ๋๋ฌธ์, ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ์ ์กฐํฉ์ด๋ผ๋ ๋ง์ด ์ด๋ ดํํ๊ฒ๋ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค. (์๋๋ค๋ฉด ์ฌํ๊น์ง ์ค๋ช
ํ ๊ฒ ์คํจโฆ) ์์ ๋ฅผ ์ดํผ๋ฉด์ ํด๋ก์ ๊ฐ ์ด๋ค ์ํฉ์์ ๊ทธ ํน์ฑ์ด ๋ถ๊ฐ๋๋ ์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ์๋์ ์์ ๋ฅผ ๋ณด์. 1234567891011const outerFunc = () => { let i = 100; const innerFunc = () => { console.log(\"In innerFunc, the i is \" + i); return i + 1; }; i = innerFunc(); console.log(\"In outerrFunc, the i is \" + i);}; outerFunc();Colored by Color Scriptercs ์์ ์์ ๋ฅผ ๋ณด๋ฉด outerFunc ํจ์ ๋ด๋ถ์ innerFunc๊ฐ ์์ฑ๋๊ณ innerFunc์ ์คํ์ด outerFunc ์คํ ๋ด๋ถ์์ ์ด๋ฃจ์ด ์ง๋ค.์ด๋ฐ ๊ฒฝ์ฐ์๋ ํด๋ก์ ๋ผ๊ณ ํ ์ ์์๊น? ํด๋ก์ ๋ผ๊ณ ํ ์ ์๋ค. ํ์ง๋ง ํด๋ก์ ๋ก์์ ์๋ฏธ๊ฐ ์๋ ํด๋ก์ ์ด๋ค.์์ ๋ณ์์๋ 2๊ฐ์ง ํน์ฑ์ด ์๋ค๊ณ ํ๋๋ฐ ์์ ์์ ์์ ๋ง๋ค์ด์ง ํด๋ก์ ๋ ๋ณ์์ ๋ผ์ดํ ์ฌ์ดํด์ด outerFunc์ ์คํ ์ข
๋ฃ์ ํจ๊ป ์ข
๋ฃ๋๊ธฐ ๋๋ฌธ์ ์๋ฏธ ์๊ฒ ์ฌ์ฉ๋์ง ๋ชปํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ฒ์๋ ์๋ฏธ๊ฐ ์๋ ํด๋ก์ ์ ์์ ๋ฅผ ๋ณด๊ฒ ๋ค.์๋์ ์์ค์ฝ๋๋ฅผ ๋ณด๋ฉด outerFunc๋ฅผ ์คํํ ๊ฒฝ์ฐ outerFunc ํจ์ ๋ด๋ถ์์ ์์ฑํ innerFunc๋ฅผ ๋ฐํํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ ์์ค์ฝ๋์ ์งํ์ด ์ด๋ป๊ฒ ๋ ๊น? 1234567891011121314const outerFunc = () => { let i = 100; const innerFunc = () => { console.log(\"It's external the i is \" + i); return (i = i + 1); }; return innerFunc;}; let foo = outerFunc(); foo();foo();foo();Colored by Color Scriptercs ์์ ์์ ์์๋ outerFunc ๋ด๋ถ์์ ์์ฑํ innerFunc๊ฐ ๋ณ์ i๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋ก์ ๊ฐ ์ธ๋ถ์ ๋ฐํ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ์์ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฏธ ์๋ ํด๋ก์ ๊ฐ ๋ง๋ค์ด์ก๋ค. ์ด๋ฒ ์ฃผ์ ์์๋ ํด๋ก์ ๊ฐ ์ฃผ์ ์ฃผ์ ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ์๋ฅผ ๋ค๋ฃจ์ง ์์์ง๋ง ๊ฐ๋จํ ์๋ฅผ ๋ค์ด๋ณด๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋กค ๋๊ธฐ๋ ํจ์๋ฅผ ๋ค๋ฅธ ๋ณ์๋ค๊ณผ ํจ๊ป ๋๊ธฐ๊ณ ์ถ๋ค๋ฉด ์ธ๋ถ ํจ์๋ฅผ ๋ง๋ค์ด ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ฒ ํ๊ณ ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ฐํํ๋ ํด๋ก์ ํจ์๋ฅผ ๋ง๋ค ์๋ ์๋ค. ๊ทธ์ธ์๋ ํด๋ก์ ๋ฅผ ํ์ฉํ์ฌ ํด๋์ค์ static ๋ณ์๋ฅผ ๋ง๋๋ ์๋ ์๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ตํ ์ ์ ๋ค์ด์ด๊ทธ๋จ์์ ๋ค ํํํ์ง ๋ชปํ์ง๋ง ํด๋ก์ ๊ฐ ์์ฑ๋๊ธฐ ์ํด์๋ ๋ด๋ถ ํจ์๊ฐ ์์ ์ ์ค์ฝํ์์ ์์ฑํ์ง ์์ ๋ณ์, ์ฆ ๋ ์์ปฌ ํ๊ฒฝ์์ ์์ฑ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์์ ์ ์ค์ฝํ์์ ์์ฑํ์ง ์์์ง๋ง ๋ ์์ปฌ ํ๊ฒฝ์ ์ด์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ค์ ์์ ๋ณ์(free variable)์ด๋ผ๊ณ ํ๋ค. ํด๋ก์ ๋ ํจ์์คํ์ด ์ข
๋ฃ๋ ์ดํ์๋ ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถ๋ก ๋ฐํ๋๋ฉด์ ์๊ธฐ๋ ์์ ๋ณ์๋ค์ด ๊ฐํ ๊ณต๊ฐ์ด๋ค. ๋ง์ฝ์ ๋ด๋ถ ํจ์๊ฐ ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ต์ ํ๋ฅผ ์ํด์ ๋ด๋ถ ํจ์์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ ๊ฑฐํ๋ค. ๋ํ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ณ์๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๋, ์ผ๋ถ์ ์์ ๋ณ์๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ๋ ์์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋ ๋ค ์ ๊ฑฐํ๋ค. ์ฐธ๊ณ ์๋ฃ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive. ์ด์
๋ชจ ์ ECMAScriptยฎ 2015 Language Specification JavaScript ์๋ณ์ ์ฐพ๊ธฐ ๋๋ชจํ NHN Cloud Meetup! ๋ธ๋ก๊ทธ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ (1) - ํจ์ ๊ฐ์ฒด, ํจ์ ๊ฐ์ฒด ์์ฑ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ (2) - ํจ์ ํธ์ถ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์(3) - Lexical Environment ์ฝ๋์คํผ์ธ 78 ES6+ ํจ์์ OOP 2ํ์ฐจ ์คํฐ๋","link":"/2021/02/25/seminar-execution-context/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 1์ฃผ์ฐจ ํ๊ณ ","text":"1์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์นํฉ, ๋ฐ๋ฒจ ๋ด์ฉ ํ์ต ์ฝ๋์จ 1์ฃผ์ฐจ ๊ณผ์ ์ํ 1-1 ๋ณ์๋ฅผ ์ธ๋ถ์ ์ ์ธํ์ง ์๊ณ count ์ฑ ๋ง๋ค๊ธฐ 1-2 ๋ณ์๋ฅผ ์ธ๋ถ์ ์ ์ธํ์ง ์๊ณ ๊ฐ๋จํ ์ฌ์น์ฐ์ฐ ๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ: ๊ธฐํ ๋ด ์ ์ถ ๋ชปํจ ํ ์ค ์ฝ๋ฉ ํ
์คํธ ์ฐธ๊ฐ Feelings ์นํฉ, ๋ฐ๋ฒจ์ ์๋
์ธํด์ฝ ๋ vue-cli๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ
ํ ๋ ํ์ตํ ๊ฒฝํ ๋๋ถ์ ๊ด๋ จ๋ ๋ด์ฉ๋ค์ ๋ค์ ์ฝ์์ ๋ ๋ฏ์ค์ง๋ ์์๋ค. ๋ค๋ง ์๋
์๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ์ ๋ฐ๋น ์ ํ๊ฒฝ ํ๋ํ๋ ์ถ๊ฐํ๋ฉด์ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ด๋ค์ง๋ ํ์ธํ์ง ์์๋ ๊ฒ์ ๊นจ๋ฌ์๊ณ , ๊ฐ๋ฐ์๋ก์ ์ด๋ค ํ๋๋ก ํ์ต์ ํ๊ณ ์
๋ฌด๋ฅผ ์งํํด์ผ ๋ ์ง ๊ณ ๋ฏผํ๊ฒ ๋์๋ค. ์๋
์ ์ธํด์ฝ ๋ ์ธํ
ํ๋ ์นํฉ, ๋ฐ๋ฒจ ์ค์ ํ์ผ์ ๋ค์ ๋ณด๋ฉด์ ๋ด๊ฐ ์ดํดํ๊ณ ์ค์ ํ ๋ถ๋ถ๊ณผ ๊ทธ ์ค์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ๋๋ก ํ์ธํ์ง ์๊ณ ๋ฃ์๋ ๋ถ๋ถ ๋ชจ๋๋ฅผ ๋ณด๊ฒ ๋์๋๋ฐ, ๋ด๊ฐ ํ์ธํ์ง ์์ ์ค์ ์ด์๋ค๋ฉด ๋ฃ์ง ์๋ ๊ฒ์ด ๋ง์ง ์์์๊น? ํ๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค. ์ ์ด์ ์ฝ๋์จ ๊ต์ก์ ์ ์ฒญํ ์ด์ ๋ ๊ฐ์ธ ๊ณต๋ถ์์๋ ๋ฐ์ ์ ์๋ ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ํด์ ์ธ๋ฐ, ๊ทธ ๋ชฉ์ ์ ๋ง์ง ์๊ฒ 1์ฃผ๋ฅผ ๋ณด๋๋ค. ๋ฆ์ ์ ์ถ - 1-1 ๊ณผ์ ๋ฅผ ์์์ผ ์ ๋
๋ถํฐ ์์ํ๋๋ฐ, ๊ทธ ๋ง์ ๋ ๊นํ ๋ ํฌ ๋ฌธ์ ๋ก ๋ชฉ์์ผ์ ์ ์ถํ๊ฒ ๋์๋ค. 1-2 ๊ณผ์ ๋ ๋ฆ๊ฒ ์์ํ๋ ๊ฒ์ ์ํฅ์ ์ฃผ์๊ณ , ๋ ๋ง์ ํผ๋๋ฐฑ์ ๋ฐ์ ๊ธฐํ๋ฅผ ์์ด๋ฒ๋ ธ๋ค. ์ ์ pr - ์ผ์์ผ์ ๋์์ผ ๋ค๋ฅธ ๋ถ๋ค์ pr์ ๋ณด๋ฉด์ ํ์ฌ ์ฝ๋์จ์ ์งํํ๋ ๋ด ๋ฐฉ์์ด ์๋ชป๋์๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ๋ค๋ฅธ ๋ถ๋ค์ ์กฐ๊ธ์ฉ ๋ง๋ค๋ฉด์ ๋ฐ๋ก๋ฐ๋ก pr์ ๋ณด๋ด๊ณ ํผ๋๋ฐฑ์ ๋ฐ์์ ๊ทธ ํผ๋๋ฐฑ์ ๋ฐ์ํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ ๋ฐ๋ฉด, ๋๋ ๋ฆ๊ฒ ์์ํ์์๋ ํ๊บผ๋ฒ์ ๋ง๋ค์ด์ pr์ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค๋ณด๋ ํผ๋๋ฐฑ์ ๋ฐ์ ๊ธฐํ๋ฅผ ๋ ์์ด๋ฒ๋ฆฌ๊ฒ ๋์๋ค. ํ ์ค ์ฝ๋ฉ ํ
์คํธ๋ 1์๊ฐ ๋ฐ์ ์ฝ๋ฉ ํ
์คํธ์ 30๋ถ์ ์์ ํ
์คํธ๋ก ์งํ๋์๋๋ฐ, ๊ฒฐ๋ก ์ ์ผ๋ก ๋๋ ์ ์ ์๊ตฌ์ฌํญ์ ์ ๋๋ก ํ์ธํ๋ ์ต๊ด์ ๋ถ์กฑ: ์ต๊ด์ ๋ง์์ด ๊ธํ ๋์๋ ๊ทธ๋ ๊ฒ ํ๋ํ๋๋ก ํ๋๋ฐ ์์ง ์๊ตฌ์ฌํญ์ ์ ๋๋ก ํ์ธํ๋ ๊ฒ์ด ์ต๊ด์ด ๋์ง ์์ ๊ฒ์ ๋๊ผ๋ค. ์ด๋ฐ ํ๋์ผ๋ก ์ธํด ์๊ฐ์ ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋์๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๊ฒฝํ ๋ถ์กฑ: ์ด ๋ฌธ์ ๊ฐ 8๋ฌธ์ ์๋ค. ๊ฐ๊ฐ์ ๋ฌธ์ ๋ ๋์ด๋๊ฐ ๋์ ๊ฒ์ด ์๋์๋๋ฐ, js์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ด๋ ๋ด์ฉ์ ์ค์ ์๋น์ค์์ ๊ณ ๋ฏผํด๋ณด๊ณ ์ ์ฉํด๋ณธ ๊ฒฝํ์ด ์๋ ์ฌ๋๋ค, ๊ธฐ๋ฅ์ ํ์ฉ์ด ๋ชธ์ ์ต์ ์ฌ๋๋ค์ ๋น ๋ฅด๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค. ๋๋ ์์ง ๊ทธ๋ฐ ๋ด์ฉ๋ค์ ํ๋ฒ ๊ณต๋ถํด๋ณธ ์์ค์ด์๋ค๋ ๊ฒ์ ๋๊ผ๋ค. Findings ํญ์ hello world๋ฅผ ์ฐ์ด๋ณด๋ ์์ ์ต๊ด์ฒ๋ผ, ์ ๋ง์ ์ค์ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฒ์ ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๊ฐ์ ์ค์ ๋ค์ด ์ด๋ค ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋๋์ง ๋ณด๋ฉด์ ๊ฐ ์ค์ ์ ์ญํ ์ ์ ์๊ณ ์ฌ์ฉํ๋ ๊ฒ ํ์ํ๋ค๊ณ ๋๊ผ๋ค. ์์ผ๋ก๋ ์๋น์ค๋ฅผ ๋ง๋๋ ์ฌ๋์ผ๋ก์ ๋ด๊ฐ ์์ฑํ ์ฝ๋์ ์ข ๋ ์ฑ
์๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค. ๋น ๋ฅธ ์์๊ณผ ๋น ๋ฅธ pr์ ํตํด ๋ ๋ง์ ํผ๋๋ฐฑ์ ๋ฐ์์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ์ฐ์ต์ ์ค์์ฑ. ์ ๊ถ ์ฐ๋ฅด๊ธฐ 100๋ฒ. Affirmation ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฐ๋ฐ์๋ก์ ๋ด๊ฐ ์ฑ
์์ ์ง๋ ์ ํ์ ๋ง๋ค ์ ์๋ ํ๋์ ์ญ๋์ ๊ธฐ๋ฅด์. ๊ทธ๋ฐ ํ๋์ ์ญ๋์ ๊ธฐ๋ฅด๊ธฐ ์ํด ๋งค์ผ ๊พธ์คํ ๊ณผ์ ๋ฅผ ํ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์.","link":"/2021/08/15/codesum-week-1/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 2์ฃผ์ฐจ ํ๊ณ ","text":"2์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์ฝ๋์จ 2์ฃผ์ฐจ ๊ณผ์ ์ํ 2-1 React๋ก ๊ฐ๋จํ Counter ์ฑ ๊ตฌํ 2-2 React๋ก ๊ฐ๋จํ Todo ์ฑ ๊ตฌํ HTTP ์๋ฒฝ ๊ฐ์ด๋ ๊ณต๋ถ Feelings ์ฝ๋ ํฌ๋งคํ
, ๋ณ์๋ช
๋ฑ ์ฝ๋ ์์ฑ ๋ ๊ฐ๋
์ฑ์ ์ํด ๊ณ ๋ คํ๋ ๊ธฐ๋ณธ์ ์ธ ์์๋ค์ ๋ง์ด ์ง์ ๋ฐ์๋ค. ๊ทธ๋งํผ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ๋ง์ด ๋์น๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ์๋ฏธ์ด๋ค. ์ง๊ธ์ด๋ผ๋ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ด์ ๋คํ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ฝ๋๊ฐ ๊ฐ๋
์ฑ์ ๊ฐ์ง๋ ค๋ฉด 2๊ฐ์ง: ๋ด๊ฐ ์๋ํ ๋ฐ๊ฐ ์์ด์ผ ํ๊ณ , ๊ทธ ์๋ํ ๋ฐ๊ฐ ํํ๋์ด์ผ ํ๋ค. ์์ง์ ์ฝ๋์ ์๋๋ฅผ ์ ๋ด๋ ์ฐ์ต์ด ๋ ํ์ํ๋ค๊ณ ๋๊ผ๋ค. ๊ทธ๋ฆฌ๊ณ ์ข์ ์๋๋ฅผ ๋ด์ผ๋ ค๋ฉด ์ข์ ์ค๊ณ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์น๋ค์ ์ ์๊ณ ์์ด์ผ ํ์ง ์์๊น ํ๋ ์๊ฐ๋ ๋ค์๋ค. ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉด์ ์ปดํฌ๋ํธ ์ค๊ณ(?)๋ฅผ ์ด๋ป๊ฒ ํด์ผํ๋ ์ง ์ฒ์์ผ๋ก ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ ๊ฒ ๊ฐ๋ค. ์ด์ ์๋ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ์ ๋ชฉ์ ์ ํ๊ฐ์ง์๋ค. ์ปค๋ค๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ์์ ๋จ์์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ. ๊ทธ์ ์์ ์ปดํฌ๋ํธ๋ก ๋๋๋ ๊ฒ์๋ง ์ง์คํ๊ธฐ ๋๋ฌธ์ ๋๋์ด์ง ์ปดํฌ๋ํธ์ props๋ฅผ ํตํด ๋๊ธฐ๋ ๊ฐ๋ค(์ํ ๊ฐ, ์ํ ๋ณ๊ฒฝ ํจ์)์ ์ด๋ป๊ฒ ๊ตฌ์ฑํด์ ๋๊ธธ ์ง๋ ๊ณ ๋ คํด๋ณด์ง ์์๋ค. ์ฒซ ๋ฒ์งธ๋ก ์ง์ ๋ฐ์๋ ๊ฒ์ count๊ฐ์ ๋ณ๊ฒฝํ๋ setCount ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ๊ฐ props์์ setCount๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์ด๋ค. ์ฌ์ค ํ์ ์ปดํฌ๋ํธ๋ onClick ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ์์๋ฐ์์ ์คํํ ํจ์๊ฐ ๊ถ๊ธํ์ง ๊ทธ๊ฒ ๊ตฌ์ฒด์ ์ผ๋ก setCount์ธ์ง๋ ๊ถ๊ธํ์ง ์๋ค. ๋ฐ๋ผ์ ํ์ ์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค๋ก setCount๋ ๋๋ฌด ๊ตฌ์ฒด์ ์ธ ์ ๋ณด์ด๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ํ์์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ ๊ณต๊ฐํด์ผ ํ ์ ์ ํ ์ธํฐํ์ด์ค๋ ์์ ์ด ๊ทธ๋ฆด ์ํ ๊ฐ + ์์ ์ด ์ฒ๋ฆฌํด์ผ ํ ์ด๋ฒคํธ์ด๋ค.(ํญ์ ๊ทธ๋ฐ๊ฑธ๊น? ์ข ๋ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๊ฐ ๋ ์ ์ ํ ์ํฉ์ ์์๊น? ํ๋ ์๋ฌธ์ ์๋ค. ์ด ์ง์ ์์๋ ์ญ์ ์ข์ ์ค๊ณ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์น๋ค์ ์ ์์์ผ ํ ํ์์ฑ์ ๋๊ผ๋ค.) HTTP ์๋ฒฝ ๊ฐ์ด๋ ๊ณต๋ถ๋ฅผ ๋งค์ผ 20ํ์ด์ง ์ ๋ ๊พธ์คํ ์ฝ๊ธฐ๋ก ํ๋๋ฐ ์ ์ถํ ๊ณผ์ ํผ๋๋ฐฑ์ ๋ฐ์ํ๊ณ ๋๋ฉด ๋งค์ผ 20ํ์ด์ง๋ฅผ ์ฝ๋๊ฒ ๋
น๋กํ์ง ์๋คโฆ Findings ์๋๋ฅผ ๋ด์, ์๋๊ฐ ์ ๋๋ฌ๋๋ ์ฝ๋๋ฅผ ์ง๋ ์ฐ์ต์ ๋ถ์กฑํจ ์ปดํฌ๋ํธ ๊ตฌํ์ ์ธ๋ถ์ ๊ณต๊ฐํ ์ ์ ํ ์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ธ์ง ๊ณ ๋ฏผํด์ผ ํ๋ค๋ ์ ์ข์ ์ค๊ณ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์น๋ค์ ๊พธ์คํ ํ์ตํด์ผ ํ ํ์์ฑ(์ด๋ป๊ฒ ๊ณต๋ถํ๋ฉด ์ข์์ง๋ ๊ณ ๋ฏผ์ด๋ค.) ์ฒด๋ ฅ์ ๋ถ์กฑ Affirmation ์ ์ ํ ์ปดํฌ๋ํธ ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ์๋ฃ๋ฅผ ์ฝ์ด๋ณด๊ธฐ ์ฐ์ ์ ์ฌ๊ธฐ ๋งค์ผ 30๋ถ ์กฐ๊น
ํ๊ธฐ HTTP ์๋ฒฝ ๊ฐ์ด๋ ๊ณต๋ถ 20ํ์ด์ง ์ฝ๊ธฐ ๊พธ์คํ ์ง์ํ๊ธฐ","link":"/2021/08/22/codesum-week-2/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 3์ฃผ์ฐจ ํ๊ณ ","text":"3์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์ฝ๋์จ 3์ฃผ์ฐจ ๊ณผ์ ์ํ ์์ฑ๋ todo app์ ํ
์คํธ ์์ฑํ๊ธฐ HTTP ์๋ฒฝ ๊ฐ์ด๋ ๊ณต๋ถ ๋ชปํจ Feelings ์ฒ์์ผ๋ก ์ง์ ํ
์คํธ ์ฝ๋๋ฅผ ์ง๋ณด์๋ค. ๋ฌธ์ ๋ ๊ฐ์๊ธฐ ์ฌ๋ฌ ์ผ๋ค์ด ๋ชฐ๋ ค์ ์ถฉ๋ถํ ๊ณ ๋ฏผํ๊ณ ํ
์คํธ ์ฝ๋๋ฅผ ์งค ์๊ฐ์ด ๋ถ์กฑํ๋ค. ์์ผ๋ก๋ ์ถํด๊ทผ ์๊ฐ์ ๊ณผ์ ์ ๋ํด ๊ณ ๋ฏผํด๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค. ๊ณผ์ ๋ฅผ ์ ์ถํ๋ ๊ฒ์ ๋ฑ ๋ง์ถฐ์ ๊ณผ์ ๋ฅผ ์งํํ๊ฒ ๋์๋ค. ๊ณผ์ ์์ ์๊ตฌํ๋ ๊ฒ๋ณด๋ค ํญ์ ์กฐ๊ธ ๋ ์งํํ๋ ๊ฒ์ ๋ชฉํ๋ก ๋๊ณ ๊ณผ์ ๋ฅผ ํด์ผ๊ฒ ๋ค. ํ
์คํธ๋ ์ธํฐํ์ด์ค๋ฅผ ํ
์คํธ ํด์ผํ๋ค๊ณ ๋ค์๋๋ฐ, ์ปดํฌ๋ํธ์๋ ๋์ผํ ๊ธฐ์ค์ด ์ ์ฉ๋๋ ์ง๋ ๊ถ๊ธํ๋ค. ์ด ์๋ฌธ์ ๊ณ์ ๊ฐ์ง๊ณ ์์ผ๋ก ๊ณผ์ ๋ฅผ ์งํํด์ผ๊ฒ ๋ค. ํ๋ฒ ๋ฃจํด์ด ๊นจ์ง๋ฉด ๊ทธ ๋ค์ ์๋ฅด๋ฅด ๋ฌด๋์ง๋ ๊ฒ ๊ฐ๋ค. ๊ธฐ๋์ ๋ชป๋ฏธ์น๋๋ผ๋ ์กฐ๊ธ๋ง์ด๋ผ๋ ๊ณต๋ถ๋ฅผ ์งํํด๋ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๊ฒ ๋์๋ค. Findings ์ถํด๊ทผ ์๊ฐ์ ํ์ฉํ ํ์์ฑ ๋จ์ํ ๊ณผ์ ๋ฅผ ํ๋ ๊ฒ์ ๋จธ๋ฌด๋ฅด์ง ์๋ ํ๋ ๋ฃจํด์ด ํ๋ฒ ๊นจ์ง๋ฉด ์ง์ํ๋ ๊ฒ๋ค์ด ๊ธ๋ฐฉ ๋ฌด๋์ง๋ค. ๋ค์ ๋ฃจํด์ผ๋ก ํ๋ฒ์ ๋์๊ฐ๋ ค๊ณ ํ์ง๋ง๊ณ ์กฐ๊ธ์ฉ์ด๋ผ๋ ๋์๊ฐ์ผ๊ฒ ๋ค. Affirmation ์ถ๊ทผ/ํด๊ทผ ์งํ์ฒ ์์์ ๊ณผ์ ๊ณ ๋ฏผํด๋ณด๊ธฐ ์กฐ๊ธ์ฉ ๋ค์ ๋ฃจํด์ผ๋ก ๋์๊ฐ๊ธฐ","link":"/2021/08/29/codesum-week-3/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 4์ฃผ์ฐจ ํ๊ณ ","text":"4์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์ฝ๋์จ 4์ฃผ์ฐจ ๊ณผ์ ์ํ To-do ๋ฆฌ์คํธ Redux๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํฉํฐ๋ง ํ๊ธฐ ๋ ์คํ ๋ ์ ๋ณด ํ์ธ ๋ฐ ์์ฝ ์์คํ
๊ตฌ์ถํ๊ธฐ Feelings ์์ ์ ๋จ์ง prop drilling ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก redux๋ฅผ ์ ํํ๋ ๊ฒ์ ๋นํํ๋ Kent Dodds์ ๊ธ(๋ฒ์ญ)์ ์ฝ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ redux์ ์บ์ฑํ๊ฒ ๋์ ์๋ฒ์ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ๊ฒ์ ์ง์ ํ ๊ธ ํ์ฌ์ฝ๋์ ๊ธ๋ ์ฝ์์๊ธฐ ๋๋ฌธ์ redux๋ฅผ ๋ง์ ๊ธฐ์ ์คํ์์ ์ฑํํ๋ ์ด์ ๊ฐ ๊ถ๊ธํ์๋ค. 4์ฃผ์ฐจ ๊ฐ์์ ๊ณผ์ ๋ฅผ ํตํด์ ์ํ, ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง๊ณผ ๋ทฐ๋ฅผ ๋ถ๋ฆฌํ๋๋ฐ์ ์์ด์ redux๊ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ์์ ์ redux๋ฅผ ์ฌ์ฉํ์ ๋์๋ ๋จ์ํ ์ปดํฌ๋ํธ์ ์ง์ redux state๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ฒ ๊ณผ์ ๋ฅผ ํตํด์ redux state๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ๊ณผ ์ปดํฌ๋ํธ ์ฌ์ด์ ์ปจํ
์ด๋๋ฅผ ์์น ์ํค๋ฉด redux state๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ๊ณผ ์ปดํฌ๋ํธ๊ฐ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋๋๋ก ๊ตฌ์ฑํ๋๋ก ํ ์ ์๊ณ ๋ณ๊ฒฝ์ ์ข ๋ ์ ์ฐํ๋๋ก ๊ตฌ์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ธฐ๋ฅ ๊ตฌํ์ ์์ด์ ์ฌ์ฉ ๋ชฉ์ ์ ๋ถ๋ช
ํ๊ฒ ํ๊ณ redux๊ฐ ์ ๊ณตํด์ฃผ๋ ์ด์ ์ ์ ๊ณ ๋ คํด์ ์ฌ์ฉ์ ํด์ผ ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. TDD๋ฅผ ํ๊ธฐ ์ํด์๋ ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ด ๋ช
ํํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๋๋ฌด ๋น์ฐํ ์ด์ผ๊ธฐ ์ธ๋ฐ, ํ
์คํธ ์์ฑ ์์ ๋ฌด์์ ์์ฑํด์ผ ํ๋ ์ง๋ฅผ ๋ช
์ํด์ผ ํ๋๋ฐ ์ฌ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์ด ๋ถ๋ถ์ด ๋ช
ํํ๊ฒ ์ ํ์ง ์๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ค์ ์ค๋ณต๋๋ ํ
์คํธ๊ฐ ์กด์ฌํ๋ค๊ณ ๋๋ผ๋ ์ง์ ๋ค์ด ์์๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ด๊ฐ ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ์ญํ ์ ํ์ผ๋ฉด ์ข๊ฒ ๋์ง๊ฐ ๋ช
ํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ๊ฐ์๋ค. ํ
์คํธ ๋ฌธ๋ฒ์ด๋, ํ
์คํธ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ์ ๋ชจ๋ฅด๋ ์ํ์์ ์์ฑ์ ํด์ ๊ด๋ จ๋ ํผ๋๋ฐฑ์ ๊ณ์ ๋ฐ์๋ค. ํ
์คํธ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ด ์ด๋ค ๋์์ ์ฃผ๋ ์ง์ ๋ํด์๋ ๊ณต๋ถ๊ฐ ํ์ํ๋ค๊ณ ๋๊ผ๋ค. Findings ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ๋ฅผ ๋ช
ํํ๊ฒ ํด์ผ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.(ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๋งค์ฐ ์ค์ํ ์์๋ผ๋ฉด redux๋ ์ ํฉํ์ง ์์ ๊ธฐ์ ์ผ ์ ์์ง๋ง, ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ, ์ปดํฌ๋ํธ ๋ณ๊ฒฝ์ด ์ฆ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋๋ redux๊ฐ ์ ์ฉํ ๋๊ตฌ์ธ ๊ฒ ๊ฐ๋ค.) ํ
์คํธ ์์ฑ ์ ์ ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ด ๋ฌด์์ธ์ง ๊ณ ๋ฏผํด์ผ ํ๊ณ ์์ฑํ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ค๋ฉด ๋ถ๋ฆฌํ ์ปดํฌ๋ํธ์ ์ญํ ์ด ๋ฌด์์ธ์ง ์ ๊ณ ๋ฏผํ๊ณ ๋ถ๋ฆฌํด์ผํ๋ค. ์๋ฏธ๊ฐ ์ ์ ๋ฌ๋๋ ํ
์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ํ
์คํธ ๋๊ตฌ ๊ธฐ๋ฅ๋ค์ ์์์ผ ํ ํ์์ฑ(๊ณต๋ถํด์ผ ๋ ๊ฑด ํญ์ ๋ง๋คโฆ.) Affirmation ๊ณผ์ ํ์ด์ ๊ฐ์ ๊ณผ์ ์ ์์์ ๋ณด์ง ์๊ณ ์งํํด๋ณด๊ธฐ(๋ถ๋โฆ) ํผ๋๋ฐฑ ๋ฐ์๋ ๋ถ๋ถ์ ํฌํจํด์ ํ
์คํธ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค ํ์ตํ๊ณ 5์ฃผ์ฐจ ๊ณผ์ ์ ์ ์ฉํด๋ณด๊ธฐ","link":"/2021/09/06/codesum-week-4/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 5์ฃผ์ฐจ ํ๊ณ ","text":"5์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์ฝ๋์จ 5์ฃผ์ฐจ ๊ณผ์ ์ํ ๋ ์คํ ๋ ์กฐํ ๊ตฌํํ๊ธฐ Feelings ๊ณผ์ ์ฒซ ํ
์คํธ ์์ฑ ์์, ํ
์คํธ ๋ด์ฉ์ redux์ ๋ํ mock์ด ํฌํจ๋์ด ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ์์ฑ์ ํ๋ค๋ณด๋ mock์ ํ redux ์ด๊ธฐ ์ํ๋ฅผ ์ด๋์ ์์น์์ผ์ผ ํ ์ง ํผ๋์ด ์๋ค. ์ด์ ๋ํด ์ฒ์๋ถํฐ redux์ ๋ํ mock์ ์ถ๊ฐํ์ง ๋ง๊ณ ๋จผ์ ์ปดํฌ๋ํธ๊ฐ ์ ๊ณตํด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ฅ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์์ฑํ ๋ค์ green์ ํต๊ณผ ํ๊ณ ๋์ mock์ด ํ์ํ ๋ถ๋ถ์ ์ฐพ์์ mock์ ์ถ๊ฐํด์ผ ํ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ํผ๋๋ฐฑ ๋๋ก redux์ ๋ํ mock์ ๋ค ์ง์ฐ๊ณ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ฅ์ ๋ง์กฑํ๋๋ก ๋น ๋ฅด๊ฒ ์์ฑํ๊ณ ๋ฆฌํฉํฐ๋ง์ ํ๋ ๋ฐฉ์์ผ๋ก ์งํ์ ํ๋๋ ํ
์คํธ ์์ฑ๊ณผ ์ฝ๋ ๊ตฌํ์ด ์ฒ์๋ณด๋ค ์์ํ๊ฒ ์งํ๋์๋ค. ์ฒ์๋ถํฐ redux๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ๋ ๊ฒ์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๋ฐ์ด ๋๊ณ ์งํํ๋ ค๋ ์์ฌ๋๋ฌธ์ด์๋๋ฐ, ๋ค์ ์ง๋ฃจํ๋๋ผ๋ ์ฝ๊ณ ๋น ๋ฅธ ๊ตฌํ ์ดํ์ ๋ฆฌํฉํ ๋งํ๋ ๋ฐฉ์์ผ๋ก ์งํํด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. redux thunk์ ๊ฒฝ์ฐ์๋ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด์๋ค. api ํต์ ๋ถ๋ถ์ mockingํ๊ณ ์ดํ์ mockingํ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ action์ผ๋ก ์ ๋๊ธฐ๋ ์ง๋ฅผ ํ
์คํธ ํด์ผํ๋ ์ง ๊ณ ๋ฏผํ๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋ ํ
์คํธ๋ฅผ ํตํด ์ด๋ค ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ๋ฅผ ์ํ๋๊ฐ?๊ฐ ํญ์ ์ด๋ ค์ด ์ง์ ์ด๋ผ๋ ๊ฒ์ ๋๊ผ๋ค. fetch์ ๋ํ mocking์ ์ด๋ป๊ฒ ํ๋์ง ๊ธ์ ์ฐพ์๋ณด๋ค๊ฐ ์ด ๊ธ์ ์ฝ๊ฒ ๋์๋๋ฐ, ๋ง์ ๋ถ๋ถ์ ์ดํดํ์ง ๋ชปํ์ง๋ง ์ค์ํ ์ง์ ์ด๋ผ๊ณ ์๊ฐํ ๊ฒ์ ๊ทธ ํ
์คํธ๊ฐ ์ค์ ๋ก ๋์๊ฒ ๋ฌด์์ ๋ณด์ฅํด ์ฃผ๋์ง๋ฅผ ์๊ฐํ๊ณ ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฐ?๋ผ๋ ์ง๋ฌธ์ด์๋ค. ์์ง thunk ํ
์คํธ์์ ๋ฌด์์ ํ์ธํด์ผ ํ ์ง ๊ฐ์ด ์ ์กํ์ง ์์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก redux thunk ๊ด๋ จ๋ ํ
์คํธ ์์ฑ์ ๊ณผ์ ํ์ด์ ๋์์ ๋ฐ์์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. 3์ฃผ์ฐจ ๊ณผ์ ํผ๋๋ฐฑ์์ beforeAll, beforeEach๋ฑ์ผ๋ก ์์ ํ ํ
์คํธ๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ๋ด์ฉ์ด ์์๋๋ฐ, ํ
์คํธ ๊ด๋ จ ์๋ฃ๋ค์ ์ฝ์ผ๋ฉด์ ํ
์คํธ ์์ฑ ์์, ํนํ mock์ ๊ตฌ์ฑํ ๋ ์์์ ์์ฑํ mock์ด ๋ค๋ฅธ ํ
์คํธ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์ง์ ์ ๋ํด์๋ ๊ณ ๋ ค๋ฅผ ํด์ผ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์ญ์ ํผ๋๋ฐฑ ๋ด์ฉ์ ๊ทธ๋ฅ ํ๊ท๋ก ํ๋ฆฌ๋ฉด ์๋๋ค๋ ๊ฒ์ ๋๊ผ๋คโฆ(์ ๋ชฐ๋ผ์ ์ค์ํ ๊ฑธ ๋ค์ด๋ ๋์น๋ ๊ฒ ๊ฐ๋คโฆ) Findings ์ง๋ฃจํ๋๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ์ ๊ณตํด์ผ ํ ์ต์ํ์ ๊ธฐ๋ฅ ๋ช
์ธ์ ๋น ๋ฅด๊ณ ์ฌ์ด ๊ตฌํ, ์ดํ์ ๋ฆฌํฉํ ๋ง์ ํด์ผํ๋ค. ํ
์คํธ๋ฅผ ํตํด ์ด๋ค ํผ๋๋ฐฑ์ ๋ฐ๊ณ ์ถ์ ์ง ์๊ฐํ๋ฉด์ ํ
์คํธ ์์ฑํด์ผ ํ๋ค. ๊ธฐ๊ณ์ ์ผ๋ก ์๋ฌด ์๊ฐ์์ด ์ด์ ์ ์์ฑํ๋ ํ
์คํธ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ฉด ์๋๋ค. ํ
์คํธ์ mock์ด ์์ฃผ ๋ฑ์ฅํ๋ ๋ฐ, mock์ด ํ
์คํธ ํ ๋ ์ ํ์ํ์ง ๋ชฐ๋๋ค. ์ด ๊ธ์ ์ฝ์ ๋๋ถ์ mock์ ๋ชฉ์ ์ด ๋
๋ฆฝ์ ์ธ ๋จ์ ํ
์คํธ ๊ตฌ์ฑ์ ์ํ ๊ฒ์์ ์๊ฒ๋์๋ค. ์ํฉ์ ๋ฐ๋ผ ์ฐธ์ด ๋๊ฑฐ๋ ๊ฑฐ์ง์ด ๋๋ ํ
์คํธ๋ ์ฐ๋ฆฌ์๊ฒ ์๋ฌด ๊ฒ๋ ๋ณด์ฅํด์ฃผ์ง ์๊ธฐ ๋๋ฌธ์, ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ขฐํ๊ธฐ ์ํด์๋ ๋จ์ ํ
์คํธ๋ ํญ์ ๋์ผํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ํจ์์ ์์กดํ๋ ํจ์์ ๊ฒฝ์ฐ์๋ ์์กดํ๋ ํจ์๊ฐ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ์ง ์๋ ๊ฒฝ์ฐ(์. fetch response) ํ
์คํธ ๊ฒฐ๊ณผ๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ ์ ์๋ค. ๋ฐ๋ผ์ ์์กดํ๋ ํจ์๋ ๊ฐ์ฒด๋ฅผ ํ๋ด๋ด๋ ํจ์๋ ๊ฐ์ฒด๊ฐ ํ์ํ๊ณ ํด๋น ํจ์๋ ๊ฐ์ฒด๋ฅผ test double์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. test double์ ๋ง์ด ๋ค์ด๋ดค๊ณ , spy, stubโฆ ๊ฐ๊ฐ์ ์ฐจ์ด๋ค๋ ์ฝ์ด๋ดค๋๋ฐ ๊ทผ๋ณธ์ ์ผ๋ก ํด๋น test double๋ค์ด ์ด๋ค ๋งฅ๋ฝ์์ ์ฌ์ฉ์ด ํ์ํ์ง๋ฅผ ์๊ฒ ๋์๋ค.(์์ฃผ ์กฐ๊ธ ์๊ฒ ๋์๋ค. ์ธ์ ๋ ๊ทธ๋ ๋ฏ ๊ฐ๊ธธ์ด ๋ฉ๋คโฆ) ๊ฐ๊ฐ์ ํ
์คํธ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ ์ง ๊ณ ๋ คํ๊ณ ์์ฑํด์ผ ํ ํ์์ฑ Affirmation ์ข ๋ ์๊ฐํ๋ฉด์ ํ
์คํธ๋ฅผ ์์ฑํ๊ณ , ์์ฌ๋ถ๋ฆฌ์ง ์๊ณ tdd๋ก ๊ณผ์ ๋ฅผ ์ํํ๊ธฐ thunk์ ๋ํ test์ fetch mocking์ ๋ํ ๋ด์ฉ ์ ๋ฆฌํ๊ธฐ","link":"/2021/09/13/codesum-week-5/"},{"title":"์ฝ๋์จ React 5๊ธฐ - 6์ฃผ์ฐจ ํ๊ณ ","text":"6์ฃผ์ฐจ ์ฃผ๊ฐ ํ๊ณ Facts ์ฝ๋์จ 6์ฃผ์ฐจ ๊ณผ์ ์ํ ๋ ์คํ ๋ ์์ธ ํ์ด์ง ๊ตฌํํ๊ธฐ Feelings ์์ธ ํ์ด์ง ๊ตฌํ ์, tdd๋ฅผ ํ๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ฌ ๋จ๊ณ์ ์์
์ ํ๋ฒ์ ํ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ์ญ์ ์ฝ์ง ์๋ค. ์์ง๊น์ง๋ โ์งง์ ์ฃผ๊ธฐ๋ก ํผ๋๋ฐฑโ์์ ์งง์ ์ฃผ๊ธฐ๊ฐ ๋ถํธํ๊ณ , ๊ทธ๋ฆผ์ด ์ ๊ทธ๋ ค์ง์ง ์๋๋ค. ์ ๊ทธ๋ฐ๊ฐ๋ฅผ ์๊ฐํด๋ดค์ ๋, ์ปดํฌ๋ํธ์ ๋ํด์ ์งง์ ์ฃผ๊ธฐ์ ์ด๋ค ํผ๋๋ฐฑ์ ๋ณด๊ณ ์ถ์์ง๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๊ทธ๋์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ๋๋ ๋ฌด์์ ํ์ธํด์ผ ํ๋์ง๋ฅผ ๋ค์ ๋์ง์ด ๋ดค๋ค. ์ฐ์ ๋ฆฌ์กํธ์ ์ ๋ต์ ์ํ ๊ฐ(state)์ ๋ณํ๊ฐ ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋๋๋ก ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฆฌ์กํธ์์ ์ฐ๋ฆฌ๊ฐ ํ์ธํด์ผ ํ๋ ๊ฒ๋ ๋ช
ํํ๋ค. ํด๋น ์ปดํฌ๋ํธ์ ์ํ ๊ฐ์ด ์ฃผ์ด์ก์ ๋(input) ์ด๋ค ํ๋ฉด์ ๊ทธ๋ฆฌ๋๊ฐ?(output). ์ข ๋ rtl(react testing library)์ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ผ์ ๋งํ๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ์ด๋ค ํ๋ฉด ์์๊ฐ ํ์๋์ด์ผ ํ๋๊ฐ?๋ฅผ ํ์ธํด์ผ ํ๋ค. ์ฌ๊ธฐ์ ํ
์คํธ์ ๋ํด์ ์ข ๋ ์๊ฐ์ ํด๋ณด๋ฉด ํ
์คํธ์ ๋์์ด ๋๋ ํจ์๋ ๊ฒฐ์ ์ ์ด๊ณ (deterministic) ๋ถ์ ํจ๊ณผ(side effect)๊ฐ ์๋ ์์ ํจ์์ด์ด์ผ ํ๋ค. ๊ฐ์ ์ธํ
(์
๋ ฅ, ํ๊ฒฝ)์ ๋ํ ๊ฒฐ๊ณผ ๊ฐ์ด ๊ทธ ๋ ๊ทธ ๋ ๋ค๋ฅธ ํจ์๋ผ๋ฉด, ํด๋น ํ
์คํธ๊ฐ ์ฃผ๋ ํผ๋๋ฐฑ์ ์๋ฏธ๊ฐ ์์ด์ง๊ธฐ ๋๋ฌธ์ ํ
์คํธํ๊ธฐ ์ด๋ ค์ด ํจ์(๋น๊ฒฐ์ ์ ์ด๊ณ ๋ถ์ํจ๊ณผ๊ฐ ์๋ ํจ์)์ ๋ํด์๋ ํ
์คํธ๋ฅผ ์์ฑํ์ง ์๋๋ค.(์์ฑํ์ง ์๋๋ค๊ธฐ ๋ณด๋ค๋ ํด๋น ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก, ๊ฒฐ์ ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ ๋๊ตฌ์ ๋์์ ๋ฐ์์ ์์ฑํ๋ค.) ์ด ๊ด์ ์์ ์ปดํฌ๋ํธ ๋ํ ์์ํจ์๋ก ์์ฑ๋์ด์ผ ํ๋ค. ์ฆ, ์์์ ๋งํ ๋ฆฌ์กํธ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ ์๊ฐํด๋ดค์ ๋, ํด๋น ์ปดํฌ๋ํธ๋ ์ฃผ์ด์ง ์ํ ๊ฐ์ ๋ฐ๋ผ์ ๊ทธ๋ ค์ง๋ ํ๋ฉด ์์๊ฐ ๊ฒฐ์ ์ ์ด๊ณ ๋ถ์ํจ๊ณผ๊ฐ ์์ด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ๊ฒฝ์ฐ ์ด๋ฐ ์ ์ฝ์ด ๊นจ์ง๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ํ ๊ฐ์ ๊ฒฐ์ ํ๊ธฐ ์ํ ๋๊ตฌ๋ก useSelector๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋น๊ฒฐ์ ์ ์ด๊ฒ ๋๊ณ , useEffect๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ mock์ ๋์์ ๋ฐ์์ useSelctor๊ฐ ๋ฐํํ๋ ์ํ ๊ฐ, ํน์ useEffect๋ฅผ ํตํด ์ ๊ณต๋๋ ์ํ ๊ฐ์ ๊ณ ์ ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ฐฉ์์ผ๋ก ๋
๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ ํ ํ
์คํธํ๋ค. ๊ฒฐ๊ตญ ํ
์คํธ ํ๊ธฐ ์ด๋ ค์ด ์ปดํฌ๋ํธ๋ค๋ mock์ ๋์์ ๋ฐ๋๋ค๋ฉด โํด๋น ์ปดํฌ๋ํธ์ ์ํ ๊ฐ์ด ์ฃผ์ด์ก์ ๋(input), ํด๋น ์ปดํฌ๋ํธ์ ์ด๋ค ํ๋ฉด ์์๊ฐ ํ์๋์ด์ผ ํ๋๊ฐ?โ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ ๋๋ก ๊ตฌํ๋์๋์ง์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณต๋ฐ์ ์ ์๋ค. ์ฌ๊ธฐ์ ๋ด๊ฐ ํ ๋จ์์ ์์
์ ํฌ๊ธฐ๊ฐ ํผ๋ํ๋ ์ง์ ์ด ๋ฐ์๋์๋ค. ํ๋ฉด ์์๋ฅผ ํ์ํ๊ธฐ ์ํด ์ด๋ค ์ํ ๊ฐ์ด ์ ๊ณต๋์ด์ผ ํ๋์ง, ๋ ์ ํํ๊ฒ๋ ํด๋น ์ํ ๊ฐ์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ณต๋์ด์ผ ํ๋์ง?๋ ํด๋น ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค ์ค๊ณ์ ํด๋นํ๋๋ฐ, ์ด ์ค๊ณ๋ ๋ฆฌํฉํฐ๋ง์ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค ์ค๊ณ๋ ํ
์คํธ ์ด์ ์ ๊ฒฐ์ ๋์ด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์์ ์ปดํฌ๋ํธ์ ์ค๊ณ๊ฐ ๋ณ๊ฒฝ๋๋ ์ง์ ์ด ๋ฐ์ํ๊ณ ์ด ๊ณผ์ ์์ ํ ๋จ์์ ์์
์ ํฌ๊ธฐ๊ฐ ๋ถ๋ถ๋ช
ํ ์ง์ ์ด ์์๋ค. ํด๋น ์ง์ ์ ์ปดํฌ๋ํธ์์ useSelector๋ useEffect๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ๊ฐ์ ์ ๊ณต๋ฐ๋๋ก ๋ณ๊ฒฝํ๋ ์ง์ ์ด๋ค. ๋งจ ์ฒ์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ ๋๋ props๋ก ์ํ ๊ฐ์ ๋ถ๋ชจ์์ ๋ฐ์์ ๊ทธ๋ฆฌ๋๋ก ์ธํฐํ์ด์ค๊ฐ ์ค๊ณ๋ ์ปดํฌ๋ํธ๊ฐ ์ํ ๊ฐ์ ๋ถ๋ชจ์๊ฒ ๋ฐ์ง ์๊ณ useSelector๋ฅผ ํตํด์ redux store์์ ๊ฐ์ ๋ฐ์์ค๋๋ก ํ ๋, ์ด ๊ฒฝ์ฐ์๋ ์ค๊ณ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด์ง ๋ฆฌํฉํฐ๋ง์ด ์ผ์ด๋๋ ๊ฒ์ด ์๋๋ค. ๊ธฐ์กด์ ํ๋์ ์ปดํฌ๋ํธ์๋ ๋ถ๋ถ์ redux ๊ฐ์ ๋ฐ์์ค๋ container์ ๋ฐ์ ๊ฐ์ ๊ทธ๋ฆฌ๊ธฐ๋ง ํ๋ component๋ก ๋ถ๋ฆฌํ๋ ๊ณผ์ ์์, ๊ธฐ์กด์ ์์ฑ๋ ํ
์คํธ๋ ์ค๊ณ๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํ ํ
์คํธ๊ฐ ๋์ด๋ฒ๋ฆฌ์ง๋ง red ํผ๋๋ฐฑ์ ๊ณ์ ๋ณด๋ธ๋ค. ๋น์ฅ ๋์๊ฒ ํ์ํ ํผ๋๋ฐฑ์ ๋ฌด์์ผ๊น? ์ฐ์ ๋ฌด์๋ฏธํ ํผ๋๋ฐฑ์ ๊ณ์ํด์ ์ ๋ฌํ๋ ๊ธฐ์กด์ ํ
์คํธ๋ฅผ ๋ค ์ญ์ ๋ฅผ ํ๋ ๊ฒ์ด ๋จผ์ ์ผ๊น? ์ ๋ชจ๋ฅด๊ฒ ๋ค container์ ๋ํ ํ
์คํธ์ component์ ๋ํ ํ
์คํธ ์ค์์๋ ๋ฌด์์ ๋จผ์ ์์ฑํ๋ ๊ฒ์ด ์ข์๊น? ๊ฒฐ๊ตญ ์ค๊ณ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฐ์ํ ๋ชจ๋ ์์
์ด ํ๋์ ์์
์ผ๋ก ๋ฌถ์ฌ์ ์งํ๋์๊ณ ์ปค๋ฐ๋์๋ค. ์ด ์์
์ ๋์๊ฒ ์ ํผ๋์ ์ฃผ๋ ๊ฒ์ธ๊ฐ? ์๊ฐ์ ํด๋ณด๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์์ ์ด๋ค ํผ๋๋ฐฑ์ ๋จผ์ ๋ฐ์์ผ ํ๋๊ฐ?๋ฅผ ํผ๋ํ๋ ๊ฒ ๊ฐ๋ค. ๋งจ ์ฒ์ ๋งํ๋ ๋๋ก ์ด๋ค ํ๋ฉด ์์๊ฐ ํ์๋์ด์ผ ํ๋๊ฐ?๊ฐ ๊ฐ์ฅ ์ค์ํ ํผ๋๋ฐฑ์ด๊ธฐ ๋๋ฌธ์ component์ ๋ํ ํ
์คํธ๊ฐ ๋จผ์ ์์ฑ๋์ด์ผ ํ ๊ฒ ๊ฐ๋ค. componenet๊ฐ ๊ตฌํ๋ ํ์ ๋ ์ค์ํ ํผ๋๋ฐฑ์ธ container์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก๋ ๋์๊ฒ ๋น์ฅ ๊ฐ์ฅ ์ค์ํ ํผ๋๋ฐฑ์ด ๋ฌด์์ผ๊น?๋ฅผ ์๊ฐํ๊ณ ์์ฑ ์ฐ์ ์์๋ฅผ ์ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์์ ์ก์๋ฆฌ๋ฅผ ๋ค ์ ๊ฑฐํ๊ณ , ์์ฌ๋์ด 5๊ธฐ ์ฌ๋ ๋ฐฉ์ ์ฌ๋ ค์ฃผ์ ๊ธฐ์ฌ๊ธ๊ณผ ๋์์์ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ฉด ๊ฒฐ๊ตญ ์ธ์ถ์ ํด๋ผ ์ ์์ด์ผ ํ๋ค. ํด๊ฐ ๊ธฐ๊ฐ ๋์ ๋ผ์ฐํ
์ ๋๋๊ณ ํ์ด์ง๋ฅผ tdd๋ก ์์ฑํ๋ ๊ณผ์ ์ ์ธ์ถํด๋ดค๋๋ฐ ์๊ฐ์ ์์กดํ๊ธฐ ๋ณด๋ค ๊ธฐ์ต์ ๋ ์์กดํ๊ฒ ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ๊ทธ๋๋ ์ธ์ถ์ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ ์์ฒด๊ฐ ์๋ฏธ๊ฐ ์์๋ค. ํ์ฌ์์ ํ๋ ์์
์์๋ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์์๊น ๊ณ ๋ฏผ์ธ๋ฐ, ๋๋ถ๋ถ์ ์์
์ ํ์ฌ์์์ ์์
์ด๊ธฐ ๋๋ฌธ์, ํ์ฌ์์ ํ๋ ์์
๋ฌผ์ tdd๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ ๋ขฐํ ์ ์๋๋ก ํ ์ ์๋ ๊ฒ๊ณผ ๋์์ ๋ ์์ฃผ ์ธ์ถ์ ํ ์ ์๋ ์ฅ์ ์ด ์๋ค. ๋จ์ ์ ํ์ฌ์์์ ์์
๋ค์ ๋งฅ๋ฝ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ํ ์ธ์ถ์ ๋ํด์ ์ ์ ํ ํผ๋๋ฐฑ์ ์ค์ค๋ก ์ฃผ๊ธฐ๊ฐ ์ด๋ ต๊ณ ๋ค๋ฅธ ๋๋ฃ์๊ฒ ๋ฐ๊ธฐ๋ ๋ ์ด๋ ต๋ค๋ ๊ฒ. ๊ทธ๋์ ์คํ๋ ค ์๋ชป๋ ์ต๊ด์ ๋ฐ๋ณต์ํฌ ์๋ ์์ ๊ฒ ๊ฐ์์ ์ฐ์ ์ฝ๋์จ์์๋ ์ ํ๊ณ ๋์ค์ ์กฐ๊ธ์ฉ ์ฌ์ด ์์
๋ฌผ๋ถํฐ ์์์ ํด๋ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ๋ฉํ ๋์ด ํผ๋๋ฐฑ์์ mockํ ์ํ ๊ฐ์ ์ง์ฐ ํ๊ฐํ ์ ์๋ given2๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๊ฐํด์ฃผ์
จ๋ค. ๊ฐ ํ
์คํธ์์ mock๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง ๋ ๋ช
ํํ๊ฒ ํํ๋๋ ๊ฒ ๊ฐ์๋ค. ๋๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ ํ๊ฒ ํ๊ฐํ๊ณ ์ ํํ๋ ๋ฅ๋ ฅ์ ์ ๊ฐ์ถ์์ผ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. Findings ๋์๊ฒ ๋น์ฅ ๊ฐ์ฅ ํ์ํ ํผ๋๋ฐฑ์ด ๋ฌด์์ธ์ง ์๊ฐํ๊ณ ์์ฑ ์ฐ์ ์์๋ฅผ ์ ํด์ผ ํ๋ค. ํ์ต์๋ ์ธ์ถ์ด ์ค์ํ๋ค. ์ธ์ถ์ ํตํด ํ์ฌ๊น์ง์ ํ์ต ์ ๋๋ฅผ ํ์ธํ๋๋ก ํ์. ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ ํ๊ฒ ํ๊ฐํ๋ ์ ํํ๋ ๋ฅ๋ ฅ์ ํ์์ฑ. Affirmation ๋์๊ฒ ๋น์ฅ ๊ฐ์ฅ ํ์ํ ํผ๋๋ฐฑ์ด ๋ฌด์์ธ์ง ์๊ฐํ๊ณ ์์ฑ ์ฐ์ ์์๋ฅผ ์ ํด์ ๊ตฌํํ๊ธฐ. ๋ด๊ฐ ์ ๋๋ก ํ์ตํ๋์ง๋ ์ธ์ถ์ด ๊ฐ๋ฅํ์ง๋ฅผ ํตํด ํ์ธํด๋ณด๊ธฐ.(์ฌํ๊น์ง ์งํ๋์๋ ๋ด์ฉ์ ๋ค์ ์งํํด๋ณด๊ธฐ)","link":"/2021/09/26/codesum-week-6/"}],"tags":[{"name":"poem","slug":"poem","link":"/tags/poem/"},{"name":"suffering","slug":"suffering","link":"/tags/suffering/"},{"name":"meditation","slug":"meditation","link":"/tags/meditation/"},{"name":"isaiyah","slug":"isaiyah","link":"/tags/isaiyah/"},{"name":"CSS","slug":"css","link":"/tags/css/"},{"name":"macbook","slug":"macbook","link":"/tags/macbook/"},{"name":"keyboard","slug":"keyboard","link":"/tags/keyboard/"},{"name":"volume","slug":"volume","link":"/tags/volume/"},{"name":"containing block","slug":"containing-block","link":"/tags/containing-block/"},{"name":"JS","slug":"js","link":"/tags/js/"},{"name":"lexical scope","slug":"lexical-scope","link":"/tags/lexical-scope/"},{"name":"closure","slug":"closure","link":"/tags/closure/"},{"name":"function","slug":"function","link":"/tags/function/"},{"name":"arrow function","slug":"arrow-function","link":"/tags/arrow-function/"},{"name":"TIL","slug":"til","link":"/tags/til/"},{"name":"HTML","slug":"html","link":"/tags/html/"},{"name":"generator","slug":"generator","link":"/tags/generator/"},{"name":"chaining","slug":"chaining","link":"/tags/chaining/"},{"name":"git","slug":"git","link":"/tags/git/"},{"name":"github","slug":"github","link":"/tags/github/"},{"name":"execution context","slug":"execution-context","link":"/tags/execution-context/"}],"categories":[{"name":"๊ฐ์ธ์ ์ธ","slug":"๊ฐ์ธ์ ์ธ","link":"/categories/%EA%B0%9C%EC%9D%B8%EC%A0%81%EC%9D%B8/"},{"name":"์์ธ์ด","slug":"๊ฐ์ธ์ ์ธ/์์ธ์ด","link":"/categories/%EA%B0%9C%EC%9D%B8%EC%A0%81%EC%9D%B8/%EC%97%90%EC%84%B8%EC%9D%B4/"},{"name":"๋ฌต์","slug":"๊ฐ์ธ์ ์ธ/๋ฌต์","link":"/categories/%EA%B0%9C%EC%9D%B8%EC%A0%81%EC%9D%B8/%EB%AC%B5%EC%83%81/"},{"name":"Programming","slug":"programming","link":"/categories/programming/"},{"name":"๊ธฐํ","slug":"programming/๊ธฐํ","link":"/categories/programming/%EA%B8%B0%ED%83%80/"},{"name":"CSS","slug":"programming/css","link":"/categories/programming/css/"},{"name":"JavaScript","slug":"programming/javascript","link":"/categories/programming/javascript/"},{"name":"TIL","slug":"til","link":"/categories/til/"},{"name":"HTML","slug":"programming/html","link":"/categories/programming/html/"},{"name":"git","slug":"programming/git","link":"/categories/programming/git/"}]}