들어가며
해당 포스팅의 목적은 백엔드 개발진분들께서 서버 API를 구현하고, 배포까지 해주신 상황이라,
"안드로이드" 파트에선, 내가 주도해서 안드로이드 서버 API 연결 Pre-셋팅을 진행하여,
안드로이드 서버 API 연결 셋팅을 하면서 새롭게 배우고 느낀점들을 기록하기 위한 포스팅이다.
# 사담
처음해보는 서버 API 연결 셋팅이라, 시간이 많이 걸리고
처음 다루는 안드 템플릿, 아키텍처 구조라 API 셋팅을 하는데 필요한 것들을 찾아내는데
어렵고 힘들었다.
그래도, 힘든 만큼 더 많이 얻어가고, 배웠던 좋은 경험을 할 수 있었던 것 같다.
미리 말해보면, 처음 접하는 템플릿과 같은 익숙지 않은 템플릿 구성 속에서 원하는 것들을 코딩으로 구현해내는 방법
그리고, "로그"를 찍어서 에러가 발생하는 지점을 정확하게 찾아내는 방법들을 익힐 수가 있었다.
그래서 이번 포스팅에선, 내가 이러한 것들을 깨달았던 과정들을 서버 API 연결 셋팅 하는 과정들을 순차대로 정리하면서 이야기해볼 것이다.
MVP 기반 "안드로이드" 템플릿 이해
서버 API를 연결하기 위해서, 아래와 같은 MVP 기반 "안드로이드" 개발 템플릿을 구성해두고,
안드로이드 개발을 시작했었다.
📂 app
┣📂 manifest # 앱의 기본 권한정보 기록 & 액티비티 설정폴더
┣📂 java
┣📂 config # 앱 개발 시 부가적으로 필요한 도구폴더
┣📜 ApplicationClass [서버 API 셋팅 & 앱 전역변수 설정]
┣📜 BaseActivity [액티비티의 기본 요소 설정] - 상속
┣📜 BaseFragment [프래그먼트의 기본 요소 설정] - 상속
┣📜 BaseResponse [models 클래스의 기본 요소 설정] - 상속
┣📜 XAcessTokenInterceptor [JWT 토큰이 필요한 API 요청들에 관한 요청헤더 자동설정]
┣📂 src # 앱 메인 개발폴더
┣📂 login
┣📂 main
┣📂 onboarding
┣📂 signup
┣📂 splash
┣📂 res # 앱 XML 개발폴더
┣📂 Gradle Scripts # 앱의 외부 모듈설정 폴더
┣📜 build.gradle (Project)
┣📜 build.gradle (Module)
# API 연결을 위한 템플릿 이해
이번 템플릿은 처음 접하는 "안드로이드 개발 템플릿"이었다. 그래서,서버 API를 어떻게 연결하고 요청하는지 몰랐기에
템플릿 구성이 어떻게 이루어졌는지를 예제 코드를 보면서 이해했다.
예제 코드는 UMC 10주차 강의편에서 서버 API 셋팅을 하고, API 호출을 하는 방법을 알려주었기에,
해당 영상을 보면서 템플릿 구성을 이해했다.
템플릿 구성에 대해 이해를 토대로 서버 API를 연결하는 방법과 요청하는 방법에 대해서 익힐 수 있었다.
# 개발 템플릿 API 연결 Pre-셋팅
📂 manifest
- 앱의 Internet 접근권한 허용 상태로 설정
📜 ApplicationClass
- 서버 API URL 주소를 설정
- 앱 전체에 할당되는 SharedPreferences 객체 생성
(앱 실행직 후 생성되며, 앱 종료 때까지 유효한 데이터 객체) - 앱 전체에 할당되는 Retrofit 객체 생성
(API 요청 객체로 서버 API URL로 설정) - 모든 API 요청에 따라 실행되는 메소드 설정
(API 로그 & API 요청헤더에 토큰 삽입)
📜 XAcessTokenInterceptor
- SharedPreferences 객체에 "X_Access_Token"의 Value 값이 존재하면,
API 요청 헤더에 Value 값 삽입
(유저 로그인 시 유효한 사용자임을 증명하는 API 요청헤더 값인 JWT 토큰을 자동을 넣어줌)
API 요청 & 응답과정 정리
📜 Activity & Fragment
- API 요청 데이터 객체생성
- Service로 전달하여 API 요청 메소드 구현
- Service로부터 받아진 API 응답 데이터로 뷰 업데이트
📜 Interface
- 액티비티 & 프래그먼트의 서비스와 연결해주는
인터페이스 설정
📜 Service
- API 요청 Retrofit 객체 생성 후 API 요청
- CallBack으로 응답객체 받음
- 응답객체를 액티비티 & 프래그먼트로 보냄
📜 Models
- API 요청 데이터객체 지정
- API 응답 데이터객체 지정
📜 RetrofitInterface
- Http 메소드에 따라 API 요청 메소드 구현
코드 구현
#1 API 명세서를 통해 요청 & 응답 데이터 형태 확인
어떤 데이터를 요청해야지만,
정상적으로 API 응답 데이터를 받을 수 있는지를 확인한다.
#2 API 요청 & 응답 데이터 객체 설정 & 생성
API 요청이 발생하는 액티비티 & 프래그먼트에서
이벤트에 따른 API 요청 데이터 객체를 생성해둔다.
(요청 데이터 객체가 없다면, 생성하지 않고 서비스로 넘긴다.)
#3 API 요청 및 응답코드 작성
액티비티 & 프래그먼트에서 요청 데이터 객체를 생성해두고,
서비스에 넘긴다.
받아진 데이터 객체를 가지고, API 요청을 위해 Retrofit 객체에 넘겨준다.
그리고, 서비스에서 API 응답 데이터를 받을 때
CallBack 으로 받으며, 데이터 형식은
앞에서 지정한 API 응답 데이터 객체로 받는다.
#4 API 응답 데이터 뷰 데이터로 업데이트
서비스에서 받아진 API 응답데이터를
인터페이스를 통해 액티비티 & 프래그먼트로 넘겨준다.
받은 응답 데이터를 토대로, 뷰 업데이트를 진행한다.
정리하면, 개발 템플릿에서 지정한 규칙대로,API 요청과정을 나눠서 처리한다는 것을 알 수 있다.
이번에는 MVP 패턴 기반 개발템플릿을 사용했기에,
Model : API 요청 & 응답 데이터객체 생성
View : 액티비티 & 프래그먼트 뷰 데이터 지정
Presenter : 서비스 & Retrofit API 요청
위와 같은 패턴을 기반으로 안드로이드 "앱" 개발이 진행된다.
테스팅 및 실행 디버그
처음 접하는 개발 템플릿으로 , 외부 API 혹은 서버 API를 연결할 때는 "한번에" 성공하는 경우는 드물고, 어렵다.
그래서, API 연결 셋팅을 진행할 때는 처음 연결작업 시 시간이 비교적 많이 소모되고, 지치기 마련이다.
이렇게 힘들고, 추상적인 과정들은 실행 디버깅을 통해 비교적 쉽게 해낼 수 있었다.
(실행 디버깅은 실행 코드 중간에 임시로, "로그" or "콘솔"을 찍어두고, 테스팅 실행을 통해서
실행 창의 콘솔 로그를 확인할 수 있다.)
# 실행 디버깅을 통한 템플릿 구성이해
처음 접하는 템플릿일 경우, 실행이 어떻게 이루어지는 지가 모를 때가 많다.
그래서, 실행 디버깅을 통해, 실행 코드 중간중간에 로그 & 콘솔을 토대로
컴파일러가 실행 시 통과하는 곳과 통과하지 않는 곳을 명확하게 알아낼 수 있어,
템플릿이 어떤 개발 규칙을 지녔는지 쉽게 이해할 수 있다.
# 디버깅 전략
사실, 디버깅 전략은 경험적 노하우라고 생각이 든다.
디버깅을 잘 할수록, 코드에 대한 에러를 빠르게 찾아낼 수 있는 개발자로 성장한다.
하지만, 디버깅의 수준은 얼마나 많이 디버깅을 해본 것에 차이가 발생한다.
나도 처음에는 디버깅의 필요성을 못느끼고, 순수 머릿속으로만 코드 로직을 생각하고, 구현을 했다.
하지만, 복잡한 로직을 갈 수록 디버깅을 함께한다면, 쉬운 로직으로 풀어낼 수 있다.
그에 따라서, 복잡한 로직도 짧은 시간내에 해결할 수 있는 개발자로 성장할 수 있다.
이번 안드로이드 개발자로써 활동을 하면서 디버깅에 대해 새롭게 느낀점은
코드 로직이 이해가 안될 때는 우선 "로그 & 콘솔"을 찍어보자라는 점이다.
머릿속으로 이해했던 지점도, "로그 & 콘솔"을 찍어보면, 새로운 관점들이 생겨나고, 이전에는 보지못했던 새로운 로직들이 생겨나는 듯한 느낌이 든다.
그러면서, 콘솔 & 로그를 찍어보았던 경험을 느릴면서 디버깅을 더 많이 해본 개발자로써 성장할 수 있는 발판이 되기도 한다는 점이다.
마치며
# API 연결 Pre-셋팅
이번 "당신의 발자취" 안드로이드 부분에서 서버 API 연결 셋팅을 담당하여
안드로이드 서버 API 엮기를 위한 Pre-셋팅을 주도적으로 진행해보았다.
처음 접하는 템플릿이기에, Pre-셋팅을 하는데 시간이 많이 들긴 했지만,
로직들을 하나씩 살펴보면서, 성공적으로 API를 연결을 할 수가 있었다.
앞으로는 처음 접하는 템플릿에 접해도, 이번 경험보다 더 빨리 적응하고, 활용할 수 있는 개발자로 성장해나갈 예정이다.
'🌤 프로젝트 > UMC 3기: 당신의 발자취' 카테고리의 다른 글
[팀 프로젝트] UMC 3기 앱 개발 프로젝트: 안드로이드 개발자 후기 (2) | 2023.02.17 |
---|---|
[팀 프로젝트] 갤러리 API 연결을 완료하고.. (트러블 슈팅) (0) | 2023.01.29 |
[팀 프로젝트] Github 프로젝트 관리자로 활동하면서.. - 1차 병합완료 (0) | 2023.01.19 |
[팀 프로젝트] 갤러리 뷰 Fragment 구현 완료 - 개발 회고록 (0) | 2023.01.15 |
[팀 프로젝트] 안드로이드 개발템플릿 스터디 - 프로젝트 준비 (0) | 2023.01.03 |