์ฝ๋ฉ ํ ์คํธ, ์ฝ๋ ๋ฆฌ๋ทฐ ํ ์คํธ, ๊ธฐ์ ๋ฉด์ ์ ํ ์ฑ์์ ์ค๋นํ๋ ๋ชจ๋ฐ์ผ ํ์ต ์ฑ์ ๋๋ค. ๋ฐฑ์๋ ยท ํ๋ก ํธ์๋ ยท ํ์คํ ์ฝ์ค ์ค์์ ๊ณ ๋ฅด๋ฉด ์ฝ์ค์ ๋ง๋ ๋ฉด์ ์ง๋ฌธ๊ณผ ์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ๋์ค๊ณ , ํ๋ฃจ 10๋ถ์ฉ CS ์ด๋ก ยทํด์ฆยท์๊ณ ๋ฆฌ์ฆ ์ ํยท๋ฉด์ ์นด๋๋ก ๊พธ์คํ ํ์ตํ๋๋ก ์ค๊ณํ์ต๋๋ค.
์น์์ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ โ jumpprogrammer.app ์ค์น ยท ๋ก๊ทธ์ธ ์์ด ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ์ฐ๊ณ , ํด๋ํฐ์์๋ ํ ํ๋ฉด์ ์ฑ์ฒ๋ผ ์ค์นํ ์ ์์ต๋๋ค (PWA).
| ๊ธฐ๊ธฐ | ์ค์น ๋ฐฉ๋ฒ |
|---|---|
| Android | Chrome ์์ ์ด๊ณ ํ ํ๋ฉด์ [์ฑ ์ค์น] ๋ฒํผ, ๋๋ ๋ฉ๋ด โบ ์ฑ ์ค์น |
| iPhone ยท iPad | Safari ์์ ์ด๊ณ ๊ณต์ ๋ฒํผ โบ ํ ํ๋ฉด์ ์ถ๊ฐ |
| PC | Chrome ยท Edge ์ฃผ์์ฐฝ์ ์ค์น ์์ด์ฝ |
| ํธ๋ | ๊ธฐ๋ฅ |
|---|---|
| ์๊ณ ๋ฆฌ์ฆ ยท ์ฝ๋ฉ ํ ์คํธ | 15๊ฐ ํ ํฝ ๊ฐ๋ ์ ๋ฆฌ + ๊ฐ๋ ํด์ฆ 122๋ฌธํญ ยท ์์ฃผ ์ถ์ ๋๋ ๋ฌธ์ ์ ํ 44๊ฐ๋ฅผ Python ยท Java ยท Kotlin ยท C++ ยท JavaScript ๊ตฌํ ์์ 80๊ฐ๋ก ๋น๊ต ํ์ต (์ ํ๋ง๋ค ์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฅธ ๊ตฌํ 1~3๊ฐ์ง ยท ์ฝ๋ ์ค์ ์ฐ๊ฒฐ๋ ํต์ฌ ํด์ค) |
| ์ฝ๋ ๋ฆฌ๋ทฐ ํ ์คํธ | ๋ฐฑ์๋ Spring Boot(Java ยท Kotlin ์ ํ) / Node.jsยทNestJS / DjangoยทFlask, ํ๋ก ํธ์๋ React / Vue ๋ณ ๊ฐ์ ํจํด ํ์ต 10๊ฐ(๊ฐ์ ์ ยทํ ์ฝ๋, ๋ณ๊ฒฝ์ diff, ๋ฆฌ๋ทฐ ์ฒดํฌ๋ฆฌ์คํธ)์ ๋ฆฌ๋ทฐ ์ค์ ํด์ฆ 6๊ฐ(๋ฌธ์ ์ค ์ฐพ๊ธฐ โ ๋ฌธ์ ์ ๊ณ ๋ฅด๊ธฐ โ ์ฑ์ ยท ๋ชจ๋ฒ ๋ฆฌ๋ทฐ ยท ๋ฒ ์คํธ ๊ฐ์ ์) โ ์ด 80๊ฐ |
| ๊ธฐ์ ๋ฉด์ CS | 24๊ฐ ์นดํ ๊ณ ๋ฆฌ โ ๊ณตํต(OS ยท ๋คํธ์ํฌ ยท ์๋ฃ๊ตฌ์กฐ ยท ๋ณด์ ยท JS/TS ยท OOP ยท ์ค๋ฌด ยท AI Agent ํ์ฉ), ๋ฐฑ์๋(DB ยท Java ยท Kotlin ยท Python ยท Spring ยท NestJS ยท Django ยท ์ํคํ ์ฒ ยท ์ธํ๋ผ), ํ๋ก ํธ์๋(๋ธ๋ผ์ฐ์ ยท HTML/CSS ยท ์น ์ฑ๋ฅ ยท ํ๋ก ํธ์๋ ๋ณด์ ยท ์ํ ๊ด๋ฆฌยทํ ์คํธ ยท React ยท Vue) โ ์ด๋ก ๋ ์จ 119๊ฐ(์ฝ๊ธฐ โ ํ์ธ ํด์ฆ 3๋ฌธ์ โ ํ๋ฆฌ๋ฉด ์ด๋ก ๋ณต๊ท) + ํด์ฆ 417๋ฌธํญ + ๋ฉด์ ์ง๋ฌธ ์นด๋ 192์ฅ(๋ชจ๋ฒ ๋ต์ ยท ํต์ฌ ํค์๋ ์๊ฐ ์ฒดํฌ ยท ๊ผฌ๋ฆฌ ์ง๋ฌธ) |
| ๊ฐ๋ฐ์ ์ฝ์ค | ๋ฐฑ์๋ ยท ํ๋ก ํธ์๋ ยท ํ์คํ ์ค ์ ํ. ๋ฉด์ CS ยท ์ฝ๋ ๋ฆฌ๋ทฐ ยท ์ค๋์ ์ถ์ฒ์ด ์ฝ์ค์ ๊ณ ๋ฅธ ํ๋ ์์ํฌ์ ๋ง์ถฐ ๋์ค๊ณ , ํ์คํ์ ๋ ์ชฝ์ ๋ฒ๊ฐ์ ๊ท ํ ์๊ฒ ์ถ์ฒ |
| ํ์ต ๊ด๋ฆฌ | ์ค๋์ ์ถ์ฒ ยท ํ๋ฃจ ๋ชฉํ ยท ์ฐ์ ํ์ต์ผ ยท ํ์ต ์๋ ยท ์ค๋ต๋ ธํธ ยท ๋ถ๋งํฌ ยท ๋ค์ ๋ณผ ์นด๋ ยท ๋คํฌ ๋ชจ๋ ยท ํ์ต ๊ธฐ๋ก ๋ฐฑ์ /๋ณต์(์น) |
์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์์ ๋ ๋ชจ๋ 5๊ฐ ์ธ์ด๋ก ์ค์ ์คํํด ๊ฒ์ฆํฉ๋๋ค (
npm run validate).์ด ๊ณต๊ฐ ์ ์ฅ์์๋ ์ํ ์ฝํ ์ธ ๋ง ๋ค์ด ์์ต๋๋ค. ์ ์ฒด ํ์ต ์ฝํ ์ธ ๋ ๋น๊ณต๊ฐ ์ ์ฅ์๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ํ๋ง์ผ๋ก๋ ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์คํํด ๋ณผ ์ ์์ต๋๋ค. (์ฝํ ์ธ ๊ตฌ์ฑ)
| ํ ยท ์ค๋์ ์ถ์ฒ | ๊ฐ๋ ํด์ฆ ยท ํด์ค |
|---|---|
![]() |
![]() |
| ์ฝ๋ ๋ฆฌ๋ทฐ ํด์ฆ | ๋ฉด์ ์ง๋ฌธ ์นด๋ | ๋คํฌ ๋ชจ๋ |
|---|---|---|
![]() |
![]() |
![]() |
iPhone 17 ์๋ฎฌ๋ ์ดํฐ(iOS 27)์์ ์ด ์ ์ฅ์์ ์ํ ์ฝํ ์ธ ๋ก ์ดฌ์ํ์ต๋๋ค. ํ๋จ ๋ฐฐ๋๋ ๊ฐ๋ฐ ๋น๋์ ๋์ค๋ Google ํ ์คํธ ๊ด๊ณ ์ ๋๋ค.
์๋ฒ ์ด์ ๋น์ฉ ์์ด ์ฑ ์คํ ์ด์ ์ถ์ํ ์ ์๋ ๊ตฌ์ฑ์ ๋ชฉํ๋ก ํ์ต๋๋ค.
| ์์ญ | ์ ํ | ์ด์ |
|---|---|---|
| ์ฑ | Expo SDK 57 (React Native 0.86) + TypeScript | iOS ยท Android ยท ์น์ ํ๋์ ์ฝ๋๋ก. EAS ํด๋ผ์ฐ๋ ๋น๋๋ก ์คํ ์ด ์ถ์ |
| ์น (PWA) | Expo ์น ๋ด๋ณด๋ด๊ธฐ + Workbox ์๋น์ค ์์ปค + Cloudflare Workers(์ ์ ์์ฐ) | ๋ธ๋ผ์ฐ์ ยท ํ ํ๋ฉด ์ค์น ยท ์คํ๋ผ์ธ ์ง์. main ์ ํธ์ํ๋ฉด GitHub Actions ๊ฐ ๋ฐฐํฌ |
| ๋ผ์ฐํ | Expo Router (ํ์ผ ๊ธฐ๋ฐ) | ํญ + ์คํ ๋ค๋น๊ฒ์ด์ , ๋ฅ๋งํฌ ๊ธฐ๋ณธ ์ง์ |
| ์ํยท์ ์ฅ | Zustand + AsyncStorage | ํ์ต ๊ธฐ๋ก์ ๊ธฐ๊ธฐ์๋ง ์ ์ฅ โ ์๋ฒยทDB ์์ด ๋์, ์ด์์๊ฐ ์์งํ๋ ๊ฐ์ธ์ ๋ณด ์์ |
| ์ฝํ ์ธ | ์ฑ ๋ฒ๋ค์ ํฌํจ๋ TypeScript ๋ฐ์ดํฐ | CMSยทAPI ์๋ฒ ๋ถํ์. ์ฝํ ์ธ ์์ ์ EAS Update(OTA)๋ก ๋ฐฐํฌ |
| ์ฝ๋ ์์ | ์ฝ๊ธฐ ์ ์ฉ ๊ตฌ๋ฌธ ๊ฐ์กฐ(์์ฒด ํ์ด๋ผ์ดํฐ) + ํต์ฌ ํด์ค ์ค ๊ฐ์กฐ | ์คํ ์๋ฒ ์์ด 5๊ฐ ์ธ์ด ์์ ๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ ๊ณต |
| ์ฝํ ์ธ ๊ฒ์ฆ | ๋ก์ปฌ ์ปดํ์ผ๋ฌ ยท ์ธํฐํ๋ฆฌํฐ๋ก ๋ชจ๋ ๊ตฌํ ์์ ์คํ | ์ฑ์์ ์คํํ์ง ์๋ ๋์ , ์ฝํ ์ธ ๋ฅผ ์ธ ๋ ์ ํ์ฑ์ ๋ณด์ฅ |
| ์์ตํ | ์ฑ: Google AdMob (react-native-google-mobile-ads) ยท ์น: Google AdSense |
๋ฌด๋ฃ + ๊ด๊ณ . ๋์(UMP) ยท iOS ์ถ์ ํ์ฉ(ATT) ์ฒ๋ฆฌ ํฌํจ |
[ํ ํฝ] ๊ฐ๋
์ ๋ฆฌ โโถ ์ ํ ๋ชฉ๋ก โโถ [์ ํ] ์ด๋ฐ ๋ฌธ์ ์์ ์จ์ ยท ์ ๊ทผ ๋ฐฉ๋ฒ ยท ์์ ๋ฌธ์
โโ ๊ตฌํ ์์ 1~3๊ฐ์ง (์: ์ฌ๊ท vs ๋ฐ๋ณต, ์์ ํ์ vs ์ต์ ํ) ร 5๊ฐ ์ธ์ด
โโ ํต์ฌ ํด์ค โ ์ฝ๋ ์ค ๊ฐ์กฐ (๊ฐ์ ๋ด์ฉ์ด ์ธ์ด๋ง๋ค ๋ค๋ฅธ ์ค์ ์์ด ์ค ๋ฒํธ๋ฅผ ์ธ์ด๋ณ๋ก ์ง์ )
- ์ฝ๋๋ ์ฑ์์ ์คํํ์ง ์๊ณ ์ฝ์ผ๋ฉฐ ๋น๊ตํฉ๋๋ค. ์ธ์ด ์นฉ์ผ๋ก Python ยท Java ยท Kotlin ยท C++ ยท JavaScript ๋ฅผ ๋ฐ๊พธ๊ณ , ํด์ค ๋ฒํธ๋ ์ฝ๋ ์ค์ ๋๋ฅด๋ฉด ํด๋น ์ค์ด ๊ฐ์กฐ๋ฉ๋๋ค.
- ์์ ์ฝ๋์ ์ ํ์ฑ์ ์ฝํ
์ธ ๋ฅผ ์ธ ๋ ๋ณด์ฅํฉ๋๋ค.
npm run validate๊ฐ ์ ํ๋ง๋ค ์์ ๋ฌธ์ ์ ํ ์คํธ๋ฅผ ๋ชจ๋ ๊ตฌํ ยท ๋ชจ๋ ์ธ์ด๋ก ์คํํฉ๋๋ค. Java ยท Kotlin ยท C++ ๋ ํ ์คํธ ์ ๋ ฅ์ ๋ฆฌํฐ๋ด๋ก ๋ฃ์ ํ๋ค์ค ์ฝ๋๋ฅผ ๋ง๋ค์ด ์ปดํ์ผํ๊ณ , ํ์ค ์ถ๋ ฅ ๋ง์ปค๋ก ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํฉ๋๋ค (scripts/lib/harness). - ์ด์ ๋ฒ์ ์๋ ์ง์ ํ์ด ยท ์ฑ์ ๊ธฐ๋ฅ(๊ธฐ๊ธฐ ๋ด Pyodide ยท Piston ์คํ ์๋ฒ)์ด ์์์ง๋ง, ์คํ ์๋ฒ์ ์ด์ ๋น์ฉ ยท ๊ฒฉ๋ฆฌ ๋ณด์ ๋ถ๋ด์ผ๋ก ์ ๊ฑฐํ์ต๋๋ค. ๊ธฐ์กด ํ์ด ๊ธฐ๋ก์ ์ง์ฐ์ง ์๊ณ ๋ณด์กดํฉ๋๋ค.
- ์นดํ
๊ณ ๋ฆฌ๋ง๋ค ๋ ์จ 4
5๊ฐ(์ฝ๊ธฐ 37๋ถ: ์ ํ์ํ๊ฐ โ ํต์ฌ ๊ฐ๋ โ ์์ โ ๋ฉด์ ํฌ์ธํธ โ ํต์ฌ ์ ๋ฆฌ). ์คํฌ๋กค ์งํ๋ฅ ๋ก ๋๊น์ง ์ฝ์๋์ง ๊ธฐ๋กํ๊ณ , ์ ์ฝ์ ยท ์ฝ๋ ์ค ยท ์๋ฃ ยท ์ดํดํจ ์ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค. - ํด์ฆ ๋ฌธํญ์
lessonId๋ฅผ ๋ฌ์ ๋ ์จ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ๋ ์จ์ ์ฝ์ ๋ค ์ฐ๊ฒฐ๋ ๋ฌธ์ ์ค ์ ํผ ๋ฌธ์ ๋ฅผ ๋จผ์ 3๊ฐ ๋ด๊ณ (์ ์ถํ๋ฉด ์๋ฃ, 2/3 ์ด์์ด๋ฉด ์ดํดํจ), ํด์ฆ ํด์ค ยท ๊ฒฐ๊ณผ ยท ์ค๋ต๋ ธํธ์์๋ ๊ด๋ จ ๋ ์จ์ผ๋ก ์ด๋ํฉ๋๋ค. ๋ ์จ์ ์คํ์ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋์์ค๋ฉด ํ๋ ํด์ฆ๊ฐ ๊ทธ๋๋ก ๋จ์ ์์ต๋๋ค. - ๊ฒ์ฆ ์คํฌ๋ฆฝํธ๊ฐ ๋ ์จ๋ง๋ค ํ์ธ ํด์ฆ๊ฐ 3๊ฐ ์ด์์ธ์ง, ํด์ฆ๊ฐ ์ค์ ๋ ์จ์ ๊ฐ๋ฆฌํค๋์ง, ์ฐ๊ฒฐ๋์ง ์์ ํด์ฆ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- ๊ฐ๊ด์์ ๋ณผ ๋๋ง๋ค ๋ณด๊ธฐ ์์๋ฅผ ์์ด ์ ๋ต ์์น๋ฅผ ์ธ์ ๋งํ ์ ์๊ฒ ํฉ๋๋ค. ๋ณด๊ธฐ ๊ตฌ์ฑ์ (๋ฌธ์ id, ์ง๊ธ๊น์ง ํผ ํ์)๋ก ์ ํด์ง๋ ๊ฒฐ์ ์ ๋ฌด์์๋ผ ํ ๋ฌธ์ ๋ฅผ ๋ณด๋ ๋์์๋ ๊ทธ๋๋ก์ด๊ณ , ๋ค์ ํ๋ฉด ์ง์ ๊ณผ ๋ค๋ฅธ ์ ๋ต ์์น๋ก ๋ฐ๋๋๋ค. ์ค๋์ ํด์ฆ ยท ๋ ์จ ํ์ธ ยท ์ค๋ต๋
ธํธ ยท ๋ถ๋งํฌ ๋ฑ ๋ชจ๋ ํด์ฆ ์ง์
๊ฒฝ๋ก์ ์ฝ๋ ๋ฆฌ๋ทฐ ์ฑ๋ฆฐ์ง์ ๋ฌธ์ ์ ๋ณด๊ธฐ๊ฐ ๊ฐ์ ์์ ๋ชจ๋(
src/features/progress/choices.ts)์ ์๋๋ค. - ์ค๋ต ํ ํ์(
correct+distractors) ๋ฌธ์ ๋ ์ค๋ต 5~7๊ฐ ์ค 3๊ฐ๋ฅผ ๊ณจ๋ผ ๋ณด์ฌ์ฃผ๊ณ (์ง์ ๊ณผ ๋ค๋ฅธ ์กฐํฉ), ํด์ค ์๋์ ์ด๋ฒ์ ๋ณด์ธ ์ค๋ต์ด ํ๋ฆฐ ์ด์ ๋ง ๋ณด์ฌ์ค๋๋ค. ์๊ณ ๋ฆฌ์ฆ ยท CS ๊ฐ๊ด์ 410๋ฌธํญ ๋ชจ๋ ์ค๋ต ํ ํ์์ด๋ฉฐ, ๊ณ ์ ๋ณด๊ธฐ(choices+answer) ํ์๋ ํ์ ํธํ์ผ๋ก ๋จ์ ์์ด ์์๋ง ์์ ๋๋ค.
- ํ๋กํ์ ์ฝ์ค(
track)์ ํ๋ ์์ํฌ(๋ฐฑ์๋framework, ํ๋ก ํธ์๋frontendFramework)๋ก ์ฝํ ์ธ ๋ฒ์๋ฅผ ์ ํฉ๋๋ค. ๋ฒ์ ๊ณ์ฐ์ ํ๋ฉด๊ณผ ๋ถ๋ฆฌ๋ ์์ ํจ์(src/features/progress/course.ts)๋ผ ๋จ์ ํ ์คํธ๋ก ๊ฒ์ฆํฉ๋๋ค. - ์ค๋์ ํด์ฆ ยท ๋ฉด์ CS ํญ ยท ํ์ต ์งํ ์์ฝ์ ๊ฐ์ ๋ฒ์๋ฅผ ์๋๋ค: ์ฝ์ค์ ๊ณตํต ยท ์ฝ์ค ์ชฝ ์นดํ ๊ณ ๋ฆฌ ์ค ๊ณ ๋ฅธ ํ๋ ์์ํฌ์ ์ธ์ด ยท ํ๋ ์์ํฌ ์นดํ ๊ณ ๋ฆฌ๋ง(Spring ์ Java ยท Kotlin, NestJS ยท React ยท Vue ๋ JavaScript ยท TypeScript, Django ๋ Python). ๋ฉด์ CS ํญ์ ์ด ๋ฒ์๋ฅผ ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ ๋๋จธ์ง ์นดํ ๊ณ ๋ฆฌ๋ ์๋์ ์ ์ด ๋ก๋๋ค.
- ์ค๋์ ํด์ฆ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ ์ฝ๋๊ฐ ์๊ฑฐ๋ ๋ด ์ธ์ด(์ฝ๋ฉ ํ ์คํธ ์ธ์ด + ๊ณ ๋ฅธ ํ๋ ์์ํฌ์ ์ธ์ด)๋ก ์ด ๋ฌธ์ ๋ง ๋ ๋๋ค. ๋ค๋ฅธ ์ธ์ด๋ก ์ด ๋ฌธ์ ๋ ์๊ณ ๋ฆฌ์ฆ ํญ์ ํ ํฝ ํด์ฆ์์ ํ ์ ์์ต๋๋ค.
- ํ์คํ์ ์ค๋์ ํด์ฆ CS ๋ฌธ์ ๋ฅผ ๋ฐฑ์๋ ยท ํ๋ก ํธ์๋ ยท ๊ณตํต ๋ฌถ์์์ ๋ฒ๊ฐ์ ๊ณ ๋ฅด๊ณ , ์ค๋์ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋ฉด์ ์ง๋ฌธ์ ๋ ์ง๋ง๋ค ๋ ์ชฝ์ ์๊ฐ๋ ค ์ถ์ฒํฉ๋๋ค. ์ฝ๋ ๋ฆฌ๋ทฐ ํญ์๋ ๋ฐฑ์๋/ํ๋ก ํธ์๋ ์ ํ์ด ์์ต๋๋ค.
- ์ ์ฅ๋ ํ์ต ๊ธฐ๋ก์ ๋ฒ์ ์ ๋๊ณ (
progress/migrate.ts) ์ฎ๊น๋๋ค. ์ฝ์ค ๋์ ์ ์ฌ์ฉ์๋ ๋ฐฑ์๋ ์ฝ์ค๋ก ์ด์ด์ง๋๋ค.
- ๊ฐ์ ๊ฐ์ ํจํด ยท ๋ฆฌ๋ทฐ ํด์ฆ๋ฅผ Java ์ Kotlin ์ฝ๋๋ก ๋ชจ๋ ์ ๊ณตํฉ๋๋ค. ์ฒ์์๋ ์ฝ๋ฉ ํ ์คํธ ๊ธฐ๋ณธ ์ธ์ด๋ฅผ ๋ฐ๋ผ๊ฐ๊ณ , ํ๋ฉด์ ์นฉ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
- ์ธ์ด ๋ฒ์ ์ฝํ ์ธ ๋ ์ฝ๋์ ์ฑ์ ์ค ๋ฒํธ๋ง ์๋ก ์ฐ๊ณ , ์ค๋ช ์ ๊ทธ ์ธ์ด์์ ๋ฌ๋ผ์ง๋ ํ๋๋ง ๋ฎ์ด์๋๋ค. ๊ฒ์ฆ ์คํฌ๋ฆฝํธ๊ฐ ์จ๊ฒจ์ง ์ด์ ์ ยท ์ค ๋ฒํธ ยท ๋ฎ์ด์ฐ์ง ์์ Java ์ฝ๋ ์์๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
| ์์น | ํ์ | ๊ท์น |
|---|---|---|
| ์ฑ: ํญ ํ๋ฉด ํ๋จ(ํญ ๋ฐ ์) | ๋ฐฐ๋ (320ร50) | ํญ์. ๋ถ๋ฌ์ค์ง ๋ชปํ๋ฉด ์๋ฆฌ๋ฅผ ์ฐจ์งํ์ง ์์ |
| ์ฑ: ํด์ฆ ยท ๋ฉด์ ์นด๋ ยท ์ฝ๋ ๋ฆฌ๋ทฐ ํด์ฆ๋ฅผ ๋ง์น๊ณ ๋๊ฐ ๋ | ์ ๋ฉด ๊ด๊ณ | ์ธ์ 2๋ฒ ๋ง์น ๋๋ง๋ค 1๋ฒ, ์ฑ ์คํ ์งํยท์ง์ ๊ด๊ณ ํ 3๋ถ๊ฐ ๋ ธ์ถ ์ ํจ |
| ์น: ํญ ํ๋ฉด ยท ์๊ณ ๋ฆฌ์ฆ ํ ํฝ ยท ์ ํ ยท ๊ฐ์ ํจํด ยท ๋ฆฌ๋ทฐ ํด์ฆ ยท ๋ฉด์ ์นดํ ๊ณ ๋ฆฌ ยท CS ๋ ์จ์ ์ฝํ ์ธ ์ฌ์ด | AdSense ๋ฐ์ํ ๋์คํ๋ ์ด | ๊ด๊ณ ์๋ฆฌ๊ฐ ์๋ ์ฝํ ์ธ ํ๋ฉด์์๋ง AdSense ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ํ๋ฉด์ ์ฎ๊ธธ ๋๋ง ์์ฒญ. ์ฑ์์ง์ง ์์ผ๋ฉด ์๋ฆฌ๋ฅผ ์ฐจ์งํ์ง ์์ |
- ๋ฌธ์ ๋ฅผ ํธ๋ ์ค(ํด์ฆ ์งํ ยท ์นด๋ ํ์ต)์๋ ๊ด๊ณ ๋ฅผ ๋์ฐ์ง ์์ต๋๋ค.
- ์น์ ๋ฉ๋ด ยท ๋ฒํผ ๊ฐ๊น์ด์ ๊ด๊ณ ๋ฅผ ๋์ง ์๋๋ก(์ค์ ํด๋ฆญ ๋ฐฉ์ง ์ ์ฑ ) ํญ ๋ฐ ์ ๊ณ ์ ๋ฐฐ๋ ๋์ ์ฝํ ์ธ ์ฌ์ด์ ๋ก๋๋ค.
- ๊ด๊ณ ID ๋ ์ ์ฅ์์ ๋ฃ์ง ์๊ณ ๋น๋ ํ๊ฒฝ ๋ณ์๋ก ์ฃผ์
ํ๋ฉฐ, ๊ฐ์ด ์์ผ๋ฉด ์ฑ์ Google ํ
์คํธ ๊ด๊ณ ๋ก, ์น์ ๊ด๊ณ ์์ด ๋์ํฉ๋๋ค. ์น ๋ฐฐํฌ ยท AdSense ์ค์ ์
docs/WEB.md์ ์์ต๋๋ค.
| ์์น | ๋ด์ฉ | ๊ณต๊ฐ ์ฌ๋ถ |
|---|---|---|
src/content/types.ts ์ ํ ํฝยท์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก |
์ฝํ ์ธ ์คํค๋ง | ๊ณต๊ฐ |
src/content/sample/ |
ํ ํฝ๋ง๋ค ์ผ๋ถ๋ง ๋ด์ ์ํ (์๊ณ ๋ฆฌ์ฆ ์ ํ์ ์ด๋ถ ํ์ ยท DFS/BFS ํ ํฝ๋ง, CS ์ด๋ก ์ ์ด์์ฒด์ ยท React ๋ง) | ๊ณต๊ฐ |
| ๋น๊ณต๊ฐ ์ ์ฅ์ | ์ ์ฒด ํ์ต ์ฝํ ์ธ (CS ์ด๋ก ยท ํด์ฆ ยท ์๊ณ ๋ฆฌ์ฆ ์ ํ ยท ์ฝ๋ ๋ฆฌ๋ทฐ ยท ๋ฉด์ ์นด๋, ๋ฐฑ์๋ ยท ํ๋ก ํธ์๋) | ๋น๊ณต๊ฐ |
src/content/data/ |
์ฑ์ด ์ค์ ๋ก ์ฝ๋ ์ฝํ
์ธ . npm run content:sync ๊ฐ ์ ์ฒด ์ฝํ
์ธ (์์ผ๋ฉด ์ํ)๋ฅผ ๋ณต์ฌ |
git ์ ์ธ |
์คํ ์ด ์ถ์์ฉ(production) ๋น๋๋ src/content/data ๊ฐ ์ ์ฒด ์ฝํ
์ธ ๊ฐ ์๋๋ฉด ์คํจํ๋๋ก ํด, ์ํ๋ก ์ถ์๋๋ ๊ฒ์ ๋ง์ต๋๋ค.
์ฝํ
์ธ ํ์๊ณผ ์์ฑ ๊ท์น์ docs/CONTENT_GUIDE.md ์ ์์ต๋๋ค.
npm install # ์ค์น ํ ํ์ต ์ฝํ
์ธ ๋ฅผ ์๋์ผ๋ก ์ค๋น (์ ์ฒด ์ฝํ
์ธ ๊ฐ ์์ผ๋ฉด ์ํ)
npm start # Expo ๊ฐ๋ฐ ์๋ฒ (QR ์ฝ๋๋ฅผ Expo Go ์ฑ์ผ๋ก ์ค์บ)
npm run web # ๋ธ๋ผ์ฐ์ ์์ ์คํ (๊ฐ๋ฐ ์๋ฒ)๊ด๊ณ ๊น์ง ํ์ธํ๋ ค๋ฉด ๊ฐ๋ฐ ๋น๋(npx expo run:ios / npx expo run:android)๋ก ์คํํฉ๋๋ค.
| ๋ช ๋ น | ์ค๋ช |
|---|---|
npm run typecheck |
์ฑ ยท ์คํฌ๋ฆฝํธ ํ์ ๊ฒ์ฌ |
npm run lint |
ESLint (React Compiler ๊ท์น ํฌํจ) |
npm test |
ํต์ฌ ๋ก์ง ํ ์คํธ (๋งํฌ๋ค์ด ํ์ ยท diff ยท ๊ฒ์ฆ ํ๋ค์ค ๋น๊ต ยท ์ถ๋ ฅ ํ์ ยท ์ค๋์ ํด์ฆ ๊ตฌ์ฑ ยท ์ฐ์ ํ์ต์ผ ยท ๋ฐฑ์ ํ์ผ) |
npm run build:web |
์น(PWA) ๋น๋ โ dist/ (์ฝํ
์ธ ํ์ด์ง๋ง๋ค ์ ๋ชฉ ยท ์ค๋ช
ยท ๋ณธ๋ฌธ HTML, ์๋น์ค ์์ปค ยท manifest ยท sitemap ยท robots.txt ยท ads.txt ํฌํจ) |
npm run preview:web |
์น ๋น๋๋ฅผ ๋ก์ปฌ ์ ์ ์๋ฒ๋ก ๋์ ํ์ธ |
npm run test:harness |
์ฝํ ์ธ ๊ฒ์ฆ์ฉ Java ยท Kotlin ยท C++ ํ๋ค์ค ํ ์คํธ (JDK, kotlinc, g++/clang++ ํ์) |
npm run validate |
์ฝํ ์ธ ๊ตฌ์กฐ ๊ฒ์ฆ + ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์์ 5๊ฐ ์ธ์ด ์คํ ๊ฒ์ฆ (python3, node, JDK 15+, kotlinc, g++/clang++ ํ์) |
src/
app/ # ํ๋ฉด (Expo Router)
(tabs)/ # ํ ยท ์๊ณ ๋ฆฌ์ฆ ยท ์ฝ๋ ๋ฆฌ๋ทฐ ยท ๋ฉด์ CS ยท ๋ง์ด
algorithm/ # ํ ํฝ(๊ฐ๋
์ ๋ฆฌ ยท ์ ํ ๋ชฉ๋ก) ยท ์ ํ ์์ธ(๊ตฌํ ์์ ยท ํต์ฌ ํด์ค)
review/ # ๊ฐ์ ํจํด ํ์ต ยท ๋ฆฌ๋ทฐ ์ค์ ํด์ฆ
interview/[id].tsx # CS ์นดํ
๊ณ ๋ฆฌ ์์ธ
quiz.tsx ยท cards.tsx # ํด์ฆ ์ธ์
ยท ๋ฉด์ ์นด๋ ์ธ์
notes ยท bookmarks ยท settings ยท privacy ยท onboarding
components/ # UI ์ปดํฌ๋ํธ (์ฝ๋ ๋ธ๋ก ยท diff ยท ๋งํฌ๋ค์ด ๋ ๋๋ฌ ๋ฑ)
content/ # ํ์ต ์ฝํ
์ธ (์คํค๋ง ยท ํ ํฝ/์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ยท ์ง์
์ )
sample/ # ๊ณต๊ฐ์ฉ ์ํ ์ฝํ
์ธ
data/ # ์ฑ์ด ์ฝ๋ ์ฝํ
์ธ (git ์ ์ธ)
features/
progress/ # ํ์ต ๊ธฐ๋ก ์ ์ฅ์ ยท ํต๊ณ ยท ์ค๋์ ์ถ์ฒ ยท ๋ฐฑ์
/๋ณต์
ads/ # ๊ด๊ณ : AdMob(์ฑ ยท ํ๋จ ๋ฐฐ๋ ยท ์ ๋ฉด ๊ด๊ณ ยท ๋์/ATT), AdSense(์น)
pwa/ # ์น ์ฑ ์ค์น(ํ ํ๋ฉด ์ถ๊ฐ) ์ํ
lib/ # markdown-lite ํ์ ยท ๊ตฌ๋ฌธ ๊ฐ์กฐ ยท diff ยท ๋ ์ง ์ ํธ
theme/ # ๋์์ธ ํ ํฐ (๋ผ์ดํธ/๋คํฌ)
scripts/ # ์ฝํ
์ธ ๋๊ธฐํ ยท ๊ฒ์ฆ(lib/harness: 5๊ฐ ์ธ์ด ์คํ ํ๋ค์ค) ยท ์์ด์ฝ ์์ฑ ยท ์น(PWA) ๋น๋
public/icons/ # ์น ์ฑ ์ค์น ์์ด์ฝ
.github/workflows/ # ์น ๋ฒ์ Cloudflare ๋ฐฐํฌ (wrangler.jsonc)
plugins/ # ๋ก์ปฌ Expo config plugin (iOS UIScene ์๋ช
์ฃผ๊ธฐ)
docs/ # ์ฝํ
์ธ ์์ฑ ๊ฐ์ด๋ ยท ์น ๋ฐฐํฌ ๊ฐ์ด๋ ยท ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ ยท ์คํฌ๋ฆฐ์ท
- ํ๋ก ํธ์๋ ํธ๋ (React ยท Next.js ์ฝ๋ ๋ฆฌ๋ทฐ, ๋ธ๋ผ์ฐ์ /ํ๋ก ํธ CS)
- ๊ณ์ ยท ๊ธฐ๊ธฐ ๊ฐ ํ์ต ๊ธฐ๋ก ๋๊ธฐํ
- ์ฝํ ์ธ ์๊ฒฉ ์ ๋ฐ์ดํธ (์ฑ ์ ๋ฐ์ดํธ ์์ด ๋ฌธ์ ์ถ๊ฐ)
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ํ ยท ๊ตฌํ ์์ ํ๋
- ์ง์ ํ์ด ยท ์ฑ์ (์คํ ์๋ฒ๋ฅผ ๋ฌด๋ฃ ยท ์์ ํ๊ฒ ์ด์ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ๋ฉด ์ฌ๊ฒํ )
- ๋ฉด์ ๋ต๋ณ ์์ฑ ๋ น์ ยท ์ ํ ํผ๋๋ฐฑ
- ๊ด๊ณ ์ ๊ฑฐ ์ธ์ฑ ๊ฒฐ์
Expo ยท React Native ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ํ๋ก์ ํธ์ ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Copyright (c) 2026 lgm1007. All rights reserved.
ํฌํธํด๋ฆฌ์คยท์ฐธ๊ณ ๋ชฉ์ ์ผ๋ก ์ด๋๋ง ํ์ฉํ๋ฉฐ, ์ฝ๋์ ํ์ต ์ฝํ
์ธ ์ ์ฌ์ฉยท๋ณต์ ยท๋ฐฐํฌ๋ ํ์ฉํ์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ๋ฅผ ์ฐธ๊ณ ํ์ธ์.




