이번 주는 당근마켓의 클론코딩을 진행했습니다. 첫 협업 때 못해본 채팅 기능에 도전해보고 싶었고, 프론트에서도 무한 스크롤을 연습해보기 좋을 것 같았기에, 당근마켓을 클론코딩 사이트로 정했습니다.
첫 협업에서는 이미지를 포함한 기본적인 CRUD만 했기 때문에, 큰 어려움이 없었습니다. 기존에 과제를 통해 해왔던 내용들이 반복되었고, 이미지를 업로드하는 기능만 추가되었습니다. AWS를 통해 서버를 배포하고, HTTPS로 바꾸는 일이 더 큰 과제였다고 생각합니다.
클론코딩을 진행하면서, 생각해야 할 것들이 더 많았습니다. 첫 번째로, 회원가입이 비밀번호를 입력하지 않고, 이메일 혹은 전화번호에 인증번호를 전송하는 방식을 사용하고 있었습니다. 이를 구현하기 위해, CoolSMS와 JavaMail과 같은 라이브러리를 도입해야 했습니다. 추가로, 전송된 인증번호와 해당 이메일 혹은 전화번호를 임시로 저장해야 할 곳이 필요했고, Redis에 대해 공부해야 했습니다.
두 번째로, 로그인 역시 인증번호 방식을 사용하고 있었습니다. 기존에 Security 단에서 Username과 password를 받아서 인증하던 방식이 아니었기 때문에, Redis를 다루는 클래스를 가져와서 사용해야 했습니다. 해당 과정에서 문제가 해결되지 않아서, Service 단에서 유저의 정보를 확인했고, 토큰을 생성했습니다. 이 부분은 반드시 리팩토링을 거쳐서 수정해야 할 것 같습니다. (매니저님에게 질문하여, 가닥이 잡힌 것 같습니다.)
세 번째로, 당근마켓은 위치 기반 게시글을 검색해야 했으므로, 회원 가입시 주소 정보를 검색하는 기능이 필수였습니다. 주소 검색 API를 사용하기 위해, 외부 API와의 통신을 위한 라이브러리인 RestTemplate를 사용해야 했습니다. 덕분에 RestAPI에 대한 공부도 다시 할 수 있었습니다.
이번 클론코딩은 내가 기존에 아는 내용만 활용해서, 아는 부분까지만 구현하고 있었다는 사실을 인지하게 만들어줬습니다. 어떤 서비스를 구현할 때, 필요한 부분이 무엇인지, 그리고 서비스를 구현하기 위해 어떤 기술들이 필요한지에 대해 고민해볼 수 있었습니다. 덕분에 프로젝트의 주제에 대해 더욱 깊고, 풍부하게 생각할 수 있었습니다.