๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ณณ๊ฐ„์—์„œ ์ธ์‹ฌ๋‚œ๋‹ค

(31)
[ํ˜‘์—…][๊ฒฝํ—˜ ๋Œ์•„๋ณด๊ธฐ] Jira ํ˜‘์—… ์ „ ์ง์žฅ์—์„œ Jira ํ‹ฐ์ผ“ ํ™œ์šฉ ๊ด€๋ จํ•ด์„œ ๋งŽ์ด ๋ฐฐ์› ๋‹ค. ํˆฌ๋ช…ํ•œ ์—…๋ฌด ๊ณต์œ ์™€ ์›ํ™œํ•œ ์†Œํ†ต์„ ์œ„ํ•ด Jira๊ฐ€ ๊ต‰์žฅํžˆ ์ข‹์€ ํˆด์ž„์„ ๊ฒฝํ—˜ํ–ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ๋ฅผ ๋ณด๋ฉด์„œ ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์˜ Jira ํ‹ฐ์ผ“ ์šด์˜ ๋ฐฉ์‹๊ณผ ๋ชฉ์ ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์ข‹์•˜๋‹ค. https://velog.io/@aajaeyoung/ticket-driven-development ํ‹ฐ์ผ“ ์ฃผ๋„ ๊ฐœ๋ฐœ (ticket-driven development)์„ ๋„์ž…ํ•˜๊ธฐ ํ˜„์žฌ ๋‚ด๊ฐ€ ๋‹ค๋‹ˆ๊ณ  ์žˆ๋Š” ํšŒ์‚ฌ๋Š” Unity ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€๋ฒ„์Šค ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๋Š” ํšŒ์‚ฌ๋กœ์„œ, ์—ฌ๋ŸฌํŒ€์ด ์‚ฐ์žฌํ•ด ์žˆ๋‹ค. ๊ทธ ์ค‘ ๋‚˜ ๋˜ํ•œ ํ•˜๋‚˜์˜ ํŒ€์˜ PM์œผ๋กœ์„œ ํŒ€์žฅ๋‹˜๊ณผ ํ•จ๊ป˜ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด์ œ ๋‚ด๊ฐ€ ํ”„๋กœ velog.io ๊ณผ๊ฑฐ์˜ ๊ธฐ์–ต์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์ž๋ฉด, ํ‹ฐ์ผ“ ์ž‘์„ฑ์—๋„ ๋ฃฐ์ด ํ•„์š”ํ–ˆ๋‹ค. ์ด์Šˆ ์œ ํ˜• - ๋‹น์‹œ Tas..
[์‹ค๋ฌด] ๊ณ ๋ ค์‚ฌํ•ญ / ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ ์˜๋„ / ์‹œ์•ผ / ํ˜‘์—… ์—…๋ฌด์˜ ์ „์ฒด ๊ทธ๋ฆผ ๋ณด๊ธฐ ์—…๋ฌด๊ฐ€ ์ „์ฒด ๊ทธ๋ฆผ์—์„œ ์–ด๋Š ๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์—…๋ฌด์˜ ์˜๋„ ํŒŒ์•…ํ•˜๊ธฐ. ๋‚˜๋Š” ์„œ๋‘๋ฅด๋‹ค๋ณด๋ฉด ์˜๋„ ํŒŒ์•…์— ์‹คํŒจํ•œ๋‹ค. ์˜๋ฌธ์‚ฌํ•ญ์€ ๋ฐ˜๋“œ์‹œ ์งˆ๋ฌธํ•˜๊ธฐ ๋ฌธ์„œ ๊ฐœ๋ฐœ ๋ฌธ์„œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํžŒํŠธ. ์ฝ”๋“œ๋ฅผ ์ž˜ ์ง ๋‹ค๋Š” ๊ฒƒ์€ ๋‚จ์ด ์ด์–ด์„œ ์ž‘์—…ํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๊ฒƒ. ๋ฌธ์„œ๊ฐ€ ์ด ๊ธฐ๋ฐ˜์ด ๋œ๋‹ค ์ฝ”๋“œ์™€ ๋ฌธ์„œ๋Š” ๋งคํ•‘๋˜์–ด์•ผ ํ•œ๋‹ค. ์ œ๋Œ€๋กœ ๋œ ํ™”๋ฉด ์„ค๊ฒŒ๋„ ํ•˜๋‚˜๋งŒ ์žˆ์–ด๋„ ๋‹ค๋ฅธ ๋ฌธ์„œ๋“ค์€ ํ•„์š” ์—†๋‹ค. ๊ฐœ๋ฐœ ๋” ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ. ์ด์Šˆ๊ฐ€ ๋œ ๋‚˜์˜ค๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋ฐ˜๋ณต ์ž‘์—…์ด ์ค„์—ฌ์•ผ์ง€ ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด์Šˆ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ๊ธฐ๋Šฅ์˜ ํ…Œ์ŠคํŠธ๋Š” ๋‚ด๊ฐ€ ํ•ด์•ผ ํ•œ๋‹ค. ์ด์Šˆ ๋ฐœ๊ฒฌ์„ QA์— ์˜์ง€ํ•˜์ง€ ๋ง ๊ฒƒ. ์งง๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋Š” ๋งŽ์ด ํ•˜๊ธฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์—ฌ์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ(๋ชจ๋“ˆํ™”)์—..
[Android] Uri๋กœ๋ถ€ํ„ฐ ํ™•์žฅ์ž ์–ป๊ธฐ ๋ฌธ์ œ uri๋กœ ์ ‘๊ทผํ•˜๋Š” data์˜ ํ™•์žฅ์ž๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๊ณ  ์‹ถ๋‹ค. (๋ถ„๋ช… ๋ˆ„๊ฐ€ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋†“์•˜์„ ๊ฒƒ์ด๋‹ค.๐Ÿค”) ์ฐพ์•˜๋‹ค https://developer.android.com/reference/android/webkit/MimeTypeMap#getFileExtensionFromUrl(java.lang.String) MimeTypeMap | Android Developers developer.android.com ํ™œ์šฉ val extension = MimeTypeMap.getFileExtensionFromUrl(downloadUri.toString())?.let { ".$it" }
[Android][Open Source License] ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ผ์Šค ๋ฆฌ์ŠคํŠธ ์ œ๊ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์ œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ผ์Šค ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์‰ฌ์šด ๋ฐฉ๋ฒ• ์—†๋‚˜? ์•Œ๊ฒŒ๋œ ๊ฒƒ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์—์„œ ์˜คํ”ˆ์†Œ์Šค ์ž๋™์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์žˆ์Œ https://developers.google.com/android/guides/opensource?hl=ko ์˜คํ”ˆ์†Œ์Šค ๊ณ ์ง€ ํฌํ•จ | Google Play services | Google for Developers ์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Switch to English ์˜คํ”ˆ์†Œ์Šค ๊ณ ์ง€ ํฌํ•จ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. Google Play ์„œ๋น„์Šค์—๋Š” developers.google.com ์ง„์งœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค. ์ •๋ง ํŽธํ•˜๋‹ค.
[Android][TextView] marquee ์„ค์ • ๋ฌธ์ œ TextView์˜ marquee ์„ค์ • ๊ฐ’์ด ๋จนํžˆ์งˆ ์•Š์Œ android:ellipsize="marquee" ์™œ ์•ˆ ๋จนํž๊นŒ... ์ฐธ๊ณ  https://stackoverflow.com/questions/3332924/textview-marquee-not-working
[Android][Java] ์ดˆ์„ฑ ๊ฒ€์ƒ‰ ๋ฌธ์ œ ์ดˆ์„ฑ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค ์ถœ์ฒ˜ https://milkissboy.tistory.com/32 https://jhb.kr/122 ๋‘ ๋ฒˆ์งธ ์ถœ์ฒ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™‡‍โ™€๏ธ๐Ÿ™‡‍โ™€๏ธ๐Ÿ™‡‍โ™€๏ธ ์›์ž‘์ž๋ถ„ ํ‰์•ˆํ•˜์‹œ๊ณ  ๊ฑด๊ฐ•ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
[Android][Compose] Compose Canvas๋ฅผ ์ด์šฉํ•ด์„œ Dot Indicator ๋งŒ๋“ค๊ธฐ ๋ชฉ์  Compose์˜ Canvas๋ฅผ ์ด์šฉํ•ด์„œ View Pager์™€ ๊ฐ™์ด ์“ธ Dot Indicator ๋งŒ๋“ค๊ธฐ. ์š”๊ตฌ์‚ฌํ•ญ R_1. ์ด ์ธ๋””์ผ€์ดํ„ฐ๋Š” modifier.align ์„ ํ†ตํ•ด ์„ผํ„ฐ ์ •๋ ฌ์„ ํ•œ๋‹ค. R_2. dot์€ ๊ธฐ๋ณธ์œผ๋กœ ์›ํ˜•์ด๋‹ค. ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” dot์€ ๊ฐ€๋กœ๋กœ ๊ธธ์ญ‰ํ•˜๊ฒŒ ๋Š˜์–ด์ ธ ์žˆ๋Š” ๋ผ์šด๋“œ์ฒ˜๋ฆฌ๋œ ์ง์‚ฌ๊ฐํ˜•์ด๋‹ค. ์ฝ”๋“œ / ๊ตฌํ˜„ @Composable fun BoxScope.DotIndicator( modifier: Modifier = Modifier, pagerState: PagerState, dotSpace: Dp = 4.dp, dotSize : Dp = 5.dp, currentDotWidth : Dp = 12.dp, listSize: Int, currentPageDotColor: Color =..
[Android][DataStore] DataStore ๋™๊ธฐ์ ์œผ๋กœ ์“ฐ๊ธฐ ์ฐธ๊ณ  https://developer.android.com/topic/libraries/architecture/datastore#synchronous ๋ชฉํ‘œ DataStore์˜ ์ €์žฅ ๊ฐ’์„ suspend fun ๋ฐ”๊นฅ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์—ˆ๋‹ค. (์ด๊ฑด ๊ฒฐ๊ตญ์—” DataStore๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์“ฐ๊ณ  ์‹ถ๋‹ค๋Š” ์˜๋ฏธ๋ผ์„œ ์ œ๋ชฉ์„ ๊ทธ๋ ‡๊ฒŒ ๋„ฃ์—ˆ๋‹ค) ๊ธฐ์กด runBlocking์„ ์จ์„œ DataStore์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ runBlocking์ด UI thread๋ฅผ blockํ•˜๋Š” ๊ฑฐ๋ผ ANR ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ํ•˜๋‹ˆ๊นŒ, ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ ํ™•์ธ ์—ฌ๊ธฐ๋ณด๋ฉด DataStore๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋ฆฌ๋กœ๋”ฉํ•˜๋ฉด ANR ์ด์Šˆ๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ฒฐ๊ณผ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ• 1. runBlocking์„ ์จ๋ผ. 2..