전체 글

Never stop acting like the new one on the team
Daily & Thinking

Cryptography 관련 초간단 정리

대칭 키 암호(Symmetric key encrption) * 암호화 복호화에 같은 키를 사용 * 피어간 통신을 한다면 보내는쪽 받는 쪽 같은 키를 미리 공유하고 있어야 함 (키 노출에 매우 취약함) * 대표적인 방식 AES, DES 류 가 있다 비대칭 키 암호(Asymmetric key encryption) 혹은 공개 키 암호 방식( public-key cryptography) 이라고 부르기도 한다. * Public key, Private Key 두 개의 키를 가짐 * 평문 -> 전문(암호문) 암호화 할 때는 Public key 를 사용 / 전문(암호문) -> 평문 으로 복호화시에 Private Key 를 사용 * 대칭 키와는 다르게 피어간의 키 공유를 미리 하지 않아도 됨 즉 A -> B 에게 전문을..

Daily & Thinking

SOPT 앱잼 데모데이에 다녀왔다

SOPT 앱잼 데모데이에는 총 2번 참석하였는데, 별볼일 없는 나에게 멘토라는 역할이 주어졌고 역시나 매우 즐거웠다. 예전에 대학다닐 때는 YAPP 이라는 동아리에서 해커톤을 몇번 나갔던 것 같은데, 예전 생각이 많이 났다. 그 시절(Latte is horse)에는 이미지 뷰에 간단한 애니메이션이나 뷰타입 나눠서 리싸이클러뷰가 앱에서 실제로 보여지면 굉장히 좋아했던 기억이 나는데, 요즘 학생분들은 이전 학창시절때보다 훨씬 잘한다고 느껴져서 그런지 자극도 받고, 학생분들의 열정도 느낄 수 있었다. (다른 멘토분들 말도 잘하시고, 너무 짱짱하셔서 수그리고 있었음ㅋㅋㅋ) 1년 전에 참석 했을 때, 학생이던 분이 오늘 인사했을 때는 취업한 경우도 있었고, 다들 잘 성장하고 있어서 나만 잘하면 되겠거니 싶었다 ㅎ..

Android/Development Tips

Summary MVI 직접 작성 해야/하지 않아야 하는 이유

https://www.youtube.com/watch?v=E6obYmkkdko 를 정리만 해둔 글 입니다. 주요 컨셉 단방향 데이터 흐름 (unidirectional cycle of data) 논블록킹(non blocking) 불변상태(immutable state) 모델(Model)에서 유저(User)의 인텐트(Intent =의도)를 처리하는 시간이 오래걸릴 수 있기 때문에, 데이터 사이클(cycle of data) 을 논블럭(non-blocking) 하는 것이 매우 중요 합니다 상태(state)의 무결성을 보장하는 것이 모델이 하는 일 외부에 의해 상태가 변화 되지 않습니다(immtable) 내부에서는 상태가 변화합니다 인텐트는 네트워크 작업과 같은 비즈니스 작업을 수행하는 변환기(transformer..

Android/Development Tips

확대, 축소, 이동, 회전 가능한 컴포즈 뷰

예시 영상은 티스토리 버그로 동영상 첨부가 안되어, 파일로 첨부합니다. @Composable fun ZoomableBox( modifier: Modifier = Modifier, enableRotation: Boolean = false, minScale: Float = 0.5f, maxScale: Float = 3f, content: @Composable ZoomableBoxScope.() -> Unit ) { var rotationZ by remember { mutableStateOf(0f) } var scale by remember { mutableStateOf(1f) } var offsetX by remember { mutableStateOf(0f) } var offsetY by remember {..

Android/Development Tips

간단 Tips. FrameLayout 위에 Fragment 를 올리는 것보다 FragmentContainerView 에 Fragment 를 올리는 것이 안전한 이유

FrameLayout 위에 Fragment 를 올려둔다면 Fragment 를 잘못 사용하거나, 구성요소 변경(Configuration change) 로 복원되는 경우 아래와 같은 에러를 만날 수 있습니다. 에러는 간단 합니다 상태를 저장하는 onSaveInstanceState 콜백 이후에 Commit 하려 했으니 상태를 저장할 수 있는 단계가 넘어간 상태이기에 불가능 한 상태라는 의미 입니다. 결국 FrameLayout 위에 Fragment 를 올려두게 되면, 상태에 대해 잘 다뤄줘야 합니다. 상태 저장 상관 없이 사용하고 싶다면 commit 이 아닌, commitAllowingStateLoss 메서드를 명시적으로 호출해줘야 합니다. 기본적으로 FragmentContainerView 는 FrameLayo..

Android/Development Tips

간단 Tips. Lottie 에서 Url 을 통해 로드할 때, Unable to parse composition 에러가 발생한다면 ?

결론만 이야기 드리면 LottieAnimationView 클래스에서 제공하는 setFailureListener 를 구현하면 됩니다. Url 을 통해 Lottie 를 이용할 경우, setAnimationFromUrl 를 사용하게 되는데 코드를 차근차근 보면 CacheComposition (캐시 허용) 이 true 라면 앞의 메서드가 호출되어 cacheKey 에 "url_" prefix 가 붙은 cacheKey 가 넘어가고 아니라면 cacheKey 에는 null 이 들어가게 되고 결과를 LottieTast 자료형의 task 에 담고 있습니다. 그리고 실패하는 경우에는 wrappedFailureListener 콜백 함수를 통해 결과를 넘겨 주고 있습니다. 실패했을 때 보여줄 이미지(fallbackResourc..

Android/Development Tips

간단 Tips. 코루틴 SupervisorJob 또는 SupervisorScope 를 사용해야 하는 경우

아래의 함수는 OneShot 으로 어떤 데이터를 가져올 때 많이 구현하게 되는 코드모양새 입니다. 그리고 aUseCase 에서 어떤 에러가 발생하면 runCatching 에 Catch 되어 최종적으로 onFailure 메서드가 호출 됩니다. fun fetchData() { viewModelScope.launch { runCatching { withContext(Dispatchers.XX) { aUseCase() } }.onSuccess { aResult -> }.onFailure { } } } 하지만 이따금식 여러개의 데이터를 가져와야하는 경우가 있습니다. fun fetchData() { viewModelScope.launch { runCatching { listOf(async { aUseCase() }..

Android/Development Tips

간단 Tips. Lottie 가 Android, iOS, Web, Window 등 에서 다르게 보인다면?

https://lottiefiles.com/supported-features Lottie Supported Features Lottie does not support all features of Adobe After Effects; please refer to the list below for details. lottiefiles.com 에서 각각 플랫폼에서 제공하는 Feature 들을 확인해보자! (저의 경우에는 Layer Effects 를 Android 에서 제공하지 않는 것이 문제 였습니다)

Android/Development Tips

간단 Tips. KotlinxSerialization 를 사용하여 Date 를 파싱하는데 에러가 난다면?

DateDto( @SerialName("created_at") var createdAt: Instant?, @SerialName("updated_at") var updatedAt: Instant? ) Instant 클래스를 타고 들어가서 보면 ? ISO-8601 를 사용하는 것을 알 수 있고 2020-12-09T09:16:56.000124Z 와 같은 예시도 볼 수 있다. 역직렬화 화는 과정(deserialize)에서 pase 하는 과정중에 포맷이 맞지 않는다면 DateTimeParseException 을 던지는 것도 알 수 있다. 항상 코드에 답이 있다! 혹시나 서버에서 다른 포맷으로 내려주고 파싱해야 한다면 KSerializer 를 상속받는 클래스를 만들고 직렬화, 역직렬화를 구현해주면 된다는 정보도 ..

Nanamare
TEAM > SELF