์๋ ํ์ธ์, ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค!
์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค๋ ์นด๋ค๊ธฐ ๋ฉ๋ก , ์์ฑํด, ํ ๋ก ํ , ์ํฐ๋ฃจ ๋ฑ ๋ถ๋ฏธ์ ์ฃผ์ ๋ํ์์ ์ปดํจํฐ๊ณตํ์ ์ ๊ณตํ๊ณ , Google, Microsoft, Meta ๋ฑ ๊ธ๋ก๋ฒ IT ๊ธฐ์ ์์ ์ค๋ฌด ๊ฒฝํ์ ์์ ๊ฐ๋ฐ์๋ค์ด ํจ๊ป ๋ง๋ ๊ต์ก ๊ทธ๋ฃน์ ๋๋ค.
์ฒ์์๋ ๋ฏธ๊ตญ๊ณผ ์บ๋๋ค์ ์ปดํจํฐ๊ณตํ ์ ๊ณต์๋ค๋ผ๋ฆฌ ํจ๊ป ๊ณต๋ถํ๋ฉฐ ์ฑ์ฅํ๊ณ ์ ๋ง๋ ์คํฐ๋ ๋ชจ์์์ ์์๋์์ต๋๋ค. ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ํ, ๋ค๋ฅธ ์๊ฐ๋์ ์์์ง๋ง ํจ๊ป ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๋ก์๊ฒ ๋ฐฐ์ด ๊ทธ ์๊ฐ์ ๋งค์ฐ ํน๋ณํ๊ณ , ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฐ ์๊ฐ์ด ๋ค์์ต๋๋ค.
โ์ฐ๋ฆฌ๊ฐ ๊ณต๋ถํ๋ ์ด ๋ฐฉ์, ๊ทธ๋๋ก ๋ค๋ฅธ ์ฌ๋์๊ฒ๋ ์ ํ๋ฉด ์ด๋จ๊น?โ
๊ทธ ๋ฌผ์์ด ๋ฐ๋ก ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค์ ์ถ๋ฐ์ ์ด์์ต๋๋ค.
ํ์ฌ๋ ์ฝ 30๋ช ์ ํ์ง ๊ฐ๋ฐ์์ ์ปดํจํฐ๊ณตํ ์ ๊ณต ๋ํ์๋ค์ด ๊ฐ์์ ์ ๋ฌธ ๋ถ์ผ๋ฅผ ๋งก์, ์ ๋ฌธ๋ถํฐ ์ค์ ๊น์ง ์์ฐ๋ฅด๋ ์ปค๋ฆฌํ๋ผ์ ์ง์ ์ค๊ณํ๊ณ ๊ฐ์ํฉ๋๋ค. ๋จ์ํ ์ง์ ์ ๋ฌ์ ๋์ด, ์ง์ง ๊ฐ๋ฐ์์ ์์ ์ผ๋ก ๋ฐฐ์ฐ๊ณ ํจ๊ป ์ฑ์ฅํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
โ์ง์ง ๊ฐ๋ฐ์๋, ์ง์ง ๊ฐ๋ฐ์์๊ฒ ๋ฐฐ์์ผ ํฉ๋๋ค.โ
์ ํฌ๋ ์น ๊ฐ๋ฐ์ ์ ๊ณผ์ ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ฒด๊ณ์ ์ผ๋ก ๋ค๋ฃจ๋, ์ด๋ก ์ ๋จธ๋ฌด๋ฅด์ง ์๊ณ ์ค์ต๊ณผ ์ค์ ์ค์ฌ์ ํผ๋๋ฐฑ์ ํตํด ์ค๋ ฅ์ ํค์๋๋ฆฝ๋๋ค.
์๊ฐ์ ํ ์ฌ๋, ํ ์ฌ๋์ ์ฑ์ฅ์ ํจ๊ป ๊ณ ๋ฏผํ๊ณ ์ด๋์ด๊ฐ๋ ๊ฒ์ด ์ฐ๋ฆฌ์ ์ฒ ํ์
๋๋ค.
๐ฏ ์ฐ๋ฆฌ์ ์ฒ ํ์ ๋ถ๋ช
ํฉ๋๋ค.
"์ง์ ํ ๋ฐฐ์์ ์ค์ฒ์์ ์ค๊ณ , ์ฑ์ฅ์ ํจ๊ปํ ๋ ์์ฑ๋๋ค."
๊ฐ๋ฐ์ ์ฒ์ ์์ํ๋ ์
๋ฌธ์๋ถํฐ, ์ค๋ฌด ๋ฅ๋ ฅ์ ํค์ฐ๊ณ ์ถ์ ์ทจ์
์ค๋น์, ์ง๋ก๋ฅผ ํ์ ์ค์ธ ์ฒญ์๋
๊น์ง.
์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค๋ ๋ชจ๋์ ์ถ๋ฐ์ ์ด์, ํจ๊ป ๊ฑท๋ ๋ ๋ ํ ๋๋ฐ์๊ฐ ๋๊ณ ์ ํฉ๋๋ค.
์ด์ , ํผ์ ๊ณ ๋ฏผํ์ง ๋ง์ธ์.
์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค๊ฐ ์ฌ๋ฌ๋ถ์ ์ฑ์ฅ์ ํจ๊ปํ๊ฒ ์ต๋๋ค.
Welcome to Neighborhood Coding Studio!
Neighborhood Coding Studio was founded by a team of developers who studied computer science at top North American universities such as Carnegie Mellon, the University of Washington, the University of Toronto, and the University of Waterloo, and went on to gain hands-on experience at global tech companies like Google, Microsoft, and Meta.
It all began as a study group formed by computer science students across the U.S. and Canada, created to grow together by sharing knowledge, solving problems, and learning from one another.
Though we were attending different schools in different time zones, the experience was so meaningful that it led us to one simple thought:
โWhat if we shared this way of learning with others?โ
That thought became the foundation of Neighborhood Coding Studio.
Today, we are a team of around 30 active developers and computer science students, each taking responsibility for their area of expertiseโdesigning and delivering a curriculum that spans from foundational knowledge to real-world development.
Weโre not just here to teachโweโre here to help you see through the lens of real developers and grow together.
โTo become a real developer, you must learn from real developers.โ
Our courses take you through the entire web development journeyโfrom start to finishโfocused on hands-on practice, real-world projects, and practical feedback.
We care deeply about each learnerโs growth and are committed to supporting your path every step of the way.
๐ฏ Our philosophy is simple but powerful:
"True learning comes from doing, and true growth happens together."
Whether you're just getting started, preparing for your first job, or exploring your future in tech,
Neighborhood Coding Studio is here to be your launchpadโand your trusted companion on the journey.
You donโt have to do it alone.
Let Neighborhood Coding Studio walk with you toward your future in development.
Courses
Reviews
ivoryma9ic6362
ยท
React Master Class: Part 1 - Understanding the Essence of Rendering and Design Through MissionsReact Master Class: Part 1 - Understanding the Essence of Rendering and Design Through Missionswork
ยท
"The Era of AI Clicks" Beyond the Shell, Dominating the System: Node.js Breaking Boundaries - UNIX Edition"The Era of AI Clicks" Beyond the Shell, Dominating the System: Node.js Breaking Boundaries - UNIX Editionn03372666436audi2130
ยท
Node.js and CS Part 4 in the "Age of AI Clicks" Breaking Through with Principles - The Depths of HTTP and Custom FrameworksNode.js and CS Part 4 in the "Age of AI Clicks" Breaking Through with Principles - The Depths of HTTP and Custom Frameworkscutyboy
ยท
React Master Class: Part 1 - Understanding the Essence of Rendering and Design Through MissionsReact Master Class: Part 1 - Understanding the Essence of Rendering and Design Through Missionscre09179852
ยท
"The Era of AI Clicks" Breaking Through with Principles: Node.js and CS Part 1 - V8 and Core Deconstruction"The Era of AI Clicks" Breaking Through with Principles: Node.js and CS Part 1 - V8 and Core Deconstruction
Posts
Q&A
์คํํก ์ธ์์ด ๋ค ์ฐจ์ ๋ค์ด๊ฐ์ง๋ฅผ ๋ชป ํ๋ค์...
์๋ ํ์ธ์, ํฐ๋ผ์ ๋.๋ฌธ์ํด ์ฃผ์ ๋ด์ฉ์ ํ์ธํ์ฌ ์ฆ์ ์ธ์์ ์ฆ์ํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!!https://open.kakao.com/o/gC10Fnoh
- Likes
- 0
- Comments
- 1
- Viewcount
- 40
Q&A
Context API vs Zustand ๊ทธ๋ฆฌ๊ณ Auth
์๋ ํ์ธ์ Coi ๋, ์ด๋ฒ Part 3 ๋ฏธ์ ์ ์๊ฐํ์๋ฉด์ Context API๋ถํฐ ์ ์ญ ์ํ ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ(Auth)๊ณผ ๋ผ์ฐํ ๋ณดํธ๊น์ง ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ๊ฐ์ฅ ๊น์ ๊ณณ๊น์ง ์น์ดํ๊ฒ ๊ณ ๋ฏผํ์ ํ์ ์ด ๋ฌป์ด๋๋ ์ง๋ฌธ์ ๋๋ค. ์ค๋ฌด์์ ๋๊ตฌ๋ ํ ๋ฒ์ฏค ๊ฑฐ๋ํ ๋ฒฝ์ ๋๋ผ๋ ์ฃผ์ ๋ค์ ์ด๋ ๊ฒ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ ๋ฆฌํด ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌํฉ๋๋ค. ๋จ๊ฒจ์ฃผ์ ์ง๋ฌธ๋ค์ด ์๋ก ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก, ํ๋ฆ์ ๋ฐ๋ผ ํ๋์ฉ ์์ฐ์ค๋ฝ๊ฒ ์์ธํ ์ง์ด๋ณด๊ฒ ์ต๋๋ค.๋จผ์ Context API์ Zustand์ ์ ํ ๊ธฐ์ค์ ๋ํ Coi๋์ ์ดํด๋ ์๋ฒฝํ๊ฒ ๋ง์ต๋๋ค. ์ํ์ ๋ณ๊ฒฝ ๋น๋, ๊ตฌ๋ ํ๋ ์ปดํฌ๋ํธ์ ๋ฒ์, ๋ฆฌ๋ ๋๋ง์ ์ํฅ ๋ฑ์ ์ค๋ฌด์์ ๋ ๊ธฐ์ ์ ๋๋๋ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ธฐ์ค์ ๋๋ค. ์ด๋ฅผ ํ์ค์ ํ์ฌ์ ๋น์ ํด ๋ณผ๊น์? Context API๋ ํ์ฌ ์ ์ฒด์ ์ธ๋ ค ํผ์ง๋ ์ฌ๋ด ๋ฐฉ์ก ์์คํ ๊ณผ ๊ฐ์ต๋๋ค. ๋ค๊ตญ์ด ์ค์ ์ด๋ ๋คํฌ ๋ชจ๋์ฒ๋ผ '์ค๋๋ถํฐ ์ฌ๋ด ๊ณต์ฉ์ด๋ ์์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค', ํน์ '์ ์ธต ์๋ฑํฉ๋๋ค'์ ๊ฐ์ด ๊ฐ๋ ๋ฐ์ํ์ง๋ง ๋ชจ๋๊ฐ ์์์ผ ํ๋ ์ ๋ณด์ ์์ฃผ ์ ํฉํ์ฃ . ํ์ง๋ง ๋ฐฉ์ก์ผ๋ก '๊น ๋๋ฆฌ๋, ๋ฒํผ ์์ ์ข ๋ฐ๊ฟ์ฃผ์ธ์'๋ผ๊ณ ์์๋ก ๋ ๋ ๋ค๋ฉด, ๋ชจ๋ ์ง์์ด ํ๋ ์ผ์ ๋ฉ์ถ๊ณ ๋ฐฉ์ก์ ๋ค์ด์ผ ํ๋ ๋นํจ์จ, ์ฆ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํฉ๋๋ค.๋ฐ๋ฉด Zustand๋ ํน์ ํ์๋ค๋ผ๋ฆฌ๋ง ์ํตํ๋ ์ฌ๋ด ๋ฉ์ ์ ๋จํก๋ฐฉ๊ณผ ๊ฐ์ต๋๋ค. ์ํ๊ฐ ์์๋ก ๋ณํ๋๋ผ๋ ํด๋น ์ฑํ ๋ฐฉ์ ์๋ ์ฌ๋๋ค, ์ฆ ๊ตฌ๋ ํ ์ปดํฌ๋ํธ์๊ฒ๋ง ์๋ฆผ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ผ๋ก ๋งค์ฐ ์ ๋ฆฌํฉ๋๋ค. ์ฌ๊ธฐ์ ์ค๋ฌด์ ์ธ ๊ธฐ์ค์ ํ ๊ฐ์ง ๋ ์ถ๊ฐํ์๋ฉด, '์ผ๋ฐ ์ ํธ๋ฆฌํฐ ํจ์๋ Axios ์ธํฐ์ ํฐ ๋ด๋ถ์ ๊ฐ์ React ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ ์ธ๋ถ์์๋ ํด๋น ์ํ์ ์ ๊ทผํด์ผ ํ๋๊ฐ'๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. Context API๋ ๋ฐ๋์ React ํธ๋ฆฌ ๋ด๋ถ์์๋ง ๋์ํ์ง๋ง, Zustand๋ React ๋ฐ์์๋ ์ํ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.๊ทธ๋ ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์ถ์๋ ๊ฐ์ Auth ์ํ๋ ์ด๋์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์๊น์? ๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด, ๋ก๊ทธ์ธํ ์ ์ ์ ๋ณด์ ๋ณธ์ง์ ์ธ '์ง์ค์ ์์ฒ'์ ํด๋ผ์ด์ธํธ๊ฐ ์๋๋ผ ์๋ฒ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ฒ ์ํ๋ฅผ ๋๊ธฐํํด์ฃผ๋ TanStack Query์ ์บ์๋ฅผ ๊ทธ๋๋ก ์ง์ค์ ์์ฒ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํ๋์ ์ด๊ณ ๊ถ์ฅ๋๋ ํจํด์ ๋๋ค. ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๋ค ์ด๋ฅผ Zustand๋ Context์ ๋ค์ ๋ด์๋๋ ๋ฐฉ์์ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์ค์ ๋น์ ํ์๋ฉด, ์๋ฒ๋ผ๋ ์ํ์์ ๋ด ํต์ฅ ์๊ณ ๋ฅผ ์กฐํํด ์๋๋ฐ, ๊ทธ๊ฑธ ๋ด ๊ฐ์ธ ์์ฒฉ์ธ Zustand์ ํ ๋ฒ ๋ ํ์ผ๋ก ์ ์ด๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์๊ฐ์ด ์ง๋๋ฉด ์์ฒฉ์ ๊ธฐ๋ก๊ณผ ์ค์ ์ํ ์๊ณ ๊ฐ ๋ฌ๋ผ์ง๋ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๊ธฐ ๋ง๋ จ์ ๋๋ค.๋ฌผ๋ก ์ค๋ฌด์์์ ์์ธ์ ์ธ ์ผ์ด์ค๋ ์กด์ฌํฉ๋๋ค. ๋ง์ฝ 3๋ฒ ์ง๋ฌธ์์ ์ธ๊ธํ์ โํด๋ผ์ด์ธํธ์์ JWT ๊ด๋ฆฌโ ๋ฐฉ์์ ์ฑํํ์ฌ, ๋ณด์์ Access Token์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ๋ก ํ๋ค๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ค๋ฆ ๋๋ค. ์ด๋๋ Axios ์ธํฐ์ ํฐ ๋ฑ React ์ธ๋ถ์์ ์ต์ ํ ํฐ์ ๊บผ๋ด ์ฐ๊ธฐ ์ํด Zustand๋ฅผ 'ํ ํฐ ์ ์ฅ์'๋ก ํ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ๋์ค์ ์ด๊ณ ํ๋ฅญํ ์ค๋ฌด ํจํด์ ๋๋ค. ๋ํ, NextAuth.js(Auth.js) ๊ฐ์ ๊ฒ์ฆ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ด๋ถ์ ์ผ๋ก ๋ผ๋ Context API๋ฅผ ์ฌ์ฉํด ์ ์ญ์ ์ธ์ฆ ์ํ๋ฅผ ๋ฟ๋ ค์ค๋๋ค. ์ด๋ ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐจ์์์ ์ ๊ณตํ๋ Context๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ฐ์ค๋ฌ์ด ํจํด์ด๋ ์์ฌํ์ ๋ ๋ฉ๋๋ค. ํต์ฌ์ '๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ญ ์ํ์ ์๋์ผ๋ก ์ค๋ณต ๋ณต์ฌํ๋ ๊ฒ์ ์ง์ํ์'๋ ์๋ฏธ์ ๋๋ค.์ด๋ฌํ ์์น์ React์ Next.js, ๊ทธ๋ฆฌ๊ณ JWT์ ์ธ์ ๋ฑ ํ๊ฒฝ์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ํํ๋ฅผ ๋ฌ๋ฆฌํ์ง๋ง ๋ณธ์ง์ ๊ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ JWT๋ฅผ ๊ด๋ฆฌํ๋ ์๋ฒ ์ธ์ ๊ธฐ๋ฐ์ด๋ , ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ๋ก ํธ์๋๊ฐ ๊ฐ์ง ์ ์ ์ ๋ณด๋ ์ธ์ ๋ ์๋ฒ์ ์ํ๋ฅผ ์ ๊น ๋น๋ ค์จ ์บ์๋ผ๋ ์ ์ ๋๋ค. ์ฌ์ค ์ด ๋ด์ฉ์ ํฅํ ์๋ฒ ๊ฐ๋ฐ์ ํ์๋ฉด์ Redis๋ Session ๋ฑ ๋ฐฑ์๋์ ์ธํ๋ผ๋ฅผ ๋ค๋ฃจ์๊ฒ ๋ ๋ ๋์ฑ ์ฒด๊ฐ์ด ๋์ค ํ ๋ฐ, ์ง๊ธ์ฒ๋ผ ํ๋ก ํธ์๋ ๊ด์ ์์๋ง ๋ณด๊ธฐ๋ณด๋ค๋ ์ด์ฒ๋ผ ํ๋์ ์๋น์ค๊ฐ ๊ตด๋ฌ๊ฐ๋ ํ์คํ ๊ด์ ์์ ํฐ ๊ทธ๋ฆผ์ ๋ณด๋ ๊ฒ์ด ํฅํ ๊ฐ๋ฐ์ ํด๋๊ฐ์ฌ์ ์์ด ์์ฃผ ํฐ ๋์์ด ๋์ค ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด React ํ๊ฒฝ์์ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ํ๋ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ํ ํฐ์ ์กด์ฌ์กฐ์ฐจ ์ ํ์ ์์ด ๋จ์ํ TanStack Query๋ก ์ ์ ์ ๋ณด๋ฅผ ์์ฒญํ๊ณ ๊ทธ ๊ฒฐ๊ด๊ฐ์ ๋ฏฟ๊ณ UI๋ฅผ ๊ทธ๋ฆฌ๋ฉด ๋ฉ๋๋ค. Next.js ํ๊ฒฝ์ด๋ผ๋ฉด ์ด ๊ณผ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์๋ฒ ์ปดํฌ๋ํธ์์ ๋จผ์ ์ํํ์ฌ ์บ์ฑ๋ ์ํ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ด๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ๊ฒ ๋์ฃ . ์ด๋ค ํ๊ฒฝ์ด๋ ๋ด ํด๋ผ์ด์ธํธ ์ ์ญ ์ํ ์์ฒฉ์ ์ต์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ์บ์๋ฅผ ํ์ฉํ๋ค๋ ์ ์ด ํต์ฌ์ ๋๋ค.์ด์ด์ ์ง๋ฌธํด์ฃผ์ ๋ผ์ฐํธ ๋ณดํธ์ ๊ณ์ธต ๋ถ๋ฆฌ์ ๋ํ ๊ณ ๋ฏผ๋ ์์ฃผ ์๋ฆฌํ์ญ๋๋ค. Coi๋๊ป์ ๋ง์ํ์ ๋๋ก '๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์๊ฒ UI๋ฅผ ๋ณด์ฌ์ฃผ์ง ์๋ ๊ฒ'๊ณผ, '์ค์ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ง๋ ๋ณด์'์ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ ๋ณ๊ฐ์ ๋ฌธ์ ์ ๋๋ค. ํด๋ผ์ด์ธํธ์์์ ๋ผ์ฐํธ ๋ณดํธ๋ ํ์ค์ ํด๋ฝ ์ ๊ตฌ์ ์ณ๋์ ๋ฒจ๋ฒณ ๋ฐง์ค๊ณผ ๊ฐ์ต๋๋ค. ์ ์์ ์ธ ์๋๋ค์๊ฒ '์ฌ๊ธฐ๋ VIP ์ ์ฉ์ ๋๋ค'๋ผ๊ณ ์๋ดํ์ฌ ํ๊ฑธ์์ ๋ฐฉ์งํ๋ UX์ ์ธ ์ฅ์น์ผ ๋ฟ์ ๋๋ค. ์ค์ ์ฒ ํต๊ฐ์ ๋ณด์์ ๋ฐง์ค์ ๋์ด๊ฐ์ ๋ ๋ง์ฃผ์น๋ ๋ฉ์น ํฐ ๊ฒฝํธ์, ์ฆ ์๋ฒ์ ์ธ์ฆ ๋ฐ ์ธ๊ฐ API๊ฐ ๋ด๋นํด์ผ ํฉ๋๋ค.๋ฐ๋ผ์ React SPA ํ๊ฒฝ์์๋ React Router v7์ loader ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ฒ์ ๊ฐ์ฅ ๊ถ์ฅํฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ธฐ๋ ์ ์ TanStack Query ์บ์๋ ์๋ฒ ํธ์ถ์ ํตํด ์ธ์ฆ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์ง์ ์ ์ฐจ๋จํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊น๋ํฉ๋๋ค. ๋ฐ๋ฉด Next.js ํ๊ฒฝ์ด๋ผ๋ฉด ์ด ๊ฒฝํธ์์ ํด๋ฝ ๋ฌธ ์์ด ์๋๋ผ ์์ ๋๋ค ์ด๊ท์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๋ฐ๋ก Middleware๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ ๋๋ค. ์ฌ์ฉ์๊ฐ ํ๋ผ์ด๋นํ ํ์ด์ง๋ฅผ ์์ฒญํ๋ ์๊ฐ, React ์ปดํฌ๋ํธ๊ฐ ์คํ๋๊ธฐ๋ ์ ์ Next.js ๋ฏธ๋ค์จ์ด ์ฃ์ง ๋จ์์ ์ฟ ํค๋ฅผ ๊ฒ์ฆํ๊ณ ๊ณง๋ฐ๋ก ๋ก๊ทธ์ธ ํ์ด์ง๋ก ํ๊ฒจ๋ผ ์ ์์ต๋๋ค.์ฌ๊ธฐ์ ๋ํด Next.js App Router ํ๊ฒฝ์ด๋ผ๋ฉด, TanStack Query๋ฅผ ๊ฑฐ์น ํ์๋ ์์ด Server Component ๋จ์์ ์ง์ cookies()๋ ์ธ์ ์ ์กฐํํ์ฌ ๊ณง๋ฐ๋ก redirect ์ํฌ ์๋ ์์ต๋๋ค. ์๋ฒ ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๋ ๋ ํ ๊ฒฝํธ์ ์ญํ ์ ๊ฒธํ ์ ์๋ค๋ ์ ์ด Next.js๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ ์ค ํ๋์ ๋๋ค.์ค๋ฌด์์ ์ด ๊ตฌ์กฐ๋ค์ด ์ด๋ป๊ฒ ๋ง๋ฌผ๋ ค ๋์๊ฐ๋์ง ์ค์ ์ฝ๋ ์์๋ฅผ ๋ก์ง๋ณ๋ก ์์ธํ๊ฒ ๋๋์ด์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๋จผ์ , Auth ์ํ์ ์ง์ค์ ์์ฒ์ TanStack Query๋ก ๊ด๋ฆฌํ๋ ์ปค์คํ ํ ์ ์์ฑํฉ๋๋ค.JavaScriptexport function useAuthUser() { return useQuery({ queryKey: ['authUser'], queryFn: fetchCurrentUser, staleTime: 5 * 60 * 1000, }); }์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํ ๊ณผ ์บ์๋ฅผ ๋ฐํ์ผ๋ก, React Router v7์ loader๋ฅผ ํ์ฉํ์ฌ UX ์ธก๋ฉด์ ๋ผ์ฐํธ ๋ณดํธ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ Context๋ Zustand๋ฅผ ๋ณด์ง ์๊ณ ์๋ฒ ๊ฒ์ฆ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ขฐํ๋ค๋ ๊ฒ์ ๋๋ค.JavaScript// ์ฃผ์: ์ปดํฌ๋ํธ ์ธ๋ถ์ด๋ฏ๋ก useQueryClient ํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. // App.js ๋ฑ์์ ์์ฑํ ์ ์ญ queryClient ์ธ์คํด์ค๋ฅผ ์ง์ import ํด์์ผ ํฉ๋๋ค. export async function protectedLoader() { try { const user = await queryClient.fetchQuery({ queryKey: ['authUser'], queryFn: fetchCurrentUser, }); if (!user) return redirect('/login'); return user; } catch (error) { return redirect('/login'); } } ๋ง์ง๋ง์ผ๋ก ์ปดํฌ๋ํธ ๋ด๋ถ์์๋ Zustand์ ์ต์ง๋ก ๋๊ธฐํํ ํ์ ์์ด Query๋ง ์ฌ์ฉํ์ฌ ์์ฃผ ๊น๋ํ๊ฒ ํ๋ฉด์ ๊ทธ๋ ค๋ผ ์ ์์ต๋๋ค.export function Dashboard() { const { data: user } = useAuthUser(); return ํ์ํฉ๋๋ค, {user.name}๋!; }์ด๋ฌํ ์ค๊ณ๊ฐ ์ค์ ์ค๋ฌด ์ผํ๋ชฐ ์๋น์ค์์ ์ด๋ป๊ฒ ๊ฑฐ๋ํ ํ์คํ ์ํฌํ๋ก์ฐ๋ก ๊ตด๋ฌ๊ฐ๋์ง, ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ์ํ ๊ทธ๋ฆฌ๊ณ ๋๊ธฐํ ๊ณผ์ ๊น์ง ํฌํจํ์ฌ ์์ฃผ ์์ธํ๊ฒ ํ๋์ ํฐ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์๋ ์ํ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ง์ดํ์ด์ง์ ์ง์ ํ๋ ์๊ฐ์ ์์ํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค. ๊ฐ์ฅ ๋จผ์ ์ฌ์ฉ์๊ฐ ํ์ด์ง ์ด๋ ๋ฒํผ์ ๋๋ฅด๋ฉด, ํ๋ก ํธ์๋์์๋ React Router์ loader๋ Next.js์ Middleware(๋๋ Server Component)๊ฐ ์๋ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ธ์ ์ฟ ํค๊ฐ ์กด์ฌํ๋์ง 1์ฐจ์ ์ผ๋ก ๊ผผ๊ผผํ๊ฒ ํ์ธํฉ๋๋ค. ์์ ๋ง์๋๋ฆฐ ํด๋ฝ ์ ๊ตฌ์ ๋ฒจ๋ฒณ ๋ฐง์ค ์ญํ ์ ๋๋ค. ์ฟ ํค๊ฐ ์๋ค๋ฉด ํ๋ฉด์ ๋ ๋๋ง์กฐ์ฐจ ํ์ง ์๊ณ ์ฆ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋๋ ค๋ณด๋ ๋๋ค.๋ง์ฝ ์ฟ ํค๊ฐ ์กด์ฌํด์ ๋ฌด์ฌํ ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๋ฉด, ์ด๋ TanStack Query๊ฐ ์๋ํ์ฌ ๋ฐฑ์๋ ์๋ฒ๋ก ๋ด ์ ์ ์ ๋ณด์ ์ฅ๋ฐ๊ตฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌ๋ผ๋ API ์์ฒญ์ ๋ณด๋ ๋๋ค. ์, ์ด์ ์ด ์์ฒญ์ด ๋คํธ์ํฌ๋ฅผ ํ๊ณ ๋ฐฑ์๋ ์๋ฒ์ ๋์ฐฉํ๋ ์๊ฐ๋ถํฐ ์ง์ง ํ์คํ์ ํ๋ฆ์ด ์์๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ HTTP ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ์น ์๋ฒ๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ฑฐ์ณ ๋ฐฑ์๋ API ์๋ฒ์ ๋๋ฌํ๊ฒ ๋ฉ๋๋ค. ๋ฐฑ์๋ ์๋ฒ๋ ์์ฒญ ํค๋์ ๋ด๊ธด HttpOnly ์ธ์ ์ฟ ํค๋ฅผ ์ถ์ถํด๋ ๋๋ค. ์ด ์ฟ ํค ์์๋ ์ฌ์ฉ์์ ์ค์ ๊ฐ์ธ์ ๋ณด๊ฐ ์๋๋ผ ๊ทธ์ ์๋ฏธ ์๋ ๊ธธ๊ณ ๋ณต์กํ ๋ฌธ์์ด์ธ ์ธ์ ID๋ง์ด ๋ค์ด์์ต๋๋ค. ์๋ฒ๋ ์ด ์ธ์ ID๋ฅผ ๋ค๊ณ ๊ฐ์ฅ ๋จผ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์์ธ Redis๋ก ๋ฌ๋ ค๊ฐ๋๋ค. Redis๋ ํ๋ ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์์ฒญ๋๊ฒ ๋น ๋ฅธ ์๋๋ก ์ด ์ธ์ ID๊ฐ ์ ํจํ์ง, ๋ง๋ฃ๋์ง๋ ์์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด ์ธ์ ์ ์ฃผ์ธ์ด ์ด๋ค ์ ์ ID๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์ฐพ์๋ ๋๋ค. ๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์ ๋ฒํผ์ ๋๋ ๊ฑฐ๋ ์ธ์ ๋ง๋ฃ ์๊ฐ์ด ์ง๋ฌ๋ค๋ฉด Redis์๋ ์ด ํค๊ฐ ์์ ๊ฒ์ด๊ณ , ์๋ฒ๋ ์ฆ์ 401 ๊ถํ ์์ ์๋ฌ๋ฅผ ํ๋ก ํธ์๋๋ก ๋์ ธ ์ง์ง ์ฒ ํต๊ฐ์ ๋ณด์ ๊ฒฝํธ์ ์ญํ ์ ์ํํ๊ฒ ๋ฉ๋๋ค.Redis์์ ๋ฌด์ฌํ ์ ์ ID๋ฅผ ํ๋ณดํ๋ค๋ฉด, ์๋ฒ๋ ์ด์ ์ด ์ ์ ์ ์ค์ ์ฅ๋ฐ๊ตฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด MySQL์ด๋ PostgreSQL ๊ฐ์ ๋ฉ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํฉ๋๋ค. ์ ์ ํ ์ด๋ธ์ ์กฐํํ์ฌ ์ต์ ์ ์ ํ๋กํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ฅ๋ฐ๊ตฌ๋ ํ ์ด๋ธ๊ณผ ์ํ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ ํ์ฌ ๋ด๊ฒจ ์๋ ์ํ์ ์ด๋ฆ, ๊ฐ๊ฒฉ, ์ฌ๊ณ ์ํ ๋ฑ์ ํ๋์ ๊น๋ํ JSON ๋ฐ์ดํฐ๋ก ๋ฌถ์ด๋ ๋๋ค. ์ด๋ ๊ฒ ์๋ฒฝํ๊ฒ ๊ฒ์ฆ๋๊ณ ๊ฐ๊ณต๋ '์ง์ค์ ์์ฒ' ๋ฐ์ดํฐ๊ฐ ๋ค์ ๋คํธ์ํฌ๋ฅผ ํ๊ณ ํ๋ก ํธ์๋๋ก ์๋ต๋ฉ๋๋ค.ํ๋ก ํธ์๋์ TanStack Query๋ ์ด JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์์ ์ ์บ์ ์ ์ฅ์์ ์์๊ฒ ์ ์ฅํ๊ณ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๋ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ Zustand๋ Context API์ ๋ ๋ฒ ๋ณต์ฌํ์ง ์์ต๋๋ค. ์๋ฒ์ ์ํ๋ฅผ ๊ทธ๋๋ก ๊ฑฐ์ธ์ฒ๋ผ ๋น์ถฐ์ ๋ณด์ฌ์ค ๋ฟ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด Zustand๋ ์ธ์ ์ฐ์ผ๊น์? ์ฌ์ฉ์๊ฐ ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก์ ๋ณด๋ค๊ฐ ๋คํฌ ๋ชจ๋ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋, ๋ชจ๋ฐ์ผ ํ๋ฉด์์ ์ฌ์ด๋๋ฐ ๋ฉ๋ด๋ฅผ ์ด ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฐ UI ์ํ๋ ์๋ฒ์ ์ ํ ์๊ด์ด ์๊ณ ์ค์ง ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์์์๋ง ์ ํจํ๊ธฐ ๋๋ฌธ์ Zustand์ ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ํน์ ์ปดํฌ๋ํธ๋ค๋ง ๋ฆฌ๋ ๋๋ง ์ํค๋ ๊ฒ์ ๋๋ค.๋ง์ฝ ์ฌ์ฉ์๊ฐ ์ํ์ ์๋์ ํ๋ฌ์ค ๋ฒํผ์ ๋๋ฌ ์ถ๊ฐํ๋ค๋ฉด ์ด๋จ๊น์? ํ๋ก ํธ์๋๋ ์ฆ์ ๋ฐฑ์๋๋ก ์๋ ๋ณ๊ฒฝ POST ์์ฒญ์ ๋ณด๋ด๊ณ , ๋ฐฑ์๋๋ ๋ค์ Redis์์ ์ธ์ ๊ถํ์ ํ์ธํ ๋ค ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ๋ฐ๊ตฌ๋ ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ์๋ฒ๊ฐ ์ฑ๊ณต ์๋ต์ ์ฃผ๋ฉด, ํ๋ก ํธ์๋๋ TanStack Query์ invalidateQueries๋ฅผ ํธ์ถํ์ฌ ๊ธฐ์กด ์บ์๋ฅผ ํ๊ธฐํ๊ณ , ์์ ๋ง์๋๋ฆฐ ์๋ฒ๋ก๋ถํฐ ์ฅ๋ฐ๊ตฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ทธ ์ ๊ตํ ๊ณผ์ ์ ์๋กญ๊ฒ ๋๊ธฐํํด์ต๋๋ค. ์ด์ฒ๋ผ ํ๋ก ํธ์๋์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ๋จ์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋๋ฅผ ๊ณ ๋ฅด๋ ๊ฒ์ด ์๋๋ผ, ๊ฑฐ๋ํ ์๋น์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์ ๋ฉ์ธ DB์์ ์ถ๋ฐํด ๋น ๋ฅธ Redis๋ฅผ ๊ฑฐ์ณ, API๋ฅผ ํ๊ณ ํด๋ผ์ด์ธํธ์ TanStack Query ์บ์์ ๋จธ๋ฌผ๋ ๋ค๊ฐ, ์ต์ข ์ ์ผ๋ก React ์ปดํฌ๋ํธ์ ๋ฟ๋ ค์ง๋ ์ด ๊ฑฐ๋ํ ๋ฌผ์ค๊ธฐ์ ํ๋ฆ์ ์ ์ดํ๋ ์์ฃผ ๋ฉ์ง ์ผ์ ๋๋ค. ํ์คํ ๊ด์ ์์ ์ด ํฐ ๊ทธ๋ฆผ์ ๋จธ๋ฆฟ์์ ๋ด์๋์ ๋ค๋ฉด, ์์ผ๋ก ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ก ์ ํํ๋๋ผ๋ ํ๋ค๋ฆฌ์ง ์๋ ํผํผํ ์ํคํ ์ฒ ๊ธฐ์ค์ ๊ฐ์ถ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ํนํ AI ์ฝ๋ฉ ์ด์์คํดํธ๊ฐ ์ ๊ทน์ ์ผ๋ก ๋์ ๋๋ฉฐ ๊ฐ๋ฐ์ ๊ฒฝ๊ณ๊ฐ ๋น ๋ฅด๊ฒ ํ๋ฌผ์ด์ง๋ ์ง๊ธ ๊ฐ์ ์์ ์๋, ํ๋ก ํธ์๋๋ผ๋ ์์ญ์๋ง ๊ตญํ๋์ง ์๊ณ ํ์คํ ๊ด์ ์์ ์๋น์ค ์ํคํ ์ฒ ์ ์ฒด์ ํฐ ๊ทธ๋ฆผ์ ์ค๊ณํ๋ ๋ฅ๋ ฅ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํด์ก์ต๋๋ค. ์ด๋ฒ ๊ณ ๋ฏผ์ ๋ฐํ ์ผ์ ์ฒ ์ ์ฒด๋ฅผ ์กฐ๋งํ ์ ์๋ ํ๋ฅญํ ์์ง๋์ด๋ก ์ฑ์ฅํ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ์์ํฉ๋๋ค.์ฌ์ค ์ด ์ํคํ ์ฒ ์ค๊ณ๋ผ๋ ๊ฒ์ด ๋จ์ํ ํด๋ ๊ตฌ์กฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋๋ง์ ๋ฌธ์ ๋ ์๋๋๋ค. ์ด ๊ตฌ์กฐ ์์๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊ฒ์ธ์ง, props๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ด๋ ค์ค ๊ฒ์ธ์ง, ํจ์์ ํ ์ ์ฌ์ฌ์ฉ์ฑ์ ์ด๋ป๊ฒ ์ฑ๊ธธ ๊ฒ์ธ์ง ๋ฑ ์ฌ๋ฌ ๋ณตํฉ์ ์ธ ๋ฌธ์ ๋ค์ด ์์ฃผ ์ด์ดํ๊ฒ ์ฝํ ์๊ธฐ ๋๋ฌธ์ ๋จํธ์ ์ผ๋ก ๋ฌด์กฐ๊ฑด ์ด ๋ฐฉ์์ด ์ ๋ต์ด๋ผ๊ณ ๋งํ๊ธฐ ์ฐธ ํ๋ ๋ถ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค.๊ทธ๋์ ๊ถ์ฅํด ๋๋ฆฌ๊ณ ์ถ์ ๋ฐฉ๋ฒ์, ์ ๊ฐ ์กฐ๊ธ ๋ ์ง์ ์ ์ด๊ณ ์ค๋ฌด์ ์ธ ๋์์ด ๋ ์ ์๋๋ก ํ์ฌ ์ฝ๋ฉํ๊ณ ๊ณ์ ํ๋ก์ ํธ๋ ๊ณ ๋ฏผ ์ค์ธ ์ํคํ ์ฒ์ ํํ๋ฅผ ๋๋ต์ ์ผ๋ก๋๋ง ๋ง์ํด ์ฃผ์๋ ๊ฒ์ ๋๋ค. ํ์ฌ ํ์ ์ํฉ์ด๋ ์ฌ์ฉ ์ค์ธ ๊ธฐ์ ์คํ, ๊ณ ๋ฏผ๋๋ ๋ณ๋ชฉ ์ง์ ๋ฑ์ ๊ณต์ ํด ์ฃผ์๋ฉด, ์ ๊ฐ ๊ทธ ๋งฅ๋ฝ์ ๋ง์ถฐ์ ์ด๋ฐ ๋ฐฉ์์ ์ค๊ณ๊ฐ ์กฐ๊ธ ๋ ์ข์ง ์์๊น ํ๊ณ ์๋์ด ๊ด์ ์์ ๋ง์ถคํ ๊ถ์ฅ์ ๋๋ฆด ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.๋ง์ง๋ง์ผ๋ก, ํ์ฌ ์ ํฌ ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ๋ด๋ถ์ ์ผ๋ก ์์ ์ด๋ฒคํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. ๊น์ด ์๋ ๊ณ ๋ฏผ์ผ๋ก ํ์ต์ ์ํ์๋ Coi ๋๊ป ์์์ ์๋ฏธ๋ฅผ ๋ด์ ์์ ์ ๋ฌผ์ ๋๋ฆฌ๊ณ ์ ํ๋, jeony0535@naver.com ์ผ๋ก ์ฐ๋ฝ ํ ํต ์ฃผ์๋ฉด ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ์ ๊ฐ์ ์ฟ ํฐ์ ์ ๋ฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์ผ๋ก๋ ํ์ตํ์๋ฉด์ ๊ตฌ์กฐ๋ ์ค๊ณ์ ๋ํ ์ค๋ฌด์ ์ธ ๊ณ ๋ฏผ์ด ์๊ธฐ์๋ฉด ์ธ์ ๋ ์ง ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์.
- Likes
- 1
- Comments
- 2
- Viewcount
- 69
Q&A
[reducer] ๊ธฐ๋ฅ๋ณ ํด๋ ๊ตฌ์กฐ ์ค๊ณ/ ํ์ผ ๋ถ๋ฆฌ๋ก ์ ์ง ๋ณด์ ๊ฐ๋ฅํ ์ํคํ ์ฒ ๊ตฌ์ถ
์๋ ํ์ธ์ Coi ๋, ์ด๋ฒ ๋ฏธ์ ์ ์งํํ์๋ฉด์ ํด๋ ๊ตฌ์กฐ์ ์ค๊ณ์ ๋ํด ์น์ดํ๊ฒ ๊ณ ๋ฏผํ์๊ณ ์ค๋ฌด์ ์ธ ๊ด์ ์ด ๋ด๊ธด ์ฐธ ์ข์ ์ง๋ฌธ์ ๋จ๊ฒจ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌํฉ๋๋ค.๋ง์ํด์ฃผ์ reducers/cafeteria/rice์ฒ๋ผ ๊ธฐ๋ฅ์ด ์ปค์ง๋ค๊ณ ํด์ ๋ฌด์์ ๋์ค๋ฅผ ํ๊ณ ๋๋ ๊ฒ์ ๋ํ ๋ต๋ณ์ ๋จผ์ ๋๋ฆฌ์๋ฉด, ๋จ์ํ ๊ธฐ๋ฅ์ ํฌ๊ธฐ๋ ํ์ผ ๊ฐ์๋ง์ ๊ธฐ์ค์ผ๋ก ๊ธฐ๊ณ์ ์ธ ๋์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ง์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Coi๋๊ป์ ์ง์ด์ฃผ์ ๋๋ก ์ญํ ๊ณผ ์ฑ ์, ํจ๊ป ๋ณ๊ฒฝ๋๋ ์ด์ , ๊ธฐ๋ฅ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ๋ณด์ ์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฅ(rice)์ ๋ฐฐ์ ๋ก์ง์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ฐฌ(side)์ ๋ก์ง๋ ํญ์ ๊ฐ์ด ํ์ธํ๊ณ ์์ ํด์ผ ํ ๋งํผ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค๋ฉด, ๊ตณ์ด ๋์ค๋ฅผ ๊น๊ฒ ํ๊ธฐ๋ณด๋ค๋ ๊ฐ์ ์ ์์ ๋ฌถ์ด๋๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋ฐ๋๋ก ๋ฐ์ฐฌ ๊ธฐ๋ฅ์๋ง ํนํ๋ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด ์๊ฒจ๋๊ณ ๋ฐฅ ๋ฉ๋ด์๋ ์ ํ ๋ค๋ฅธ ์ด์ ์ ์ฃผ๊ธฐ๋ก ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ์์ํ๋ค๋ฉด, ๊ทธ๋ ๋น๋ก์ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ด๋๋ฆฌ๋ก ์ธ๋ถํํ์ฌ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.์ค๋ฌด์์ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ก์ ๋ ๊ฐ์ฅ ๊ฒฝ๊ณํด์ผ ํ ์ ์ข์ ์์๋ ๊ธฐ์ ์ ์ธ ์ญํ ๋ก๋ง ํด๋๋ฅผ ๋๋๋ ๊ฒ์ ๋๋ค. ์ปดํฌ๋ํธ๋ components ํด๋์, ํ ์ hooks ํด๋์, ์ํ ๊ด๋ฆฌ๋ reducers ํด๋์ ์ ๋ถ ๋ชฐ์๋ฃ๊ฒ ๋๋ฉด, ๊ธ์ ๋ฉ๋ด์ ๊ด๋ จ๋ ๊ธฐ๋ฅ ํ๋๋ฅผ ์์ ํ๊ธฐ ์ํด ํ๋ก์ ํธ ์ ์ญ์ ๋์๋ค๋ ์ผ ํฉ๋๋ค. ๊ทธ๋์ ์ต๊ทผ ์ค๋ฌด์์๋ ์ฐ๊ด๋ ๊ฒ๋ค๋ผ๋ฆฌ ๋ฌถ์ด๋๋ ๊ธฐ๋ฅ(๋๋ฉ์ธ) ๊ธฐ๋ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ง์ด ์งํฅํฉ๋๋ค. ์ค์ ์ค๋ฌด์์ ์์ฃผ ๊ตฌ์ฑํ๋ ํํ๋ฅผ ์์๋ก ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.src/ โโโ assets/ โโโ constants/ โโโ types/ โโโ utils/ โโโ hooks/ โโโ components/ โโโ layouts/ โโโ pages/ โโโ features/ โโโ cafeteria/ โ โโโ components/ โ โ โโโ CafeteriaMenu.js โ โ โโโ MenuCard.js โ โโโ hooks/ โ โ โโโ useMenuFilter.js โ โโโ store/ โ โ โโโ riceReducer.js โ โ โโโ sideReducer.js โ โโโ api/ โ โโโ fetchWeeklyMenu.js โโโ payment/ โโโ components/ โโโ api/ ์ ๊ตฌ์กฐ์ ๋ชฉ์ ์ ์์ฐ์ค๋ฝ๊ฒ ํ์ด๋ณด์๋ฉด, ๋จผ์ ์ฝ๋ ์ธ์ ์ธ ์ด๋ฏธ์ง๋ ์์ด์ฝ์ assets์ ๋๊ณ , ์๋ฌ ๋ฉ์์ง๋ ์๋ฒ URL ๊ฐ์ด ๋ณํ์ง ์๋ ์ ์ญ ๊ฐ๋ค์ constants์ ๋ชจ์๋ก๋๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ ์ญ ํ์ ๊ฐ์ฒด๋ types์ ์ ์ํ๊ณ , ๋ ์ง ๋ณํ ํจ์์ฒ๋ผ React์ ๋ฌด๊ดํ๊ฒ ์ธ์ ๋ ์ฌ์ฌ์ฉํ ์ ์๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ค์ utils์ ๋ก๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน์ ๋น์ฆ๋์ค์ ์ข ์๋์ง ์์ ๋ฒ์ฉ์ ์ธ ์ปค์คํ ํ ์ด๋ ์ด๋์๋ ์ธ ์ ์๋ ๊ณตํต UI ๋ฒํผ, ๋ชจ๋ฌ ๊ฐ์ ์์๋ค์ ๊ฐ๊ฐ ์ต์๋จ์ hooks์ components์ ๋ฐฐ์นํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ํ๋ฉด์ ๋ผ๋๋ layouts์, ๋ผ์ฐํ ์ ๊ธฐ์ค์ด ๋๋ ์ต์์ ๋ทฐ๋ pages์ ๋ก๋๋ค.๊ฐ์ฅ ํต์ฌ์ด ๋๋ ๊ณณ์ features ํด๋์ ๋๋ค. ์ด๊ณณ์๋ cafeteria๋ payment์ฒ๋ผ ํน์ ๋๋ฉ์ธ๋ณ๋ก ๊ด๋ จ๋ ์ํ ๊ด๋ฆฌ ๋ก์ง, UI, API ํธ์ถ์ ๋ชจ๋ ๋ชจ์๋ก๋๋ค. ์ด๋ ๊ฒ ๋๋ฉ์ธ๋ณ๋ก ์ฝ๋๋ฅผ ๋ชจ์๋์์ ๋ ์ค๋ฌด์์ ์ด๋ป๊ฒ ์ ์ง๋ณด์์ฑ์ด ๊ทน๋ํ๋๋์ง ์ค์ ํ์ผ ๋ด๋ถ์ ์ฝ๋๋ฅผ ์์๋ก ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.// src/features/cafeteria/components/CafeteriaMenu.js // 1. ์ ์ญ์์ ๊ณตํต์ผ๋ก ์ฐ์ด๋ ์์๋ ์ธ๋ถ(์ ๋๊ฒฝ๋ก ๋ฑ)์์ ๊ฐ์ ธ์ต๋๋ค. import { Button } from '@/components/Button/Button'; import { formatDate } from '@/utils/formatDate'; // 2. ๊ธ์ ๋๋ฉ์ธ์ ๊ด๋ จ๋ ํต์ฌ ํ์ผ๋ค์ ๋ฐ๋ก ์(์๋ ๊ฒฝ๋ก)์์ ๊ฐ์ ธ์ต๋๋ค. import { MenuCard } from './MenuCard'; import { useMenuFilter } from '../hooks/useMenuFilter'; import { fetchWeeklyMenu } from '../api/fetchWeeklyMenu'; import { calculateCalories } from '../utils/calculateCalories'; export function CafeteriaMenu() { const { filteredMenu } = useMenuFilter(); return ( {/* ํ๋ฉด ๋ ๋๋ง ๋ก์ง */} ); }์ ์ฝ๋๋ฅผ ๋ณด์๋ฉด CafeteriaMenu๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฐํ ๋, ์ ์ญ์ ์ผ๋ก ์ฐ์ด๋ ๊ณตํต ๋ฒํผ์ด๋ ์ ํธ ํจ์๋ง ์ธ๋ถ์์ ๊ฐ์ ธ์ค๊ณ , ๊ธ์๊ณผ ๊ด๋ จ๋ ๋น์ฆ๋์ค ๋ก์ง(ํ , API, ํ์ UI)์ ์ ๋ถ ์์ ์ ํด๋ ๋ด๋ถ์์ ๊ฐ์ ธ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด cafeteria ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ฒผ์ ๋ ์ค์ง ํด๋น ํด๋ ์์์๋ง ์์ ์ ๋๋ผ ์ ์์ต๋๋ค. ์ด ์ํ์์ ํ์ผ์ด ๋ง์์ง๋ค๋ฉด ํด๋ ๋์ค๋ฅผ ๋ ํ๊ณ ๋ด๋ ค๊ฐ๊ธฐ๋ณด๋ค๋, ์ ์์์ store ํด๋ ์์ ํ์ผ๋ค์ฒ๋ผ ์ฐ๊ด๋ ๋ก์ง๋ค์ ํ ํด๋ ์์์ ํ๋ฉด์ ์ผ๋ก ๋๋์ด ๋ฐฐ์นํ๋ ๊ฒ์ด ์ฝ๋๋ฅผ ํ์ ํ๋ ๋ฐ ํจ์ฌ ์ ๋ฆฌํฉ๋๋ค.์ฌ๊ธฐ์ ์ค๋ฌด ํด๋ ๊ตฌ์กฐ๋ฅผ ๋๋ ๋ ์ ๊ฐ ์ค์ค๋ก์๊ฒ ์์ฃผ ๋์ง๋ ์ง๋ฌธ์ด์, ๊ผญ ๋๋ฆฌ๊ณ ์ถ์ ๊ฒฝํ์ ์ธ ํ ์ค ํ๋๋ ๋ฐ๋ก '์ญ์ ํ ์คํธ'์ ๋๋ค. ๋ง์ฝ ๋ด์ผ ๋น์ฅ ๊ธฐํ์ด ๋ณ๊ฒฝ๋์ด '๊ธ์(cafeteria)' ๊ธฐ๋ฅ์ ํต์งธ๋ก ๋ค์ด๋ด์ผ ํ๋ค๋ฉด ์ด๋จ๊น์? ๊ธฐ๋ฅ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ญ์ณ์ง ๊ตฌ์กฐ๋ผ๋ฉด features/cafeteria ํด๋ ํ๋๋ง ๊น๋ํ๊ฒ ์ญ์ ํ๋ฉด ๋๋ฉ๋๋ค. ํ์ง๋ง ๊ธฐ์ ๊ธฐ์ค์ผ๋ก ํํธํ๋์ด ์๋ค๋ฉด ํด๋๋ง๋ค ๋์๋ค๋๋ฉฐ ๊ด๋ จ ์ฝ๋๋ฅผ ์ฐพ์ ์ง์์ผ ํ๊ณ , ๊ทธ ๊ณผ์ ์์ ์ค์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ๊น์ง ๋ง๊ฐ๋จ๋ฆด ์ํ์ด ํฝ๋๋ค. ์ฆ, ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ฟ๋ง ์๋๋ผ '์ญ์ ํ๊ฑฐ๋ ์์ ํ ๋ ์ผ๋ง๋ ์์ ํ๊ณ ๋น ๋ฅธ๊ฐ'๋ฅผ ์์ํด ๋ณด๋ ๊ฒ์ด ํด๋ ๊ตฌ์กฐ์ ๊ฑด๊ฐ ์ํ๋ฅผ ์ฒดํฌํ๋ ์์ฃผ ํ๋ฅญํ ๊ธฐ์ค์ด ๋ฉ๋๋ค.๋ ๋ค๋ฅธ ์ค๋ฌด์ ์ธ ํ์ ๋๋ฉ์ธ ๊ฐ์ '๊ฒฝ๊ณ์ '์ ์งํค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด payment ๊ฒฐ์ ๋๋ฉ์ธ์์ cafeteria ๊ธ์ ๋ฐ์ดํฐ๊ฐ ํ์ํด์ง ๋, ๋ฌด์์ features/cafeteria/store/riceReducer.js ๊ฐ์ ๊น์ ๋ด๋ถ ํ์ผ๋ก ์ง์ ๊ฒฝ๋ก๋ฅผ ๋ซ๊ณ ๋ค์ด๊ฐ ์ฐธ์กฐ(import)ํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ๋์ ๊ฐ ๊ธฐ๋ฅ ํด๋์ ์ต์๋จ์ index.js๋ฅผ ๋๊ณ ์ธ๋ถ์์ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ ์ํ๋ง ๋ช ์์ ์ผ๋ก ๋ด๋ณด๋ด๋ ์ด๋ฅธ๋ฐ Public API ๋ฐฉ์์ ์ฌ์ฉํ๊ฑฐ๋, ๋ ๋๋ฉ์ธ์ด ๊ฐํ๊ฒ ์์กดํ๋ ๊ณตํต ์ํ๋ผ๋ฉด ์ฐจ๋ผ๋ฆฌ ๋ ์์์ ์ ์ญ ๊ณต๊ฐ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋(Lifting State Up) ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํด๋ ๊ฐ์ ์ฐธ์กฐ ๊ท์น๋ง ์ ์ธ์๋์ด๋ ๊ธฐ๋ฅ์ด ์ปค์ง ๋ ๊ตฌ์กฐ๊ฐ ์คํ๊ฒํฐ์ฒ๋ผ ๊ผฌ์ด๋ ํ์์ ํฌ๊ฒ ๋ฐฉ์งํ ์ ์์ต๋๋ค.์ ๊ฐ ์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ตฌ์กฐ๋ฅผ ์ก์๋๊ฐ๋ ๋ฐฉ์์ ๋ํด์๋ ๋ง์๋๋ฆฌ์๋ฉด, ์ฒ์๋ถํฐ ์๋ฒฝํ๊ณ ์ผ์ ํ ๊ตฌ์กฐ๋ ์๊ฒฉํ ๊ท์น์ ์ ํด๋๊ณ ์์ํ์ง๋ ์์ต๋๋ค. ์ฒ์์๋ ํด๋ ๊ตฌ์กฐ๋ฅผ ์ต๋ํ ์๊ณ ๋จ์ํ๊ฒ ๊ฐ์ ธ๊ฐ๋ฉฐ ๊ด๋ จ๋ ์ฝ๋๋ค์ ํ๊ณณ์ ๋ญ์ณ๋ก๋๋ค. ๊ทธ๋ฌ๋ค ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ํ๋์ ํ์ผ ์์์ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ํด ์คํฌ๋กค์ ํ์ฐธ ๋ด๋ ค์ผ ํ๊ฑฐ๋, ์ ํ ์๊ด์์ด ๋ณด์ด๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ๋ ๋ฑ ๊ธฐ์กด ๊ตฌ์กฐ๊ฐ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ธฐ ์์ํ๋ ์์ ์ด ์ค๋ฉด ๊ทธ๋ ํ์์ ๋ง๊ฒ ํด๋๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋ฆฌํฉํ ๋งํฉ๋๋ค. ์ฒ์ ์ ํ ๋ค์ด๋ฐ์ด๋ ๊ธฐ์ค์ ์ต์ง๋ก ๋ง์ถ๋ ค๋ค ๋์ค๋ง ๊น์ด์ก๋ค๋ Coi๋์ ๊ฒฝํ์ฒ๋ผ, ๋ฐ์ํ์ง ์์ ๋ฏธ๋์ ๋ณต์ก๋๋ฅผ ๋๋นํด ๋ฏธ๋ฆฌ ๊ฑฐ์ฐฝํ ๊ตฌ์กฐ๋ฅผ ์ง๋๋ฉด ์คํ๋ ค ๊ณผ๋ํ ์ถ์ํ์ ๋ช์ ๋น ์ง๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๋๋ค.์ฌ์ค ์ค๋ฌด์์๋ ๋ชจ๋ ํ๋ก์ ํธ์ ํต์ฉ๋๋ ์๋ฒฝํ ํด๋ ๊ตฌ์กฐ๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์๋น์ค์ ๊ท๋ชจ์ ํ์ ์ํฉ์ ๋ง๋ ์ต์ ์ ํํ๋ฅผ ํ๋์ฉ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ ๊ฐ๊น์ต๋๋ค. ์์ผ๋ก React๋ฅผ ๋์ด Next.js, Monorepo ๋ฑ ๋ค์ํ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ผ๋ก ํ์ต์ ํ์ฅํ์๋ค ๋ณด๋ฉด, Create React App ๊ฐ์ด ํ๋ ์์ํฌ๋ ๋๊ตฌ๋ค์ด ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ ๊ถ์ฅ ํด๋ ๊ตฌ์กฐ๋ค์ ์ ํ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ฒ์๋ถํฐ ์๋ฒฝํ ์ ๋ต์ ์ฐพ๊ธฐ๋ณด๋ค๋, ์ด๋ฌํ ์ํ๊ณ์ ํ์คํ๋ ๊ตฌ์กฐ๋ค์ ํ๋์ฉ ์ง์ ์ฌ์ฉํด ๋ณด๊ณ ์ ํ์ผ๋ค์ ์ด๋ ๊ฒ ๋ฐฐ์นํ๋์ง ๋ถ์ํด ๋ณด์๋ฉด์ ์ ์ฒด์ ์ธ ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ฐ์ต์ ํ์๋ ๊ฒ์ด ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์ค ๋ ์ฐธ๊ณ ํ ๋งํ ๊ฐ๋ ์ผ๋ก๋, ์ฝ๋๋ฅผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ ๋๋๋ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD), ํจ๊ป ๋ณ๊ฒฝ๋๋ ์ฝ๋๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ์ ๋ฐฐ์นํ๋ ์ฝ๋ก์ผ์ด์ (Co-location), ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ก ์์ฃผ ๋ ผ์๋๋ ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ(FSD) ๋ฑ์ ๊ฐ๋ณ๊ฒ ์ดํด๋ณด์๋ ๊ฒ์ ์ถ์ฒํด ๋๋ฆฝ๋๋ค. ์ด ๊ฐ๋ ๋ค์ ๋์ค๋ฅผ ๋ช ๋จ๊ณ๋ก ํ ์ง ์ ํด์ฃผ๋ ๊ณต์์ด ์๋๋ผ, ์ด๋ค ์ฝ๋๋ฅผ ๋ฌถ๊ณ ์ด๋ค ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ง ์ค์ค๋ก ํ๋จํ ์ ์๋ ํผํผํ ๊ธฐ์ค์ ์ด ๋์ด์ค ๊ฒ์ ๋๋ค.์ด๋ฌํ ๊ตฌ์กฐ ์ค๊ณ ๊ฐ๊ฐ์ ๊ฐ์ธ์ ์ผ๋ก ํ์คํ๊ฒ ์ฐ์ตํด ๋ณด์ค ์ ์๋ ํ๋ ํ๋ ๋ง๋ถ์ด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ '๊ณผ๊ฑฐ์ ๋ด ์ฝ๋ ๋ฆฌํฉํ ๋งํ๊ธฐ'์ ๋๋ค. ์์ ์ ๊ธฐ์ ๊ธฐ์ค์ผ๋ก(components, hooks, reducers ๋ฑ) ์๊ฒ ์ชผ๊ฐ๋์๋ ์์ ํ ์ด ํ๋ก์ ํธ๋ ๊ณผ์ ์ฝ๋๋ฅผ ํ๋ ๊บผ๋ด์, ์ค๋ ๋ง์๋๋ฆฐ ๊ธฐ๋ฅ(features) ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ์ง์ ์ฎ๊ฒจ ๋ด์๋ณด๋ ๊ฒ์ ๋๋ค. ํฉ์ด์ ธ ์๋ ํน์ ๊ธฐ๋ฅ์ UI์ ์ํ, ํ ๋ค์ ํ๋์ ๋๋ฉ์ธ ํด๋๋ก ๋ฌถ์ด๋ณด๊ณ , ์์ ๋ง์๋๋ฆฐ 'ํด๋น ํด๋ ํต์งธ๋ก ์ญ์ ํด ๋ณด๊ธฐ' ํ ์คํธ๋ฅผ ์ง์ ์๋ฎฌ๋ ์ด์ ํด ๋ณด์ธ์. ๋ฐฑ์ง์ํ์์ ์๋ฒฝํ ๊ตฌ์กฐ๋ฅผ ์ง๋ ค๊ณ ๋๋๋๋ ๊ฒ๋ณด๋ค, ์ด๋ฏธ ๋์ํ๋ ์ฝ๋๋ฅผ ๋๋ฉ์ธ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐฐ์นํ๋ฉฐ ๋ฐ์ํ๋ ์๋ฌ๋ค์ ํ๋์ฉ ์ฐ๊ฒฐํด ๋๊ฐ๋ ๊ณผ์ ์์ ์ํคํ ์ฒ๋ฅผ ๋ณด๋ ์๋ชฉ์ด ๋น์ฝ์ ์ผ๋ก ์ฑ์ฅํ์ค ๊ฒ์ ๋๋ค.์ถ๊ฐ์ ์ผ๋ก ํ ๊ฐ์ง ๋ ๋ง๋ถ์ด์๋ฉด, ์ฌ์ค ์ด ์ค๊ณ๋ผ๋ ๊ฒ์ด ๋จ์ํ ํด๋ ๊ตฌ์กฐ ํ๋๋ง์ ๋ฌธ์ ๋ ์๋๋๋ค. ์ปดํฌ๋ํธ์ ์ํ(state)๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊ฒ์ธ์ง, props๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ด๋ ค์ค ๊ฒ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ํจ์๋ค์ ์ฌ์ฌ์ฉ์ฑ์ ์ด๋ป๊ฒ ์ฑ๊ธธ ๊ฒ์ธ์ง ๋ฑ ์ฌ๋ฌ ๋ณตํฉ์ ์ธ ๋ฌธ์ ๋ค์ด ์ฝํ ์๊ธฐ ๋๋ฌธ์ ๋จํธ์ ์ผ๋ก "๋ฑ ์ด๋ ๋ค"๋ผ๊ณ ์ ๋ต์ ๋ง์๋๋ฆฌ๊ธฐ ์ฐธ ํ๋ ๋ถ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋์ ๊ถ์ฅํด ๋๋ฆฌ๊ณ ์ถ์ ๋ฐฉ๋ฒ์, ์ ๊ฐ ์กฐ๊ธ ๋ ์ง์ ์ ์ธ ๋์์ด ๋ ์ ์๋๋ก ํ์ฌ ์งํํ๊ณ ๊ณ์ ํ๋ก์ ํธ๋ ๊ณ ๋ฏผ ์ค์ธ ์ฝ๋์ ํํ๋ฅผ ํ ๋ฒ ๋ง์ํด ์ฃผ์๋ ๊ฒ์ ๋๋ค. ๋๋ต์ ์ธ ๊ตฌ์กฐ๋ ์ํฉ์ ๊ณต์ ํด ์ฃผ์๋ฉด, ์ ๊ฐ ๊ทธ์ ๋ง์ถฐ์ "์ด๋ฐ ๋ฐฉ์์ ์ค๊ณ๊ฐ ์กฐ๊ธ ๋ ์ข์ง ์์๊น" ํ๊ณ ๋ง์ถคํ ๊ถ์ฅ์ ๋๋ฆด ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.๋ง์ง๋ง์ผ๋ก, ํ์ฌ ์ ํฌ ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ๋ด๋ถ์ ์ผ๋ก ์์ ์ด๋ฒคํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. ๊น์ด ์๋ ๊ณ ๋ฏผ์ผ๋ก ํ์ต์ ์ํ์๋ Coi ๋๊ป ์์์ ์๋ฏธ๋ฅผ ๋ด์ ์์ ์ ๋ฌผ์ ๋๋ฆฌ๊ณ ์ ํ๋, jeony0535@naver.com ์ผ๋ก ์ฐ๋ฝ ํ ํต ์ฃผ์๋ฉด ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ์ ๊ฐ์ ์ฟ ํฐ์ ์ ๋ฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์ผ๋ก๋ ํ์ตํ์๋ฉด์ ๊ตฌ์กฐ๋ ์ค๊ณ์ ๋ํ ์ค๋ฌด์ ์ธ ๊ณ ๋ฏผ์ด ์๊ธฐ์๋ฉด ์ธ์ ๋ ์ง ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์.
- Likes
- 0
- Comments
- 2
- Viewcount
- 46
Q&A
์์ ํจ์ / ์์ ์ปดํฌ๋ํธ
์๋ ํ์ธ์ Coi ๋, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ์๋ฉด์ ์์ ํจ์์ ์์ ์ปดํฌ๋ํธ ๊ฐ๋ ์ ๋จ์ํ ๋๊ธฐ์ง ์๊ณ ์๋ฒฝํ๊ฒ ์ฒดํํ๊ณ ์ ๊น๊ฒ ๊ณ ๋ฏผํ์๊ณ ์ด๋ ๊ฒ ์ง๋ฌธ์ ๋จ๊ฒจ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌํฉ๋๋ค.๊ฐ์ ์์ ์์ ์ธ๊ธํ๋ add(2, 3)์ด ํญ์ 5๋ฅผ ๋ฐํํ์ฌ ์์ํ๊ณ , getTime()์ ์คํํ ๋๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ ธ์ ์์ํ์ง ์๋ค๋ ๊ฐ๋ ์ ๋จผ์ ๋ ์ฌ๋ ค ๋ณด์๋ฉด ์ข์ต๋๋ค. ์ง๋ฌธํด์ฃผ์ ๋ด์ฉ์ ๋ณด๋ฉด state๋ ์ธ์ ๋ ๋ณํ ์ ์๊ณ ์๋ฒ์์ ๋ฐ์์ค๋ ์ํ ๋ชฉ๋ก ๊ฐ์ props๋ ๊ฒฐ๊ตญ ๊ณ์ ๋ฐ๋ ํ ๋ฐ ์ด๋ป๊ฒ ํญ์ ๋์ผํ UI๋ฅผ ๋ฐํํ๋ค๊ณ ํ๋ ๊ฑด์ง ํผ๋์ค๋ฌ์ฐ์ ์ ์ ์์ฃผ ์ ํํ๊ฒ ์ง์ด์ฃผ์ จ์ต๋๋ค. ์ฒ์์ ์ด ๊ฐ๋ ์ ์ ํ ๋ ๋๊ตฌ๋ ํ ๋ฒ์ฏค ๊ฒช๊ฒ ๋๋ ์์ฃผ ์์ฐ์ค๋ฝ๊ณ ํต์ฌ์ ์ธ ์๋ฌธ์ ๋๋ค.์ฐ๋ฆฌ๊ฐ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๊ฐ์ฅ ์ค์ํ ์คํด๋ ํญ์ ๋์ผํ UI๋ฅผ ๋ฐํํ๋ค๋ ๋ง์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋ด๋ด ๋ฐ์ดํฐ๋ ํ๋ฉด์ด ์์ํ ๋ณํ์ง ์๋๋ค๋ ๋ป์ด ๊ฒฐ์ฝ ์๋๋ผ๋ ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์์์ฑ์ ํต์ฌ์ ์๊ฐ์ด ์๋๋ผ ํน์ ์์ ์ ์ฃผ์ด์ง๋ ํน์ ์ ๋ ฅ๊ฐ์ ๋ํ ์ด์ผ๊ธฐ์ ๋๋ค. ์ฆ, ์ปดํฌ๋ํธ๋ผ๋ ํจ์์ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ props์ state ๊ฐ์ด ์ ํํ ๋๊ฐ๋ค๋ฉด ์ค๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ด์ผ ๊ทธ๋ฆฌ๋ , ํน์ ๋ฐฑ ๋ฒ์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ธ UI๋ ํ ์ ํ๋ ํ๋ฆฌ์ง ์๊ณ ๋๊ฐ์์ผ ํ๋ค๋ ๋ป์ ๋๋ค.์ด ๋ถ๋ถ์ ํ์ค์ ์ํ๊ธฐ์ ๋น์ ํด์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฒฝํ๊ฒ ์์ํ ์ํ๊ธฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์ํ๊ธฐ์ 500์์ด๋ผ๋ ๋์ (props)๊ณผ ์ฝ๋ผ ๋ฒํผ์ ๋๋ฅด๋ ํ์(state)๊ฐ ์ ๋ ฅ๋๋ฉด ์ด ๊ธฐ๊ณ๋ ํญ์ ์ฝ๋ผ(UI)๋ฅผ ๋ด์ด์ค๋๋ค. ๋ง์ฝ ๋ด์ผ ์ด ์ํ๊ธฐ์ 1000์์ ๋ฃ๊ณ ์ฌ์ด๋ค ๋ฒํผ์ ๋๋ฅธ๋ค๋ฉด ๋น์ฐํ ์ฌ์ด๋ค๊ฐ ๋์ค๊ฒ ์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํด์ ์ด ์ํ๊ธฐ๊ฐ ์์ํ์ง ์์ ๊ธฐ๊ณ๊ฐ ๋๋ ๊ฒ์ ์๋๋๋ค. ๋จ์ง ์ ๋ ฅ๊ฐ์ด ๋ฌ๋ผ์ก์ผ๋ ๊ทธ์ ๋ง๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ๊ฒ๋ฟ์ ๋๋ค.๋ฐ๋ฉด ์์ํ์ง ์์ ์ํ๊ธฐ๋ 500์๊ณผ ์ฝ๋ผ ๋ฒํผ์ ๋๊ฐ์ด ์ ๋ ฅํ๋๋ฐ๋, ์ํ๊ธฐ ๋ด๋ถ ์จ๋๊ฐ ๋๋ค๋ ์ธ๋ถ ์์ธ ๋๋ฌธ์ ๊ฐ์๊ธฐ ๋ฏธ์ง๊ทผํ ๋ฌผ์ ๋ด์ด์ฃผ๊ฑฐ๋, ์ํ๊ธฐ ๊ด๋ฆฌ์๊ฐ ๋ชฐ๋ ์ธํ ์ ๋ฐ๊ฟ๋์ด ๋๋คํ ์๋ฃ์๋ฅผ ๋ด์ด์ฃผ๋ ์์ ๋๋ค. ๋๊ฐ์ ์ ๋ ฅ์ ์ฃผ์๋๋ฐ๋ ์ธ๋ถ ์ํฉ์ด๋ ์๊ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ์๋์น๋ ๊ฒ์ด์ฃ .React์ ์ปดํฌ๋ํธ๋ ์ด ์ํ๊ธฐ์ ์๋ฒฝํ๊ฒ ๋๊ฐ์ด ๋์ํด์ผ ํฉ๋๋ค. ์ปดํฌ๋ํธ๋ ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ด๊ณ , ๋ ๋๋ง์ ๊ทธ ํจ์๋ฅผ ์คํํ๋ ํ์์ ๋๋ค. React๋ state๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์๋ฒ์์ ์๋ก์ด props๋ฅผ ๋ฐ์์ค๋ฉด ์ปดํฌ๋ํธ๋ผ๋ ํจ์๋ฅผ ๋ค์ ํธ์ถํ์ฌ ์๋ก์ด ์ฌ๋ฃ๋ค์ ๋์ ธ์ค๋๋ค. ์ด๋ ์ปดํฌ๋ํธ๋ ์ค์ง ์์ ์ด ๋ฐฉ๊ธ ๊ฑด๋ค๋ฐ์ ๊ทธ ์ฌ๋ฃ๋ค๋ง์ ์ฌ์ฉํด์ ํ๋ฉด์ ๊ทธ๋ ค๋ด์ผ ํฉ๋๋ค. ํจ์ ๋ฐ์ ์๋ ์ ์ญ ๋ณ์๋ฅผ ๋ชฐ๋ ๊ฐ์ ธ์์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ฑฐ๋, ๊ฑด๋ค๋ฐ์ props ์์ฒด๋ฅผ ์ปดํฌ๋ํธ ์์์ ๋ง์๋๋ก ์์ ํด๋ฒ๋ฆฌ๋ฉด ๋์ผํ ์ฌ๋ฃ๋ฅผ ์คฌ์ ๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค๋ ๋ณด์ฅ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.์ด๋ฅผ ์ฝ๋๋ก ์ง์ ๋น๊ตํด๋ณด๋ฉด ํจ์ฌ ์ง๊ด์ ์ผ๋ก ๋ค๊ฐ์ค์ค ๊ฒ์ ๋๋ค. ๋จผ์ ์ธ๋ถ ๋ณ์์ ์์กดํด์ ์์์ฑ์ ์์ด๋ฒ๋ฆฐ ์ปดํฌ๋ํธ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.let externalCount = 0; function ImpureComponent({ label }) { externalCount += 1; return {label}: {externalCount}; }์ ์ฝ๋์ ImpureComponent๋ label์ด๋ผ๋ ๋๊ฐ์ props๋ฅผ ๋ฐ๋๋ผ๋, ํ๋ฉด์ ๊ทธ๋ฆด ๋๋ง๋ค externalCount๋ผ๋ ์ธ๋ถ ๋ณ์๋ฅผ ์ฝ์ด์ค๊ณ ์ฌ์ง์ด ๊ทธ ๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค. ๋ฐ๋ผ์ label๋ก "์ํ"์ด๋ผ๋ ๋์ผํ ์ ๋ ฅ์ ์ฃผ์ด๋ ๋ ๋๋ง ๋ ๋๋ง๋ค "์ํ: 1", "์ํ: 2", "์ํ: 3"์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๊ณ์ ๋ฌ๋ผ์ง๋๋ค. ์คํ ์์ ๋ง๋ค ๋ฌ๋ผ์ง๋ getTime()๊ณผ ๋ค๋ฅผ ๋ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ฐ๋ฉด์ ์ฐ๋ฆฌ๊ฐ ์ค๋ฌด์์ ์งํฅํด์ผ ํ๋ ์์ ์ปดํฌ๋ํธ๋ ์ธ๋ถ ์์ธ์ ์ฒ ์ ํ ๋ฐฐ์ ํฉ๋๋ค.JavaScriptfunction PureComponent({ label, count }) { return {label}: {count}; }์ด PureComponent๋ ์ค์ง ์์ ์๊ฒ ์ฃผ์ด์ง label๊ณผ count๋ผ๋ props๋ง์ ์ฌ๋ฃ๋ก ํ๋ฉด์ ๊ทธ๋ฆฝ๋๋ค. ์ธ๋ถ ์ธ์์ ์ด๋ค ๋ณ์๊ฐ ์๋ ์ ํ ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉฐ, ์ค๋ก์ง ๋๊ฒจ๋ฐ์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ธ์ ๋ ๊ฐ์ UI๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ฒ์์ ์๋ก์ด ์ํ ๋ชฉ๋ก์ ๋ฐ์์์ ์๋ก์ด state๊ฐ ํ์ฑ๋๊ณ ๊ทธ ๊ฐ์ด props๋ก ๋์ด์จ๋ค๋ฉด, ์ปดํฌ๋ํธ๋ ๋จ์ง ๊ทธ ์๋ก์ด ์ ๋ ฅ์ ๋ง๋ ์๋ก์ด ํ๋ฉด์ ์ ์งํ๊ฒ ๊ทธ๋ ค๋ผ ๋ฟ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก React๊ฐ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ , ์์ฌํ๊ณ ๋ถํ์ํ ๋ ๋๋ง์ ์ต์ ํํ ์ ์๋ ํผํผํ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.๊ฒฐ๋ก ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ์์ํ๋ค๋ ๊ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ง ์๋ ์ ์ ์ธ ์ํ๋ผ๋ ๋ป์ด ์๋๋ผ, ๋์ผํ ์ฌ๋ฃ๋ฅผ ๋ฃ์์ ๋ ๋ถ์๋ฌผ์ด ์์ด๊ฑฐ๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๊ฐ ํ์ด๋์ค์ง ์๋๋ค๋ ๊ตณ๊ฑดํ ์ฝ์์ ๋๋ค. ์์ผ๋ก ์ค๋ฌด์์ ์ฝ๋๋ฅผ ์์ฑํ์ค ๋, ๋ด๊ฐ ๋ง๋ ์ปดํฌ๋ํธ๊ฐ ์ค์ง ๋๊ฒจ๋ฐ์ props์ ์์ ์ด ๊ฐ์ง state๋ง์ ๊ฐ์ง๊ณ ํ๋ฉด์ ๊ฒฐ์ ํ๊ณ ์๋์ง, ํน์ ํจ์ ๋ฐ์ ์๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ๊ฑฐ๋ ๊ฑด๋๋ฆฌ๊ณ ์์ง๋ ์์์ง๋ง ์ค์ค๋ก ์ ๊ฒํด ๋ณด์ ๋ค๋ฉด ์์ ์ปดํฌ๋ํธ์ ๊ฐ๋ ์ ์ฝ๋์ ์๋ฒฝํ๊ฒ ๋ น์ฌ๋ด์ค ์ ์์ ๊ฒ์ ๋๋ค.๋์ผ๋ก, ๊ฐ๋ ์ ํ์คํ ์ฒดํํ๊ณ ๋์ด๊ฐ์๋ ค๋ Coi ๋์ ๋ฉ์ง ํ์ต ํ๋๋ฅผ ์์ํ๋ ๋ง์์ ๋ด์ ์์ ์ ๋ฌผ์ ๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ํ์ฌ ์ ํฌ ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ๋ด๋ถ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์งํํ๊ณ ์๋๋ฐ์, jeony0535@naver.com ์ผ๋ก ์ฐ๋ฝ ํ ํต ์ฃผ์๋ฉด ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ์ ๊ฐ์ ์ฟ ํฐ์ ์ ๋ฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์ผ๋ก๋ ๊ฐ๋ฐํ์๋ฉด์ ๊ถ๊ธํ ์ ์ด ์๊ธฐ์๋ฉด ์ธ์ ๋ ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์.
- Likes
- 0
- Comments
- 1
- Viewcount
- 43
Q&A
nestjs ๊ฐ์๋ ์๋์??
์๋ ํ์ธ์ ์ฑ์ ํ ๋! ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค Mike ์ ๋๋ค!์ฐ์ ์ ํฌ ๊ฐ์๋ฅผ ๋ฏฟ๊ณ ์ด์ ์ ์ผ๋ก ์๊ฐํด ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์๋ฆฌ๋ฅผ ํํค์น๋ ๊ณผ์ ์์ ์ฆ๊ฑฐ์์ ๋๋ผ๊ณ ํฐ ๋์์ ๋ฐ๊ณ ๊ณ์ ๋ค๋ ๋ง์์ ๊ฐ์ฌ๋ก์ ๋ํ ๋์ ์์ด ํฐ ๋ณด๋๊ณผ ๋ฟ๋ฏํจ์ ๋๋๋๋ค. ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ์์ฐ๋ฅด๋ ํ์คํ ๊ฐ๋ฐ์์ด์, ๊น์ด์ ๋์ด๋ฅผ ๋ชจ๋ ๊ฐ์ถ T์ํ ์ธ์ฌ๋ฅผ ๋ชฉํ๋ก ๋์๊ฐ์๋ ์ ํ ๋์ ๋ฉ์ง ์ด์ ์ ๋ง์ ๊น์ด ์์ํฉ๋๋ค.์ง๊ธ Node.js ํต์ฌ ์๋ฆฌ์ ์ ๋์ค ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณ์ ๊ฒ์ ์ ๋ง ํ์ํ ์ ํ์ ๋๋ค. ํํํ ์ปดํจํฐ ๊ณผํ ์ง์๊ณผ ์ฝ์ด ๋์ ์๋ฆฌ๋ผ๋ ๋ ๋ ํ ๋ฐ๋ฐํ์ด ๊ฐ์ถ์ด์ ธ ์์ด์ผ๋ง, ํฅํ ๋ค๋ฃจ๊ฒ ๋์ค NestJS๋ React ๊ฐ์ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ๋ค์ ๋จ์ํ ๋๊ตฌ ์์ค์ ๋์ด ์จ์ ํ ๋ด ์๋๋๋ก ์์ ์์ฌ๋ก ๋ค๋ฃฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋น์ฅ ์ ๋ฌด์ NestJS์ React๋ฅผ ๋์ ํ์ ์ผ ํด์ ๋ง์์ด ๋ง์ด ์กฐ๊ธํ์๊ฒ ์ง๋ง, ์ง๊ธ์ฒ๋ผ ์๋ฆฌ์ ์ง์คํ๋ฉฐ ๊ธฐ์ด๋ฅผ ๋ค์ง๋ ํ๋๊ฐ ๊ฒฐ๊ตญ์๋ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ํ์คํ ์ง๋ฆ๊ธธ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.์์ผ๋ก์ ๊ณต๋ถ ๋ฐฉํฅ๊ณผ ๋๋ถ์ด NestJS์ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋ง์ผ์ จ์ ํ ๋ฐ, ๋ง์นจ ์ ํ ๋์ ์ฑ์ฅ ๋ก๋๋งต์ ์๋ฒฝํ๊ฒ ๋ค์ด๋ง๋ ์๋ก์ด ์ปค๋ฆฌํ๋ผ ์์์ด ์์ด ์๋ดํด ๋๋ฆฝ๋๋ค. ๋ค๊ฐ์ค๋ ์ด๋ฒ 8์ ์ค์ 'AI ๋ธ๊น์ ์๋, ์์กด์ ์ํด ๋ฐ๋์ ์์์ผ ํ๋ ์ํธํ' ์๋ฆฌ์ฆ๊ฐ ๋จผ์ ๊ณต๊ฐ๋ ์์ ์ ๋๋ค. ์ด 3๊ฐ์ ํํธ๋ก ๊ตฌ์ฑ๋ ์ด ์๋ฆฌ์ฆ๋ ํ์คํ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฐ๋์ ๊ฐ์ถ์ด์ผ ํ ๋ณด์๊ณผ ์ธ์ฆ์ ๋ชจ๋ ํต์ฌ์ ๋ฐ๋ฅ๋ถํฐ ๋๊น์ง ๊น์ด ์๊ฒ ํํค์น๋ ๊ณผ์ ์ ๋๋ค.๋จผ์ ํํธ 1์์๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ก์ ๊ผญ ์์์ผ ํ ์ํธํ ์ฝ์ด๋ฅผ ์ ์ ์ด ํด์ฒดํด ๋ด ๋๋ค. ๊ฐ๋ฐ ๊ณผ์ ์์ ์ ํ๋ ๋ค์ํ ์ํธํ ๊ธฐ์ ๋ค์ ์๋ฐ ๊ฒํฅ๊ธฐ์์ผ๋ก ๋๊ธฐ๋ ๊ฒ์ด ์๋๋ผ, ์ค์ ์๋ฆฌ์ ๋์ ๋ฉ์ปค๋์ฆ์ ํ์คํ๊ฒ ๋ฏ์ด๋ณด๊ฒ ๋ฉ๋๋ค.๊ตฌ์ฒด์ ์ผ๋ก๋ ๋์นญํค ๋ฐ ๋น๋์นญํค ์ํธํ์ ๊ธฐ์ด๋ถํฐ ์์ํด ์ผํ์ฉ ๋น๋ฐ๋ฒํธ(OTP)๋ฅผ ์ง์ ๋ง๋ค์ด๋ณด๊ณ , AES์ ์๋ฆฌ์ ์ด์ ๋ชจ๋, SHA-256์ ์ง์ ๊ตฌํํด ๋ณด๋ ํด์ฑ, ๋ฉ์์ง ์ธ์ฆ ์ฝ๋์ ํค ๋์ถ ํจ์, RSA ์๊ณ ๋ฆฌ์ฆ, ์ ์ ์๋ช , ๋์งํธ ์ธ์ฆ์ ๋ฐ๊ธ๊ณผ HTTPS ๋ฐ TLS ๊ตฌ์ถ, ๊ทธ๋ฆฌ๊ณ ๋ํผ-ํฌ๋ง ํค ๊ตํ๊ณผ ํ์ ๊ณก์ ์ํธ(ECC)์ ์ด๋ฅด๊ธฐ๊น์ง ๋ณด์ ๊ตฌํ์ ํ์์ ์ธ ํต์ฌ ํค์๋๋ค์ ๋งค์ฐ ๊น์ด ์๊ฒ ๋ค๋ฃน๋๋ค.์ด์ด์ง๋ ํํธ 2์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ์์ฐ๋ฅด๋ ์ต์ ์น ์ธ์ฆ ๋ฐ ์ธ๊ฐ ์์คํ ์ ์ค๋ฌด ํ๊ฒฝ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ตํฉ๋๋ค. ์๊ฒฉ ์ฆ๋ช ๊ธฐ๋ฐ ๋ก๊ทธ์ธ๊ณผ ๊ตฌ๊ธ ๋ฐ ๊นํ๋ธ๋ฅผ ํ์ฉํ OAuth ์์ ๋ก๊ทธ์ธ์ ๋ฌผ๋ก , ์ด์ค ์ธ์ฆ(2FA), ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC), ์ด๋ฉ์ผ ์ธ์ฆ ๋ฐ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ฐ์ ํ์ ๊ธฐ๋ฅ๋ค์ ์ง์ ๊ตฌํํด ๋ณด์ค ์ ์์ต๋๋ค.๋์๊ฐ Next.js ๋ฏธ๋ค์จ์ด์ Next-Auth ์ธ์ ํ์ฅ, ์๋ฒ ์ก์ ๋ฐ API ๋ผ์ฐํธ ๋ณด์, ์ฌ์ฉ์ ๊ด๋ฆฌ ๋์๋ณด๋ ๊ตฌ์ถ, ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์ ํ๊ฒฝ์ ํ์์ ์ธ ์๋ฌ ํธ๋ค๋ง๊น์ง ์ค์ ํ์คํ ์ธ์ฆ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ณผ์ ์ ์ฒด๊ณ์ ์ผ๋ก ๋ด์์ต๋๋ค.๊ทธ๋ฆฌ๊ณ ํํธ 3๋ก ๋์ด๊ฐ๊ธฐ์ ์์, ๋น์ฅ ์ค๋ฌด์์ NestJS๋ฅผ ๋ค๋ฃจ์ ์ผ ํ๋ ์ ํ ๋๊ณผ ๊ฐ์ ์๊ฐ์๋ถ๋ค์ ์ํด NestJS ์ ์ฉ ๊ฐ์๋ฅผ ๋จผ์ ์ ๋ณด์ผ ๊ณํ์ ๋๋ค. ์ค๋ฌด ํฌ์ ์ ๋ํ ์กฐ๊ธํ ๋ง์์ ๊น์ด ์ดํดํ๊ณ ์๊ธฐ์, ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ฒ ์ค๋ฌด์ ์ ์ฉํ ์ ์์ผ๋ฉด์๋ ํ๋ ์์ํฌ์ ์ํคํ ์ฒ์ ์๋ฆฌ๋ฅผ ๊ฟฐ๋ซ์ด ๋ณผ ์ ์๋ ๋์ ์์ฑ๋๋ก ์ค๋นํ๊ณ ์์ต๋๋ค.์ด ๊ฐ์๋ฅผ ํตํด ์ปจํธ๋กค๋ฌ, ํ๋ก๋ฐ์ด๋, ๋ชจ๋ ๋ฑ NestJS์ ๊ธฐ๋ณธ ๋ผ๋์ ๊ตฌ์กฐ๋ฅผ ๋จ๋จํ ์ก์๋์๋ฉด ์ค๋ฌด ๊ฐ๋ฐ์ ์งํํ์ค ๋ ์ฆ๊ฐ์ ์ด๋ฉด์๋ ์ค์ง์ ์ธ ํฐ ๋์์ ๋ฐ์ผ์ค ์ ์์ ๊ฒ์ ๋๋ค.์ด๋ ๊ฒ NestJS ๊ฐ์๋ก ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ง์ ํ์๋, ์ธ์ฆ์ ์ต์ข ์ฅ์ธ ํํธ 3๋ฅผ ํตํด ๋๊ท๋ชจ ์๋น์ค ํ๊ฒฝ์์ ์๊ตฌ๋๋ ๊ณ ๋ํ๋ ์ธ์ฆ ๋ฐฉ์์ NestJS ๋ฐฑ์๋ ํ๊ฒฝ์์ ์๋ฒฝํ๊ฒ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.์ํ ์ ์ง(Stateful) ๋ฐฉ์๊ณผ ๋ฌด์ํ(Stateless) ์ธ์ฆ์ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ ์์์ผ๋ก ์ธ์ , ์ฟ ํค, JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ๊ผผ๊ผผํ๊ฒ ๋ค๋ฃจ๋ฉฐ, NestJS์ TypeORM๊ณผ Redis๋ฅผ ์ฐ๋ํ๋ ์ค์ ๊ธฐ์ ์ ํ์ตํฉ๋๋ค. ๋ ๋์๊ฐ OAuth 2.0 ํตํฉ, Auth0๋ฅผ ํ์ฉํ ๋ง์ดํฌ๋ก์๋น์ค ์ธ์ฆ, ์ฑ๊ธ ์ฌ์ธ์จ(SSO), SAML ๋ฐ OIDC ์ํคํ ์ฒ ๋ฑ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ธ์ฆ ์์คํ ์ ํ์ํ ๋ฐฉ๋ํ ๋ด์ฉ์ ์์ํ๊ฒ ์ญ๋ ตํ์๊ฒ ๋ฉ๋๋ค.์ง๋ฌธํด ์ฃผ์ ํ์ต ์์์ ๋ํด์๋, ๊ฐ๊ธ์ ์ ๊ฐ ์ถ์ํ๋ ๊ฐ์ ์์๋๋ก ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์๊ฐํ์๋ ๊ฒ์ ๊ฐ์ฅ ๊ถ์ฅํด ๋๋ฆฝ๋๋ค. ์ ๋ชจ๋ ๊ฐ์๋ ์ง์์ ๊ฐ์ฅ ๋ฐ๋ฐ๋ฅ๋ถํฐ ๋ค์ง๋ฉฐ ๊ฑฐ๋ํ ๋ผ๋๋ฅผ ์์ ์ฌ๋ฆด ์ ์๋๋ก ์ ๊ธฐ์ ์ผ๋ก ์ค๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ง๊ธ ์๊ฐ ์ค์ด์ ๊ฐ์๋ฅผ ํตํด ์๋ฒ์ ์ด์์ฒด์ ์ ๊ธฐ์ด๋ฅผ ํผํผํ๊ฒ ๋ค์ง์ ๋ค ์๋ก ์ถ์๋๋ ๊ฐ์๋ค์ ์์๋๋ก ๋ฐ๋ผ์ค์ ๋ค๋ฉด, ์ด๋์ ๊น์ด ์๋ ์ญ๋์ ๊ฐ์ถ ํ์คํ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํด ๊ณ์ค ๊ฒ์ ๋๋ค. ๋น์ฅ ๊ธํ ์ค๋ฌด ์ ๋ฌด๋ ๊ณต์ ๋ฌธ์์ ํํ ๋ฆฌ์ผ์ ๊ฐ๋ณ๊ฒ ์ฐธ๊ณ ํ๋ฉฐ ์ฐ์ ํด๊ฒฐํด ๋๊ฐ์๊ณ , ๊น์ด ์๋ ๊ธฐ์ ์ ๋ผ๋๋ ์ ๊ฐ ์ฑ ์์ง๊ณ ๋ ๋ ํ๊ฒ ์ฑ์๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์ธ๋ฌ ๊ฐ์๋ฅผ ์๊ฐํ์๋ฉด์ ๋ฐ๋์ ๋๋ง์ ํ๋ก์ ํธ๋ฅผ ํ๋ ์ ํด ์ง์ ๊ฐ๋ฐํด ๋ณด์๋ ๊ฒ์ ์ ๊ทน ์ถ์ฒํด ๋๋ฆฝ๋๋ค. ๋ฐฐ์ด ์ง์์ ์ง์ ๋ด ์ฝ๋์ ์ ์ฉํ๊ณ ๋ถ๋ชํ๋ฉฐ ํ์ด๋ด๋ ๊ณผ์ ์ด์ผ๋ง๋ก ์ค๋ ฅ์ ๋์ฝ์ํค๋ ๊ฐ์ฅ ํ์คํ ๋ฐ๊ฑฐ๋ฆ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ํ ๋์ด ํ๋ฅญํ T์ํ ์ธ์ฌ๋ก ์ฑ์ฅํด ๋๊ฐ์๋ ์ฌ์ ์ ๋๊น์ง ํจ๊ปํ๊ฒ ์ต๋๋ค. ์ธ์ ๋ ์์ํ๊ฒ ์ต๋๋ค. ์์คํ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ ์ ๋ค์ ํ๋ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ดํ ์ ๋๋ค!
- Likes
- 1
- Comments
- 2
- Viewcount
- 57
Q&A
ReactScriptExample ๊ด๋ จ ์ง๋ฌธ
์๋ ํ์ธ์ ํ๊ฑด์ฐ ๋, ๋ฌธ์ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.ํฌ๋กฌ์ ํฌํจํ ์ด๋ ํ ์ต์ ๋ธ๋ผ์ฐ์ ๋ JSX๋ฅผ ์์ฒด์ ์ผ๋ก ์ง์ํ์ง๋ ์์ต๋๋ค. JSX๋ ๊ณต์์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค ๋ฌธ๋ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ Node.js ์๋ฒ ์์ด ๋ก์ปฌ ํ๊ฒฝ์ ํฌ๋กฌ์์ ํ๋ฉด์ด ์ฑ๊ณต์ ์ผ๋ก ๋ ๋๋ง๋ ์ ์์๋ ์ด์ ๋ ์์ฑํ์ ์๋์ ์ฝ๋ ๋ด์ ํฌํจ๋ Babel ์คํฌ๋ฆฝํธ ๋๋ถ์ ๋๋ค. Hello React with Babel const element = Hello, React with Express and Babel!; const root = ReactDOM.createRoot(document.getElementById("root")); root.render(element); ์ ์ฝ๋๋ฅผ ์ดํด๋ณด์๋ฉด ํ๊ทธ ๋ด์์ React์ ํจ๊ป Babel ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์์ผ๋ฉฐ, ํ๋จ์ ํ๊ทธ์๋ ํ์ ์ด type="text/babel"๋ก ๋ช ์๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ์ฝ์ด ๋ด๋ ค๊ฐ ๋ ์ด Babel ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ฉฐ, ์ ์ธ๋ ๋ธ๋ก ์์ JSX ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ์ค์๊ฐ ๋ณํํด ์ค๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ JSX๋ฅผ ์ง์ ์ดํดํ ๊ฒ์ด ์๋๋ผ ๋ธ๋ผ์ฐ์ ์์์ ๋์ํ๋ Babel์ด JSX๋ฅผ ๋ฒ์ญํ์ฌ ๋ ๋๋ง ์์ง์ ์ ๋ฌํด ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก ํ๋ฉด์ด ๋ํ๋ ๊ฒ์ ๋๋ค.๋ค๋ง ์์ง ์ค๊ณ์์ ๊ด์ ์์ ๋ณด์์ ๋, ์ด์ฒ๋ผ HTML ํ์ผ์ ์ง์ Babel์ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ฐํ์ ์ปดํ์ผ ๋ฐฉ์์ ๋ก์ปฌ์์์ ๊ฐ๋จํ ํ ์คํธ ๋ชฉ์ ์๋ง ์ ํฉํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ์ ์ํ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ์์ ๋ฌด๊ฑฐ์ด ์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉด ๋ ๋๋ง ์ฑ๋ฅ์ ์น๋ช ์ ์ธ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ค์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋น๋ ๋๊ตฌ๋ฅผ ํ์ฉํด ๊ฐ๋ฐ ๋จ๊ณ์์ ๋ฏธ๋ฆฌ ์ปดํ์ผ์ ์๋ฃํ๊ณ , ์ต์ ํ๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฐ๊ณผ๋ฌผ๋ง์ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌํ๋ ์ํคํ ์ฒ๋ฅผ ์ฑํํ๊ฒ ๋ฉ๋๋ค.์ด๋ฒ ๋ต๋ณ์ด ๋ ๋๋ง์ ๋ณธ์ง์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋์ จ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ, ์์ผ๋ก๋ ๊ฐ์๋ฅผ ๋ค์ผ์๋ฉฐ ๊ถ๊ธํ ์ ์ด ์์ผ์๋ค๋ฉด ์ธ์ ๋ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.์ถ๊ฐ๋ก, ํ์ฌ ์๊ฐ์๋ถ๋ค์ ๋์์ผ๋ก ์ต๋ ํ ์ธ ์ฟ ํฐ์ ์ ๋ฌ๋๋ฆฌ๊ณ ์์ต๋๋ค. ์ฟ ํฐ ์ง๊ธ์ด ํ์ํ์๋ค๋ฉด jeony0535@naver.com์ผ๋ก ์ด๋ฉ์ผ ํ ํต ๋ถํ๋๋ฆฝ๋๋ค!
- Likes
- 0
- Comments
- 1
- Viewcount
- 47
Q&A
81๊ฐ ์ค์ต ์๋ฃ ์์
์๋ ํ์ธ์, Yoon Robin๋!๋ฌธ์ํด์ฃผ์ '81๊ฐ. [Pain] ๋๊ท๋ชจ ์ญ์ ์์ ์ ๋ฐ์ํ๋ ์๋ง์ ์์ฒญ์ ํ๋๋ก ๋ฌถ๊ธฐ' ์ฐจ์์ ๊ด๋ จํ์ฌ ๋ต๋ณ๋๋ฆฝ๋๋ค.๋ค, ๋ง์ํด ์ฃผ์ ๋ด์ฉ์ด ๋ง์ต๋๋ค. ํด๋น ๊ฐ์๋ ๋ณ๋์ ์ค์ต ์๋ฃ๊ฐ ์ ๊ณต๋์ง ์๋ ๊ฒ์ผ๋ก ์๋๋ ๊ตฌ์ฑ์ด ๋ง์ต๋๋ค.ํ์ต ์งํ์ ํน์๋ ๋์์ด ๋ ๊น ํ์ฌ ๊ฐ์ ๋๋ณธ ์๋ฃ๋ฅผ ํจ๊ป ์ฒจ๋ถํด ๋๋ฆฝ๋๋ค!ํ์ต์ ์ฐธ๊ณ ํด ์ฃผ์๊ธฐ ๋ฐ๋ผ๋ฉฐ, ์ถ๊ฐ๋ก ๊ถ๊ธํ์ ์ ์ด๋ ๋ ํ์ํ์ ์ฌํญ์ด ์์ผ์๋ค๋ฉด ์ธ์ ๋ ํธํ๊ฒ ๋ฌธ์ํด ์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค!์ง๋ 78๊ฐ์์ ์ฐ๋ฆฌ๋ MSW๋ฅผ ํตํด ์๋ฒ ์๋ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ณ ๋น๋๊ธฐ ๋ก์ง์ ์๋ฒฝํ๊ฒ ๊ฒ์ฆํ๋ ๋ฒ์ ๋ฐฐ์ ์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ์ ์ฝ๋๋ ๊ฐ๋ณ ๊ธฐ๋ฅ ๋จ์์์ ์์ฃผ ๋์ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ฒ ๋์์ต๋๋ค. ํ์ง๋ง ์ค์ ์ ๋ฌด ํ์ฅ์ ๊ทธ๋ฆฌ ํธ๋ฝํธ๋ฝํ์ง ์์๋ฐ, ๋จ์ผ ์์ฒญ์ ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๋์ด ์๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ์กฐ์ํด์ผ ํ๋ ์ด๋ฅธ๋ฐ ๊ท๋ชจ์ ๋ฌธ์ ๊ฐ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๊ด๋ฆฌ์ ํ์ด์ง์์ ์๋ฐฑ ๋ช ์ ํ์์ ํ๊บผ๋ฒ์ ์ ํํ์ฌ ์ญ์ ํ๋ ๋๊ท๋ชจ ์์ ์ ์ํํด์ผ ํ ๋, ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ๋ฐฐ์ด ๋ฐฉ์๋๋ก ๊ฐ๊ฐ์ ์ ์ ์ ๋ํด ๋ ๋ฆฝ์ ์ธ ์ญ์ ์์ฒญ์ ๋ณด๋ด๋๋ก ์ค๊ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฐฉ์์ ๊ณง ์ฐ๋ฆฌ ์ฑ๊ณผ ์๋ฒ์ ์์ฒญ๋ ์๊ฐ์ ์ด๊ณ ๊ธฐ์ ์ ์ธ ๊ณ ํต์ ์๊ฒจ์ฃผ๋ ๋คํธ์ํฌ ํญํ์ผ๋ก ๋ณํ๊ฒ ๋๋ฉฐ, ์ค๋์ ์ด๋ฌํ ๋นํจ์จ์ด ๋ฐ์ํ๋ ๊ทผ๋ณธ์ ์ธ ์์ธ๊ณผ ๊ทธ ๊ณ ํต์ ์ค์ฒด๋ฅผ ํ๋์ฉ ํํค์ณ ๋ณด๋ ์๊ฐ์ ๊ฐ๊ฒ ์ต๋๋ค.๊ฐ์ฅ ๋จผ์ ์ฐ๋ฆฌ๊ฐ ๋ง์ฃผํ๊ฒ ๋ ์ฒซ ๋ฒ์งธ ๊ณ ํต์ ๋จ์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ์ฌ์ด์ ํต์ ํจ์จ์ฑ ๋ฌธ์ ์ ๋๋ค. ํ๋์ ๋๋ถ๋ถ ๋ธ๋ผ์ฐ์ ๋ HTTP/1.1 ๊ท๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ๋์ผ ๋๋ฉ์ธ๋น ๋์ ์ฐ๊ฒฐ ์๋ฅผ ๋ณดํต 6๊ฐ๋ก ์ ํํ๊ณ ์์ต๋๋ค. ๋ง์ฝ ๊ด๋ฆฌ์๊ฐ 100๋ช ์ ์ ์ ๋ฅผ ํ ๋ฒ์ ์ญ์ ํ๋ ค ํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ด๋ฅผ 100๊ฐ์ ๊ฐ๋ณ ์์ฒญ์ผ๋ก ๋ณด๋ธ๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฝ ๋๋ฌธ์ ํ ๋ฒ์ 6๊ฐ ์ ๋์ ์์ฒญ๋ง ๋์์ ๋ณด๋ผ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋๋จธ์ง 94๊ฐ์ ์์ฒญ์ ๋คํธ์ํฌ ํญ์์ 'Pending' ์ํ๋ก ํ์ผ์์ด ์์ ์์ฒญ์ด ๋๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฌ๋ ํ์์ด ๋ฐ์ํฉ๋๋ค.์ด๋ฌํ ํ์์ ์ฐ๋ฆฌ๋ ํํ ์ํฐํด(Waterfall) ํ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๋ ๋จ์ํ ์ ์ฒด ์ญ์ ํ๋ก์ธ์ค๋ฅผ ๋งค์ฐ ๋๋ฆฌ๊ฒ ๋ง๋ค ๋ฟ๋ง ์๋๋ผ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ฉ ์์์ ๋ ์ ํ์ฌ ๋ค๋ฅธ ์ค์ํ ์์ฒญ๋ค๊น์ง ๊ฐ๋ก๋ง๋ ์ฌ๊ฐํ ๋ณ๋ชฉ ํ์์ ์ด๋ํ๊ฒ ๋ฉ๋๋ค. ์๋ฐฑ ๊ฐ์ ์์ฒญ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ณด๋ด๋ ๋นํจ์จ์ ์ธ ์ญ์ ๋ก์ง์ ์ฝ๋๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค./** * [Pain Scenario] ์๋ฐฑ ๊ฐ์ ์์ฒญ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ณด๋ด๋ ๋นํจ์จ์ ์ธ ์ญ์ ๋ก์ง ์์์ ๋๋ค. * userIds ๋ฐฐ์ด์ ์ํํ๋ฉฐ ํ๋์ฉ mutate๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ ๋คํธ์ํฌ ํญํ์ ์ฃผ๋ฒ์ด ๋ฉ๋๋ค. */ const handleDeleteUsers = (userIds: number[]) => { // ์์ด๋ ๋ฐฐ์ด์ ๋จ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉฐ ๊ฐ๊ฐ ์์ฒญ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. userIds.forEach(id => { /** * [๊ณ ํต์ ์์] ์ด ์ฝ๋๋ ์์ด๋๊ฐ 100๊ฐ๋ผ๋ฉด 100๋ฒ์ HTTP ํต์ ์ ๋ฐ์์ํต๋๋ค. * ๋ธ๋ผ์ฐ์ ์ 6๊ฐ ๋์ ์ฐ๊ฒฐ ์ ํ ๋๋ฌธ์ ๋๋จธ์ง 94๊ฐ๋ ๋๊ธฐ ์ํ์ ๋น ์ง๊ฒ ๋ฉ๋๋ค. */ deleteUserMutation.mutate(id); }); }; ์ด๋ฌํ ์ํฉ์ ๋ํด ์ต์ HTTP/2 ํ๊ฒฝ์์๋ ๋ฉํฐํ๋ ์ฑ์ ์ง์ํ๋ ์ฌ๋ฌ ์์ฒญ์ ๋์์ ๋ณด๋ด๋ ๊ด์ฐฎ์ง ์๋๋๊ณ ์๊ฐํ ์ ์์ง๋ง, ์ด๋ ์ด๋๊น์ง๋ ๋คํธ์ํฌ ๋ ์ด์ด์ ์ ์ก ํจ์จ์ด ์ข์์ง๋ ๊ฒ์ผ ๋ฟ ์ดํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด์์์ ๋ถํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๋น์ฉ์ ์ ํ ์ค์ด๋ค์ง ์๋๋ค๋ ์ ์ ๋ช ์ฌํด์ผ ํฉ๋๋ค. ์๋ฒ๋ ์ฌ์ ํ 100๊ฐ์ ์์ฒญ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํด์ผ ํ๊ณ 100๋ฒ์ ์ธ์ฆ ๋ก์ง์ ๊ฑฐ์ณ์ผ ํ๋ฉฐ 100๋ฒ์ ๋ก๊ทธ๋ฅผ ์ผ์ผ์ด ๋จ๊ฒจ์ผ ํฉ๋๋ค. ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด์ ์์ ๋ณด๋ฉด ์ด๋ฌํ ๋ฐฉ์์ ์ปค๋ฅ์ ํ์ ์์๊ฐ์ ๊ณ ๊ฐ์ํค๋ ์ฃผ๋ฒ์ด ๋ฉ๋๋ค.ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ์์ ์ 100๋ฒ์ ๋ ๋ฆฝ์ ์ธ ์์ ์ผ๋ก ์ชผ๊ฐ์ ๋ณด๋ด๋ ๊ฒ์ ๋ง์น ๋งํธ์์ ๋ฌผ๊ฑด 100๊ฐ๋ฅผ ์ฌ๋ฉด์ ๋งค๋ฒ ๋ฌผ๊ฑด ํ๋๋ฅผ ์ง์ ๋๋ง๋ค ๊ณ์ฐ๋๋ก ๋ฌ๋ ค๊ฐ ๋ฐ๋ก ๊ฒฐ์ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ด ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ถํ์ํ ์ ์ถ๋ ฅ ๋ถํ๋ ์๋ฒ ์ ์ฒด๋ฅผ ๋ง๋น์ํฌ ์ ์๋ ์ํ์ ๋ดํฌํ๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ๋ฌด์ฌํ ๋ฐ๋ณต๋ฌธ์ด ์๋ฒ์ ์์์ ์ด๋ป๊ฒ ๊ฐ์๋จน๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฐ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค./** * ์๋ฒ ์ธก์ ๊ณ ํต์ ์๋ฎฌ๋ ์ด์ ํ ๊ฐ์ ์ฝ๋์ ๋๋ค. */ app.delete('/api/users/:id', async (req, res) => { /** * ๊ฐ๋ณ ์์ฒญ๋ง๋ค ์ธ์ฆ, ๋ก๊น , DB ์ปค๋ฅ์ ์ ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋ฉ๋๋ค. * 50๋ฒ์งธ ์์ฒญ์์ ๋คํธ์ํฌ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์์์ฑ์ ์ด๋ฏธ ํ๊ดด๋ ์ํ๊ฐ ๋ฉ๋๋ค. */ const result = await db.users.delete(req.params.id); res.json(result); }); ๋ฌด๋ถ๋ณํ ์์ฒญ ํญ๋ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์์๋ ์น๋ช ์ ์ธ ํ์ธ ํฌ์ธํธ๋ฅผ ๋ฐ์์ํค๋๋ฐ, ๊ทธ์ค์์๋ ๊ฐ์ฅ ๊ณจ์น ์ํ ๋ฌธ์ ๋ ๋ฐ๋ก '์์์ฑ(Atomicity)'์ ๊ฒฐ์ฌ๋ก ์ธํ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ถ๊ดด์ ๋๋ค. ์ฌ๊ธฐ์ ์์์ฑ์ด๋ "์ ๋ถ ์ฑ๊ณตํ๊ฑฐ๋, ํน์ ์ ๋ถ ์คํจํ๊ฑฐ๋(All-or-Nothing)"๋ผ๋ ์์น์ ์๋ฏธํฉ๋๋ค. 100๊ฐ์ ๊ฐ๋ณ ์์ฒญ์ ๋ณด๋ด๋ฉด ๋คํธ์ํฌ ์ํฉ์ด๋ ์๋ฒ ์ํ์ ๋ฐ๋ผ ์ผ๋ถ๋ ์ฑ๊ณตํ๊ณ ์ผ๋ถ๋ ์คํจํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋๋ฐ, ์ ๋ถ ์ญ์ ๋๊ฑฐ๋ ์์ ์ญ์ ๋์ง ์์์ผ ํ๋ ์ด ์์น์ด ์ง์ผ์ง์ง ์์ ์ด์ ์ฉกํ๊ฒ ์ ๋ฐ๋ง ์ญ์ ๋ ๋ฐ์ดํฐ๋ ๋ณต๊ตฌ์กฐ์ฐจ ๋ถ๊ฐ๋ฅํ ์ฌ์์ด ๋ฉ๋๋ค.๋ํ ์๊ฐ์ ์ผ๋ก๋ ๋ฆฌ์คํธ ํญ๋ชฉ๋ค์ด ํ๋์ฉ ํญํญ ๋๊ธฐ๋ฉฐ ์ฌ๋ผ์ง๊ฑฐ๋ ํ๋ฉด์ด ๋์ปฅ๊ฑฐ๋ฆฌ๊ณ , 100๊ฐ์ ๋ก๋ฉ ์ธ๋์ผ์ดํฐ๊ฐ ํ๋ฉด์ ๋ค๋ฎ์ผ๋ฉฐ ๋์์ ๋์๊ฐ๋ ๊ธฐ๊ดดํ ๊ด๊ฒฝ์ ์ฐ์ถํ๊ฒ ๋ฉ๋๋ค. ์ฌ์ฉ์๋ ์ญ์ ๊ฐ ์์ ํ ๋๋ ๊ฒ์ธ์ง ์ ์ผ๋ถ๋ ์ฌ์ ํ ๋จ์์๋์ง ์ ์ ์๋ ํผ๋์ ๋น ์ง๊ฒ ๋๋๋ฐ, ์ด๋ ์๋์ด ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ฝ ์ฉ๋ฉํด์๋ ์ ๋๋ ์ค๊ณ์ ์คํจ๋ผ๊ณ ํ ์ ์์ต๋๋ค.๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉดํ ์ด ๊ฑฐ๋ํ ๊ณ ํต์ ํต์ฌ์ ๋คํธ์ํฌ ํต์ ์ ๋์ ๋น์ฉ๊ณผ ์์์ฑ์ ๊ฒฐ์ฌ์ ์์ผ๋ฉฐ, ์๋ฐฑ ๊ฐ์ ์์ ์์ฒญ์ ํ๋์ ํฐ ์์ฒญ์ผ๋ก ๋ฌถ์ด์ ๋ณด๋ด๋ ์ ๋ต์ ์ฌ์ฉํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด ๋คํธ์ํฌ ํญํ์ ํํ๋ก์ด ์๋ฌผ๊ฒฐ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ค๋ ์ฐ๋ฆฌ๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์กฐ์ ์ ๋ฐ์ํ๋ ์๋ง์ ์์ฒญ์ด ์ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ๋์ง ๊ทธ ํ์ธ ํฌ์ธํธ์ ์ค์ฒด๋ฅผ ๋ฑ๋ฑ์ด ํํค์ณ ๋ณด์์ผ๋ฉฐ, ์ด์ ์ด ์ง๋ ํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ง์ ํน์ ์์์ ํฌ์ ํ ์ฐจ๋ก์ ๋๋ค.๋ค์ ๊ฐ์์์๋ ๋นํจ์จ์ ์ธ ๋คํธ์ํฌ ํญํ์ ๋จ ํ ๋ฒ์ ๊น๋ํ ํต์ ์ผ๋ก ํด๊ฒฐํ๋ ์๋ฃจ์ ์ธ Query Batching ์ ๋ต์ ํตํ ์๋ฒ ๋ถํ ์ต์ํ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์๋ฐฑ ๋ฒ์ ๊ณ์ฐ๋ ๋ฐฉ๋ฌธ์ ๋จ ํ ๋ฒ์ ์นดํธ ๊ฒฐ์ ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ ์๋์ด์ ๋ง๋ฒ ๊ฐ์ ์ต์ ํ ๊ธฐ๋ฒ์ ๊ธฐ๋ํด ์ฃผ์๊ธธ ๋ฐ๋ผ๋ฉฐ ์ค๋๋ ์ ๋ง ๊ณ ์ ๋ง์ผ์ จ์ต๋๋ค. ๊ทธ๋ผ ๋ค์ ๊ฐ์์์ ๋ต๊ฒ ์ต๋๋ค.
- Likes
- 0
- Comments
- 2
- Viewcount
- 58
Q&A
62๊ฐ ์ค์ต์๋ฃ๊ฐ ์๋ชป๋์์ต๋๋ค.
์๋ ํ์ธ์, Yoon Robin๋! ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค์ ๋๋ค.๋จผ์ 62๊ฐ ์ค์ต ์๋ฃ์ ๋ด์ฉ์ด ์๋ชป ๋ฐ์๋์ด ์์ด ๊ฐ์ ์๊ฐ์ ๋ถํธ์ ๋๋ฆฐ ์ ์ง์ฌ์ผ๋ก ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋ง์ํด์ฃผ์ ๋ด์ฉ์ ํ์ธํ ๋ค, ๊ธฐ์กด์ '[Pain] ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ์ ์ญ ๋ก๋ฉ/์๋ฌ ์ํ๊ฐ ๋ก์ง์ ์ค์ผ์ํฌ ๋' ์๋ฃ๋ฅผ ์ฌ๋ฐ๋ฅธ '[Solution] Stale-While-Revalidate: ์ฌ์ฉ์์๊ฒ๋ ์บ์๋ฅผ, ๋ค์์๋ ๊ฐฑ์ ์' ์๋ฃ๋ก ์ฆ์ ๊ต์ฒด ์์ ์๋ฃํ์์ต๋๋ค! ์ง๊ธ ๋ฐ๋ก ํ์ธํด ๋ณด์ค ์ ์์ต๋๋ค.์๊ฐ์๋ถ๋ค๊ป ๋ ์ข์ ํ์ง์ ๊ฐ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ผ๋, ์ด๋ ๊ฒ ๊ผผ๊ผผํ๊ฒ ํ์ธํด์ฃผ์๊ณ ์์คํ ์ ๋ณด๋ฅผ ๋จ๊ฒจ์ฃผ์ ์ ์ ๋ง ํฐ ๋์์ด ๋์์ต๋๋ค.๊ฐ์ฌํ ๋ง์๊ณผ ํจ๊ป ์ฃ์กํ ๋ง์์ ๋ด์ ์์ ์ ๋ฌผ์ ์ ๋ฌํด ๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ๊ด์ฐฎ์ผ์๋ค๋ฉด jeony0535@naver.com์ผ๋ก ํธํ๊ฒ ๋ฉ์ผ ํ ๋ฒ ๋จ๊ฒจ์ฃผ์ค ์ ์์ผ์ค๊น์? ๋ฉ์ผ์ ๋จ๊ฒจ์ฃผ์๋ฉด ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ์ ๊ฐ์ ๋์ ์ต๋ ํ ์ธ ์ฟ ํฐ์ ์ ๋ฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.์์ผ๋ก๋ ๋ ์์ง์ ์ฝํ ์ธ ์ ์พ์ ํ ์๊ฐ ํ๊ฒฝ์ ์ ๊ณตํด ๋๋ฆด ์ ์๋๋ก ์ต์ ์ ๋คํ๊ฒ ์ต๋๋ค.๋ค์ ํ๋ฒ ์ ๋ณดํด ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ, ์๊ฐ ์ค ๊ถ๊ธํ์ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์!๊ฐ์ฌํฉ๋๋ค. ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ์คํ๋์ค ๋๋ฆผ
- Likes
- 0
- Comments
- 1
- Viewcount
- 53
Q&A
๊ฐ์ ๋ชฉํ
์๋ ํ์ธ์ ์ค์ํ (๋๋ฌดํ)๋, ๋จผ์ ๊ฐ์๋ฅผ ์๊ฐํด ์ฃผ์๊ณ ์ด๋ ๊ฒ ๊น์ด ์๋ ์ง๋ฌธ์ ๋จ๊ฒจ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ ์์ AI์ ์๋ง์ ํ๋ ์์ํฌ๊ฐ ๊ณ ๋ํ๋๋ฉด์, ์๋ง์ ์ฃผ๋์ด ๋ฐ ๋ฏธ๋ค๊ธ ๊ฐ๋ฐ์๋ถ๋ค์ด ์ ํํ ๋๊ฐ์ ๊ณ ๋ฏผ์ ์ง๋ฉดํ๊ณ ๊ณ์ญ๋๋ค. AI๊ฐ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ๋ค ์ง์ฃผ๋๋ฐ ๊ตณ์ด ๋ก์ฐ๋ ๋ฒจ์ ์๋ฆฌ๊น์ง ์์์ผ ํ ๊น ํ๋ ์๋ฌธ์, ๋ฆฌ๋ ๊ฐ๋ฐ์์ด์ AI๋ฅผ ์ค๋ฌด์ ์ ๊ทน์ ์ผ๋ก ๋์ ํ์ฌ ํ์ ์ด๋๊ณ ์๋ ์ ์ ์ฅ์์๋ ํ์ฌ ์ํํธ์จ์ด ์ํ๊ณ์ ๋ณธ์ง์ ๊ฟฐ๋ซ๋ ๋งค์ฐ ํ๋ฅญํ ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด, ์๋ฆฌ๋ฅผ ์๋ ๊ฒ์ ๋จ์ํ ํ๋กฌํํธ๋ฅผ ์ ์ฐ๊ฑฐ๋ ์ฅ์ ๋ฅผ ๊ณ ์น๊ธฐ ์ํจ๋ง์ ์๋ฏธํ์ง ์์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก๋ AI๊ฐ ๋ง๋ค์ด๋ธ ๊ฑฐ๋ํ ๋ธ๋๋ฐ์ค ์์คํ ์ ๋ํ ์๋ฒฝํ ํต์ ๊ถ์ ์ฅ๊ธฐ ์ํจ์ ๋๋ค.์ดํด๋ฅผ ๋๊ธฐ ์ํด, ํ์ฌ 7์ ์ค ์ถ์๋ฅผ ์๋ AI ๋ธ๊น์ ์๋, ๋์ฒด ๋ถ๊ฐ๋ฅํ ์ต์์ ๊ฐ๋ฐ์์ ๋ฌด๊ธฐ ์ ๋์ค ๊ฐ์์์ ๋ค๋ฃจ๊ฒ ๋ ์ค๋ฌด ๋น๋์ค ํธ๋์ค์ฝ๋ฉ ์์คํ ์ ๊ตฌํํ๋ ์ํฉ์ ํ ๋ฒ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์์คํ ์ ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ๋์ฉ๋ ๋น๋์ค ํ์ผ์ ํด์๋๋ฅผ ๋ค์ํ ๊ธฐ๊ธฐ์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ง๊ฒ ๋ณํํ๊ณ ์ธ์ฝ๋ฉํ์ฌ ์ํํ๊ฒ ์คํธ๋ฆฌ๋ฐํ ์ ์๋๋ก ์ ๊ณตํ๋ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.์, ๊ทธ๋ฌ๋ฉด ์์คํ ์ ๋ฐฐ๊ฒฝ์ง์์ด ์ ํ ์๋ ์ํ์์ ์ฐ๋ฆฌ๋ ์ด๋ค ํ๋ฆ์ ๋ฐ๋ฅด๊ฒ ๋ ๊น์? ๊ฒฝํ์ด ์๊ฑฐ๋ ํ๋ ์์ํฌ ์ฌ์ฉ๋ฒ๋ง ์๋ ๊ฒฝ์ฐ, ๊ทธ์ AI์๊ฒ "Node.js ํน์ ํ์ฌ ์ฌ์ฉ ์ค์ธ ํ๋ ์์ํฌ๋ ๊ธฐ์ ๋ก ๋น๋์ค ํด์๋๋ฅผ ๋ณํํ๋ ์๋ฒ ์ ์ฒด ์ฝ๋๋ฅผ ์ง์ค"์ ๊ฐ์ด ๋จ์ํ๊ฒ ์ง์ํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, "์ฌ์ฉ์ํํ ๋น๋์ค ํ์ผ ์ ๋ก๋ ๋ฐ์์ ๋ชจ๋ฐ์ผ์ฉ ํด์๋๋ก ๋ณํํ๊ณ ์งํ๋ฅ ์ ๋ฐํํ๋ API ๊ธฐ๋ฅ ๋ค ๋ง๋ค์ด์ค" ๊ฐ์ ํ๋กฌํํธ๋ฅผ ์ ๋ ฅํ๊ฒ ๋๊ฒ ์ฃ . ๊ทธ๋ฌ๋ฉด AI๋ ๋ง์น ์๋ จ๋ ์ฌ์์ฒ๋ผ Express ํ๋ ์์ํฌ์ fluent-ffmpeg ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ํ์ผ ์ ๋ก๋๋ถํฐ ์ธ์ฝ๋ฉ๊น์ง ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๊ทธ๋ด๋ฏํ ์ ์ฒด ์ฝ๋๋ฅผ ์น์ ํ๊ฒ ๋์ ธ์ค๋๋ค.๊ฐ๋ฐ์๊ฐ ์ด ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ๋ก์ปฌ ํ๊ฒฝ์ ๋ถ์ฌ๋ฃ๊ณ ์คํํด ๋ณด๋ฉด, ์ฒ์์๋ FFmpeg ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ค๋ ์๋ฌ๋ฅผ ๋ง์ฃผํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ถํฐ ์ฒซ ๋ฒ์งธ ๋ฒฝ์ ๋ถ๋ชํ๋๋ค. FFmpeg๊ฐ ๋ฌด์์ธ์ง์กฐ์ฐจ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค์ AI์๊ฒ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณต์ฌํด ๋ถ์ฌ๋ฃ์ผ๋ฉฐ ์ง๋ฌธ์ ๋์ง๋๋ค. AI๊ฐ ์๋ ค์ค ๊ณต์ ์ฌ์ดํธ๋ ๊นํ๋ธ์ ๋ง์ ๋ค์ด๊ฐ ๋ณด๋ฉด ์จํต C ์ธ์ด๋ก ์ง์ธ ์ฝ๋๋ฟ์ด๊ณ , ๋นํฉํ ๋๋จธ์ง "์ด๊ฑฐ C ์ธ์ด๋ก ๋์ด์๋๋ฐ, Node.js๋ก ์์ํ๊ฒ ์ง์ธ ๋ฒ์ ์ ์์ด?"๋ผ๋ฉฐ ์๋ฑํ ์ง๋ฌธ์ ์ด์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ์ ๋์ค ๊ธฐ๋ฐ์ ์คํ ํ์ผ๊ณผ ์ด๋ฅผ ์กฐ์ํ๋ Node.js์ ๊ด๊ณ๋ฅผ ๋ชจ๋ฅด๋, ๋ชจ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์์ ํด๊ฒฐํ๋ ค๋ ์ข์ ํ๋ ์์ ๊ฐํ๋ฒ๋ฆฌ๋ ๊ฒ์ ๋๋ค.๊ฒฐ๊ตญ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ์ํ๋ก AI๊ฐ ์์คํ ์ FFmpeg ์ค์น๊ฐ ํ์ํ๋ค๋ฉฐ ๊ตฌ์ฒด์ ์ธ ์ด์์ฒด์ ๋ณ ์ค์น ๋ช ๋ น์ด๊น์ง ๋ ๋จน์ฌ ์ฃผ๋ ๋๋ก ์์กดํ๊ฒ ๋ฉ๋๋ค. ํฐ๋ฏธ๋์ ์ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ํจํค์ง๋ฅผ ์ค์นํ ๋ค ๋ค์ ์๋ฒ๋ฅผ ๊ตฌ๋ํ๊ณ , ๊ฐ๋จํ ์น ํ๋ฉด์ ํตํด ๋น๋์ค ํ์ผ์ ์ ๋ก๋ํด ๋ด ๋๋ค. ๊ทธ๋ฌ์ ํฐ๋ฏธ๋ ์ฐฝ์ 10ํผ์ผํธ, 50ํผ์ผํธ, 100ํผ์ผํธํ๋ฉฐ ๋ณํ ์งํ๋ฅ ์ด ์๋ฆ๋ต๊ฒ ์ฐํ๊ณ , ์์๊ฐ์ ๋ชจ๋ฐ์ผ์ฉ์ผ๋ก ์ต์ ํ๋ ํ์ผ์ด ๋๋ฑ ์์ฑ๋ฉ๋๋ค. ๋จ 10๋ถ ๋ง์ ๊ฑฐ๋ํ ๋ฏธ๋์ด ์ฒ๋ฆฌ ์๋ฒ๋ฅผ ์์ฑํ๋ค๋ ์ง๋ฆฟํ ์ฑ์ทจ๊ฐ๊ณผ ํจ๊ป, ์์ ์ด ์ด ๋ณต์กํ ๋ฐฑ์๋ ์์คํ ์ ์๋ฒฝํ ํต์ ํ๊ณ ์๋ค๋ ์์ฒญ๋ ์ฐฉ๊ฐ์ ๋น ์ง๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ธ๊น์ด ์ฃผ๋ ๋ฌด์์ด ์ ํน์ ๋๋ค.ํ์ง๋ง ์ง์ง ์ค๋ฌด์ ์ํฌํ๋ก์ฐ๋ ์ฝ๋๊ฐ ๋ก์ปฌ์์ ๋์๊ฐ๋ ์์ ๋ถํฐ ๊ฑฐ๋ํ ์ฅ๋ฒฝ์ ๋ง์ฃผํ๊ฒ ๋ฉ๋๋ค. ์ด ์ฝ๋๋ฅผ ์ค์ ์ด์ ์๋ฒ์ ๋ฐฐํฌํ๊ณ ์ฌ์ฉ์ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๊ธฐ ์์ํ๋ฉด ๋์ฐํ ์ฌ์์ด ์์๋ฉ๋๋ค. Node.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋(Single Threading) ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ด๋ฒคํธ ๋ฃจํ ๋ชจ๋ธ๋ก ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋จ ํ๋์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ฌด๊ฑฐ์ด ๋ฏธ๋์ด ์ธ์ฝ๋ฉ๊ณผ ๊ฐ์ CPU ์ง์ฝ์ ์ธ ์ฐ์ฐ์ ์์ํ๋ ์๊ฐ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๊ฝ ๋งํ๋ฒ๋ฆฌ๋ ๋ธ๋กํน ํ์์ด ๋ฐ์ํ๊ณ , ๊ทธ๋์ ๋๊ธฐ ์ค์ด๋ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ฉ์์ ์ ์ ์์ฒญ์ ํ์์์์ผ๋ก ๊ทธ๋๋ก ๋์ด์ง๊ฒ ๋ฉ๋๋ค.๊ฒ๋ค๊ฐ ์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฌํ๋ ์์์ ์์ ๋ฐ์ด๋๋ฆฌ(Binary) ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ์ชผ๊ฐ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ฒ์ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด ๋ฌธ์ ๋ ๋์ฑ ์ฌ๊ฐํด์ง๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์๊ฒ ์ชผ๊ฐ์ด ํ๋ฅด๊ฒ ํ๋ ์คํธ๋ฆผ(Stream)๊ณผ ์์ ์ ์ฅ์์ธ ๋ฒํผ(Buffer)์ ๊ฐ๋ ์์ด ์์ ๋ฐ์ดํฐ๋ฅผ ํต์งธ๋ก ์ฒ๋ฆฌํ๋ ค๋ค ๋ณด๋, ํ(Heap) ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์์๊ฐ์ ํ๊ณ๋ฅผ ์ด๊ณผํ๋ฉฐ ํญ์ฃผํ๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ ์ค๋ฌด ์๋ฒ๋ ํธ๋ํฝ์ด ์กฐ๊ธ๋ง ๋ชฐ๋ ค๋ CPU ์ ์ ์จ์ด 100%๋ก ์น์๊ณ , ํํ ๋งํ๋ OOM, ์ฆ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ผ๋ก ๊ต์์ ๋ด๋ฉฐ ๋ง๋น๋๊ณ ๋ง๋๋ค. ์ฌ์ฉ์๋ค์ ํ๋ฉด์ ๋ฌดํ ๋ก๋ฉ์ ๋น ์ง๊ณ ์ด์ ์ธํ๋ผ๋ ๊ฒฝ๊ณ ์๋ฆผ์ผ๋ก ๋๋ฐฐ๋๋ ์์ฐํ ์ํฉ์ด ํผ์ณ์ง๋ ๊ฒ์ ๋๋ค.์ด์์ฒด์ ์ ์ปดํจํฐ ๊ณตํ์ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์๋ ๊ทธ์ AI์๊ฒ ํฐ๋ฏธ๋์ ์๋ป๊ฑด ์๋ฌ ๋ก๊ทธ๋ง ๊ณ์ ๋์ ธ์ฃผ๋ฉฐ ํด๊ฒฐ์ฑ ์ ๊ตฌ๊ฑธํ๊ฒ ๋ฉ๋๋ค. ์ด๋๋ถํฐ ๊ฐ๋ฐ์๋ ์ ์ ์๋ ๊ฑฐ๋ํ ๊ธฐ์ ์ ํญํฌ์๋ฅผ ๋ง๊ฒ ๋ฉ๋๋ค. AI๋ ์๋ฌ๋ฅผ ๋ฎ๊ธฐ ์ํด ๋์ปค๋ฅผ ์ด์ฉํด ํ๊ฒฝ์ ์ปจํ ์ด๋ํํด์ ๋ฆฌ์์ค๋ฅผ ์ ํํด์ผ ํ๋ค๊ฑฐ๋, ๊นํ๋ธ ์ก์ ์ผ๋ก CI/CD ์๋ํ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํด๋ผ, ์ค์ผ์ผ ์์์ ํด์ผ ํ๋ ๋ค์ค ์ธ์คํด์ค ๊ฐ ์ํ ๊ณต์ ๋ฅผ ์ํด ๋ ๋์ค๋ฅผ ๋ถ์ฌ์ผ ํ๋ค๋ ๋ฑ ์๋ง์ ๋ฏ์ ์ธํ๋ผ์ ์ํคํ ์ฒ ๊ฐ๋ ๋ค์ ์์๋ด๊ธฐ ์์ํฉ๋๋ค. ๊ธฐ์ด ์ฒด๋ ฅ์ด ์๋ ์ํ์์ ์ด ๊ฑฐ๋ํ ๊ธฐ์ ์ ํ๋๋ฅผ ๋ง๋ฅ๋จ๋ฆฌ๋ฉด, ๊ทธ์ AI๊ฐ ํ๋ผ๋ ๋๋ก ์ ์ ์๋ ๋์ปคํ์ผ๊ณผ ์ค์ ๊ฐ๋ค์ ๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ์ผ๋ฉฐ ๋์๋ ์๋ฌ์ ๋ฏธ๊ถ, ์ฆ ์ ๋ ์ค์ค๋ก ๋ซ๊ณ ๋๊ฐ ์ ์๋ ๊ฑฐ๋ํ ํต์ ์ ๋ฒฝ์ ๋ถ๋ชํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.์ด์ ์ด์์ฒด์ ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฑ ๊ธฐ๋ฐ ๋ด์ฉ์ ์๋ฒฝํ ์๋ค๋ ๊ฐ์ ํ์, ์ด๋ป๊ฒ ์ฌ๋ฌ ๋ณ์๋ฅผ ๋ค ๊ณ ๋ คํ์ฌ ํ์ฅ์ฑ ์๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ ๋๋ก ๋ ์๋น์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์์๊ฐ ์ ์๋์ง ๊ทธ ํ๋ฆ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฆฌ๋ฅผ ์๋ ๊ฐ๋ฐ์๋ ์์๋ถํฐ ์ ๊ทผ๊ณผ ํ๋กฌํํธ์ ์์ค์ด ์์ ํ ๋ค๋ฆ ๋๋ค. ์ด๋ค์ Node.js๋ ํ์ฌ ์ฌ์ฉ ์ค์ธ ๊ธฐ์ ์ด ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ ์ง์ ์ฒ๋ฆฌํ๋ ์์ง์ด ์๋๋ผ ๊ฐ๋ฒผ์ด ๊ด์ ํ ์ญํ ์์ ์ธ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ค์ ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ C ์ธ์ด๋ก ์ปดํ์ผ๋ ๊ฐ๋ ฅํ ์ ๋์ค ๊ธฐ๋ฐ ๋ฐ์ด๋๋ฆฌ ๋๊ตฌ์ธ FFmpeg๊ฐ OS ๋จ์์ ์ง์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณํฉ๋๋ค.๊ทธ๋์ AI์๊ฒ ๋จ์ํ ์ฝ๋๋ฅผ ์ง๋ฌ๋ผ๊ณ ํ๋ ๋์ , Node.js ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋งํ์ง ์๋๋ก ์ธ๋ถ ์ ๋์ค ์คํ ํ์ผ์ธ FFmpeg๋ฅผ ์์ ํ๋ก์ธ์ค(Child Process)๋ก ๋์ฐ๊ณ , ๊ฑฐ๋ํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํฌ๊ธฐ์ ๋ฒํผ๋ก ์ชผ๊ฐ์ด ์ฒ๋ฆฌํ๋ ์คํธ๋ฆผ ๋ฐฉ์์ผ๋ก ํ์ดํ๋ผ์ธ์ ์ฐ๊ฒฐํด ๋ฌ๋ผ๊ณ ๋ช ํํ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ์์๋ ๋จ ๋ช ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ๋ง ์ ์ ํ ์ฑ ํ์ค ์ ์ถ๋ ฅ ์คํธ๋ฆผ(stdio)์ผ๋ก ๋น๋๊ธฐ ํต์ ํ๋ฉฐ ์งํ๋ฅ ์ ์์ ํ๊ฒ ๋ฐํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์ธ ์๋ฒ๋ ๋น๋ก์ ์จํต์ด ํธ์ด๊ณ ๋ฌด๊ฑฐ์ด ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ฐ์ด๋ธ ์ฑ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์ ์์ ์ผ๋ก ์๋ํ ์ ์๊ฒ ๋ฉ๋๋ค.ํ์ง๋ง ๋น์ผ 16์ฝ์ด ์๋ฒ๋ฅผ ์๋ํด ๋๊ณ ๋จ์ผ ํ๋ก์ธ์ค๋ง ์ฐ๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ์ค๋ ๋์ ํ๋์จ์ด ์์์ ๋ง๋ํ ๋ญ๋น์ด๋ฏ๋ก, ์ด์์ฒด์ ์ ๊ฐ์ฉ ์์์ 100% ๋์ด์ฐ๊ธฐ ์ํด ๋ฉํฐ ํ๋ก์ธ์ฑ ๊ธฐ๋ฐ์ ํด๋ฌ์คํฐ๋ง(Clustering) ๊ธฐ๋ฒ์ ๋์ ํ๊ฒ ๋ฉ๋๋ค. CPU ์ฝ์ด ์๋งํผ ์์ปค ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ฐ ํด๋ก ์ฒ๋ผ ๋ณต์ ํ์ฌ ์์์ง๋ ์๋ง์ ํธ๋ํฝ์ ๋ณ๋ ฌ๋ก ๋ฐ์๋ผ ๋ถ์ฐ ์ฒ๋ฆฌ์ ๋ผ๋๋ฅผ ์ธ์ฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ 16๊ฐ์ ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ๋ฌด๋ถ๋ณํ๊ฒ ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ ๋์์ ์์ํ๋ฉด ํ์ ๋ CPU ์ ์ ์จ๊ณผ ๋์คํฌ I/O๋ฅผ ์๋ก ๊ฐ์๋จน์ผ๋ฉฐ ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ ํญ๋ฐ๋ก ์ธํด ๋ค์ ์์คํ ์ด ๋ค์ด๋๋ ์น๋ช ์ ์ธ ๋๋ ๋ง๊ฐ ์๊น๋๋ค.๋ฐ๋ก ์ด ์ง์ ์์ ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ธ IPC(Inter-Process Communication) ์๋ฆฌ๊ฐ ๋งนํ์ฝํฉ๋๋ค. ์์ปค๋ค์ ํธ๋ํฝ์ ๋ฐ๋๋ผ๋ ์ง์ ๋ฌด๊ฑฐ์ด ์ธ์ฝ๋ฉ ์์ ์ ์ํํ์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ด๋์ด ์ธํฐํฐ ์ญํ ์ ํ๋ IPC ์ฑ๋์ ํตํด ๋จ 1๊ฐ์ ํ๋ผ์ด๋จธ ํ๋ก์ธ์ค์๊ฒ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ก ๊ฒฐ์ฌ๋ฅผ ์ฌ๋ฆฌ๋๋ก ๊ตฌ์กฐ๋ฅผ ์งญ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ๋ ์ด ์์ฒญ๋ค์ ์ค์ ๋๊ธฐ์ด์ ๋ด์๋๊ณ ์ฒ ์ ํ๊ฒ ์์ฐจ์ ์ผ๋ก ํ๋์จ์ด๊ฐ ๋ฒํธ ์ ์๋ ๋งํผ๋ง ์์ ์ ํต์ ํ์ฌ, ๋ฌด๋ถ๋ณํ ์์ ํฌ์์ ๋ง๋ ์๋ฒฝํ ๋๊ธฐํ์ ๋ณ๋ชฉ ์ ์ด ์์คํ ์ ์์ฑํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.์ด๋ ๊ฒ ๋ค์ค ํ๋ก์ธ์ค ํ๊ฒฝ์ด ์๋ฒฝํ ๋์๊ฐ๋ ๋ฏํด๋, ๋ค์ค ์ธ์คํด์ค ๋ฐฐํฌ ์ํฉ์ด๋ ํด๋ฌ์คํฐ ํ๊ฒฝ์์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์๋ํ ๋ ์ ์ ์๋ ์ธ์ฆ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ ํ๊ฒจ๋ด๋ ๋ ๋ค๋ฅธ ์ค๋ฌด์ ๋ณ์์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ๋ก๋ถํฐ ๊ณ ์ ํ๊ฒ ํ ๋น๋ฐ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ฒ ์ ํ ๋ ๋ฆฝ๋์ด ์์ด, 1๋ฒ ํ๋ก์ธ์ค์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๋ฅผ 2๋ฒ ํ๋ก์ธ์ค๊ฐ ์ ํ ์ฝ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ ํ์ ๋๋ฌธ์ ๋๋ค. ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ฉด ์ฝ๋๊ฐ ๊ณ ์ฅ ๋ฌ๋ค๊ณ ๋นํฉํ๋ฉฐ ๋ AI์๊ฒ ์๋ฌ ๋ก๊ทธ๋ฅผ ๋์ง๊ฒ ์ง๋ง, ์ปดํจํฐ ๊ณตํ์ ๊ธฐ๋ฐ ์ง์์ด ์๋ค๋ฉด ์ด๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๋ค์ ๋น์ฐํ ํ์์์ ์ธ์งํ๊ณ ์ค์ค๋ก ์ฃผ๋์ ์ธ ์ํคํ ์ฒ ํ์ฅ์ ๊ฒฐ์ ํฉ๋๋ค. ๋ฐ๋ก ์ด๋, AI๊ฐ ๋์ ธ์ฃผ๋ ๋ฏ์ ๋จ์ด๋ก์๊ฐ ์๋๋ผ ๊ฐ๋ฐ์ ๋ณธ์ธ์ ๋ช ํํ ์๋ ํ์, ๋ชจ๋ ์์ปค๊ฐ ๊ณตํต์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์๋ ์ด๊ณ ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Redis๋ฅผ ๋์ ํ์ฌ ์ธ์ ๊ณผ ๋๊ธฐ์ด ์ํ๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋๊ธฐํํ๋ ์ง์ ํ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ํคํ ์ฒ๋ก ์งํ์ํค๋ ๊ฒ์ ๋๋ค.์ด์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ์ค๋ฌด์์ ๋น์ฐํ๊ฒ ๋์ ํ๋ Redis, RabbitMQ, Docker, Kubernetes์ ์๋ํ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ฐ์ ํ๋์ ์ธ ์ธํ๋ผ ๋๊ตฌ๋ค๋ ๊ฒฐ์ฝ ๋ง๋ฒ์ด ์๋๋๋ค. ์ด ๋ชจ๋ ๊ฒ๋ค์ ๊ฒฐ๊ตญ ์ ๋์ค์ ํ์ผ ์์คํ , ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋คํธ์ํฌ ์์ผ์ด๋ผ๋ ๋ก์ฐ๋ ๋ฒจ์ ๊ธฐ๋ฐ ์๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ๋์ํ๊ณ ์์ต๋๋ค. AI๋ ์ฐ๋ฆฌ์๊ฒ ๋น์ฅ ๊ตฌ๋๋๋ ํํ์ ์ฝ๋๋ฅผ ์ฃผ๋ ๋ฐ๋ ์ฒ์ฌ์ ์ด์ง๋ง, ๋น์ฆ๋์ค์ ๋งฅ๋ฝ์ ํ์ ํ์ฌ ๊ฑฐ๋ํ ์์คํ ์ ์ฒด์ ๊ตฌ์กฐ์ ๋ผ๋๋ฅผ ์ธ์ฐ๊ณ ๋ณ๋ชฉ ์ ์ดํ๋ฉฐ ์น๋ช ์ ์ธ ๋ณด์๊ณผ ํ์ฅ์ฑ์ ์ฑ๊ธฐ๋ ์ผ์ ์ ํ ์ฑ ์์ง์ง ์์ต๋๋ค.์ 'AI ๋ธ๊น์ ์๋' ์๋ฆฌ์ฆ ๊ฐ์์์๋ ์ค๋ช ์ ํธ์๋ฅผ ์ํด Node.js๋ฅผ ์ฃผ๋ ๋๊ตฌ๋ก ๋ค๋ฃจ๊ณ ์์ง๋ง, ์ง๊ธ๊น์ง ๋ง์๋๋ฆฐ ์ด ๋ณธ์ง์ ์ธ ์์คํ ์ค๊ณ์ ํ๋ฆ์ ์ ๊ธฐ์ตํ์ ๋ค๋ฉด ์ธ์ด๋ ํ๋ ์์ํฌ๋ ๋ ์ด์ ์ค์ํ์ง ์๊ฒ ๋ฉ๋๋ค. ์ฌ๋ฌ๋ถ์ด ํ์ ์์ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ , ์ด๋ค ๋ณต์กํ ํ๋ก์ ํธ๋ฅผ ๋ง์ฃผํ๋ ์ด ๊ธฐ๋ฐ ์๋ฆฌ๋ฅผ ์๋ฒฝํ๊ฒ ๋์ผํ๊ฒ ์ ์ฉํ์ค ์ ์์ต๋๋ค. ๋์๊ฐ ์๋ก์ด ๊ธฐ์ ์ ์ฅ๋ฒฝ์ ๋ง์ฃผํ์ ๋ ์ค์ค๋ก ์ด๋ป๊ฒ ๊ทธ ์ด๋ฉด์ ๋์ ์๋ฆฌ๋ฅผ ์ฐพ์๋ณด๊ณ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํด์ผ ํ๋์ง, ์์คํ ์ ์ฒด๋ฅผ ์กฐ๋งํ๋ ๊ฑฐ๋ํ ๊ด์ ์ ์ป์ผ์ค ์ ์์ ๊ฒ์ ๋๋ค.๋ฌผ๋ก , ์ต๊ทผ ๋ฑ์ฅํ Claude Code๋ Codex, GitHub Copilot ๋ฑ ์ฝ๋๋ฅผ ์๋ํํ๊ณ ์ค๊ณ๋ฅผ ๋๋ ๊ธฐ์ ์ด ํจ๋ฌ๋ค์์ ๋ค๋ฐ๊ฟ ๋งํผ ์์ฒญ๋๊ฒ ๋ฐ์ ํ ๊ฒ์ ๋ถ์ ํ ์ ์๋ ์ฌ์ค์ ๋๋ค. ํ์ง๋ง ์๋ฌด๋ฆฌ ๋ฐ์ด๋ ๋ช ๊ฒ์ด๋ผ๋ ๊ทธ๊ฒ์ ์ฅ๋ ๊ฒ๊ฐ์ ๊ธฐ์ด ์ฒด๋ ฅ๊ณผ ๊ฒ์ ์ ๋ฐ๋ผ ๊ทธ ์๋ ฅ์ด ๊ฒฐ์ ๋๋ฏ, ์ด ๊ฒฝ์ด๋ก์ด ๋๊ตฌ๋ค ์ญ์ ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์๋ ๋งํผ๋ง, ์ฐ๋ฆฌ๊ฐ ํต์ ํ ์ ์๋ ์์ผ์ ํฌ๊ธฐ๋งํผ๋ง ๊ทธ ์ง๊ฐ๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.๊ตฌ์กฐ์ ๋งฅ๋ฝ ์์ด AI๊ฐ ์์๋ด๋ ์๋ง์ ๊ธฐ์ ์ ๊ฐ๋ ๊ณผ ์ฝ๋๋ฅผ ๋ง ๊ฐ์ ธ๋ค ๋ถ์ด๊ณ ์๋ฌ๊ฐ ๋๋ฉด ๊ทธ๋๊ทธ๋ ๋๊ฐ๋ฆผ์ผ๋ก ๋์งํ๋ ์์ผ๋ก ์์คํ ์ ๊ตฌ์ถํ๋ฉด, ์ํํธ์จ์ด๋ ์ด๋ ์๊ฐ ๊ทธ ๋๊ตฌ๋ ๋ฐฐํฌ๋ ์ ์ง๋ณด์๋ฅผ ๊ฐ๋นํ ์ ์๋ ์ธ์ ๋ฌด๋์ง์ง ๋ชจ๋ฅด๋ ์ฌ์๋๊ฐ์ด์, ๊ฑท์ก์ ์ ์์ด ๋ค์ํจ ๊ฑฐ๋ํ ์คํ๊ฒํฐ ์ฝ๋์ ๋ช์ด ๋์ด๋ฒ๋ฆฌ๊ณ ๋ง๋๋ค.๋๊ตฌ๋ AI์ ๋์์ ๋ฐ์ ์ฝ๊ฒ ๊ฐ๋ฐ์ ์์ํ ์ ์๋ ์๋๊ฐ ๋๋ํ์ฌ ์ง์ ์ฅ๋ฒฝ์ ๊ทธ ์ด๋ ๋๋ณด๋ค ๋ฎ์์ก์ต๋๋ค. ํ์ง๋ง ๊ทธ ์ฌ์ด ์์์ ๋ฐํ์ผ๋ก ์ฌ๋ฌ ์ฅ๋ฒฝ๊ณผ ๊ธฐ์ ์ ํญํฌ์๋ฅผ ๋ซ๊ณ ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์ฉ ์๋น์ค๋ก ๋๊น์ง ๋๊ณ ๊ฐ ์ ์๋ ๋์ฌ๊ณผ ํ์ ์ค์ง ์ด๋ฌํ ๋ก์ฐ๋ ๋ฒจ ๊ธฐ๋ฐ ์ง์์์ ๋์ต๋๋ค. ๊ฒฐ๊ตญ AI๋ ๋ฐฉ๋ํ ์ง์์ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ๋๊ตฌ๋ณด๋ค ๋น ๋ฅด๊ฒ ์์ฑํด ์ฃผ๋ ์์ฃผ ๋๋ํ ๋ณด์กฐ ๊ฐ๋ฐ์์ผ ๋ฟ, ์์คํ ์ ์ฒด๋ฅผ ์ฑ ์์ง๋ ์ต์ข ์ค๊ณ์๊ฐ ๋ ์๋ ์์ต๋๋ค. ์ํ๋๊ป์ ์์คํ ์ ์๋ฆฌ๋ฅผ ์๋ฒฝํ๊ฒ ๊ฟฐ๋ซ๊ณ ์ด ๊ฐ๋ ฅํ ๋๊ตฌ์๊ฒ ์ ํํ ์ค๊ณ์ ์ง์๋ฅผ ๋ด๋ฆฌ๋, ๋์ฒด ๋ถ๊ฐ๋ฅํ ๋ฆฌ๋ ์ํคํ ํธ๋ก ์ฑ์ฅํ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ์์ํฉ๋๋ค.
- Likes
- 0
- Comments
- 1
- Viewcount
- 64
Q&A
'CSS Level 3: grid'์ ์ ๋ฆฌ๋ณธ PDF๋ ์ฌ๋ ค์ฃผ์๋ฉด ์ข์ ๋ฏ ํฉ๋๋ค.
์๋ ํ์ธ์, multineer ๋! ๊ท์คํ ์๊ฒฌ ๋จ๊ฒจ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค.์ ์ํด ์ฃผ์ 'CSS Level 3: grid' ์ ๋ฆฌ๋ณธ PDF๋ ๋ง์ ์๊ฐ์๋ถ๊ป ์ ๋ง ์ ์ฉํ๊ณ ํ์ํ ์๋ฃ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค. ๋ ์ด์์์ ์ก์ ๋ ์ง๊ด์ ์ผ๋ก ๋ณผ ์ ์๋ ๊ฐ์ด๋๊ฐ ์์ผ๋ฉด ํ์ต ํจ์จ์ด ํจ์ฌ ์ฌ๋ผ๊ฐ๋๊น์.ํด๋น ์๊ฒฌ ์ ๊ทน ๋ฐ์ํ์ฌ, ์๊ฐ์๋ถ๋ค์ด ํธํ๊ฒ ๋ค์ด๋ก๋๋ฐ์ ๋ณด์ค ์ ์๋๋ก ์ต๋ํ ๋น ๋ฅด๊ฒ ์ค๋นํด์ ์ ๋ก๋ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์๋ฃ๊ฐ ์ค๋น๋๋ ๋๋ก ๊ณต์ง์ฌํญ ๋ฑ์ ํตํด ๋น ๋ฅด๊ฒ ์๋ดํด ๋๋ฆด๊ฒ์.๊ทธ๋ฆฌ๊ณ ํน์ ์ ํฌ ์ฐ๋ฆฌ๋๋ค์ฝ๋ฉ ์คํ๋์ค์ ๋ค๋ฅธ ๋ผ์ธ์ (React, DOM, Next.js, Node.js, Express ๋ฑ)์ด๋ ์ ์ฒด ์๋ฆฌ์ฆ ๊ฐ์์๋ ๊ด์ฌ์ด ์์ผ์๋ค๋ฉด ์ธ์ ๋ jeony0535@naver.com์ผ๋ก ํธํ๊ฒ ์ฐ๋ฝํด ์ฃผ์ธ์!์ธ์ ๋ ์ฌ์ฉํ์ค ์ ์๋ ์ต๋ ํ ์ธ์ด ์ ์ฉ๋ ์ฟ ํฐ์ ๋ฐ๋ก ๋ฐ๊ธํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.๋ฐ์์ ์์ค์๋ ๊ฐ์๋ฅผ ๋ ํ์ฑํ๊ฒ ๋ง๋ค ์ ์๋ ์ข์ ์๊ฒฌ ๋๋์ด ์ฃผ์ ์ ๋ค์ ํ๋ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด๊ณตํ์๊ณ , ํ์ตํ์๋ค ๊ถ๊ธํ ์ ์ด ์๊ธฐ์๋ฉด ์ธ์ ๋ ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์!
- Likes
- 0
- Comments
- 2
- Viewcount
- 70




