๋ชฉ๋ก์ ์ฒด ๊ธ (162)
EEALL@ONCE
'๋ชจ๋ธ(Model)'์ ๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ๋ณผ๋ก ํํ๋์ด ์์ต๋๋ค. '๋ทฐ(View)'๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, ํ๋ฉด๊ณผ ๋ฒํผ์ผ๋ก ๋ํ๋ฉ๋๋ค. '๋ทฐ๋ชจ๋ธ(ViewModel)'์ ์ค์ฌ์ ์ญํ ์ ํ๋ฉฐ, ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฌ์ด์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ๋ด๋ ํ์ดํ๊ฐ ์์ต๋๋ค. MVVM (Model-View-ViewModel) ํจํด์ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ๋ถ๋ฆฌ๋ ๊ด์ฌ์ฌ(Separation of Concerns): MVVM์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ, ๋ทฐ, ๋ทฐ๋ชจ๋ธ๋ก ๋๋๋๋ค. ์ด๋ก ์ธํด ๊ฐ ๋ถ๋ถ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ , ๋ณ๊ฒฝ๋ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ด ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ๋์์ธ์ ๋ณ๊ฒฝํ ๋ ๋ฐ์ดํฐ ๋ก์ง์ด๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ์ ..
๋ ธ์ถ ๋ชจ๋ ํจํด(Revealing Module Pattern)์ JavaScript์ ๋์์ธ ํจํด ์ค ํ๋๋ก, ๋ชจ๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจํด์ ์ฆ์ ์คํ ํจ์ ํํ์(IIFE)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์๋์ฑ๊ณผ ์บก์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ์๋์ฑ(Encapsulation): ๋ชจ๋ ๋ด๋ถ์ ๋ณ์์ ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๊ณต๊ฐ ์ํ์ด๋ฉฐ, ์ธ๋ถ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ณต๊ฐ ์ธํฐํ์ด์ค(Exposure): ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋ ํจ์๋ ๋ณ์๋ง์ ์ ํ์ ์ผ๋ก ๊ณต๊ฐํฉ๋๋ค. ๊ตฌ์กฐ: ๋ชจ๋์ ์ฆ์ ์คํ ํจ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ด๋ถ ํจ์ ๋ฐ ๋ณ์๋ฅผ ํฌํจํฉ๋๋ค. ๊ณต๊ฐํ ๋ฉค๋ฒ๋ ๋ฐํ ๊ฐ์ฒด์ ํฌํจ์ํต๋๋ค var myModule = (function() { // ๋น๊ณต๊ฐ ๋ณ์์ ํจ์ var private..
์ดํฐ๋ ์ดํฐ(iterator)๋ ์ปฌ๋ ์ , ์๋ฅผ ๋ค์ด ๋ฆฌ์คํธ๋ ์ธํธ์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ด์ ์์๋ค์ ์ํํ๋ ๊ฐ์ฒด์ ๋๋ค. ์ดํฐ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์ ๊ฐ ์์์ ์ฐจ๋ก๋๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. Java์์ ์ดํฐ๋ ์ดํฐ๋ Iterator ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ตฌํ๋ฉ๋๋ค. ์ฃผ์ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: hasNext(): ์ดํฐ๋ ์ดํฐ๊ฐ ๋ ์ด์ ์ํํ ์์๊ฐ ์๋์ง๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์์๊ฐ ์๋ค๋ฉด true๋ฅผ, ์๋ค๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค. next(): ์ดํฐ๋ ์ดํฐ์ ๋ค์ ์์๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ๋จํ ์ฌ์ฉ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: List list = Arrays.asList("apple", "banana", "cherry"); Iterator iterator = list.iterator(); while (iterato..
์ด ๊ทธ๋ฆผ์ DNS(Domain Name System, ๋๋ฉ์ธ ์ด๋ฆ ์์คํ ) ๊ฐ๋ ์ ์ค๋ช ํฉ๋๋ค. ํฐ ๋์์์ ํ ์ฌ๋์ด ํน์ ์ง(์น์ฌ์ดํธ๋ฅผ ์์ง)์ผ๋ก ๊ฐ๋ ๋ฐฉํฅ์ ๋ฌป๊ณ ์๋ ์ฅ๋ฉด์ ๋ฌ์ฌํ๊ณ ์์ต๋๋ค. ์๋ดํ ๋๋ ์ ๋ณด ๋ณด๋(‘DNS’๋ก ๋ผ๋ฒจ๋ง ๋จ)๊ฐ ์ง๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ง๋์์ ์ง์ ์์น๋ฅผ ์ฃผ์(์น์ฌ์ดํธ์ ๋๋ฉ์ธ ์ด๋ฆ์ ์์ง)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ๊ณ ์์ต๋๋ค. ์ด๋ DNS๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋๋ฉ์ธ ์ด๋ฆ(์: ‘www.example.com’)์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ IP ์ฃผ์๋ก ๋ณํํ๋ ๋ฐฉ์์ ์์งํฉ๋๋ค. DNS๋ ์ธํฐ๋ท ํธ๋ํฝ์ ์ฌ๋ฐ๋ฅธ ์น์ฌ์ดํธ๋ก ์๋ดํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ง์น ๋์ ๋ด์์ ํน์ ์ฃผ์๋ฅผ ์ฐพ์๊ฐ๋ ๊ฒ๊ณผ ๊ฐ์ด, DNS๋ ์ธํฐ๋ท์์ ํน์ ์น์ฌ์ดํธ๋ฅผ ์ฐพ์๊ฐ๋ ๋ฐ ํ์์ ์ธ ์ญํ ์ ํฉ๋๋ค..
์ด ๊ทธ๋ฆผ์ ์น ๊ธฐ์ ์์ '์ค๋ฆฌ์ง'(Origin) ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ๋ ์ง์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๋ค๋ฅธ ์น ๋๋ฉ์ธ์ ๋ํ๋ ๋๋ค. ๊ฐ ์ง์ ๊ณ ์ ํ ์์๊ณผ ์คํ์ผ์ ๊ฐ์ง๊ณ ์์ด, ๋ค๋ฅธ ์ค๋ฆฌ์ง์ ์์งํฉ๋๋ค. ๊ฐ ์ง์๋ ๊ทธ ์ง์ ์น ์ฃผ์(๋๋ฉ์ธ)๊ฐ ๋ผ๋ฒจ๋ก ํ์๋์ด ์์ต๋๋ค. ์ง๋ค์ ์ฐ๊ฒฐํ๋ ๋๋ก๊ฐ ์์ด ์ธํฐ๋ท์ ๋ํ๋ ๋๋ค. ์ด ๊ทธ๋ฆผ์ ํตํด ๊ฐ ๋๋ฉ์ธ(์ง)์ด ์น ํต์ ์ ๋งฅ๋ฝ์์ ๋ณ๊ฐ์ ์ค๋ฆฌ์ง์ผ๋ก ์กด์ฌํ๋ค๋ ๊ฒ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ค๋ฆฌ์ง์ ํ๋กํ ์ฝ(์: HTTP, HTTPS), ๋๋ฉ์ธ(์น ์ฃผ์), ๊ทธ๋ฆฌ๊ณ ํฌํธ๋ฅผ ์กฐํฉํ ๊ฒ์ผ๋ก, ์น ๋ณด์ ๋ฐ ๋ฆฌ์์ค ์ ๊ทผ ์ ์ด์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ทธ๋ฆผ์ ์น ๊ธฐ์ ์์ '์ค๋ฆฌ์ง'(Origin)์ ๊ตฌ์ฑ ์์์ธ ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ๋ฅผ ์ค๋ช ํ๊ณ , ๋๋ฉ์ธ๊ณผ ..
์ด ๊ทธ๋ฆผ์ CORS(Cross-Origin Resource Sharing, ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ) ๊ฐ๋ ์ ๋จ์ํํ์ฌ ์ค๋ช ํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ๋๋ฉ์ธ์ ๋ณ๋์ ์ฌ์ผ๋ก ํํํ์์ผ๋ฉฐ, ํ ์ฌ์๋ ์น ์๋ฒ๊ฐ, ๋ค๋ฅธ ์ฌ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค. ์ด ๋ ์ฌ ์ฌ์ด์๋ CORS๋ฅผ ์์งํ๋ ๋ค๋ฆฌ๊ฐ ๊ทธ๋ ค์ ธ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ฌ์ ์น ์๋ฒ์์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์์์ ๋ํ๋ ๋๋ค. '์ ๊ทผ ๋ถ๊ฐ' ํ์งํ์ด '์ ๊ทผ ํ์ฉ'์ผ๋ก ๋ฐ๋๋ ๋ชจ์ต์ ํตํด CORS๊ฐ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ญํ ์ ๊ฐ์กฐํ๊ณ ์์ต๋๋ค. CORS(Cross-Origin Resource Sharing)๋ ์น ํ์ด์ง๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์น์์๋ ๋ณด์์์ ์ด์ ๋ก ๋์ผ..
CDN(Content Delivery Network, ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ) ์๋น์ค์ ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ ๊ทธ๋ฆผ์ ๋๋ค. ์ด ๊ทธ๋ฆผ์์๋ ์ค์ ์๋ฒ๊ฐ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ์ฌ๋ฌ ๋ก์ปฌ ์๋ฒ๋ค๊ณผ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋ก์ปฌ ์๋ฒ์๋ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์ ๊ทผ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฝํ ์ธ ์ ๋ณต์ฌ๋ณธ์ด ์ ์ฅ๋์ด ์๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์์ธ์ ์๋ ์ปคํผ์์ด ์ ์ธ๊ณ์ ์ ๋ช ํ๋ฐ, ์ปคํผ๋ฅผ ๋ง์๊ธฐ ์ํด ๋ชจ๋ ์ฌ๋๋ค์ด ์์ธ๋ก ๊ฐ์ผ ํ๋ค๊ณ ํฉ์๋ค. ์ด ๊ฒฝ์ฐ, ์์ธ๊น์ง ๊ฐ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ์ปคํผ์์ ๋งค์ฐ ๋ถ๋น ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ธํฐ๋ท์์ ํ๋์ ์ค์ ์๋ฒ๋ง ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋น์ทํฉ๋๋ค. ์ด์ , ์ปคํผ์์ด ์ ์ธ๊ณ ๊ณณ๊ณณ์ ๋ถ์ ์ ์ด์ด ๊ฐ์ ํ์ง์ ์ปคํผ๋ฅผ ์ ๊ณตํ๋ค๊ณ ์์ํด๋ณด์ธ์. ์ฌ๋๋ค์ ๊ฐ๊น์ด ๋ถ์ ์ ๋ฐฉ๋ฌธํ์ฌ ๋น ๋ฅด๊ณ ํธ๋ฆฌํ๊ฒ ์ปค..
ํ๋ก์ ๊ฐ์ฒด: ํ๋ก์๋ ์ค์ ๊ฐ์ฒด๋ฅผ ๋์ ํ์ฌ ๊ธฐ๋ฅ์ ์ํํ๋ ๊ฐ์ฒด์ ๋๋ค. ๋ณด์, ์ง์ฐ ๋ก๋ฉ, ๋ถ์ฐ ์ฒ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ต์ ๋ฒ ํจํด์ ํ๋ก์ ๊ฐ์ฒด๋ก ๊ตฌํํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด๋ณด๋ฉด, ํ๋ก์ ๊ฐ์ฒด๊ฐ ์๋ธ์ ํธ์ ๋๋ฆฌ ์ญํ ์ ํ๋ฉด์ ์ต์ ๋ฒ์๊ฒ ์ํ ๋ณ๊ฒฝ์ ์๋ฆฌ๋ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค. ์ด ๊ตฌ์กฐ์์ ํ๋ก์๋ ์๋ธ์ ํธ์ ๋ฉ์๋ ํธ์ถ์ ๊ด๋ฆฌํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ต์ ๋ฒ์๊ฒ ์ํ ๋ณ๊ฒฝ์ ์๋ฆฝ๋๋ค. ์ฌ๊ธฐ์ 'Subject' ๊ฐ์ฒด๋ ์ค์ ๋ก์ง์ ๋ด๋นํ๊ณ , 'Proxy'๋ Subject์ ๋๋ฆฌ์๋ก์ ํธ์ถ์ ์ค๊ณํ๊ณ ์ต์ ๋ฒ๋ค์๊ฒ ์ํ ๋ณํ๋ฅผ ์๋ฆฝ๋๋ค. 'Observer' ๊ฐ์ฒด๋ค์ ์ํ ๋ณํ์ ๋ํ ์๋ฆผ์ ๋ฐ์ต๋๋ค. ์ด ๋ค์ด์ด๊ทธ๋จ์์ ํ์ดํ๋ Subject์์ Proxy๋ก, ๊ทธ๋ฆฌ๊ณ Proxy์์ Observer๋ก ์ ๋ณด๊ฐ ..