221009 TIL 로그인이 된 줄 알았지..

오늘은 아직 구현하지 못한 로그인과 회원가입 기능 구현을 목표로 시작했다.

로그인과 회원가입 기능을 맨 마지막에 구현하는 이유는 아샬 님이 맨 마지막에 인증 / 인가 처리하시기 때문에 작업의 흐름을 따라 하려는 것도 있지만 서비스에서 로그인 회원가입이 중요한 기능은 아니라고 판단이 되었고, 로그인 회원가입을 먼저 구현하면 내가 만든 서비스를 테스트용으로 이용할 때마다 로그인해서 이용해야 하는 번거로움이 있을 것 같아 제일 후순위로 밀어놓았다.

 

로그인을 구현하던 중 이제는 안만나면 섭섭한 친구인 오류를 마주했는데 오늘도 꽤나 애를 먹었다.

로그인이 당연히 데이터베이스안에 있는 아이디로만 로그인했을 때 로그인이 돼야 하는데 데이터베이스에 존재하지 않는 아이디로 로그인을 해도 로그인이 되는 이상한 상황이 되어버린 것이었다.

그래서 당연히 백엔드 쪽 유저 레파지토리에서 아이디 찾는 것이 잘못되었겠구나 하고 봤는데 못 찾았을 때 예외처리가 아주 잘 되어있는 것을 보고 당황을 했다.

User user = userRepository.findByUserId(from).orElseThrow(() -> new UserNotFound());

그러면 뭐가 잘못된 건지 감이 잡히지 않아 존재하지 않는 아이디를 입력했을 때 예외처리는 제대로 하고 있는지 자바에서 System.out.print로 찍어봤는데 "아이디 혹은 비밀번호가 맞지 않습니다"라는 문구가 아주 잘 찍히는 것을 볼 수 있었다.

 

그러면 백엔드 쪽에는 이상이 없다는 건데 왜 자꾸 로그인이 되는 건지 원인을 파악하기 위해서 프런트엔드 쪽을 뒤져봤다.

서버에서 받아오는 그 순간부터 그 데이터를 화면에 표시하는 컴포넌트까지 차례대로 console을 찍으면서 어디가 잘못되었는지 추적을 해나갔다.

아이디를 잘못 입력했을 때 백엔드에서 던지는 에러 메시지를 잘 받아오는 것까지 확인을 했고 그 에러 메시지가 store에 저장되는 것까지 파악을 했다. 근데 왜 자꾸 로그인이 되는 건지.. 의문을 갖던 중 하나 이상한 점을 발견했다.

 

스토어에 저장된 amount의  초기값이 50000원으로 되어있는 것이었다. 요구사항 중 회원가입을 완료하면 5만 원이 기본 지급이 되어야 했기에 처음에 로그인 회원가입을 구현하지 않기 때문에 편의를 위해 50000원으로 설정해놨었다. 이게 첫 번째 문제였다.

그리고 로그인에서 로그인하기 버튼을 누르면 홈으로 이동하게 해 놨는데 이것도 문제가 되었다.

accessToken이 있을 때만 홈 화면으로 이동하게 해야했는데 무조건 홈화면으로 이동하고 있었다.

 

즉, 로그인이 된 게 아니라 로그인된 것처럼 보인 것이었다. 홈 화면에 내 이름이나 아이디 같은 게 보이지 않고, 내 잔액만 보이기 때문에 어떤 아이디로 입력해도 홈 화면으로 이동 후 50,000원이 잘 나와서 로그인이 되었다고 착각을 하고 있었다.

 

 

초반에 편의를 위해 설정해놨던 잔액 값이 마지막에 내 발목을 잡을 줄은 꿈에도 몰랐다.. 이 문제 때문에 오전에 시간을 생각보다 너무 많이 썼기 때문에 목표했던 로그인 회원가입을 늦게 구현할 수 있었다. 빨리 구현하고 테스트 쪽에 더 신경을 쓰려했었는데 ㅠㅠㅠ

 

아무튼 초반에 설정해놨던 50,000원 잔액 때문에 테스트도 몇 개 깨지는 게 있는데 처리하러 가보자!