- 우선 기존앱에서 사용하던 암호화 클래스.kt 를 그대로 내 앱에 복붙하였다.
- 그리고 회원가입을 위해 id와 password를 입력하고 enter버튼을 클릭했을 때 joinEmail(joinEmailRequest)를 실행시키는 소스코드(JoinFragment.kt)로 이동!
- password값을 edittext.text로 바로 들고왔던 로직에서, 암호화를 적용시킨 password값으로 전환시키는 로직을 추가했다.
binding.joinEnterButton.enterButtonRoot.setOnClickListener {
val joinEmailRequest = JoinEmailRequest()
val 암호화 = 암호화클래스(클라이언트 아이디)
val password = binding.joinPwInput.pwLayoutTextInputEditText.text.toString()
val cipherPassword = 암호화.encrypt(password)
joinEmailRequest.userId = binding.joinIdInput.idLayoutTextInputEditText.text.toString()
joinEmailRequest.password = cipherPassword!!
joinEmail(joinEmailRequest)
}
- 여기서 클라이언트 아이디는 서버도 알고 클라이언트(내 앱)도 아는 공개키이다.
- 암호화된 키를 서버와 클라이언트가 주고받을 때 각자가 평문으로 바꾸어 해석할 수 있도록하기 위함
→ 암호화를 적용시킨 후 회원가입 기능을 이용하니 다음과 같은 로그를 okHttp를 통해 얻을 수 있었다.
- password는 잘 암호화된 것을 알 수 있다!
- 그런데 여전히 400이다.. 자세한 로그를 보기 위해선 서버쪽에서 일어난 에러로그를 찾아야 겠다!
서버 쪽 에러로그
- MethodArgumentNotValidException: Validation failed for argument [0] in public com.umc.cresyn.result.ResultVO
- 유효성 체크에 통과하지 못했다는 의미.
- 해당 라인을 더 읽어보면 발견할 수 있는 문구는 다음과 같다.
- [Field error in object 'userEmailAddReqVO' on field 'name': rejected value [null];
- name이라는 변수가 null이다. 즉, name변수가 필수적으로 서버로 들어와야하는데 내가 보내주지 않아서 생긴 문제!
- [Field error in object 'userEmailAddReqVO' on field 'name': rejected value [null];
→ 이번 기회에 정확히 로그인 기능을 요청하기 위해서는 서버쪽에 어떤 변수들을 필수적으로 보내주어야하는지 체크하는 시간을 가졌다.
위 에러가 알려주듯이 userEmailAddReqVO클래스를 찾아보았고, 다음과 같이 필수적인 변수들은 @NotEmpty어노테이션이 달려져있는 것을 볼 수 있다!

→ 이제 클라이언트쪽에서 해당 변수들을 보내줄 수 있도록 다시 UI만들고 데이터 넘겨주는 작업을 실시하면 되겠다!
느낀 점 🤔
패스워드에 암호화를 해주는 작업이 생각보다는 금방 끝이 났다. 다행!
오늘 서버쪽 에러로그를 보고 서버쪽 소스코드도 볼 수 있는 기회가 주어졌다.
안드로이드 개발자와 서버개발자가 원래는 개별적으로 존재하지만.. 우리 회사에서는 안드로이드 개발자가 서버쪽도 손을 봐야하는 상황이다.
그래서 서버쪽도 내가 이후에 다루어보아야겠다는 생각이 들었다!
서버쪽 코드가 생각보다 재미있어 보였다 😊
제 글이 당신에게 도움이 되었길 바랍니다.
추가적인 질문은 언제든지 환영해요.
인상깊게 보셨다면 아래 광고 한 번만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠
'📜 TIL' 카테고리의 다른 글
[Android] NullPointerException -ViewTreeObserver.dispatchOnGlobalLayout (0) | 2023.03.06 |
---|---|
[Android] Navigation으로 Fragment간 이동을 편리하게 만들어주기 (0) | 2023.03.01 |
[Android] 안드로이드 개발자 면접질문 정리 part 1 (0) | 2023.02.22 |
[Android] Retrofit활용해 서버와 통신 및 okHttp로 로그찍어보기 (0) | 2023.02.20 |
[Android] 화면 이동하자마자 키보드가 생기며 입력창에 포커스 맞추는 기능 구현 (0) | 2023.02.19 |