Skip to content

๐ŸŒฟ [๊ทธ๋กœ์ž‡] ์‹œ์„ค ์ž‘๋ฌผ ๋ณ‘ํ•ด ๊ฒ€์ถœ ๋ฐ ๋ถ„๋ฅ˜ ํ”Œ๋žซํผ

Notifications You must be signed in to change notification settings

Ojongseok/SJU_Capstone_Design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒฟ [๊ทธ๋กœ์ž‡-Grow It!] ์‹œ์„ค ์ž‘๋ฌผ ๋ณ‘ํ•ด ๊ฒ€์ถœ ๋ฐ ๋ถ„๋ฅ˜ ํ”Œ๋žซํผ

image 148 ํ”„๋กœ์ ํŠธ๋ช… : [๊ทธ๋กœ์ž‡-Grow It!] ์‹œ์„ค ์ž‘๋ฌผ ๋ณ‘ํ•ด ๊ฒ€์ถœ ๋ฐ ๋ถ„๋ฅ˜ ํ”Œ๋žซํผ
๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 2023.03 ~ 2023.06 (4๊ฐœ์›”)
ํŒ€์› ๋ฐ ์—ญํ•  : Android ๊ฐœ๋ฐœ 1๋ช…, Server ๊ฐœ๋ฐœ 1๋ช…, ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ ๊ฐœ๋ฐœ ๋ฐ ํ•™์Šต 2๋ช…

๐Ÿ“ Summary

  • 2023-1 ์„ธ์ข…๋Œ€ํ•™๊ต ์†Œํ”„ํŠธ์›จ์–ด์œตํ•ฉ๋Œ€ํ•™ ์บก์Šคํ†ค๋””์ž์ธ ํ”„๋กœ์ ํŠธ [๋Œ€์ƒ] ๐ŸŽ‰
  • ์ฃผ์ œ ์ƒ์„ธ ์„ค๋ช…
    • ํ•ด๋งˆ๋‹ค ์ „ ์„ธ๊ณ„ ์‹๋Ÿ‰์ž‘๋ฌผ์˜ ์•ฝ 40%๊ฐ€ ๋ณ‘ํ•ด์ถฉ์œผ๋กœ ์ธํ•œ ํ”ผํ•ด๋ฅผ ์ž…๊ณ  ์žˆ์–ด ์‹ค๋Ÿ‰๋ถ€์กฑ ๋ฐ ๋†์—…์ธ์—๊ฒŒ ๋ง‰๋Œ€ํ•œ ํ”ผํ•ด๋ฅผ ์ดˆ๋ž˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ Š์€ ์„ธ๋Œ€์—์„œ๋„ ๋ฐ˜๋ ค์‹๋ฌผ, ๋„์‹œ๋†์—…, ์Šค๋งˆํŠธํŒœ์— ๋Œ€ํ•œ ์ธ๊ธฐ๊ฐ€ ๋†’์•„์ง€๊ณ  ์žˆ์–ด ๋†์—…์— ๋Œ€ํ•œ ์ง€์‹์ด ๊นŠ์ง€ ์•Š์€ ์ฒญ๋…„๋“ค์—๊ฒŒ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋†์ž‘๋ฌผ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ชฉํ‘œ
    • ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ์ „๋ฌธ๊ฐ€์˜ ๊ฐœ์ž… ์—†์ด ๋†์ž‘๋ฌผ์˜ ๋ณ‘ํ•ด์ถฉ์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๊ฐœ๋ฐœ
    • ๋†์ž‘๋ฌผ์˜ ๋ณ‘ํ•ด ์ง„๋‹จ์—์„œ ๋‚˜์•„๊ฐ€ ํ”Œ๋žซํผ์„ ๋ชฉํ‘œ๋กœ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • ๋†์ž‘๋ฌผ ๋ณ‘ํ•ด์ถฉ, ๋†์•ฝ ์ •๋ณด์™€ ๊ด€๋ จ๋œ Open API ์ ๊ทน ํ™œ์šฉ
    • ๋ณ‘ํ•ด ์ง„๋‹จ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณ‘ํ•ด์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๋ณ‘ํ•ด ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํšจ์œจ์ ์ธ ๋ฐฉ์ œ๋ฅผ ์œ„ํ•ด ๋ณ‘ํ•ด์— ๋”ฐ๋ฅธ ๋†์•ฝ ์‚ฌ์šฉ๊ฐ€์ด๋“œ ์ œ๊ณต

๐Ÿ› ๏ธ Tech Stack

Kotlin, MVVM, AAC, SAA, Repository, ViewModel, Coroutine, JWT Token, Retrofit2, Multipart, OkHttp, Gson, Glide, Image-Cropper, Navigation, LiveData, DataBinding, DataStore, Jsoup, Tikxml, Hilt

โœ… Main Function

1๏ธโƒฃ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ์ž‘๋ฌผ ๋ณ‘ํ•ด ๊ฒ€์ถœ ๊ธฐ๋Šฅ


  • ์ง„๋‹จ ๊ฐ€๋Šฅํ•œ ์ž‘๋ฌผ์€ ์ƒ˜ํ”Œ ์ค‘ ๋ฐ์ดํ„ฐ์…‹์ด ๊ฐ€์žฅ ๋งŽ์€ ๋”ธ๊ธฐ, ์ƒ์ถ”, ๊ณ ์ถ”, ํ† ๋งˆํ† ๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง„๋‹จ๊ฒฐ๊ณผ๋ฅผ PieChart์™€ ํ•œ ์ค„ ์š”์•ฝ์œผ๋กœ ์ œ๊ณตํ•˜๋ฉฐ ํ•ด๋‹น ์ง„๋‹จ๊ฒฐ๊ณผ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฐ์ƒท์œผ๋กœ ๊ธฐ๊ธฐ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๊ณผ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€ ์ดฌ์˜/์„ ํƒ ์‹œ Crop(์ž๋ฅด๊ธฐ) ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉฐ ๊ตฌํ˜„์—๋Š” Image-Cropper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์™€ ์ด๋ฏธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Retrofit2 - Multipart ๋ฅผ ํ†ตํ•ด File์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์ž์œ ๋กœ์šด ์†Œํ†ต์„ ์œ„ํ•œ ๋†์—…์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ


  • ๋†์—…์ธ๋“ค์ด ๋ณธ์ธ๋งŒ์˜ ๊ฒฝํ—˜์ด๋‚˜ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์ž์œ ๋กญ๊ฒŒ ์งˆ์˜์‘๋‹ต์ด ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ž์ฒด์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • โ€˜AI ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จํ•˜๊ธฐโ€™ ๊ธฐ๋Šฅ์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ถ๊ธˆ์ฆ, ๊ทธ ์™ธ ์ถ”๊ฐ€์ ์ธ ๋‚ด์šฉ์€ ๋กœ๊ทธ์ธ ํ›„ ๊ฒŒ์‹œํŒ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ViewModel๊ณผ LiveData, Observer ํŒจํ„ด์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์— ์นœ์ˆ™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
    โ†’ ๋Œ“๊ธ€/๋‹ต๊ธ€ ์ž‘์„ฑ ๋ฐ ๊ฒŒ์‹œ๊ธ€ ์ถ”์ฒœ ์‹œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ํ™”๋ฉด ๊ฐฑ์‹ , ์ง๊ด€์ ์ธ UI
  • ์ผ๋ฐ˜์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์š”์†Œ, ๊ธฐ๋Šฅ ๊ตฌํ˜„ โ†’ ๊ฒŒ์‹œํŒ ํ•ญ๋ชฉ ๊ตฌ๋ถ„, ๊ฒŒ์‹œ๊ธ€ ๋ฐ ๋Œ“๊ธ€, ๋‹ต๊ธ€(์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ), ๋‹ต๊ธ€, ์ถ”์ฒœ

3๏ธโƒฃ OpenAPI๋ฅผ ํ™œ์šฉํ•œ ๋ณ‘ํ•ด ์ƒ์„ธ์ •๋ณด ๋ฐ ๋†์•ฝ ์ •๋ณด ์ œ๊ณต


  • ๊ตญ๊ฐ€๋†์ž‘๋ฌผ๋ณ‘ํ•ด์ถฉ๊ด€๋ฆฌ์‹œ์Šคํ…œ(NCPMS)์˜ ๋ณ‘ํ•ด์ถฉ ๊ด€๋ จ OpenAPI์™€ ๋†์•ฝ์•ˆ์ „์ •๋ณด์‹œ์Šคํ…œ์˜ ๋†์•ฝ ๋“ฑ๋ก์ •๋ณด OpenAPI๋ฅผ ์ด์šฉํ•ด ๋ณ‘ํ•ด/๋ฐฉ์ œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • API์˜ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด XML์ด๊ธฐ ๋•Œ๋ฌธ์— Tikxml ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค”ย Learned

  • ์ด๋ฏธ์ง€ ์„ ํƒ ํ›„ 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์˜ ์“ฐ์ž„์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์™€ Retrofit ํ†ต์‹  ์ค‘ ์ด๋ฏธ์ง€(File) ์ „๋‹ฌ์„ ์œ„ํ•ด Multipart๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ 

    • ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ @Body, @Path ๋งŒ์œผ๋กœ๋Š” ์„œ๋ฒ„์— File ํ˜•์‹ ์ „๋‹ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด @Multipart ํ†ต์‹ ์„ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
    • String(Uri)์ด ์•„๋‹Œ File(Image) ํ˜•์‹์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ด์œ ๋Š” ์„œ๋ฒ„์ธก์—์„œ ์ด๋ฏธ์ง€๋ฅผ Uri๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , AWS S3 ๋ฒ„ํ‚ท์— ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•จ.
      โ†’ ์„œ๋ฒ„๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Hilt ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

    • ViewModelFactory์™€ ViewModelProvider๋กœ ViewModel์„ ์ƒ์„ฑํ•˜๋˜ ๋ฐฉ์‹์—์„œ Hilt ๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”— Playstore

https://play.google.com/store/apps/details?id=sju.sejong.capstonedesign

About

๐ŸŒฟ [๊ทธ๋กœ์ž‡] ์‹œ์„ค ์ž‘๋ฌผ ๋ณ‘ํ•ด ๊ฒ€์ถœ ๋ฐ ๋ถ„๋ฅ˜ ํ”Œ๋žซํผ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages