Feature + flag
์์ ์ ์ฑ, ์๋น์ค, ๊ธฐ๋ฅ์ ์ด๋ค ๊น๋ฐ๊ฐ์ด ๊ฝํ ์๋์ง ๋ณด๊ธฐ ์ํ ๊ฒ์ผ๋ก ์ด๊ฒ์ ํตํด ํ๋ก๋ํธ์ ๊ธฐ๋ฅ์ on/off ์ฒ๋ฆฌํ๊ธฐ ์ํด ์กด์ฌํ๋ฉฐ ์ด๋ฅผ ํตํ ์ ์ฐํ ๋์์ ๋ชฉ์ ์ผ๋ก ๊ฐ์ง ๊ฒ์ด๋ค.
์ด๋ค ๊ธฐ๋ฅ์ ํ์ฌ ๋ฌด์จ ๊น๋ฐ์ด ๊ผฝํ ์๋์ง ์๊ธฐ ์ํ๊ฒ์ผ๋ก ๊ธฐ๋ฅ์ ๋ํ on / off ์ฒ๋ฆฌ๋ฅผ ํตํ ์ ์ฐํ ๋์
- MSA, ํด๋ผ์ฐ๋ ๋ฑ์ ๋ฐ์ ๊ณผ ๋ง๋ฌผ๋ ค ๊น๋ฐ์ ๊ฝ์ ์ด๋ค ๊ธฐ๋ฅ๋ค์ ๊ณ ๊ฐ๋ค์๊ฒ ์๋นํ ์ง๋ฅผ ํ์ ํ๊ธฐ ์ํจ
- ์ต๊ทผ ๋น ๋ฅธ ๊ฐ๋ฐ, ์์ ๋ Serving์ ์ํด ๋ฐ์
์ต๊ทผ์ ๋ํฅ(๋น ๋ฅธ ๊ฐ๋ฐ)์ ๋ง์ถฐ ์ฐ๋ฆฌ ์๋น์ค๋ฅผ ์ ์ฐํ๊ฒ ์๋นํ๊ธฐ ์ํ ๊ฒ์ด๋ฉฐ, feture์ flag๋ฅผ ๊ฝ์ ์ ์๋ ๊ฒ
Featureflag์ ๋ชฉ์ ๋ฐ ํจ์จ์ฑ
- ๊ธฐ๋ฅ -๊ณ ๊ฐ ๊ฐ ์ ์ฐํ๊ณ ๋น ๋ฅธ ๋์ : MSA ํน์ง๊ณผ ๋ง๋ฌผ๋ ค, ํ๋ก๋ํธ์ ์ ์ฐ์ฑ/ํจ์จ์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
- ๊ณ ๊ฐ์ ์๊ธฐ ์ํ ์๋จ
- on/off๋ฅผ ํตํด ์ฑ์ ๊ฐ์น๋ฅผ ๋์ด๋ ๋ฐฉํฅ์ผ๋ก ๋์ฉ๋ ํธ๋ํฝ์ ๋ฐ๊ธฐ ์ํด์๋ ์ฌ์ฉ
Featureflag์ ์๊ตฌ ์ฌํญ
- ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ : ๊ณ ๊ฐ A, B ๊ฐ ๊ธฐ๋ฅ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๋ฉด ๋ณต์ก๋๋ N^2 ๋งํผ ์ฆ๊ฐ
- ๊ฐ ํ๋ก๋ํธ/์๋น์ค ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ๋๊ทธ๋ฅผ ์๋ณํ ์ ์๋ ์ํคํ ์ฒ : on/off๋ก ์ธํด ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ์๋ฌ๊ฐ ๋์ง ์๋๋ก
- ์ฌ์ฉ ์ฉ์ด์ฑ๊ณผ ๋จ์ํ UI ๋ฐ ๊ธฐ๋ฅ์ฑ (API/SDK) : Feature๋ค์ ๋ณ๊ฒฝํ๊ธฐ ์ํ UI ํน์ ํด
- ๋์ ์ฅ์ ๋ด๊ตฌ์ฑ (Fault Tolerant) : ์ฅ์ ๊ฐ ๋์ง ์๋๋ก
FeatureFlag ๋ ํผ๋ฐ์ค ๋ฐ ์ธํฐํ์ด์ค
OpenFeature

์ฌ์ฉ๊ฐ๋ฅํ ๋ ํผ๋ฐ์ค๋ก OpenFeature๊ฐ ์กด์ฌํ๋ค.
OpenFeature๋ FeatureFlag์ ํ์คํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ค์ ๋ก ๊ตฌํํ ์คํ์์ค์ด๋ค. ์ฆ, FeatureFlagging์ ์ํ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๊ณตํ๋ค.

๊ตฌ์ฑ์์
- Provider : OpenFeatureFlag์ ๊ตฌํ์ฒด
- Evaluation :
client.get***์์์ฒ๋ผ key๊ฐ ๊ฐ์ ธ์ ํ๋จํ๋ ๊ฒ

Remote Configuration ๊ณผ์ ์ฐจ์ด
๋ณธ์ง์ ์ผ๋ก ๋ค๋ฅธ ๊ณณ์์ ์ด๋ ์๋จ์ ํตํด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ฉํ๋ค๋ ๊ฒ์ ๋์ผํ๋ค. ํ์ง๋ง Remote Configuration์ ์ฑ/์๋น์ค์ ์คํ, ๋ฐฐํฌ, ๋น๋ ์ ์ํฅ์ ๋ฏธ์น๋ Config๋ฅผ ์ค์ ์ ์ฅ์์์ ๊ฐ์ ธ์ค๋ ๋ชฉ์ ์ฑ์ด ๊ฐํ๋ค.
์ฆ, ์ค์ ๊ฐ ์ ์๊ฒฉ์์ ์ค์ ์ ์์คํ ์์ผ ์ฌ์ฉํ์ฌ ์ผ์ํ์ํจ๋ค.
๊ฒฐ๊ตญ, ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
- ๋์ ๋์ฉ๋ ์์คํ ์ ๋ํ ๊ณ ๋ฏผ x
- ๋ณด์, ์ธ์ฆ/์ธ๊ฐ์ ๋ํ ์์ญ์ ๊ณ ๋ฏผ์ด ๋ ํ์
FeatureFlag ์ฌ์ฉ ๊ฒฐ์ ํ๊ธฐ
์ ํ์ํ๊ฐ?
- ๊ณ ๊ฐ์ด ์ถฉ๋ถํ๊ฐ
- ์๋น์ค์ ๊ณ ๊ฐํธ๋ํฝ์ด ์ถฉ๋ถํ๊ฐ
- B2C ์๋น์ค๋ก์ ๊ณ ๊ฐ์ ์์ผํ ๊ฐ์น๊ฐ ์ถฉ๋ถํ๊ฐ
- ๋น ๋ฅธ ์๋๋ก ๊ฐ๋ฐํ๊ณ , ์์ฃผ ๋ง์ ๊ธฐ๋ฅ๋ค์ ๋ฐฐํฌํ๊ณ ์๋๊ฐ
- ์ฅ์ ์, Riskyํ ๊ธฐ๋ฅ๋ค์ด ์๋๊ฐ
์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๊ฐ?
์๋น์ค์ ๊ณ ๊ฐ ๊ฐ ๊ธฐ๋ฅ์ ์๋นํ๊ธฐ ์ํ Buffer ์์ฑ

๊ธฐ๋ฅ์ ์๋น์ ํ ๋จ๊ณ ์ค๊ฐ์์ ๋ฐ์์ฃผ๋๋ก ํ์ฌ ๋ชจ๋ ์ํฉ์ ์ ์ฐํ ๋์ฒ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ๊ฒ์ผ๋ก ์ด๋ฅผ ํตํด ํฐ ๊ฐ์น ์ฐฝ์ถ ๊ฐ๋ฅ
FeatureFlag ์ค์ต ์๊ตฌ์ฌํญํญ

Featureflag Service: ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ๊ฒ์ด๋ฉฐ ์ธ๋ถ์ ์ผ๋ก Flagd SDK๋ฅผ ์ฌ์ฉํด ์ธ๋ถ ์์ง ์ฌ์ฉ Flagd : ์ธ๋ถ์ ์กด์ฌํ๋ฉด SDK๋ฅผ ํตํด RPC ๋ฐฉ์์ ํตํ ํธ์ถ
์ด๋ ๊ฒ ํธ์ถ๋ Flagd๋ Origin Flagd์์๋ ์ด๋ค Feature์ ๋ํ Flag (Key-value)์ ๋ํ ์๋ณธ ์์ค ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๊ณ ๋ค์ ์ด ์์ค๋ค์ด ๋จ์ํ ํ์ผ์ด ๋ ์๋ ์๊ณ ์ธ๋ถ์ Endpoint๊ฐ ๋ ์ ์๋ค.
Cache : SDK๋ก ๋ฐ์ Key์ ๋ํ Value๋ฅผ ์ ์ฅ