ํ๋ก์ ํธ๋ช
: [๊ทธ๋ก์-Grow It!] ์์ค ์๋ฌผ ๋ณํด ๊ฒ์ถ ๋ฐ ๋ถ๋ฅ ํ๋ซํผ
๊ฐ๋ฐ ๊ธฐ๊ฐ : 2023.03 ~ 2023.06 (4๊ฐ์)
ํ์ ๋ฐ ์ญํ : Android ๊ฐ๋ฐ 1๋ช
, Server ๊ฐ๋ฐ 1๋ช
, ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ ๊ฐ๋ฐ ๋ฐ ํ์ต 2๋ช
- 2023-1 ์ธ์ข ๋ํ๊ต ์ํํธ์จ์ด์ตํฉ๋ํ ์บก์คํค๋์์ธ ํ๋ก์ ํธ [๋์] ๐
- ์ฃผ์ ์์ธ ์ค๋ช
- ํด๋ง๋ค ์ ์ธ๊ณ ์๋์๋ฌผ์ ์ฝ 40%๊ฐ ๋ณํด์ถฉ์ผ๋ก ์ธํ ํผํด๋ฅผ ์ ๊ณ ์์ด ์ค๋๋ถ์กฑ ๋ฐ ๋์ ์ธ์๊ฒ ๋ง๋ํ ํผํด๋ฅผ ์ด๋ํ๊ณ ์์ต๋๋ค. ๋ํ, ์ ์ ์ธ๋์์๋ ๋ฐ๋ ค์๋ฌผ, ๋์๋์ , ์ค๋งํธํ์ ๋ํ ์ธ๊ธฐ๊ฐ ๋์์ง๊ณ ์์ด ๋์ ์ ๋ํ ์ง์์ด ๊น์ง ์์ ์ฒญ๋ ๋ค์๊ฒ ํธ๋ฆฌํ๊ฒ ๋์๋ฌผ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฑ์ ์ ์ํ์์ต๋๋ค.
- ์๊ตฌ์ฌํญ ๋ฐ ๋ชฉํ
- ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ํ์ฉํ ์ ๋ฌธ๊ฐ์ ๊ฐ์ ์์ด ๋์๋ฌผ์ ๋ณํด์ถฉ์ ํ๋ณํ ์ ์๋ ์๋น์ค ๊ฐ๋ฐ
- ๋์๋ฌผ์ ๋ณํด ์ง๋จ์์ ๋์๊ฐ ํ๋ซํผ์ ๋ชฉํ๋ก ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ
- ๋์๋ฌผ ๋ณํด์ถฉ, ๋์ฝ ์ ๋ณด์ ๊ด๋ จ๋ Open API ์ ๊ทน ํ์ฉ
- ๋ณํด ์ง๋จ๋ฟ๋ง ์๋๋ผ ๋ณํด์ ์ง์ ์ ์ผ๋ก ์ฐ๊ด๋ ๋ณํด ์์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ , ํจ์จ์ ์ธ ๋ฐฉ์ ๋ฅผ ์ํด ๋ณํด์ ๋ฐ๋ฅธ ๋์ฝ ์ฌ์ฉ๊ฐ์ด๋ ์ ๊ณต
Kotlin
, MVVM
, AAC
, SAA
, Repository
, ViewModel
, Coroutine
, JWT Token
, Retrofit2
, Multipart
, OkHttp
, Gson
, Glide
, Image-Cropper
, Navigation
, LiveData
, DataBinding
, DataStore
, Jsoup
, Tikxml
, Hilt
- ์ง๋จ ๊ฐ๋ฅํ ์๋ฌผ์ ์ํ ์ค ๋ฐ์ดํฐ์ ์ด ๊ฐ์ฅ ๋ง์ ๋ธ๊ธฐ, ์์ถ, ๊ณ ์ถ, ํ ๋งํ ๋ฅผ ์ ํํ์ต๋๋ค.
- ์ง๋จ๊ฒฐ๊ณผ๋ฅผ PieChart์ ํ ์ค ์์ฝ์ผ๋ก ์ ๊ณตํ๋ฉฐ ํด๋น ์ง๋จ๊ฒฐ๊ณผ๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋ฆฐ์ท์ผ๋ก ๊ธฐ๊ธฐ์ ์ ์ฅํ๊ฑฐ๋ ์ปค๋ฎค๋ํฐ์์ ๋ค๋ฅธ ์ฌ์ฉ์๋ค๊ณผ ๊ณต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๋ฏธ์ง ์ดฌ์/์ ํ ์ Crop(์๋ฅด๊ธฐ) ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ ๊ตฌํ์๋
Image-Cropper
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ต๋๋ค. - ์๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก Retrofit2 -
Multipart
๋ฅผ ํตํด File์ ์ ๋ฌํฉ๋๋ค.
- ๋์ ์ธ๋ค์ด ๋ณธ์ธ๋ง์ ๊ฒฝํ์ด๋ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํ๊ณ , ์์ ๋กญ๊ฒ ์ง์์๋ต์ด ์ด๋ฃจ์ด์ง ์ ์๋๋ก ์์ฒด์ ์ธ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
- โAI ๋ณํด์ถฉ ์ง๋จํ๊ธฐโ ๊ธฐ๋ฅ์์ ํด๊ฒฐ๋์ง ์์ ๊ถ๊ธ์ฆ, ๊ทธ ์ธ ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ๋ก๊ทธ์ธ ํ ๊ฒ์ํ์ ํตํด ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ViewModel๊ณผ LiveData, Observer ํจํด์ ํตํด ์ฌ์ฉ์ ๊ฒฝํ(UX) ์ ์น์ํ ์ ์๋๋ก ์ง์คํ์ต๋๋ค.
โ ๋๊ธ/๋ต๊ธ ์์ฑ ๋ฐ ๊ฒ์๊ธ ์ถ์ฒ ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ํ๋ฉด ๊ฐฑ์ , ์ง๊ด์ ์ธ UI - ์ผ๋ฐ์ ์ธ ์ปค๋ฎค๋ํฐ์ ์์, ๊ธฐ๋ฅ ๊ตฌํ โ ๊ฒ์ํ ํญ๋ชฉ ๊ตฌ๋ถ, ๊ฒ์๊ธ ๋ฐ ๋๊ธ, ๋ต๊ธ(์์ฑ/์์ /์ญ์ ), ๋ต๊ธ, ์ถ์ฒ
- ๊ตญ๊ฐ๋์๋ฌผ๋ณํด์ถฉ๊ด๋ฆฌ์์คํ
(NCPMS)์ ๋ณํด์ถฉ ๊ด๋ จ OpenAPI์ ๋์ฝ์์ ์ ๋ณด์์คํ
์ ๋์ฝ ๋ฑ๋ก์ ๋ณด OpenAPI๋ฅผ ์ด์ฉํด ๋ณํด/๋ฐฉ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ตญ๊ฐ๋์๋ฌผ๋ณํด์ถฉ๊ด๋ฆฌ์์คํ (NCPMS) : https://ncpms.rda.go.kr/npms/Main.np
- ๋์ฝ์์ ์ ๋ณด์์คํ : https://psis.rda.go.kr/psis/index.ps
- API์ ๋ฐ์ดํฐ ๋ฐํ ํ์
์ด XML์ด๊ธฐ ๋๋ฌธ์
Tikxml
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ์ต๋๋ค.
-
์ด๋ฏธ์ง ์ ํ ํ Crop(์๋ฅด๊ธฐ)ํ ๊ฒฝ์ฐ ํ์ง์ ํ ๋ฌธ์
- ๊ธฐ์กด์ ์ฌ์ฉ์๊ฐ ์ ํํ ์ด๋ฏธ์ง ํ์ผ์ ๋นํธ๋งต(Bitmap) ์ผ๋ก Crop(์๋ฅด๊ธฐ)ํ์ฌ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ ์ด์ฉํ์ต๋๋ค.
- ์ด๋, ์ด๋ฏธ์ง๋ฅผ ImageView์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์์ ํ์ง์ด ํฌ๊ฒ ์ ํ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
โ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋ฆฌ์ฌ์ด์ฆํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ์ถ์ - Image-Cropper ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ํด๊ฒฐํ์ต๋๋ค.
-
MVVM, Repository ์ํคํ ์ณ ์ค๊ณ ๋ฐ ๋ค์ํ Jetpack ์ปดํฌ๋ํธ ๋์
View
์Model
๊ทธ๋ฆฌ๊ณViewModel
์ ๋ณด๋ค ์ ํํ๊ฒ ๋ถ๋ฆฌํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ , ViewModel์์ Model์ ์ ๊ทผํ๊ธฐ ์ํดRepository
ํจํด๋ ์ ์ฉํด ๋ณด์์ต๋๋ค.Navigation
,LiveData
,DataBinding
,ViewModel
๊ฐ์ Jetpack ์ปดํฌ๋ํธ๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ต๋๋ค.- ๊ตฌ๊ธ์ Jetpack ์ฌ์ฉ ๊ถ์ฅ, ๊ฐ๋ ์ ์ผ๋ก ์ดํดํ๊ณ ์๋ ๋์์ธ ํจํด์ ์ง์ ํ๋ก์ ํธ์ ์ ์ฉํด ๋ณด๋ฉฐ ์ดํด๋ฅผ ๋ํ ์ ์์์ต๋๋ค.
-
์ ๊ทํํ์์ ์ด์ฉํ ํ์๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ณผ์
- ํ์๊ฐ์ ๊ณผ์ ์์ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ฐ ๋น๋ฐ๋ฒํธ ํ์ธ, ๋๋ค์์ TextInputLayout๊ณผ ์ ๊ทํํ์์ ์ด์ฉํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํ
- TextInputlayout์ ์ ๊ณตํ๋ HelperText, EditText, Counter, EndIcon ๋ฑ ๋ค์ํ ์์ฑ์ ์ฌ์ฉํด ๋ณผ ์ ์์์ต๋๋ค.
-
์ฝ๋ฃจํด(Coroutine)๊ณผ ๋น๋๊ธฐ(asynchronous) ์ฒ๋ฆฌ, LifeCycle
- ViewModel, Retrofit ํต์ ๊ณผ์ ์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํด ํจ์จ์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋
ธ๋ ฅํ์ต๋๋ค.
โ ViewModel์์ LiveData์ viewModelScope๋ฅผ ์ด์ฉํด Model์ ์ ๊ทผํ๊ณ , View์์Observer
ํจํด์ ํตํด ViewModel์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ์ฉํ์ต๋๋ค. - Fragment, ViewModel์ ์๋ช ์ฃผ๊ธฐ, viewModelScope์ ์ฐ์์ ๋ํด ๊ณต๋ถํ์ต๋๋ค.
- ViewModel, Retrofit ํต์ ๊ณผ์ ์์ ์ฝ๋ฃจํด์ ์ฌ์ฉํด ํจ์จ์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋
ธ๋ ฅํ์ต๋๋ค.
-
์๋ฒ์ Retrofit ํต์ ์ค ์ด๋ฏธ์ง(File) ์ ๋ฌ์ ์ํด Multipart๋ฅผ ์ด์ฉํ ํต์
- ๊ธฐ์กด์ ์ฌ์ฉํ๋ @Body, @Path ๋ง์ผ๋ก๋ ์๋ฒ์ File ํ์ ์ ๋ฌ์ด ๋ถ๊ฐ๋ฅํด
@Multipart
ํต์ ์ ์ด์ฉํ์ต๋๋ค. - String(Uri)์ด ์๋ File(Image) ํ์์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ฌํ๋ ์ด์ ๋ ์๋ฒ์ธก์์ ์ด๋ฏธ์ง๋ฅผ Uri๋ก ์ ์ฅํ์ง ์๊ณ , AWS S3 ๋ฒํท์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ์ ์ฅํ๊ธฐ ์ํจ.
โ ์๋ฒ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ฌํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ๋ํด ์๊ฒ ๋์์ต๋๋ค.
- ๊ธฐ์กด์ ์ฌ์ฉํ๋ @Body, @Path ๋ง์ผ๋ก๋ ์๋ฒ์ File ํ์ ์ ๋ฌ์ด ๋ถ๊ฐ๋ฅํด
-
Hilt ๋ง์ด๊ทธ๋ ์ด์
- ViewModelFactory์ ViewModelProvider๋ก ViewModel์ ์์ฑํ๋ ๋ฐฉ์์์
Hilt
๋ฅผ ์ด์ฉํด ์์กด์ฑ์ ์ฃผ์ ํ ์ ์๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ต๋๋ค.
- ViewModelFactory์ ViewModelProvider๋ก ViewModel์ ์์ฑํ๋ ๋ฐฉ์์์
https://play.google.com/store/apps/details?id=sju.sejong.capstonedesign