221201 TIL 관리자 페이지에서 회원 정보 불러오기

오늘의 작업 목표는 관리자 페이지에서 모든 회원 정보(아이디, 닉네임, 프로필 사진, 작성한 게시글 수, 작성한 댓글 + 대댓글 수)를 확인하고 선택한 사용자의 등급을 변경하거나 강제 탈퇴시키는 기능 그리고 사용자의 아이디를 입력하면 해당 사용자를 찾아오는 기능을 구현하는 것이었다. 

 

우선 작업 결과에 대해 먼저 말하면 계획한 기능을 모두 구현하지 못했다. 계획을 세우면서도 약간 무리하는 것 같은 느낌도 있었지만 이 정도는 해야 일정 안에 최소한의 관리자 기능은 만들 수 있을 것 같아 진행했었는데... 그래도 회원 정보를 불러오는 것과 선택한 유저의 등급을 변경하는 기능은 구현했다.

 

체크박스로 선택한 사용자의 등급을 변경하는건 이전에 마이페이지에서 선택 한 게시글이나 댓글을 지우는 갓을 구현한 적이 있었기 때문에 쉽게 구현할 수 있었다. 회원 정보를 불러오는 기능은 프론트엔드에서 회원 정보를 table 태그를 이용해 보여주는 과정에서 약간의 우여곡절이 있었지만 아래와 같이 구현할 수 있었다.

 

그러면 계획한 작업을 왜 전부 구현하지 못했는지 회고를 해보자.

No tests found for given includes

오늘 오전에 백엔드에서 테스트 코드를 작성하고 테스트를 돌리는데 No tests found for given includes이라는 에러 메시지가 나오면서 테스트를 실행시킬 수가 없었다.

처음 보는 에러였지만 당황하지 않고 바로 구글링에 들어가니 나와 같은 문제를 겪은 사람들이 해결방법을 올려놨었다.

역시 없는 게 없는 구글!! 하면서 올라와 있는 해결방법을 따라 하고 다시 테스트를 돌리는데... 여전히 테스트는 실행되지 않았다.

내가 본 해결방법은 인텔리제이에서 빌드 툴의 Run tests using항목의 gradle을 intellij로 바꾸면 해결이 된다는 의견이 대다수였지만 해결할 수 없었다.

신기한 건 테스트 파일 하나만 에러가 나오고 있었다. 다른 테스트들은 정상적으로 통과하는데 하나의 테스트만 실행조차 되지 않으니...

아무튼 동료에게 도움을 요청하고 문제를 하나씩 찾아가는데 테스트를 실행시키기 전에 클래스 이름에 오타가 있어 클래스 이름을 바꿨던 게 문제가 될 수도 있겠다는 생각을 했다. 테스트 파일을 찾을 수 없다는 것과 테스트 클래스의 이름을 바꾼 게 맞아떨어지는 상황

바로 기존의 오타가 났던 클래스명으로 다시 바꾼 뒤 테스트를 실행시키니 정상적으로 통과하는 것을 확인할 수 있었다.

그리고 다시 클래스 파일 명에 오타가 있으면 안 되니 클래스 파일명을 다시 바꿔주는데 혹시나 똑같은 문제가 발생할까 봐 아예 클래스를 지웠다가 새로 만들어주니 정상적으로 돌아가는 것을 확인할 수 있었다.

 

해당 문제를 해결하는데 이것저것 삽질하다가 1시간을 넘게 쓰다 보니 계획에 차질에 생기기 시작했다.

 

REST API

오늘은 유독 REST API 때문에 고민을 많이 했던 날이다. 관리자의  REST API를 정하는데 무엇하나 적절하다고 생각되는 게 없었다.

관리자 페이지에서 모든 회원 정보를 불러오는 기능의 REST API는 고민 끝에 생각해낸 것이 GET /admin-users이다.

admin을 붙여도 되는 것인지 고민을 했는데 붙이지 않으면 기존의 사용 중인 GET /users 가 중복이 되기 때문에 어쩔 수 없이 admin을 붙여주는 방향으로 진행했다.

관리자 기능 중 하나의 REST API에 admin을 명시해줬기 때문에 다른 어드민 관련 기능들도 모두 REST API에 admin을 명시해줘야 했다. 생각보다 REST API 하나 정하는데 고민하는 시간이 길어졌었다.

그리고 관리자의 controller, service의 이름을 정하는데도 한번 더 생각하게 되었다.

기존에 사용하던 GetUserService 같은 서비스 이름을 관리자도 사용해야 했는데 기존에 만들어져 있는 곳에 메서드를 같이 만들어서 사용하는 게 나을지 아니면 admin 패키지 안의 services 패키지를 또 만들어 어드민 만의 서비스를 만들지 고민하다 후자를 선택했다.

그런데 GetUserService의 이름이 중복되면 안 되기 때문에 어드민에서는 사용자의 정보를 가져오는 서비스의 이름을 어떤 것으로 정해야 할지 고민하다 서비스에 어드민을 명시해주는 게 어떨까 생각해서 GetUserAdminService의 이름으로 정하게 되었다.

 

아무튼 위와 같은 이유들 때문에 작업 속도가 나지 않았고 기존에 계획했던 작업들을 모두 구현하지 못하게 되었다.

내일은 오늘 다 구현하지 못한 기능들을 마저 구현하고 관리자가 게시판을 생성하는 기능을 구현해보자.!