Android 28

안드로이드 통신에 자주 사용하는 Retrofit 알아보기 (1) - HttpURLConnection, OkHttp, Retrofit 장점을 중심으로

Jwt 토큰 관련해서 프로젝트의 버그 픽스, 간단한 리팩토링(리팩토링이라고 하기도 뭐하지만) 을 진행하면서 이 김에 Retrofit 클래스의 내부 구조에 대해서 조금 이해를 해야 할 필요가 있을 것 같아 정리해보려고 합니다. 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니 sh1mj1-log.tistory.com APi 요청 시 Access Token 을 갱신해야 할 때 Refresh Token 으로 토큰..

Api 요청 시 Access Token 을 갱신해야 할 때 Refresh Token 으로 토큰 갱신 후 같은 api 재요청

이전 글 [안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기] 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니 sh1mj1-log.tistory.com 에서 리팩토링/버그 픽스를 하며 작성했던 글의 연장선입니다. 추가로 이 글도 보면 도움이 되겠네요 [그래서 jwt, Access, Refresh Token 이 뭔데?] 그래서 jwt, Access, Refresh Token 이 뭔데? 이전 글 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header..

그래서 jwt, Access, Refresh Token 이 뭔데?

이전 글 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 에서 Access token 을 @Header 에 넣는 부분에 대해서 다뤘습니다. 그렇다면 Access Token 이 대체 무엇일까요? Access Token 이전에 Jwt 토큰을 알아야 합니다. 하나 하나 차근차근 알아봅시다. JWT 토큰이 뭔데? JWT(Json Web Token) 은 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격입니다. 유저의 권한을 결정하는 정보를 담는 데이터 조각으로 유저의 인증(Authentication), 인가(Authorization) 정보를 담습니다. Jwt 토큰을 사용해서 클라이언트와 서버는 안전하게 통신할 수 있습니다. 클라이언트에서 jwt 토큰을 담아서 서버에 정보를 보..

안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기

지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니다. 일단 오늘 볼 부분은 서버와 api 통신을 하는 부분인데요. 이 프로젝트에서는 Retrofit 을 사용했고, Di 는 Hilt 를 사용하였습니다. 서버와 api 통신을 하는 전체 구조 먼저 간단한 UML 을 통해 기존에 어떻게 서버 통신을 진행하고 있는지를 간단히 표현하자면 아래와 같습니다. 클라이언트에서 AlbumApi 를 호출할 때 Retrofit 객체를 만들어 주고, 또 OkHttpClient 객체를 만들어 주는 부분은 Hilt 로 구현되어 있습니다. 화살표가 UML 의 표준으로 그린 것도 아니고 실제로 H..

안드로이드 Navigatioin Back Stack 없애기

문제 발생 배경 MVVM 아키텍처, Android Jetpack Library 을 적용한 BaBa 라는 프로젝트를 진행 중에 하나의 문제에 도달했습니다. 결론부터 말하면 Navigation 의 back stack 저장 문제였습니다. 문제 시나리오는 아래와 같습니다. 어떤 아기의 앨범 데이터를 서버로부터 불러오는 경우가 있습니다. 이 앨범 데이터들은 ‘월별’, ‘년도별’, ‘전체’ 로 나뉘어져 화면에 띄워져야 합니다. 그리고 월별, 년도별에서 앨범을 클릭하면 해당 월/ 년도의 앨범을 화면에 띄워줍니다. 이런 식으로 말이죠. 팀원들과의 회의를 통해 월별, 년도별, 전체 앨범 데이터를 계속해서 서버와 통신하여 데이터를 가져오는 것보다 한 번의 모든 앨범을 서버에서 클라이언트로 가져온 후 클라이언트에서 데이터를..

Android/UI 2023.05.17

Android ViewPager2 간단히 뜯어보기

BABA 라는 Android Application side project 을 하는 도중 아래와 같은 화면을 만들어야 했습니다. 이 때 ViewPager2 에 대한 이해가 부족한 것 같아 공부하게 되었습니다. (물론 아래 gif 는 ViewPager2 와 Custom 한 TabLayout 을 같이 사용한 것입니다. viewPager2 의 내부 동작 방식 ViewPager2 는 FragmentStateAdapter 을 extend 해서 구현해야 합니다. 그런데 FragmentStateAdapter 는 RecyclerView.Adapter 을 extend 하고 있습니다. 즉, ViewPager2 는 RecyclerView.Adapter 을 사용하여 동작합니다. RecyclerView 에서의 Item 은 Lis..

Android/UI 2023.05.05

Android 계산기 앱 (LayoutInflater, Room, Thread)

바로 이전 포스팅에서 Room 에 대해 정리했다. 이 기능을 이용해서 간단한 계산기 앱을 구현할 것이다. 계산기에 이전 계산 기록을 Room에 저장하고 Dao 을 만들어 인서트, 쿼리 등의 함수를 만들 것이다. 크게 사용된 기능은 아래와 같다. Layout TableLayout 키패드 레이아웃 구성할 때 사용 Constriantlayout LayoutInflater 계산 기록을 하났기 추가할 때 사용 Room local DB 에 계산 기록 저장할 때 Thread DB 에서 데이터를 불러오거나 저장, 업데이트할 때 사용 확장함수 isNumber 사용. UI 구성 하단에 계산기 키패드 레이아웃을 TableLayout 으로 구성하고 상단에는 따로 View 을 만들어 공간을 만들어준다. constraintVer..

Android/TOYTOY 2022.09.14

Android Room, SQLite 기본

Room Room 지속성 라이브러리는 SQLite에 대한 추상화 계층을 제공하여 SQLite의 모든 기능을 활용하면서 보다 강력한 데이터베이스 액세스를 허용한다. 즉, 완전히 새로운 개념은 아니고 SQLite 을 활용하여 객체 매핑을 해주는 역할을 한다. https://developer.android.com/jetpack/androidx/releases/room?gclid=CjwKCAjwvNaYBhA3EiwACgndgjDo15TYN8-tpyBN9fm_rwUN_Q2ZFcmD4ccl-ITc9LllTLDPsLWQsRoCZGYQAvD_BwE&gclsrc=aw.ds#groovy What is SQLite? https://onlyfor-me-blog.tistory.com/271 [Android] SQLite 사용법..

Android/Theory 2022.09.06

비밀 다이어리 ( Handler, SharedPreference, AlertDialog)

지난 시간에 배운 Thread, Handler, Runnable 과 SharedPreference 을 실제 앱에서 사용하여 간단한 비밀 다이어리를 만들어볼 것이다. 아래는 지난 포스팅 링크: Android Thread, Handler, Runnable [Android Thread, Handler, Runnable 이번에는 Android 에서의 Thread, Handler, Runnable 에 대해서 알아봅니다. 사실 작년에 프로젝트를 할 때도 자주 사용되는 기능이고, 또 클론 코딩 등 공부를 하면서도 자주 사용했지만 이번에도 누군가 sh1mj1-log.tistory.com](https://sh1mj1-log.tistory.com/10) Android SharedPreference [Android Shar..

Android/TOYTOY 2022.09.05

Android SharedPreference

SharedPrefernce Context.gethsharedPreference(String, int) 로 리턴된 preference을 접근하고 수정하는 인터페이스. 특정 집합에 대해 모든 클라이언트가 공유하는 이 클래스의 단일 인스턴스가 있다. 즉, 이것은 싱글톤 패턴과 연관이 있다!! SharedPreference 는 데이터를 파일로 저장하는데 이 파일은 앱 폴더 내에 있다. 앱이 삭제되기 전까지 저장한 데이터가 보존된다. data/data/(패키지 이름)/shared_prefs/SharedPreference 기본 설정값이 유지되고, 수정을 하고자 하면 저장소에 commit될 때 Editor 개체를 통과해야 한다. 다양한 get 메서드로 리턴될 수 있다. 이 때 응용 프로그램에서 변경할 수 없는 것으..

Android/Theory 2022.09.05