Berriz
๊ธ๋ก๋ฒ ํฌ ํ๋ซํผ Berriz์ ํ๋ก ํธ์๋ ์ต๋ค ๊ธฐ์ฌ์๋ก, ๊ณ์ ยท์ธ์ฆ, ๋ฅ๋งํฌ, ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ, ์ปค๋จธ์ค, ์ค๋์ ์ค์๊ฐ ํฌํ๊น์ง ์ ํ ์ ๋ฐ์ ์ฃผ๋ํ์ต๋๋ค. ๋ฉ์ธ ํ๋ซํผ์ ์ถ์ผ๋ก ํํธ๋์ผํฐ ์์ฝยทTVOD ๋๋ฉ์ธ์ 0๋ถํฐ ๊ตฌ์ถํ๊ณ , ๋ผ์ด๋ธ ํ๋ ์ด์ด SDK ์ฝ์ด๋ฅผ ์ค๊ณํ์ผ๋ฉฐ, AI ์ฝ๋ฉ ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ดํฐ์ ํ๊ฐ ํ๋ค์ค๋ก ํ์ ๊ฐ๋ฐ ์์ฐ์ฑ๊น์ง ๋์ด์ฌ๋ ธ์ต๋๋ค.
3,566+
์ปค๋ฐ ยท 680 PR
์ต๋ค ๊ธฐ์ฌ์
~22๊ฐ์
2024.08 ~ ํ์ฌ
์งํ ์ค
7+
์๋น์ค / ๋ ํฌ
ํ๋ซํผ ยท ํํธ๋์ผํฐ ยท ์ค๋์
ยท ๋ผ์ด๋ธ
100๋ง+
์ ์
์ ๋ก ๋ฒ ์ด์ค โ ๊ธ๋ก๋ฒ ์ถ์
๊ธฐ์ฌ ์์ญ
01
๊ณ์ ยท ์ธ์ฆ
- ๋ฉ๋ก (Melon) ๊ณ์ ์๋ฐฉํฅ ์ฐ๋๊ณผ ๋ณธ์ธ์ธ์ฆ ์์คํ ์ ์ค๊ณยท๊ตฌํ โ ์ธ๋ฐ์ด๋/์์๋ฐ์ด๋ ๋์ ํ๋ก์ฐ, ์ฐ๋ ์ฌ์ ์ฒดํฌ๋ก ์ค๋ณต ์ฐ๋ ์ฐจ๋จ
- ์ธ์ ๋ง๋ฃ ์ ์ฌ๋ก๊ทธ์ธ ์ ๋, ์บ์ ๋ฌดํจํ ๋ฑ ์๋ณ ๋๋ฉ์ธ์ ์ธ์ ์ ํฉ์ฑ์ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌ
- ์ฐ๋ ์ ๋ณด ํ๋ฉด์ ํ์์กด(KST โ ๊ธฐ๊ธฐ TZ) ์ ์ ์ผ๋ก ๊ธ๋ก๋ฒ ์ฌ์ฉ์์๊ฒ ์ ํํ ์ฐ๋ ์๊ฐ์ ๋ ธ์ถ
02
ํ์ด๋ธ๋ฆฌ๋ ์ฑ ยท ์น๋ทฐ ๋ธ๋ฆฟ์ง
- ํตํ/๊ตญ๊ฐ ๋ฑ ์ฌ์ฉ์ ์ปจํ ์คํธ๋ฅผ ๋๊ธฐํํ๋ setAppValues ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํด ์ฑ-์น ํ๋ฉด ์ผ๊ด์ฑ์ ํ๋ณด
- openScheme ๊ธฐ๋ฐ ์ฑ ๋ด ๋ค๋น๊ฒ์ด์ ๋ถ๊ธฐ์ Pull-to-Refresh ์ ์ด๋ฅผ ํ์ค ๋ธ๋ฆฟ์ง ๊ท์ฝ์ผ๋ก ์ถ์ํ
- ๋๋ฒ๊ทธ ํจ๋ ๊ตฌ์ถ, ์๋๋ก์ด๋ ์น๋ทฐ ๋ซํ ์ ๋ชจ๋ฌ ์ํ ๋ณด์กด ๋ฑ ํ์ด๋ธ๋ฆฌ๋ ํน์ ์ ์ํ ์์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
03
๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ํ๋ ์ด์ด (AWS IVS)
- PlayerBase ์ถ์ ํด๋์ค ์์ IVS ์ฌ์ ์์ง์ ๊ตฌํ โ IVS/DRM ๋ฐฑ์๋๋ฅผ ๊ต์ฒด ๊ฐ๋ฅํ ๋คํ์ SDK ์ํคํ ์ฒ ํ๋ฆฝ
- EventEmitter โ zustand โ React ๊ตฌ๋ ์ ๋จ๋ฐฉํฅ ์ํ ๋๊ธฐํ๋ก UI๊ฐ ์ฌ์ ์ํ์ ๋ฐ์ํ ์ฐ๋
- ๋ฒํผ๋งยท์ก์ถ ์ข ๋ฃยท๋ฏธ์ง์ ๋ธ๋ผ์ฐ์ ๋ฑ error taxonomy๋ฅผ ์ ์ํ๊ณ , player-sdk / player-ui 2ํจํค์ง ๋ชจ๋ ธ๋ ํฌ๋ก ๋ถ๋ฆฌ
- Chromecast(CAF)ยทAirPlay ๋ฑ ์ธ๋ถ ์บ์คํ ๋๋ฐ์ด์ค ์ฐ๋
04
๋ฅ๋งํฌ (link.berriz.in)
- Universal Links / App Links / Custom Scheme ๊ธฐ๋ฐ ๋ฅ๋งํฌ์ OG ํ๊ทธ ๋ค๊ตญ์ด ์ง์์ผ๋ก ๊ธ๋ก๋ฒ ๊ณต์ ๊ฒฝํ ๊ตฌ์ฑ
- AWS Lambda ๊ธฐ๋ฐ OG fetch + ์คํจ ์ ๊ธฐ๋ณธ ํ๊ทธ๋ก ํด๋ฐฑํ๋ ๊ฒฌ๊ณ ํ ๋ฉํ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- CloudFront Functionsยทํธ์คํธ/path ๋ผ์ฐํ ์ฐ๊ณ, qa/cbt/sandbox ๋ค์ค ํ๊ฒฝ์ผ๋ก ์ด์ ์์ ์ฑ ํ๋ณด
05
์ค๋์ ยท ์ค์๊ฐ ํฌํ (Debutโs Plan)
- ํด์ธ ๋ก์ปฌ ํ์์กด ๋๋ฌธ์ ๋ง๊ฐ ์๊ฐ์ด '๋ค์๋ 00:00'๋ก ์๋ชป ๊ณ์ฐ๋๋ ๊ธ๋ก๋ฒ ํฌ๋ฆฌํฐ์ปฌ ๋ฒ๊ทธ๋ฅผ dayjs timezone ๊ธฐ๋ฐ KST ๊ณ ์ ๋ก์ง์ผ๋ก ์ฌ์ค๊ณ
- ๋ด์ยท๋ฐ๋ยท์๋๋ ๋ฑ 18๊ฐ ๊ธ๋ก๋ฒ ํ์์กด์ ์ปค๋ฒํ๋ Vitest ๋จ์ ํ ์คํธ๋ก ์๊ฐ ๊ฒฝ๊ณ ํ๊ท๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๋ด์ธ
- SSR/๋ฏธ๋ค์จ์ด ์ธ์ฆ ํ๋ฆ์ ์ ์ ์ต์คํฌํธ + ํด๋ผ์ด์ธํธ ๋ฆฌ๋ค์ด๋ ํธ + 404 ํด๋ฐฑ ๊ตฌ์กฐ๋ก ์ฌ๊ตฌ์ฑ
- ํฌํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌยทCountdown ํ์ด๋จธยทSVG ๋ ๋๋ง ์ต์ ํ๋ก ์ฒ๋ฆฌ๋(TPS) ๊ฐ์
06
์ปค๋จธ์ค ยท ํํธ๋์ผํฐ
- ์ปค๋จธ์ค(์ต) ์ํ ์์ธยท์ฃผ๋ฌธยท์ฅ๋ฐ๊ตฌ๋, VOD ์ฐ๊ด ์ํ์ ๋ธ๋ผ์ฐ์ ์น๋ทฐ ๊ฒฐ์ ํ๋ก์ฐ ๊ตฌํ
- ํํธ๋์ผํฐ ์์ฝ(๋ถํน)ยทTVOD ๊ตฌ๋งคํํยทํ์ฌ ๋๋ฉ์ธ์ 0๋ถํฐ ๊ตฌ์ถ โ 4๋จ๊ณ ๋ฉํฐ์คํ ๋ฑ๋ก ํผ๋ + ์ ์ฉ CRUD API ๋ ์ด์ด ์ค๊ณ
- container/presentational ๋ถ๋ฆฌ ํจํด๊ณผ TanStack Form + Zod ๊ฒ์ฆ ์ผ์ํ, ํผ โ API ์๋ฐฉํฅ ๋ณํ ์ ํธ ๋์
- zero-prop bypass render props๋ฅผ 26๊ฐ+ ์ปจํ ์ด๋์์ ์ ๊ฑฐํ๋ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ผ๋ก prop drilling ํด์
07
๋ค๊ตญ์ด ยท SSR ์์ ์ฑ
- next-intl ๊ธฐ๋ฐ ๋ค๊ตญ์ด ์ฒด๊ณ + Google Sheet ์ฐ๋ ๋ฒ์ญ ๋๊ธฐํ ํ์ดํ๋ผ์ธ์ ํ๋ซํผ ์ ๋ฐ์ ์ด์
- ํค๋ useId ๊ณ ์ ์ผ๋ก SSR ํ์ด๋๋ ์ด์ ๋ถ์ผ์น๋ฅผ ํด์ํ๊ณ , MD/SM ๋ฐ์ํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ผ๋ก ๋ ์ด์์ ์ผ๊ด์ฑ ํ๋ณด
- ์ํ๋ฐยท๋ฐํ ๋ค๋น ๋์ด๋ฅผ CSS ๋ณ์ํํด ํ์ด๋ธ๋ฆฌ๋ ํ๋ฉด์ safe-area ์ฒ๋ฆฌ๋ฅผ ํ์คํ
08
AI ๊ฐ๋ฐ ์๋ํ
- Jira ํด๋ง ๊ธฐ๋ฐ์ผ๋ก AI ์ฝ๋ฉ ์์ด์ ํธ ์์ ์ ์๋ spawnํ๋ ์ค์ผ์คํธ๋ ์ดํฐ ๋ฐ๋ชฌ์ GitHub Actions ์์ statelessํ๊ฒ ์ค๊ณ
- ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ์ถ์ ํ๋ ํ๊ฐ/๋ฒค์น๋งํฌ ํ๋ค์ค๋ฅผ ๊ตฌ์ถํด AI ํ์ฉ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋ฐ์ดํฐ๋ก ๊ด๋ฆฌ
- ๊ธฐํยท์ ์ฑ ยท์์ฌ๊ฒฐ์ ์๋ฃ๋ฅผ AI ์์ด์ ํธ๊ฐ ๋ฐ๋ก ์ฐธ์กฐํ๋ LLM ์ง์๋ฒ ์ด์ค(raw / pages / views 3๊ณ์ธต)๋ฅผ ๋จ๋ ์ค๊ณยท๊ตฌ์ถ
- Confluence ์ฒจ๋ถ ์ด๋ฏธ์ง ์๋ ์ธ์ ํ์ดํ๋ผ์ธ(Python)์ผ๋ก ์๋ฃ ์ ๋ฆฌ ๋น์ฉ์ ์ ๊ฑฐ
09
์ธํ๋ผ ยท DevOps / DX
- Terraform ๋์ ์ ํ์์ฑ์ ์ง์ ์ ์ํ๊ณ ์ฃผ๋ โ CloudFront ยท Lambda ยท S3 ๊ธฐ๋ฐ AWS ์ธํ๋ผ๋ฅผ IaC๋ก ์ ํํด ์์์ ์ฝ์ ์ค์ ์ ์ฝ๋ํํ๊ณ ์ฌํ ๊ฐ๋ฅํ ํ๋ก๋น์ ๋ยท๊ด๋ฆฌ ์ฒด๊ณ๋ฅผ ํ๋ฆฝ
- FE์ develop ํ๊ฒฝ Helm ๋ฐฐํฌ ๊ตฌ์ฑ(Deployment/Service/Ingress)๊ณผ ๋ฉํฐํ๊ฒฝ values ์์ฑ
- ๋จ์ผ GCE Ingress์์ host + path ์ ๊ท์ ๋ผ์ฐํ ์ ๊ตฌ์ฑํ๊ณ , Express ์๋น์ค๋ฅผ Cloud Armor WAFยทํฌ์ค์ฒดํฌ์ ํจ๊ป ์ ๊ท ๋ฐฐํฌ
- agent-browser + Vitest ๊ธฐ๋ฐ E2E ์ธํ๋ผ์ CI ์ํฌํ๋ก์ฐ(๋ณ๋ ฌ ์คํ, env ์ฃผ์ , graceful skip)๋ฅผ ๊ตฌ์ถ
๊ธฐ์ ์คํ
TypeScriptReactNext.js (App Router)TanStack Query / Formnext-intlZodTailwindCSS ยท EmotionTurborepo (pnpm)zustandAWS IVS PlayerAWS Lambda ยท CloudFrontTerraformGKE ยท Helm ยท ArgoCDCloud Armor (WAF)GitHub ActionsSentryStorybookVitest ยท Cypress ยท agent-browserLangChainPython