Lumpy Space Princess - Adventure Time
대외활동/유데미 STARTERS 2기

유데미 STARTERS 취업 부트캠프 2기 - 프론트엔드 11주차 학습 일지

yaebb_82 2022. 12. 25.

 

 

저번 Sprint2 기간 동안에 끝냈었어야 하는 회원정보 수정 기능을 주말동안 작업해서 월요일에 짠~하고 팀원들에게 보여주고 싶었는데... 알 수 없는 에러 때문에 2일 동안 고생을 했었다. 정말 간단하게 사용자 닉네임과 프로필 아이콘 아이디 값만 PUT으로 서버에 보내주기만 하면 됐었다. 그래서 간단하게 끝나겠거니 하고 빌드를 했는데, 자꾸 Null 값이 들어간다면서 에러만 뜨고 정확한 이유를 Log에서 확인하기가 어려웠다. 그래서 혹시나 하고 Postman으로 확인도 해봤는데 계속 Status는 200이었다.(서버 통신이 잘 되고 있다는 소리)

 

그래서 당연히 내 코드가 이상하겠거니 싶어서 토요일 하루 동안 붙잡고 수정을 해보았지만... 안타깝게도 해결이 되지 않았다. 하지만 아무리봐도 내 코드에 문제가 없었다. 저번에 Get이니 Post이니, 200이니 400이니 하고 서버분과 같이 고생을 했었던 적이 있는데, 그때 옆에서 슬쩍 봤었을 때 form-data로 Postman을 확인하셨던 기억이 있어서 원래는 raw로 확인하고 있었는데, form-data로 다시 한 번 확인해보았다. form-data로 확인했을 때에도 Status가 200이었다. 둘 다 200이 떠서 처음에 나는 raw와 form-data의 차이점을 몰라 같은 것으로 생각했었다. 

 

내 코드에도 문제가 없고... 서버도 통신이 잘되는데... 왜 자꾸 에러가 날까??🤔 한창 고민의 굴레에 빠져있을 때 문득 DataGrip이 생각났다. 회원가입 관련해서 테스트할 때 서버분께서 DB 보는 방법을 알려주셨었는데, 이번에 확인해보니 form-data로 했을 때는 값이 잘 들어가는데, raw로 하니까 값이 안들어가고 Null 값과 0이 들어가는 것을 확인할 수 있었다. 그제서야 form-data와 raw가 다른 것이라는 것을 인지하게 되었고, form-data에 대해서 구글링을 해보니 multipart 형식일 때 사용하는 것임을 알게 되었다. (새롭게 알게 된 사실이기도 했고, 이후에 같은 안드로이드 팀원분들께도 도움이 될까 싶어서 정리해서 공유해드렸다.)

 

 

내 코드에는 문제가 없다는 것을 알게 되었고, 결국 DataGrip 덕분에 일요일 새벽이 되어서야 문제점을 파악할 수 있었다. (DB를 볼 수 있도록 미리 알려주신 서버분께 무한 감사...🙏) 단순히 Int와 String값만 보내면 되는데, 왜 multipart를 사용해야 하는 것인지? Postman으로 확인했을 때 form-data와 raw 둘다 Status가 200이 나오는데 왜 그런것인지? 정해진 형식이 있을텐데 형식이 맞지 않을 때에는 예외처리는 없는지? 등등... 궁금한 점들을 정리해서 월요일 회의시간에 말씀드렸고, 같이 원인이 무엇인지 파악해보았다.

 

알고보니 다행히도 multipart는 아니었고, 서버분께서 코드를 작성하실 때 빠뜨린 부분이 있었다고 하셨다. 생각보다 손쉽게 해결이 되어서 다행이었다. 서버분께서 앞으로도 이런 일이 있으면 바로바로 연락주면 수정을 해주시겠다고 하셨다. 사실 새벽이 아니었으면 연락을 드렸을텐데, 너무 늦은 시간이어서 연락을 못드렸었다. 앞으로 작업하다가 서버와 관련해서 문제가 생기면 바로 요청을 드려서 시간 지체없이 빠르게 해결하도록 노력해야겠다. 그리고 이번 일을 통해서 에러에 대한 원인 파악을 빠르게 하는 것도 능력이구나 싶었다.

편-안

 

 

 

Sprint 2 기간이 끝나고 Sprint 3 동안에는 무엇을 해야할 지 팀원들과 리스트업을 진행해보았다. 현재 가장 크게 남아있는 기능들을 추려보면, 신고기능, 채팅기능, 손흔들기가 남아있었다. 이 중에서 어려운 기능을 뽑자면 실시간 통신을 해야하는 채팅 기능이다. 원래는 이전부터 얘기해왔었던 것은 각자 남아있는 업보빔들을 누가 먼저 청산하느냐에 따라서 채팅 기능을 맡기로 했었다. 이번에 남은 업보빔들을 나열해보고 팀장님께서 제일 적게 남으셔서 채팅을 맡겠다고 해주셨다. (팀장님 만만쉐이~🙌) 채팅을 뺀 나머지 두 개 기능들 중에서 나는 손흔들기 기능을 맡게 되었다.

 

 

 

손흔들기를 하기 전에 업보빔들을 청산 했었어야 했다. 업보빔들이 대부분 FCM토큰을 넘기는 작업들과 연관된 것들이라 빠른 처리가 필요했었다. FCM토큰은 앱 푸쉬를 날릴 때 필요한 기기의 고유한 토큰 값인데, 회원가입할 때와 로그인 할 때 서버에 보내는 API, 로그아웃이나 회원탈퇴를 할 때 서버에서 삭제하는 API 연동이 필요했다. 저번 주에 이 부분을 담당하신 서버분께서 작업은 다 되었는데 배포 서버에 반영만 안되었다고 하시면서 빨리 해주시겠다고 하셨다. 우리 팀에는 서버 파트에 3명이 있는데, 한 분은 원래 우리 팀이셨고, 나머지 2명은 다른 팀이시지만 안드로이드와의 협업 경험을 쌓으실 겸 도와주시겠다고 자원하신 분들이시다. 그분들의 원래 팀에서도 작업을 해야 하다보니 배포 서버에 반영되기까지 약간의 시간이 걸렸던 것 같다. 그래도 바쁘신 와중에도 요청드리면 최대한 빠르게 해결해주시기 위해서 애쓰시는 모습에 그저 감사할 따름이다.

 

덕분에 FCM 토큰을 서버에 보내고, 삭제하는 API 연동이 끝나게 되었고, 회원정보 수정 기능 이슈가 해결되면서 마이페이지에서 받은 회원 정보를 다른 하위 페이지로 safe args로 넘기는 작업도 끝낼 수 있게 되었다. 그리고 핸드폰의 뒤로가기 버튼을 눌렀을 때 발생하는 이슈도 해결하게 됨으로써 내 Sprint2 업보빔이 드디어 청산되었다!!

 

 

 

업보빔 청산 이후 손흔들기 기능을 구현하기 위해서 지도 API에 대해서 조사를 해보았다. 대부분 지도 API를 사용한다고 하면, 구글 맵스, 네이버 지도, 카카오맵 이렇게 크게 3가지를 사용한다고 한다. 조사를 해보니 국내에서 사용하는 지도 같은 경우에는 네이버와 카카오를 주로 사용한다고 하고, 구글과 네이버는 일정 기능들에 대해서 유료로 진행되는 반면 카카오의 경우 모두 무료로 진행된다고 한다. 사실 처음에는 카카오맵 사용을 꺼려했었다. 지도 디자인 자체도 네이버에 비해서 조금 투박한 느낌이기도 했고, 지도 관련 API 문서가 Kotlin 없이 전부 Java로 이루어져 있어서 지레 겁을 먹었던 것 같다. 하지만 이전에 카카오톡 소셜 로그인 구현을 하면서 해시 키를 3명 모두 등록을 하기도 했고, 모든 기능을 무료로 사용할 수 있기 때문에 카카오맵을 선택하게 되었다.

 

카카오맵 연동하는 과정이 다른 지도 API들과 달리 조금은 까다로운 부분들도 있고, 다른 팀원들이 나중에 카카오맵 사용하게 될 경우에 참고하면 좋을 것 같아서 Trouble Shooting에 연동하기 위한 순서들을 자세히 기록해서 공유했다.

작성한 내용 중 일부

 

 

 

그리고 손흔들기 기능을 어떤 서버 분이 맡으셨는지 궁금해서 여쭤보니 아직 미정이라고 하셔서, 누가 이 기능을 맡을 것인지, 어떤 방식으로 진행을 할 것인지(실시간으로 통신을 진행할 것인지 vs 일정 시간을 주기로 통신을 진행할 것인지), 언제까지 API가 나왔으면 좋겠는지 등등... 회의를 통해서 결정하게 되었다. 나도 이제 막 카카오맵을 연동한 상태라 작업할 내용들이 많아서 필요한 API는 늦어도 화요일까지는 주셨으면 좋겠다고 요청을 드렸다. 다음 주가 데모데이3 이기 때문에 빨리 API도 받고, 작업도 끝내서 이번엔 꼭 계획한 모든 것을 100% 끝내고 싶다.

암...오께...🫠

 

 

 

이번주에는 퍼실님들과 상담도 진행했다. 팀 별로 웅누에 내려가서 현재 팀의 진행상황이나, 어려운 점, 궁금한 점 등등 얘기를 나누는 시간을 가졌다. 퍼실님들께서 어느 정도 우리 팀의 상황에 대해서 들으시고는, 스프린트3까지는 웬만한 기능 구현을 마쳤으면 좋겠고 실제로 마켓 출시까지 하면 좋겠지만 여유가 되지 않는다면 APK를 STARTERS 사람들에게라도 배포를 해서 피드백을 받고, 그것을 해결하는 시간을 가졌으면 좋겠다고 하셨다. 속도적인 측면에서 안드로이드 팀 전체가 웹 쪽에 비해서 느린 편이라고 하시면서, 빠르게 작업을 진행하는 것도 권장해주셨다. 개발 이외에도 아이디어 적인 측면에서도 상담을 통해 많은 도움을 주셨다. (감사합니다!!🙇‍♀️)

 

퍼실님들과의 상담 말고도 안드로이드 멘토링도 진행했다. 멘토님께서 코로나로 몸 상태가 좋지 못하심에도 불구하고 온라인으로 멘토링을 해주셔서 너무 감사했다. 우리 팀 같은 경우에, 전반적으로 서버와 통신하는 과정에서 속도 관련 이슈가 있어서 질문을 드렸다. 서버 통신하는 속도보다 화면 전환 속도가 빨라서 반영이 안되는 경우도 있었고, 반영이 안되서 앱이 죽는 경우도 있었다. 이런 부분들을 전역적으로 처리를 해야할 것 같은데... 마땅히 좋은 방법이 떠오르지 않아 멘토님께 질문을 드렸다. 멘토님께서 이 부분에 대해서 LifeCycle을 생각해서 코드를 짜면 좋을 것 같다고 피드백을 주셨고, 여러 단계들 중 화면이 갱신될 때 호출되는 Resume에 구현을 하면 좋을 것 같다고 하셨다. 이외에도 각자 궁금한 점들을 물어보는 시간을 가졌고, 나 같은 경우에는 손흔들기 기능 자체가 서버와 실시간 소통을 해야할지, 아니면 일정 시간을 주기로 통신을 하는 것이 좋을지에 대해서 질문을 드렸었는데, 실시간 소통이 어렵다면 일정 시간을 주기로 통신하는 것이 나을 것 같다는 답변을 받게 되었다. 멘토링이 끝나고 멘토님께서 다음주에는 오프라인으로 멘토링을 하자며 맛있는 것을 사주시겠다고 하셨다.(박제~🫶)

 

 

이제 STARTERS도 한 달 채 남지 않은 상황인데, 뭐든 최대한으로 끌어올려서 유종의 미를 거두고 싶다. 남은 기간동안 파이팅🔥

 

 

 

+ 이번주는 샐러드를 안먹고 다 밖에 나가서 먹은 것 같다. 오랜만에 느껴보는 바깥음식 바이브 였다.

 

 

 


 

 

* 유데미 바로가기 : https://bit.ly/3SFlXDy 

* 유데미 STARTERS 취업 부트캠프 공식 블로그 보러가기 : https://blog.naver.com/udemy-wjtb 

 

 

 후기는 유데미-웅진씽크빅 취업 부트캠프 2 - 프론트엔드&백엔드 과정 학습 일지 리뷰로 작성되었습니다.

 

 

 

반응형

댓글