ํ์ฌ ๋ฐฑ์๋ ์๋ฒ๊ฐ ์ข ๋ฃ๋์ด ์ค์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ์คํํ ์ ์์ต๋๋ค. ํ๋ ์ด์คํ ์ด ๋ฐฐํฌ๋ ์ข ๋ฃ๋ ์ํ์ ๋๋ค. ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์ํคํ ์ฒ ์ค๊ณ์ ๊ตฌํ ๋ฐฉ์์ ํ์ธํ ์ ์๋๋ก ์ฝ๋๋ฅผ ๊ณต๊ฐํฉ๋๋ค.
๐ โ์๊ธฐ๋ ์ด๋ฐ๊ฒ ์ข์?โ, โ์ ๋ฐ๊ฒ ์ข์?โ ์ฌ๋ฌ๋ถ์ ์ฐ์ธ๊ณผ ์ด๋ฐ ๋ํ๋ฅผ ์์ฃผ ๋๋์๋์?
๊ฐ์ฅ ๊ฐ๊น์ด ์ฌ์ด์ด์ง๋ง, ๊น์ ๋ํ๋ฅผ ๋๋๊ธฐ ์ด๋ ค์ํ๋ ์ฐ์ธ๋ค์ด ๋ง๋ค๊ณ ํฉ๋๋ค.
์ฐ๋ฆฌ ์ฑ์ ์ฐ์ธ๋ค์ด ์คํจ์ญ์ ๋ํ ์๊น์ ์ด์ผ๊ธฐ๋ฅผ ๋๋ ์ ์๋๋ก ๋๋ ์๋น์ค์
๋๋ค.
- ํ๋ก์ฐํก์ ์์ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์ ์ ํ๋์ ํ๋ก์ฐ๋ก ํตํฉํ์ต๋๋ค. ์ธ์ฆ ์ฑ๊ณต ์ ์ ์ ์ ํ์๊ฐ์ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ณ์ ์ ์์ฑํ๊ฑฐ๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌํ์ฌ ์ ์ฒด ๊ณผ์ ์ ๋จ์ํํ์ต๋๋ค.
- ์ฑ์ธ ๋์ ์๋น์ค ํน์ฑ์ ํด๋ํฐ ๋ณธ์ธ ์ธ์ฆ์ ํ์๋ก ํฌํจํ๊ณ ์์ผ๋ฉฐ ์ธ์ฆ์ด ์๋ฃ๋๋ฉด ๋ค์ ๋จ๊ณ๋ก ์ด๋ํฉ๋๋ค.
- ๋ณธ์ธ ์ธ์ฆ ์ดํ์๋ ๋๋ค์์ ์ค์ ํ๊ณ ์ปคํ ์ด๋ ์ฝ๋๋ฅผ ํตํด ์ปคํ ์ฐ๊ฒฐ์ ์ ๊ณตํฉ๋๋ค.
- ์๊ทธ๋ ๋ฐ๊พธ๊ธฐ ์ ์ ์ ํ์ฌ ๊ธฐ๋ถ ์ํ๋ฅผ ์๋๋ฐฉ์๊ฒ ์ ๋ฌํ๊ณ ์๋ก์ ๊ธฐ๋ถ์ ๊ฐ๋จํ๊ฒ ํ์ธํ ์ ์๋๋ก ์ค๊ณ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ ์ ๋ ์์ ์ ์๊ทธ๋์ ์ ํํ ์ ์์ผ๋ฉฐ ์ ํ๋ ์๊ทธ๋์ ์ปคํ๋ก ์ฐ๊ฒฐ๋ ์๋๋ฐฉ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
- ์ค๋์ ์ง๋ฌธ์ ์ปคํ ๊ฐ ๋ํ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ ๋ํ๊ธฐ ์ํด ๋งค์ผ ์๋ก์ด ์ง๋ฌธ์ ์ ๊ณตํ๋ ์ปค๋ฎค๋์ผ์ด์ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ ์ ๋ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์์ฑํ๊ณ ๋ต๋ณ์ ์ปคํ๋ก ์ฐ๊ฒฐ๋ ์๋๋ฐฉ๊ณผ ๊ณต์ ๋ฉ๋๋ค.
- ์๋๋ฐฉ์ด ์์ง ๋ต๋ณํ์ง ์์ ๊ฒฝ์ฐ โ์ฝ ์ฐ๋ฅด๊ธฐโ ๊ธฐ๋ฅ์ ํตํด ๊ฐ๋ฒผ์ด ๋ฐฉ์์ผ๋ก ๋ต๋ณ์ ์ฌ์ดํ ์ ์์ต๋๋ค.
- ์ฑ๋ฆฐ์ง ๋ฑ๋ก์ ์ปคํ์ด ํจ๊ป ๋ชฉํ๋ฅผ ์ค์ ํ๊ณ ์ผ์ ๊ธฐ๊ฐ ๋์ ์ด๋ฅผ ๊ณต์ , ์ค์ฒํ ์ ์๋๋ก ์ง์ํ๋ ์๋น์ค์ ๋๋ค.
- ์ ์ ๋ ์ฑ๋ฆฐ์ง๋ฅผ ์ง์ ์์ฑํ๊ณ ์งํ ์ค / ์๋ฃ ์ํ์ ๋ฐ๋ผ ์ฑ๋ฆฐ์ง ๋ชฉ๋ก์ ๊ตฌ๋ถํด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์๋ฃ๋ ์ฑ๋ฆฐ์ง๋ ํ์คํ ๋ฆฌ ํํ๋ก ํ์ธํ ์ ์์ด ์ปคํ ๊ฐ์ ๊ธฐ๋ก์ผ๋ก ํ์ธ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ์ต๋๋ค.
- ํ๋ฉด ์ ๊ธ์ ์ปคํ ์๋น์ค ํน์ฑ์ ๋ฐ์ํ ์ ์๋ ๋ฏผ๊ฐํ ์ ๋ณด ๋ ธ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ณด์ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ ๊ธ์ ํ์ฑํํ๋ฉด, ์ฑ ์ง์ ๋ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ ์๊ตฌํ์ฌ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณดํธํฉ๋๋ค.
- ๋น๋ฐ๋ฒํธ ๋ถ์ค ์ํฉ์ ๋๋นํด ๋ณด์ ์ง๋ฌธ์ ํตํ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํ๋ก์ฐํก์ ๊ณ์ ํํด์ ์ปคํ ๊ด๊ณ ํด์ (ํค์ด์ง๊ธฐ)๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ ๊ณตํฉ๋๋ค.
- ํํด ์ ์ ์ ๊ณ์ ๋ฐ ๊ด๋ จ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉฐ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
- ํค์ด์ง๊ธฐ๋ ๊ณ์ ์ ์ ์งํ ์ฑ ์ปคํ ๊ด๊ณ๋ง ํด์ ํ๋ ๊ธฐ๋ฅ์ผ๋ก ์ผ์ ๊ธฐ๊ฐ ๋ด ์ปคํ๋ก ์ฌ์ฐ๊ฒฐ ํ์ง ์์ ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ฉ๋๋ค.
- Android ๊ฐ๋ฐ ์ ๋ด
- ์ฑ ์ํคํ ์ณ ์ค๊ณ
- ์ฃผ์ ๊ธฐ๋ฅ ๊ตฌํ
- AES/RSA ๊ธฐ๋ฐ ์ข ๋จ๊ฐ ์ํธํ ๊ตฌ์กฐ ์ค๊ณ ์ ๋ด
- ์ธ์ฆ ๋ฐ API ์ฐ๋ ์ค๊ณ ํ์
(์ฝ 40% ๊ธฐ์ฌ)
- API ์คํ ์ ์
- JWT ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ์ธ์ฆ ํ๋ก์ฐ ์ค๊ณ
- JWT๋ฅผ ์ด์ฉํ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ Stateless ์ธ์ฆ ๊ด๋ฆฌ
- RSA ๋ฐ AES ๋ฅผ ์ด์ฉํ ํผํฉ ์ํธํ ๊ตฌ์กฐ ์ค๊ณ, Android KeyStore๋ฅผ ํตํ ๊ตฌํ
- Android WebView๋ฅผ ์ฌ์ฉํด Apple Sign-In ์ฐํ ๊ตฌํ
- Resource ํด๋์ค๋ฅผ ์ ์ํด ๋ฐ์ดํฐ ๋ก๋ฉ ์์ ์ฑ๊ณต/์คํจ ์ํ๋ฅผ ๋ช ํํํจ
- Remote + Local ๋ฐ์ดํฐ ์บ์ฑ์ ์ด์ฉํ ๋ก๋ฉ ์ง์ฐ ์ต์ํ
- Paging 3๋ฅผ ํ์ฉํ ํ์ด์ง๋ค์ด์ ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- MotionLayout, Lottie ๋ฑ์ ํ์ฉํด ๋ณต์กํ ์ ๋๋ฉ์ด์ ๊ตฌํ
- Snackbar, Dialog, Button ๋ฑ์ ์ปค์คํ UI ์ ์์ผ๋ก UX ๊ฐ์
- Firebase Cloud Messaging(FCM)์ ํตํ ์ค์๊ฐ ์๋ฆผ
- Presentation / Domain / Data์ 3๊ฐ์ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฑ ์์ ๋ช ํํ ํจ
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง(Domain)์ ์ธ๋ถ ํ๊ฒฝ(UI, DB, API) ๋ณํ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด Presentation๊ณผ Data ๊ณ์ธต์ด Domain ๊ณ์ธต์ ํฅํ๋ ๋จ๋ฐฉํฅ ์์กด์ฑ์ ๊ฐ๋๋ก ์ค๊ณ
- ๋น์ฆ๋์ค ๋ก์ง์ด ๋ฐ์ดํฐ ์์ค์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์์กดํ์ง ์๋๋ก Domain ๊ณ์ธต์์ ์ธํฐํ์ด์ค๋ก ์ ์ํ๊ณ Data ๊ณ์ธต์์ ์ด๋ฅผ ๊ตฌํํ๋ ์์กด์ฑ ์ญ์ ์์น(DIP)์ ์ ์ฉ
- UI ๋ก์ง๊ณผ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด MVVM์ ๋์
- ViewModel์ UI์ ์๋ช ์ฃผ๊ธฐ์ ๋ถ๋ฆฌ๋์ด ํ๋ฉด ํ์ ๊ณผ ๊ฐ์ UI ๋ณ๊ฒฝ์๋ UI ์ํ๋ฅผ ์์ ํ๊ฒ ๋ณด์กดํด์ค
- ViewModel์ด ์ฌ๋ฌ Repository๋ฅผ ์ง์ ์ฐธ์กฐํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์กฐํฉํด์ผ ํ๋ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด UseCase ํจํด์ ์ ์ฉ
- ๋จ์ผํ ์ฑ ์์ ๊ฐ๋ ๊ฐ๋ณ ๊ธฐ๋ฅ์ UseCase ํด๋์ค๋ก ์บก์ํํ์ฌ ๋น์ฆ๋์ค ๋ก์ง ํ๋ฆ์ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์
| Category | Tech Stack |
|---|---|
| Language | |
| Platform | |
| Architecture | |
| Async | |
| Dependency Injection | |
| Networking | |
| Local Data | |
| Jetpack | |
| Auth | |
| Push |
๋ฌธ์ ์
- Apple Sign-In์ iOS์ Web ํ๊ฒฝ์์๋ง ๊ณต์ ์ง์
- iOS์์ Android๋ก ๊ธฐ๊ธฐ ๋ณ๊ฒฝ ์ ๊ณ์ ์ด์ ์ด ๋ถ๊ฐ๋ฅํ ๋ฌธ์ ๊ฐ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
- Android WebView + ์๋ฒ๋ฅผ ํ์ฉํด ์ฐํ ๋ก๊ทธ์ธ ๊ตฌ์กฐ ์ค๊ณ
- Apple Sign-In ์นํ์ด์ง๋ฅผ ํธ์ถํ ๋ redirect_uri๋ฅผ ์๋ฒ๋ก ์ง์ ํ์ฌ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์์ ์ง์ ์์ ๊ฐ๋ฅ
- redirect_uri์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ UUID๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์๋ฒ์ ๊ฐ์ด ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์์ ์์ฑํ UUID๋ฅผ ๊ฐ์ง๊ณ ์๋ฒ์์ ์ ํ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋งค์นญ ๊ฐ๋ฅ
๊ฒฐ๊ณผ
- Android์์๋ Apple ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ฐ๋ฅ
- ํด๋ผ์ด์ธํธ๋ UUID๋ฅผ ํตํด ์๋ฒ์์ ์ธ์ฆ ๊ฒฐ๊ณผ๋ฅผ ์กฐํ
- ๊ธฐ์กด์ ์๋๋ก์ด๋๋ฅผ ์ง์ํ์ง ์๋ ์ธ์ฆ ํ๋ซํผ์ ์น์ผ๋ก ์ฐํ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์
๋ฌธ์ ์
- RSA๋ ํค ํฌ๊ธฐ๋ณด๋ค ์ํธํ ํ๋ ค๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์์์ผ ํจ
- ์ํธํ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ธธ์ด์ ์ ํ์ด ์กด์ฌํด ๊ธด ํ ์คํธ๋ฅผ ์ํธํ ํ ์ ์์
ํด๊ฒฐ ๋ฐฉ๋ฒ
- AES์ RSA๋ฅผ ํผํฉํด์ ์ ์ฉ
- ํ๊ฒ ํ ์คํธ๋ฅผ ๋๋ค ์์ฑํ AES ํค๋ก ์ํธํ
- AES ํค๋ฅผ RSA ๊ณต๊ฐํค๋ก ์ํธํ
- ๋ ์ํธํ๋ ํ ์คํธ๋ฅผ ํ๋์ ํ ์คํธ ์ฑํ ์ผ๋ก ๋ฌถ์ด์ ์๋ฒ๋ก ์ ์ก
๊ฒฐ๊ณผ
- ๋ฌธ์ฅ์ ๊ธธ์ด ์ ํ ์์ด ์ํธํ๊ฐ ๊ฐ๋ฅํด์ง
- RSA์ ๋จ์ ์ ๋ณด์ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ ์ํธํ์ ์์ ์ฑ์ด ๋์ฑ ์์นํจ
๋ฌธ์
- ํค ๊ด๋ฆฌ ๋ก์ง์ด ๋ณต์กํด์ ์ ์ง๋ณด์ ๋น์ฉ์ด ์ฆ๊ฐํจ
- ์ปคํ ์์ธก์ด ๋์์ ๋ฐ์ดํฐ ์์ค๋ก ์ธํ ๊ฐ์ธํค๋ฅผ ๋ถ์คํ๋ฉด ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ๋ฆฌ์คํฌ ์กด์ฌ
๊ฒฐ์ ๋ฐฐ๊ฒฝ
- ์ ์ ๋ค์ ์ํธํ ๊ธฐ๋ฅ์ ํ์์ฑ์ ํฌ๊ฒ ๋๋ผ์ง ์์
- ๊ธฐ์กด ์ข ๋จ๊ฐ ์ํธํ ์ฑํ ์ฑ(ํ ๋ ๊ทธ๋จ ๋ฑ)์ ๋ํ ์ฌํ์ ์ธ์ ์ ํ
๊ฒฐ๋ก
- ์ํธํ ๊ธฐ๋ฅ์ MVP ๋ฒ์ ๊น์ง๋ง ์ ์ง
- Release ๋ฒ์ ์์๋ ๊ธฐ๋ฅ ์ ๊ฑฐ
๋ฌธ์
- Data Layer ๋ด๋ถ์ DataSource๋ง๋ค interface๋ฅผ ๋ง๋ค์ด ๋์
- ๋ถํ์ํ boilerplate ์ฝ๋ ์ฆ๊ฐ
๊ฐ์ ๋ฐฉํฅ
- DataSource๋ ์ด์ฐจํผ ์ธ๋ถ(Domain, Presentation)์ ๋ ธ์ถ๋์ง ์์ผ๋ฏ๋ก interface ์ ๊ฑฐ
๋ฐฐ์ด ์
- Clean Architecture๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ํ๊ธฐ ์ํจ์ด ์๋ ์ฝ๊ฒ ํ๊ธฐ ์ํจ์ด๋ฏ๋ก ๋๋ฌด ์๊ฒฉํ๊ณ ์ง์ฝ์ ์ธ ์ฝ๋ ์์ฑ์ ์ค๋ฒ ์์ง๋์ด๋ง์ด ๋ ์ ์๋ค๋ ๊ฒ์ ๋ฐฐ์
๋ฌธ์
- API ํธ์ถ ์๋ง๋ค ํ ํฐ ๋ง๋ฃ ์ฌ๋ถ๋ฅผ UseCase์์ ์ง์ ์ฒดํฌ
- boilerplate ์ฝ๋ ์ฆ๊ฐ ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ
๊ฐ์ ๋ฐฉํฅ
- ์ธ์ฆ ๋ก์ง์ Data Layer์ ๋คํธ์ํฌ ํธ์ถ ์ฝ๋๋ก ์์
- OkHttp Interceptor๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ ์๋ ๊ฐฑ์ ์ฒ๋ฆฌ
๋ฐฐ์ด ์
- ๋ฐ๋ณต๋๋ ๋คํธ์ํฌ ํธ์ถ์ ๋์ผํ ๋ก์ง์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉํด์ฃผ๋ OkHttp Interceptor๋ฅผ ์๋ก ์๊ฒ๋จ
๋ฌธ์
- ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ์ Firebase Cloud Messaging(FCM) ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ
- FCM ๊ธฐ๋ฐ ๋ฉ์์ง๋ ์ค์๊ฐ์ผ๋ก ๋ช ํํ๊ฒ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ๋ฉ์์ง๊ฐ์ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ด๋ ค์
- ์ฌ์ฉ๋ ์ฆ๊ฐ ์ ํ์ด์ด๋ฒ ์ด์ค ๋น์ฉ์ด ๋ถ๋ด๋จ
๊ฐ์ ๋ฐฉํฅ
- ์ค์๊ฐ ์ฑํ ๋ก์ง์ WebSocket ๊ธฐ๋ฐ์ผ๋ก ์ ํ ์์
- FCM์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ฆผ ์ฉ๋๋ก๋ง ์ ์ง
๋ฐฐ์ด ์
- FCM์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ ํฌ์ด๊ทธ๋ผ์ด๋ UI๋ฅผ ๋์ฐ์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ฒ ๋จ
- WebSocket์ FCM๊ณผ ๋ฌ๋ฆฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ Ping-Pong ํ๋ ์์ ์ฒ๋ฆฌํ๋ ๋ฑ Keep-alive ๋ฉ์ปค๋์ฆ์ ํ์ฉํ ์ฐ๊ฒฐ ์ ์ง ๋ก์ง์ ์ง์ ์ค๊ณํด์ผํ์ง๋ง ๋๋ถ์ ์ฑํ ์ฝ์ ์ฒ๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ ์์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ฒ ๋จ







